diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 763b48ab1d9..d23cfa58283 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -90,7 +90,9 @@ apps/web/src/app/core @bitwarden/team-platform-dev apps/web/src/app/shared @bitwarden/team-platform-dev apps/web/src/translation-constants.ts @bitwarden/team-platform-dev # Workflows -.github/workflows/brew-bump-desktop.yml @bitwarden/team-platform-dev +# Any changes here should also be reflected in Renovate configuration +.github/workflows/automatic-issue-responses.yml @bitwarden/team-platform-dev +.github/workflows/automatic-pull-request-responses.yml @bitwarden/team-platform-dev .github/workflows/build-browser-target.yml @bitwarden/team-platform-dev .github/workflows/build-browser.yml @bitwarden/team-platform-dev .github/workflows/build-cli-target.yml @bitwarden/team-platform-dev @@ -100,10 +102,13 @@ apps/web/src/translation-constants.ts @bitwarden/team-platform-dev .github/workflows/build-web-target.yml @bitwarden/team-platform-dev .github/workflows/build-web.yml @bitwarden/team-platform-dev .github/workflows/chromatic.yml @bitwarden/team-platform-dev +.github/workflows/crowdin-pull.yml @bitwarden/team-platform-dev +.github/workflows/enforce-labels.yml @bitwarden/team-platform-dev .github/workflows/lint.yml @bitwarden/team-platform-dev .github/workflows/locales-lint.yml @bitwarden/team-platform-dev .github/workflows/repository-management.yml @bitwarden/team-platform-dev .github/workflows/scan.yml @bitwarden/team-platform-dev +.github/workflows/stale-bot.yml @bitwarden/team-platform-dev .github/workflows/test.yml @bitwarden/team-platform-dev .github/workflows/version-auto-bump.yml @bitwarden/team-platform-dev # ESLint custom rules @@ -152,6 +157,7 @@ apps/desktop/src/locales/en/messages.json apps/web/src/locales/en/messages.json ## BRE team owns these workflows ## +# Any changes here should also be reflected in Renovate configuration ## .github/workflows/brew-bump-desktop.yml @bitwarden/dept-bre .github/workflows/deploy-web.yml @bitwarden/dept-bre .github/workflows/publish-cli.yml @bitwarden/dept-bre @@ -159,13 +165,11 @@ apps/web/src/locales/en/messages.json .github/workflows/publish-web.yml @bitwarden/dept-bre .github/workflows/retrieve-current-desktop-rollout.yml @bitwarden/dept-bre .github/workflows/staged-rollout-desktop.yml @bitwarden/dept-bre - -## Shared ownership workflows ## -.github/workflows/release-browser.yml -.github/workflows/release-cli.yml -.github/workflows/release-desktop-beta.yml -.github/workflows/release-desktop.yml -.github/workflows/release-web.yml +.github/workflows/release-browser.yml @bitwarden/dept-bre +.github/workflows/release-cli.yml @bitwarden/dept-bre +.github/workflows/release-desktop-beta.yml @bitwarden/dept-bre +.github/workflows/release-desktop.yml @bitwarden/dept-bre +.github/workflows/release-web.yml @bitwarden/dept-bre ## Docker files have shared ownership ## **/Dockerfile diff --git a/.github/ISSUE_TEMPLATE/browser.yml b/.github/ISSUE_TEMPLATE/browser.yml index ec78f3ee555..23a0e4276bf 100644 --- a/.github/ISSUE_TEMPLATE/browser.yml +++ b/.github/ISSUE_TEMPLATE/browser.yml @@ -84,11 +84,11 @@ body: attributes: label: Browser Version description: What version of the browser(s) are you seeing the problem on? - - type: input + - type: textarea id: version attributes: - label: Build Version - description: What version of our software are you running? (go to "Settings" → "About" in the extension) + label: Environment Versions + description: Copy from "Settings" → "About" → "About Bitwarden" in the extension. Should include the extension version and server environment. validations: required: true - type: checkboxes diff --git a/.github/renovate.json5 b/.github/renovate.json5 index 6d6fbbd2539..bde87563dd1 100644 --- a/.github/renovate.json5 +++ b/.github/renovate.json5 @@ -1,41 +1,98 @@ { $schema: "https://docs.renovatebot.com/renovate-schema.json", - extends: ["github>bitwarden/renovate-config"], // Extends our base config for pinned dependencies + extends: ["github>bitwarden/renovate-config"], // Extends our default configuration for pinned dependencies enabledManagers: ["cargo", "github-actions", "npm"], packageRules: [ { + // Group all build/test/lint workflows for GitHub Actions together for Platform + // Since they are code owners we don't need to assign a review team in Renovate + // Any changes here should also be reflected in CODEOWNERS groupName: "github-action minor", matchManagers: ["github-actions"], - matchUpdateTypes: ["minor"], - }, - { - matchManagers: ["cargo"], + matchFileNames: [ + "./github/workflows/automatic-issue-responses.yml", + "./github/workflows/automatic-pull-request-responses.yml", + "./github/workflows/build-browser.yml", + "./github/workflows/build-cli.yml", + "./github/workflows/build-desktop.yml", + "./github/workflows/build-web.yml", + "./github/workflows/chromatic.yml", + "./github/workflows/crowdin-pull.yml", + "./github/workflows/enforce-labels.yml", + "./github/workflows/lint.yml", + "./github/workflows/locales-lint.yml", + "./github/workflows/repository-management.yml", + "./github/workflows/scan.yml", + "./github/workflows/stale-bot.yml", + "./github/workflows/test.yml", + "./github/workflows/version-auto-bump.yml", + ], commitMessagePrefix: "[deps] Platform:", }, { - groupName: "napi", - matchPackageNames: ["napi", "napi-build", "napi-derive"], + // Group all release-related workflows for GitHub Actions together for BRE + // Since they are code owners we don't need to assign a review team in Renovate + // Any changes here should also be reflected in CODEOWNERS + groupName: "github-action minor", + matchManagers: ["github-actions"], + matchFileNames: [ + "./github/workflows/brew-bump-desktop.yml", + "./github/workflows/deploy-web.yml", + "./github/workflows/publish-cli.yml", + "./github/workflows/publish-desktop.yml", + "./github/workflows/publish-web.yml", + "./github/workflows/retrieve-current-desktop-rollout.yml", + "./github/workflows/staged-rollout-desktop.yml", + "./github/workflows/release-cli.yml", + "./github/workflows/release-desktop-beta.yml", + "./github/workflows/release-desktop.yml", + "./github/workflows/release-web.yml", + ], + commitMessagePrefix: "[deps] BRE:", }, { + // Disable major and minor updates for TypeScript and Zone.js because they are managed by Angular matchPackageNames: ["typescript", "zone.js"], matchUpdateTypes: ["major", "minor"], description: "Determined by Angular", enabled: false, }, { + // Disable major updates for core Angular dependencies because they are managed through ng update + // when we decide to upgrade. + matchSourceUrls: [ + "https://github.com/angular-eslint/angular-eslint", + "https://github.com/angular/angular-cli", + "https://github.com/angular/angular", + "https://github.com/angular/components", + "https://github.com/ng-select/ng-select", + ], + matchUpdateTypes: ["major"], + description: "Manually updated using ng update", + enabled: false, + }, + { + // Renovate should manage patch updates for TypeScript and Zone.js, despite ignoring major and minor matchPackageNames: ["typescript", "zone.js"], matchUpdateTypes: "patch", }, { + // We want to update all the Jest-related packages together, to reduce PR noise groupName: "jest", matchPackageNames: ["@types/jest", "jest", "ts-jest", "jest-preset-angular"], - matchUpdateTypes: "major", }, { + // We need to group all napi-related packages together to avoid build errors caused by version incompatibilities + groupName: "napi", + matchPackageNames: ["napi", "napi-build", "napi-derive"], + }, + { + // We need to group all macOS/iOS binding-related packages together to avoid build errors caused by version incompatibilities groupName: "macOS/iOS bindings", matchPackageNames: ["core-foundation", "security-framework", "security-framework-sys"], }, { + // We need to group all zbus-related packages together to avoid build errors caused by version incompatibilities groupName: "zbus", matchPackageNames: ["zbus", "zbus_polkit"], }, @@ -90,12 +147,8 @@ }, { matchPackageNames: [ - "@angular-eslint/eslint-plugin-template", - "@angular-eslint/eslint-plugin", "@angular-eslint/schematics", - "@angular-eslint/template-parser", - "@typescript-eslint/eslint-plugin", - "@typescript-eslint/parser", + "angular-eslint", "eslint-config-prettier", "eslint-import-resolver-typescript", "eslint-plugin-import", @@ -106,6 +159,7 @@ "eslint", "husky", "lint-staged", + "typescript-eslint", ], groupName: "Linting minor-patch", matchUpdateTypes: ["minor", "patch"], @@ -114,11 +168,11 @@ matchPackageNames: [ "@emotion/css", "@webcomponents/custom-elements", + "bytes", "concurrently", "cross-env", "del", "lit", - "nord", "patch-package", "prettier", "prettier-plugin-tailwindcss", diff --git a/.github/workflows/build-browser.yml b/.github/workflows/build-browser.yml index b9a26f68eeb..4748a6a9f15 100644 --- a/.github/workflows/build-browser.yml +++ b/.github/workflows/build-browser.yml @@ -200,10 +200,14 @@ jobs: npm_command: "dist:edge" archive_name: "dist-edge.zip" artifact_name: "dist-edge-MV3" + - name: "firefox" + npm_command: "dist:firefox" + archive_name: "dist-firefox.zip" + artifact_name: "dist-firefox" - name: "firefox-mv3" npm_command: "dist:firefox:mv3" archive_name: "dist-firefox.zip" - artifact_name: "dist-firefox-MV3" + artifact_name: "DO-NOT-USE-FOR-PROD-dist-firefox-MV3" - name: "opera-mv3" npm_command: "dist:opera:mv3" archive_name: "dist-opera.zip" diff --git a/.github/workflows/build-cli.yml b/.github/workflows/build-cli.yml index cfbd53505af..8599a699d9d 100644 --- a/.github/workflows/build-cli.yml +++ b/.github/workflows/build-cli.yml @@ -205,6 +205,9 @@ jobs: with: ref: ${{ github.event.pull_request.head.sha }} + - name: Install AST + run: dotnet tool install --global AzureSignTool --version 4.0.1 + - name: Setup Windows builder run: | choco install checksum --no-progress @@ -273,6 +276,24 @@ jobs: ResourceHacker -open version-info.rc -save version-info.res -action compile ResourceHacker -open %WIN_PKG_BUILT% -save %WIN_PKG_BUILT% -action addoverwrite -resource version-info.res + - name: Login to Azure + if: ${{ needs.setup.outputs.has_secrets == 'true' }} + uses: Azure/login@e15b166166a8746d1a47596803bd8c1b595455cf # v1.6.0 + with: + creds: ${{ secrets.AZURE_KV_CI_SERVICE_PRINCIPAL }} + + - name: Retrieve secrets + id: retrieve-secrets + if: ${{ needs.setup.outputs.has_secrets == 'true' }} + uses: bitwarden/gh-actions/get-keyvault-secrets@main + with: + keyvault: "bitwarden-ci" + secrets: "code-signing-vault-url, + code-signing-client-id, + code-signing-tenant-id, + code-signing-client-secret, + code-signing-cert-name" + - name: Install run: npm ci working-directory: ./ @@ -300,6 +321,18 @@ jobs: - name: Build & Package Windows run: npm run dist:${{ matrix.license_type.build_prefix }}:win --quiet + - name: Sign executable + if: ${{ needs.setup.outputs.has_secrets == 'true' }} + shell: pwsh + env: + SIGNING_VAULT_URL: ${{ steps.retrieve-secrets.outputs.code-signing-vault-url }} + SIGNING_CLIENT_ID: ${{ steps.retrieve-secrets.outputs.code-signing-client-id }} + SIGNING_TENANT_ID: ${{ steps.retrieve-secrets.outputs.code-signing-tenant-id }} + SIGNING_CLIENT_SECRET: ${{ steps.retrieve-secrets.outputs.code-signing-client-secret }} + SIGNING_CERT_NAME: ${{ steps.retrieve-secrets.outputs.code-signing-cert-name }} + EXE_PATH: dist/${{ matrix.license_type.build_prefix }}/windows/bw.exe + run: . .\scripts\sign-cli.ps1 + - name: Package Chocolatey shell: pwsh if: ${{ matrix.license_type.build_prefix == 'bit' }} diff --git a/.github/workflows/build-desktop.yml b/.github/workflows/build-desktop.yml index 23722e7c7df..c65366c7796 100644 --- a/.github/workflows/build-desktop.yml +++ b/.github/workflows/build-desktop.yml @@ -392,8 +392,7 @@ jobs: run: node build.js cross-platform - name: Build - run: | - npm run build + run: npm run build - name: Pack if: ${{ needs.setup.outputs.has_secrets == 'false' }} diff --git a/.github/workflows/release-cli.yml b/.github/workflows/release-cli.yml index 6a10bec1ba2..519fee1989b 100644 --- a/.github/workflows/release-cli.yml +++ b/.github/workflows/release-cli.yml @@ -83,8 +83,12 @@ jobs: apps/cli/bw-windows-sha256-${{ env.PKG_VERSION }}.txt, apps/cli/bw-oss-macos-${{ env.PKG_VERSION }}.zip, apps/cli/bw-oss-macos-sha256-${{ env.PKG_VERSION }}.txt, + apps/cli/bw-oss-macos-arm64-${{ env.PKG_VERSION }}.zip, + apps/cli/bw-oss-macos-arm64-sha256-${{ env.PKG_VERSION }}.txt, apps/cli/bw-macos-${{ env.PKG_VERSION }}.zip, apps/cli/bw-macos-sha256-${{ env.PKG_VERSION }}.txt, + apps/cli/bw-macos-arm64-${{ env.PKG_VERSION }}.zip, + apps/cli/bw-macos-arm64-sha256-${{ env.PKG_VERSION }}.txt, apps/cli/bw-oss-linux-${{ env.PKG_VERSION }}.zip, apps/cli/bw-oss-linux-sha256-${{ env.PKG_VERSION }}.txt, apps/cli/bw-linux-${{ env.PKG_VERSION }}.zip, diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 8c214b99ed3..0b039315b30 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -11,28 +11,10 @@ on: types: [opened, synchronize] jobs: - check-test-secrets: - name: Check for test secrets - runs-on: ubuntu-22.04 - outputs: - available: ${{ steps.check-test-secrets.outputs.available }} - permissions: - contents: read - - steps: - - name: Check - id: check-test-secrets - run: | - if [ "${{ secrets.CODECOV_TOKEN }}" != '' ]; then - echo "available=true" >> $GITHUB_OUTPUT; - else - echo "available=false" >> $GITHUB_OUTPUT; - fi testing: name: Run tests runs-on: ubuntu-22.04 - needs: check-test-secrets permissions: checks: write contents: read @@ -77,7 +59,7 @@ jobs: - name: Report test results uses: dorny/test-reporter@31a54ee7ebcacc03a09ea97a7e5465a47b84aea5 # v1.9.1 - if: ${{ needs.check-test-secrets.outputs.available == 'true' && !cancelled() }} + if: ${{ github.event.pull_request.head.repo.full_name == github.repository && !cancelled() }} with: name: Test Results path: "junit.xml" @@ -89,7 +71,6 @@ jobs: - name: Upload results to codecov.io uses: codecov/test-results-action@4e79e65778be1cecd5df25e14af1eafb6df80ea9 # v1.0.2 - if: ${{ needs.check-test-secrets.outputs.available == 'true' }} env: CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} @@ -152,7 +133,7 @@ jobs: uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: Install rust - uses: dtolnay/rust-toolchain@a54c7afa936fefeb4456b2dd8068152669aa8203 # stable + uses: dtolnay/rust-toolchain@c5a29ddb4d9d194e7c84ec8c3fba61b1c31fee8c # stable with: toolchain: stable components: llvm-tools diff --git a/apps/browser/package.json b/apps/browser/package.json index 69f6bb2f89f..e3bccf3f0df 100644 --- a/apps/browser/package.json +++ b/apps/browser/package.json @@ -1,11 +1,11 @@ { "name": "@bitwarden/browser", - "version": "2025.2.2", + "version": "2025.3.0", "scripts": { "build": "npm run build:chrome", "build:chrome": "cross-env BROWSER=chrome MANIFEST_VERSION=3 NODE_OPTIONS=\"--max-old-space-size=8192\" webpack", "build:edge": "cross-env BROWSER=edge MANIFEST_VERSION=3 NODE_OPTIONS=\"--max-old-space-size=8192\" webpack", - "build:firefox": "cross-env BROWSER=firefox MANIFEST_VERSION=3 NODE_OPTIONS=\"--max-old-space-size=8192\" webpack", + "build:firefox": "cross-env BROWSER=firefox NODE_OPTIONS=\"--max-old-space-size=8192\" webpack", "build:opera": "cross-env BROWSER=opera MANIFEST_VERSION=3 NODE_OPTIONS=\"--max-old-space-size=8192\" webpack", "build:safari": "cross-env BROWSER=safari NODE_OPTIONS=\"--max-old-space-size=8192\" webpack", "build:watch": "npm run build:watch:chrome", diff --git a/apps/browser/postcss.config.js b/apps/browser/postcss.config.js index a4dee9d4362..5657df3afcf 100644 --- a/apps/browser/postcss.config.js +++ b/apps/browser/postcss.config.js @@ -1,4 +1,4 @@ -/* eslint-disable no-undef, @typescript-eslint/no-require-imports */ +/* eslint-disable @typescript-eslint/no-require-imports */ module.exports = { plugins: [ require("postcss-import"), diff --git a/apps/browser/src/_locales/ar/messages.json b/apps/browser/src/_locales/ar/messages.json index c8197b36e73..bd05d6eb3cd 100644 --- a/apps/browser/src/_locales/ar/messages.json +++ b/apps/browser/src/_locales/ar/messages.json @@ -80,6 +80,15 @@ "masterPassHint": { "message": "تلميح كلمة المرور الرئيسية (إختياري)" }, + "passwordStrengthScore": { + "message": "Password strength score $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "joinOrganization": { "message": "انضم إلى المنظمة" }, @@ -470,22 +479,6 @@ "length": { "message": "الطول" }, - "uppercase": { - "message": "أحرف كبيرة (من A إلى Z)", - "description": "deprecated. Use uppercaseLabel instead." - }, - "lowercase": { - "message": "أحرف كبيرة (من a إلى z)", - "description": "deprecated. Use lowercaseLabel instead." - }, - "numbers": { - "message": "الأرقام (من 0 الى 9)", - "description": "deprecated. Use numbersLabel instead." - }, - "specialCharacters": { - "message": "الأحرف الخاصة (!@#$%^&*)", - "description": "deprecated. Use specialCharactersLabel instead." - }, "include": { "message": "تضمين", "description": "Card header for password generator include block" @@ -518,10 +511,6 @@ "message": "تضمين أحرف خاصة", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "numWords": { "message": "عدد الكلمات" }, @@ -660,8 +649,8 @@ "browserNotSupportClipboard": { "message": "متصفح الويب الخاص بك لا يدعم خاصية النسخ السهل. يرجى استخدام النسخ اليدوي." }, - "verifyIdentity": { - "message": "قم بتأكيد هويتك" + "verifyYourIdentity": { + "message": "Verify your identity" }, "weDontRecognizeThisDevice": { "message": "We don't recognize this device. Enter the code sent to your email to verify your identity." @@ -876,6 +865,21 @@ "logInToBitwarden": { "message": "تسجيل الدخول إلى Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "Enter the code sent to your email" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Enter the code from your authenticator app" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Press your YubiKey to authenticate" + }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Duo two-step login is required for your account. Follow the steps below to finish logging in." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Follow the steps below to finish logging in." + }, "restartRegistration": { "message": "إعادة التسجيل" }, @@ -897,6 +901,9 @@ "no": { "message": "لا" }, + "location": { + "message": "Location" + }, "unexpectedError": { "message": "حدث خطأ غير متوقع." }, @@ -1046,6 +1053,56 @@ "notificationAddSave": { "message": "حفظ" }, + "loginSaveSuccessDetails": { + "message": "$USERNAME$ saved to Bitwarden.", + "placeholders": { + "username": { + "content": "$1" + } + }, + "description": "Shown to user after login is saved." + }, + "loginUpdatedSuccessDetails": { + "message": "$USERNAME$ updated in Bitwarden.", + "placeholders": { + "username": { + "content": "$1" + } + }, + "description": "Shown to user after login is updated." + }, + "saveAsNewLoginAction": { + "message": "Save as new login", + "description": "Button text for saving login details as a new entry." + }, + "updateLoginAction": { + "message": "Update login", + "description": "Button text for updating an existing login entry." + }, + "saveLoginPrompt": { + "message": "Save login?", + "description": "Prompt asking the user if they want to save their login details." + }, + "updateLoginPrompt": { + "message": "Update existing login?", + "description": "Prompt asking the user if they want to update an existing login entry." + }, + "loginSaveSuccess": { + "message": "Login saved", + "description": "Message displayed when login details are successfully saved." + }, + "loginUpdateSuccess": { + "message": "Login updated", + "description": "Message displayed when login details are successfully updated." + }, + "saveFailure": { + "message": "Error saving", + "description": "Error message shown when the system fails to save login details." + }, + "saveFailureDetails": { + "message": "Oh no! We couldn't save this. Try entering the details manually.", + "description": "Detailed error message shown when saving login details fails." + }, "enableChangedPasswordNotification": { "message": "اسأل عن تحديث تسجيل الدخول الحالي" }, @@ -1365,12 +1422,22 @@ "rememberMe": { "message": "تذكرني" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Don't ask again on this device for 30 days" + }, "sendVerificationCodeEmailAgain": { "message": "إرسال رمز التحقق إلى البريد الإلكتروني مرة أخرى" }, "useAnotherTwoStepMethod": { "message": "استخدام طريقة أخرى لتسجيل الدخول بخطوتين" }, + "selectAnotherMethod": { + "message": "Select another method", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Use your recovery code" + }, "insertYubiKey": { "message": "أدخل YubiKey الخاص بك في منفذ USB في كمبيوترك، ثم المس الزر." }, @@ -1383,9 +1450,18 @@ "webAuthnNewTabOpen": { "message": "فتح علامة تبويب جديدة" }, + "openInNewTab": { + "message": "Open in new tab" + }, "webAuthnAuthenticate": { "message": "مصادقة WebAuthn" }, + "readSecurityKey": { + "message": "Read security key" + }, + "awaitingSecurityKeyInteraction": { + "message": "Awaiting security key interaction..." + }, "loginUnavailable": { "message": "تسجيل الدخول غير متاح" }, @@ -1398,6 +1474,9 @@ "twoStepOptions": { "message": "خيارات تسجيل الدخول بخطوتين" }, + "selectTwoStepLoginMethod": { + "message": "Select two-step login method" + }, "recoveryCodeDesc": { "message": "هل تفقد الوصول إلى جميع مزودي التحقق بعاملين؟ استخدم رمز الاسترداد الخاص بك لتعطيل جميع مزودي التحقق بعاملين من حسابك." }, @@ -2097,6 +2176,15 @@ "vaultTimeoutAction1": { "message": "Timeout action" }, + "newCustomizationOptionsCalloutTitle": { + "message": "New customization options" + }, + "newCustomizationOptionsCalloutContent": { + "message": "Customize your vault experience with quick copy actions, compact mode, and more!" + }, + "newCustomizationOptionsCalloutLink": { + "message": "View all Appearance settings" + }, "lock": { "message": "قفل", "description": "Verb form: to make secure or inaccessible by" @@ -2391,8 +2479,17 @@ "atRiskPasswords": { "message": "At-risk passwords" }, - "atRiskPasswordsDescSingleOrg": { - "message": "$ORGANIZATION$ is requesting you change the $COUNT$ passwords because they are at risk.", + "atRiskPasswordDescSingleOrg": { + "message": "$ORGANIZATION$ is requesting you change one password because it is at-risk.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + } + }, + "atRiskPasswordsDescSingleOrgPlural": { + "message": "$ORGANIZATION$ is requesting you change the $COUNT$ passwords because they are at-risk.", "placeholders": { "organization": { "content": "$1", @@ -2404,8 +2501,8 @@ } } }, - "atRiskPasswordsDescMultiOrg": { - "message": "Your organizations are requesting you change the $COUNT$ passwords because they are at risk.", + "atRiskPasswordsDescMultiOrgPlural": { + "message": "Your organizations are requesting you change the $COUNT$ passwords because they are at-risk.", "placeholders": { "count": { "content": "$1", @@ -2431,6 +2528,36 @@ "changeAtRiskPasswordsFasterDesc": { "message": "Update your settings so you can quickly autofill your passwords and generate new ones" }, + "reviewAtRiskLogins": { + "message": "Review at-risk logins" + }, + "reviewAtRiskPasswords": { + "message": "Review at-risk passwords" + }, + "reviewAtRiskLoginsSlideDesc": { + "message": "Your organization passwords are at-risk because they are weak, reused, and/or exposed.", + "description": "Description of the review at-risk login slide on the at-risk password page carousel" + }, + "reviewAtRiskLoginSlideImgAlt": { + "message": "Illustration of a list of logins that are at-risk" + }, + "generatePasswordSlideDesc": { + "message": "Quickly generate a strong, unique password with the Bitwarden autofill menu on the at-risk site.", + "description": "Description of the generate password slide on the at-risk password page carousel" + }, + "generatePasswordSlideImgAlt": { + "message": "Illustration of the Bitwarden autofill menu displaying a generated password" + }, + "updateInBitwarden": { + "message": "Update in Bitwarden" + }, + "updateInBitwardenSlideDesc": { + "message": "Bitwarden will then prompt you to update the password in the password manager.", + "description": "Description of the update in Bitwarden slide on the at-risk password page carousel" + }, + "updateInBitwardenSlideImgAlt": { + "message": "Illustration of a Bitwarden’s notification prompting the user to update the login" + }, "turnOnAutofill": { "message": "Turn on autofill" }, @@ -3983,6 +4110,9 @@ "activeAccount": { "message": "Active account" }, + "bitwardenAccount": { + "message": "Bitwarden account" + }, "availableAccounts": { "message": "Available accounts" }, @@ -4181,6 +4311,20 @@ } } }, + "copyFieldValue": { + "message": "Copy $FIELD$, $VALUE$", + "description": "Title for a button that copies a field value to the clipboard.", + "placeholders": { + "field": { + "content": "$1", + "example": "Username" + }, + "value": { + "content": "$2", + "example": "Foo" + } + } + }, "noValuesToCopy": { "message": "No values to copy" }, @@ -5002,5 +5146,8 @@ }, "updateDesktopAppOrDisableFingerprintDialogMessage": { "message": "To use biometric unlock, please update your desktop application, or disable fingerprint unlock in the desktop settings." + }, + "changeAtRiskPassword": { + "message": "Change at-risk password" } } diff --git a/apps/browser/src/_locales/az/messages.json b/apps/browser/src/_locales/az/messages.json index 75946a57dc2..1036fe27422 100644 --- a/apps/browser/src/_locales/az/messages.json +++ b/apps/browser/src/_locales/az/messages.json @@ -80,6 +80,15 @@ "masterPassHint": { "message": "Ana parol ipucu (ixtiyari)" }, + "passwordStrengthScore": { + "message": "Parolun güc xalı: $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "joinOrganization": { "message": "Təşkilata qoşul" }, @@ -470,22 +479,6 @@ "length": { "message": "Uzunluq" }, - "uppercase": { - "message": "Böyük hərf (A-Z)", - "description": "deprecated. Use uppercaseLabel instead." - }, - "lowercase": { - "message": "Kiçik hərf (a-z)", - "description": "deprecated. Use lowercaseLabel instead." - }, - "numbers": { - "message": "Rəqəmlər (0-9)", - "description": "deprecated. Use numbersLabel instead." - }, - "specialCharacters": { - "message": "Xüsusi simvollar (!@#$%^&*)", - "description": "deprecated. Use specialCharactersLabel instead." - }, "include": { "message": "Daxil et", "description": "Card header for password generator include block" @@ -518,10 +511,6 @@ "message": "Xüsusi xarakterləri daxil et", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "numWords": { "message": "Söz sayı" }, @@ -660,8 +649,8 @@ "browserNotSupportClipboard": { "message": "Veb brauzeriniz lövhəyə kopyalamağı dəstəkləmir. Əvəzində əllə kopyalayın." }, - "verifyIdentity": { - "message": "Kimliyi doğrula" + "verifyYourIdentity": { + "message": "Kimliyinizi doğrulayın" }, "weDontRecognizeThisDevice": { "message": "Bu cihazı tanımırıq. Kimliyinizi doğrulamaq üçün e-poçtunuza göndərilən kodu daxil edin." @@ -876,6 +865,21 @@ "logInToBitwarden": { "message": "Bitwarden-ə giriş edin" }, + "enterTheCodeSentToYourEmail": { + "message": "E-poçtunuza göndərilən kodu daxil edin" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Kimlik doğrulayıcı tətbiqinizdəki kodu daxil edin" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Kimliyi doğrulamaq üçün YubiKey-inizə basın" + }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Hesabınız üçün Duo iki addımlı giriş tələb olunur. Giriş prosesini tamamlamaq üçün aşağıdakı addımları izləyin." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Giriş prosesini tamamlamaq üçün aşağıdakı addımları izləyin." + }, "restartRegistration": { "message": "Qeydiyyatı yenidən başlat" }, @@ -897,6 +901,9 @@ "no": { "message": "Xeyr" }, + "location": { + "message": "Yerləşmə" + }, "unexpectedError": { "message": "Gözlənilməz bir xəta baş verdi." }, @@ -1046,6 +1053,56 @@ "notificationAddSave": { "message": "Saxla" }, + "loginSaveSuccessDetails": { + "message": "$USERNAME$ Bitwarden-də saxlanıldı.", + "placeholders": { + "username": { + "content": "$1" + } + }, + "description": "Shown to user after login is saved." + }, + "loginUpdatedSuccessDetails": { + "message": "$USERNAME$ Bitwarden-də güncəlləndi.", + "placeholders": { + "username": { + "content": "$1" + } + }, + "description": "Shown to user after login is updated." + }, + "saveAsNewLoginAction": { + "message": "Yeni giriş kimi saxla", + "description": "Button text for saving login details as a new entry." + }, + "updateLoginAction": { + "message": "Giriş məlumatlarını güncəllə", + "description": "Button text for updating an existing login entry." + }, + "saveLoginPrompt": { + "message": "Giriş məlumatları saxlanılsın?", + "description": "Prompt asking the user if they want to save their login details." + }, + "updateLoginPrompt": { + "message": "Mövcud giriş məlumatları güncəllənsin?", + "description": "Prompt asking the user if they want to update an existing login entry." + }, + "loginSaveSuccess": { + "message": "Giriş məlumatları saxlanıldı", + "description": "Message displayed when login details are successfully saved." + }, + "loginUpdateSuccess": { + "message": "Giriş məlumatları güncəlləndi", + "description": "Message displayed when login details are successfully updated." + }, + "saveFailure": { + "message": "Saxlama xətası", + "description": "Error message shown when the system fails to save login details." + }, + "saveFailureDetails": { + "message": "Bunu saxlaya bilmədik. Məlumatları manual daxil etməyə çalışın.", + "description": "Detailed error message shown when saving login details fails." + }, "enableChangedPasswordNotification": { "message": "Mövcud girişin güncəllənməsini soruş" }, @@ -1365,12 +1422,22 @@ "rememberMe": { "message": "Məni xatırla" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Bu cihazda 30 gün ərzində soruşulmasın" + }, "sendVerificationCodeEmailAgain": { "message": "Doğrulama kodu olan e-poçtu yenidən göndər" }, "useAnotherTwoStepMethod": { "message": "Başqa bir iki addımlı giriş üsulu istifadə edin" }, + "selectAnotherMethod": { + "message": "Başqa üsul seçin", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Geri qaytarma kodunuzu istifadə edin" + }, "insertYubiKey": { "message": "\"YubiKey\"i kompüterinizin USB portuna taxın, daha sonra düyməsinə toxunun." }, @@ -1383,9 +1450,18 @@ "webAuthnNewTabOpen": { "message": "Yeni vərəq aç" }, + "openInNewTab": { + "message": "Yeni vərəqdə aç" + }, "webAuthnAuthenticate": { "message": "WebAuthn kimlik doğrulama" }, + "readSecurityKey": { + "message": "Güvənlik açarını oxu" + }, + "awaitingSecurityKeyInteraction": { + "message": "Güvənlik açarı ilə əlaqə gözlənilir..." + }, "loginUnavailable": { "message": "Giriş edilə bilmir" }, @@ -1398,6 +1474,9 @@ "twoStepOptions": { "message": "İki addımlı giriş seçimləri" }, + "selectTwoStepLoginMethod": { + "message": "İki addımlı giriş üsulunu seçin" + }, "recoveryCodeDesc": { "message": "İki faktorlu provayderlərinə müraciəti itirmisiniz? Geri qaytarma kodunuzu istifadə edərək hesabınızdakı bütün iki faktorlu provayderləri sıradan çıxarda bilərsiniz." }, @@ -2097,6 +2176,15 @@ "vaultTimeoutAction1": { "message": "Vaxt bitmə əməliyyatı" }, + "newCustomizationOptionsCalloutTitle": { + "message": "Yeni özəlləşdirmə seçimləri" + }, + "newCustomizationOptionsCalloutContent": { + "message": "Cəld kopyalama fəaliyyəti, yığcam rejim və daha çoxu ilə seyf təcrübənizi özəlləşdirin!" + }, + "newCustomizationOptionsCalloutLink": { + "message": "Bütün Görünüş ayarlarına bax" + }, "lock": { "message": "Kilidlə", "description": "Verb form: to make secure or inaccessible by" @@ -2391,7 +2479,16 @@ "atRiskPasswords": { "message": "Riskli parollar" }, - "atRiskPasswordsDescSingleOrg": { + "atRiskPasswordDescSingleOrg": { + "message": "$ORGANIZATION$, sizdən bir parolu dəyişdirməyinizi tələb edir, çünki risk altındadır.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + } + }, + "atRiskPasswordsDescSingleOrgPlural": { "message": "$ORGANIZATION$, sizdən $COUNT$ parolu dəyişdirməyinizi tələb edir, çünki risk altındadır.", "placeholders": { "organization": { @@ -2404,7 +2501,7 @@ } } }, - "atRiskPasswordsDescMultiOrg": { + "atRiskPasswordsDescMultiOrgPlural": { "message": "Təşkilatlarınız, sizdən $COUNT$ parolu dəyişdirməyinizi tələb edir, çünki risk altındadır.", "placeholders": { "count": { @@ -2431,6 +2528,36 @@ "changeAtRiskPasswordsFasterDesc": { "message": "Cəld şəkildə parollarınızı avto-doldura və yenilərini yarada bilməyiniz üçün ayarlarınızı güncəlləyin" }, + "reviewAtRiskLogins": { + "message": "Risk altındakı giriş məlumatlarını incələ" + }, + "reviewAtRiskPasswords": { + "message": "Risk altındakı parolları incələ" + }, + "reviewAtRiskLoginsSlideDesc": { + "message": "Təşkilatınız parolları zəif, təkrar istifadə olunduğu və/və ya ifşa olunduğu üçün risk altındadır.", + "description": "Description of the review at-risk login slide on the at-risk password page carousel" + }, + "reviewAtRiskLoginSlideImgAlt": { + "message": "Risk altındakı girişlərin olduğu siyahının təsviri" + }, + "generatePasswordSlideDesc": { + "message": "Risk altında olan saytda Bitwarden avto-doldurma menyusu ilə güclü, unikal parolları cəld yaradın.", + "description": "Description of the generate password slide on the at-risk password page carousel" + }, + "generatePasswordSlideImgAlt": { + "message": "Yaradılan parolları göstərən Bitwarden avto-doldurma menyusunun təsviri" + }, + "updateInBitwarden": { + "message": "Bitwarden-də güncəllə" + }, + "updateInBitwardenSlideDesc": { + "message": "Bitwarden, daha sonra parol menecerində parolu güncəlləməyinizi istəyəcək.", + "description": "Description of the update in Bitwarden slide on the at-risk password page carousel" + }, + "updateInBitwardenSlideImgAlt": { + "message": "İstifadəçidən giriş məlumatlarını güncəlləməsini istəyən Bitwarden bildirişinin təsviri" + }, "turnOnAutofill": { "message": "Avto-doldurmanı işə sal" }, @@ -3983,6 +4110,9 @@ "activeAccount": { "message": "Aktiv hesab" }, + "bitwardenAccount": { + "message": "Bitwarden hesabı" + }, "availableAccounts": { "message": "Mövcud hesablar" }, @@ -4181,6 +4311,20 @@ } } }, + "copyFieldValue": { + "message": "Kopyala: $FIELD$, $VALUE$", + "description": "Title for a button that copies a field value to the clipboard.", + "placeholders": { + "field": { + "content": "$1", + "example": "Username" + }, + "value": { + "content": "$2", + "example": "Foo" + } + } + }, "noValuesToCopy": { "message": "Kopyalanacaq dəyər yoxdur" }, @@ -5002,5 +5146,8 @@ }, "updateDesktopAppOrDisableFingerprintDialogMessage": { "message": "Biometrik kilid açmanı istifadə etmək üçün lütfən masaüstü tətbiqinizi güncəlləyin, ya da masaüstü ayarlarında barmaq izi ilə kilid açmanı sıradan çıxardın." + }, + "changeAtRiskPassword": { + "message": "Riskli parolları dəyişdir" } } diff --git a/apps/browser/src/_locales/be/messages.json b/apps/browser/src/_locales/be/messages.json index dad2b89d25f..224e6ed9cc2 100644 --- a/apps/browser/src/_locales/be/messages.json +++ b/apps/browser/src/_locales/be/messages.json @@ -80,6 +80,15 @@ "masterPassHint": { "message": "Падказка да асноўнага пароля (неабавязкова)" }, + "passwordStrengthScore": { + "message": "Password strength score $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "joinOrganization": { "message": "Далучыцца да арганізацыі" }, @@ -470,22 +479,6 @@ "length": { "message": "Даўжыня" }, - "uppercase": { - "message": "Вялікія літары (A-Z)", - "description": "deprecated. Use uppercaseLabel instead." - }, - "lowercase": { - "message": "Маленькія літары (a-z)", - "description": "deprecated. Use lowercaseLabel instead." - }, - "numbers": { - "message": "Лічбы (0-9)", - "description": "deprecated. Use numbersLabel instead." - }, - "specialCharacters": { - "message": "Спецыяльныя сімвалы (!@#$%^&*)", - "description": "deprecated. Use specialCharactersLabel instead." - }, "include": { "message": "Уключыць", "description": "Card header for password generator include block" @@ -518,10 +511,6 @@ "message": "Уключыце спецыяльныя сімвалы", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "numWords": { "message": "Колькасць слоў" }, @@ -660,8 +649,8 @@ "browserNotSupportClipboard": { "message": "Ваш вэб-браўзер не падтрымлівае капіяванне даных у буфер абмену. Скапіюйце іх уручную." }, - "verifyIdentity": { - "message": "Праверыць асобу" + "verifyYourIdentity": { + "message": "Verify your identity" }, "weDontRecognizeThisDevice": { "message": "We don't recognize this device. Enter the code sent to your email to verify your identity." @@ -876,6 +865,21 @@ "logInToBitwarden": { "message": "Увайсці ў Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "Enter the code sent to your email" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Enter the code from your authenticator app" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Press your YubiKey to authenticate" + }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Duo two-step login is required for your account. Follow the steps below to finish logging in." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Follow the steps below to finish logging in." + }, "restartRegistration": { "message": "Restart registration" }, @@ -897,6 +901,9 @@ "no": { "message": "Не" }, + "location": { + "message": "Location" + }, "unexpectedError": { "message": "Адбылася нечаканая памылка." }, @@ -1046,6 +1053,56 @@ "notificationAddSave": { "message": "Захаваць" }, + "loginSaveSuccessDetails": { + "message": "$USERNAME$ saved to Bitwarden.", + "placeholders": { + "username": { + "content": "$1" + } + }, + "description": "Shown to user after login is saved." + }, + "loginUpdatedSuccessDetails": { + "message": "$USERNAME$ updated in Bitwarden.", + "placeholders": { + "username": { + "content": "$1" + } + }, + "description": "Shown to user after login is updated." + }, + "saveAsNewLoginAction": { + "message": "Save as new login", + "description": "Button text for saving login details as a new entry." + }, + "updateLoginAction": { + "message": "Update login", + "description": "Button text for updating an existing login entry." + }, + "saveLoginPrompt": { + "message": "Save login?", + "description": "Prompt asking the user if they want to save their login details." + }, + "updateLoginPrompt": { + "message": "Update existing login?", + "description": "Prompt asking the user if they want to update an existing login entry." + }, + "loginSaveSuccess": { + "message": "Login saved", + "description": "Message displayed when login details are successfully saved." + }, + "loginUpdateSuccess": { + "message": "Login updated", + "description": "Message displayed when login details are successfully updated." + }, + "saveFailure": { + "message": "Error saving", + "description": "Error message shown when the system fails to save login details." + }, + "saveFailureDetails": { + "message": "Oh no! We couldn't save this. Try entering the details manually.", + "description": "Detailed error message shown when saving login details fails." + }, "enableChangedPasswordNotification": { "message": "Пытацца пра абнаўленні існуючага лагіна" }, @@ -1365,12 +1422,22 @@ "rememberMe": { "message": "Запомніць мяне" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Don't ask again on this device for 30 days" + }, "sendVerificationCodeEmailAgain": { "message": "Адправіць праверачны код яшчэ раз" }, "useAnotherTwoStepMethod": { "message": "Выкарыстоўваць іншы метад двухэтапнага ўваходу" }, + "selectAnotherMethod": { + "message": "Select another method", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Use your recovery code" + }, "insertYubiKey": { "message": "Устаўце свой YubiKey у порт USB камп'ютара, а потым націсніце на кнопку." }, @@ -1383,9 +1450,18 @@ "webAuthnNewTabOpen": { "message": "Адкрыць новую ўкладку" }, + "openInNewTab": { + "message": "Open in new tab" + }, "webAuthnAuthenticate": { "message": "Аўтэнтыфікацыя WebAuthn" }, + "readSecurityKey": { + "message": "Read security key" + }, + "awaitingSecurityKeyInteraction": { + "message": "Awaiting security key interaction..." + }, "loginUnavailable": { "message": "Уваход недаступны" }, @@ -1398,6 +1474,9 @@ "twoStepOptions": { "message": "Параметры двухэтапнага ўваходу" }, + "selectTwoStepLoginMethod": { + "message": "Select two-step login method" + }, "recoveryCodeDesc": { "message": "Згубілі доступ да ўсіх варыянтаў доступу пастаўшчыкоў двухэтапнай аўтэнтыфікацыі? Скарыстайцеся кодам аднаўлення, каб адключыць праверку пастаўшчыкоў двухэтапнай аўтэнтыфікацыі для вашага ўліковага запісу." }, @@ -2097,6 +2176,15 @@ "vaultTimeoutAction1": { "message": "Timeout action" }, + "newCustomizationOptionsCalloutTitle": { + "message": "New customization options" + }, + "newCustomizationOptionsCalloutContent": { + "message": "Customize your vault experience with quick copy actions, compact mode, and more!" + }, + "newCustomizationOptionsCalloutLink": { + "message": "View all Appearance settings" + }, "lock": { "message": "Заблакіраваць", "description": "Verb form: to make secure or inaccessible by" @@ -2391,8 +2479,17 @@ "atRiskPasswords": { "message": "At-risk passwords" }, - "atRiskPasswordsDescSingleOrg": { - "message": "$ORGANIZATION$ is requesting you change the $COUNT$ passwords because they are at risk.", + "atRiskPasswordDescSingleOrg": { + "message": "$ORGANIZATION$ is requesting you change one password because it is at-risk.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + } + }, + "atRiskPasswordsDescSingleOrgPlural": { + "message": "$ORGANIZATION$ is requesting you change the $COUNT$ passwords because they are at-risk.", "placeholders": { "organization": { "content": "$1", @@ -2404,8 +2501,8 @@ } } }, - "atRiskPasswordsDescMultiOrg": { - "message": "Your organizations are requesting you change the $COUNT$ passwords because they are at risk.", + "atRiskPasswordsDescMultiOrgPlural": { + "message": "Your organizations are requesting you change the $COUNT$ passwords because they are at-risk.", "placeholders": { "count": { "content": "$1", @@ -2431,6 +2528,36 @@ "changeAtRiskPasswordsFasterDesc": { "message": "Update your settings so you can quickly autofill your passwords and generate new ones" }, + "reviewAtRiskLogins": { + "message": "Review at-risk logins" + }, + "reviewAtRiskPasswords": { + "message": "Review at-risk passwords" + }, + "reviewAtRiskLoginsSlideDesc": { + "message": "Your organization passwords are at-risk because they are weak, reused, and/or exposed.", + "description": "Description of the review at-risk login slide on the at-risk password page carousel" + }, + "reviewAtRiskLoginSlideImgAlt": { + "message": "Illustration of a list of logins that are at-risk" + }, + "generatePasswordSlideDesc": { + "message": "Quickly generate a strong, unique password with the Bitwarden autofill menu on the at-risk site.", + "description": "Description of the generate password slide on the at-risk password page carousel" + }, + "generatePasswordSlideImgAlt": { + "message": "Illustration of the Bitwarden autofill menu displaying a generated password" + }, + "updateInBitwarden": { + "message": "Update in Bitwarden" + }, + "updateInBitwardenSlideDesc": { + "message": "Bitwarden will then prompt you to update the password in the password manager.", + "description": "Description of the update in Bitwarden slide on the at-risk password page carousel" + }, + "updateInBitwardenSlideImgAlt": { + "message": "Illustration of a Bitwarden’s notification prompting the user to update the login" + }, "turnOnAutofill": { "message": "Turn on autofill" }, @@ -3983,6 +4110,9 @@ "activeAccount": { "message": "Active account" }, + "bitwardenAccount": { + "message": "Bitwarden account" + }, "availableAccounts": { "message": "Available accounts" }, @@ -4181,6 +4311,20 @@ } } }, + "copyFieldValue": { + "message": "Copy $FIELD$, $VALUE$", + "description": "Title for a button that copies a field value to the clipboard.", + "placeholders": { + "field": { + "content": "$1", + "example": "Username" + }, + "value": { + "content": "$2", + "example": "Foo" + } + } + }, "noValuesToCopy": { "message": "No values to copy" }, @@ -5002,5 +5146,8 @@ }, "updateDesktopAppOrDisableFingerprintDialogMessage": { "message": "To use biometric unlock, please update your desktop application, or disable fingerprint unlock in the desktop settings." + }, + "changeAtRiskPassword": { + "message": "Change at-risk password" } } diff --git a/apps/browser/src/_locales/bg/messages.json b/apps/browser/src/_locales/bg/messages.json index a60f68b9f7b..59da9af636c 100644 --- a/apps/browser/src/_locales/bg/messages.json +++ b/apps/browser/src/_locales/bg/messages.json @@ -80,6 +80,15 @@ "masterPassHint": { "message": "Подсказване за главната парола (по избор)" }, + "passwordStrengthScore": { + "message": "Оценка на сложността на паролата: $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "joinOrganization": { "message": "Присъединяване към организацията" }, @@ -470,22 +479,6 @@ "length": { "message": "Дължина" }, - "uppercase": { - "message": "Главни букви (A-Z)", - "description": "deprecated. Use uppercaseLabel instead." - }, - "lowercase": { - "message": "Малки букви (a-z)", - "description": "deprecated. Use lowercaseLabel instead." - }, - "numbers": { - "message": "Числа (0-9)", - "description": "deprecated. Use numbersLabel instead." - }, - "specialCharacters": { - "message": "Специални знаци (!@#$%^&*)", - "description": "deprecated. Use specialCharactersLabel instead." - }, "include": { "message": "Включване", "description": "Card header for password generator include block" @@ -518,10 +511,6 @@ "message": "Включване на специални знаци", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "numWords": { "message": "Брой думи" }, @@ -660,8 +649,8 @@ "browserNotSupportClipboard": { "message": "Браузърът не поддържа копиране в буфера, затова копирайте на ръка." }, - "verifyIdentity": { - "message": "Потвърждаване на самоличността" + "verifyYourIdentity": { + "message": "Потвърдете самоличността си" }, "weDontRecognizeThisDevice": { "message": "Това устройство е непознато. Въведете кода изпратен на е-пощата Ви, за да потвърдите самоличността си." @@ -876,6 +865,21 @@ "logInToBitwarden": { "message": "Впишете се в Битуорден" }, + "enterTheCodeSentToYourEmail": { + "message": "Въведете кода изпратен на е-пощата Ви" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Въведете кода от Вашето приложение за удостоверяване" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Натиснете бутона на своя YubiKey за удостоверяване" + }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Вашият акаунт изисква вписване чрез двустепенно удостоверяване с Duo. Следвайте стъпките по-долу, за да завършите вписването." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Следвайте стъпките по-долу, за да завършите вписването." + }, "restartRegistration": { "message": "Рестартиране на регистрацията" }, @@ -897,6 +901,9 @@ "no": { "message": "Не" }, + "location": { + "message": "Местоположение" + }, "unexpectedError": { "message": "Възникна неочаквана грешка." }, @@ -1046,6 +1053,56 @@ "notificationAddSave": { "message": "Да, нека се запише сега" }, + "loginSaveSuccessDetails": { + "message": "Запазено в Битуорден: $USERNAME$.", + "placeholders": { + "username": { + "content": "$1" + } + }, + "description": "Shown to user after login is saved." + }, + "loginUpdatedSuccessDetails": { + "message": "Обновено в Битуорден: $USERNAME$.", + "placeholders": { + "username": { + "content": "$1" + } + }, + "description": "Shown to user after login is updated." + }, + "saveAsNewLoginAction": { + "message": "Запазване като нов елемент за вписване", + "description": "Button text for saving login details as a new entry." + }, + "updateLoginAction": { + "message": "Обновяване на данните за вписване", + "description": "Button text for updating an existing login entry." + }, + "saveLoginPrompt": { + "message": "Запазване на данните за вписване?", + "description": "Prompt asking the user if they want to save their login details." + }, + "updateLoginPrompt": { + "message": "Да се обновят ли текущите данни за вписване?", + "description": "Prompt asking the user if they want to update an existing login entry." + }, + "loginSaveSuccess": { + "message": "Данните за вписване са запазени", + "description": "Message displayed when login details are successfully saved." + }, + "loginUpdateSuccess": { + "message": "Данните за вписване са обновени", + "description": "Message displayed when login details are successfully updated." + }, + "saveFailure": { + "message": "Грешка при запазването", + "description": "Error message shown when the system fails to save login details." + }, + "saveFailureDetails": { + "message": "О, не! Запазването не беше успешно. Опитайте да въведете данните ръчно.", + "description": "Detailed error message shown when saving login details fails." + }, "enableChangedPasswordNotification": { "message": "Питане за обновяване на съществуващ запис" }, @@ -1365,12 +1422,22 @@ "rememberMe": { "message": "Запомняне" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Не ме питайте отново на това устройство за 30 дни" + }, "sendVerificationCodeEmailAgain": { "message": "Повторно изпращане на писмото за потвърждение" }, "useAnotherTwoStepMethod": { "message": "Използвайте друг начин на двустепенно удостоверяване" }, + "selectAnotherMethod": { + "message": "Изберете друг метод", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Използване на код за възстановяване" + }, "insertYubiKey": { "message": "Поставете устройството на YubiKey в USB порт на компютъра и натиснете бутона на устройството." }, @@ -1383,9 +1450,18 @@ "webAuthnNewTabOpen": { "message": "Отваряне на нов раздел" }, + "openInNewTab": { + "message": "Отваряне в нов раздел" + }, "webAuthnAuthenticate": { "message": "Идентификация WebAuthn" }, + "readSecurityKey": { + "message": "Прочитане на ключа за сигурност" + }, + "awaitingSecurityKeyInteraction": { + "message": "Изчакване на действие с ключ за сигурност…" + }, "loginUnavailable": { "message": "Записът липсва" }, @@ -1398,6 +1474,9 @@ "twoStepOptions": { "message": "Настройки на двустепенното удостоверяване" }, + "selectTwoStepLoginMethod": { + "message": "Изберете начин за двустепенно удостоверяване" + }, "recoveryCodeDesc": { "message": "Ако сте загубили достъп до двустепенното удостоверяване, може да използвате код за възстановяване, за да изключите двустепенното удостоверяване в абонамента си." }, @@ -2097,6 +2176,15 @@ "vaultTimeoutAction1": { "message": "Действие при изтичането на времето за достъп" }, + "newCustomizationOptionsCalloutTitle": { + "message": "Нови възможности за персонализиране" + }, + "newCustomizationOptionsCalloutContent": { + "message": "Персонализирайте трезора си с бързи действия за копиране, компактен режим и още!" + }, + "newCustomizationOptionsCalloutLink": { + "message": "Преглед на всички настройки за външния вид" + }, "lock": { "message": "Заключване", "description": "Verb form: to make secure or inaccessible by" @@ -2391,7 +2479,16 @@ "atRiskPasswords": { "message": "Пароли в риск" }, - "atRiskPasswordsDescSingleOrg": { + "atRiskPasswordDescSingleOrg": { + "message": "$ORGANIZATION$ изисква да промените една парола, тъй като е в риск.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + } + }, + "atRiskPasswordsDescSingleOrgPlural": { "message": "$ORGANIZATION$ изисква да промените $COUNT$ пароли, тъй като са в риск.", "placeholders": { "organization": { @@ -2404,7 +2501,7 @@ } } }, - "atRiskPasswordsDescMultiOrg": { + "atRiskPasswordsDescMultiOrgPlural": { "message": "Вашата организация изисква да промените $COUNT$ пароли, тъй като са в риск.", "placeholders": { "count": { @@ -2431,6 +2528,36 @@ "changeAtRiskPasswordsFasterDesc": { "message": "Променете настройките си, така че да можете бързо да попълвате автоматично паролите си, както и да генерирате нови" }, + "reviewAtRiskLogins": { + "message": "Преглед на елементите за вписване в риск" + }, + "reviewAtRiskPasswords": { + "message": "Преглед на паролите в риск" + }, + "reviewAtRiskLoginsSlideDesc": { + "message": "Паролите в организацията Ви са в риск, защото са слаби, преизползвани и/или разкрити.", + "description": "Description of the review at-risk login slide on the at-risk password page carousel" + }, + "reviewAtRiskLoginSlideImgAlt": { + "message": "Илюстрация на списък с елементи за вписване, които са в риск" + }, + "generatePasswordSlideDesc": { + "message": "Генерирайте бързо сложна и уникална парола от менюто за автоматично попълване на Битуорден, на уеб сайта, който е в риск.", + "description": "Description of the generate password slide on the at-risk password page carousel" + }, + "generatePasswordSlideImgAlt": { + "message": "Илюстрация на автоматичното попълване на Битуорден, показващо генерирана парола" + }, + "updateInBitwarden": { + "message": "Обновяване в Битуорден" + }, + "updateInBitwardenSlideDesc": { + "message": "След това Битуорден ще попита дали искате да обновите паролата в управителя на пароли.", + "description": "Description of the update in Bitwarden slide on the at-risk password page carousel" + }, + "updateInBitwardenSlideImgAlt": { + "message": "Илюстрация на известието на Битуорден, чрез което пита потребителя дали да се обновят данните за вписване" + }, "turnOnAutofill": { "message": "Включване на автоматичното попълване" }, @@ -3249,7 +3376,7 @@ "message": "Заявката е изпратена" }, "exposedMasterPassword": { - "message": "Разобличена главна парола" + "message": "Разкрита главна парола" }, "exposedMasterPasswordDesc": { "message": "Паролата е намерена в пробив на данни. Използвайте уникална парола, за да защитите вашия акаунт. Наистина ли искате да използвате слаба парола?" @@ -3983,6 +4110,9 @@ "activeAccount": { "message": "Активиране на регистрацията" }, + "bitwardenAccount": { + "message": "Акаунт в Битуорден" + }, "availableAccounts": { "message": "Налични регистрации" }, @@ -4181,6 +4311,20 @@ } } }, + "copyFieldValue": { + "message": "Копиране на $FIELD$, $VALUE$", + "description": "Title for a button that copies a field value to the clipboard.", + "placeholders": { + "field": { + "content": "$1", + "example": "Username" + }, + "value": { + "content": "$2", + "example": "Foo" + } + } + }, "noValuesToCopy": { "message": "Няма стойности за копиране" }, @@ -5002,5 +5146,8 @@ }, "updateDesktopAppOrDisableFingerprintDialogMessage": { "message": "За да използвате отключването чрез биометрични данни, обновете самостоятелното приложение или изключете отключването чрез пръстов отпечатък в настройките му." + }, + "changeAtRiskPassword": { + "message": "Промяна на парола в риск" } } diff --git a/apps/browser/src/_locales/bn/messages.json b/apps/browser/src/_locales/bn/messages.json index 27a5b3b5682..ef841249cd0 100644 --- a/apps/browser/src/_locales/bn/messages.json +++ b/apps/browser/src/_locales/bn/messages.json @@ -80,6 +80,15 @@ "masterPassHint": { "message": "মূল পাসওয়ার্ড ইঙ্গিত (ঐচ্ছিক)" }, + "passwordStrengthScore": { + "message": "Password strength score $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "joinOrganization": { "message": "Join organization" }, @@ -470,22 +479,6 @@ "length": { "message": "দৈর্ঘ্য" }, - "uppercase": { - "message": "Uppercase (A-Z)", - "description": "deprecated. Use uppercaseLabel instead." - }, - "lowercase": { - "message": "Lowercase (a-z)", - "description": "deprecated. Use lowercaseLabel instead." - }, - "numbers": { - "message": "Numbers (0-9)", - "description": "deprecated. Use numbersLabel instead." - }, - "specialCharacters": { - "message": "Special characters (!@#$%^&*)", - "description": "deprecated. Use specialCharactersLabel instead." - }, "include": { "message": "Include", "description": "Card header for password generator include block" @@ -518,10 +511,6 @@ "message": "Include special characters", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "numWords": { "message": "শব্দের সংখ্যা" }, @@ -660,8 +649,8 @@ "browserNotSupportClipboard": { "message": "আপনার ওয়েব ব্রাউজার সহজে ক্লিপবোর্ড অনুলিপি সমর্থন করে না। পরিবর্তে এটি নিজেই অনুলিপি করুন।" }, - "verifyIdentity": { - "message": "Verify identity" + "verifyYourIdentity": { + "message": "Verify your identity" }, "weDontRecognizeThisDevice": { "message": "We don't recognize this device. Enter the code sent to your email to verify your identity." @@ -876,6 +865,21 @@ "logInToBitwarden": { "message": "Log in to Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "Enter the code sent to your email" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Enter the code from your authenticator app" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Press your YubiKey to authenticate" + }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Duo two-step login is required for your account. Follow the steps below to finish logging in." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Follow the steps below to finish logging in." + }, "restartRegistration": { "message": "Restart registration" }, @@ -897,6 +901,9 @@ "no": { "message": "না" }, + "location": { + "message": "Location" + }, "unexpectedError": { "message": "একটি অপ্রত্যাশিত ত্রুটি ঘটেছে।" }, @@ -1046,6 +1053,56 @@ "notificationAddSave": { "message": "হ্যাঁ, এখনই সংরক্ষণ করুন" }, + "loginSaveSuccessDetails": { + "message": "$USERNAME$ saved to Bitwarden.", + "placeholders": { + "username": { + "content": "$1" + } + }, + "description": "Shown to user after login is saved." + }, + "loginUpdatedSuccessDetails": { + "message": "$USERNAME$ updated in Bitwarden.", + "placeholders": { + "username": { + "content": "$1" + } + }, + "description": "Shown to user after login is updated." + }, + "saveAsNewLoginAction": { + "message": "Save as new login", + "description": "Button text for saving login details as a new entry." + }, + "updateLoginAction": { + "message": "Update login", + "description": "Button text for updating an existing login entry." + }, + "saveLoginPrompt": { + "message": "Save login?", + "description": "Prompt asking the user if they want to save their login details." + }, + "updateLoginPrompt": { + "message": "Update existing login?", + "description": "Prompt asking the user if they want to update an existing login entry." + }, + "loginSaveSuccess": { + "message": "Login saved", + "description": "Message displayed when login details are successfully saved." + }, + "loginUpdateSuccess": { + "message": "Login updated", + "description": "Message displayed when login details are successfully updated." + }, + "saveFailure": { + "message": "Error saving", + "description": "Error message shown when the system fails to save login details." + }, + "saveFailureDetails": { + "message": "Oh no! We couldn't save this. Try entering the details manually.", + "description": "Detailed error message shown when saving login details fails." + }, "enableChangedPasswordNotification": { "message": "Ask to update existing login" }, @@ -1365,12 +1422,22 @@ "rememberMe": { "message": "আমাকে মনে রাখবেন" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Don't ask again on this device for 30 days" + }, "sendVerificationCodeEmailAgain": { "message": "আবার যাচাইকরণ কোড ইমেইলে প্রেরণ করুন" }, "useAnotherTwoStepMethod": { "message": "অন্য দ্বি-পদক্ষেপ প্রবেশ পদ্ধতি ব্যবহার করুন" }, + "selectAnotherMethod": { + "message": "Select another method", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Use your recovery code" + }, "insertYubiKey": { "message": "আপনার কম্পিউটারের ইউএসবি পোর্টে আপনার YubiKey ঢোকান, তারপরে তার বোতামটি স্পর্শ করুন।" }, @@ -1383,9 +1450,18 @@ "webAuthnNewTabOpen": { "message": "Open new tab" }, + "openInNewTab": { + "message": "Open in new tab" + }, "webAuthnAuthenticate": { "message": "Authenticate WebAuthn" }, + "readSecurityKey": { + "message": "Read security key" + }, + "awaitingSecurityKeyInteraction": { + "message": "Awaiting security key interaction..." + }, "loginUnavailable": { "message": "লগইন অনুপলব্ধ" }, @@ -1398,6 +1474,9 @@ "twoStepOptions": { "message": "দ্বি-পদক্ষেপ লগইন বিকল্প" }, + "selectTwoStepLoginMethod": { + "message": "Select two-step login method" + }, "recoveryCodeDesc": { "message": "আপনার সমস্ত দ্বি-গুণক সরবরাহকারীদের অ্যাক্সেস হারিয়েছেন? আপনার অ্যাকাউন্ট থেকে সমস্ত দ্বি-গুণক সরবরাহকারীদের অক্ষম করতে আপনার পুনরুদ্ধার কোডটি ব্যবহার করুন।" }, @@ -2097,6 +2176,15 @@ "vaultTimeoutAction1": { "message": "Timeout action" }, + "newCustomizationOptionsCalloutTitle": { + "message": "New customization options" + }, + "newCustomizationOptionsCalloutContent": { + "message": "Customize your vault experience with quick copy actions, compact mode, and more!" + }, + "newCustomizationOptionsCalloutLink": { + "message": "View all Appearance settings" + }, "lock": { "message": "লক", "description": "Verb form: to make secure or inaccessible by" @@ -2391,8 +2479,17 @@ "atRiskPasswords": { "message": "At-risk passwords" }, - "atRiskPasswordsDescSingleOrg": { - "message": "$ORGANIZATION$ is requesting you change the $COUNT$ passwords because they are at risk.", + "atRiskPasswordDescSingleOrg": { + "message": "$ORGANIZATION$ is requesting you change one password because it is at-risk.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + } + }, + "atRiskPasswordsDescSingleOrgPlural": { + "message": "$ORGANIZATION$ is requesting you change the $COUNT$ passwords because they are at-risk.", "placeholders": { "organization": { "content": "$1", @@ -2404,8 +2501,8 @@ } } }, - "atRiskPasswordsDescMultiOrg": { - "message": "Your organizations are requesting you change the $COUNT$ passwords because they are at risk.", + "atRiskPasswordsDescMultiOrgPlural": { + "message": "Your organizations are requesting you change the $COUNT$ passwords because they are at-risk.", "placeholders": { "count": { "content": "$1", @@ -2431,6 +2528,36 @@ "changeAtRiskPasswordsFasterDesc": { "message": "Update your settings so you can quickly autofill your passwords and generate new ones" }, + "reviewAtRiskLogins": { + "message": "Review at-risk logins" + }, + "reviewAtRiskPasswords": { + "message": "Review at-risk passwords" + }, + "reviewAtRiskLoginsSlideDesc": { + "message": "Your organization passwords are at-risk because they are weak, reused, and/or exposed.", + "description": "Description of the review at-risk login slide on the at-risk password page carousel" + }, + "reviewAtRiskLoginSlideImgAlt": { + "message": "Illustration of a list of logins that are at-risk" + }, + "generatePasswordSlideDesc": { + "message": "Quickly generate a strong, unique password with the Bitwarden autofill menu on the at-risk site.", + "description": "Description of the generate password slide on the at-risk password page carousel" + }, + "generatePasswordSlideImgAlt": { + "message": "Illustration of the Bitwarden autofill menu displaying a generated password" + }, + "updateInBitwarden": { + "message": "Update in Bitwarden" + }, + "updateInBitwardenSlideDesc": { + "message": "Bitwarden will then prompt you to update the password in the password manager.", + "description": "Description of the update in Bitwarden slide on the at-risk password page carousel" + }, + "updateInBitwardenSlideImgAlt": { + "message": "Illustration of a Bitwarden’s notification prompting the user to update the login" + }, "turnOnAutofill": { "message": "Turn on autofill" }, @@ -3983,6 +4110,9 @@ "activeAccount": { "message": "Active account" }, + "bitwardenAccount": { + "message": "Bitwarden account" + }, "availableAccounts": { "message": "Available accounts" }, @@ -4181,6 +4311,20 @@ } } }, + "copyFieldValue": { + "message": "Copy $FIELD$, $VALUE$", + "description": "Title for a button that copies a field value to the clipboard.", + "placeholders": { + "field": { + "content": "$1", + "example": "Username" + }, + "value": { + "content": "$2", + "example": "Foo" + } + } + }, "noValuesToCopy": { "message": "No values to copy" }, @@ -5002,5 +5146,8 @@ }, "updateDesktopAppOrDisableFingerprintDialogMessage": { "message": "To use biometric unlock, please update your desktop application, or disable fingerprint unlock in the desktop settings." + }, + "changeAtRiskPassword": { + "message": "Change at-risk password" } } diff --git a/apps/browser/src/_locales/bs/messages.json b/apps/browser/src/_locales/bs/messages.json index c8031f0a0e5..e0a3d3f8458 100644 --- a/apps/browser/src/_locales/bs/messages.json +++ b/apps/browser/src/_locales/bs/messages.json @@ -80,6 +80,15 @@ "masterPassHint": { "message": "Master password hint (optional)" }, + "passwordStrengthScore": { + "message": "Password strength score $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "joinOrganization": { "message": "Join organization" }, @@ -470,22 +479,6 @@ "length": { "message": "Length" }, - "uppercase": { - "message": "Uppercase (A-Z)", - "description": "deprecated. Use uppercaseLabel instead." - }, - "lowercase": { - "message": "Lowercase (a-z)", - "description": "deprecated. Use lowercaseLabel instead." - }, - "numbers": { - "message": "Numbers (0-9)", - "description": "deprecated. Use numbersLabel instead." - }, - "specialCharacters": { - "message": "Special characters (!@#$%^&*)", - "description": "deprecated. Use specialCharactersLabel instead." - }, "include": { "message": "Include", "description": "Card header for password generator include block" @@ -518,10 +511,6 @@ "message": "Include special characters", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "numWords": { "message": "Number of words" }, @@ -660,8 +649,8 @@ "browserNotSupportClipboard": { "message": "Your web browser does not support easy clipboard copying. Copy it manually instead." }, - "verifyIdentity": { - "message": "Verify identity" + "verifyYourIdentity": { + "message": "Verify your identity" }, "weDontRecognizeThisDevice": { "message": "We don't recognize this device. Enter the code sent to your email to verify your identity." @@ -876,6 +865,21 @@ "logInToBitwarden": { "message": "Log in to Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "Enter the code sent to your email" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Enter the code from your authenticator app" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Press your YubiKey to authenticate" + }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Duo two-step login is required for your account. Follow the steps below to finish logging in." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Follow the steps below to finish logging in." + }, "restartRegistration": { "message": "Restart registration" }, @@ -897,6 +901,9 @@ "no": { "message": "No" }, + "location": { + "message": "Location" + }, "unexpectedError": { "message": "An unexpected error has occurred." }, @@ -1046,6 +1053,56 @@ "notificationAddSave": { "message": "Save" }, + "loginSaveSuccessDetails": { + "message": "$USERNAME$ saved to Bitwarden.", + "placeholders": { + "username": { + "content": "$1" + } + }, + "description": "Shown to user after login is saved." + }, + "loginUpdatedSuccessDetails": { + "message": "$USERNAME$ updated in Bitwarden.", + "placeholders": { + "username": { + "content": "$1" + } + }, + "description": "Shown to user after login is updated." + }, + "saveAsNewLoginAction": { + "message": "Save as new login", + "description": "Button text for saving login details as a new entry." + }, + "updateLoginAction": { + "message": "Update login", + "description": "Button text for updating an existing login entry." + }, + "saveLoginPrompt": { + "message": "Save login?", + "description": "Prompt asking the user if they want to save their login details." + }, + "updateLoginPrompt": { + "message": "Update existing login?", + "description": "Prompt asking the user if they want to update an existing login entry." + }, + "loginSaveSuccess": { + "message": "Login saved", + "description": "Message displayed when login details are successfully saved." + }, + "loginUpdateSuccess": { + "message": "Login updated", + "description": "Message displayed when login details are successfully updated." + }, + "saveFailure": { + "message": "Error saving", + "description": "Error message shown when the system fails to save login details." + }, + "saveFailureDetails": { + "message": "Oh no! We couldn't save this. Try entering the details manually.", + "description": "Detailed error message shown when saving login details fails." + }, "enableChangedPasswordNotification": { "message": "Ask to update existing login" }, @@ -1365,12 +1422,22 @@ "rememberMe": { "message": "Remember me" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Don't ask again on this device for 30 days" + }, "sendVerificationCodeEmailAgain": { "message": "Send verification code email again" }, "useAnotherTwoStepMethod": { "message": "Use another two-step login method" }, + "selectAnotherMethod": { + "message": "Select another method", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Use your recovery code" + }, "insertYubiKey": { "message": "Insert your YubiKey into your computer's USB port, then touch its button." }, @@ -1383,9 +1450,18 @@ "webAuthnNewTabOpen": { "message": "Open new tab" }, + "openInNewTab": { + "message": "Open in new tab" + }, "webAuthnAuthenticate": { "message": "Authenticate WebAuthn" }, + "readSecurityKey": { + "message": "Read security key" + }, + "awaitingSecurityKeyInteraction": { + "message": "Awaiting security key interaction..." + }, "loginUnavailable": { "message": "Login unavailable" }, @@ -1398,6 +1474,9 @@ "twoStepOptions": { "message": "Two-step login options" }, + "selectTwoStepLoginMethod": { + "message": "Select two-step login method" + }, "recoveryCodeDesc": { "message": "Lost access to all of your two-factor providers? Use your recovery code to turn off all two-factor providers from your account." }, @@ -2097,6 +2176,15 @@ "vaultTimeoutAction1": { "message": "Timeout action" }, + "newCustomizationOptionsCalloutTitle": { + "message": "New customization options" + }, + "newCustomizationOptionsCalloutContent": { + "message": "Customize your vault experience with quick copy actions, compact mode, and more!" + }, + "newCustomizationOptionsCalloutLink": { + "message": "View all Appearance settings" + }, "lock": { "message": "Zaključaj", "description": "Verb form: to make secure or inaccessible by" @@ -2391,8 +2479,17 @@ "atRiskPasswords": { "message": "At-risk passwords" }, - "atRiskPasswordsDescSingleOrg": { - "message": "$ORGANIZATION$ is requesting you change the $COUNT$ passwords because they are at risk.", + "atRiskPasswordDescSingleOrg": { + "message": "$ORGANIZATION$ is requesting you change one password because it is at-risk.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + } + }, + "atRiskPasswordsDescSingleOrgPlural": { + "message": "$ORGANIZATION$ is requesting you change the $COUNT$ passwords because they are at-risk.", "placeholders": { "organization": { "content": "$1", @@ -2404,8 +2501,8 @@ } } }, - "atRiskPasswordsDescMultiOrg": { - "message": "Your organizations are requesting you change the $COUNT$ passwords because they are at risk.", + "atRiskPasswordsDescMultiOrgPlural": { + "message": "Your organizations are requesting you change the $COUNT$ passwords because they are at-risk.", "placeholders": { "count": { "content": "$1", @@ -2431,6 +2528,36 @@ "changeAtRiskPasswordsFasterDesc": { "message": "Update your settings so you can quickly autofill your passwords and generate new ones" }, + "reviewAtRiskLogins": { + "message": "Review at-risk logins" + }, + "reviewAtRiskPasswords": { + "message": "Review at-risk passwords" + }, + "reviewAtRiskLoginsSlideDesc": { + "message": "Your organization passwords are at-risk because they are weak, reused, and/or exposed.", + "description": "Description of the review at-risk login slide on the at-risk password page carousel" + }, + "reviewAtRiskLoginSlideImgAlt": { + "message": "Illustration of a list of logins that are at-risk" + }, + "generatePasswordSlideDesc": { + "message": "Quickly generate a strong, unique password with the Bitwarden autofill menu on the at-risk site.", + "description": "Description of the generate password slide on the at-risk password page carousel" + }, + "generatePasswordSlideImgAlt": { + "message": "Illustration of the Bitwarden autofill menu displaying a generated password" + }, + "updateInBitwarden": { + "message": "Update in Bitwarden" + }, + "updateInBitwardenSlideDesc": { + "message": "Bitwarden will then prompt you to update the password in the password manager.", + "description": "Description of the update in Bitwarden slide on the at-risk password page carousel" + }, + "updateInBitwardenSlideImgAlt": { + "message": "Illustration of a Bitwarden’s notification prompting the user to update the login" + }, "turnOnAutofill": { "message": "Turn on autofill" }, @@ -3983,6 +4110,9 @@ "activeAccount": { "message": "Active account" }, + "bitwardenAccount": { + "message": "Bitwarden account" + }, "availableAccounts": { "message": "Available accounts" }, @@ -4181,6 +4311,20 @@ } } }, + "copyFieldValue": { + "message": "Copy $FIELD$, $VALUE$", + "description": "Title for a button that copies a field value to the clipboard.", + "placeholders": { + "field": { + "content": "$1", + "example": "Username" + }, + "value": { + "content": "$2", + "example": "Foo" + } + } + }, "noValuesToCopy": { "message": "No values to copy" }, @@ -5002,5 +5146,8 @@ }, "updateDesktopAppOrDisableFingerprintDialogMessage": { "message": "To use biometric unlock, please update your desktop application, or disable fingerprint unlock in the desktop settings." + }, + "changeAtRiskPassword": { + "message": "Change at-risk password" } } diff --git a/apps/browser/src/_locales/ca/messages.json b/apps/browser/src/_locales/ca/messages.json index 11ffc21f3e4..5a424625afe 100644 --- a/apps/browser/src/_locales/ca/messages.json +++ b/apps/browser/src/_locales/ca/messages.json @@ -80,6 +80,15 @@ "masterPassHint": { "message": "Pista de la contrasenya mestra (opcional)" }, + "passwordStrengthScore": { + "message": "Password strength score $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "joinOrganization": { "message": "Uneix-te a l'organització" }, @@ -470,22 +479,6 @@ "length": { "message": "Longitud" }, - "uppercase": { - "message": "Majúscula (A-Z)", - "description": "deprecated. Use uppercaseLabel instead." - }, - "lowercase": { - "message": "Minúscula (a-z)", - "description": "deprecated. Use lowercaseLabel instead." - }, - "numbers": { - "message": "Números (0-9)", - "description": "deprecated. Use numbersLabel instead." - }, - "specialCharacters": { - "message": "Caràcters especials (!@#$%^&*)", - "description": "deprecated. Use specialCharactersLabel instead." - }, "include": { "message": "Inclou", "description": "Card header for password generator include block" @@ -518,10 +511,6 @@ "message": "Inclou caràcters especials", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "numWords": { "message": "Nombre de paraules" }, @@ -660,8 +649,8 @@ "browserNotSupportClipboard": { "message": "El vostre navegador web no admet la còpia fàcil del porta-retalls. Copieu-ho manualment." }, - "verifyIdentity": { - "message": "Verifica identitat" + "verifyYourIdentity": { + "message": "Verify your identity" }, "weDontRecognizeThisDevice": { "message": "No reconeixem aquest dispositiu. Introduïu el codi que us hem enviat al correu electrònic per verificar la identitat." @@ -876,6 +865,21 @@ "logInToBitwarden": { "message": "Inicia sessió a Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "Enter the code sent to your email" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Enter the code from your authenticator app" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Press your YubiKey to authenticate" + }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Duo two-step login is required for your account. Follow the steps below to finish logging in." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Follow the steps below to finish logging in." + }, "restartRegistration": { "message": "Reinicia el registre" }, @@ -897,6 +901,9 @@ "no": { "message": "No" }, + "location": { + "message": "Location" + }, "unexpectedError": { "message": "S'ha produït un error inesperat." }, @@ -1046,6 +1053,56 @@ "notificationAddSave": { "message": "Guarda" }, + "loginSaveSuccessDetails": { + "message": "$USERNAME$ saved to Bitwarden.", + "placeholders": { + "username": { + "content": "$1" + } + }, + "description": "Shown to user after login is saved." + }, + "loginUpdatedSuccessDetails": { + "message": "$USERNAME$ updated in Bitwarden.", + "placeholders": { + "username": { + "content": "$1" + } + }, + "description": "Shown to user after login is updated." + }, + "saveAsNewLoginAction": { + "message": "Save as new login", + "description": "Button text for saving login details as a new entry." + }, + "updateLoginAction": { + "message": "Update login", + "description": "Button text for updating an existing login entry." + }, + "saveLoginPrompt": { + "message": "Save login?", + "description": "Prompt asking the user if they want to save their login details." + }, + "updateLoginPrompt": { + "message": "Update existing login?", + "description": "Prompt asking the user if they want to update an existing login entry." + }, + "loginSaveSuccess": { + "message": "Login saved", + "description": "Message displayed when login details are successfully saved." + }, + "loginUpdateSuccess": { + "message": "Login updated", + "description": "Message displayed when login details are successfully updated." + }, + "saveFailure": { + "message": "Error saving", + "description": "Error message shown when the system fails to save login details." + }, + "saveFailureDetails": { + "message": "Oh no! We couldn't save this. Try entering the details manually.", + "description": "Detailed error message shown when saving login details fails." + }, "enableChangedPasswordNotification": { "message": "Demana d'actualitzar els inicis de sessió existents" }, @@ -1365,12 +1422,22 @@ "rememberMe": { "message": "Recorda'm" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Don't ask again on this device for 30 days" + }, "sendVerificationCodeEmailAgain": { "message": "Envia el codi de verificació altra vegada" }, "useAnotherTwoStepMethod": { "message": "Utilitzeu un altre mètode d'inici de sessió en dues passes" }, + "selectAnotherMethod": { + "message": "Select another method", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Use your recovery code" + }, "insertYubiKey": { "message": "Introduïu la vostra YubiKey al port USB de l'ordinador i, a continuació, premeu el seu botó." }, @@ -1383,9 +1450,18 @@ "webAuthnNewTabOpen": { "message": "Obri una pestanya nova" }, + "openInNewTab": { + "message": "Open in new tab" + }, "webAuthnAuthenticate": { "message": "Autenticar WebAuthn" }, + "readSecurityKey": { + "message": "Read security key" + }, + "awaitingSecurityKeyInteraction": { + "message": "Awaiting security key interaction..." + }, "loginUnavailable": { "message": "Inici de sessió no disponible" }, @@ -1398,6 +1474,9 @@ "twoStepOptions": { "message": "Opcions d'inici de sessió en dues passes" }, + "selectTwoStepLoginMethod": { + "message": "Select two-step login method" + }, "recoveryCodeDesc": { "message": "Heu perdut l'accés a tots els vostres proveïdors de dos factors? Utilitzeu el vostre codi de recuperació per desactivar tots els proveïdors de dos factors del vostre compte." }, @@ -2097,6 +2176,15 @@ "vaultTimeoutAction1": { "message": "Acció després del temps d'espera" }, + "newCustomizationOptionsCalloutTitle": { + "message": "New customization options" + }, + "newCustomizationOptionsCalloutContent": { + "message": "Customize your vault experience with quick copy actions, compact mode, and more!" + }, + "newCustomizationOptionsCalloutLink": { + "message": "View all Appearance settings" + }, "lock": { "message": "Bloqueja", "description": "Verb form: to make secure or inaccessible by" @@ -2391,8 +2479,17 @@ "atRiskPasswords": { "message": "At-risk passwords" }, - "atRiskPasswordsDescSingleOrg": { - "message": "$ORGANIZATION$ is requesting you change the $COUNT$ passwords because they are at risk.", + "atRiskPasswordDescSingleOrg": { + "message": "$ORGANIZATION$ is requesting you change one password because it is at-risk.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + } + }, + "atRiskPasswordsDescSingleOrgPlural": { + "message": "$ORGANIZATION$ is requesting you change the $COUNT$ passwords because they are at-risk.", "placeholders": { "organization": { "content": "$1", @@ -2404,8 +2501,8 @@ } } }, - "atRiskPasswordsDescMultiOrg": { - "message": "Your organizations are requesting you change the $COUNT$ passwords because they are at risk.", + "atRiskPasswordsDescMultiOrgPlural": { + "message": "Your organizations are requesting you change the $COUNT$ passwords because they are at-risk.", "placeholders": { "count": { "content": "$1", @@ -2431,6 +2528,36 @@ "changeAtRiskPasswordsFasterDesc": { "message": "Update your settings so you can quickly autofill your passwords and generate new ones" }, + "reviewAtRiskLogins": { + "message": "Review at-risk logins" + }, + "reviewAtRiskPasswords": { + "message": "Review at-risk passwords" + }, + "reviewAtRiskLoginsSlideDesc": { + "message": "Your organization passwords are at-risk because they are weak, reused, and/or exposed.", + "description": "Description of the review at-risk login slide on the at-risk password page carousel" + }, + "reviewAtRiskLoginSlideImgAlt": { + "message": "Illustration of a list of logins that are at-risk" + }, + "generatePasswordSlideDesc": { + "message": "Quickly generate a strong, unique password with the Bitwarden autofill menu on the at-risk site.", + "description": "Description of the generate password slide on the at-risk password page carousel" + }, + "generatePasswordSlideImgAlt": { + "message": "Illustration of the Bitwarden autofill menu displaying a generated password" + }, + "updateInBitwarden": { + "message": "Update in Bitwarden" + }, + "updateInBitwardenSlideDesc": { + "message": "Bitwarden will then prompt you to update the password in the password manager.", + "description": "Description of the update in Bitwarden slide on the at-risk password page carousel" + }, + "updateInBitwardenSlideImgAlt": { + "message": "Illustration of a Bitwarden’s notification prompting the user to update the login" + }, "turnOnAutofill": { "message": "Turn on autofill" }, @@ -3983,6 +4110,9 @@ "activeAccount": { "message": "Activa el compte" }, + "bitwardenAccount": { + "message": "Bitwarden account" + }, "availableAccounts": { "message": "Comptes disponibles" }, @@ -4181,6 +4311,20 @@ } } }, + "copyFieldValue": { + "message": "Copy $FIELD$, $VALUE$", + "description": "Title for a button that copies a field value to the clipboard.", + "placeholders": { + "field": { + "content": "$1", + "example": "Username" + }, + "value": { + "content": "$2", + "example": "Foo" + } + } + }, "noValuesToCopy": { "message": "No values to copy" }, @@ -5002,5 +5146,8 @@ }, "updateDesktopAppOrDisableFingerprintDialogMessage": { "message": "To use biometric unlock, please update your desktop application, or disable fingerprint unlock in the desktop settings." + }, + "changeAtRiskPassword": { + "message": "Change at-risk password" } } diff --git a/apps/browser/src/_locales/cs/messages.json b/apps/browser/src/_locales/cs/messages.json index 8dc3f40f44a..23030a36f8d 100644 --- a/apps/browser/src/_locales/cs/messages.json +++ b/apps/browser/src/_locales/cs/messages.json @@ -80,6 +80,15 @@ "masterPassHint": { "message": "Nápověda k hlavnímu heslu (volitelné)" }, + "passwordStrengthScore": { + "message": "Skóre síly hesla: $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "joinOrganization": { "message": "Přidat se k organizaci" }, @@ -470,22 +479,6 @@ "length": { "message": "Délka" }, - "uppercase": { - "message": "Velká písmena (A-Z)", - "description": "deprecated. Use uppercaseLabel instead." - }, - "lowercase": { - "message": "Malá písmena (a-z)", - "description": "deprecated. Use lowercaseLabel instead." - }, - "numbers": { - "message": "Číslice (0-9)", - "description": "deprecated. Use numbersLabel instead." - }, - "specialCharacters": { - "message": "Speciální znaky (!@#$%^&*)", - "description": "deprecated. Use specialCharactersLabel instead." - }, "include": { "message": "Zahrnout", "description": "Card header for password generator include block" @@ -518,10 +511,6 @@ "message": "Zahrnout speciální znaky", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "numWords": { "message": "Počet slov" }, @@ -660,8 +649,8 @@ "browserNotSupportClipboard": { "message": "Váš webový prohlížeč nepodporuje automatické kopírování do schránky. Musíte ho zkopírovat ručně." }, - "verifyIdentity": { - "message": "Ověřit identitu" + "verifyYourIdentity": { + "message": "Ověřte svou totožnost" }, "weDontRecognizeThisDevice": { "message": "Toto zařízení nepoznáváme. Zadejte kód zaslaný na Váš e-mail pro ověření Vaší totožnosti." @@ -876,6 +865,21 @@ "logInToBitwarden": { "message": "Přihlásit se do Bitwardenu" }, + "enterTheCodeSentToYourEmail": { + "message": "Zadejte kód odeslaný na Váš e-mail" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Zadejte kód z Vaší ověřovací aplikace" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Stiskněte svůj YubiKey pro ověření" + }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Pro Váš účet je nutné dvoufázové přihlášení. Pro dokončení přihlášení postupujte podle následujících kroků." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Postupujte podle kroků níže pro dokončení přihlášení." + }, "restartRegistration": { "message": "Restartovat registraci" }, @@ -897,6 +901,9 @@ "no": { "message": "Ne" }, + "location": { + "message": "Umístění" + }, "unexpectedError": { "message": "Vyskytla se neočekávaná chyba." }, @@ -1046,6 +1053,56 @@ "notificationAddSave": { "message": "Uložit" }, + "loginSaveSuccessDetails": { + "message": "$USERNAME$ uloženo do Bitwardenu.", + "placeholders": { + "username": { + "content": "$1" + } + }, + "description": "Shown to user after login is saved." + }, + "loginUpdatedSuccessDetails": { + "message": "$USERNAME$ aktualizováno v Bitwardenu.", + "placeholders": { + "username": { + "content": "$1" + } + }, + "description": "Shown to user after login is updated." + }, + "saveAsNewLoginAction": { + "message": "Uložit jako nové přihlašovací údaje", + "description": "Button text for saving login details as a new entry." + }, + "updateLoginAction": { + "message": "Aktualizovat přihlašovací údaje", + "description": "Button text for updating an existing login entry." + }, + "saveLoginPrompt": { + "message": "Uložit přihlašovací údaje?", + "description": "Prompt asking the user if they want to save their login details." + }, + "updateLoginPrompt": { + "message": "Aktualizovat existující přihlašovací údaje?", + "description": "Prompt asking the user if they want to update an existing login entry." + }, + "loginSaveSuccess": { + "message": "Přihlašovací údaje byly uloženy", + "description": "Message displayed when login details are successfully saved." + }, + "loginUpdateSuccess": { + "message": "Přihlašovací údaje byly aktualizovány", + "description": "Message displayed when login details are successfully updated." + }, + "saveFailure": { + "message": "Chyba při ukládání", + "description": "Error message shown when the system fails to save login details." + }, + "saveFailureDetails": { + "message": "Ale ne! Nemohli jsme to uložit. Zkuste zadat podrobnosti ručně.", + "description": "Detailed error message shown when saving login details fails." + }, "enableChangedPasswordNotification": { "message": "Zeptat se na aktualizaci existujícího přihlášení" }, @@ -1365,12 +1422,22 @@ "rememberMe": { "message": "Zapamatovat mě" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Neptat se na tomto zařízení 30 dnů" + }, "sendVerificationCodeEmailAgain": { "message": "Znovu zaslat ověřovací kód na e-mail" }, "useAnotherTwoStepMethod": { "message": "Použít jinou metodu dvoufázového přihlášení" }, + "selectAnotherMethod": { + "message": "Vybrat jinou metodu", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Použít obnovovací kód" + }, "insertYubiKey": { "message": "Vložte YubiKey do USB portu Vašeho počítače a stiskněte jeho tlačítko." }, @@ -1383,9 +1450,18 @@ "webAuthnNewTabOpen": { "message": "Otevřít novou kartu" }, + "openInNewTab": { + "message": "Otevřít v nové kartě" + }, "webAuthnAuthenticate": { "message": "Ověřit WebAuthn" }, + "readSecurityKey": { + "message": "Přečíst bezpečnostní klíč" + }, + "awaitingSecurityKeyInteraction": { + "message": "Čeká se na interakci s bezpečnostním klíčem..." + }, "loginUnavailable": { "message": "Přihlášení není dostupné" }, @@ -1398,6 +1474,9 @@ "twoStepOptions": { "message": "Volby dvoufázového přihlášení" }, + "selectTwoStepLoginMethod": { + "message": "Vyberte metodu dvoufázového přihlášení" + }, "recoveryCodeDesc": { "message": "Ztratili jste přístup ke všem nastaveným poskytovatelům dvoufázového přihlášení? Použijte obnovovací kód pro vypnutí dvoufázového přihlášení." }, @@ -2097,6 +2176,15 @@ "vaultTimeoutAction1": { "message": "Akce vypršení časového limitu" }, + "newCustomizationOptionsCalloutTitle": { + "message": "Nové volby přizpůsobení" + }, + "newCustomizationOptionsCalloutContent": { + "message": "Přizpůsobte si svůj trezor s rychlými kopírovacími akcemi, kompaktním režimem a dalším!" + }, + "newCustomizationOptionsCalloutLink": { + "message": "Zobrazit všechna nastavení vzhledu" + }, "lock": { "message": "Zamknout", "description": "Verb form: to make secure or inaccessible by" @@ -2391,7 +2479,16 @@ "atRiskPasswords": { "message": "Ohrožená hesla" }, - "atRiskPasswordsDescSingleOrg": { + "atRiskPasswordDescSingleOrg": { + "message": "$ORGANIZATION$ Vás žádá o změnu 1 hesla, protože je v ohrožení.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + } + }, + "atRiskPasswordsDescSingleOrgPlural": { "message": "$ORGANIZATION$ Vás žádá o změnu $COUNT$ hesel, protože jsou v ohrožení.", "placeholders": { "organization": { @@ -2404,7 +2501,7 @@ } } }, - "atRiskPasswordsDescMultiOrg": { + "atRiskPasswordsDescMultiOrgPlural": { "message": "Vaše organizace Vás žádají o změnu $COUNT$ hesel, protože jsou v ohrožení.", "placeholders": { "count": { @@ -2431,6 +2528,36 @@ "changeAtRiskPasswordsFasterDesc": { "message": "Aktualizujte svá nastavení, abyste mohli rychle automaticky vyplňovat hesla a generovat nová hesla." }, + "reviewAtRiskLogins": { + "message": "Kontrola rizikových přihlášení" + }, + "reviewAtRiskPasswords": { + "message": "Kontrola rizikových hesel" + }, + "reviewAtRiskLoginsSlideDesc": { + "message": "Hesla Vaší organizace jsou ohrožena, protože jsou slabá, opakovaně používaná nebo odhalená.", + "description": "Description of the review at-risk login slide on the at-risk password page carousel" + }, + "reviewAtRiskLoginSlideImgAlt": { + "message": "Ilustrace seznamu přihlášení, která jsou riziková" + }, + "generatePasswordSlideDesc": { + "message": "Rychle vygeneruje silné, unikátní heslo s nabídkou automatického vyplňování Bitwarden na rizikových stránkách.", + "description": "Description of the generate password slide on the at-risk password page carousel" + }, + "generatePasswordSlideImgAlt": { + "message": "Ilustrace nabídky automatického vyplňování Bitwarden zobrazující vygenerované heslo" + }, + "updateInBitwarden": { + "message": "Aktualizovat v Bitwardenu" + }, + "updateInBitwardenSlideDesc": { + "message": "Bitwarden Vás poté požádá o aktualizaci hesla ve správci hesel.", + "description": "Description of the update in Bitwarden slide on the at-risk password page carousel" + }, + "updateInBitwardenSlideImgAlt": { + "message": "Ilustrace oznámení v Bitwardenu, která uživatele vyzývá k aktualizaci přihlášení" + }, "turnOnAutofill": { "message": "Zapnout automatické vyplňování" }, @@ -3983,6 +4110,9 @@ "activeAccount": { "message": "Aktivní účet" }, + "bitwardenAccount": { + "message": "Účet Bitwarden" + }, "availableAccounts": { "message": "Dostupné účty" }, @@ -4181,6 +4311,20 @@ } } }, + "copyFieldValue": { + "message": "Kopírovat $FIELD$, $VALUE$", + "description": "Title for a button that copies a field value to the clipboard.", + "placeholders": { + "field": { + "content": "$1", + "example": "Username" + }, + "value": { + "content": "$2", + "example": "Foo" + } + } + }, "noValuesToCopy": { "message": "Žádné hodnoty ke zkopírování" }, @@ -5002,5 +5146,8 @@ }, "updateDesktopAppOrDisableFingerprintDialogMessage": { "message": "Chcete-li použít biometrické odemknutí, aktualizujte aplikaci pro stolní počítač nebo v nastavení vypněte odemknutí otiskem prstů." + }, + "changeAtRiskPassword": { + "message": "Změnit ohrožené heslo" } } diff --git a/apps/browser/src/_locales/cy/messages.json b/apps/browser/src/_locales/cy/messages.json index f07d598d6f6..24bc03729d9 100644 --- a/apps/browser/src/_locales/cy/messages.json +++ b/apps/browser/src/_locales/cy/messages.json @@ -3,11 +3,11 @@ "message": "Bitwarden" }, "extName": { - "message": "Bitwarden Password Manager", + "message": "Rheolydd cyfrineiriau Bitwarden", "description": "Extension name, MUST be less than 40 characters (Safari restriction)" }, "extDesc": { - "message": "At home, at work, or on the go, Bitwarden easily secures all your passwords, passkeys, and sensitive information", + "message": "Gartref, yn y gweithle, neu ar fynd, mae Bitwarden yn diogelu eich holl gyfrineiriau a gwybodaeth sensitif", "description": "Extension description, MUST be less than 112 characters (Safari restriction)" }, "loginOrCreateNewAccount": { @@ -20,7 +20,7 @@ "message": "Creu cyfrif" }, "newToBitwarden": { - "message": "New to Bitwarden?" + "message": "Newydd i Bitwarden?" }, "logInWithPasskey": { "message": "Log in with passkey" @@ -80,11 +80,20 @@ "masterPassHint": { "message": "Master password hint (optional)" }, + "passwordStrengthScore": { + "message": "Password strength score $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "joinOrganization": { "message": "Join organization" }, "joinOrganizationName": { - "message": "Join $ORGANIZATIONNAME$", + "message": "Ymuno â $ORGANIZATIONNAME$", "placeholders": { "organizationName": { "content": "$1", @@ -162,7 +171,7 @@ "message": "Copy fingerprint" }, "copyCustomField": { - "message": "Copy $FIELD$", + "message": "Copïo $FIELD$", "placeholders": { "field": { "content": "$1", @@ -177,11 +186,11 @@ "message": "Copy notes" }, "copy": { - "message": "Copy", + "message": "Copïo", "description": "Copy to clipboard" }, "fill": { - "message": "Fill", + "message": "Llenwi", "description": "This string is used on the vault page to indicate autofilling. Horizontal space is limited in the interface here so try and keep translations as concise as possible." }, "autoFill": { @@ -207,7 +216,7 @@ "message": "Cynhyrchu cyfrinair (wedi'i gopïo)" }, "copyElementIdentifier": { - "message": "Copy custom field name" + "message": "Copïo enw maes addasedig" }, "noMatchingLogins": { "message": "No matching logins" @@ -314,19 +323,19 @@ "description": "A 'fingerprint phrase' is a unique word phrase (similar to a passphrase) that a user can use to authenticate their public key with another user, for the purposes of sharing." }, "twoStepLogin": { - "message": "Mewngofnodi dau agm" + "message": "Mewngofnodi dau gam" }, "logOut": { "message": "Allgofnodi" }, "aboutBitwarden": { - "message": "About Bitwarden" + "message": "Ynghylch Bitwarden" }, "about": { "message": "Ynghylch" }, "moreFromBitwarden": { - "message": "More from Bitwarden" + "message": "Mwy gan Bitwarden" }, "continueToBitwardenDotCom": { "message": "Continue to bitwarden.com?" @@ -470,22 +479,6 @@ "length": { "message": "Hyd" }, - "uppercase": { - "message": "Priflythrennau (A-Z)", - "description": "deprecated. Use uppercaseLabel instead." - }, - "lowercase": { - "message": "Llythrennau bach (a-z)", - "description": "deprecated. Use lowercaseLabel instead." - }, - "numbers": { - "message": "Rhifau (0-9)", - "description": "deprecated. Use numbersLabel instead." - }, - "specialCharacters": { - "message": "Nodau arbennig (!@#$%^&*)", - "description": "deprecated. Use specialCharactersLabel instead." - }, "include": { "message": "Include", "description": "Card header for password generator include block" @@ -515,13 +508,9 @@ "description": "Label for the password generator numbers checkbox" }, "specialCharactersDescription": { - "message": "Include special characters", + "message": "Cynnwys nodau arbennig", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "numWords": { "message": "Nifer o eiriau" }, @@ -542,7 +531,7 @@ "message": "Isafswm nodau arbennig" }, "avoidAmbiguous": { - "message": "Avoid ambiguous characters", + "message": "Osgoi nodau amwys", "description": "Label for the avoid ambiguous characters checkbox." }, "generatorPolicyInEffect": { @@ -592,7 +581,7 @@ "message": "Nodiadau" }, "privateNote": { - "message": "Private note" + "message": "Nodyn preifat" }, "note": { "message": "Nodyn" @@ -660,8 +649,8 @@ "browserNotSupportClipboard": { "message": "Dyw eich porwr gwe ddim yn cefnogi copïo drwy'r clipfwrdd yn hawdd. Copïwch â llaw yn lle." }, - "verifyIdentity": { - "message": "Gwirio'ch hunaniaeth" + "verifyYourIdentity": { + "message": "Verify your identity" }, "weDontRecognizeThisDevice": { "message": "We don't recognize this device. Enter the code sent to your email to verify your identity." @@ -801,7 +790,7 @@ "message": "Mae eich cyfrif newydd wedi cael ei greu! Gallwch bellach fewngofnodi." }, "newAccountCreated2": { - "message": "Your new account has been created!" + "message": "Mae eich cyfrif wedi cael ei greu!" }, "youHaveBeenLoggedIn": { "message": "You have been logged in!" @@ -871,10 +860,25 @@ "message": "Mae eich sesiwn wedi dod i ben." }, "logIn": { - "message": "Log in" + "message": "Mewngofnodi" }, "logInToBitwarden": { - "message": "Log in to Bitwarden" + "message": "Mewngofnodi i Bitwarden" + }, + "enterTheCodeSentToYourEmail": { + "message": "Enter the code sent to your email" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Enter the code from your authenticator app" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Press your YubiKey to authenticate" + }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Duo two-step login is required for your account. Follow the steps below to finish logging in." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Follow the steps below to finish logging in." }, "restartRegistration": { "message": "Restart registration" @@ -897,6 +901,9 @@ "no": { "message": "Na" }, + "location": { + "message": "Location" + }, "unexpectedError": { "message": "An unexpected error has occurred." }, @@ -1046,6 +1053,56 @@ "notificationAddSave": { "message": "Cadw" }, + "loginSaveSuccessDetails": { + "message": "$USERNAME$ saved to Bitwarden.", + "placeholders": { + "username": { + "content": "$1" + } + }, + "description": "Shown to user after login is saved." + }, + "loginUpdatedSuccessDetails": { + "message": "$USERNAME$ updated in Bitwarden.", + "placeholders": { + "username": { + "content": "$1" + } + }, + "description": "Shown to user after login is updated." + }, + "saveAsNewLoginAction": { + "message": "Cadw fel manylion mewngofnodi newydd", + "description": "Button text for saving login details as a new entry." + }, + "updateLoginAction": { + "message": "Update login", + "description": "Button text for updating an existing login entry." + }, + "saveLoginPrompt": { + "message": "Save login?", + "description": "Prompt asking the user if they want to save their login details." + }, + "updateLoginPrompt": { + "message": "Update existing login?", + "description": "Prompt asking the user if they want to update an existing login entry." + }, + "loginSaveSuccess": { + "message": "Login saved", + "description": "Message displayed when login details are successfully saved." + }, + "loginUpdateSuccess": { + "message": "Login updated", + "description": "Message displayed when login details are successfully updated." + }, + "saveFailure": { + "message": "Error saving", + "description": "Error message shown when the system fails to save login details." + }, + "saveFailureDetails": { + "message": "Oh no! We couldn't save this. Try entering the details manually.", + "description": "Detailed error message shown when saving login details fails." + }, "enableChangedPasswordNotification": { "message": "Ask to update existing login" }, @@ -1365,12 +1422,22 @@ "rememberMe": { "message": "Fy nghofio i" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Don't ask again on this device for 30 days" + }, "sendVerificationCodeEmailAgain": { "message": "Anfon ebost â chod dilysu eto" }, "useAnotherTwoStepMethod": { "message": "Use another two-step login method" }, + "selectAnotherMethod": { + "message": "Select another method", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Use your recovery code" + }, "insertYubiKey": { "message": "Rhowch eich YubiKey i mewn i borth USB eich cyfrifiadur, yna gwasgwch y botwm." }, @@ -1383,9 +1450,18 @@ "webAuthnNewTabOpen": { "message": "Agor tab newydd" }, + "openInNewTab": { + "message": "Agor mewn tab newydd" + }, "webAuthnAuthenticate": { "message": "Authenticate WebAuthn" }, + "readSecurityKey": { + "message": "Read security key" + }, + "awaitingSecurityKeyInteraction": { + "message": "Awaiting security key interaction..." + }, "loginUnavailable": { "message": "Login unavailable" }, @@ -1398,6 +1474,9 @@ "twoStepOptions": { "message": "Dewisiadau mewngofnodi dau gam" }, + "selectTwoStepLoginMethod": { + "message": "Select two-step login method" + }, "recoveryCodeDesc": { "message": "Lost access to all of your two-factor providers? Use your recovery code to turn off all two-factor providers from your account." }, @@ -1575,7 +1654,7 @@ "message": "Autofill the last used identity for the current website" }, "commandGeneratePasswordDesc": { - "message": "Generate and copy a new random password to the clipboard" + "message": "Cynhyrchu a chopïo cyfrinair hap newydd i'r clipfwrdd" }, "commandLockVaultDesc": { "message": "Cloi'r gell" @@ -1790,10 +1869,10 @@ "message": "Hunaniaeth" }, "typeSshKey": { - "message": "SSH key" + "message": "Allwedd SSH" }, "newItemHeader": { - "message": "New $TYPE$", + "message": "$TYPE$ newydd", "placeholders": { "type": { "content": "$1", @@ -1868,7 +1947,7 @@ "message": "Nodiadau diogel" }, "sshKeys": { - "message": "SSH Keys" + "message": "Allweddi SSH" }, "clear": { "message": "Clirio", @@ -2063,19 +2142,19 @@ "message": "Clone" }, "passwordGenerator": { - "message": "Password generator" + "message": "Cynhyrchydd cyfrineiriau" }, "usernameGenerator": { - "message": "Username generator" + "message": "Cynhyrychydd enwau defnyddiwr" }, "useThisEmail": { - "message": "Use this email" + "message": "Defnyddio'r ebost hwn" }, "useThisPassword": { - "message": "Use this password" + "message": "Defnyddio'r cyfrinair hwn" }, "useThisUsername": { - "message": "Use this username" + "message": "Defnyddio'r enw defnyddiwr hwn" }, "securePasswordGenerated": { "message": "Secure password generated! Don't forget to also update your password on the website." @@ -2097,6 +2176,15 @@ "vaultTimeoutAction1": { "message": "Timeout action" }, + "newCustomizationOptionsCalloutTitle": { + "message": "New customization options" + }, + "newCustomizationOptionsCalloutContent": { + "message": "Customize your vault experience with quick copy actions, compact mode, and more!" + }, + "newCustomizationOptionsCalloutLink": { + "message": "View all Appearance settings" + }, "lock": { "message": "Cloi", "description": "Verb form: to make secure or inaccessible by" @@ -2124,7 +2212,7 @@ "message": "Item restored" }, "alreadyHaveAccount": { - "message": "Already have an account?" + "message": "Oes gennych chi gyfrif eisoes?" }, "vaultTimeoutLogOutConfirmation": { "message": "Logging out will remove all access to your vault and requires online authentication after the timeout period. Are you sure you want to use this setting?" @@ -2136,7 +2224,7 @@ "message": "Llenwi'n awtomatig a chadw" }, "fillAndSave": { - "message": "Fill and save" + "message": "Llenwi a chadw" }, "autoFillSuccessAndSavedUri": { "message": "Item autofilled and URI saved" @@ -2391,8 +2479,17 @@ "atRiskPasswords": { "message": "At-risk passwords" }, - "atRiskPasswordsDescSingleOrg": { - "message": "$ORGANIZATION$ is requesting you change the $COUNT$ passwords because they are at risk.", + "atRiskPasswordDescSingleOrg": { + "message": "$ORGANIZATION$ is requesting you change one password because it is at-risk.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + } + }, + "atRiskPasswordsDescSingleOrgPlural": { + "message": "$ORGANIZATION$ is requesting you change the $COUNT$ passwords because they are at-risk.", "placeholders": { "organization": { "content": "$1", @@ -2404,8 +2501,8 @@ } } }, - "atRiskPasswordsDescMultiOrg": { - "message": "Your organizations are requesting you change the $COUNT$ passwords because they are at risk.", + "atRiskPasswordsDescMultiOrgPlural": { + "message": "Your organizations are requesting you change the $COUNT$ passwords because they are at-risk.", "placeholders": { "count": { "content": "$1", @@ -2431,6 +2528,36 @@ "changeAtRiskPasswordsFasterDesc": { "message": "Update your settings so you can quickly autofill your passwords and generate new ones" }, + "reviewAtRiskLogins": { + "message": "Review at-risk logins" + }, + "reviewAtRiskPasswords": { + "message": "Review at-risk passwords" + }, + "reviewAtRiskLoginsSlideDesc": { + "message": "Your organization passwords are at-risk because they are weak, reused, and/or exposed.", + "description": "Description of the review at-risk login slide on the at-risk password page carousel" + }, + "reviewAtRiskLoginSlideImgAlt": { + "message": "Illustration of a list of logins that are at-risk" + }, + "generatePasswordSlideDesc": { + "message": "Quickly generate a strong, unique password with the Bitwarden autofill menu on the at-risk site.", + "description": "Description of the generate password slide on the at-risk password page carousel" + }, + "generatePasswordSlideImgAlt": { + "message": "Illustration of the Bitwarden autofill menu displaying a generated password" + }, + "updateInBitwarden": { + "message": "Update in Bitwarden" + }, + "updateInBitwardenSlideDesc": { + "message": "Bitwarden will then prompt you to update the password in the password manager.", + "description": "Description of the update in Bitwarden slide on the at-risk password page carousel" + }, + "updateInBitwardenSlideImgAlt": { + "message": "Illustration of a Bitwarden’s notification prompting the user to update the login" + }, "turnOnAutofill": { "message": "Turn on autofill" }, @@ -3631,7 +3758,7 @@ "description": "Screen reader text (aria-label) for new item button in overlay" }, "newLogin": { - "message": "New login", + "message": "Manylion mewngofnodi newydd", "description": "Button text to display within inline menu when there are no matching items on a login field" }, "addNewLoginItemAria": { @@ -3639,7 +3766,7 @@ "description": "Screen reader text (aria-label) for new login button within inline menu" }, "newCard": { - "message": "New card", + "message": "Cerdyn newydd", "description": "Button text to display within inline menu when there are no matching items on a credit card field" }, "addNewCardItemAria": { @@ -3647,7 +3774,7 @@ "description": "Screen reader text (aria-label) for new card button within inline menu" }, "newIdentity": { - "message": "New identity", + "message": "Hunaniaeth newydd", "description": "Button text to display within inline menu when there are no matching items on an identity field" }, "addNewIdentityItemAria": { @@ -3983,6 +4110,9 @@ "activeAccount": { "message": "Cyfrif gweithredol" }, + "bitwardenAccount": { + "message": "Bitwarden account" + }, "availableAccounts": { "message": "Cyfrifon ar gael" }, @@ -4104,7 +4234,7 @@ "message": "Passkey removed" }, "autofillSuggestions": { - "message": "Autofill suggestions" + "message": "Awgrymiadau" }, "itemSuggestions": { "message": "Suggested items" @@ -4181,6 +4311,20 @@ } } }, + "copyFieldValue": { + "message": "Copy $FIELD$, $VALUE$", + "description": "Title for a button that copies a field value to the clipboard.", + "placeholders": { + "field": { + "content": "$1", + "example": "Username" + }, + "value": { + "content": "$2", + "example": "Foo" + } + } + }, "noValuesToCopy": { "message": "No values to copy" }, @@ -4200,7 +4344,7 @@ "message": "Admin Console" }, "accountSecurity": { - "message": "Account security" + "message": "Diogelwch eich cyfrif" }, "notifications": { "message": "Hysbysiadau" @@ -4235,7 +4379,7 @@ } }, "new": { - "message": "New" + "message": "Newydd" }, "removeItem": { "message": "Remove $NAME$", @@ -4522,7 +4666,7 @@ "message": "Edit field" }, "editFieldLabel": { - "message": "Edit $LABEL$", + "message": "Golygu $LABEL$", "placeholders": { "label": { "content": "$1", @@ -4531,7 +4675,7 @@ } }, "deleteCustomField": { - "message": "Delete $LABEL$", + "message": "Dileu $LABEL$", "placeholders": { "label": { "content": "$1", @@ -4540,7 +4684,7 @@ } }, "fieldAdded": { - "message": "$LABEL$ added", + "message": "Ychwanegwyd $LABEL$", "placeholders": { "label": { "content": "$1", @@ -4692,16 +4836,16 @@ "message": "Enterprise policy requirements have been applied to this setting" }, "sshPrivateKey": { - "message": "Private key" + "message": "Allwedd breifat" }, "sshPublicKey": { - "message": "Public key" + "message": "Allwedd gyhoeddus" }, "sshFingerprint": { "message": "Fingerprint" }, "sshKeyAlgorithm": { - "message": "Key type" + "message": "Math o allwedd" }, "sshKeyAlgorithmED25519": { "message": "ED25519" @@ -4959,7 +5103,7 @@ "message": "Remind me later" }, "newDeviceVerificationNoticePageOneFormContent": { - "message": "Do you have reliable access to your email, $EMAIL$?", + "message": "A oes gennych chi fynediad dibynadwy i'ch ebost, $EMAIL$?", "placeholders": { "email": { "content": "$1", @@ -4968,10 +5112,10 @@ } }, "newDeviceVerificationNoticePageOneEmailAccessNo": { - "message": "No, I do not" + "message": "Nac oes" }, "newDeviceVerificationNoticePageOneEmailAccessYes": { - "message": "Yes, I can reliably access my email" + "message": "Oes, mae gen i fynediad dibynadwy i fy ebost" }, "turnOnTwoStepLogin": { "message": "Turn on two-step login" @@ -5002,5 +5146,8 @@ }, "updateDesktopAppOrDisableFingerprintDialogMessage": { "message": "To use biometric unlock, please update your desktop application, or disable fingerprint unlock in the desktop settings." + }, + "changeAtRiskPassword": { + "message": "Change at-risk password" } } diff --git a/apps/browser/src/_locales/da/messages.json b/apps/browser/src/_locales/da/messages.json index 796a5ce4ab2..e7bebee94f9 100644 --- a/apps/browser/src/_locales/da/messages.json +++ b/apps/browser/src/_locales/da/messages.json @@ -80,6 +80,15 @@ "masterPassHint": { "message": "Hovedadgangskodetip (valgfrit)" }, + "passwordStrengthScore": { + "message": "Password strength score $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "joinOrganization": { "message": "Bliv medlem af organisation" }, @@ -470,22 +479,6 @@ "length": { "message": "Længde" }, - "uppercase": { - "message": "Store bogstaver (A-Z)", - "description": "deprecated. Use uppercaseLabel instead." - }, - "lowercase": { - "message": "Små bogstaver (a-z)", - "description": "deprecated. Use lowercaseLabel instead." - }, - "numbers": { - "message": "Tal (0-9)", - "description": "deprecated. Use numbersLabel instead." - }, - "specialCharacters": { - "message": "Specialtegn (!@#$%^&*)", - "description": "deprecated. Use specialCharactersLabel instead." - }, "include": { "message": "Inkludér", "description": "Card header for password generator include block" @@ -518,10 +511,6 @@ "message": "Inkludér specialtegn", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "numWords": { "message": "Antal ord" }, @@ -660,8 +649,8 @@ "browserNotSupportClipboard": { "message": "Din webbrowser understøtter ikke udklipsholder kopiering. Kopiér det manuelt i stedet." }, - "verifyIdentity": { - "message": "Bekræft identitet" + "verifyYourIdentity": { + "message": "Verify your identity" }, "weDontRecognizeThisDevice": { "message": "Denne enhed er ikke genkendt. Angiv koden i den tilsendte e-mail for at bekræfte identiteten." @@ -876,6 +865,21 @@ "logInToBitwarden": { "message": "Log ind på Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "Enter the code sent to your email" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Enter the code from your authenticator app" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Press your YubiKey to authenticate" + }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Duo two-step login is required for your account. Follow the steps below to finish logging in." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Follow the steps below to finish logging in." + }, "restartRegistration": { "message": "Genstart registrering" }, @@ -897,6 +901,9 @@ "no": { "message": "Nej" }, + "location": { + "message": "Location" + }, "unexpectedError": { "message": "Der opstod en uventet fejl." }, @@ -1046,6 +1053,56 @@ "notificationAddSave": { "message": "Gem" }, + "loginSaveSuccessDetails": { + "message": "$USERNAME$ saved to Bitwarden.", + "placeholders": { + "username": { + "content": "$1" + } + }, + "description": "Shown to user after login is saved." + }, + "loginUpdatedSuccessDetails": { + "message": "$USERNAME$ updated in Bitwarden.", + "placeholders": { + "username": { + "content": "$1" + } + }, + "description": "Shown to user after login is updated." + }, + "saveAsNewLoginAction": { + "message": "Save as new login", + "description": "Button text for saving login details as a new entry." + }, + "updateLoginAction": { + "message": "Update login", + "description": "Button text for updating an existing login entry." + }, + "saveLoginPrompt": { + "message": "Save login?", + "description": "Prompt asking the user if they want to save their login details." + }, + "updateLoginPrompt": { + "message": "Update existing login?", + "description": "Prompt asking the user if they want to update an existing login entry." + }, + "loginSaveSuccess": { + "message": "Login saved", + "description": "Message displayed when login details are successfully saved." + }, + "loginUpdateSuccess": { + "message": "Login updated", + "description": "Message displayed when login details are successfully updated." + }, + "saveFailure": { + "message": "Error saving", + "description": "Error message shown when the system fails to save login details." + }, + "saveFailureDetails": { + "message": "Oh no! We couldn't save this. Try entering the details manually.", + "description": "Detailed error message shown when saving login details fails." + }, "enableChangedPasswordNotification": { "message": "Bed om at opdatere eksisterende login" }, @@ -1365,12 +1422,22 @@ "rememberMe": { "message": "Husk mig" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Don't ask again on this device for 30 days" + }, "sendVerificationCodeEmailAgain": { "message": "Send verifikationskode-email igen" }, "useAnotherTwoStepMethod": { "message": "Brug en anden to-trins login metode" }, + "selectAnotherMethod": { + "message": "Select another method", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Use your recovery code" + }, "insertYubiKey": { "message": "Indsæt din YubiKey i din computers USB-port, og tryk derefter på dens knap." }, @@ -1383,9 +1450,18 @@ "webAuthnNewTabOpen": { "message": "Åbn ny fane" }, + "openInNewTab": { + "message": "Open in new tab" + }, "webAuthnAuthenticate": { "message": "Godkend WebAuthn" }, + "readSecurityKey": { + "message": "Read security key" + }, + "awaitingSecurityKeyInteraction": { + "message": "Awaiting security key interaction..." + }, "loginUnavailable": { "message": "Login ikke tilgængelig" }, @@ -1398,6 +1474,9 @@ "twoStepOptions": { "message": "To-trins-login indstillinger" }, + "selectTwoStepLoginMethod": { + "message": "Select two-step login method" + }, "recoveryCodeDesc": { "message": "Mistet adgang til alle dine to-faktor-udbydere? Brug din genoprettelseskode til at deaktivere alle to-faktor udbydere på din konto." }, @@ -2097,6 +2176,15 @@ "vaultTimeoutAction1": { "message": "Timeouthandling" }, + "newCustomizationOptionsCalloutTitle": { + "message": "New customization options" + }, + "newCustomizationOptionsCalloutContent": { + "message": "Customize your vault experience with quick copy actions, compact mode, and more!" + }, + "newCustomizationOptionsCalloutLink": { + "message": "View all Appearance settings" + }, "lock": { "message": "Lås", "description": "Verb form: to make secure or inaccessible by" @@ -2391,8 +2479,17 @@ "atRiskPasswords": { "message": "At-risk passwords" }, - "atRiskPasswordsDescSingleOrg": { - "message": "$ORGANIZATION$ is requesting you change the $COUNT$ passwords because they are at risk.", + "atRiskPasswordDescSingleOrg": { + "message": "$ORGANIZATION$ is requesting you change one password because it is at-risk.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + } + }, + "atRiskPasswordsDescSingleOrgPlural": { + "message": "$ORGANIZATION$ is requesting you change the $COUNT$ passwords because they are at-risk.", "placeholders": { "organization": { "content": "$1", @@ -2404,8 +2501,8 @@ } } }, - "atRiskPasswordsDescMultiOrg": { - "message": "Your organizations are requesting you change the $COUNT$ passwords because they are at risk.", + "atRiskPasswordsDescMultiOrgPlural": { + "message": "Your organizations are requesting you change the $COUNT$ passwords because they are at-risk.", "placeholders": { "count": { "content": "$1", @@ -2431,6 +2528,36 @@ "changeAtRiskPasswordsFasterDesc": { "message": "Update your settings so you can quickly autofill your passwords and generate new ones" }, + "reviewAtRiskLogins": { + "message": "Review at-risk logins" + }, + "reviewAtRiskPasswords": { + "message": "Review at-risk passwords" + }, + "reviewAtRiskLoginsSlideDesc": { + "message": "Your organization passwords are at-risk because they are weak, reused, and/or exposed.", + "description": "Description of the review at-risk login slide on the at-risk password page carousel" + }, + "reviewAtRiskLoginSlideImgAlt": { + "message": "Illustration of a list of logins that are at-risk" + }, + "generatePasswordSlideDesc": { + "message": "Quickly generate a strong, unique password with the Bitwarden autofill menu on the at-risk site.", + "description": "Description of the generate password slide on the at-risk password page carousel" + }, + "generatePasswordSlideImgAlt": { + "message": "Illustration of the Bitwarden autofill menu displaying a generated password" + }, + "updateInBitwarden": { + "message": "Update in Bitwarden" + }, + "updateInBitwardenSlideDesc": { + "message": "Bitwarden will then prompt you to update the password in the password manager.", + "description": "Description of the update in Bitwarden slide on the at-risk password page carousel" + }, + "updateInBitwardenSlideImgAlt": { + "message": "Illustration of a Bitwarden’s notification prompting the user to update the login" + }, "turnOnAutofill": { "message": "Turn on autofill" }, @@ -3983,6 +4110,9 @@ "activeAccount": { "message": "Aktiv konto" }, + "bitwardenAccount": { + "message": "Bitwarden account" + }, "availableAccounts": { "message": "Tilgængelige konti" }, @@ -4181,6 +4311,20 @@ } } }, + "copyFieldValue": { + "message": "Copy $FIELD$, $VALUE$", + "description": "Title for a button that copies a field value to the clipboard.", + "placeholders": { + "field": { + "content": "$1", + "example": "Username" + }, + "value": { + "content": "$2", + "example": "Foo" + } + } + }, "noValuesToCopy": { "message": "Ingen værdier at kopiere" }, @@ -5002,5 +5146,8 @@ }, "updateDesktopAppOrDisableFingerprintDialogMessage": { "message": "For brug af biometrisk oplåsning skal computerapplikationen opdateres eller fingeraftryksoplåsning deaktiveres i computerindstillingerne." + }, + "changeAtRiskPassword": { + "message": "Change at-risk password" } } diff --git a/apps/browser/src/_locales/de/messages.json b/apps/browser/src/_locales/de/messages.json index 75fc90150b9..d9095bb616c 100644 --- a/apps/browser/src/_locales/de/messages.json +++ b/apps/browser/src/_locales/de/messages.json @@ -80,6 +80,15 @@ "masterPassHint": { "message": "Master-Passwort-Hinweis (optional)" }, + "passwordStrengthScore": { + "message": "Bewertung der Passwortstärke $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "joinOrganization": { "message": "Organisation beitreten" }, @@ -470,22 +479,6 @@ "length": { "message": "Länge" }, - "uppercase": { - "message": "Großbuchstaben (A-Z)", - "description": "deprecated. Use uppercaseLabel instead." - }, - "lowercase": { - "message": "Kleinbuchstaben (a-z)", - "description": "deprecated. Use lowercaseLabel instead." - }, - "numbers": { - "message": "Zahlen (0-9)", - "description": "deprecated. Use numbersLabel instead." - }, - "specialCharacters": { - "message": "Sonderzeichen (!@#$%^&*)", - "description": "deprecated. Use specialCharactersLabel instead." - }, "include": { "message": "Einschließen", "description": "Card header for password generator include block" @@ -518,10 +511,6 @@ "message": "Sonderzeichen einschließen", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "numWords": { "message": "Anzahl der Wörter" }, @@ -660,8 +649,8 @@ "browserNotSupportClipboard": { "message": "Den Browser unterstützt das einfache Kopieren nicht. Bitte kopiere es manuell." }, - "verifyIdentity": { - "message": "Identität verifizieren" + "verifyYourIdentity": { + "message": "Verifiziere deine Identität" }, "weDontRecognizeThisDevice": { "message": "Wir erkennen dieses Gerät nicht. Gib den an deine E-Mail-Adresse gesendeten Code ein, um deine Identität zu verifizieren." @@ -876,6 +865,21 @@ "logInToBitwarden": { "message": "Bei Bitwarden anmelden" }, + "enterTheCodeSentToYourEmail": { + "message": "Gib den an deine E-Mail-Adresse gesendeten Code ein" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Gib den Code aus deiner Authenticator-App ein" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Drücke zum Authentifizieren auf deinen YubiKey" + }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Die Duo-Zwei-Faktor-Authentifizierung ist für dein Konto erforderlich. Folge den Schritten unten, um die Anmeldung abzuschließen." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Folge den Schritten unten, um die Anmeldung abzuschließen." + }, "restartRegistration": { "message": "Registrierung neu starten" }, @@ -897,6 +901,9 @@ "no": { "message": "Nein" }, + "location": { + "message": "Standort" + }, "unexpectedError": { "message": "Ein unerwarteter Fehler ist aufgetreten." }, @@ -1046,6 +1053,56 @@ "notificationAddSave": { "message": "Ja, jetzt speichern" }, + "loginSaveSuccessDetails": { + "message": "$USERNAME$ in Bitwarden gespeichert.", + "placeholders": { + "username": { + "content": "$1" + } + }, + "description": "Shown to user after login is saved." + }, + "loginUpdatedSuccessDetails": { + "message": "$USERNAME$ in Bitwarden aktualisiert.", + "placeholders": { + "username": { + "content": "$1" + } + }, + "description": "Shown to user after login is updated." + }, + "saveAsNewLoginAction": { + "message": "Als neue Zugangsdaten speichern", + "description": "Button text for saving login details as a new entry." + }, + "updateLoginAction": { + "message": "Zugangsdaten aktualisieren", + "description": "Button text for updating an existing login entry." + }, + "saveLoginPrompt": { + "message": "Zugangsdaten speichern?", + "description": "Prompt asking the user if they want to save their login details." + }, + "updateLoginPrompt": { + "message": "Bestehende Zugangsdaten aktualisieren?", + "description": "Prompt asking the user if they want to update an existing login entry." + }, + "loginSaveSuccess": { + "message": "Zugangsdaten gespeichert", + "description": "Message displayed when login details are successfully saved." + }, + "loginUpdateSuccess": { + "message": "Zugangsdaten aktualisiert", + "description": "Message displayed when login details are successfully updated." + }, + "saveFailure": { + "message": "Fehler beim Speichern", + "description": "Error message shown when the system fails to save login details." + }, + "saveFailureDetails": { + "message": "Oh nein! Das konnten wir nicht speichern. Versuch, die Details manuell einzugeben.", + "description": "Detailed error message shown when saving login details fails." + }, "enableChangedPasswordNotification": { "message": "Nach dem Aktualisieren bestehender Zugangsdaten fragen" }, @@ -1365,12 +1422,22 @@ "rememberMe": { "message": "Angemeldet bleiben" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Für 30 Tage auf diesem Gerät nicht mehr fragen" + }, "sendVerificationCodeEmailAgain": { "message": "E-Mail mit Bestätigungscode erneut versenden" }, "useAnotherTwoStepMethod": { "message": "Verwende eine andere zweistufige Login-Methode" }, + "selectAnotherMethod": { + "message": "Wähle eine andere Methode", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Verwende deinen Wiederherstellungscode" + }, "insertYubiKey": { "message": "Stecke deinen YubiKey in den USB-Port Ihres Computers, dann berühre den Button." }, @@ -1383,9 +1450,18 @@ "webAuthnNewTabOpen": { "message": "Neuen Tab öffnen" }, + "openInNewTab": { + "message": "In neuem Tab öffnen" + }, "webAuthnAuthenticate": { "message": "Authentifiziere WebAuthn" }, + "readSecurityKey": { + "message": "Sicherheitsschlüssel auslesen" + }, + "awaitingSecurityKeyInteraction": { + "message": "Warte auf Sicherheitsschlüssel-Interaktion..." + }, "loginUnavailable": { "message": "Anmeldung nicht verfügbar" }, @@ -1398,6 +1474,9 @@ "twoStepOptions": { "message": "Optionen für Zwei-Faktor-Authentifizierung" }, + "selectTwoStepLoginMethod": { + "message": "Zwei-Faktor-Authentifizierungsmethode auswählen" + }, "recoveryCodeDesc": { "message": "Zugang zu allen Zwei-Faktor Anbietern verloren? Benutze deinen Wiederherstellungscode, um alle Zwei-Faktor Anbieter in deinem Konto zu deaktivieren." }, @@ -2097,6 +2176,15 @@ "vaultTimeoutAction1": { "message": "Timeout-Aktion" }, + "newCustomizationOptionsCalloutTitle": { + "message": "Neue Personalisierungs-Optionen" + }, + "newCustomizationOptionsCalloutContent": { + "message": "Personalisiere deinen Tresor mit Schnellkopier-Aktionen, Kompaktmodus und mehr!" + }, + "newCustomizationOptionsCalloutLink": { + "message": "Alle Aussehen-Einstellungen anzeigen" + }, "lock": { "message": "Sperren", "description": "Verb form: to make secure or inaccessible by" @@ -2391,7 +2479,16 @@ "atRiskPasswords": { "message": "Gefährdete Passwörter" }, - "atRiskPasswordsDescSingleOrg": { + "atRiskPasswordDescSingleOrg": { + "message": "$ORGANIZATION$ fordert dich auf, ein Passwort zu ändern, da es gefährdet ist.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + } + }, + "atRiskPasswordsDescSingleOrgPlural": { "message": "$ORGANIZATION$ fordert dich auf, diese $COUNT$ Passwörter zu ändern, da diese gefährdet sind.", "placeholders": { "organization": { @@ -2404,7 +2501,7 @@ } } }, - "atRiskPasswordsDescMultiOrg": { + "atRiskPasswordsDescMultiOrgPlural": { "message": "Deine Organisationen fordern dich auf, diese $COUNT$ Passwörter zu ändern, da diese gefährdet sind.", "placeholders": { "count": { @@ -2431,6 +2528,36 @@ "changeAtRiskPasswordsFasterDesc": { "message": "Aktualisiere deine Einstellungen, damit du deine Passwörter schnell automatisch ausfüllen kannst und neue generieren kannst" }, + "reviewAtRiskLogins": { + "message": "Überprüfung gefährdeter Zugangsdaten" + }, + "reviewAtRiskPasswords": { + "message": "Überprüfung gefährdeter Passwörter" + }, + "reviewAtRiskLoginsSlideDesc": { + "message": "Die Passwörter deiner Organisationen sind gefährdet, weil sie schwach, wiederverwendet und/oder kompromittiert sind.", + "description": "Description of the review at-risk login slide on the at-risk password page carousel" + }, + "reviewAtRiskLoginSlideImgAlt": { + "message": "Illustration einer Liste gefährdeter Zugangsdaten" + }, + "generatePasswordSlideDesc": { + "message": "Generiere schnell ein starkes, einzigartiges Passwort mit dem Bitwarden Auto-Ausfüllen-Menü auf der gefährdeten Website.", + "description": "Description of the generate password slide on the at-risk password page carousel" + }, + "generatePasswordSlideImgAlt": { + "message": "Illustration des Bitwarden Auto-Ausfüllen-Menüs, das ein generiertes Passwort anzeigt" + }, + "updateInBitwarden": { + "message": "In Bitwarden aktualisieren" + }, + "updateInBitwardenSlideDesc": { + "message": "Bitwarden wird dich dann auffordern, das Passwort im Passwort-Manager zu aktualisieren.", + "description": "Description of the update in Bitwarden slide on the at-risk password page carousel" + }, + "updateInBitwardenSlideImgAlt": { + "message": "Illustration einer Bitwarden-Benachrichtigung, die den Benutzer dazu auffordert, die Zugangsdaten zu aktualisieren" + }, "turnOnAutofill": { "message": "Auto-Ausfüllen aktivieren" }, @@ -3983,6 +4110,9 @@ "activeAccount": { "message": "Aktives Konto" }, + "bitwardenAccount": { + "message": "Bitwarden-Konto" + }, "availableAccounts": { "message": "Verfügbare Konten" }, @@ -4181,6 +4311,20 @@ } } }, + "copyFieldValue": { + "message": "$FIELD$, $VALUE$ kopieren", + "description": "Title for a button that copies a field value to the clipboard.", + "placeholders": { + "field": { + "content": "$1", + "example": "Username" + }, + "value": { + "content": "$2", + "example": "Foo" + } + } + }, "noValuesToCopy": { "message": "Keine Werte zum Kopieren" }, @@ -5002,5 +5146,8 @@ }, "updateDesktopAppOrDisableFingerprintDialogMessage": { "message": "Um biometrisches Entsperren zu verwenden, aktualisiere bitte deine Desktop-Anwendung oder deaktiviere die Entsperrung per Fingerabdruck in den Desktop-Einstellungen." + }, + "changeAtRiskPassword": { + "message": "Gefährdetes Passwort ändern" } } diff --git a/apps/browser/src/_locales/el/messages.json b/apps/browser/src/_locales/el/messages.json index 8095cc41476..c197d5c6528 100644 --- a/apps/browser/src/_locales/el/messages.json +++ b/apps/browser/src/_locales/el/messages.json @@ -80,6 +80,15 @@ "masterPassHint": { "message": "Υπόδειξη κύριου κωδικού πρόσβασης (προαιρετικό)" }, + "passwordStrengthScore": { + "message": "Password strength score $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "joinOrganization": { "message": "Συμμετοχή στον οργανισμό" }, @@ -470,22 +479,6 @@ "length": { "message": "Μήκος" }, - "uppercase": { - "message": "Κεφαλαία (A-Z)", - "description": "deprecated. Use uppercaseLabel instead." - }, - "lowercase": { - "message": "Πεζά (α-ω)", - "description": "deprecated. Use lowercaseLabel instead." - }, - "numbers": { - "message": "Αριθμοί (0-9)", - "description": "deprecated. Use numbersLabel instead." - }, - "specialCharacters": { - "message": "Ειδικοί χαρακτήρες (!@#$%^&*)", - "description": "deprecated. Use specialCharactersLabel instead." - }, "include": { "message": "Συμπερίληψη", "description": "Card header for password generator include block" @@ -518,10 +511,6 @@ "message": "Συμπερίληψη ειδικών χαρακτήρων", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "numWords": { "message": "Αριθμός λέξεων" }, @@ -660,8 +649,8 @@ "browserNotSupportClipboard": { "message": "Το πρόγραμμα περιήγησης ιστού δεν υποστηρίζει εύκολη αντιγραφή πρόχειρου. Αντιγράψτε το με το χέρι αντ'αυτού." }, - "verifyIdentity": { - "message": "Επιβεβαίωση ταυτότητας" + "verifyYourIdentity": { + "message": "Verify your identity" }, "weDontRecognizeThisDevice": { "message": "We don't recognize this device. Enter the code sent to your email to verify your identity." @@ -876,6 +865,21 @@ "logInToBitwarden": { "message": "Σύνδεση στο Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "Enter the code sent to your email" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Enter the code from your authenticator app" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Press your YubiKey to authenticate" + }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Duo two-step login is required for your account. Follow the steps below to finish logging in." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Follow the steps below to finish logging in." + }, "restartRegistration": { "message": "Επανεκκίνηση εγγραφής" }, @@ -897,6 +901,9 @@ "no": { "message": "Όχι" }, + "location": { + "message": "Location" + }, "unexpectedError": { "message": "Παρουσιάστηκε ένα μη αναμενόμενο σφάλμα." }, @@ -1046,6 +1053,56 @@ "notificationAddSave": { "message": "Ναι, Αποθήκευση Τώρα" }, + "loginSaveSuccessDetails": { + "message": "$USERNAME$ saved to Bitwarden.", + "placeholders": { + "username": { + "content": "$1" + } + }, + "description": "Shown to user after login is saved." + }, + "loginUpdatedSuccessDetails": { + "message": "$USERNAME$ updated in Bitwarden.", + "placeholders": { + "username": { + "content": "$1" + } + }, + "description": "Shown to user after login is updated." + }, + "saveAsNewLoginAction": { + "message": "Save as new login", + "description": "Button text for saving login details as a new entry." + }, + "updateLoginAction": { + "message": "Update login", + "description": "Button text for updating an existing login entry." + }, + "saveLoginPrompt": { + "message": "Save login?", + "description": "Prompt asking the user if they want to save their login details." + }, + "updateLoginPrompt": { + "message": "Update existing login?", + "description": "Prompt asking the user if they want to update an existing login entry." + }, + "loginSaveSuccess": { + "message": "Login saved", + "description": "Message displayed when login details are successfully saved." + }, + "loginUpdateSuccess": { + "message": "Login updated", + "description": "Message displayed when login details are successfully updated." + }, + "saveFailure": { + "message": "Error saving", + "description": "Error message shown when the system fails to save login details." + }, + "saveFailureDetails": { + "message": "Oh no! We couldn't save this. Try entering the details manually.", + "description": "Detailed error message shown when saving login details fails." + }, "enableChangedPasswordNotification": { "message": "Ζητήστε να ενημερώσετε την υπάρχουσα σύνδεση" }, @@ -1365,12 +1422,22 @@ "rememberMe": { "message": "Να με θυμάσαι" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Don't ask again on this device for 30 days" + }, "sendVerificationCodeEmailAgain": { "message": "Αποστολή email κωδικού επαλήθευσης ξανά" }, "useAnotherTwoStepMethod": { "message": "Χρήση άλλης μεθόδου σύνδεσης δύο παραγόντων" }, + "selectAnotherMethod": { + "message": "Select another method", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Use your recovery code" + }, "insertYubiKey": { "message": "Τοποθετήστε το YubiKey στη θύρα USB του υπολογιστή σας και έπειτα κάντε κλικ στο κουμπί του." }, @@ -1383,9 +1450,18 @@ "webAuthnNewTabOpen": { "message": "Άνοιγμα νέας καρτέλας" }, + "openInNewTab": { + "message": "Open in new tab" + }, "webAuthnAuthenticate": { "message": "Ταυτοποίηση WebAuthn" }, + "readSecurityKey": { + "message": "Read security key" + }, + "awaitingSecurityKeyInteraction": { + "message": "Awaiting security key interaction..." + }, "loginUnavailable": { "message": "Μη διαθέσιμη σύνδεση" }, @@ -1398,6 +1474,9 @@ "twoStepOptions": { "message": "Επιλογές σύνδεσης δύο βημάτων" }, + "selectTwoStepLoginMethod": { + "message": "Select two-step login method" + }, "recoveryCodeDesc": { "message": "Έχετε χάσει την πρόσβαση σε όλους τους παρόχους δύο παραγόντων; Χρησιμοποιήστε τον κωδικό ανάκτησης για να απενεργοποιήσετε όλους τους παρόχους δύο παραγόντων από το λογαριασμό σας." }, @@ -2097,6 +2176,15 @@ "vaultTimeoutAction1": { "message": "Ενέργεια κατά τη λήξη χρονικού ορίου" }, + "newCustomizationOptionsCalloutTitle": { + "message": "New customization options" + }, + "newCustomizationOptionsCalloutContent": { + "message": "Customize your vault experience with quick copy actions, compact mode, and more!" + }, + "newCustomizationOptionsCalloutLink": { + "message": "View all Appearance settings" + }, "lock": { "message": "Κλείδωμα", "description": "Verb form: to make secure or inaccessible by" @@ -2391,8 +2479,17 @@ "atRiskPasswords": { "message": "Κωδικοί πρόσβασης σε κίνδυνο" }, - "atRiskPasswordsDescSingleOrg": { - "message": "$ORGANIZATION$ is requesting you change the $COUNT$ passwords because they are at risk.", + "atRiskPasswordDescSingleOrg": { + "message": "$ORGANIZATION$ is requesting you change one password because it is at-risk.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + } + }, + "atRiskPasswordsDescSingleOrgPlural": { + "message": "$ORGANIZATION$ is requesting you change the $COUNT$ passwords because they are at-risk.", "placeholders": { "organization": { "content": "$1", @@ -2404,8 +2501,8 @@ } } }, - "atRiskPasswordsDescMultiOrg": { - "message": "Your organizations are requesting you change the $COUNT$ passwords because they are at risk.", + "atRiskPasswordsDescMultiOrgPlural": { + "message": "Your organizations are requesting you change the $COUNT$ passwords because they are at-risk.", "placeholders": { "count": { "content": "$1", @@ -2431,6 +2528,36 @@ "changeAtRiskPasswordsFasterDesc": { "message": "Update your settings so you can quickly autofill your passwords and generate new ones" }, + "reviewAtRiskLogins": { + "message": "Review at-risk logins" + }, + "reviewAtRiskPasswords": { + "message": "Review at-risk passwords" + }, + "reviewAtRiskLoginsSlideDesc": { + "message": "Your organization passwords are at-risk because they are weak, reused, and/or exposed.", + "description": "Description of the review at-risk login slide on the at-risk password page carousel" + }, + "reviewAtRiskLoginSlideImgAlt": { + "message": "Illustration of a list of logins that are at-risk" + }, + "generatePasswordSlideDesc": { + "message": "Quickly generate a strong, unique password with the Bitwarden autofill menu on the at-risk site.", + "description": "Description of the generate password slide on the at-risk password page carousel" + }, + "generatePasswordSlideImgAlt": { + "message": "Illustration of the Bitwarden autofill menu displaying a generated password" + }, + "updateInBitwarden": { + "message": "Update in Bitwarden" + }, + "updateInBitwardenSlideDesc": { + "message": "Bitwarden will then prompt you to update the password in the password manager.", + "description": "Description of the update in Bitwarden slide on the at-risk password page carousel" + }, + "updateInBitwardenSlideImgAlt": { + "message": "Illustration of a Bitwarden’s notification prompting the user to update the login" + }, "turnOnAutofill": { "message": "Ενεργοποίηση αυτόματης συμπλήρωσης" }, @@ -3983,6 +4110,9 @@ "activeAccount": { "message": "Ενεργός λογαριασμός" }, + "bitwardenAccount": { + "message": "Bitwarden account" + }, "availableAccounts": { "message": "Διαθέσιμοι λογαριασμοί" }, @@ -4181,6 +4311,20 @@ } } }, + "copyFieldValue": { + "message": "Copy $FIELD$, $VALUE$", + "description": "Title for a button that copies a field value to the clipboard.", + "placeholders": { + "field": { + "content": "$1", + "example": "Username" + }, + "value": { + "content": "$2", + "example": "Foo" + } + } + }, "noValuesToCopy": { "message": "Δεν υπάρχουν τιμές για αντιγραφή" }, @@ -5002,5 +5146,8 @@ }, "updateDesktopAppOrDisableFingerprintDialogMessage": { "message": "To use biometric unlock, please update your desktop application, or disable fingerprint unlock in the desktop settings." + }, + "changeAtRiskPassword": { + "message": "Change at-risk password" } } diff --git a/apps/browser/src/_locales/en/messages.json b/apps/browser/src/_locales/en/messages.json index 239de13afdb..67b770230cd 100644 --- a/apps/browser/src/_locales/en/messages.json +++ b/apps/browser/src/_locales/en/messages.json @@ -479,22 +479,6 @@ "length": { "message": "Length" }, - "uppercase": { - "message": "Uppercase (A-Z)", - "description": "deprecated. Use uppercaseLabel instead." - }, - "lowercase": { - "message": "Lowercase (a-z)", - "description": "deprecated. Use lowercaseLabel instead." - }, - "numbers": { - "message": "Numbers (0-9)", - "description": "deprecated. Use numbersLabel instead." - }, - "specialCharacters": { - "message": "Special characters (!@#$%^&*)", - "description": "deprecated. Use specialCharactersLabel instead." - }, "include": { "message": "Include", "description": "Card header for password generator include block" @@ -527,10 +511,6 @@ "message": "Include special characters", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "numWords": { "message": "Number of words" }, @@ -669,8 +649,8 @@ "browserNotSupportClipboard": { "message": "Your web browser does not support easy clipboard copying. Copy it manually instead." }, - "verifyIdentity": { - "message": "Verify identity" + "verifyYourIdentity": { + "message": "Verify your identity" }, "weDontRecognizeThisDevice": { "message": "We don't recognize this device. Enter the code sent to your email to verify your identity." @@ -921,6 +901,9 @@ "no": { "message": "No" }, + "location": { + "message": "Location" + }, "unexpectedError": { "message": "An unexpected error has occurred." }, @@ -1070,6 +1053,56 @@ "notificationAddSave": { "message": "Save" }, + "loginSaveSuccessDetails": { + "message": "$USERNAME$ saved to Bitwarden.", + "placeholders": { + "username": { + "content": "$1" + } + }, + "description": "Shown to user after login is saved." + }, + "loginUpdatedSuccessDetails": { + "message": "$USERNAME$ updated in Bitwarden.", + "placeholders": { + "username": { + "content": "$1" + } + }, + "description": "Shown to user after login is updated." + }, + "saveAsNewLoginAction": { + "message": "Save as new login", + "description": "Button text for saving login details as a new entry." + }, + "updateLoginAction": { + "message": "Update login", + "description": "Button text for updating an existing login entry." + }, + "saveLoginPrompt": { + "message": "Save login?", + "description": "Prompt asking the user if they want to save their login details." + }, + "updateLoginPrompt": { + "message": "Update existing login?", + "description": "Prompt asking the user if they want to update an existing login entry." + }, + "loginSaveSuccess": { + "message": "Login saved", + "description": "Message displayed when login details are successfully saved." + }, + "loginUpdateSuccess": { + "message": "Login updated", + "description": "Message displayed when login details are successfully updated." + }, + "saveFailure": { + "message": "Error saving", + "description": "Error message shown when the system fails to save login details." + }, + "saveFailureDetails": { + "message": "Oh no! We couldn't save this. Try entering the details manually.", + "description": "Detailed error message shown when saving login details fails." + }, "enableChangedPasswordNotification": { "message": "Ask to update existing login" }, @@ -1133,10 +1166,6 @@ "message": "Light", "description": "Light color" }, - "solarizedDark": { - "message": "Solarized dark", - "description": "'Solarized' is a noun and the name of a color scheme. It should not be translated." - }, "exportFrom": { "message": "Export from" }, @@ -1397,14 +1426,14 @@ }, "useAnotherTwoStepMethod": { "message": "Use another two-step login method" - }, + }, "selectAnotherMethod": { "message": "Select another method", "description": "Select another two-step login method" }, "useYourRecoveryCode": { "message": "Use your recovery code" - }, + }, "insertYubiKey": { "message": "Insert your YubiKey into your computer's USB port, then touch its button." }, @@ -2143,6 +2172,15 @@ "vaultTimeoutAction1": { "message": "Timeout action" }, + "newCustomizationOptionsCalloutTitle": { + "message": "New customization options" + }, + "newCustomizationOptionsCalloutContent": { + "message": "Customize your vault experience with quick copy actions, compact mode, and more!" + }, + "newCustomizationOptionsCalloutLink": { + "message": "View all Appearance settings" + }, "lock": { "message": "Lock", "description": "Verb form: to make secure or inaccessible by" @@ -2437,8 +2475,17 @@ "atRiskPasswords": { "message": "At-risk passwords" }, - "atRiskPasswordsDescSingleOrg": { - "message": "$ORGANIZATION$ is requesting you change the $COUNT$ passwords because they are at risk.", + "atRiskPasswordDescSingleOrg": { + "message": "$ORGANIZATION$ is requesting you change one password because it is at-risk.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + } + }, + "atRiskPasswordsDescSingleOrgPlural": { + "message": "$ORGANIZATION$ is requesting you change the $COUNT$ passwords because they are at-risk.", "placeholders": { "organization": { "content": "$1", @@ -2450,8 +2497,8 @@ } } }, - "atRiskPasswordsDescMultiOrg": { - "message": "Your organizations are requesting you change the $COUNT$ passwords because they are at risk.", + "atRiskPasswordsDescMultiOrgPlural": { + "message": "Your organizations are requesting you change the $COUNT$ passwords because they are at-risk.", "placeholders": { "count": { "content": "$1", @@ -2477,6 +2524,36 @@ "changeAtRiskPasswordsFasterDesc": { "message": "Update your settings so you can quickly autofill your passwords and generate new ones" }, + "reviewAtRiskLogins": { + "message": "Review at-risk logins" + }, + "reviewAtRiskPasswords": { + "message": "Review at-risk passwords" + }, + "reviewAtRiskLoginsSlideDesc": { + "message": "Your organization passwords are at-risk because they are weak, reused, and/or exposed.", + "description": "Description of the review at-risk login slide on the at-risk password page carousel" + }, + "reviewAtRiskLoginSlideImgAlt": { + "message": "Illustration of a list of logins that are at-risk" + }, + "generatePasswordSlideDesc": { + "message": "Quickly generate a strong, unique password with the Bitwarden autofill menu on the at-risk site.", + "description": "Description of the generate password slide on the at-risk password page carousel" + }, + "generatePasswordSlideImgAlt": { + "message": "Illustration of the Bitwarden autofill menu displaying a generated password" + }, + "updateInBitwarden": { + "message": "Update in Bitwarden" + }, + "updateInBitwardenSlideDesc": { + "message": "Bitwarden will then prompt you to update the password in the password manager.", + "description": "Description of the update in Bitwarden slide on the at-risk password page carousel" + }, + "updateInBitwardenSlideImgAlt": { + "message": "Illustration of a Bitwarden’s notification prompting the user to update the login" + }, "turnOnAutofill": { "message": "Turn on autofill" }, @@ -4029,6 +4106,9 @@ "activeAccount": { "message": "Active account" }, + "bitwardenAccount": { + "message": "Bitwarden account" + }, "availableAccounts": { "message": "Available accounts" }, @@ -4227,6 +4307,20 @@ } } }, + "copyFieldValue": { + "message": "Copy $FIELD$, $VALUE$", + "description": "Title for a button that copies a field value to the clipboard.", + "placeholders": { + "field": { + "content": "$1", + "example": "Username" + }, + "value": { + "content": "$2", + "example": "Foo" + } + } + }, "noValuesToCopy": { "message": "No values to copy" }, @@ -5048,5 +5142,8 @@ }, "updateDesktopAppOrDisableFingerprintDialogMessage": { "message": "To use biometric unlock, please update your desktop application, or disable fingerprint unlock in the desktop settings." + }, + "changeAtRiskPassword": { + "message": "Change at-risk password" } } diff --git a/apps/browser/src/_locales/en_GB/messages.json b/apps/browser/src/_locales/en_GB/messages.json index 291c9614de4..17b76ceaa0e 100644 --- a/apps/browser/src/_locales/en_GB/messages.json +++ b/apps/browser/src/_locales/en_GB/messages.json @@ -80,6 +80,15 @@ "masterPassHint": { "message": "Master password hint (optional)" }, + "passwordStrengthScore": { + "message": "Password strength score $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "joinOrganization": { "message": "Join organisation" }, @@ -470,22 +479,6 @@ "length": { "message": "Length" }, - "uppercase": { - "message": "Uppercase (A-Z)", - "description": "deprecated. Use uppercaseLabel instead." - }, - "lowercase": { - "message": "Lowercase (a-z)", - "description": "deprecated. Use lowercaseLabel instead." - }, - "numbers": { - "message": "Numbers (0-9)", - "description": "deprecated. Use numbersLabel instead." - }, - "specialCharacters": { - "message": "Special characters (!@#$%^&*)", - "description": "deprecated. Use specialCharactersLabel instead." - }, "include": { "message": "Include", "description": "Card header for password generator include block" @@ -518,10 +511,6 @@ "message": "Include special characters", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "numWords": { "message": "Number of words" }, @@ -660,8 +649,8 @@ "browserNotSupportClipboard": { "message": "Your web browser does not support easy clipboard copying. Copy it manually instead." }, - "verifyIdentity": { - "message": "Verify identity" + "verifyYourIdentity": { + "message": "Verify your identity" }, "weDontRecognizeThisDevice": { "message": "We don't recognise this device. Enter the code sent to your email to verify your identity." @@ -876,6 +865,21 @@ "logInToBitwarden": { "message": "Log in to Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "Enter the code sent to your email" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Enter the code from your authenticator app" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Press your YubiKey to authenticate" + }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Duo two-step login is required for your account. Follow the steps below to finish logging in." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Follow the steps below to finish logging in." + }, "restartRegistration": { "message": "Restart registration" }, @@ -897,6 +901,9 @@ "no": { "message": "No" }, + "location": { + "message": "Location" + }, "unexpectedError": { "message": "An unexpected error has occurred." }, @@ -1046,6 +1053,56 @@ "notificationAddSave": { "message": "Save" }, + "loginSaveSuccessDetails": { + "message": "$USERNAME$ saved to Bitwarden.", + "placeholders": { + "username": { + "content": "$1" + } + }, + "description": "Shown to user after login is saved." + }, + "loginUpdatedSuccessDetails": { + "message": "$USERNAME$ updated in Bitwarden.", + "placeholders": { + "username": { + "content": "$1" + } + }, + "description": "Shown to user after login is updated." + }, + "saveAsNewLoginAction": { + "message": "Save as new login", + "description": "Button text for saving login details as a new entry." + }, + "updateLoginAction": { + "message": "Update login", + "description": "Button text for updating an existing login entry." + }, + "saveLoginPrompt": { + "message": "Save login?", + "description": "Prompt asking the user if they want to save their login details." + }, + "updateLoginPrompt": { + "message": "Update existing login?", + "description": "Prompt asking the user if they want to update an existing login entry." + }, + "loginSaveSuccess": { + "message": "Login saved", + "description": "Message displayed when login details are successfully saved." + }, + "loginUpdateSuccess": { + "message": "Login updated", + "description": "Message displayed when login details are successfully updated." + }, + "saveFailure": { + "message": "Error saving", + "description": "Error message shown when the system fails to save login details." + }, + "saveFailureDetails": { + "message": "Oh no! We couldn't save this. Try entering the details manually.", + "description": "Detailed error message shown when saving login details fails." + }, "enableChangedPasswordNotification": { "message": "Ask to update existing login" }, @@ -1365,12 +1422,22 @@ "rememberMe": { "message": "Remember me" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Don't ask again on this device for 30 days" + }, "sendVerificationCodeEmailAgain": { "message": "Send verification code email again" }, "useAnotherTwoStepMethod": { "message": "Use another two-step login method" }, + "selectAnotherMethod": { + "message": "Select another method", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Use your recovery code" + }, "insertYubiKey": { "message": "Insert your YubiKey into your computer's USB port, then touch its button." }, @@ -1383,9 +1450,18 @@ "webAuthnNewTabOpen": { "message": "Open new tab" }, + "openInNewTab": { + "message": "Open in new tab" + }, "webAuthnAuthenticate": { "message": "Authenticate WebAuthn" }, + "readSecurityKey": { + "message": "Read security key" + }, + "awaitingSecurityKeyInteraction": { + "message": "Awaiting security key interaction..." + }, "loginUnavailable": { "message": "Login unavailable" }, @@ -1398,6 +1474,9 @@ "twoStepOptions": { "message": "Two-step login options" }, + "selectTwoStepLoginMethod": { + "message": "Select two-step login method" + }, "recoveryCodeDesc": { "message": "Lost access to all of your two-factor providers? Use your recovery code to turn off all two-factor providers from your account." }, @@ -2097,6 +2176,15 @@ "vaultTimeoutAction1": { "message": "Timeout action" }, + "newCustomizationOptionsCalloutTitle": { + "message": "New customisation options" + }, + "newCustomizationOptionsCalloutContent": { + "message": "Customise your vault experience with quick copy actions, compact mode, and more!" + }, + "newCustomizationOptionsCalloutLink": { + "message": "View all Appearance settings" + }, "lock": { "message": "Lock", "description": "Verb form: to make secure or inaccessible by" @@ -2391,8 +2479,17 @@ "atRiskPasswords": { "message": "At-risk passwords" }, - "atRiskPasswordsDescSingleOrg": { - "message": "$ORGANIZATION$ is requesting you change the $COUNT$ passwords because they are at risk.", + "atRiskPasswordDescSingleOrg": { + "message": "$ORGANIZATION$ is requesting you change one password because it is at-risk.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + } + }, + "atRiskPasswordsDescSingleOrgPlural": { + "message": "$ORGANIZATION$ is requesting you change the $COUNT$ passwords because they are at-risk.", "placeholders": { "organization": { "content": "$1", @@ -2404,8 +2501,8 @@ } } }, - "atRiskPasswordsDescMultiOrg": { - "message": "Your organisations are requesting you change the $COUNT$ passwords because they are at risk.", + "atRiskPasswordsDescMultiOrgPlural": { + "message": "Your organisations are requesting you change the $COUNT$ passwords because they are at-risk.", "placeholders": { "count": { "content": "$1", @@ -2431,6 +2528,36 @@ "changeAtRiskPasswordsFasterDesc": { "message": "Update your settings so you can quickly autofill your passwords and generate new ones" }, + "reviewAtRiskLogins": { + "message": "Review at-risk logins" + }, + "reviewAtRiskPasswords": { + "message": "Review at-risk passwords" + }, + "reviewAtRiskLoginsSlideDesc": { + "message": "Your organisation passwords are at-risk because they are weak, reused, and/or exposed.", + "description": "Description of the review at-risk login slide on the at-risk password page carousel" + }, + "reviewAtRiskLoginSlideImgAlt": { + "message": "Illustration of a list of logins that are at-risk" + }, + "generatePasswordSlideDesc": { + "message": "Quickly generate a strong, unique password with the Bitwarden autofill menu on the at-risk site.", + "description": "Description of the generate password slide on the at-risk password page carousel" + }, + "generatePasswordSlideImgAlt": { + "message": "Illustration of the Bitwarden autofill menu displaying a generated password" + }, + "updateInBitwarden": { + "message": "Update in Bitwarden" + }, + "updateInBitwardenSlideDesc": { + "message": "Bitwarden will then prompt you to update the password in the password manager.", + "description": "Description of the update in Bitwarden slide on the at-risk password page carousel" + }, + "updateInBitwardenSlideImgAlt": { + "message": "Illustration of a Bitwarden’s notification prompting the user to update the login" + }, "turnOnAutofill": { "message": "Turn on autofill" }, @@ -3983,6 +4110,9 @@ "activeAccount": { "message": "Active account" }, + "bitwardenAccount": { + "message": "Bitwarden account" + }, "availableAccounts": { "message": "Available accounts" }, @@ -4181,6 +4311,20 @@ } } }, + "copyFieldValue": { + "message": "Copy $FIELD$, $VALUE$", + "description": "Title for a button that copies a field value to the clipboard.", + "placeholders": { + "field": { + "content": "$1", + "example": "Username" + }, + "value": { + "content": "$2", + "example": "Foo" + } + } + }, "noValuesToCopy": { "message": "No values to copy" }, @@ -5002,5 +5146,8 @@ }, "updateDesktopAppOrDisableFingerprintDialogMessage": { "message": "To use biometric unlock, please update your desktop application, or disable fingerprint unlock in the desktop settings." + }, + "changeAtRiskPassword": { + "message": "Change at-risk password" } } diff --git a/apps/browser/src/_locales/en_IN/messages.json b/apps/browser/src/_locales/en_IN/messages.json index 11beca8f909..022d3eb4c22 100644 --- a/apps/browser/src/_locales/en_IN/messages.json +++ b/apps/browser/src/_locales/en_IN/messages.json @@ -80,6 +80,15 @@ "masterPassHint": { "message": "Master password hint (optional)" }, + "passwordStrengthScore": { + "message": "Password strength score $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "joinOrganization": { "message": "Join organisation" }, @@ -470,22 +479,6 @@ "length": { "message": "Length" }, - "uppercase": { - "message": "Uppercase (A-Z)", - "description": "deprecated. Use uppercaseLabel instead." - }, - "lowercase": { - "message": "Lowercase (a-z)", - "description": "deprecated. Use lowercaseLabel instead." - }, - "numbers": { - "message": "Numbers (0-9)", - "description": "deprecated. Use numbersLabel instead." - }, - "specialCharacters": { - "message": "Special Characters (!@#$%^&*)", - "description": "deprecated. Use specialCharactersLabel instead." - }, "include": { "message": "Include", "description": "Card header for password generator include block" @@ -518,10 +511,6 @@ "message": "Include special characters", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "numWords": { "message": "Number of words" }, @@ -660,8 +649,8 @@ "browserNotSupportClipboard": { "message": "Your web browser does not support easy clipboard copying. Copy it manually instead." }, - "verifyIdentity": { - "message": "Verify Identity" + "verifyYourIdentity": { + "message": "Verify your identity" }, "weDontRecognizeThisDevice": { "message": "We don't recognise this device. Enter the code sent to your email to verify your identity." @@ -876,6 +865,21 @@ "logInToBitwarden": { "message": "Log in to Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "Enter the code sent to your email" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Enter the code from your authenticator app" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Press your YubiKey to authenticate" + }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Duo two-step login is required for your account. Follow the steps below to finish logging in." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Follow the steps below to finish logging in." + }, "restartRegistration": { "message": "Restart registration" }, @@ -897,6 +901,9 @@ "no": { "message": "No" }, + "location": { + "message": "Location" + }, "unexpectedError": { "message": "An unexpected error has occurred." }, @@ -1046,6 +1053,56 @@ "notificationAddSave": { "message": "Yes, save now" }, + "loginSaveSuccessDetails": { + "message": "$USERNAME$ saved to Bitwarden.", + "placeholders": { + "username": { + "content": "$1" + } + }, + "description": "Shown to user after login is saved." + }, + "loginUpdatedSuccessDetails": { + "message": "$USERNAME$ updated in Bitwarden.", + "placeholders": { + "username": { + "content": "$1" + } + }, + "description": "Shown to user after login is updated." + }, + "saveAsNewLoginAction": { + "message": "Save as new login", + "description": "Button text for saving login details as a new entry." + }, + "updateLoginAction": { + "message": "Update login", + "description": "Button text for updating an existing login entry." + }, + "saveLoginPrompt": { + "message": "Save login?", + "description": "Prompt asking the user if they want to save their login details." + }, + "updateLoginPrompt": { + "message": "Update existing login?", + "description": "Prompt asking the user if they want to update an existing login entry." + }, + "loginSaveSuccess": { + "message": "Login saved", + "description": "Message displayed when login details are successfully saved." + }, + "loginUpdateSuccess": { + "message": "Login updated", + "description": "Message displayed when login details are successfully updated." + }, + "saveFailure": { + "message": "Error saving", + "description": "Error message shown when the system fails to save login details." + }, + "saveFailureDetails": { + "message": "Oh no! We couldn't save this. Try entering the details manually.", + "description": "Detailed error message shown when saving login details fails." + }, "enableChangedPasswordNotification": { "message": "Ask to update existing login" }, @@ -1365,12 +1422,22 @@ "rememberMe": { "message": "Remember me" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Don't ask again on this device for 30 days" + }, "sendVerificationCodeEmailAgain": { "message": "Send verification code email again" }, "useAnotherTwoStepMethod": { "message": "Use another two-step login method" }, + "selectAnotherMethod": { + "message": "Select another method", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Use your recovery code" + }, "insertYubiKey": { "message": "Insert your YubiKey into your computer's USB port, then touch its button." }, @@ -1383,9 +1450,18 @@ "webAuthnNewTabOpen": { "message": "Open new tab" }, + "openInNewTab": { + "message": "Open in new tab" + }, "webAuthnAuthenticate": { "message": "Authenticate WebAuthn" }, + "readSecurityKey": { + "message": "Read security key" + }, + "awaitingSecurityKeyInteraction": { + "message": "Awaiting security key interaction..." + }, "loginUnavailable": { "message": "Login unavailable" }, @@ -1398,6 +1474,9 @@ "twoStepOptions": { "message": "Two-step login options" }, + "selectTwoStepLoginMethod": { + "message": "Select two-step login method" + }, "recoveryCodeDesc": { "message": "Lost access to all of your two-factor providers? Use your recovery code to disable all two-factor providers from your account." }, @@ -2097,6 +2176,15 @@ "vaultTimeoutAction1": { "message": "Timeout action" }, + "newCustomizationOptionsCalloutTitle": { + "message": "New customisation options" + }, + "newCustomizationOptionsCalloutContent": { + "message": "Customise your vault experience with quick copy actions, compact mode, and more!" + }, + "newCustomizationOptionsCalloutLink": { + "message": "View all Appearance settings" + }, "lock": { "message": "Lock", "description": "Verb form: to make secure or inaccessible by" @@ -2391,8 +2479,17 @@ "atRiskPasswords": { "message": "At-risk passwords" }, - "atRiskPasswordsDescSingleOrg": { - "message": "$ORGANIZATION$ is requesting you change the $COUNT$ passwords because they are at risk.", + "atRiskPasswordDescSingleOrg": { + "message": "$ORGANIZATION$ is requesting you change one password because it is at-risk.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + } + }, + "atRiskPasswordsDescSingleOrgPlural": { + "message": "$ORGANIZATION$ is requesting you change the $COUNT$ passwords because they are at-risk.", "placeholders": { "organization": { "content": "$1", @@ -2404,8 +2501,8 @@ } } }, - "atRiskPasswordsDescMultiOrg": { - "message": "Your organisations are requesting you change the $COUNT$ passwords because they are at risk.", + "atRiskPasswordsDescMultiOrgPlural": { + "message": "Your organisations are requesting you change the $COUNT$ passwords because they are at-risk.", "placeholders": { "count": { "content": "$1", @@ -2431,6 +2528,36 @@ "changeAtRiskPasswordsFasterDesc": { "message": "Update your settings so you can quickly autofill your passwords and generate new ones" }, + "reviewAtRiskLogins": { + "message": "Review at-risk logins" + }, + "reviewAtRiskPasswords": { + "message": "Review at-risk passwords" + }, + "reviewAtRiskLoginsSlideDesc": { + "message": "Your organisation passwords are at-risk because they are weak, reused, and/or exposed.", + "description": "Description of the review at-risk login slide on the at-risk password page carousel" + }, + "reviewAtRiskLoginSlideImgAlt": { + "message": "Illustration of a list of logins that are at-risk" + }, + "generatePasswordSlideDesc": { + "message": "Quickly generate a strong, unique password with the Bitwarden autofill menu on the at-risk site.", + "description": "Description of the generate password slide on the at-risk password page carousel" + }, + "generatePasswordSlideImgAlt": { + "message": "Illustration of the Bitwarden autofill menu displaying a generated password" + }, + "updateInBitwarden": { + "message": "Update in Bitwarden" + }, + "updateInBitwardenSlideDesc": { + "message": "Bitwarden will then prompt you to update the password in the password manager.", + "description": "Description of the update in Bitwarden slide on the at-risk password page carousel" + }, + "updateInBitwardenSlideImgAlt": { + "message": "Illustration of a Bitwarden’s notification prompting the user to update the login" + }, "turnOnAutofill": { "message": "Turn on autofill" }, @@ -3983,6 +4110,9 @@ "activeAccount": { "message": "Active account" }, + "bitwardenAccount": { + "message": "Bitwarden account" + }, "availableAccounts": { "message": "Available accounts" }, @@ -4181,6 +4311,20 @@ } } }, + "copyFieldValue": { + "message": "Copy $FIELD$, $VALUE$", + "description": "Title for a button that copies a field value to the clipboard.", + "placeholders": { + "field": { + "content": "$1", + "example": "Username" + }, + "value": { + "content": "$2", + "example": "Foo" + } + } + }, "noValuesToCopy": { "message": "No values to copy" }, @@ -5002,5 +5146,8 @@ }, "updateDesktopAppOrDisableFingerprintDialogMessage": { "message": "To use biometric unlock, please update your desktop application, or disable fingerprint unlock in the desktop settings." + }, + "changeAtRiskPassword": { + "message": "Change at-risk password" } } diff --git a/apps/browser/src/_locales/es/messages.json b/apps/browser/src/_locales/es/messages.json index 6cd70552b19..587afb99dcb 100644 --- a/apps/browser/src/_locales/es/messages.json +++ b/apps/browser/src/_locales/es/messages.json @@ -80,6 +80,15 @@ "masterPassHint": { "message": "Pista de contraseña maestra (opcional)" }, + "passwordStrengthScore": { + "message": "Password strength score $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "joinOrganization": { "message": "Incorporarse a la organización" }, @@ -470,22 +479,6 @@ "length": { "message": "Longitud" }, - "uppercase": { - "message": "Mayúsculas (A-Z)", - "description": "deprecated. Use uppercaseLabel instead." - }, - "lowercase": { - "message": "Minúsculas (a-z)", - "description": "deprecated. Use lowercaseLabel instead." - }, - "numbers": { - "message": "Números (0-9)", - "description": "deprecated. Use numbersLabel instead." - }, - "specialCharacters": { - "message": "Caracteres especiales (!@#$%^&*)", - "description": "deprecated. Use specialCharactersLabel instead." - }, "include": { "message": "Incluir", "description": "Card header for password generator include block" @@ -518,10 +511,6 @@ "message": "Incluir caracteres especiales", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "numWords": { "message": "Número de palabras" }, @@ -660,8 +649,8 @@ "browserNotSupportClipboard": { "message": "Tu navegador web no soporta copiar al portapapeles facilmente. Cópialo manualmente." }, - "verifyIdentity": { - "message": "Verificar identidad" + "verifyYourIdentity": { + "message": "Verify your identity" }, "weDontRecognizeThisDevice": { "message": "No reconocemos este dispositivo. Introduce el código enviado a tu correo electrónico para verificar tu identidad." @@ -876,6 +865,21 @@ "logInToBitwarden": { "message": "Iniciar sesión en Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "Enter the code sent to your email" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Enter the code from your authenticator app" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Press your YubiKey to authenticate" + }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Duo two-step login is required for your account. Follow the steps below to finish logging in." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Follow the steps below to finish logging in." + }, "restartRegistration": { "message": "Reiniciar registro" }, @@ -897,6 +901,9 @@ "no": { "message": "No" }, + "location": { + "message": "Location" + }, "unexpectedError": { "message": "Ha ocurrido un error inesperado." }, @@ -1046,6 +1053,56 @@ "notificationAddSave": { "message": "Guardar" }, + "loginSaveSuccessDetails": { + "message": "$USERNAME$ saved to Bitwarden.", + "placeholders": { + "username": { + "content": "$1" + } + }, + "description": "Shown to user after login is saved." + }, + "loginUpdatedSuccessDetails": { + "message": "$USERNAME$ updated in Bitwarden.", + "placeholders": { + "username": { + "content": "$1" + } + }, + "description": "Shown to user after login is updated." + }, + "saveAsNewLoginAction": { + "message": "Save as new login", + "description": "Button text for saving login details as a new entry." + }, + "updateLoginAction": { + "message": "Update login", + "description": "Button text for updating an existing login entry." + }, + "saveLoginPrompt": { + "message": "Save login?", + "description": "Prompt asking the user if they want to save their login details." + }, + "updateLoginPrompt": { + "message": "Update existing login?", + "description": "Prompt asking the user if they want to update an existing login entry." + }, + "loginSaveSuccess": { + "message": "Login saved", + "description": "Message displayed when login details are successfully saved." + }, + "loginUpdateSuccess": { + "message": "Login updated", + "description": "Message displayed when login details are successfully updated." + }, + "saveFailure": { + "message": "Error saving", + "description": "Error message shown when the system fails to save login details." + }, + "saveFailureDetails": { + "message": "Oh no! We couldn't save this. Try entering the details manually.", + "description": "Detailed error message shown when saving login details fails." + }, "enableChangedPasswordNotification": { "message": "Solicitar la actualización de los datos de inicio de sesión existentes" }, @@ -1365,12 +1422,22 @@ "rememberMe": { "message": "Recordarme" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Don't ask again on this device for 30 days" + }, "sendVerificationCodeEmailAgain": { "message": "Reenviar código de verificación por correo electrónico" }, "useAnotherTwoStepMethod": { "message": "Utilizar otro método de autenticación en dos pasos" }, + "selectAnotherMethod": { + "message": "Select another method", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Use your recovery code" + }, "insertYubiKey": { "message": "Inserta tu YubiKey en el puerto USB de tu equipo y posteriormente pulsa su botón." }, @@ -1383,9 +1450,18 @@ "webAuthnNewTabOpen": { "message": "Abrir nueva pestaña" }, + "openInNewTab": { + "message": "Open in new tab" + }, "webAuthnAuthenticate": { "message": "Autenticar WebAuthn" }, + "readSecurityKey": { + "message": "Read security key" + }, + "awaitingSecurityKeyInteraction": { + "message": "Awaiting security key interaction..." + }, "loginUnavailable": { "message": "Entrada no disponible" }, @@ -1398,6 +1474,9 @@ "twoStepOptions": { "message": "Opciones de la autenticación en dos pasos" }, + "selectTwoStepLoginMethod": { + "message": "Select two-step login method" + }, "recoveryCodeDesc": { "message": "¿Has perdido el acceso a todos tus métodos de autenticación en dos pasos? Utiliza tu código de recuperación para deshabilitar todos los métodos de autenticación en dos pasos de tu cuenta." }, @@ -2097,6 +2176,15 @@ "vaultTimeoutAction1": { "message": "Acción de tiempo agotado" }, + "newCustomizationOptionsCalloutTitle": { + "message": "New customization options" + }, + "newCustomizationOptionsCalloutContent": { + "message": "Customize your vault experience with quick copy actions, compact mode, and more!" + }, + "newCustomizationOptionsCalloutLink": { + "message": "View all Appearance settings" + }, "lock": { "message": "Bloquear", "description": "Verb form: to make secure or inaccessible by" @@ -2391,8 +2479,17 @@ "atRiskPasswords": { "message": "Contraseñas de riesgo" }, - "atRiskPasswordsDescSingleOrg": { - "message": "$ORGANIZATION$ is requesting you change the $COUNT$ passwords because they are at risk.", + "atRiskPasswordDescSingleOrg": { + "message": "$ORGANIZATION$ is requesting you change one password because it is at-risk.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + } + }, + "atRiskPasswordsDescSingleOrgPlural": { + "message": "$ORGANIZATION$ is requesting you change the $COUNT$ passwords because they are at-risk.", "placeholders": { "organization": { "content": "$1", @@ -2404,8 +2501,8 @@ } } }, - "atRiskPasswordsDescMultiOrg": { - "message": "Your organizations are requesting you change the $COUNT$ passwords because they are at risk.", + "atRiskPasswordsDescMultiOrgPlural": { + "message": "Your organizations are requesting you change the $COUNT$ passwords because they are at-risk.", "placeholders": { "count": { "content": "$1", @@ -2431,6 +2528,36 @@ "changeAtRiskPasswordsFasterDesc": { "message": "Update your settings so you can quickly autofill your passwords and generate new ones" }, + "reviewAtRiskLogins": { + "message": "Review at-risk logins" + }, + "reviewAtRiskPasswords": { + "message": "Review at-risk passwords" + }, + "reviewAtRiskLoginsSlideDesc": { + "message": "Your organization passwords are at-risk because they are weak, reused, and/or exposed.", + "description": "Description of the review at-risk login slide on the at-risk password page carousel" + }, + "reviewAtRiskLoginSlideImgAlt": { + "message": "Illustration of a list of logins that are at-risk" + }, + "generatePasswordSlideDesc": { + "message": "Quickly generate a strong, unique password with the Bitwarden autofill menu on the at-risk site.", + "description": "Description of the generate password slide on the at-risk password page carousel" + }, + "generatePasswordSlideImgAlt": { + "message": "Illustration of the Bitwarden autofill menu displaying a generated password" + }, + "updateInBitwarden": { + "message": "Update in Bitwarden" + }, + "updateInBitwardenSlideDesc": { + "message": "Bitwarden will then prompt you to update the password in the password manager.", + "description": "Description of the update in Bitwarden slide on the at-risk password page carousel" + }, + "updateInBitwardenSlideImgAlt": { + "message": "Illustration of a Bitwarden’s notification prompting the user to update the login" + }, "turnOnAutofill": { "message": "Activar autorrelleno" }, @@ -3983,6 +4110,9 @@ "activeAccount": { "message": "Cuenta activa" }, + "bitwardenAccount": { + "message": "Bitwarden account" + }, "availableAccounts": { "message": "Cuentas disponibles" }, @@ -4181,6 +4311,20 @@ } } }, + "copyFieldValue": { + "message": "Copy $FIELD$, $VALUE$", + "description": "Title for a button that copies a field value to the clipboard.", + "placeholders": { + "field": { + "content": "$1", + "example": "Username" + }, + "value": { + "content": "$2", + "example": "Foo" + } + } + }, "noValuesToCopy": { "message": "No hay valores para copiar" }, @@ -5002,5 +5146,8 @@ }, "updateDesktopAppOrDisableFingerprintDialogMessage": { "message": "Para utilizar el desbloqueo biométrico, por favor actualice su aplicación de escritorio o desactive el desbloqueo de huella dactilar en los ajustes del escritorio." + }, + "changeAtRiskPassword": { + "message": "Change at-risk password" } } diff --git a/apps/browser/src/_locales/et/messages.json b/apps/browser/src/_locales/et/messages.json index e4b02553b85..d59a702463d 100644 --- a/apps/browser/src/_locales/et/messages.json +++ b/apps/browser/src/_locales/et/messages.json @@ -80,6 +80,15 @@ "masterPassHint": { "message": "Ülemparooli vihje (ei ole kohustuslik)" }, + "passwordStrengthScore": { + "message": "Password strength score $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "joinOrganization": { "message": "Liitu organisatsiooniga" }, @@ -470,22 +479,6 @@ "length": { "message": "Pikkus" }, - "uppercase": { - "message": "Suurtäht (A-Z) ", - "description": "deprecated. Use uppercaseLabel instead." - }, - "lowercase": { - "message": "Väiketäht (a-z) ", - "description": "deprecated. Use lowercaseLabel instead." - }, - "numbers": { - "message": "Numbrid (0-9)", - "description": "deprecated. Use numbersLabel instead." - }, - "specialCharacters": { - "message": "Erimärgid (!@#$%^&*)", - "description": "deprecated. Use specialCharactersLabel instead." - }, "include": { "message": "Kasuta", "description": "Card header for password generator include block" @@ -518,10 +511,6 @@ "message": "Kasuta sümboleid", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "numWords": { "message": "Sõnade arv" }, @@ -660,8 +649,8 @@ "browserNotSupportClipboard": { "message": "Kasutatav brauser ei toeta lihtsat lõikelaua kopeerimist. Kopeeri see käsitsi." }, - "verifyIdentity": { - "message": "Identiteedi kinnitamine" + "verifyYourIdentity": { + "message": "Verify your identity" }, "weDontRecognizeThisDevice": { "message": "We don't recognize this device. Enter the code sent to your email to verify your identity." @@ -876,6 +865,21 @@ "logInToBitwarden": { "message": "Log in to Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "Enter the code sent to your email" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Enter the code from your authenticator app" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Press your YubiKey to authenticate" + }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Duo two-step login is required for your account. Follow the steps below to finish logging in." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Follow the steps below to finish logging in." + }, "restartRegistration": { "message": "Alusta registreerimist uuesti" }, @@ -897,6 +901,9 @@ "no": { "message": "Ei" }, + "location": { + "message": "Location" + }, "unexpectedError": { "message": "Tekkis ootamatu viga." }, @@ -1046,6 +1053,56 @@ "notificationAddSave": { "message": "Jah, salvesta see" }, + "loginSaveSuccessDetails": { + "message": "$USERNAME$ saved to Bitwarden.", + "placeholders": { + "username": { + "content": "$1" + } + }, + "description": "Shown to user after login is saved." + }, + "loginUpdatedSuccessDetails": { + "message": "$USERNAME$ updated in Bitwarden.", + "placeholders": { + "username": { + "content": "$1" + } + }, + "description": "Shown to user after login is updated." + }, + "saveAsNewLoginAction": { + "message": "Save as new login", + "description": "Button text for saving login details as a new entry." + }, + "updateLoginAction": { + "message": "Update login", + "description": "Button text for updating an existing login entry." + }, + "saveLoginPrompt": { + "message": "Save login?", + "description": "Prompt asking the user if they want to save their login details." + }, + "updateLoginPrompt": { + "message": "Update existing login?", + "description": "Prompt asking the user if they want to update an existing login entry." + }, + "loginSaveSuccess": { + "message": "Login saved", + "description": "Message displayed when login details are successfully saved." + }, + "loginUpdateSuccess": { + "message": "Login updated", + "description": "Message displayed when login details are successfully updated." + }, + "saveFailure": { + "message": "Error saving", + "description": "Error message shown when the system fails to save login details." + }, + "saveFailureDetails": { + "message": "Oh no! We couldn't save this. Try entering the details manually.", + "description": "Detailed error message shown when saving login details fails." + }, "enableChangedPasswordNotification": { "message": "Paku olemasolevate andmete uuendamist" }, @@ -1365,12 +1422,22 @@ "rememberMe": { "message": "Jäta mind meelde" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Don't ask again on this device for 30 days" + }, "sendVerificationCodeEmailAgain": { "message": "Saada kinnituskood uuesti e-postile" }, "useAnotherTwoStepMethod": { "message": "Kasuta teist kaheastmelist sisselogimise meetodit" }, + "selectAnotherMethod": { + "message": "Select another method", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Use your recovery code" + }, "insertYubiKey": { "message": "Sisesta oma YubiKey arvuti USB porti ja kliki sellele nupule." }, @@ -1383,9 +1450,18 @@ "webAuthnNewTabOpen": { "message": "Ava uus vahekaart" }, + "openInNewTab": { + "message": "Open in new tab" + }, "webAuthnAuthenticate": { "message": "WebAuthn kinnitamine" }, + "readSecurityKey": { + "message": "Read security key" + }, + "awaitingSecurityKeyInteraction": { + "message": "Awaiting security key interaction..." + }, "loginUnavailable": { "message": "Sisselogimine ei ole saadaval" }, @@ -1398,6 +1474,9 @@ "twoStepOptions": { "message": "Kaheastmelise sisselogimise valikud" }, + "selectTwoStepLoginMethod": { + "message": "Select two-step login method" + }, "recoveryCodeDesc": { "message": "Puudub ligipääs kaheastmelise kinnitamise teenusele? Kasuta Taastamise koodi, et kaheastmeline kinnitamine oma kontol välja lülitada." }, @@ -2097,6 +2176,15 @@ "vaultTimeoutAction1": { "message": "Timeout action" }, + "newCustomizationOptionsCalloutTitle": { + "message": "New customization options" + }, + "newCustomizationOptionsCalloutContent": { + "message": "Customize your vault experience with quick copy actions, compact mode, and more!" + }, + "newCustomizationOptionsCalloutLink": { + "message": "View all Appearance settings" + }, "lock": { "message": "Lukusta", "description": "Verb form: to make secure or inaccessible by" @@ -2391,8 +2479,17 @@ "atRiskPasswords": { "message": "At-risk passwords" }, - "atRiskPasswordsDescSingleOrg": { - "message": "$ORGANIZATION$ is requesting you change the $COUNT$ passwords because they are at risk.", + "atRiskPasswordDescSingleOrg": { + "message": "$ORGANIZATION$ is requesting you change one password because it is at-risk.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + } + }, + "atRiskPasswordsDescSingleOrgPlural": { + "message": "$ORGANIZATION$ is requesting you change the $COUNT$ passwords because they are at-risk.", "placeholders": { "organization": { "content": "$1", @@ -2404,8 +2501,8 @@ } } }, - "atRiskPasswordsDescMultiOrg": { - "message": "Your organizations are requesting you change the $COUNT$ passwords because they are at risk.", + "atRiskPasswordsDescMultiOrgPlural": { + "message": "Your organizations are requesting you change the $COUNT$ passwords because they are at-risk.", "placeholders": { "count": { "content": "$1", @@ -2431,6 +2528,36 @@ "changeAtRiskPasswordsFasterDesc": { "message": "Update your settings so you can quickly autofill your passwords and generate new ones" }, + "reviewAtRiskLogins": { + "message": "Review at-risk logins" + }, + "reviewAtRiskPasswords": { + "message": "Review at-risk passwords" + }, + "reviewAtRiskLoginsSlideDesc": { + "message": "Your organization passwords are at-risk because they are weak, reused, and/or exposed.", + "description": "Description of the review at-risk login slide on the at-risk password page carousel" + }, + "reviewAtRiskLoginSlideImgAlt": { + "message": "Illustration of a list of logins that are at-risk" + }, + "generatePasswordSlideDesc": { + "message": "Quickly generate a strong, unique password with the Bitwarden autofill menu on the at-risk site.", + "description": "Description of the generate password slide on the at-risk password page carousel" + }, + "generatePasswordSlideImgAlt": { + "message": "Illustration of the Bitwarden autofill menu displaying a generated password" + }, + "updateInBitwarden": { + "message": "Update in Bitwarden" + }, + "updateInBitwardenSlideDesc": { + "message": "Bitwarden will then prompt you to update the password in the password manager.", + "description": "Description of the update in Bitwarden slide on the at-risk password page carousel" + }, + "updateInBitwardenSlideImgAlt": { + "message": "Illustration of a Bitwarden’s notification prompting the user to update the login" + }, "turnOnAutofill": { "message": "Turn on autofill" }, @@ -3983,6 +4110,9 @@ "activeAccount": { "message": "Active account" }, + "bitwardenAccount": { + "message": "Bitwarden account" + }, "availableAccounts": { "message": "Available accounts" }, @@ -4181,6 +4311,20 @@ } } }, + "copyFieldValue": { + "message": "Copy $FIELD$, $VALUE$", + "description": "Title for a button that copies a field value to the clipboard.", + "placeholders": { + "field": { + "content": "$1", + "example": "Username" + }, + "value": { + "content": "$2", + "example": "Foo" + } + } + }, "noValuesToCopy": { "message": "No values to copy" }, @@ -5002,5 +5146,8 @@ }, "updateDesktopAppOrDisableFingerprintDialogMessage": { "message": "To use biometric unlock, please update your desktop application, or disable fingerprint unlock in the desktop settings." + }, + "changeAtRiskPassword": { + "message": "Change at-risk password" } } diff --git a/apps/browser/src/_locales/eu/messages.json b/apps/browser/src/_locales/eu/messages.json index 36a2cb365ab..4bd642ffc35 100644 --- a/apps/browser/src/_locales/eu/messages.json +++ b/apps/browser/src/_locales/eu/messages.json @@ -80,6 +80,15 @@ "masterPassHint": { "message": "Pasahitz nagusirako pista (aukerakoa)" }, + "passwordStrengthScore": { + "message": "Password strength score $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "joinOrganization": { "message": "Join organization" }, @@ -470,22 +479,6 @@ "length": { "message": "Luzera" }, - "uppercase": { - "message": "Letra larria (A-Z)", - "description": "deprecated. Use uppercaseLabel instead." - }, - "lowercase": { - "message": "Letra txikia (a-z)", - "description": "deprecated. Use lowercaseLabel instead." - }, - "numbers": { - "message": "Zenbakiak (0-9)", - "description": "deprecated. Use numbersLabel instead." - }, - "specialCharacters": { - "message": "Karaktere bereziak (!@#$%^&*)", - "description": "deprecated. Use specialCharactersLabel instead." - }, "include": { "message": "Include", "description": "Card header for password generator include block" @@ -518,10 +511,6 @@ "message": "Include special characters", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "numWords": { "message": "Hitz kopurua" }, @@ -660,8 +649,8 @@ "browserNotSupportClipboard": { "message": "Zure web nabigatzaileak ez du onartzen arbelean erraz kopiatzea. Eskuz kopiatu." }, - "verifyIdentity": { - "message": "Zure identitatea egiaztatu" + "verifyYourIdentity": { + "message": "Verify your identity" }, "weDontRecognizeThisDevice": { "message": "We don't recognize this device. Enter the code sent to your email to verify your identity." @@ -876,6 +865,21 @@ "logInToBitwarden": { "message": "Log in to Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "Enter the code sent to your email" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Enter the code from your authenticator app" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Press your YubiKey to authenticate" + }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Duo two-step login is required for your account. Follow the steps below to finish logging in." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Follow the steps below to finish logging in." + }, "restartRegistration": { "message": "Restart registration" }, @@ -897,6 +901,9 @@ "no": { "message": "Ez" }, + "location": { + "message": "Location" + }, "unexpectedError": { "message": "Ustekabeko akatsa gertatu da." }, @@ -1046,6 +1053,56 @@ "notificationAddSave": { "message": "Gorde" }, + "loginSaveSuccessDetails": { + "message": "$USERNAME$ saved to Bitwarden.", + "placeholders": { + "username": { + "content": "$1" + } + }, + "description": "Shown to user after login is saved." + }, + "loginUpdatedSuccessDetails": { + "message": "$USERNAME$ updated in Bitwarden.", + "placeholders": { + "username": { + "content": "$1" + } + }, + "description": "Shown to user after login is updated." + }, + "saveAsNewLoginAction": { + "message": "Save as new login", + "description": "Button text for saving login details as a new entry." + }, + "updateLoginAction": { + "message": "Update login", + "description": "Button text for updating an existing login entry." + }, + "saveLoginPrompt": { + "message": "Save login?", + "description": "Prompt asking the user if they want to save their login details." + }, + "updateLoginPrompt": { + "message": "Update existing login?", + "description": "Prompt asking the user if they want to update an existing login entry." + }, + "loginSaveSuccess": { + "message": "Login saved", + "description": "Message displayed when login details are successfully saved." + }, + "loginUpdateSuccess": { + "message": "Login updated", + "description": "Message displayed when login details are successfully updated." + }, + "saveFailure": { + "message": "Error saving", + "description": "Error message shown when the system fails to save login details." + }, + "saveFailureDetails": { + "message": "Oh no! We couldn't save this. Try entering the details manually.", + "description": "Detailed error message shown when saving login details fails." + }, "enableChangedPasswordNotification": { "message": "Galdetu uneko saio-hasiera eguneratzeko" }, @@ -1365,12 +1422,22 @@ "rememberMe": { "message": "Gogora nazazu" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Don't ask again on this device for 30 days" + }, "sendVerificationCodeEmailAgain": { "message": "Berbidali email bidezko egiaztatze-kodea." }, "useAnotherTwoStepMethod": { "message": "Erabili bi urratseko saio hasierarako beste modu bat" }, + "selectAnotherMethod": { + "message": "Select another method", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Use your recovery code" + }, "insertYubiKey": { "message": "Sartu zure YubiKey-a ordenagailuko USB atakan, ondoren, sakatu bere botoia." }, @@ -1383,9 +1450,18 @@ "webAuthnNewTabOpen": { "message": "Ireki fitxa berria" }, + "openInNewTab": { + "message": "Open in new tab" + }, "webAuthnAuthenticate": { "message": "WebAuthn autentifikatu" }, + "readSecurityKey": { + "message": "Read security key" + }, + "awaitingSecurityKeyInteraction": { + "message": "Awaiting security key interaction..." + }, "loginUnavailable": { "message": "Ez dago eskuragarri saio-hasierarik" }, @@ -1398,6 +1474,9 @@ "twoStepOptions": { "message": "Bi urratseko saio hasieraren aukerak" }, + "selectTwoStepLoginMethod": { + "message": "Select two-step login method" + }, "recoveryCodeDesc": { "message": "Bi urratseko egiaztatzeko modu guztietarako sarbidea galdu duzu? Erabili zure berreskuratze-kodea zure kontuko bi urratseko egiaztatze hornitzaile guztiak desaktibatzeko." }, @@ -2097,6 +2176,15 @@ "vaultTimeoutAction1": { "message": "Timeout action" }, + "newCustomizationOptionsCalloutTitle": { + "message": "New customization options" + }, + "newCustomizationOptionsCalloutContent": { + "message": "Customize your vault experience with quick copy actions, compact mode, and more!" + }, + "newCustomizationOptionsCalloutLink": { + "message": "View all Appearance settings" + }, "lock": { "message": "Blokeatu", "description": "Verb form: to make secure or inaccessible by" @@ -2391,8 +2479,17 @@ "atRiskPasswords": { "message": "At-risk passwords" }, - "atRiskPasswordsDescSingleOrg": { - "message": "$ORGANIZATION$ is requesting you change the $COUNT$ passwords because they are at risk.", + "atRiskPasswordDescSingleOrg": { + "message": "$ORGANIZATION$ is requesting you change one password because it is at-risk.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + } + }, + "atRiskPasswordsDescSingleOrgPlural": { + "message": "$ORGANIZATION$ is requesting you change the $COUNT$ passwords because they are at-risk.", "placeholders": { "organization": { "content": "$1", @@ -2404,8 +2501,8 @@ } } }, - "atRiskPasswordsDescMultiOrg": { - "message": "Your organizations are requesting you change the $COUNT$ passwords because they are at risk.", + "atRiskPasswordsDescMultiOrgPlural": { + "message": "Your organizations are requesting you change the $COUNT$ passwords because they are at-risk.", "placeholders": { "count": { "content": "$1", @@ -2431,6 +2528,36 @@ "changeAtRiskPasswordsFasterDesc": { "message": "Update your settings so you can quickly autofill your passwords and generate new ones" }, + "reviewAtRiskLogins": { + "message": "Review at-risk logins" + }, + "reviewAtRiskPasswords": { + "message": "Review at-risk passwords" + }, + "reviewAtRiskLoginsSlideDesc": { + "message": "Your organization passwords are at-risk because they are weak, reused, and/or exposed.", + "description": "Description of the review at-risk login slide on the at-risk password page carousel" + }, + "reviewAtRiskLoginSlideImgAlt": { + "message": "Illustration of a list of logins that are at-risk" + }, + "generatePasswordSlideDesc": { + "message": "Quickly generate a strong, unique password with the Bitwarden autofill menu on the at-risk site.", + "description": "Description of the generate password slide on the at-risk password page carousel" + }, + "generatePasswordSlideImgAlt": { + "message": "Illustration of the Bitwarden autofill menu displaying a generated password" + }, + "updateInBitwarden": { + "message": "Update in Bitwarden" + }, + "updateInBitwardenSlideDesc": { + "message": "Bitwarden will then prompt you to update the password in the password manager.", + "description": "Description of the update in Bitwarden slide on the at-risk password page carousel" + }, + "updateInBitwardenSlideImgAlt": { + "message": "Illustration of a Bitwarden’s notification prompting the user to update the login" + }, "turnOnAutofill": { "message": "Turn on autofill" }, @@ -3983,6 +4110,9 @@ "activeAccount": { "message": "Active account" }, + "bitwardenAccount": { + "message": "Bitwarden account" + }, "availableAccounts": { "message": "Available accounts" }, @@ -4181,6 +4311,20 @@ } } }, + "copyFieldValue": { + "message": "Copy $FIELD$, $VALUE$", + "description": "Title for a button that copies a field value to the clipboard.", + "placeholders": { + "field": { + "content": "$1", + "example": "Username" + }, + "value": { + "content": "$2", + "example": "Foo" + } + } + }, "noValuesToCopy": { "message": "No values to copy" }, @@ -5002,5 +5146,8 @@ }, "updateDesktopAppOrDisableFingerprintDialogMessage": { "message": "To use biometric unlock, please update your desktop application, or disable fingerprint unlock in the desktop settings." + }, + "changeAtRiskPassword": { + "message": "Change at-risk password" } } diff --git a/apps/browser/src/_locales/fa/messages.json b/apps/browser/src/_locales/fa/messages.json index 07cb47c8919..f905d649549 100644 --- a/apps/browser/src/_locales/fa/messages.json +++ b/apps/browser/src/_locales/fa/messages.json @@ -80,6 +80,15 @@ "masterPassHint": { "message": "یادآور کلمه عبور اصلی (اختیاری)" }, + "passwordStrengthScore": { + "message": "Password strength score $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "joinOrganization": { "message": "Join organization" }, @@ -470,22 +479,6 @@ "length": { "message": "طول" }, - "uppercase": { - "message": "حروف بزرگ (A-Z)", - "description": "deprecated. Use uppercaseLabel instead." - }, - "lowercase": { - "message": "حروف کوچک (a-z)", - "description": "deprecated. Use lowercaseLabel instead." - }, - "numbers": { - "message": "اعداد (‪0-9‬)", - "description": "deprecated. Use numbersLabel instead." - }, - "specialCharacters": { - "message": "نویسه‌های ویژه (!@#$%^&*)", - "description": "deprecated. Use specialCharactersLabel instead." - }, "include": { "message": "Include", "description": "Card header for password generator include block" @@ -518,10 +511,6 @@ "message": "Include special characters", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "numWords": { "message": "تعداد کلمات" }, @@ -660,8 +649,8 @@ "browserNotSupportClipboard": { "message": "مرورگر شما از کپی کلیپ بورد آسان پشتیبانی نمی‌کند. به جای آن به صورت دستی کپی کنید." }, - "verifyIdentity": { - "message": "تأیید هویت" + "verifyYourIdentity": { + "message": "Verify your identity" }, "weDontRecognizeThisDevice": { "message": "We don't recognize this device. Enter the code sent to your email to verify your identity." @@ -876,6 +865,21 @@ "logInToBitwarden": { "message": "Log in to Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "Enter the code sent to your email" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Enter the code from your authenticator app" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Press your YubiKey to authenticate" + }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Duo two-step login is required for your account. Follow the steps below to finish logging in." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Follow the steps below to finish logging in." + }, "restartRegistration": { "message": "Restart registration" }, @@ -897,6 +901,9 @@ "no": { "message": "خیر" }, + "location": { + "message": "Location" + }, "unexpectedError": { "message": "یک خطای غیر منتظره رخ داده است." }, @@ -1046,6 +1053,56 @@ "notificationAddSave": { "message": "ذخیره" }, + "loginSaveSuccessDetails": { + "message": "$USERNAME$ saved to Bitwarden.", + "placeholders": { + "username": { + "content": "$1" + } + }, + "description": "Shown to user after login is saved." + }, + "loginUpdatedSuccessDetails": { + "message": "$USERNAME$ updated in Bitwarden.", + "placeholders": { + "username": { + "content": "$1" + } + }, + "description": "Shown to user after login is updated." + }, + "saveAsNewLoginAction": { + "message": "Save as new login", + "description": "Button text for saving login details as a new entry." + }, + "updateLoginAction": { + "message": "Update login", + "description": "Button text for updating an existing login entry." + }, + "saveLoginPrompt": { + "message": "Save login?", + "description": "Prompt asking the user if they want to save their login details." + }, + "updateLoginPrompt": { + "message": "Update existing login?", + "description": "Prompt asking the user if they want to update an existing login entry." + }, + "loginSaveSuccess": { + "message": "Login saved", + "description": "Message displayed when login details are successfully saved." + }, + "loginUpdateSuccess": { + "message": "Login updated", + "description": "Message displayed when login details are successfully updated." + }, + "saveFailure": { + "message": "Error saving", + "description": "Error message shown when the system fails to save login details." + }, + "saveFailureDetails": { + "message": "Oh no! We couldn't save this. Try entering the details manually.", + "description": "Detailed error message shown when saving login details fails." + }, "enableChangedPasswordNotification": { "message": "درخواست برای به‌روزرسانی ورود به سیستم موجود" }, @@ -1365,12 +1422,22 @@ "rememberMe": { "message": "مرا به خاطر بسپار" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Don't ask again on this device for 30 days" + }, "sendVerificationCodeEmailAgain": { "message": "ارسال دوباره ایمیل کد تأیید" }, "useAnotherTwoStepMethod": { "message": "استفاده از روش ورود دو مرحله‌ای دیگر" }, + "selectAnotherMethod": { + "message": "Select another method", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Use your recovery code" + }, "insertYubiKey": { "message": "YubiKey خود را وارد پورت USB رایانه کنید، بعد دکمه آن را بفشارید." }, @@ -1383,9 +1450,18 @@ "webAuthnNewTabOpen": { "message": "باز کردن زبانه جدید" }, + "openInNewTab": { + "message": "Open in new tab" + }, "webAuthnAuthenticate": { "message": "تأیید اعتبار در WebAuthn" }, + "readSecurityKey": { + "message": "Read security key" + }, + "awaitingSecurityKeyInteraction": { + "message": "Awaiting security key interaction..." + }, "loginUnavailable": { "message": "ورود به سیستم در دسترس نیست" }, @@ -1398,6 +1474,9 @@ "twoStepOptions": { "message": "گزینه‌های ورود دو مرحله‌ای" }, + "selectTwoStepLoginMethod": { + "message": "Select two-step login method" + }, "recoveryCodeDesc": { "message": "دسترسی به تمامی ارائه‌دهندگان دو مرحله‌ای را از دست داده‌اید؟ از کد بازیابی خود برای غیرفعال‌سازی ارائه‌دهندگان دو مرحله‌ای از حسابتان استفاده کنید." }, @@ -2097,6 +2176,15 @@ "vaultTimeoutAction1": { "message": "Timeout action" }, + "newCustomizationOptionsCalloutTitle": { + "message": "New customization options" + }, + "newCustomizationOptionsCalloutContent": { + "message": "Customize your vault experience with quick copy actions, compact mode, and more!" + }, + "newCustomizationOptionsCalloutLink": { + "message": "View all Appearance settings" + }, "lock": { "message": "قفل", "description": "Verb form: to make secure or inaccessible by" @@ -2391,8 +2479,17 @@ "atRiskPasswords": { "message": "At-risk passwords" }, - "atRiskPasswordsDescSingleOrg": { - "message": "$ORGANIZATION$ is requesting you change the $COUNT$ passwords because they are at risk.", + "atRiskPasswordDescSingleOrg": { + "message": "$ORGANIZATION$ is requesting you change one password because it is at-risk.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + } + }, + "atRiskPasswordsDescSingleOrgPlural": { + "message": "$ORGANIZATION$ is requesting you change the $COUNT$ passwords because they are at-risk.", "placeholders": { "organization": { "content": "$1", @@ -2404,8 +2501,8 @@ } } }, - "atRiskPasswordsDescMultiOrg": { - "message": "Your organizations are requesting you change the $COUNT$ passwords because they are at risk.", + "atRiskPasswordsDescMultiOrgPlural": { + "message": "Your organizations are requesting you change the $COUNT$ passwords because they are at-risk.", "placeholders": { "count": { "content": "$1", @@ -2431,6 +2528,36 @@ "changeAtRiskPasswordsFasterDesc": { "message": "Update your settings so you can quickly autofill your passwords and generate new ones" }, + "reviewAtRiskLogins": { + "message": "Review at-risk logins" + }, + "reviewAtRiskPasswords": { + "message": "Review at-risk passwords" + }, + "reviewAtRiskLoginsSlideDesc": { + "message": "Your organization passwords are at-risk because they are weak, reused, and/or exposed.", + "description": "Description of the review at-risk login slide on the at-risk password page carousel" + }, + "reviewAtRiskLoginSlideImgAlt": { + "message": "Illustration of a list of logins that are at-risk" + }, + "generatePasswordSlideDesc": { + "message": "Quickly generate a strong, unique password with the Bitwarden autofill menu on the at-risk site.", + "description": "Description of the generate password slide on the at-risk password page carousel" + }, + "generatePasswordSlideImgAlt": { + "message": "Illustration of the Bitwarden autofill menu displaying a generated password" + }, + "updateInBitwarden": { + "message": "Update in Bitwarden" + }, + "updateInBitwardenSlideDesc": { + "message": "Bitwarden will then prompt you to update the password in the password manager.", + "description": "Description of the update in Bitwarden slide on the at-risk password page carousel" + }, + "updateInBitwardenSlideImgAlt": { + "message": "Illustration of a Bitwarden’s notification prompting the user to update the login" + }, "turnOnAutofill": { "message": "Turn on autofill" }, @@ -3983,6 +4110,9 @@ "activeAccount": { "message": "Active account" }, + "bitwardenAccount": { + "message": "Bitwarden account" + }, "availableAccounts": { "message": "Available accounts" }, @@ -4181,6 +4311,20 @@ } } }, + "copyFieldValue": { + "message": "Copy $FIELD$, $VALUE$", + "description": "Title for a button that copies a field value to the clipboard.", + "placeholders": { + "field": { + "content": "$1", + "example": "Username" + }, + "value": { + "content": "$2", + "example": "Foo" + } + } + }, "noValuesToCopy": { "message": "No values to copy" }, @@ -5002,5 +5146,8 @@ }, "updateDesktopAppOrDisableFingerprintDialogMessage": { "message": "To use biometric unlock, please update your desktop application, or disable fingerprint unlock in the desktop settings." + }, + "changeAtRiskPassword": { + "message": "Change at-risk password" } } diff --git a/apps/browser/src/_locales/fi/messages.json b/apps/browser/src/_locales/fi/messages.json index e917a43c29e..14910878987 100644 --- a/apps/browser/src/_locales/fi/messages.json +++ b/apps/browser/src/_locales/fi/messages.json @@ -80,6 +80,15 @@ "masterPassHint": { "message": "Pääsalasanan vihje (valinnainen)" }, + "passwordStrengthScore": { + "message": "Salasanan vahvuusarvio $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "joinOrganization": { "message": "Liity organisaatioon" }, @@ -177,7 +186,7 @@ "message": "Kopioi merkinnät" }, "copy": { - "message": "Copy", + "message": "Kopioi", "description": "Copy to clipboard" }, "fill": { @@ -470,22 +479,6 @@ "length": { "message": "Pituus" }, - "uppercase": { - "message": "Isot kirjaimet (A-Z)", - "description": "deprecated. Use uppercaseLabel instead." - }, - "lowercase": { - "message": "Pienet kirjaimet (a-z)", - "description": "deprecated. Use lowercaseLabel instead." - }, - "numbers": { - "message": "Numerot (0-9)", - "description": "deprecated. Use numbersLabel instead." - }, - "specialCharacters": { - "message": "Erikoismerkit (!@#$%^&*)", - "description": "deprecated. Use specialCharactersLabel instead." - }, "include": { "message": "Sisällytys", "description": "Card header for password generator include block" @@ -518,10 +511,6 @@ "message": "Sisällytä erikoismerkkejä", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "numWords": { "message": "Sanojen määrä" }, @@ -660,8 +649,8 @@ "browserNotSupportClipboard": { "message": "Selaimesi ei tue helppoa leikepöydälle kopiointia. Kopioi kohde manuaalisesti." }, - "verifyIdentity": { - "message": "Vahvista henkilöllisyytesi" + "verifyYourIdentity": { + "message": "Verify your identity" }, "weDontRecognizeThisDevice": { "message": "Emme tunnista tätä laitetta. Anna sähköpostiisi lähetetty koodi henkilöllisyytesi vahvistamiseksi." @@ -876,6 +865,21 @@ "logInToBitwarden": { "message": "Kirjaudu Bitwardeniin" }, + "enterTheCodeSentToYourEmail": { + "message": "Syötä sähköpostitse vastaanottamasi koodi" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Syötä todennussovelluksesi näyttämä koodi" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Tunnistaudu painalla YubiKeytäsi" + }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Duon edellyttää tililtäsi kaksivaiheista tunnistautumista. Viimeistele kirjautuminen seuraamalla seuraavia vaiheita." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Viimeistele kirjautuminen seuraamalla seuraavia vaiheita." + }, "restartRegistration": { "message": "Aloita rekisteröityminen alusta" }, @@ -897,6 +901,9 @@ "no": { "message": "En" }, + "location": { + "message": "Location" + }, "unexpectedError": { "message": "Tapahtui odottamaton virhe." }, @@ -1030,7 +1037,7 @@ "message": "Valitse kohteita täyttääksesi tiedot automaattisesti Holvi-näkymässä" }, "clickToAutofill": { - "message": "Click items in autofill suggestion to fill" + "message": "Täytä automaattitäytön ehdotus napsauttamalla sitä" }, "clearClipboard": { "message": "Tyhjennä leikepöytä", @@ -1046,6 +1053,56 @@ "notificationAddSave": { "message": "Tallenna" }, + "loginSaveSuccessDetails": { + "message": "$USERNAME$ saved to Bitwarden.", + "placeholders": { + "username": { + "content": "$1" + } + }, + "description": "Shown to user after login is saved." + }, + "loginUpdatedSuccessDetails": { + "message": "$USERNAME$ updated in Bitwarden.", + "placeholders": { + "username": { + "content": "$1" + } + }, + "description": "Shown to user after login is updated." + }, + "saveAsNewLoginAction": { + "message": "Save as new login", + "description": "Button text for saving login details as a new entry." + }, + "updateLoginAction": { + "message": "Update login", + "description": "Button text for updating an existing login entry." + }, + "saveLoginPrompt": { + "message": "Save login?", + "description": "Prompt asking the user if they want to save their login details." + }, + "updateLoginPrompt": { + "message": "Update existing login?", + "description": "Prompt asking the user if they want to update an existing login entry." + }, + "loginSaveSuccess": { + "message": "Login saved", + "description": "Message displayed when login details are successfully saved." + }, + "loginUpdateSuccess": { + "message": "Login updated", + "description": "Message displayed when login details are successfully updated." + }, + "saveFailure": { + "message": "Error saving", + "description": "Error message shown when the system fails to save login details." + }, + "saveFailureDetails": { + "message": "Oh no! We couldn't save this. Try entering the details manually.", + "description": "Detailed error message shown when saving login details fails." + }, "enableChangedPasswordNotification": { "message": "Kysy päivitetäänkö kirjautumistieto" }, @@ -1365,12 +1422,22 @@ "rememberMe": { "message": "Muista minut" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Älä kysy uudelleen tällä laitteella 30 päivään" + }, "sendVerificationCodeEmailAgain": { "message": "Lähetä todennuskoodi sähköpostitse uudelleen" }, "useAnotherTwoStepMethod": { "message": "Käytä vaihtoehtoista todennustapaa" }, + "selectAnotherMethod": { + "message": "Valitse vaihtoehtoinen tapa", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Käytä palautuskoodiasi" + }, "insertYubiKey": { "message": "Kytke YubiKey-todennuslaitteesi tietokoneen USB-porttiin ja paina sen painiketta." }, @@ -1383,9 +1450,18 @@ "webAuthnNewTabOpen": { "message": "Avaa uusi välilehti" }, + "openInNewTab": { + "message": "Avaa uudessa välilehdessä" + }, "webAuthnAuthenticate": { "message": "WebAuthn-todennus" }, + "readSecurityKey": { + "message": "Lue todennuslaite" + }, + "awaitingSecurityKeyInteraction": { + "message": "Odotetaan suojausavaimen aktivointia..." + }, "loginUnavailable": { "message": "Kirjautuminen ei ole käytettävissä" }, @@ -1398,6 +1474,9 @@ "twoStepOptions": { "message": "Kaksivaiheisen kirjautumisen asetukset" }, + "selectTwoStepLoginMethod": { + "message": "Käytä vaihtoehtoista tunnistautumistapaa" + }, "recoveryCodeDesc": { "message": "Etkö pysty käyttämään kaksivaiheisen kirjautumisen todentajiasi? Poista kaikki tilillesi määritetyt todentajat käytöstä palautuskoodillasi." }, @@ -2089,7 +2168,7 @@ "description": "This will be used as part of a larger sentence, broken up to include the generator icon. The full sentence will read 'Use the generator [GENERATOR_ICON] to create a strong unique password'" }, "vaultCustomization": { - "message": "Vault customization" + "message": "Holvin mukautus" }, "vaultTimeoutAction": { "message": "Holvin aikakatkaisutoiminto" @@ -2097,6 +2176,15 @@ "vaultTimeoutAction1": { "message": "Aikakatkaisutoiminto" }, + "newCustomizationOptionsCalloutTitle": { + "message": "New customization options" + }, + "newCustomizationOptionsCalloutContent": { + "message": "Customize your vault experience with quick copy actions, compact mode, and more!" + }, + "newCustomizationOptionsCalloutLink": { + "message": "View all Appearance settings" + }, "lock": { "message": "Lukitse", "description": "Verb form: to make secure or inaccessible by" @@ -2356,7 +2444,7 @@ "message": "Estetyt verkkotunnukset" }, "learnMoreAboutBlockedDomains": { - "message": "Learn more about blocked domains" + "message": "Lisätietoja estetyistä verkkotunnuksista" }, "excludedDomains": { "message": "Ohitettavat verkkotunnukset" @@ -2377,10 +2465,10 @@ "message": "Muuta tätä asetuksissa" }, "change": { - "message": "Change" + "message": "Vaihda" }, "changeButtonTitle": { - "message": "Change password - $ITEMNAME$", + "message": "Vaihda salasana - $ITEMNAME$", "placeholders": { "itemname": { "content": "$1", @@ -2389,10 +2477,19 @@ } }, "atRiskPasswords": { - "message": "At-risk passwords" + "message": "Vaarantuneet salasanat" }, - "atRiskPasswordsDescSingleOrg": { - "message": "$ORGANIZATION$ is requesting you change the $COUNT$ passwords because they are at risk.", + "atRiskPasswordDescSingleOrg": { + "message": "$ORGANIZATION$ is requesting you change one password because it is at-risk.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + } + }, + "atRiskPasswordsDescSingleOrgPlural": { + "message": "$ORGANIZATION$ is requesting you change the $COUNT$ passwords because they are at-risk.", "placeholders": { "organization": { "content": "$1", @@ -2404,8 +2501,8 @@ } } }, - "atRiskPasswordsDescMultiOrg": { - "message": "Your organizations are requesting you change the $COUNT$ passwords because they are at risk.", + "atRiskPasswordsDescMultiOrgPlural": { + "message": "Your organizations are requesting you change the $COUNT$ passwords because they are at-risk.", "placeholders": { "count": { "content": "$1", @@ -2414,10 +2511,10 @@ } }, "reviewAndChangeAtRiskPassword": { - "message": "Review and change one at-risk password" + "message": "Tarkasta ja vaihda yksi vaarantunut salasana" }, "reviewAndChangeAtRiskPasswordsPlural": { - "message": "Review and change $COUNT$ at-risk passwords", + "message": "Tarkasta ja vaihda $COUNT$ vaarantunutta salasanaa", "placeholders": { "count": { "content": "$1", @@ -2426,19 +2523,49 @@ } }, "changeAtRiskPasswordsFaster": { - "message": "Change at-risk passwords faster" + "message": "Vaihda vaarantuneet salasanat nopeammin" }, "changeAtRiskPasswordsFasterDesc": { - "message": "Update your settings so you can quickly autofill your passwords and generate new ones" + "message": "Päivitä asetuksesi, jotta voit täyttää salasanasi ja luoda uusia nopeasti." + }, + "reviewAtRiskLogins": { + "message": "Review at-risk logins" + }, + "reviewAtRiskPasswords": { + "message": "Review at-risk passwords" + }, + "reviewAtRiskLoginsSlideDesc": { + "message": "Your organization passwords are at-risk because they are weak, reused, and/or exposed.", + "description": "Description of the review at-risk login slide on the at-risk password page carousel" + }, + "reviewAtRiskLoginSlideImgAlt": { + "message": "Illustration of a list of logins that are at-risk" + }, + "generatePasswordSlideDesc": { + "message": "Quickly generate a strong, unique password with the Bitwarden autofill menu on the at-risk site.", + "description": "Description of the generate password slide on the at-risk password page carousel" + }, + "generatePasswordSlideImgAlt": { + "message": "Illustration of the Bitwarden autofill menu displaying a generated password" + }, + "updateInBitwarden": { + "message": "Update in Bitwarden" + }, + "updateInBitwardenSlideDesc": { + "message": "Bitwarden will then prompt you to update the password in the password manager.", + "description": "Description of the update in Bitwarden slide on the at-risk password page carousel" + }, + "updateInBitwardenSlideImgAlt": { + "message": "Illustration of a Bitwarden’s notification prompting the user to update the login" }, "turnOnAutofill": { - "message": "Turn on autofill" + "message": "Ota automaattitäyttö käyttöön" }, "turnedOnAutofill": { - "message": "Turned on autofill" + "message": "Automaattitäyttö otettiin käyttöön" }, "dismiss": { - "message": "Dismiss" + "message": "Sulje" }, "websiteItemLabel": { "message": "Verkkotunnus $number$ (URI)", @@ -3045,7 +3172,7 @@ } }, "forwaderInvalidOperation": { - "message": "$SERVICENAME$ refused your request. Please contact your service provider for assistance.", + "message": "$SERVICENAME$ hylkäsi pyyntösi. Ole yhteydessä palveluntarjoajaasi saadaksesi apua.", "description": "Displayed when the user is forbidden from using the API by the forwarding service.", "placeholders": { "servicename": { @@ -3055,7 +3182,7 @@ } }, "forwaderInvalidOperationWithMessage": { - "message": "$SERVICENAME$ refused your request: $ERRORMESSAGE$", + "message": "$SERVICENAME$ hylkäsi pyyntösi: $ERRORMESSAGE$", "description": "Displayed when the user is forbidden from using the API by the forwarding service with an error message.", "placeholders": { "servicename": { @@ -3225,13 +3352,13 @@ "message": "Laitteellesi on lähetetty ilmoitus." }, "notificationSentDevicePart1": { - "message": "Unlock Bitwarden on your device or on the" + "message": "Avaa Bitwarden laitteellasi tai" }, "notificationSentDeviceAnchor": { - "message": "web app" + "message": "verkkosovelluksena" }, "notificationSentDevicePart2": { - "message": "Make sure the Fingerprint phrase matches the one below before approving." + "message": "Ennen hyväksyntää varmista, että tunnistelause vastaa alla olevaa lausetta." }, "aNotificationWasSentToYourDevice": { "message": "Laitteeseesi lähetettiin ilmoitus" @@ -3246,7 +3373,7 @@ "message": "Kirjautuminen aloitettu" }, "logInRequestSent": { - "message": "Request sent" + "message": "Pyyntö lähetetty" }, "exposedMasterPassword": { "message": "Paljastunut pääsalasana" @@ -3983,6 +4110,9 @@ "activeAccount": { "message": "Aktiivinen tili" }, + "bitwardenAccount": { + "message": "Bitwarden account" + }, "availableAccounts": { "message": "Käytettävissä olevat tilit" }, @@ -4181,6 +4311,20 @@ } } }, + "copyFieldValue": { + "message": "Copy $FIELD$, $VALUE$", + "description": "Title for a button that copies a field value to the clipboard.", + "placeholders": { + "field": { + "content": "$1", + "example": "Username" + }, + "value": { + "content": "$2", + "example": "Foo" + } + } + }, "noValuesToCopy": { "message": "Ei kopioitavia arvoja" }, @@ -5002,5 +5146,8 @@ }, "updateDesktopAppOrDisableFingerprintDialogMessage": { "message": "Käyttääksesi biometristä avausta, päivitä työpöytäsovelluksesi tai poista tunnistelauseke käytöstä työpöydän asetuksista." + }, + "changeAtRiskPassword": { + "message": "Change at-risk password" } } diff --git a/apps/browser/src/_locales/fil/messages.json b/apps/browser/src/_locales/fil/messages.json index e9d918dc58f..c9a170b037c 100644 --- a/apps/browser/src/_locales/fil/messages.json +++ b/apps/browser/src/_locales/fil/messages.json @@ -80,6 +80,15 @@ "masterPassHint": { "message": "Mungkahi sa Master Password (opsyonal)" }, + "passwordStrengthScore": { + "message": "Password strength score $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "joinOrganization": { "message": "Join organization" }, @@ -470,22 +479,6 @@ "length": { "message": "Kahabaan" }, - "uppercase": { - "message": "Uppercase (A-Z)", - "description": "deprecated. Use uppercaseLabel instead." - }, - "lowercase": { - "message": "Lowercase (a-t) sa Filipino ay mababang-letra (a-t)", - "description": "deprecated. Use lowercaseLabel instead." - }, - "numbers": { - "message": "Numbers (0-9)", - "description": "deprecated. Use numbersLabel instead." - }, - "specialCharacters": { - "message": "Mga espesyal na character (!@#$%^&*) sa Filipino ay tinatawag na mga simbolong pambihira", - "description": "deprecated. Use specialCharactersLabel instead." - }, "include": { "message": "Include", "description": "Card header for password generator include block" @@ -518,10 +511,6 @@ "message": "Include special characters", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "numWords": { "message": "Ang bilang ng mga salita\n\nNumero ng mga salita" }, @@ -660,8 +649,8 @@ "browserNotSupportClipboard": { "message": "Hindi suportado ng iyong web browser ang madaling pag-copy ng clipboard. Kopya ito manually sa halip." }, - "verifyIdentity": { - "message": "I-verify ang pagkakakilanlan" + "verifyYourIdentity": { + "message": "Verify your identity" }, "weDontRecognizeThisDevice": { "message": "We don't recognize this device. Enter the code sent to your email to verify your identity." @@ -876,6 +865,21 @@ "logInToBitwarden": { "message": "Log in to Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "Enter the code sent to your email" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Enter the code from your authenticator app" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Press your YubiKey to authenticate" + }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Duo two-step login is required for your account. Follow the steps below to finish logging in." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Follow the steps below to finish logging in." + }, "restartRegistration": { "message": "Restart registration" }, @@ -897,6 +901,9 @@ "no": { "message": "Hindi" }, + "location": { + "message": "Location" + }, "unexpectedError": { "message": "Namana ang isang hindi inaasahang error." }, @@ -1046,6 +1053,56 @@ "notificationAddSave": { "message": "I-save" }, + "loginSaveSuccessDetails": { + "message": "$USERNAME$ saved to Bitwarden.", + "placeholders": { + "username": { + "content": "$1" + } + }, + "description": "Shown to user after login is saved." + }, + "loginUpdatedSuccessDetails": { + "message": "$USERNAME$ updated in Bitwarden.", + "placeholders": { + "username": { + "content": "$1" + } + }, + "description": "Shown to user after login is updated." + }, + "saveAsNewLoginAction": { + "message": "Save as new login", + "description": "Button text for saving login details as a new entry." + }, + "updateLoginAction": { + "message": "Update login", + "description": "Button text for updating an existing login entry." + }, + "saveLoginPrompt": { + "message": "Save login?", + "description": "Prompt asking the user if they want to save their login details." + }, + "updateLoginPrompt": { + "message": "Update existing login?", + "description": "Prompt asking the user if they want to update an existing login entry." + }, + "loginSaveSuccess": { + "message": "Login saved", + "description": "Message displayed when login details are successfully saved." + }, + "loginUpdateSuccess": { + "message": "Login updated", + "description": "Message displayed when login details are successfully updated." + }, + "saveFailure": { + "message": "Error saving", + "description": "Error message shown when the system fails to save login details." + }, + "saveFailureDetails": { + "message": "Oh no! We couldn't save this. Try entering the details manually.", + "description": "Detailed error message shown when saving login details fails." + }, "enableChangedPasswordNotification": { "message": "Tanungin ang update ng umiiral na login" }, @@ -1365,12 +1422,22 @@ "rememberMe": { "message": "Tandaan mo ako" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Don't ask again on this device for 30 days" + }, "sendVerificationCodeEmailAgain": { "message": "Ipadala muli ang email ng verification code" }, "useAnotherTwoStepMethod": { "message": "Gamitin ang isa pang two-step na paraan ng pag-login" }, + "selectAnotherMethod": { + "message": "Select another method", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Use your recovery code" + }, "insertYubiKey": { "message": "I-insert ang iyong YubiKey sa USB port ng iyong computer, pagkatapos ay tindigin ang buton nito." }, @@ -1383,9 +1450,18 @@ "webAuthnNewTabOpen": { "message": "Buksan ang bagong tab" }, + "openInNewTab": { + "message": "Open in new tab" + }, "webAuthnAuthenticate": { "message": "I-authenticate ang WebAuthn" }, + "readSecurityKey": { + "message": "Read security key" + }, + "awaitingSecurityKeyInteraction": { + "message": "Awaiting security key interaction..." + }, "loginUnavailable": { "message": "Hindi magagamit ang pag-login" }, @@ -1398,6 +1474,9 @@ "twoStepOptions": { "message": "Mga pagpipilian para sa two-step login" }, + "selectTwoStepLoginMethod": { + "message": "Select two-step login method" + }, "recoveryCodeDesc": { "message": "Nawalan ka ng access sa lahat ng iyong mga two-factor provider? Gamitin ang iyong recovery code para i-off ang lahat ng two-factor providers mula sa iyong account." }, @@ -2097,6 +2176,15 @@ "vaultTimeoutAction1": { "message": "Timeout action" }, + "newCustomizationOptionsCalloutTitle": { + "message": "New customization options" + }, + "newCustomizationOptionsCalloutContent": { + "message": "Customize your vault experience with quick copy actions, compact mode, and more!" + }, + "newCustomizationOptionsCalloutLink": { + "message": "View all Appearance settings" + }, "lock": { "message": "I-lock", "description": "Verb form: to make secure or inaccessible by" @@ -2391,8 +2479,17 @@ "atRiskPasswords": { "message": "At-risk passwords" }, - "atRiskPasswordsDescSingleOrg": { - "message": "$ORGANIZATION$ is requesting you change the $COUNT$ passwords because they are at risk.", + "atRiskPasswordDescSingleOrg": { + "message": "$ORGANIZATION$ is requesting you change one password because it is at-risk.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + } + }, + "atRiskPasswordsDescSingleOrgPlural": { + "message": "$ORGANIZATION$ is requesting you change the $COUNT$ passwords because they are at-risk.", "placeholders": { "organization": { "content": "$1", @@ -2404,8 +2501,8 @@ } } }, - "atRiskPasswordsDescMultiOrg": { - "message": "Your organizations are requesting you change the $COUNT$ passwords because they are at risk.", + "atRiskPasswordsDescMultiOrgPlural": { + "message": "Your organizations are requesting you change the $COUNT$ passwords because they are at-risk.", "placeholders": { "count": { "content": "$1", @@ -2431,6 +2528,36 @@ "changeAtRiskPasswordsFasterDesc": { "message": "Update your settings so you can quickly autofill your passwords and generate new ones" }, + "reviewAtRiskLogins": { + "message": "Review at-risk logins" + }, + "reviewAtRiskPasswords": { + "message": "Review at-risk passwords" + }, + "reviewAtRiskLoginsSlideDesc": { + "message": "Your organization passwords are at-risk because they are weak, reused, and/or exposed.", + "description": "Description of the review at-risk login slide on the at-risk password page carousel" + }, + "reviewAtRiskLoginSlideImgAlt": { + "message": "Illustration of a list of logins that are at-risk" + }, + "generatePasswordSlideDesc": { + "message": "Quickly generate a strong, unique password with the Bitwarden autofill menu on the at-risk site.", + "description": "Description of the generate password slide on the at-risk password page carousel" + }, + "generatePasswordSlideImgAlt": { + "message": "Illustration of the Bitwarden autofill menu displaying a generated password" + }, + "updateInBitwarden": { + "message": "Update in Bitwarden" + }, + "updateInBitwardenSlideDesc": { + "message": "Bitwarden will then prompt you to update the password in the password manager.", + "description": "Description of the update in Bitwarden slide on the at-risk password page carousel" + }, + "updateInBitwardenSlideImgAlt": { + "message": "Illustration of a Bitwarden’s notification prompting the user to update the login" + }, "turnOnAutofill": { "message": "Turn on autofill" }, @@ -3983,6 +4110,9 @@ "activeAccount": { "message": "Active account" }, + "bitwardenAccount": { + "message": "Bitwarden account" + }, "availableAccounts": { "message": "Available accounts" }, @@ -4181,6 +4311,20 @@ } } }, + "copyFieldValue": { + "message": "Copy $FIELD$, $VALUE$", + "description": "Title for a button that copies a field value to the clipboard.", + "placeholders": { + "field": { + "content": "$1", + "example": "Username" + }, + "value": { + "content": "$2", + "example": "Foo" + } + } + }, "noValuesToCopy": { "message": "No values to copy" }, @@ -5002,5 +5146,8 @@ }, "updateDesktopAppOrDisableFingerprintDialogMessage": { "message": "To use biometric unlock, please update your desktop application, or disable fingerprint unlock in the desktop settings." + }, + "changeAtRiskPassword": { + "message": "Change at-risk password" } } diff --git a/apps/browser/src/_locales/fr/messages.json b/apps/browser/src/_locales/fr/messages.json index 960de5ff252..cc65400fecb 100644 --- a/apps/browser/src/_locales/fr/messages.json +++ b/apps/browser/src/_locales/fr/messages.json @@ -7,7 +7,7 @@ "description": "Extension name, MUST be less than 40 characters (Safari restriction)" }, "extDesc": { - "message": "Chez vous, au travail, n'importe où, Bitwarden sécurise mots de passe, clés d'accès et informations sensibles", + "message": "Où que vous soyez, Bitwarden sécurise tous vos mots de passe, clés d'accès et informations sensibles", "description": "Extension description, MUST be less than 112 characters (Safari restriction)" }, "loginOrCreateNewAccount": { @@ -20,7 +20,7 @@ "message": "Créer un compte" }, "newToBitwarden": { - "message": "Nouveau sur Bitwarden ?" + "message": "Nouveau sur Bitwarden ?" }, "logInWithPasskey": { "message": "Se connecter avec une clé d'accès" @@ -80,6 +80,15 @@ "masterPassHint": { "message": "Indice du mot de passe principal (facultatif)" }, + "passwordStrengthScore": { + "message": "Score de force du mot de passe $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "joinOrganization": { "message": "Rejoindre l'organisation" }, @@ -177,7 +186,7 @@ "message": "Copier les notes" }, "copy": { - "message": "Copy", + "message": "Copier", "description": "Copy to clipboard" }, "fill": { @@ -234,7 +243,7 @@ "message": "Connectez-vous à votre coffre" }, "autoFillInfo": { - "message": "Il n'y a aucun identifiant disponible pour le remplissage automatique de l'onglet actuel du navigateur." + "message": "Il n'y a aucun identifiant disponible pour la saisie automatique concernant l'onglet actuel du navigateur." }, "addLogin": { "message": "Ajouter un identifiant" @@ -470,22 +479,6 @@ "length": { "message": "Longueur" }, - "uppercase": { - "message": "Majuscules (A-Z)", - "description": "deprecated. Use uppercaseLabel instead." - }, - "lowercase": { - "message": "Minuscules (a-z)", - "description": "deprecated. Use lowercaseLabel instead." - }, - "numbers": { - "message": "Chiffres (0-9)", - "description": "deprecated. Use numbersLabel instead." - }, - "specialCharacters": { - "message": "Caractères spéciaux (!@#$%^&*)", - "description": "deprecated. Use specialCharactersLabel instead." - }, "include": { "message": "Inclure", "description": "Card header for password generator include block" @@ -518,10 +511,6 @@ "message": "Inclure des caractères spéciaux", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "numWords": { "message": "Nombre de mots" }, @@ -660,11 +649,11 @@ "browserNotSupportClipboard": { "message": "Votre navigateur web ne supporte pas la copie rapide depuis le presse-papier. Copiez-le manuellement à la place." }, - "verifyIdentity": { - "message": "Vérifier l'identité" + "verifyYourIdentity": { + "message": "Vérifiez votre identité" }, "weDontRecognizeThisDevice": { - "message": "We don't recognize this device. Enter the code sent to your email to verify your identity." + "message": "Nous ne reconnaissons pas cet appareil. Saisissez le code envoyé à votre courriel pour vérifier votre identité." }, "continueLoggingIn": { "message": "Continuer à se connecter" @@ -876,6 +865,21 @@ "logInToBitwarden": { "message": "Se connecter à Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "Saisissez le code envoyé par courriel" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Saisissez le code de votre application d'authentification" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Appuyez sur votre YubiKey pour vous authentifier" + }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Les identifiants de l'authentification à deux facteurs Duo sont requis pour votre compte. Suivez les étapes ci-dessous afin de réussir à vous connecter." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Suivez les étapes ci-dessous afin de réussir à vous connecter." + }, "restartRegistration": { "message": "Redémarrer l'inscription" }, @@ -897,6 +901,9 @@ "no": { "message": "Non" }, + "location": { + "message": "Location" + }, "unexpectedError": { "message": "Une erreur inattendue est survenue." }, @@ -1009,7 +1016,7 @@ "message": "Demande l'ajout d'un élément si celui-ci n'est pas trouvé dans votre coffre. S'applique à tous les comptes connectés." }, "showCardsInVaultViewV2": { - "message": "Always show cards as Autofill suggestions on Vault view" + "message": "Toujours afficher les cartes de paiement en tant que suggestions de saisie automatique dans l'affichage du coffre" }, "showCardsCurrentTab": { "message": "Afficher les cartes de paiement sur la Page d'onglet" @@ -1018,7 +1025,7 @@ "message": "Liste les éléments des cartes de paiement sur la Page d'onglet pour faciliter la saisie automatique." }, "showIdentitiesInVaultViewV2": { - "message": "Always show identities as Autofill suggestions on Vault view" + "message": "Toujours afficher les identités en tant que suggestions de saisie automatique dans l'affichage du coffre" }, "showIdentitiesCurrentTab": { "message": "Afficher les identités sur la Page d'onglet" @@ -1027,10 +1034,10 @@ "message": "Liste les éléments d'identité sur la Page d'onglet pour faciliter la saisie automatique." }, "clickToAutofillOnVault": { - "message": "Click items to autofill on Vault view" + "message": "Cliquez sur les éléments dans l'affichage du coffre pour la saisie automatique" }, "clickToAutofill": { - "message": "Click items in autofill suggestion to fill" + "message": "Cliquez sur les éléments de la suggestion de saisie automatique pour les remplir" }, "clearClipboard": { "message": "Effacer le presse-papiers", @@ -1046,6 +1053,56 @@ "notificationAddSave": { "message": "Enregistrer" }, + "loginSaveSuccessDetails": { + "message": "$USERNAME$ enregistré dans Bitwarden.", + "placeholders": { + "username": { + "content": "$1" + } + }, + "description": "Shown to user after login is saved." + }, + "loginUpdatedSuccessDetails": { + "message": "$USERNAME$ mis à jour dans Bitwarden.", + "placeholders": { + "username": { + "content": "$1" + } + }, + "description": "Shown to user after login is updated." + }, + "saveAsNewLoginAction": { + "message": "Enregistrer en tant que nouvel identifiant", + "description": "Button text for saving login details as a new entry." + }, + "updateLoginAction": { + "message": "Mettre à jour l'identifiant", + "description": "Button text for updating an existing login entry." + }, + "saveLoginPrompt": { + "message": "Enregistrer l'identifiant ?", + "description": "Prompt asking the user if they want to save their login details." + }, + "updateLoginPrompt": { + "message": "Mettre à jour de l'identifiant existant ?", + "description": "Prompt asking the user if they want to update an existing login entry." + }, + "loginSaveSuccess": { + "message": "Identifiant enregistré", + "description": "Message displayed when login details are successfully saved." + }, + "loginUpdateSuccess": { + "message": "Identifiant mis à jour", + "description": "Message displayed when login details are successfully updated." + }, + "saveFailure": { + "message": "Erreur lors de l'enregistrement", + "description": "Error message shown when the system fails to save login details." + }, + "saveFailureDetails": { + "message": "Oh non ! Nous n'avons pas pu enregistrer cela. Essayez de saisir les détails manuellement.", + "description": "Detailed error message shown when saving login details fails." + }, "enableChangedPasswordNotification": { "message": "Demander de mettre à jour un identifiant existant" }, @@ -1365,12 +1422,22 @@ "rememberMe": { "message": "Rester connecté" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Ne plus demander sur cet appareil pendant 30 jours" + }, "sendVerificationCodeEmailAgain": { "message": "Envoyer à nouveau le courriel de code de vérification" }, "useAnotherTwoStepMethod": { "message": "Utiliser une autre méthode d'identification en deux étapes" }, + "selectAnotherMethod": { + "message": "Sélectionnez une autre méthode", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Utilisez votre code de récupération" + }, "insertYubiKey": { "message": "Insérez votre YubiKey dans le port USB de votre ordinateur puis appuyez sur son bouton." }, @@ -1383,9 +1450,18 @@ "webAuthnNewTabOpen": { "message": "Ouvrir un nouvel onglet" }, + "openInNewTab": { + "message": "Ouvrir dans un nouvel onglet" + }, "webAuthnAuthenticate": { "message": "Authentifier WebAuthn" }, + "readSecurityKey": { + "message": "Lire la clé de sécurité" + }, + "awaitingSecurityKeyInteraction": { + "message": "En attente d'interaction de la clé de sécurité..." + }, "loginUnavailable": { "message": "Identifiant indisponible" }, @@ -1398,6 +1474,9 @@ "twoStepOptions": { "message": "Options d'authentification à feux facteurs" }, + "selectTwoStepLoginMethod": { + "message": "Sélectionnez la méthode d'authentification à deux facteurs" + }, "recoveryCodeDesc": { "message": "Accès perdu à tous vos services d'authentification à double facteurs ? Utilisez votre code de récupération pour désactiver tous les services de double authentifications sur votre compte." }, @@ -2069,7 +2148,7 @@ "message": "Générateur de nom d'utilisateur" }, "useThisEmail": { - "message": "Use this email" + "message": "Utiliser ce courriel" }, "useThisPassword": { "message": "Utiliser ce mot de passe" @@ -2089,7 +2168,7 @@ "description": "This will be used as part of a larger sentence, broken up to include the generator icon. The full sentence will read 'Use the generator [GENERATOR_ICON] to create a strong unique password'" }, "vaultCustomization": { - "message": "Vault customization" + "message": "Personnalisation du coffre" }, "vaultTimeoutAction": { "message": "Action après délai d'expiration du coffre" @@ -2097,6 +2176,15 @@ "vaultTimeoutAction1": { "message": "Expiration de l'action" }, + "newCustomizationOptionsCalloutTitle": { + "message": "Nouvelles options de personnalisation" + }, + "newCustomizationOptionsCalloutContent": { + "message": "Personnalisez votre expérience utilisateur du coffre avec des actions de copie rapide, un mode compact et bien plus encore !" + }, + "newCustomizationOptionsCalloutLink": { + "message": "Afficher tous les paramètres d'apparence" + }, "lock": { "message": "Verrouiller", "description": "Verb form: to make secure or inaccessible by" @@ -2356,7 +2444,7 @@ "message": "Domaines bloqués" }, "learnMoreAboutBlockedDomains": { - "message": "Learn more about blocked domains" + "message": "En savoir plus sur les domaines bloqués" }, "excludedDomains": { "message": "Domaines exclus" @@ -2368,19 +2456,19 @@ "message": "Bitwarden ne demandera pas d'enregistrer les détails de connexion pour ces domaines pour tous les comptes connectés. Vous devez actualiser la page pour que les modifications prennent effet." }, "blockedDomainsDesc": { - "message": "Autofill and other related features will not be offered for these websites. You must refresh the page for changes to take effect." + "message": "La saisie automatique et d'autres fonctionnalités connexes ne seront pas proposées pour ces sites web. Vous devez actualiser la page pour que les modifications soient prises en compte." }, "autofillBlockedNoticeV2": { - "message": "Autofill is blocked for this website." + "message": "La saisie automatique est bloquée pour ce site web." }, "autofillBlockedNoticeGuidance": { - "message": "Change this in settings" + "message": "Modifier ceci dans les paramètres" }, "change": { - "message": "Change" + "message": "Modifier" }, "changeButtonTitle": { - "message": "Change password - $ITEMNAME$", + "message": "Modifier le mot de passe - $ITEMNAME$", "placeholders": { "itemname": { "content": "$1", @@ -2389,10 +2477,19 @@ } }, "atRiskPasswords": { - "message": "At-risk passwords" + "message": "Mots de passe à risque" }, - "atRiskPasswordsDescSingleOrg": { - "message": "$ORGANIZATION$ is requesting you change the $COUNT$ passwords because they are at risk.", + "atRiskPasswordDescSingleOrg": { + "message": "$ORGANIZATION$ vous demande de modifier un mot de passe car il est à risque.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + } + }, + "atRiskPasswordsDescSingleOrgPlural": { + "message": "$ORGANIZATION$ vous demande de modifier les mots de passe de $COUNT$ parce qu’ils sont à risque.", "placeholders": { "organization": { "content": "$1", @@ -2404,8 +2501,8 @@ } } }, - "atRiskPasswordsDescMultiOrg": { - "message": "Your organizations are requesting you change the $COUNT$ passwords because they are at risk.", + "atRiskPasswordsDescMultiOrgPlural": { + "message": "Vos organisations vous demandent de modifier les mots de passe $COUNT$ car ils sont à risque.", "placeholders": { "count": { "content": "$1", @@ -2414,10 +2511,10 @@ } }, "reviewAndChangeAtRiskPassword": { - "message": "Review and change one at-risk password" + "message": "Examiner et modifier un mot de passe à risque" }, "reviewAndChangeAtRiskPasswordsPlural": { - "message": "Review and change $COUNT$ at-risk passwords", + "message": "Examiner et modifier les mots de passe à risque $COUNT$", "placeholders": { "count": { "content": "$1", @@ -2426,19 +2523,49 @@ } }, "changeAtRiskPasswordsFaster": { - "message": "Change at-risk passwords faster" + "message": "Modifier plus rapidement les mots de passe à risque" }, "changeAtRiskPasswordsFasterDesc": { - "message": "Update your settings so you can quickly autofill your passwords and generate new ones" + "message": "Mettez à jour vos paramètres afin de pouvoir rapidement saisir automatiquement vos mots de passe et en générer de nouveaux" + }, + "reviewAtRiskLogins": { + "message": "Examiner les identifiants à risque" + }, + "reviewAtRiskPasswords": { + "message": "Examiner les mots de passe à risque" + }, + "reviewAtRiskLoginsSlideDesc": { + "message": "Les mots de passe de votre organisation sont à risque, car ils sont faibles, réutilisés et/ou exposés.", + "description": "Description of the review at-risk login slide on the at-risk password page carousel" + }, + "reviewAtRiskLoginSlideImgAlt": { + "message": "Illustration d'une liste d'identifiants à risque" + }, + "generatePasswordSlideDesc": { + "message": "Générez rapidement un mot de passe fort et unique grâce au menu de saisie automatique de Bitwarden sur le site à risque.", + "description": "Description of the generate password slide on the at-risk password page carousel" + }, + "generatePasswordSlideImgAlt": { + "message": "Illustration du menu de saisie automatique de Bitwarden affichant un mot de passe généré" + }, + "updateInBitwarden": { + "message": "Mettre à jour dans Bitwarden" + }, + "updateInBitwardenSlideDesc": { + "message": "Bitwarden vous demandera alors de mettre à jour le mot de passe dans le gestionnaire de mots de passe.", + "description": "Description of the update in Bitwarden slide on the at-risk password page carousel" + }, + "updateInBitwardenSlideImgAlt": { + "message": "Illustration d’une notification de Bitwarden invitant l’utilisateur à mettre à jour l'identifiant" }, "turnOnAutofill": { - "message": "Turn on autofill" + "message": "Activer la saisie automatique" }, "turnedOnAutofill": { - "message": "Turned on autofill" + "message": "Activer la saisie automatique" }, "dismiss": { - "message": "Dismiss" + "message": "Rejeter" }, "websiteItemLabel": { "message": "Site web $number$ (URI)", @@ -2459,7 +2586,7 @@ } }, "blockedDomainsSavedSuccess": { - "message": "Blocked domain changes saved" + "message": "Modifications apportées aux domaines bloqués enregistrées" }, "excludedDomainsSavedSuccess": { "message": "Changements de domaines exclus enregistrés" @@ -2684,7 +2811,7 @@ "message": "Une erreur s'est produite lors de l'enregistrement de vos dates de suppression et d'expiration." }, "hideYourEmail": { - "message": "Hide your email address from viewers." + "message": "Masquer votre adresse courriel aux regards indiscrets." }, "passwordPrompt": { "message": "Ressaisir le mot de passe principal" @@ -2760,7 +2887,7 @@ "message": "Minutes" }, "vaultTimeoutPolicyAffectingOptions": { - "message": "Enterprise policy requirements have been applied to your timeout options" + "message": "Les exigences de la politique de sécurité d'Entreprise ont été appliquées à vos options de délai d'expiration" }, "vaultTimeoutPolicyInEffect": { "message": "Les politiques de sécurité de votre organisation ont défini le délai d'expiration de votre coffre à $HOURS$ heure(s) et $MINUTES$ minute(s) maximum.", @@ -2776,7 +2903,7 @@ } }, "vaultTimeoutPolicyInEffect1": { - "message": "$HOURS$ hour(s) and $MINUTES$ minute(s) maximum.", + "message": "$HOURS$ heure(s) et $MINUTES$ minute(s) maximum.", "placeholders": { "hours": { "content": "$1", @@ -2789,7 +2916,7 @@ } }, "vaultTimeoutPolicyMaximumError": { - "message": "Timeout exceeds the restriction set by your organization: $HOURS$ hour(s) and $MINUTES$ minute(s) maximum", + "message": "Le délai d'expiration dépasse la restriction définie par votre organisation : $HOURS$ heure(s) et $MINUTES$ minute(s) maximum", "placeholders": { "hours": { "content": "$1", @@ -2900,17 +3027,17 @@ "message": "Erreur" }, "decryptionError": { - "message": "Decryption error" + "message": "Erreur de déchiffrement" }, "couldNotDecryptVaultItemsBelow": { - "message": "Bitwarden could not decrypt the vault item(s) listed below." + "message": "Bitwarden n’a pas pu déchiffrer le(s) élément(s) du coffre listé(s) ci-dessous." }, "contactCSToAvoidDataLossPart1": { - "message": "Contact customer success", + "message": "Contacter le service clientèle", "description": "This is part of a larger sentence. The full sentence will read 'Contact customer success to avoid additional data loss.'" }, "contactCSToAvoidDataLossPart2": { - "message": "to avoid additional data loss.", + "message": "afin d'éviter toute perte de données supplémentaire.", "description": "This is part of a larger sentence. The full sentence will read 'Contact customer success to avoid additional data loss.'" }, "generateUsername": { @@ -3045,7 +3172,7 @@ } }, "forwaderInvalidOperation": { - "message": "$SERVICENAME$ refused your request. Please contact your service provider for assistance.", + "message": "$SERVICENAME$ a refusé votre demande. Veuillez contacter votre fournisseur de services pour obtenir de l'aide.", "description": "Displayed when the user is forbidden from using the API by the forwarding service.", "placeholders": { "servicename": { @@ -3055,7 +3182,7 @@ } }, "forwaderInvalidOperationWithMessage": { - "message": "$SERVICENAME$ refused your request: $ERRORMESSAGE$", + "message": "$SERVICENAME$ a refusé votre demande : $ERRORMESSAGE$", "description": "Displayed when the user is forbidden from using the API by the forwarding service with an error message.", "placeholders": { "servicename": { @@ -3225,13 +3352,13 @@ "message": "Une notification a été envoyée à votre appareil." }, "notificationSentDevicePart1": { - "message": "Unlock Bitwarden on your device or on the" + "message": "Déverrouillez Bitwarden sur votre appareil ou sur le" }, "notificationSentDeviceAnchor": { - "message": "web app" + "message": "application web" }, "notificationSentDevicePart2": { - "message": "Make sure the Fingerprint phrase matches the one below before approving." + "message": "Assurez-vous que la phrase d'empreinte correspond à celle ci-dessous avant de l'approuver." }, "aNotificationWasSentToYourDevice": { "message": "Une notification a été envoyée à votre appareil" @@ -3246,7 +3373,7 @@ "message": "Connexion initiée" }, "logInRequestSent": { - "message": "Request sent" + "message": "Demande envoyée" }, "exposedMasterPassword": { "message": "Mot de passe principal exposé" @@ -3983,6 +4110,9 @@ "activeAccount": { "message": "Compte actif" }, + "bitwardenAccount": { + "message": "Compte Bitwarden" + }, "availableAccounts": { "message": "Comptes disponibles" }, @@ -4104,10 +4234,10 @@ "message": "Clé d'identification (passkey) retirée" }, "autofillSuggestions": { - "message": "Autofill suggestions" + "message": "Suggestions de saisie automatique" }, "itemSuggestions": { - "message": "Suggested items" + "message": "Éléments suggérés" }, "autofillSuggestionsTip": { "message": "Enregistrez un élément de connexion à remplir automatiquement pour ce site" @@ -4181,6 +4311,20 @@ } } }, + "copyFieldValue": { + "message": "Copier $FIELD$, $VALUE$", + "description": "Title for a button that copies a field value to the clipboard.", + "placeholders": { + "field": { + "content": "$1", + "example": "Username" + }, + "value": { + "content": "$2", + "example": "Foo" + } + } + }, "noValuesToCopy": { "message": "Aucune valeur à copier" }, @@ -4405,7 +4549,7 @@ } }, "showMatchDetection": { - "message": "Show match detection $WEBSITE$", + "message": "Afficher la détection de correspondance $WEBSITE$", "placeholders": { "website": { "content": "$1", @@ -4414,7 +4558,7 @@ } }, "hideMatchDetection": { - "message": "Hide match detection $WEBSITE$", + "message": "Masquer la détection de correspondance $WEBSITE$", "placeholders": { "website": { "content": "$1", @@ -4435,7 +4579,7 @@ "message": "Détails de la carte de paiement" }, "cardBrandDetails": { - "message": "$BRAND$ details", + "message": "Détails de la carte $BRAND$", "placeholders": { "brand": { "content": "$1", @@ -4558,7 +4702,7 @@ } }, "reorderFieldUp": { - "message": "$LABEL$ moved up, position $INDEX$ of $LENGTH$", + "message": "$LABEL$ déplacé vers le haut, position $INDEX$ de $LENGTH$", "placeholders": { "label": { "content": "$1", @@ -4645,7 +4789,7 @@ } }, "reorderFieldDown": { - "message": "$LABEL$ moved down, position $INDEX$ of $LENGTH$", + "message": "$LABEL$ déplacé vers le bas, position $INDEX$ de $LENGTH$", "placeholders": { "label": { "content": "$1", @@ -4668,13 +4812,13 @@ "message": "Send en fichier" }, "fileSends": { - "message": "File Sends" + "message": "Envoi de fichiers" }, "textSend": { "message": "Send en texte" }, "textSends": { - "message": "Text Sends" + "message": "Envoi de textes" }, "accountActions": { "message": "Actions du compte" @@ -4755,22 +4899,22 @@ "message": "Vous n'êtes pas autorisé à modifier cet élément" }, "biometricsStatusHelptextUnlockNeeded": { - "message": "Biometric unlock is unavailable because PIN or password unlock is required first." + "message": "Le déverrouillage par biométrie n’est pas disponible parce qu'il faut au préalable déverrouiller avec le code PIN ou le mot de passe." }, "biometricsStatusHelptextHardwareUnavailable": { - "message": "Biometric unlock is currently unavailable." + "message": "Le déverrouillage par biométrie n'est pas disponible actuellement." }, "biometricsStatusHelptextAutoSetupNeeded": { - "message": "Biometric unlock is unavailable due to misconfigured system files." + "message": "Le déverrouillage par biométrie n'est pas disponible en raison de fichiers système mal configurés." }, "biometricsStatusHelptextManualSetupNeeded": { - "message": "Biometric unlock is unavailable due to misconfigured system files." + "message": "Le déverrouillage par biométrie n'est pas disponible en raison de fichiers système mal configurés." }, "biometricsStatusHelptextDesktopDisconnected": { - "message": "Biometric unlock is unavailable because the Bitwarden desktop app is closed." + "message": "Le déverrouillage par biométrie n'est pas disponible car l'application de bureau Bitwarden est fermée." }, "biometricsStatusHelptextNotEnabledInDesktop": { - "message": "Biometric unlock is unavailable because it is not enabled for $EMAIL$ in the Bitwarden desktop app.", + "message": "Le déverrouillage par biométrie n'est pas disponible car elle n'est pas activée pour $EMAIL$ dans l'application de bureau Bitwarden.", "placeholders": { "email": { "content": "$1", @@ -4779,7 +4923,7 @@ } }, "biometricsStatusHelptextUnavailableReasonUnknown": { - "message": "Biometric unlock is currently unavailable for an unknown reason." + "message": "Le déverrouillage par biométrie n'est pas disponible actuellement pour une raison inconnue." }, "authenticating": { "message": "Authentification" @@ -4998,9 +5142,12 @@ } }, "updateDesktopAppOrDisableFingerprintDialogTitle": { - "message": "Please update your desktop application" + "message": "Veuillez mettre à jour votre application de bureau" }, "updateDesktopAppOrDisableFingerprintDialogMessage": { - "message": "To use biometric unlock, please update your desktop application, or disable fingerprint unlock in the desktop settings." + "message": "Pour utiliser le déverrouillage par biométrie, veuillez mettre à jour votre application de bureau ou désactiver le déverrouillage par empreinte digitale dans les paramètres de l'application de bureau." + }, + "changeAtRiskPassword": { + "message": "Changer le mot de passe à risque" } } diff --git a/apps/browser/src/_locales/gl/messages.json b/apps/browser/src/_locales/gl/messages.json index 25ebb2df75d..ce117de8e97 100644 --- a/apps/browser/src/_locales/gl/messages.json +++ b/apps/browser/src/_locales/gl/messages.json @@ -80,6 +80,15 @@ "masterPassHint": { "message": "Pista do contrasinal mestre (opcional)" }, + "passwordStrengthScore": { + "message": "Password strength score $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "joinOrganization": { "message": "Unirse a esta organización" }, @@ -470,22 +479,6 @@ "length": { "message": "Lonxitude" }, - "uppercase": { - "message": "Maiúsculas (A-Z)", - "description": "deprecated. Use uppercaseLabel instead." - }, - "lowercase": { - "message": "Minúsculas (a-z)", - "description": "deprecated. Use lowercaseLabel instead." - }, - "numbers": { - "message": "Números (0-9)", - "description": "deprecated. Use numbersLabel instead." - }, - "specialCharacters": { - "message": "Caracteres especiais (!@#$%^&*)", - "description": "deprecated. Use specialCharactersLabel instead." - }, "include": { "message": "Incluír", "description": "Card header for password generator include block" @@ -518,10 +511,6 @@ "message": "Incluír caracteres especiais", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "numWords": { "message": "Número de palabras" }, @@ -660,8 +649,8 @@ "browserNotSupportClipboard": { "message": "O navegador non permite copia doada ó portapapeis. Debes copialo manualmente." }, - "verifyIdentity": { - "message": "Verificar identidade" + "verifyYourIdentity": { + "message": "Verify your identity" }, "weDontRecognizeThisDevice": { "message": "We don't recognize this device. Enter the code sent to your email to verify your identity." @@ -876,6 +865,21 @@ "logInToBitwarden": { "message": "Iniciar sesión en Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "Enter the code sent to your email" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Enter the code from your authenticator app" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Press your YubiKey to authenticate" + }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Duo two-step login is required for your account. Follow the steps below to finish logging in." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Follow the steps below to finish logging in." + }, "restartRegistration": { "message": "Reiniciar rexistro" }, @@ -897,6 +901,9 @@ "no": { "message": "Non" }, + "location": { + "message": "Location" + }, "unexpectedError": { "message": "Produciuse un erro inesperado." }, @@ -1046,6 +1053,56 @@ "notificationAddSave": { "message": "Gardar" }, + "loginSaveSuccessDetails": { + "message": "$USERNAME$ saved to Bitwarden.", + "placeholders": { + "username": { + "content": "$1" + } + }, + "description": "Shown to user after login is saved." + }, + "loginUpdatedSuccessDetails": { + "message": "$USERNAME$ updated in Bitwarden.", + "placeholders": { + "username": { + "content": "$1" + } + }, + "description": "Shown to user after login is updated." + }, + "saveAsNewLoginAction": { + "message": "Save as new login", + "description": "Button text for saving login details as a new entry." + }, + "updateLoginAction": { + "message": "Update login", + "description": "Button text for updating an existing login entry." + }, + "saveLoginPrompt": { + "message": "Save login?", + "description": "Prompt asking the user if they want to save their login details." + }, + "updateLoginPrompt": { + "message": "Update existing login?", + "description": "Prompt asking the user if they want to update an existing login entry." + }, + "loginSaveSuccess": { + "message": "Login saved", + "description": "Message displayed when login details are successfully saved." + }, + "loginUpdateSuccess": { + "message": "Login updated", + "description": "Message displayed when login details are successfully updated." + }, + "saveFailure": { + "message": "Error saving", + "description": "Error message shown when the system fails to save login details." + }, + "saveFailureDetails": { + "message": "Oh no! We couldn't save this. Try entering the details manually.", + "description": "Detailed error message shown when saving login details fails." + }, "enableChangedPasswordNotification": { "message": "Ofrecer actualizar as credenciais xa gardadas" }, @@ -1365,12 +1422,22 @@ "rememberMe": { "message": "Lémbrame" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Don't ask again on this device for 30 days" + }, "sendVerificationCodeEmailAgain": { "message": "Enviar un novo correo de verificación" }, "useAnotherTwoStepMethod": { "message": "Empregar outro método de verificación en 2 pasos" }, + "selectAnotherMethod": { + "message": "Select another method", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Use your recovery code" + }, "insertYubiKey": { "message": "Conecta a túa YubiKey no porto USB, despois preme o seu botón." }, @@ -1383,9 +1450,18 @@ "webAuthnNewTabOpen": { "message": "Abrir nova pestana" }, + "openInNewTab": { + "message": "Open in new tab" + }, "webAuthnAuthenticate": { "message": "Autenticar con WebAuthn" }, + "readSecurityKey": { + "message": "Read security key" + }, + "awaitingSecurityKeyInteraction": { + "message": "Awaiting security key interaction..." + }, "loginUnavailable": { "message": "Inicio de sesión non dispoñible" }, @@ -1398,6 +1474,9 @@ "twoStepOptions": { "message": "Opcións de verificación en dous pasos" }, + "selectTwoStepLoginMethod": { + "message": "Select two-step login method" + }, "recoveryCodeDesc": { "message": "Perdiche o acceso ós provedores de verificación en dous pasos (2FA)? Emprega o teu código de recuperación para desactivalos." }, @@ -2097,6 +2176,15 @@ "vaultTimeoutAction1": { "message": "Acción do temporizador" }, + "newCustomizationOptionsCalloutTitle": { + "message": "New customization options" + }, + "newCustomizationOptionsCalloutContent": { + "message": "Customize your vault experience with quick copy actions, compact mode, and more!" + }, + "newCustomizationOptionsCalloutLink": { + "message": "View all Appearance settings" + }, "lock": { "message": "Bloquear", "description": "Verb form: to make secure or inaccessible by" @@ -2391,8 +2479,17 @@ "atRiskPasswords": { "message": "At-risk passwords" }, - "atRiskPasswordsDescSingleOrg": { - "message": "$ORGANIZATION$ is requesting you change the $COUNT$ passwords because they are at risk.", + "atRiskPasswordDescSingleOrg": { + "message": "$ORGANIZATION$ is requesting you change one password because it is at-risk.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + } + }, + "atRiskPasswordsDescSingleOrgPlural": { + "message": "$ORGANIZATION$ is requesting you change the $COUNT$ passwords because they are at-risk.", "placeholders": { "organization": { "content": "$1", @@ -2404,8 +2501,8 @@ } } }, - "atRiskPasswordsDescMultiOrg": { - "message": "Your organizations are requesting you change the $COUNT$ passwords because they are at risk.", + "atRiskPasswordsDescMultiOrgPlural": { + "message": "Your organizations are requesting you change the $COUNT$ passwords because they are at-risk.", "placeholders": { "count": { "content": "$1", @@ -2431,6 +2528,36 @@ "changeAtRiskPasswordsFasterDesc": { "message": "Update your settings so you can quickly autofill your passwords and generate new ones" }, + "reviewAtRiskLogins": { + "message": "Review at-risk logins" + }, + "reviewAtRiskPasswords": { + "message": "Review at-risk passwords" + }, + "reviewAtRiskLoginsSlideDesc": { + "message": "Your organization passwords are at-risk because they are weak, reused, and/or exposed.", + "description": "Description of the review at-risk login slide on the at-risk password page carousel" + }, + "reviewAtRiskLoginSlideImgAlt": { + "message": "Illustration of a list of logins that are at-risk" + }, + "generatePasswordSlideDesc": { + "message": "Quickly generate a strong, unique password with the Bitwarden autofill menu on the at-risk site.", + "description": "Description of the generate password slide on the at-risk password page carousel" + }, + "generatePasswordSlideImgAlt": { + "message": "Illustration of the Bitwarden autofill menu displaying a generated password" + }, + "updateInBitwarden": { + "message": "Update in Bitwarden" + }, + "updateInBitwardenSlideDesc": { + "message": "Bitwarden will then prompt you to update the password in the password manager.", + "description": "Description of the update in Bitwarden slide on the at-risk password page carousel" + }, + "updateInBitwardenSlideImgAlt": { + "message": "Illustration of a Bitwarden’s notification prompting the user to update the login" + }, "turnOnAutofill": { "message": "Turn on autofill" }, @@ -3983,6 +4110,9 @@ "activeAccount": { "message": "Activar conta" }, + "bitwardenAccount": { + "message": "Bitwarden account" + }, "availableAccounts": { "message": "Contas dispoñibles" }, @@ -4181,6 +4311,20 @@ } } }, + "copyFieldValue": { + "message": "Copy $FIELD$, $VALUE$", + "description": "Title for a button that copies a field value to the clipboard.", + "placeholders": { + "field": { + "content": "$1", + "example": "Username" + }, + "value": { + "content": "$2", + "example": "Foo" + } + } + }, "noValuesToCopy": { "message": "Non hai valores que copiar" }, @@ -5002,5 +5146,8 @@ }, "updateDesktopAppOrDisableFingerprintDialogMessage": { "message": "To use biometric unlock, please update your desktop application, or disable fingerprint unlock in the desktop settings." + }, + "changeAtRiskPassword": { + "message": "Change at-risk password" } } diff --git a/apps/browser/src/_locales/he/messages.json b/apps/browser/src/_locales/he/messages.json index b5128e2fd09..8b7a178f736 100644 --- a/apps/browser/src/_locales/he/messages.json +++ b/apps/browser/src/_locales/he/messages.json @@ -26,7 +26,7 @@ "message": "כניסה עם מפתח גישה" }, "useSingleSignOn": { - "message": "השתמש בהזדהות חד פעמית" + "message": "השתמש בכניסה יחידה" }, "welcomeBack": { "message": "ברוך שובך" @@ -80,6 +80,15 @@ "masterPassHint": { "message": "רמז לסיסמה הראשית (אופציונלי)" }, + "passwordStrengthScore": { + "message": "ציון חוזק סיסמה $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "joinOrganization": { "message": "הצטרף לארגון" }, @@ -314,7 +323,7 @@ "description": "A 'fingerprint phrase' is a unique word phrase (similar to a passphrase) that a user can use to authenticate their public key with another user, for the purposes of sharing." }, "twoStepLogin": { - "message": "כניסה דו-שלבית" + "message": "כניסה דו־שלבית" }, "logOut": { "message": "צא" @@ -338,7 +347,7 @@ "message": "מאמת Bitwarden" }, "continueToAuthenticatorPageDesc": { - "message": "מאמת Bitwarden מאפשר לך לאחסון מפתחות מאמת וליצור קודי TOTP עבור זרימת אימות דו-שלבית. למד עוד באתר האינטרנט bitwarden.com" + "message": "מאמת Bitwarden מאפשר לך לאחסן מפתחות מאמת וליצור קודי TOTP עבור זרימת אימות דו־שלבית. למד עוד באתר האינטרנט bitwarden.com" }, "bitwardenSecretsManager": { "message": "מנהל הסודות של Bitwarden" @@ -353,10 +362,10 @@ "message": "צור חוויית כניסה חלקה ובטוחה חופשית מסיסמאות מסורתיות עם Passwordless.dev. למד עוד באתר האינטרנט bitwarden.com." }, "freeBitwardenFamilies": { - "message": "משפחות Bitwarden בחינם" + "message": "Bitwarden למשפחות בחינם" }, "freeBitwardenFamiliesPageDesc": { - "message": "אתה זכאי למשפחות Bitwarden בחינם. ממש הצעה זו היום ביישום הרשת." + "message": "אתה זכאי ל־Bitwarden למשפחות בחינם. ממש הצעה זו היום ביישום הרשת." }, "version": { "message": "גירסה" @@ -377,13 +386,13 @@ "message": "ערוך תיקייה" }, "newFolder": { - "message": "תיקיה חדשה" + "message": "תיקייה חדשה" }, "folderName": { - "message": "שם תיקיה" + "message": "שם תיקייה" }, "folderHintText": { - "message": "קונן תיקיה על ידי הוספת שם תיקיית האב ואחריו “/”. דוגמה: חברתי/פורומים" + "message": "צור תיקייה מקוננת על ידי הוספת שם תיקיית האב ואחריו “/”. דוגמה: חברתי/פורומים" }, "noFoldersAdded": { "message": "לא נוספו תיקיות" @@ -392,7 +401,7 @@ "message": "צור תיקיות כדי לארגן את פריטי הכספת שלך" }, "deleteFolderPermanently": { - "message": "האם אתה בטוח שברצונך למחוק תיקיה זו לצמיתות?" + "message": "האם אתה בטוח שברצונך למחוק תיקייה זו לצמיתות?" }, "deleteFolder": { "message": "מחק תיקייה" @@ -470,22 +479,6 @@ "length": { "message": "אורך" }, - "uppercase": { - "message": "אותיות גדולות (A-Z)", - "description": "deprecated. Use uppercaseLabel instead." - }, - "lowercase": { - "message": "אותיות קטנות (a-z)", - "description": "deprecated. Use lowercaseLabel instead." - }, - "numbers": { - "message": "מספרים (0-9)", - "description": "deprecated. Use numbersLabel instead." - }, - "specialCharacters": { - "message": "תווים מיוחדים (*&^%$#@!)", - "description": "deprecated. Use specialCharactersLabel instead." - }, "include": { "message": "כלול", "description": "Card header for password generator include block" @@ -518,10 +511,6 @@ "message": "כלול תווים מיוחדים", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "*&^%$#@!", - "description": "Label for the password generator special characters checkbox" - }, "numWords": { "message": "מספר המילים" }, @@ -542,7 +531,7 @@ "message": "מינימום מיוחדים" }, "avoidAmbiguous": { - "message": "הימנע מתווים דו-משמעיים", + "message": "הימנע מתווים דו־משמעיים", "description": "Label for the avoid ambiguous characters checkbox." }, "generatorPolicyInEffect": { @@ -580,7 +569,7 @@ "message": "מועדף" }, "unfavorite": { - "message": "מחק ממועדפים" + "message": "הסר ממועדפים" }, "itemAddedToFavorites": { "message": "פריט נוסף למועדפים" @@ -660,8 +649,8 @@ "browserNotSupportClipboard": { "message": "הדפדפן שלך לא תומך בהעתקה ללוח. אנא העתק בצורה ידנית." }, - "verifyIdentity": { - "message": "אמת זהות" + "verifyYourIdentity": { + "message": "Verify your identity" }, "weDontRecognizeThisDevice": { "message": "אנחנו לא מזהים את המכשיר הזה. הזן את הקוד שנשלח לדוא\"ל שלך כדי לאמת את זהותך." @@ -835,25 +824,25 @@ } }, "autofillError": { - "message": "לא ניתן למלא אוטומטית את הפריט שנבחר בדף זה. העתק והדבק את המידע במקום זאת." + "message": "לא ניתן למלא אוטומטית את הפריט שנבחר בעמוד זה. העתק והדבק את המידע במקום זאת." }, "totpCaptureError": { - "message": "אי אפשר לסרוק קוד QR מהדף הנוכחי" + "message": "אי אפשר לסרוק קוד QR מהעמוד הנוכחי" }, "totpCaptureSuccess": { - "message": "נוסף מפתח מאמת" + "message": "מפתח המאמת נוסף" }, "totpCapture": { - "message": "סרוק קוד QR מאמת מהדף הנוכחי" + "message": "סרוק קוד QR מאמת מהעמוד הנוכחי" }, "totpHelperTitle": { - "message": "הפוך את האימות הדו-שלבי לחלק" + "message": "הפוך את האימות הדו־שלבי לחלק" }, "totpHelper": { - "message": "Bitwarden יכול לאחסון ולמלא קודים של אימות דו-שלבי. העתק והדבק את המפתח לשדה זה." + "message": "Bitwarden יכול לאחסון ולמלא קודים של אימות דו־שלבי. העתק והדבק את המפתח לשדה זה." }, "totpHelperWithCapture": { - "message": "Bitwarden יכול לאחסון ולמלא קודים של אימות דו-שלבי. בחר את סמל המצלמה כדי לצלם את הקוד QR המאמת של אתר זה, או העתק והדבק את המפתח לתוך שדה זה." + "message": "Bitwarden יכול לאחסון ולמלא קודים של אימות דו־שלבי. בחר את סמל המצלמה כדי לצלם את הקוד QR המאמת של אתר זה, או העתק והדבק את המפתח לתוך שדה זה." }, "learnMoreAboutAuthenticators": { "message": "למד עוד על מאמתים" @@ -874,7 +863,22 @@ "message": "היכנס" }, "logInToBitwarden": { - "message": "כניסה אל Bitwarden" + "message": "היכנס אל Bitwarden" + }, + "enterTheCodeSentToYourEmail": { + "message": "הזן את הקוד שנשלח לדוא\"ל שלך" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "הזן את הקוד מיישום המאמת שלך" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "לחץ על ה־YubiKey שלך כדי לאמת" + }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "נדרשת כניסה דו־שלבית של Duo עבור החשבון שלך. עקוב אחר השלבים למטה כדי לסיים להיכנס." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "עקוב אחר השלבים למטה כדי לסיים להיכנס." }, "restartRegistration": { "message": "התחל הרשמה מחדש" @@ -897,6 +901,9 @@ "no": { "message": "לא" }, + "location": { + "message": "Location" + }, "unexpectedError": { "message": "אירעה שגיאה לא צפויה." }, @@ -907,10 +914,10 @@ "message": "תיקייה נוספה" }, "twoStepLoginConfirmation": { - "message": "כניסה דו-שלבית הופכת את החשבון שלך למאובטח יותר בכך שאתה נדרש לאמת את הכניסה שלך עם מכשיר אחר כמו מפתח אבטחה, יישום מאמת, מסרון, שיחת טלפון, או דוא\"ל. ניתן להגדיר כניסה דו-שלבית בכספת הרשת bitwarden.com. האם ברצונך לבקר באתר כעת?" + "message": "כניסה דו־שלבית הופכת את החשבון שלך למאובטח יותר בכך שאתה נדרש לאמת את הכניסה שלך עם מכשיר אחר כמו מפתח אבטחה, יישום מאמת, מסרון, שיחת טלפון, או דוא\"ל. ניתן להגדיר כניסה דו־שלבית בכספת הרשת bitwarden.com. האם ברצונך לבקר באתר כעת?" }, "twoStepLoginConfirmationContent": { - "message": "הפוך את החשבון שלך למאובטח יותר על ידי הגדרת כניסה דו-שלבית ביישום הרשת של Bitwarden." + "message": "הפוך את החשבון שלך למאובטח יותר על ידי הגדרת כניסה דו־שלבית ביישום הרשת של Bitwarden." }, "twoStepLoginConfirmationTitle": { "message": "להמשיך אל יישום הרשת?" @@ -997,7 +1004,7 @@ "description": "This is the folder for uncategorized items" }, "enableAddLoginNotification": { - "message": "שאל אם לשמור פרטי כניסה" + "message": "בקש לשמור כניסה" }, "vaultSaveOptionsTitle": { "message": "שמור בהגדרות כספת" @@ -1006,25 +1013,25 @@ "message": "בקש להוסיף פריט אם לא נמצא פריט בכספת שלך." }, "addLoginNotificationDescAlt": { - "message": "שאל אם להוסיף פריט אם הוא אינו נמצא בכספת שלך. חל על כל החשבונות המחוברים." + "message": "בקש להוסיף פריט אם לא נמצא פריט בכספת שלך. חל על כל החשבונות המחוברים." }, "showCardsInVaultViewV2": { "message": "הצג תמיד כרטיסים כהצעות מילוי אוטומטי בתצוגת כספת" }, "showCardsCurrentTab": { - "message": "הצג כרטיסים בדף הכרטיסיות" + "message": "הצג כרטיסים בעמוד הכרטיסיות" }, "showCardsCurrentTabDesc": { - "message": "רשום פריטי כרטיס בדף הכרטיסיות עבור מילוי אוטומטי קל." + "message": "רשום פריטי כרטיס בעמוד הכרטיסיות עבור מילוי אוטומטי קל." }, "showIdentitiesInVaultViewV2": { "message": "הצג תמיד זהויות כהצעות למילוי אוטומטי בתצוגת כספת" }, "showIdentitiesCurrentTab": { - "message": "הצג זהויות בדף הכרטיסיות" + "message": "הצג זהויות בעמוד הכרטיסיות" }, "showIdentitiesCurrentTabDesc": { - "message": "הצג פריטי זהות בדף הכרטיסיות עבור מילוי אוטומטי קל." + "message": "הצג פריטי זהות בעמוד הכרטיסיות עבור מילוי אוטומטי קל." }, "clickToAutofillOnVault": { "message": "לחץ על פריטים כדי למלא אוטומטית בתצוגת כספת" @@ -1046,6 +1053,56 @@ "notificationAddSave": { "message": "שמור" }, + "loginSaveSuccessDetails": { + "message": "$USERNAME$ נשמר אל Bitwarden.", + "placeholders": { + "username": { + "content": "$1" + } + }, + "description": "Shown to user after login is saved." + }, + "loginUpdatedSuccessDetails": { + "message": "$USERNAME$ עודכן ב־Bitwarden.", + "placeholders": { + "username": { + "content": "$1" + } + }, + "description": "Shown to user after login is updated." + }, + "saveAsNewLoginAction": { + "message": "Save as new login", + "description": "Button text for saving login details as a new entry." + }, + "updateLoginAction": { + "message": "Update login", + "description": "Button text for updating an existing login entry." + }, + "saveLoginPrompt": { + "message": "Save login?", + "description": "Prompt asking the user if they want to save their login details." + }, + "updateLoginPrompt": { + "message": "Update existing login?", + "description": "Prompt asking the user if they want to update an existing login entry." + }, + "loginSaveSuccess": { + "message": "Login saved", + "description": "Message displayed when login details are successfully saved." + }, + "loginUpdateSuccess": { + "message": "Login updated", + "description": "Message displayed when login details are successfully updated." + }, + "saveFailure": { + "message": "Error saving", + "description": "Error message shown when the system fails to save login details." + }, + "saveFailureDetails": { + "message": "Oh no! We couldn't save this. Try entering the details manually.", + "description": "Detailed error message shown when saving login details fails." + }, "enableChangedPasswordNotification": { "message": "שאל אם לעדכן פרטי כניסה קיימת" }, @@ -1114,10 +1171,10 @@ "description": "'Solarized' is a noun and the name of a color scheme. It should not be translated." }, "exportFrom": { - "message": "ייצוא מ-" + "message": "ייצא מ־" }, "exportVault": { - "message": "ייצוא כספת" + "message": "ייצא כספת" }, "fileFormat": { "message": "פורמט הקובץ" @@ -1132,7 +1189,7 @@ "message": "סיסמה זו תשמש כדי לייצא ולייבא קובץ זה" }, "accountRestrictedOptionDescription": { - "message": "השתמש במפתח הצפנת החשבון שלך, הנגזר משם המשתמש שלך והסיסמה הראשית, כדי להצפין את הייצוא ולהגביל את הייבוא רק לחשבון Bitwarden הנוכחי." + "message": "השתמש במפתח הצפנת החשבון שלך, הנגזר משם המשתמש והסיסמה הראשית של חשבונך, כדי להצפין את הייצוא ולהגביל את הייבוא רק לחשבון Bitwarden הנוכחי." }, "passwordProtectedOptionDescription": { "message": "הגדר סיסמת קובץ כדי להצפין את הייצוא ולייבא אותו לכל חשבון Bitwarden באמצעות הסיסמה לפענוח." @@ -1144,7 +1201,7 @@ "message": "מוגבל חשבון" }, "filePasswordAndConfirmFilePasswordDoNotMatch": { - "message": "\"סיסמת קובץ\" ו-\"אשר סיסמת קובץ\" אינם תואמים." + "message": "\"סיסמת קובץ\" ו\"אשר סיסמת קובץ\" אינם תואמים." }, "warning": { "message": "אזהרה", @@ -1155,7 +1212,7 @@ "description": "Warning (should maintain locale-relevant capitalization)" }, "confirmVaultExport": { - "message": "אשר ייצוא הכספת" + "message": "אשר ייצוא כספת" }, "exportWarningDesc": { "message": "הקובץ מכיל את פרטי הכספת שלך בפורמט לא מוצפן. מומלץ להעביר את הקובץ רק בדרכים מוצפנות, ומאוד לא מומלץ לשמור או לשלוח את הקובץ הזה בדרכים לא מוצפנות (כדוגמת סתם אימייל). מחק את הקובץ מיד לאחר שסיימת את השימוש בו." @@ -1179,7 +1236,7 @@ "message": "העבר לארגון" }, "movedItemToOrg": { - "message": "$ITEMNAME$ הועבר ל־$ORGNAME$", + "message": "$ITEMNAME$ הועבר אל $ORGNAME$", "placeholders": { "itemname": { "content": "$1", @@ -1270,7 +1327,7 @@ "message": "גישת חירום." }, "premiumSignUpTwoStepOptions": { - "message": "אפשרויות כניסה דו-שלבית קנייניות כגון YubiKey ו־Duo." + "message": "אפשרויות כניסה דו־שלבית קנייניות כגון YubiKey ו־Duo." }, "ppremiumSignUpReports": { "message": "היגיינת סיסמאות, מצב בריאות החשבון, ודיווחים מעודכנים על פרצות חדשות בכדי לשמור על הכספת שלך בטוחה." @@ -1309,7 +1366,7 @@ } }, "premiumPriceV2": { - "message": "הכל רק ב-$PRICE$ לשנה!", + "message": "הכל רק ב־$PRICE$ לשנה!", "placeholders": { "price": { "content": "$1", @@ -1365,12 +1422,22 @@ "rememberMe": { "message": "זכור אותי" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "אל תשאל אותי שוב במכשיר זה למשך 30 יום" + }, "sendVerificationCodeEmailAgain": { "message": "שלח שוב קוד אימות לאימייל" }, "useAnotherTwoStepMethod": { "message": "השתמש בשיטה אחרת עבור כניסה דו שלבית" }, + "selectAnotherMethod": { + "message": "בחר שיטה אחרת", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "השתמש בקוד השחזור שלך" + }, "insertYubiKey": { "message": "הכנס את ה-YubiKey אל כניסת ה-USB במחשבך, ואז גע בכפתור שלו." }, @@ -1378,28 +1445,40 @@ "message": "הכנס את מפתח האבטחה שלך אל כניסת ה-USB במחשבך. אם יש לו כפתור, לחץ עליו." }, "webAuthnNewTab": { - "message": "על מנת להתחיל אימות WebAuthn דו-שלבי. לחץ על הכפתור למטה כדי לפתוח כרטיסייה חדשה ועקוב אחר ההוראות המסופקת בכרטיסייה החדשה." + "message": "על מנת להתחיל אימות WebAuthn דו־שלבי. לחץ על הלחצן למטה כדי לפתוח כרטיסייה חדשה ועקוב אחר ההוראות המסופקת בכרטיסייה החדשה." }, "webAuthnNewTabOpen": { "message": "פתח כרטיסייה חדשה" }, + "openInNewTab": { + "message": "פתח בכרטיסייה חדשה" + }, "webAuthnAuthenticate": { "message": "אמת WebAuthn" }, + "readSecurityKey": { + "message": "קרא מפתח אבטחה" + }, + "awaitingSecurityKeyInteraction": { + "message": "ממתין לאינטראקציה עם מפתח אבטחה..." + }, "loginUnavailable": { "message": "כניסה לא זמינה" }, "noTwoStepProviders": { - "message": "לחשבון זה מוגדרת כניסה דו-שלבית, עם זאת, אף אחד מהספקים הדו-שלביים שהוגדרו אינו נתמך על ידי דפדפן זה." + "message": "לחשבון זה מוגדרת כניסה דו־שלבית, עם זאת, אף אחד מהספקים הדו־שלביים שהוגדרו אינו נתמך על ידי דפדפן זה." }, "noTwoStepProviders2": { "message": "אנא השתמש בדפדפן נתמך (כמו לדוגמא Chrome) ו\\או הוסף ספק כניסה דו-שלבית הנתמך בדפדפן זה (כמו לדוגמא אפליקצית אימות)." }, "twoStepOptions": { - "message": "אפשרויות כניסה דו-שלבית" + "message": "אפשרויות כניסה דו־שלבית" + }, + "selectTwoStepLoginMethod": { + "message": "בחר שיטת כניסה דו־שלבית" }, "recoveryCodeDesc": { - "message": "איבדת גישה לכל הספקים הדו-שלביים שלך? השתמש בקוד השחזור שלך כדי להשבית את כל הספקים הדו-שלביים מהחשבון שלך." + "message": "איבדת גישה לכל הספקים הדו־גורמיים שלך? השתמש בקוד השחזור שלך כדי להשבית את כל הספקים הדו־גורמיים בחשבון שלך." }, "recoveryCodeTitle": { "message": "קוד שחזור" @@ -1412,7 +1491,7 @@ "description": "'Bitwarden Authenticator' is a product name and should not be translated." }, "yubiKeyTitleV2": { - "message": "מפתח אבטחה OTP של YubiKey" + "message": "מפתח אבטחה OTP של Yubico" }, "yubiKeyDesc": { "message": "השתמש בYubiKey עבור גישה לחשבון שלך. עובד עם YubiKey בגירסאות 4, 4C, 4Nano, ומכשירי NEO." @@ -1481,7 +1560,7 @@ "message": "URL של שרת הסמלים" }, "environmentSaved": { - "message": "URL־ים של הסביבה נשמרו" + "message": "כתובות URL של הסביבה נשמרו" }, "showAutoFillMenuOnFormFields": { "message": "הצג תפריט מילוי אוטומטי על שדות טופס", @@ -1622,19 +1701,19 @@ "message": "דפדפן זה לא יכול לעבד בקשות U2F בחלון צף זה. האם ברצונך לפתוח את החלון הצף כחלון חדש רגיל כדי שתוכל להכנס באמצעות U2F?" }, "enableFavicon": { - "message": "הצג סמלים של אתרי אינטרנט" + "message": "הצג סמלי אתר אינטרנט" }, "faviconDesc": { - "message": "הצג תמונה ניתנת לזיהוי ליד כל כניסה." + "message": "הצג תמונה מוכרת ליד כל כניסה." }, "faviconDescAlt": { - "message": "הצג תמונה ניתנת לזיהוי ליד כל כניסה. חל על כל החשבונות המחוברים." + "message": "הצג תמונה מוכרת ליד כל כניסה. חל על כל החשבונות המחוברים." }, "enableBadgeCounter": { "message": "הצג מונה סמל" }, "badgeCounterDesc": { - "message": "מציין כמה כניסות יש לך עבור דף הרשת הנוכחי." + "message": "מציין כמה כניסות יש לך עבור עמוד הרשת הנוכחי." }, "cardholderName": { "message": "שם בעל הכרטיס" @@ -2097,6 +2176,15 @@ "vaultTimeoutAction1": { "message": "פעולת פסק זמן" }, + "newCustomizationOptionsCalloutTitle": { + "message": "אפשרויות התאמה אישית חדשות" + }, + "newCustomizationOptionsCalloutContent": { + "message": "התאם אישית את חווית הכספת שלך עם פעולות העתקה מהירות, מצב קומפקטי, ועוד!" + }, + "newCustomizationOptionsCalloutLink": { + "message": "הצג את כל הגדרות המראה" + }, "lock": { "message": "נעילה", "description": "Verb form: to make secure or inaccessible by" @@ -2139,19 +2227,19 @@ "message": "מלא ושמור" }, "autoFillSuccessAndSavedUri": { - "message": "הפריט התמלא אוטומטית וה־URI נשמר" + "message": "הפריט מולא אוטומטית וה־URI נשמר" }, "autoFillSuccess": { - "message": "פריט התמלא אוטומטית " + "message": "הפריט מולא אוטומטית " }, "insecurePageWarning": { - "message": "אזהרה: זהו דף HTTP לא מאובטח, וכל מידע שאתה שולח יכול באופן פוטנציאלי להיראות ולהשתנות על ידי אחרים. הכניסה הזאת נשמרה במקור בדף מאובטח (HTTPS)." + "message": "אזהרה: זהו עמוד HTTP לא מאובטח, וכל מידע שאתה שולח יכול באופן פוטנציאלי להיראות ולהשתנות על ידי אחרים. הכניסה הזאת נשמרה במקור בעמוד מאובטח (HTTPS)." }, "insecurePageWarningFillPrompt": { "message": "האם עדיין ברצונך להשלים כניסה זו?" }, "autofillIframeWarning": { - "message": "הטופס מאורח על ידי דומיין שונה מה־URI של הכניסה השמורה שלך. בחר \"בסדר\" כדי להשלים אוטומטית בכל זאת, או \"ביטול\" כדי לעצור." + "message": "הטופס מאורח על ידי דומיין שונה מה־URI של הכניסה השמורה שלך. בחר \"בסדר\" כדי למלא אוטומטית בכל זאת, או \"ביטול\" כדי לעצור." }, "autofillIframeWarningTip": { "message": "כדי למנוע אזהרה זו בעתיד, שמור את URI זה, $HOSTNAME$, בפריט כניסת Bitwarden שלך עבור אתר זה.", @@ -2292,7 +2380,7 @@ "message": "חוסר התאמה בין חשבונות" }, "nativeMessagingWrongUserKeyTitle": { - "message": "אי-התאמה של מפתח זיהוי ביומטרי" + "message": "אי־התאמה של מפתח זיהוי ביומטרי" }, "nativeMessagingWrongUserKeyDesc": { "message": "ביטול נעילה ביומטרי נכשל. מפתח הסוד הביומטרי נכשל בביטול נעילת הכספת. נא לנסות להגדיר זיהוי ביומטרי שוב." @@ -2368,7 +2456,7 @@ "message": "Bitwarden לא יבקש לשמור פרטי כניסה עבור הדומיינים האלה עבור כל החשבונות המחוברים. אתה מוכרח לרענן את העמוד כדי שהשינויים ייכנסו לתוקף." }, "blockedDomainsDesc": { - "message": "לא יוצעו מילוי אוטומטי ותכונות קשורות אחרות עבור האתרים האלה. אתה מוכרח לרענן את הדף כדי שהשינויים ייכנסו לתוקף." + "message": "לא יוצעו מילוי אוטומטי ותכונות קשורות אחרות עבור האתרים האלה. אתה מוכרח לרענן את העמוד כדי שהשינויים ייכנסו לתוקף." }, "autofillBlockedNoticeV2": { "message": "מילוי אוטומטי חסום עבור אתר זה." @@ -2389,10 +2477,19 @@ } }, "atRiskPasswords": { - "message": "סיסמאות בסכנה" + "message": "סיסמאות בסיכון" }, - "atRiskPasswordsDescSingleOrg": { - "message": "$ORGANIZATION$ מבקש/ת שתשנה $COUNT$ סיסמאות בגלל שהן בסכנה.", + "atRiskPasswordDescSingleOrg": { + "message": "$ORGANIZATION$ מבקש/ת ממך לשנות סיסמה אחת בגלל שהיא בסיכון.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + } + }, + "atRiskPasswordsDescSingleOrgPlural": { + "message": "$ORGANIZATION$ מבקש/ת ממך לשנות $COUNT$ סיסמאות בגלל שהן בסיכון.", "placeholders": { "organization": { "content": "$1", @@ -2404,8 +2501,8 @@ } } }, - "atRiskPasswordsDescMultiOrg": { - "message": "הארגונים שלך מבקשים שתשנה $COUNT$ סיסמאות בגלל שהן בסכנה.", + "atRiskPasswordsDescMultiOrgPlural": { + "message": "הארגונים שלך מבקשים שתשנה $COUNT$ סיסמאות בגלל שהן בסיכון.", "placeholders": { "count": { "content": "$1", @@ -2414,10 +2511,10 @@ } }, "reviewAndChangeAtRiskPassword": { - "message": "סקור ושנה סיסמה אחת בסכנה" + "message": "סקור ושנה סיסמה אחת בסיכון" }, "reviewAndChangeAtRiskPasswordsPlural": { - "message": "סקור ושנה $COUNT$ סיסמאות בסכנה", + "message": "סקור ושנה $COUNT$ סיסמאות בסיכון", "placeholders": { "count": { "content": "$1", @@ -2426,16 +2523,46 @@ } }, "changeAtRiskPasswordsFaster": { - "message": "שנה סיסמאות בסכנה מהר יותר" + "message": "שנה סיסמאות בסיכון מהר יותר" }, "changeAtRiskPasswordsFasterDesc": { "message": "עדכן את ההגדרות שלך כך שתוכל למלא במהירות את הסיסמאות שלך וליצור חדשות" }, + "reviewAtRiskLogins": { + "message": "סקור כניסות בסיכון" + }, + "reviewAtRiskPasswords": { + "message": "סקור סיסמאות בסיכון" + }, + "reviewAtRiskLoginsSlideDesc": { + "message": "סיסמאות הארגון שלך הן בסכנה בגלל שהן חלשות, משומשות, ו/או חשופות.", + "description": "Description of the review at-risk login slide on the at-risk password page carousel" + }, + "reviewAtRiskLoginSlideImgAlt": { + "message": "איור של רשימת כניסות בסיכון" + }, + "generatePasswordSlideDesc": { + "message": "צור במהירות סיסמה חזקה וייחודית עם תפריט המילוי האוטומטי של Bitwarden באתר שבסיכון.", + "description": "Description of the generate password slide on the at-risk password page carousel" + }, + "generatePasswordSlideImgAlt": { + "message": "איור של תפריט המילוי האוטומטי של Bitwarden המציג סיסמה שנוצרה" + }, + "updateInBitwarden": { + "message": "עדכן ב־Bitwarden" + }, + "updateInBitwardenSlideDesc": { + "message": "Bitwarden אז ינחה אותך לעדכן את הסיסמה במנהל הסיסמאות.", + "description": "Description of the update in Bitwarden slide on the at-risk password page carousel" + }, + "updateInBitwardenSlideImgAlt": { + "message": "איור של התראת Bitwarden המנחה את המשתמש לעדכן את הכניסה" + }, "turnOnAutofill": { - "message": "הפעל השלמה אוטומטית" + "message": "הפעל מילוי אוטומטי" }, "turnedOnAutofill": { - "message": "השלמה אוטומטית הופעלה" + "message": "מילוי אוטומטי הופעל" }, "dismiss": { "message": "התעלם" @@ -2468,7 +2595,7 @@ "message": "הגבל צפיות" }, "limitSendViewsHint": { - "message": "אף אחד לא יכול לצפות בסנד זה לאחר ההגעה למגבלה.", + "message": "אף אחד לא יכול לצפות בסֵנְד זה לאחר ההגעה למגבלה.", "description": "Displayed under the limit views field on Send" }, "limitSendViewsCount": { @@ -2482,11 +2609,11 @@ } }, "send": { - "message": "סנד", + "message": "סֵנְד", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "sendDetails": { - "message": "פרטי סנד", + "message": "פרטי סֵנְד", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "sendTypeText": { @@ -2499,7 +2626,7 @@ "message": "קובץ" }, "allSends": { - "message": "כל הסנדים", + "message": "כל הסֵנְדים", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "hideTextByDefault": { @@ -2515,7 +2642,7 @@ "message": "העתק קישור" }, "copySendLink": { - "message": "העתק קישור סנד", + "message": "העתק קישור סֵנְד", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "removePassword": { @@ -2528,11 +2655,11 @@ "message": "הסיסמה הוסרה" }, "deletedSend": { - "message": "סנד נמחק", + "message": "סֵנְד נמחק", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "sendLink": { - "message": "קישור סנד", + "message": "קישור סֵנְד", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "disabled": { @@ -2542,26 +2669,26 @@ "message": "האם אתה בטוח שברצונך להסיר את הסיסמה?" }, "deleteSend": { - "message": "מחק סנד", + "message": "מחק סֵנְד", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "deleteSendConfirmation": { - "message": "האם אתה בטוח שברצונך למחוק סנד זה?", + "message": "האם אתה בטוח שברצונך למחוק סֵנְד זה?", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "deleteSendPermanentConfirmation": { - "message": "האם אתה בטוח שברצונך למחוק לצמיתות סנד זה?", + "message": "האם אתה בטוח שברצונך למחוק לצמיתות סֵנְד זה?", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "editSend": { - "message": "ערוך סנד", + "message": "ערוך סֵנְד", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "deletionDate": { "message": "תאריך מחיקה" }, "deletionDateDescV2": { - "message": "סנד זה יימחק לצמיתות בתאריך זה.", + "message": "סֵנְד זה יימחק לצמיתות בתאריך זה.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "expirationDate": { @@ -2583,38 +2710,38 @@ "message": "מותאם אישית" }, "sendPasswordDescV3": { - "message": "הוסף סיסמה אופציונלית עבור נמענים כדי לגשת לסנד זה.", + "message": "הוסף סיסמה אופציונלית עבור נמענים כדי לגשת לסֵנְד זה.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "createSend": { - "message": "סנד חדש", + "message": "סֵנְד חדש", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "newPassword": { "message": "סיסמה חדשה" }, "sendDisabled": { - "message": "סנד הוסר", + "message": "סֵנְד הוסר", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "sendDisabledWarning": { - "message": "בשל מדיניות ארגונית, אתה יכול למחוק רק סנד קיים.", + "message": "בשל מדיניות ארגונית, אתה יכול למחוק רק סֵנְד קיים.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "createdSend": { - "message": "סנד נוצר", + "message": "סֵנְד נוצר", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "createdSendSuccessfully": { - "message": "סנד נוצר בהצלחה!", + "message": "סֵנְד נוצר בהצלחה!", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "sendExpiresInHoursSingle": { - "message": "הסנד יהיה זמין לכל אחד עם הקישור במשך השעה הבאה.", + "message": "הסֵנְד יהיה זמין לכל אחד עם הקישור במשך השעה הבאה.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "sendExpiresInHours": { - "message": "הסנד יהיה זמין לכל אחד עם הקישור במשך $HOURS$ השעות הבאות.", + "message": "הסֵנְד יהיה זמין לכל אחד עם הקישור במשך $HOURS$ השעות הבאות.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.", "placeholders": { "hours": { @@ -2624,11 +2751,11 @@ } }, "sendExpiresInDaysSingle": { - "message": "הסנד יהיה זמין לכל אחד עם הקישור במשך היום הבא.", + "message": "הסֵנְד יהיה זמין לכל אחד עם הקישור במשך היום הבא.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "sendExpiresInDays": { - "message": "הסנד יהיה זמין לכל אחד עם הקישור במשך $DAYS$ הימים הבאים.", + "message": "הסֵנְד יהיה זמין לכל אחד עם הקישור במשך $DAYS$ הימים הבאים.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.", "placeholders": { "days": { @@ -2638,11 +2765,11 @@ } }, "sendLinkCopied": { - "message": "קישור סנד הועתק", + "message": "קישור סֵנְד הועתק", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "editedSend": { - "message": "סנד נשמר", + "message": "סֵנְד נשמר", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "sendFilePopoutDialogText": { @@ -2650,7 +2777,7 @@ "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "sendFilePopoutDialogDesc": { - "message": "כדי ליצור קובץ סנד, אתה צריך להקפיץ את ההרחבה לחלון חדש.", + "message": "כדי ליצור קובץ סֵנְד, אתה צריך להקפיץ את ההרחבה לחלון חדש.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "sendLinuxChromiumFileWarning": { @@ -2675,10 +2802,10 @@ "message": "תאריך המחיקה שסופק אינו חוקי." }, "expirationDateAndTimeRequired": { - "message": "נדרשים תאריך תפוגה וזמן." + "message": "נדרשים תאריך וזמן תפוגה." }, "deletionDateAndTimeRequired": { - "message": "נדרשים תאריך מחיקה וזמן." + "message": "נדרשים תאריך וזמן מחיקה." }, "dateParsingError": { "message": "הייתה שגיאה בשמירת תאריכי המחיקה והתפוגה שלך." @@ -2705,7 +2832,7 @@ "message": "עליך לאמת את הדוא\"ל שלך כדי להשתמש בתכונה זו. ניתן לאמת את הדוא\"ל שלך בכספת הרשת." }, "updatedMasterPassword": { - "message": "הסיסמה הראשית עודכנה" + "message": "סיסמה ראשית עודכנה" }, "updateMasterPassword": { "message": "עדכן סיסמה ראשית" @@ -2726,7 +2853,7 @@ "message": "לארגון זה יש מדיניות ארגונית שתרשום אותך באופן אוטומטי לאיפוס סיסמה. הרישום יאפשר למנהלי הארגון לשנות את הסיסמה הראשית שלך." }, "selectFolder": { - "message": "בחר תיקיה..." + "message": "בחר תיקייה..." }, "noFoldersFound": { "message": "לא נמצאו תיקיות", @@ -2763,7 +2890,7 @@ "message": "דרישות מדיניות ארגונית הוחלו על אפשרויות פסק הזמן שלך" }, "vaultTimeoutPolicyInEffect": { - "message": "פוליסות הארגון שלך הגדירו את פסק הזמן לכספת המרבי שלך ל-$HOURS$ שעות ו-$MINUTES$ דקות.", + "message": "פוליסות הארגון שלך הגדירו את פסק הזמן לכספת המרבי שלך ל־$HOURS$ שעות ו־$MINUTES$ דקות.", "placeholders": { "hours": { "content": "$1", @@ -2776,7 +2903,7 @@ } }, "vaultTimeoutPolicyInEffect1": { - "message": "$HOURS$ שעות ו-$MINUTES$ דקות לכל היותר.", + "message": "$HOURS$ שעות ו־$MINUTES$ דקות לכל היותר.", "placeholders": { "hours": { "content": "$1", @@ -2789,7 +2916,7 @@ } }, "vaultTimeoutPolicyMaximumError": { - "message": "פסק זמן חורג את ההגבלה שהוגדרה על ידי הארגון שלך: $HOURS$ שעות ו-$MINUTES$ דקות לכל היותר", + "message": "פסק זמן חורג את ההגבלה שהוגדרה על ידי הארגון שלך: $HOURS$ שעות ו־$MINUTES$ דקות לכל היותר", "placeholders": { "hours": { "content": "$1", @@ -2802,7 +2929,7 @@ } }, "vaultTimeoutPolicyWithActionInEffect": { - "message": "פוליסות הארגון שלך משפיעות על פסק הזמן לכספת שלך. פסק זמן מרבי המותר הוא $HOURS$ שעות ו-$MINUTES$ דקות. פעולת פסק הזמן לכספת שלך מוגדרת ל$ACTION$.", + "message": "פוליסות הארגון שלך משפיעות על פסק הזמן לכספת שלך. פסק זמן מרבי המותר הוא $HOURS$ שעות ו־$MINUTES$ דקות. פעולת פסק הזמן לכספת שלך מוגדרת ל$ACTION$.", "placeholders": { "hours": { "content": "$1", @@ -2843,7 +2970,7 @@ "message": "לא נמצא מזהה ייחודי." }, "convertOrganizationEncryptionDesc": { - "message": "$ORGANIZATION$ משתמשת ב־SSO עם שרת מפתחות באירוח עצמי. סיסמה ראשית לא דרושה יותר כדי להיכנס עבור חברים של ארגון זה.", + "message": "$ORGANIZATION$ משתמש/ת ב־SSO עם שרת מפתחות באירוח עצמי. סיסמה ראשית כבר לא נדרשת כדי להיכנס עבור חברים של ארגון זה.", "placeholders": { "organization": { "content": "$1", @@ -2961,10 +3088,10 @@ "message": "השתמש ביכולות מיעון משנה של ספק הדוא\"ל שלך." }, "catchallEmail": { - "message": "דוא\"ל תופס-כל" + "message": "דוא\"ל תופס־כל" }, "catchallEmailDesc": { - "message": "השתמש בתיבת דואר תפוס-כל המוגדרת בדומיין שלך." + "message": "השתמש בתיבת דואר תפוס־כל המוגדרת בדומיין שלך." }, "random": { "message": "אקראי" @@ -3045,7 +3172,7 @@ } }, "forwaderInvalidOperation": { - "message": "$SERVICENAME$ סירב לבקשה שלך. נא ליצור קשר עם נותן השירות שלך לקבלת סיוע.", + "message": "$SERVICENAME$ סירב לבקשה שלך. נא ליצור קשר עם נותן השירות שלך עבור סיוע.", "description": "Displayed when the user is forbidden from using the API by the forwarding service.", "placeholders": { "servicename": { @@ -3123,22 +3250,22 @@ "description": "Part of a URL." }, "apiAccessToken": { - "message": "אסימון גישה ל־API" + "message": "אסימון גישת API" }, "apiKey": { "message": "מפתח API" }, "ssoKeyConnectorError": { - "message": "שגיאת מחבר מפתח: וודא שמחבר המפתח זמין ופועל כראוי." + "message": "שגיאת Key Connector: וודא שה־Key Connector זמין ופועל כראוי." }, "premiumSubcriptionRequired": { "message": "נדרש מנוי פרימיום" }, "organizationIsDisabled": { - "message": "ארגון מושהה." + "message": "ארגון מושעה." }, "disabledOrganizationFilterError": { - "message": "לא ניתן לגשת לפריטים בארגון מושהה. פנה אל בעל הארגון שלך עבור סיוע." + "message": "לא ניתן לגשת לפריטים בארגון מושעה. פנה אל בעל הארגון שלך עבור סיוע." }, "loggingInTo": { "message": "נכנס אל $DOMAIN$", @@ -3189,7 +3316,7 @@ "message": "כניסה עם סיסמה ראשית" }, "loggingInAs": { - "message": "נכנס כ-" + "message": "נכנס כ־" }, "notYou": { "message": "לא את/ה?" @@ -3228,7 +3355,7 @@ "message": "בטל נעילת Bitwarden במכשיר שלך או ב" }, "notificationSentDeviceAnchor": { - "message": "יישום הרשת" + "message": "יישום רשת" }, "notificationSentDevicePart2": { "message": "וודא שביטוי טביעת האצבע תואם את זה שלמטה לפני שתאשר." @@ -3394,7 +3521,7 @@ "description": "European Union" }, "accessDenied": { - "message": "גישה נדחתה. אין לך הרשאות כדי לצפות בדף זה." + "message": "גישה נדחתה. אין לך הרשאות כדי לצפות בעמוד זה." }, "general": { "message": "כללי" @@ -3430,11 +3557,11 @@ "message": "מכשיר מהימן" }, "sendsNoItemsTitle": { - "message": "אין סנדים פעילים", + "message": "אין סֵנְדים פעילים", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "sendsNoItemsMessage": { - "message": "השתמש בסנד כדי לשתף באופן מאובטח מידע מוצפן עם כל אחד.", + "message": "השתמש בסֵנְד כדי לשתף באופן מאובטח מידע מוצפן עם כל אחד.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "inputRequired": { @@ -3502,7 +3629,7 @@ "message": "קלט הוא לא כתובת דוא\"ל." }, "fieldsNeedAttention": { - "message": "$COUNT$ שדות למעלה צריכות את תשומת לבך.", + "message": "$COUNT$ שדות למעלה צריכים את תשומת לבך.", "placeholders": { "count": { "content": "$1", @@ -3514,7 +3641,7 @@ "message": "שדה 1 צריך את תשומת לבך." }, "multipleFieldsNeedAttention": { - "message": "$COUNT$ שדות צריכות את תשומת לבך.", + "message": "$COUNT$ שדות צריכים את תשומת לבך.", "placeholders": { "count": { "content": "$1", @@ -3575,7 +3702,7 @@ "message": "דלג לתוכן" }, "bitwardenOverlayButton": { - "message": "כפתור תפריט מילוי אוטומטי של Bitwarden", + "message": "לחצן תפריט מילוי אוטומטי של Bitwarden", "description": "Page title for the iframe containing the overlay button" }, "toggleBitwardenVaultOverlay": { @@ -3665,7 +3792,7 @@ "message": "התעלם" }, "importData": { - "message": "ייבוא נתונים", + "message": "ייבא נתונים", "description": "Used for the header of the import dialog, the import button and within the file-password-prompt" }, "importError": { @@ -3777,7 +3904,7 @@ "message": "למד על אפשרויות הייבוא שלך" }, "selectImportFolder": { - "message": "בחר תיקיה" + "message": "בחר תיקייה" }, "selectImportCollection": { "message": "בחר אוסף" @@ -3854,7 +3981,7 @@ "message": "להיכנס עם מפתח גישה?" }, "passkeyAlreadyExists": { - "message": "מפתח גישה כבר קיים ביישום זה." + "message": "מפתח גישה כבר קיים עבור יישום זה." }, "noPasskeysFoundForThisApplication": { "message": "לא נמצאו מפתחות גישה עבור יישום זה." @@ -3899,7 +4026,7 @@ "message": "אימות נדרש כדי להשתמש במפתח גישה. אמת את זהותך כדי להמשיך." }, "multifactorAuthenticationCancelled": { - "message": "אימות רב-שלבי בוטל" + "message": "אימות רב־גורמי בוטל" }, "noLastPassDataFound": { "message": "לא נמצאו נתוני LastPass" @@ -3917,7 +4044,7 @@ "message": "PIN שגוי" }, "multifactorAuthenticationFailed": { - "message": "אימות רב-שלבי נכשל" + "message": "אימות רב־גורמי נכשל" }, "includeSharedFolders": { "message": "כלול תיקיות משותפות" @@ -3929,7 +4056,7 @@ "message": "מייבא את החשבון שלך..." }, "lastPassMFARequired": { - "message": "נדרש אימות רב-שלבי של LastPass" + "message": "נדרש אימות רב־גורמי של LastPass" }, "lastPassMFADesc": { "message": "הזן את קוד הגישה החד פעמי שלך מיישום האימות שלך" @@ -3983,6 +4110,9 @@ "activeAccount": { "message": "חשבון פעיל" }, + "bitwardenAccount": { + "message": "חשבון Bitwarden" + }, "availableAccounts": { "message": "חשבונות זמינים" }, @@ -4181,6 +4311,20 @@ } } }, + "copyFieldValue": { + "message": "העתק $FIELD$, $VALUE$", + "description": "Title for a button that copies a field value to the clipboard.", + "placeholders": { + "field": { + "content": "$1", + "example": "Username" + }, + "value": { + "content": "$2", + "example": "Foo" + } + } + }, "noValuesToCopy": { "message": "אין ערכים להעתקה" }, @@ -4200,7 +4344,7 @@ "message": "מסוף ניהול" }, "accountSecurity": { - "message": "אבטחת חשבון" + "message": "אבטחת החשבון" }, "notifications": { "message": "התראות" @@ -4248,7 +4392,7 @@ } }, "itemsWithNoFolder": { - "message": "פריטים ללא תיקיה" + "message": "פריטים ללא תיקייה" }, "itemDetails": { "message": "פרטי הפריט" @@ -4267,7 +4411,7 @@ "description": "Used as a label to indicate that the user is the owner of an item." }, "contactYourOrgAdmin": { - "message": "לא ניתן לגשת לפריטים של ארגונים מושבתים. פנה לבעל הארגון שלך לקבלת סיוע." + "message": "לא ניתן לגשת לפריטים של ארגונים מושבתים. פנה לבעל הארגון שלך עבור סיוע." }, "additionalInformation": { "message": "פרטים נוספים" @@ -4386,7 +4530,7 @@ } }, "websiteAdded": { - "message": "נוסף אתר אינטרנט" + "message": "אתר האינטרנט נוסף" }, "addWebsite": { "message": "הוסף אתר אינטרנט" @@ -4426,7 +4570,7 @@ "message": "למלא אוטומטית בעת טעינת עמוד?" }, "cardExpiredTitle": { - "message": "כרטיס שפג תוקפו" + "message": "כרטיס פג תוקף" }, "cardExpiredMessage": { "message": "אם חידשת אותו, עדכן את פרטי הכרטיס" @@ -4467,7 +4611,7 @@ "description": "A section header for a list of passwords." }, "logInWithPasskeyAriaLabel": { - "message": "היכנס עם מפתח גישה", + "message": "כניסה עם מפתח גישה", "description": "ARIA label for the inline menu button that logs in with a passkey." }, "assign": { @@ -4618,7 +4762,7 @@ "message": "לא בחרת כלום." }, "movedItemsToOrg": { - "message": "פריטים נבחרים הועברו ל־$ORGNAME$", + "message": "פריטים נבחרים הועברו אל $ORGNAME$", "placeholders": { "orgname": { "content": "$1", @@ -4627,7 +4771,7 @@ } }, "itemsMovedToOrg": { - "message": "פריטים הועברו ל־$ORGNAME$", + "message": "פריטים הועברו אל $ORGNAME$", "placeholders": { "orgname": { "content": "$1", @@ -4636,7 +4780,7 @@ } }, "itemMovedToOrg": { - "message": "פריט הועבר ל־$ORGNAME$", + "message": "פריט הועבר אל $ORGNAME$", "placeholders": { "orgname": { "content": "$1", @@ -4665,16 +4809,16 @@ "message": "מיקום פריט" }, "fileSend": { - "message": "קובץ סנד" + "message": "סֵנְד של קובץ" }, "fileSends": { - "message": "סנדים של קובץ" + "message": "סֵנְדים של קובץ" }, "textSend": { - "message": "טקסט סנד" + "message": "סֵנְד של טקסט" }, "textSends": { - "message": "סנדים של טקסט" + "message": "סֵנְדים של טקסט" }, "accountActions": { "message": "פעולות חשבון" @@ -4833,7 +4977,7 @@ "description": "Represents the ^ key in screen reader content as a readable word" }, "ampersandCharacterDescriptor": { - "message": "אמפרסנד", + "message": "אמפרסֵנְד", "description": "Represents the & key in screen reader content as a readable word" }, "asteriskCharacterDescriptor": { @@ -4905,11 +5049,11 @@ "description": "Represents the ' key in screen reader content as a readable word" }, "lessThanCharacterDescriptor": { - "message": "קטן מ-", + "message": "קטן מ־", "description": "Represents the < key in screen reader content as a readable word" }, "greaterThanCharacterDescriptor": { - "message": "גדול מ-", + "message": "גדול מ־", "description": "Represents the > key in screen reader content as a readable word" }, "commaCharacterDescriptor": { @@ -4947,13 +5091,13 @@ "message": "הודעה חשובה" }, "setupTwoStepLogin": { - "message": "הגדר כניסה דו-שלבית" + "message": "הגדר כניסה דו־שלבית" }, "newDeviceVerificationNoticeContentPage1": { "message": "Bitwarden ישלח קוד לדוא\"ל החשבון שלך כדי לאמת כניסות ממכשירים חדשים החל מפברואר 2025." }, "newDeviceVerificationNoticeContentPage2": { - "message": "אתה יכול להגדיר כניסה דו-שלבית כדרך חלופית להגן על החשבון שלך או לשנות את הדוא\"ל שלך לאחד שתוכל לגשת אליו." + "message": "אתה יכול להגדיר כניסה דו־שלבית כדרך חלופית להגן על החשבון שלך או לשנות את הדוא\"ל שלך לאחד שאתה יכול לגשת אליו." }, "remindMeLater": { "message": "הזכר לי מאוחר יותר" @@ -4974,7 +5118,7 @@ "message": "כן, אני יכול לגשת לדוא\"ל שלי באופן מהימן" }, "turnOnTwoStepLogin": { - "message": "הפעל כניסה דו-שלבית" + "message": "הפעל כניסה דו־שלבית" }, "changeAcctEmail": { "message": "שנה את דוא\"ל החשבון" @@ -5002,5 +5146,8 @@ }, "updateDesktopAppOrDisableFingerprintDialogMessage": { "message": "כדי להשתמש בביטול נעילה ביומטרי, נא לעדכן את יישום שולחן העבודה שלך, להשבית ביטול נעילה בעזרת טביעת אצבע בהגדרות שולחן העבודה." + }, + "changeAtRiskPassword": { + "message": "Change at-risk password" } } diff --git a/apps/browser/src/_locales/hi/messages.json b/apps/browser/src/_locales/hi/messages.json index de5ecb22984..663b47bea43 100644 --- a/apps/browser/src/_locales/hi/messages.json +++ b/apps/browser/src/_locales/hi/messages.json @@ -80,6 +80,15 @@ "masterPassHint": { "message": "Master Password Hint (optional)" }, + "passwordStrengthScore": { + "message": "Password strength score $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "joinOrganization": { "message": "Join organization" }, @@ -470,22 +479,6 @@ "length": { "message": "लंबाई" }, - "uppercase": { - "message": "बड़े अक्षर (A-Z)", - "description": "deprecated. Use uppercaseLabel instead." - }, - "lowercase": { - "message": "छोटे अक्षर (a-z)", - "description": "deprecated. Use lowercaseLabel instead." - }, - "numbers": { - "message": "संख्या (0-9)", - "description": "deprecated. Use numbersLabel instead." - }, - "specialCharacters": { - "message": "विशेष अक्षर (!@#$%^&*)", - "description": "deprecated. Use specialCharactersLabel instead." - }, "include": { "message": "Include", "description": "Card header for password generator include block" @@ -518,10 +511,6 @@ "message": "Include special characters", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "numWords": { "message": "Number of Words" }, @@ -660,8 +649,8 @@ "browserNotSupportClipboard": { "message": "आपका वेब ब्राउज़र आसान क्लिपबोर्ड कॉपीिंग का समर्थन नहीं करता है। इसके बजाय इसे मैन्युअल रूप से कॉपी करें।" }, - "verifyIdentity": { - "message": "पहचान सत्यापित करें" + "verifyYourIdentity": { + "message": "Verify your identity" }, "weDontRecognizeThisDevice": { "message": "We don't recognize this device. Enter the code sent to your email to verify your identity." @@ -876,6 +865,21 @@ "logInToBitwarden": { "message": "Log in to Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "आपके ईमेल पर भेजा गया कोड भरें" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "अपने प्रमाणक ऐप से कोड डालें" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Press your YubiKey to authenticate" + }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Duo two-step login is required for your account. Follow the steps below to finish logging in." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Follow the steps below to finish logging in." + }, "restartRegistration": { "message": "Restart registration" }, @@ -897,6 +901,9 @@ "no": { "message": "नहीं" }, + "location": { + "message": "Location" + }, "unexpectedError": { "message": "An unexpected error has occured." }, @@ -1046,6 +1053,56 @@ "notificationAddSave": { "message": "Yes, Save Now" }, + "loginSaveSuccessDetails": { + "message": "$USERNAME$ को बिटवार्डन में सहेजा गया।", + "placeholders": { + "username": { + "content": "$1" + } + }, + "description": "Shown to user after login is saved." + }, + "loginUpdatedSuccessDetails": { + "message": "$USERNAME$ को बिटवार्डन में अपडेट किया गया।", + "placeholders": { + "username": { + "content": "$1" + } + }, + "description": "Shown to user after login is updated." + }, + "saveAsNewLoginAction": { + "message": "Save as new login", + "description": "Button text for saving login details as a new entry." + }, + "updateLoginAction": { + "message": "Update login", + "description": "Button text for updating an existing login entry." + }, + "saveLoginPrompt": { + "message": "Save login?", + "description": "Prompt asking the user if they want to save their login details." + }, + "updateLoginPrompt": { + "message": "Update existing login?", + "description": "Prompt asking the user if they want to update an existing login entry." + }, + "loginSaveSuccess": { + "message": "Login saved", + "description": "Message displayed when login details are successfully saved." + }, + "loginUpdateSuccess": { + "message": "Login updated", + "description": "Message displayed when login details are successfully updated." + }, + "saveFailure": { + "message": "Error saving", + "description": "Error message shown when the system fails to save login details." + }, + "saveFailureDetails": { + "message": "Oh no! We couldn't save this. Try entering the details manually.", + "description": "Detailed error message shown when saving login details fails." + }, "enableChangedPasswordNotification": { "message": "मौजूदा लॉगिन को अपडेट करने के लिए कहें" }, @@ -1365,12 +1422,22 @@ "rememberMe": { "message": "मुझे याद रखें" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Don't ask again on this device for 30 days" + }, "sendVerificationCodeEmailAgain": { "message": "फिर से सत्यापन कोड ईमेल भेजें" }, "useAnotherTwoStepMethod": { "message": "एक और दो-चरण लॉगिन विधि का उपयोग करें" }, + "selectAnotherMethod": { + "message": "Select another method", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Use your recovery code" + }, "insertYubiKey": { "message": "अपने कंप्यूटर के यूएसबी पोर्ट में अपने YubiKey डालें, फिर इसके बटन को स्पर्श करें।" }, @@ -1383,9 +1450,18 @@ "webAuthnNewTabOpen": { "message": "नया टैब खोलें" }, + "openInNewTab": { + "message": "Open in new tab" + }, "webAuthnAuthenticate": { "message": "वेबऑथन प्रमाणित करें" }, + "readSecurityKey": { + "message": "Read security key" + }, + "awaitingSecurityKeyInteraction": { + "message": "Awaiting security key interaction..." + }, "loginUnavailable": { "message": "Login Unavailable" }, @@ -1398,6 +1474,9 @@ "twoStepOptions": { "message": "Two-step Login Options" }, + "selectTwoStepLoginMethod": { + "message": "Select two-step login method" + }, "recoveryCodeDesc": { "message": "अपने दो कारक प्रदाताओं के सभी के लिए उपयोग खो दिया है? अपने खाते से सभी दो-कारक प्रदाताओं को अक्षम करने के लिए अपने रिकवरी कोड का उपयोग करें।" }, @@ -2097,6 +2176,15 @@ "vaultTimeoutAction1": { "message": "टाइमआउट कार्रवाई" }, + "newCustomizationOptionsCalloutTitle": { + "message": "New customization options" + }, + "newCustomizationOptionsCalloutContent": { + "message": "Customize your vault experience with quick copy actions, compact mode, and more!" + }, + "newCustomizationOptionsCalloutLink": { + "message": "View all Appearance settings" + }, "lock": { "message": "लॉक", "description": "Verb form: to make secure or inaccessible by" @@ -2391,8 +2479,17 @@ "atRiskPasswords": { "message": "At-risk passwords" }, - "atRiskPasswordsDescSingleOrg": { - "message": "$ORGANIZATION$ is requesting you change the $COUNT$ passwords because they are at risk.", + "atRiskPasswordDescSingleOrg": { + "message": "$ORGANIZATION$ is requesting you change one password because it is at-risk.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + } + }, + "atRiskPasswordsDescSingleOrgPlural": { + "message": "$ORGANIZATION$ is requesting you change the $COUNT$ passwords because they are at-risk.", "placeholders": { "organization": { "content": "$1", @@ -2404,8 +2501,8 @@ } } }, - "atRiskPasswordsDescMultiOrg": { - "message": "Your organizations are requesting you change the $COUNT$ passwords because they are at risk.", + "atRiskPasswordsDescMultiOrgPlural": { + "message": "Your organizations are requesting you change the $COUNT$ passwords because they are at-risk.", "placeholders": { "count": { "content": "$1", @@ -2431,6 +2528,36 @@ "changeAtRiskPasswordsFasterDesc": { "message": "Update your settings so you can quickly autofill your passwords and generate new ones" }, + "reviewAtRiskLogins": { + "message": "Review at-risk logins" + }, + "reviewAtRiskPasswords": { + "message": "Review at-risk passwords" + }, + "reviewAtRiskLoginsSlideDesc": { + "message": "Your organization passwords are at-risk because they are weak, reused, and/or exposed.", + "description": "Description of the review at-risk login slide on the at-risk password page carousel" + }, + "reviewAtRiskLoginSlideImgAlt": { + "message": "Illustration of a list of logins that are at-risk" + }, + "generatePasswordSlideDesc": { + "message": "Quickly generate a strong, unique password with the Bitwarden autofill menu on the at-risk site.", + "description": "Description of the generate password slide on the at-risk password page carousel" + }, + "generatePasswordSlideImgAlt": { + "message": "Illustration of the Bitwarden autofill menu displaying a generated password" + }, + "updateInBitwarden": { + "message": "Update in Bitwarden" + }, + "updateInBitwardenSlideDesc": { + "message": "Bitwarden will then prompt you to update the password in the password manager.", + "description": "Description of the update in Bitwarden slide on the at-risk password page carousel" + }, + "updateInBitwardenSlideImgAlt": { + "message": "Illustration of a Bitwarden’s notification prompting the user to update the login" + }, "turnOnAutofill": { "message": "Turn on autofill" }, @@ -3983,6 +4110,9 @@ "activeAccount": { "message": "Active account" }, + "bitwardenAccount": { + "message": "Bitwarden account" + }, "availableAccounts": { "message": "Available accounts" }, @@ -4181,6 +4311,20 @@ } } }, + "copyFieldValue": { + "message": "Copy $FIELD$, $VALUE$", + "description": "Title for a button that copies a field value to the clipboard.", + "placeholders": { + "field": { + "content": "$1", + "example": "Username" + }, + "value": { + "content": "$2", + "example": "Foo" + } + } + }, "noValuesToCopy": { "message": "No values to copy" }, @@ -5002,5 +5146,8 @@ }, "updateDesktopAppOrDisableFingerprintDialogMessage": { "message": "To use biometric unlock, please update your desktop application, or disable fingerprint unlock in the desktop settings." + }, + "changeAtRiskPassword": { + "message": "Change at-risk password" } } diff --git a/apps/browser/src/_locales/hr/messages.json b/apps/browser/src/_locales/hr/messages.json index 70d3b7b0446..aaf7c5895f0 100644 --- a/apps/browser/src/_locales/hr/messages.json +++ b/apps/browser/src/_locales/hr/messages.json @@ -80,6 +80,15 @@ "masterPassHint": { "message": "Podsjetnik glavne lozinke (neobavezno)" }, + "passwordStrengthScore": { + "message": "Password strength score $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "joinOrganization": { "message": "Pridruži se organizaciji" }, @@ -470,22 +479,6 @@ "length": { "message": "Duljina" }, - "uppercase": { - "message": "Velika slova (A - Z)", - "description": "deprecated. Use uppercaseLabel instead." - }, - "lowercase": { - "message": "Mala slova (a - z)", - "description": "deprecated. Use lowercaseLabel instead." - }, - "numbers": { - "message": "Brojevi (0 - 9)", - "description": "deprecated. Use numbersLabel instead." - }, - "specialCharacters": { - "message": "Posebni znakovi (!@#$%^&*)", - "description": "deprecated. Use specialCharactersLabel instead." - }, "include": { "message": "Uključi", "description": "Card header for password generator include block" @@ -518,10 +511,6 @@ "message": "Uključi posebne znakove", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "numWords": { "message": "Broj riječi" }, @@ -660,8 +649,8 @@ "browserNotSupportClipboard": { "message": "Web preglednik ne podržava jednostavno kopiranje međuspremnika. Umjesto toga ručno kopirajte." }, - "verifyIdentity": { - "message": "Potvrdi identitet" + "verifyYourIdentity": { + "message": "Verify your identity" }, "weDontRecognizeThisDevice": { "message": "Ne prepoznajemo ovaj uređaj. Za potvrdu identiteta unesi kôd poslan e-poštom." @@ -876,6 +865,21 @@ "logInToBitwarden": { "message": "Prijavi se u Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "Enter the code sent to your email" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Enter the code from your authenticator app" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Press your YubiKey to authenticate" + }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Duo two-step login is required for your account. Follow the steps below to finish logging in." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Follow the steps below to finish logging in." + }, "restartRegistration": { "message": "Ponovno pokreni registraciju" }, @@ -897,6 +901,9 @@ "no": { "message": "Ne" }, + "location": { + "message": "Location" + }, "unexpectedError": { "message": "Došlo je do neočekivane pogreške." }, @@ -1046,6 +1053,56 @@ "notificationAddSave": { "message": "Spremi" }, + "loginSaveSuccessDetails": { + "message": "$USERNAME$ saved to Bitwarden.", + "placeholders": { + "username": { + "content": "$1" + } + }, + "description": "Shown to user after login is saved." + }, + "loginUpdatedSuccessDetails": { + "message": "$USERNAME$ updated in Bitwarden.", + "placeholders": { + "username": { + "content": "$1" + } + }, + "description": "Shown to user after login is updated." + }, + "saveAsNewLoginAction": { + "message": "Save as new login", + "description": "Button text for saving login details as a new entry." + }, + "updateLoginAction": { + "message": "Update login", + "description": "Button text for updating an existing login entry." + }, + "saveLoginPrompt": { + "message": "Save login?", + "description": "Prompt asking the user if they want to save their login details." + }, + "updateLoginPrompt": { + "message": "Update existing login?", + "description": "Prompt asking the user if they want to update an existing login entry." + }, + "loginSaveSuccess": { + "message": "Login saved", + "description": "Message displayed when login details are successfully saved." + }, + "loginUpdateSuccess": { + "message": "Login updated", + "description": "Message displayed when login details are successfully updated." + }, + "saveFailure": { + "message": "Error saving", + "description": "Error message shown when the system fails to save login details." + }, + "saveFailureDetails": { + "message": "Oh no! We couldn't save this. Try entering the details manually.", + "description": "Detailed error message shown when saving login details fails." + }, "enableChangedPasswordNotification": { "message": "Upitaj za ažuriranje trenutne prijave" }, @@ -1365,12 +1422,22 @@ "rememberMe": { "message": "Zapamti me" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Don't ask again on this device for 30 days" + }, "sendVerificationCodeEmailAgain": { "message": "Ponovno slanje kontrolnog koda e-poštom" }, "useAnotherTwoStepMethod": { "message": "Koristiti drugi način prijave dvostrukom autentifikacijom" }, + "selectAnotherMethod": { + "message": "Select another method", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Use your recovery code" + }, "insertYubiKey": { "message": "Umetni svoj YubiKey u USB priključak računala, a zatim dodirni njegovu tipku." }, @@ -1383,9 +1450,18 @@ "webAuthnNewTabOpen": { "message": "Otvori novu karticu" }, + "openInNewTab": { + "message": "Open in new tab" + }, "webAuthnAuthenticate": { "message": "Ovjeri WebAuthn" }, + "readSecurityKey": { + "message": "Read security key" + }, + "awaitingSecurityKeyInteraction": { + "message": "Awaiting security key interaction..." + }, "loginUnavailable": { "message": "Prijava nije dostupna" }, @@ -1398,6 +1474,9 @@ "twoStepOptions": { "message": "Mogućnosti prijave dvostrukom autentifikacijom" }, + "selectTwoStepLoginMethod": { + "message": "Select two-step login method" + }, "recoveryCodeDesc": { "message": "Izgubljen je pristup uređaju za dvostruku autentifikaciju? Koristi svoj kôd za oporavak za onemogućavanje svih pružatelja usluga dvostruke autentifikacije na tvojem računu." }, @@ -2097,6 +2176,15 @@ "vaultTimeoutAction1": { "message": "Radnja nakon isteka " }, + "newCustomizationOptionsCalloutTitle": { + "message": "New customization options" + }, + "newCustomizationOptionsCalloutContent": { + "message": "Customize your vault experience with quick copy actions, compact mode, and more!" + }, + "newCustomizationOptionsCalloutLink": { + "message": "View all Appearance settings" + }, "lock": { "message": "Zaključaj", "description": "Verb form: to make secure or inaccessible by" @@ -2391,8 +2479,17 @@ "atRiskPasswords": { "message": "Rizične lozinke" }, - "atRiskPasswordsDescSingleOrg": { - "message": "Broj rizičnih lozinki koje $ORGANIZATION$ traži da promijeniš: $COUNT$.", + "atRiskPasswordDescSingleOrg": { + "message": "$ORGANIZATION$ is requesting you change one password because it is at-risk.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + } + }, + "atRiskPasswordsDescSingleOrgPlural": { + "message": "$ORGANIZATION$ is requesting you change the $COUNT$ passwords because they are at-risk.", "placeholders": { "organization": { "content": "$1", @@ -2404,8 +2501,8 @@ } } }, - "atRiskPasswordsDescMultiOrg": { - "message": "Broj rizičnih lozinki koje tvoja organizacija traži da promijeniš: $COUNT$.", + "atRiskPasswordsDescMultiOrgPlural": { + "message": "Your organizations are requesting you change the $COUNT$ passwords because they are at-risk.", "placeholders": { "count": { "content": "$1", @@ -2431,6 +2528,36 @@ "changeAtRiskPasswordsFasterDesc": { "message": "Ažuriraj svoje postavke kako za brzu auto-ispunu svojih lozinki i generiranje novih" }, + "reviewAtRiskLogins": { + "message": "Review at-risk logins" + }, + "reviewAtRiskPasswords": { + "message": "Review at-risk passwords" + }, + "reviewAtRiskLoginsSlideDesc": { + "message": "Your organization passwords are at-risk because they are weak, reused, and/or exposed.", + "description": "Description of the review at-risk login slide on the at-risk password page carousel" + }, + "reviewAtRiskLoginSlideImgAlt": { + "message": "Illustration of a list of logins that are at-risk" + }, + "generatePasswordSlideDesc": { + "message": "Quickly generate a strong, unique password with the Bitwarden autofill menu on the at-risk site.", + "description": "Description of the generate password slide on the at-risk password page carousel" + }, + "generatePasswordSlideImgAlt": { + "message": "Illustration of the Bitwarden autofill menu displaying a generated password" + }, + "updateInBitwarden": { + "message": "Update in Bitwarden" + }, + "updateInBitwardenSlideDesc": { + "message": "Bitwarden will then prompt you to update the password in the password manager.", + "description": "Description of the update in Bitwarden slide on the at-risk password page carousel" + }, + "updateInBitwardenSlideImgAlt": { + "message": "Illustration of a Bitwarden’s notification prompting the user to update the login" + }, "turnOnAutofill": { "message": "Uključi auto-ispunu" }, @@ -3983,6 +4110,9 @@ "activeAccount": { "message": "Aktivni račun" }, + "bitwardenAccount": { + "message": "Bitwarden account" + }, "availableAccounts": { "message": "Dostupni računi" }, @@ -4181,6 +4311,20 @@ } } }, + "copyFieldValue": { + "message": "Copy $FIELD$, $VALUE$", + "description": "Title for a button that copies a field value to the clipboard.", + "placeholders": { + "field": { + "content": "$1", + "example": "Username" + }, + "value": { + "content": "$2", + "example": "Foo" + } + } + }, "noValuesToCopy": { "message": "Nema vrijednosti za kopiranje" }, @@ -5002,5 +5146,8 @@ }, "updateDesktopAppOrDisableFingerprintDialogMessage": { "message": "Za korištenje biometrijskog otključavanja ažuriraj desktop aplikaciju ili nemogući otključavanje otiskom prsta u desktop aplikaciji." + }, + "changeAtRiskPassword": { + "message": "Change at-risk password" } } diff --git a/apps/browser/src/_locales/hu/messages.json b/apps/browser/src/_locales/hu/messages.json index 4d547f3b62d..5a4827915a3 100644 --- a/apps/browser/src/_locales/hu/messages.json +++ b/apps/browser/src/_locales/hu/messages.json @@ -80,6 +80,15 @@ "masterPassHint": { "message": "Mesterjelszó emlékeztető (nem kötelező)" }, + "passwordStrengthScore": { + "message": "A jelszó erősségi pontszáma $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "joinOrganization": { "message": "Csatlakozás szervezethez" }, @@ -470,22 +479,6 @@ "length": { "message": "Hossz" }, - "uppercase": { - "message": "Nagybetűs (A-Z)", - "description": "deprecated. Use uppercaseLabel instead." - }, - "lowercase": { - "message": "Kisbetűs (a-z)", - "description": "deprecated. Use lowercaseLabel instead." - }, - "numbers": { - "message": "Számok (0-9)", - "description": "deprecated. Use numbersLabel instead." - }, - "specialCharacters": { - "message": "Speciális karakterek (!@#$%^&*)", - "description": "deprecated. Use specialCharactersLabel instead." - }, "include": { "message": "Bevonás", "description": "Card header for password generator include block" @@ -518,10 +511,6 @@ "message": "Speciális karakterek bevonása", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "numWords": { "message": "Szavak száma" }, @@ -660,7 +649,7 @@ "browserNotSupportClipboard": { "message": "A webböngésződ nem támogat könnyű vágólap másolást. Másold manuálisan inkább." }, - "verifyIdentity": { + "verifyYourIdentity": { "message": "Személyazonosság ellenőrzése" }, "weDontRecognizeThisDevice": { @@ -876,6 +865,21 @@ "logInToBitwarden": { "message": "Bejelentkezés a Bitwardenbe" }, + "enterTheCodeSentToYourEmail": { + "message": "Adjuk meg az email címre elküldött kódot." + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Adjuk meg a hitelesítő alkalmazása által generált kódot." + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Nyomjuk meg a YubiKey-t a hitelesítéshez." + }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Duo kétlépcsős bejelentkezés szükséges a fiókhoz. Kövessük az alábbi lépéseket a bejelentkezés befejezéséhez." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Kövessük az alábbi lépéseket a bejelentkezés befejezéséhez." + }, "restartRegistration": { "message": "Restart registration" }, @@ -897,6 +901,9 @@ "no": { "message": "Nem" }, + "location": { + "message": "Hely" + }, "unexpectedError": { "message": "Váratlan hiba történt." }, @@ -1046,6 +1053,56 @@ "notificationAddSave": { "message": "Mentés" }, + "loginSaveSuccessDetails": { + "message": "$USERNAME$ mentésre került a Bitwardenben.", + "placeholders": { + "username": { + "content": "$1" + } + }, + "description": "Shown to user after login is saved." + }, + "loginUpdatedSuccessDetails": { + "message": "$USERNAME$ frissítésre került a Bitwardenben.", + "placeholders": { + "username": { + "content": "$1" + } + }, + "description": "Shown to user after login is updated." + }, + "saveAsNewLoginAction": { + "message": "Mentés új bejelentkezésként", + "description": "Button text for saving login details as a new entry." + }, + "updateLoginAction": { + "message": "Bejelentkezés frissítése", + "description": "Button text for updating an existing login entry." + }, + "saveLoginPrompt": { + "message": "Bejelentkezés mentése?", + "description": "Prompt asking the user if they want to save their login details." + }, + "updateLoginPrompt": { + "message": "Létező bejelentkezés frissítése?", + "description": "Prompt asking the user if they want to update an existing login entry." + }, + "loginSaveSuccess": { + "message": "A bejelentkezés mentésre került.", + "description": "Message displayed when login details are successfully saved." + }, + "loginUpdateSuccess": { + "message": "A bejelentkezés frissítésre került.", + "description": "Message displayed when login details are successfully updated." + }, + "saveFailure": { + "message": "Hiba történt a bejelentkezés mentésekor.", + "description": "Error message shown when the system fails to save login details." + }, + "saveFailureDetails": { + "message": "Oh no! We couldn't save this. Try entering the details manually.", + "description": "Detailed error message shown when saving login details fails." + }, "enableChangedPasswordNotification": { "message": "Létező bejelentkezés frissítés kérése" }, @@ -1365,12 +1422,22 @@ "rememberMe": { "message": "Emlékezz rám" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Ne kérdezzen újra ezen az eszközön 30 napig" + }, "sendVerificationCodeEmailAgain": { "message": "Megerősítő kód e-mail újra küldése" }, "useAnotherTwoStepMethod": { "message": "Más két lépcsős bejelentkezés használata" }, + "selectAnotherMethod": { + "message": "Másik módszer választás", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Helyreállító kód használata" + }, "insertYubiKey": { "message": "Illeszd be a YubiKey-t a számítógéped egyik USB portjába, majd nyomd meg a gombját." }, @@ -1383,9 +1450,18 @@ "webAuthnNewTabOpen": { "message": "Új fül megnyitása" }, + "openInNewTab": { + "message": "Megnyitás új fülön" + }, "webAuthnAuthenticate": { "message": "WebAutn hitelesítés" }, + "readSecurityKey": { + "message": "Biztonsági kulcs olvasása" + }, + "awaitingSecurityKeyInteraction": { + "message": "Várakozás a biztonsági kulcs interakciójára..." + }, "loginUnavailable": { "message": "A bejelentkezés nem érhető el." }, @@ -1398,6 +1474,9 @@ "twoStepOptions": { "message": "Kétlépcsős bejelentkezés opciók" }, + "selectTwoStepLoginMethod": { + "message": "Kétlépcsős bejelentkezési mód használata" + }, "recoveryCodeDesc": { "message": "Elveszett a hozzáférés az összes kétlépcsős szolgáltatóhoz? A helyreállító kód használatával letilthatók fiókból a kétlépcsős szolgáltatók." }, @@ -2097,6 +2176,15 @@ "vaultTimeoutAction1": { "message": "Időkifutási művelet" }, + "newCustomizationOptionsCalloutTitle": { + "message": "Új testreszabási opciók" + }, + "newCustomizationOptionsCalloutContent": { + "message": "Szabjuk testre tárhely élményét gyors másolási műveletekkel, kompakt móddal és még sok mással!" + }, + "newCustomizationOptionsCalloutLink": { + "message": "Az összes megjelenési beállítás megtekintése" + }, "lock": { "message": "Lezárás", "description": "Verb form: to make secure or inaccessible by" @@ -2391,8 +2479,17 @@ "atRiskPasswords": { "message": "Veszélyes jelszavak" }, - "atRiskPasswordsDescSingleOrg": { - "message": "$ORGANIZATION$ $COUNT$ jelszó meegváltoztatását kéri, mert veszélyben vannak.", + "atRiskPasswordDescSingleOrg": { + "message": "$ORGANIZATION$ egy jelszó megváltoztatását kéri, mert az kockázatos.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + } + }, + "atRiskPasswordsDescSingleOrgPlural": { + "message": "$ORGANIZATION$ $COUNT$ jelszó megváltoztatását kéri, mert azok kockázatosak.", "placeholders": { "organization": { "content": "$1", @@ -2404,8 +2501,8 @@ } } }, - "atRiskPasswordsDescMultiOrg": { - "message": "A szervezetek $COUNT$ jelszó meegváltoztatását kérik, mert veszélyben vannak.", + "atRiskPasswordsDescMultiOrgPlural": { + "message": "A szervezetek $COUNT$ jelszó megváltoztatását kérik, mert azok kockázatosak.", "placeholders": { "count": { "content": "$1", @@ -2431,6 +2528,36 @@ "changeAtRiskPasswordsFasterDesc": { "message": "Frissítsük a beállításokat, hogy gyorsan automatikusan kitölthessük a jelszavakat és újakat generálhassunk." }, + "reviewAtRiskLogins": { + "message": "Kockázatos bejelentkezések áttekintése" + }, + "reviewAtRiskPasswords": { + "message": "Kockázatos jelszavak áttekintése" + }, + "reviewAtRiskLoginsSlideDesc": { + "message": "A szervezeti jelszavak kockázatosak, mert gyengék, újra felhasználásra kerültek és/vagy nyilvánosságra kerültek.", + "description": "Description of the review at-risk login slide on the at-risk password page carousel" + }, + "reviewAtRiskLoginSlideImgAlt": { + "message": "A kockázatos bejelentkezések listájának illusztrációja" + }, + "generatePasswordSlideDesc": { + "message": "Gyorsan generálhatunk erős, egyedi jelszót a Bitwarden automatikus kitöltési menüjével a kockázatos webhelyen.", + "description": "Description of the generate password slide on the at-risk password page carousel" + }, + "generatePasswordSlideImgAlt": { + "message": "A Bitwarden automatikus kitöltési menüjének illusztrációja, amely egy generált jelszót jelenít meg." + }, + "updateInBitwarden": { + "message": "Frissítés a Bitwardenben" + }, + "updateInBitwardenSlideDesc": { + "message": "A Bitwarden ezután felkér a jelszó frissítésére a jelszókezelőben.", + "description": "Description of the update in Bitwarden slide on the at-risk password page carousel" + }, + "updateInBitwardenSlideImgAlt": { + "message": "Illusztráció a Bitwarden értesítéséről, amely felszólítja a felhasználót a bejelentkezési adatok frissítésére." + }, "turnOnAutofill": { "message": "Automatikus kitöltés bekapcsolása" }, @@ -3983,6 +4110,9 @@ "activeAccount": { "message": "Aktív fiók" }, + "bitwardenAccount": { + "message": "Bitwarden fiók" + }, "availableAccounts": { "message": "Elérhető fiókok" }, @@ -4181,6 +4311,20 @@ } } }, + "copyFieldValue": { + "message": "$FIELD$, $VALUE$ másolása", + "description": "Title for a button that copies a field value to the clipboard.", + "placeholders": { + "field": { + "content": "$1", + "example": "Username" + }, + "value": { + "content": "$2", + "example": "Foo" + } + } + }, "noValuesToCopy": { "message": "Nincsenek másolandó értékek." }, @@ -5002,5 +5146,8 @@ }, "updateDesktopAppOrDisableFingerprintDialogMessage": { "message": "A biometrikus feloldás használatához frissítsük az asztali alkalmazást vagy tiltsuk le az ujjlenyomatos feloldást az asztali beállításokban." + }, + "changeAtRiskPassword": { + "message": "Kockázatos jelszó megváltoztatása" } } diff --git a/apps/browser/src/_locales/id/messages.json b/apps/browser/src/_locales/id/messages.json index 57a1ed59026..9edf3faeaa2 100644 --- a/apps/browser/src/_locales/id/messages.json +++ b/apps/browser/src/_locales/id/messages.json @@ -80,6 +80,15 @@ "masterPassHint": { "message": "Petunjuk Kata Sandi Utama (opsional)" }, + "passwordStrengthScore": { + "message": "Password strength score $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "joinOrganization": { "message": "Bergabung ke organisasi" }, @@ -470,22 +479,6 @@ "length": { "message": "Panjang" }, - "uppercase": { - "message": "Huruf besar (A-Z)", - "description": "deprecated. Use uppercaseLabel instead." - }, - "lowercase": { - "message": "Huruf kecil (a-z)", - "description": "deprecated. Use lowercaseLabel instead." - }, - "numbers": { - "message": "Angka (0-9)", - "description": "deprecated. Use numbersLabel instead." - }, - "specialCharacters": { - "message": "karakter khusus (contoh.! @#$%^&*)", - "description": "deprecated. Use specialCharactersLabel instead." - }, "include": { "message": "Sertakan", "description": "Card header for password generator include block" @@ -518,10 +511,6 @@ "message": "Sertakan karakter khusus", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "numWords": { "message": "Jumlah Kata" }, @@ -660,8 +649,8 @@ "browserNotSupportClipboard": { "message": "Peramban Anda tidak mendukung menyalin clipboard dengan mudah. Salin secara manual." }, - "verifyIdentity": { - "message": "Verifikasi Identitas Anda" + "verifyYourIdentity": { + "message": "Verify your identity" }, "weDontRecognizeThisDevice": { "message": "We don't recognize this device. Enter the code sent to your email to verify your identity." @@ -876,6 +865,21 @@ "logInToBitwarden": { "message": "Masuk ke Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "Enter the code sent to your email" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Enter the code from your authenticator app" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Press your YubiKey to authenticate" + }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Duo two-step login is required for your account. Follow the steps below to finish logging in." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Follow the steps below to finish logging in." + }, "restartRegistration": { "message": "Mulai ulang pendaftaran" }, @@ -897,6 +901,9 @@ "no": { "message": "Tidak" }, + "location": { + "message": "Location" + }, "unexpectedError": { "message": "Terjadi kesalahan yang tak diduga." }, @@ -1046,6 +1053,56 @@ "notificationAddSave": { "message": "Iya, Simpan Sekarang" }, + "loginSaveSuccessDetails": { + "message": "$USERNAME$ saved to Bitwarden.", + "placeholders": { + "username": { + "content": "$1" + } + }, + "description": "Shown to user after login is saved." + }, + "loginUpdatedSuccessDetails": { + "message": "$USERNAME$ updated in Bitwarden.", + "placeholders": { + "username": { + "content": "$1" + } + }, + "description": "Shown to user after login is updated." + }, + "saveAsNewLoginAction": { + "message": "Save as new login", + "description": "Button text for saving login details as a new entry." + }, + "updateLoginAction": { + "message": "Update login", + "description": "Button text for updating an existing login entry." + }, + "saveLoginPrompt": { + "message": "Save login?", + "description": "Prompt asking the user if they want to save their login details." + }, + "updateLoginPrompt": { + "message": "Update existing login?", + "description": "Prompt asking the user if they want to update an existing login entry." + }, + "loginSaveSuccess": { + "message": "Login saved", + "description": "Message displayed when login details are successfully saved." + }, + "loginUpdateSuccess": { + "message": "Login updated", + "description": "Message displayed when login details are successfully updated." + }, + "saveFailure": { + "message": "Error saving", + "description": "Error message shown when the system fails to save login details." + }, + "saveFailureDetails": { + "message": "Oh no! We couldn't save this. Try entering the details manually.", + "description": "Detailed error message shown when saving login details fails." + }, "enableChangedPasswordNotification": { "message": "Tanyakan untuk memperbarui masuk yang sudah ada" }, @@ -1365,12 +1422,22 @@ "rememberMe": { "message": "Ingat saya" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Don't ask again on this device for 30 days" + }, "sendVerificationCodeEmailAgain": { "message": "Kirim ulang email kode verifikasi" }, "useAnotherTwoStepMethod": { "message": "Gunakan metode masuk dua langkah lainnya" }, + "selectAnotherMethod": { + "message": "Select another method", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Use your recovery code" + }, "insertYubiKey": { "message": "Masukkan YubiKey Anda ke port USB komputer Anda, lalu sentuh tombolnya." }, @@ -1383,9 +1450,18 @@ "webAuthnNewTabOpen": { "message": "Buka tab baru" }, + "openInNewTab": { + "message": "Open in new tab" + }, "webAuthnAuthenticate": { "message": "Autentikasi dengan WebAuthn." }, + "readSecurityKey": { + "message": "Read security key" + }, + "awaitingSecurityKeyInteraction": { + "message": "Awaiting security key interaction..." + }, "loginUnavailable": { "message": "Info Masuk Tidak Tersedia" }, @@ -1398,6 +1474,9 @@ "twoStepOptions": { "message": "Opsi Info Masuk Dua Langkah" }, + "selectTwoStepLoginMethod": { + "message": "Select two-step login method" + }, "recoveryCodeDesc": { "message": "Kehilangan akses ke semua penyedia dua faktor Anda? Gunakan kode pemulihan untuk menonaktifkan semua penyedia dua faktor dari akun Anda." }, @@ -2097,6 +2176,15 @@ "vaultTimeoutAction1": { "message": "Batas waktu tindakan" }, + "newCustomizationOptionsCalloutTitle": { + "message": "New customization options" + }, + "newCustomizationOptionsCalloutContent": { + "message": "Customize your vault experience with quick copy actions, compact mode, and more!" + }, + "newCustomizationOptionsCalloutLink": { + "message": "View all Appearance settings" + }, "lock": { "message": "Kunci", "description": "Verb form: to make secure or inaccessible by" @@ -2391,8 +2479,17 @@ "atRiskPasswords": { "message": "At-risk passwords" }, - "atRiskPasswordsDescSingleOrg": { - "message": "$ORGANIZATION$ is requesting you change the $COUNT$ passwords because they are at risk.", + "atRiskPasswordDescSingleOrg": { + "message": "$ORGANIZATION$ is requesting you change one password because it is at-risk.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + } + }, + "atRiskPasswordsDescSingleOrgPlural": { + "message": "$ORGANIZATION$ is requesting you change the $COUNT$ passwords because they are at-risk.", "placeholders": { "organization": { "content": "$1", @@ -2404,8 +2501,8 @@ } } }, - "atRiskPasswordsDescMultiOrg": { - "message": "Your organizations are requesting you change the $COUNT$ passwords because they are at risk.", + "atRiskPasswordsDescMultiOrgPlural": { + "message": "Your organizations are requesting you change the $COUNT$ passwords because they are at-risk.", "placeholders": { "count": { "content": "$1", @@ -2431,6 +2528,36 @@ "changeAtRiskPasswordsFasterDesc": { "message": "Update your settings so you can quickly autofill your passwords and generate new ones" }, + "reviewAtRiskLogins": { + "message": "Review at-risk logins" + }, + "reviewAtRiskPasswords": { + "message": "Review at-risk passwords" + }, + "reviewAtRiskLoginsSlideDesc": { + "message": "Your organization passwords are at-risk because they are weak, reused, and/or exposed.", + "description": "Description of the review at-risk login slide on the at-risk password page carousel" + }, + "reviewAtRiskLoginSlideImgAlt": { + "message": "Illustration of a list of logins that are at-risk" + }, + "generatePasswordSlideDesc": { + "message": "Quickly generate a strong, unique password with the Bitwarden autofill menu on the at-risk site.", + "description": "Description of the generate password slide on the at-risk password page carousel" + }, + "generatePasswordSlideImgAlt": { + "message": "Illustration of the Bitwarden autofill menu displaying a generated password" + }, + "updateInBitwarden": { + "message": "Update in Bitwarden" + }, + "updateInBitwardenSlideDesc": { + "message": "Bitwarden will then prompt you to update the password in the password manager.", + "description": "Description of the update in Bitwarden slide on the at-risk password page carousel" + }, + "updateInBitwardenSlideImgAlt": { + "message": "Illustration of a Bitwarden’s notification prompting the user to update the login" + }, "turnOnAutofill": { "message": "Turn on autofill" }, @@ -3983,6 +4110,9 @@ "activeAccount": { "message": "Akun aktif" }, + "bitwardenAccount": { + "message": "Bitwarden account" + }, "availableAccounts": { "message": "Akun yang tersedia" }, @@ -4181,6 +4311,20 @@ } } }, + "copyFieldValue": { + "message": "Copy $FIELD$, $VALUE$", + "description": "Title for a button that copies a field value to the clipboard.", + "placeholders": { + "field": { + "content": "$1", + "example": "Username" + }, + "value": { + "content": "$2", + "example": "Foo" + } + } + }, "noValuesToCopy": { "message": "Tidak ada nilai untuk disalin" }, @@ -5002,5 +5146,8 @@ }, "updateDesktopAppOrDisableFingerprintDialogMessage": { "message": "To use biometric unlock, please update your desktop application, or disable fingerprint unlock in the desktop settings." + }, + "changeAtRiskPassword": { + "message": "Change at-risk password" } } diff --git a/apps/browser/src/_locales/it/messages.json b/apps/browser/src/_locales/it/messages.json index 4f85ed889ff..ecd045d67e2 100644 --- a/apps/browser/src/_locales/it/messages.json +++ b/apps/browser/src/_locales/it/messages.json @@ -80,6 +80,15 @@ "masterPassHint": { "message": "Suggerimento per la password principale (facoltativo)" }, + "passwordStrengthScore": { + "message": "Valutazione complessità parola d'accesso $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "joinOrganization": { "message": "Unisciti all'organizzazione" }, @@ -470,22 +479,6 @@ "length": { "message": "Lunghezza" }, - "uppercase": { - "message": "Maiuscole (A-Z)", - "description": "deprecated. Use uppercaseLabel instead." - }, - "lowercase": { - "message": "Minuscole (a-z)", - "description": "deprecated. Use lowercaseLabel instead." - }, - "numbers": { - "message": "Numeri (0-9)", - "description": "deprecated. Use numbersLabel instead." - }, - "specialCharacters": { - "message": "Caratteri speciali (!@#$%^&*)", - "description": "deprecated. Use specialCharactersLabel instead." - }, "include": { "message": "Includi", "description": "Card header for password generator include block" @@ -518,10 +511,6 @@ "message": "Includi caratteri speciali", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "numWords": { "message": "Numero di parole" }, @@ -660,8 +649,8 @@ "browserNotSupportClipboard": { "message": "Il tuo browser non supporta copiare dagli appunti. Copialo manualmente." }, - "verifyIdentity": { - "message": "Verifica identità" + "verifyYourIdentity": { + "message": "Verifica la tua identità" }, "weDontRecognizeThisDevice": { "message": "Non riconosciamo questo dispositivo. Inserisci il codice inviato alla tua e-mail per verificare la tua identità." @@ -876,6 +865,21 @@ "logInToBitwarden": { "message": "Accedi a Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "Inserisci il codice inviato alla tua e-mail" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Inserisci il codice dalla tua app di autenticazione" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Premi la tua chiave Yubi per autenticare" + }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Il login Duo in due passaggi è richiesto per il tuo account. Segui i passaggi qui sotto per completare l'accesso." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Segui i passaggi qui sotto per completare l'accesso." + }, "restartRegistration": { "message": "Riprova la registrazione" }, @@ -897,6 +901,9 @@ "no": { "message": "No" }, + "location": { + "message": "Luogo" + }, "unexpectedError": { "message": "Si è verificato un errore imprevisto." }, @@ -1046,6 +1053,56 @@ "notificationAddSave": { "message": "Salva" }, + "loginSaveSuccessDetails": { + "message": "$USERNAME$ salvato in Bitwarden.", + "placeholders": { + "username": { + "content": "$1" + } + }, + "description": "Shown to user after login is saved." + }, + "loginUpdatedSuccessDetails": { + "message": "$USERNAME$ aggiornato in Bitwarden.", + "placeholders": { + "username": { + "content": "$1" + } + }, + "description": "Shown to user after login is updated." + }, + "saveAsNewLoginAction": { + "message": "Salva come nuovo accesso", + "description": "Button text for saving login details as a new entry." + }, + "updateLoginAction": { + "message": "Aggiorna accesso", + "description": "Button text for updating an existing login entry." + }, + "saveLoginPrompt": { + "message": "Salvare l'accesso?", + "description": "Prompt asking the user if they want to save their login details." + }, + "updateLoginPrompt": { + "message": "Aggiornare l'accesso esistente?", + "description": "Prompt asking the user if they want to update an existing login entry." + }, + "loginSaveSuccess": { + "message": "Accesso salvato", + "description": "Message displayed when login details are successfully saved." + }, + "loginUpdateSuccess": { + "message": "Accesso aggiornato", + "description": "Message displayed when login details are successfully updated." + }, + "saveFailure": { + "message": "Errore nel salvataggio", + "description": "Error message shown when the system fails to save login details." + }, + "saveFailureDetails": { + "message": "Oh no! Non abbiamo potuto salvarlo. Prova a inserire manualmente i dettagli.", + "description": "Detailed error message shown when saving login details fails." + }, "enableChangedPasswordNotification": { "message": "Chiedi di aggiornare il login esistente" }, @@ -1365,12 +1422,22 @@ "rememberMe": { "message": "Ricordami" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Non chiedere più su questo dispositivo per 30 giorni" + }, "sendVerificationCodeEmailAgain": { "message": "Invia di nuovo l'email con codice di verifica" }, "useAnotherTwoStepMethod": { "message": "Usa un altro metodo di verifica in due passaggi" }, + "selectAnotherMethod": { + "message": "Seleziona un altro metodo", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Usa il tuo codice di recupero" + }, "insertYubiKey": { "message": "Inserisci la tua YubiKey nella porta USB del computer, poi premi il suo pulsante." }, @@ -1383,9 +1450,18 @@ "webAuthnNewTabOpen": { "message": "Apri nuova scheda" }, + "openInNewTab": { + "message": "Apri in una nuova scheda" + }, "webAuthnAuthenticate": { "message": "Autenticazione WebAuthn" }, + "readSecurityKey": { + "message": "Leggi chiave di sicurezza" + }, + "awaitingSecurityKeyInteraction": { + "message": "In attesa di interazione con la chiave di sicurezza..." + }, "loginUnavailable": { "message": "Login non disponibile" }, @@ -1398,6 +1474,9 @@ "twoStepOptions": { "message": "Opzioni di verifica in due passaggi" }, + "selectTwoStepLoginMethod": { + "message": "Seleziona metodo di accesso in due passaggi" + }, "recoveryCodeDesc": { "message": "Hai perso l'accesso a tutti i tuoi metodi di verifica in due passaggi? Usa il tuo codice di recupero per disattivarli tutti dal tuo account." }, @@ -2097,6 +2176,15 @@ "vaultTimeoutAction1": { "message": "Azione al timeout" }, + "newCustomizationOptionsCalloutTitle": { + "message": "Nuove opzioni di personalizzazione" + }, + "newCustomizationOptionsCalloutContent": { + "message": "Personalizza l'esperienza della tua cassaforte con azioni di copia rapida, modalità compatta e altro ancora!" + }, + "newCustomizationOptionsCalloutLink": { + "message": "Vedi tutte le impostazioni di aspetto" + }, "lock": { "message": "Blocca", "description": "Verb form: to make secure or inaccessible by" @@ -2391,7 +2479,16 @@ "atRiskPasswords": { "message": "Parola d'accesso a rischio" }, - "atRiskPasswordsDescSingleOrg": { + "atRiskPasswordDescSingleOrg": { + "message": "$ORGANIZATION$ ti chiede di cambiare una parola d'accesso perché è a rischio.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + } + }, + "atRiskPasswordsDescSingleOrgPlural": { "message": "$ORGANIZATION$ ti sta richiedendo di modificare $COUNT$ parole d'accesso perché sono a rischio.", "placeholders": { "organization": { @@ -2404,7 +2501,7 @@ } } }, - "atRiskPasswordsDescMultiOrg": { + "atRiskPasswordsDescMultiOrgPlural": { "message": "Le tue organizzazioni ti chiedono di modificare le $COUNT$ parole d'accesso perché sono a rischio.", "placeholders": { "count": { @@ -2431,6 +2528,36 @@ "changeAtRiskPasswordsFasterDesc": { "message": "Aggiorna le impostazioni in modo da poter rapidamente riempire automaticamente le parole d'accesso e generarne di nuove" }, + "reviewAtRiskLogins": { + "message": "Redi accessi a rischio" + }, + "reviewAtRiskPasswords": { + "message": "Rivedi parole d'accesso a rischio" + }, + "reviewAtRiskLoginsSlideDesc": { + "message": "Le parole d'accesso dell'organizzazione sono a rischio perché sono deboli, riutilizzate, e/o esposte.", + "description": "Description of the review at-risk login slide on the at-risk password page carousel" + }, + "reviewAtRiskLoginSlideImgAlt": { + "message": "Illustrazione di un elenco di accessi a rischio" + }, + "generatePasswordSlideDesc": { + "message": "Genera rapidamente una parola d'accesso forte e unica con il menu' di riempimento automatico Bitwarden nel sito a rischio.", + "description": "Description of the generate password slide on the at-risk password page carousel" + }, + "generatePasswordSlideImgAlt": { + "message": "Illustrazione del menu' di riempimento automatico Bitwarden che mostra una parola d'accesso generata" + }, + "updateInBitwarden": { + "message": "Aggiorna in Bitwarden" + }, + "updateInBitwardenSlideDesc": { + "message": "Bitwarden ti chiederà quindi di aggiornare la parola d'accesso nel gestore di parole d'accesso.", + "description": "Description of the update in Bitwarden slide on the at-risk password page carousel" + }, + "updateInBitwardenSlideImgAlt": { + "message": "Illustrazione di una notifica Bitwarden che richiede all'utente di aggiornare l'accesso" + }, "turnOnAutofill": { "message": "Attiva riempimento automatico" }, @@ -3983,6 +4110,9 @@ "activeAccount": { "message": "Account attivo" }, + "bitwardenAccount": { + "message": "Account Bitwarden" + }, "availableAccounts": { "message": "Account disponibili" }, @@ -4181,6 +4311,20 @@ } } }, + "copyFieldValue": { + "message": "Copia $FIELD$, $VALUE$", + "description": "Title for a button that copies a field value to the clipboard.", + "placeholders": { + "field": { + "content": "$1", + "example": "Username" + }, + "value": { + "content": "$2", + "example": "Foo" + } + } + }, "noValuesToCopy": { "message": "Nessun valore da copiare" }, @@ -5002,5 +5146,8 @@ }, "updateDesktopAppOrDisableFingerprintDialogMessage": { "message": "Per usare lo sblocco biometrico, aggiornare l'applicazione desktop o disabilitare lo sblocco dell'impronta digitale nelle impostazioni del desktop." + }, + "changeAtRiskPassword": { + "message": "Cambia parola d'accesso a rischio" } } diff --git a/apps/browser/src/_locales/ja/messages.json b/apps/browser/src/_locales/ja/messages.json index 2a0c926118a..da2ea1a185e 100644 --- a/apps/browser/src/_locales/ja/messages.json +++ b/apps/browser/src/_locales/ja/messages.json @@ -80,6 +80,15 @@ "masterPassHint": { "message": "マスターパスワードのヒント (省略可能)" }, + "passwordStrengthScore": { + "message": "Password strength score $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "joinOrganization": { "message": "組織に参加" }, @@ -470,22 +479,6 @@ "length": { "message": "長さ" }, - "uppercase": { - "message": "大文字(A-Z)", - "description": "deprecated. Use uppercaseLabel instead." - }, - "lowercase": { - "message": "小文字(a-z)", - "description": "deprecated. Use lowercaseLabel instead." - }, - "numbers": { - "message": "数字 (0~9)", - "description": "deprecated. Use numbersLabel instead." - }, - "specialCharacters": { - "message": "特殊文字(!@#$%^&*)", - "description": "deprecated. Use specialCharactersLabel instead." - }, "include": { "message": "含む文字", "description": "Card header for password generator include block" @@ -518,10 +511,6 @@ "message": "特殊記号を含める", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "numWords": { "message": "単語数" }, @@ -660,8 +649,8 @@ "browserNotSupportClipboard": { "message": "お使いのブラウザはクリップボードへのコピーに対応していません。手動でコピーしてください" }, - "verifyIdentity": { - "message": "本人確認を行う" + "verifyYourIdentity": { + "message": "Verify your identity" }, "weDontRecognizeThisDevice": { "message": "We don't recognize this device. Enter the code sent to your email to verify your identity." @@ -876,6 +865,21 @@ "logInToBitwarden": { "message": "Bitwarden にログイン" }, + "enterTheCodeSentToYourEmail": { + "message": "Enter the code sent to your email" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Enter the code from your authenticator app" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Press your YubiKey to authenticate" + }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Duo two-step login is required for your account. Follow the steps below to finish logging in." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Follow the steps below to finish logging in." + }, "restartRegistration": { "message": "登録を再度始める" }, @@ -897,6 +901,9 @@ "no": { "message": "いいえ" }, + "location": { + "message": "Location" + }, "unexpectedError": { "message": "予期せぬエラーが発生しました。" }, @@ -1046,6 +1053,56 @@ "notificationAddSave": { "message": "保存する" }, + "loginSaveSuccessDetails": { + "message": "$USERNAME$ saved to Bitwarden.", + "placeholders": { + "username": { + "content": "$1" + } + }, + "description": "Shown to user after login is saved." + }, + "loginUpdatedSuccessDetails": { + "message": "$USERNAME$ updated in Bitwarden.", + "placeholders": { + "username": { + "content": "$1" + } + }, + "description": "Shown to user after login is updated." + }, + "saveAsNewLoginAction": { + "message": "Save as new login", + "description": "Button text for saving login details as a new entry." + }, + "updateLoginAction": { + "message": "Update login", + "description": "Button text for updating an existing login entry." + }, + "saveLoginPrompt": { + "message": "Save login?", + "description": "Prompt asking the user if they want to save their login details." + }, + "updateLoginPrompt": { + "message": "Update existing login?", + "description": "Prompt asking the user if they want to update an existing login entry." + }, + "loginSaveSuccess": { + "message": "Login saved", + "description": "Message displayed when login details are successfully saved." + }, + "loginUpdateSuccess": { + "message": "Login updated", + "description": "Message displayed when login details are successfully updated." + }, + "saveFailure": { + "message": "Error saving", + "description": "Error message shown when the system fails to save login details." + }, + "saveFailureDetails": { + "message": "Oh no! We couldn't save this. Try entering the details manually.", + "description": "Detailed error message shown when saving login details fails." + }, "enableChangedPasswordNotification": { "message": "既存のログイン情報の更新を尋ねる" }, @@ -1365,12 +1422,22 @@ "rememberMe": { "message": "情報を保存する" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Don't ask again on this device for 30 days" + }, "sendVerificationCodeEmailAgain": { "message": "確認コードをメールで再送" }, "useAnotherTwoStepMethod": { "message": "他の2段階認証方法を使用" }, + "selectAnotherMethod": { + "message": "Select another method", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Use your recovery code" + }, "insertYubiKey": { "message": " YubiKey を USB ポートに挿入し、ボタンをタッチしてください。" }, @@ -1383,9 +1450,18 @@ "webAuthnNewTabOpen": { "message": "新しいタブを開く" }, + "openInNewTab": { + "message": "Open in new tab" + }, "webAuthnAuthenticate": { "message": "WebAuthn の認証" }, + "readSecurityKey": { + "message": "Read security key" + }, + "awaitingSecurityKeyInteraction": { + "message": "Awaiting security key interaction..." + }, "loginUnavailable": { "message": "ログインできません。" }, @@ -1398,6 +1474,9 @@ "twoStepOptions": { "message": "2段階認証オプション" }, + "selectTwoStepLoginMethod": { + "message": "Select two-step login method" + }, "recoveryCodeDesc": { "message": "すべての2段階認証プロパイダにアクセスできなくなったときは、リカバリーコードを使用するとアカウントの2段階認証を無効化できます。" }, @@ -2097,6 +2176,15 @@ "vaultTimeoutAction1": { "message": "タイムアウト時のアクション" }, + "newCustomizationOptionsCalloutTitle": { + "message": "New customization options" + }, + "newCustomizationOptionsCalloutContent": { + "message": "Customize your vault experience with quick copy actions, compact mode, and more!" + }, + "newCustomizationOptionsCalloutLink": { + "message": "View all Appearance settings" + }, "lock": { "message": "ロック", "description": "Verb form: to make secure or inaccessible by" @@ -2391,8 +2479,17 @@ "atRiskPasswords": { "message": "At-risk passwords" }, - "atRiskPasswordsDescSingleOrg": { - "message": "$ORGANIZATION$ is requesting you change the $COUNT$ passwords because they are at risk.", + "atRiskPasswordDescSingleOrg": { + "message": "$ORGANIZATION$ is requesting you change one password because it is at-risk.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + } + }, + "atRiskPasswordsDescSingleOrgPlural": { + "message": "$ORGANIZATION$ is requesting you change the $COUNT$ passwords because they are at-risk.", "placeholders": { "organization": { "content": "$1", @@ -2404,8 +2501,8 @@ } } }, - "atRiskPasswordsDescMultiOrg": { - "message": "Your organizations are requesting you change the $COUNT$ passwords because they are at risk.", + "atRiskPasswordsDescMultiOrgPlural": { + "message": "Your organizations are requesting you change the $COUNT$ passwords because they are at-risk.", "placeholders": { "count": { "content": "$1", @@ -2431,6 +2528,36 @@ "changeAtRiskPasswordsFasterDesc": { "message": "Update your settings so you can quickly autofill your passwords and generate new ones" }, + "reviewAtRiskLogins": { + "message": "Review at-risk logins" + }, + "reviewAtRiskPasswords": { + "message": "Review at-risk passwords" + }, + "reviewAtRiskLoginsSlideDesc": { + "message": "Your organization passwords are at-risk because they are weak, reused, and/or exposed.", + "description": "Description of the review at-risk login slide on the at-risk password page carousel" + }, + "reviewAtRiskLoginSlideImgAlt": { + "message": "Illustration of a list of logins that are at-risk" + }, + "generatePasswordSlideDesc": { + "message": "Quickly generate a strong, unique password with the Bitwarden autofill menu on the at-risk site.", + "description": "Description of the generate password slide on the at-risk password page carousel" + }, + "generatePasswordSlideImgAlt": { + "message": "Illustration of the Bitwarden autofill menu displaying a generated password" + }, + "updateInBitwarden": { + "message": "Update in Bitwarden" + }, + "updateInBitwardenSlideDesc": { + "message": "Bitwarden will then prompt you to update the password in the password manager.", + "description": "Description of the update in Bitwarden slide on the at-risk password page carousel" + }, + "updateInBitwardenSlideImgAlt": { + "message": "Illustration of a Bitwarden’s notification prompting the user to update the login" + }, "turnOnAutofill": { "message": "Turn on autofill" }, @@ -3983,6 +4110,9 @@ "activeAccount": { "message": "アクティブなアカウント" }, + "bitwardenAccount": { + "message": "Bitwarden account" + }, "availableAccounts": { "message": "利用可能なアカウント" }, @@ -4181,6 +4311,20 @@ } } }, + "copyFieldValue": { + "message": "Copy $FIELD$, $VALUE$", + "description": "Title for a button that copies a field value to the clipboard.", + "placeholders": { + "field": { + "content": "$1", + "example": "Username" + }, + "value": { + "content": "$2", + "example": "Foo" + } + } + }, "noValuesToCopy": { "message": "コピーする値がありません" }, @@ -5002,5 +5146,8 @@ }, "updateDesktopAppOrDisableFingerprintDialogMessage": { "message": "To use biometric unlock, please update your desktop application, or disable fingerprint unlock in the desktop settings." + }, + "changeAtRiskPassword": { + "message": "Change at-risk password" } } diff --git a/apps/browser/src/_locales/ka/messages.json b/apps/browser/src/_locales/ka/messages.json index 92f0d2c5416..f07609677cd 100644 --- a/apps/browser/src/_locales/ka/messages.json +++ b/apps/browser/src/_locales/ka/messages.json @@ -80,6 +80,15 @@ "masterPassHint": { "message": "Master password hint (optional)" }, + "passwordStrengthScore": { + "message": "Password strength score $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "joinOrganization": { "message": "Join organization" }, @@ -470,22 +479,6 @@ "length": { "message": "სიგრძე" }, - "uppercase": { - "message": "Uppercase (A-Z)", - "description": "deprecated. Use uppercaseLabel instead." - }, - "lowercase": { - "message": "Lowercase (a-z)", - "description": "deprecated. Use lowercaseLabel instead." - }, - "numbers": { - "message": "Numbers (0-9)", - "description": "deprecated. Use numbersLabel instead." - }, - "specialCharacters": { - "message": "Special characters (!@#$%^&*)", - "description": "deprecated. Use specialCharactersLabel instead." - }, "include": { "message": "ჩართვა", "description": "Card header for password generator include block" @@ -518,10 +511,6 @@ "message": "Include special characters", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "numWords": { "message": "სიტყვათა რაოდენობა" }, @@ -660,8 +649,8 @@ "browserNotSupportClipboard": { "message": "Your web browser does not support easy clipboard copying. Copy it manually instead." }, - "verifyIdentity": { - "message": "Verify identity" + "verifyYourIdentity": { + "message": "Verify your identity" }, "weDontRecognizeThisDevice": { "message": "We don't recognize this device. Enter the code sent to your email to verify your identity." @@ -876,6 +865,21 @@ "logInToBitwarden": { "message": "Log in to Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "Enter the code sent to your email" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Enter the code from your authenticator app" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Press your YubiKey to authenticate" + }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Duo two-step login is required for your account. Follow the steps below to finish logging in." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Follow the steps below to finish logging in." + }, "restartRegistration": { "message": "Restart registration" }, @@ -897,6 +901,9 @@ "no": { "message": "არა" }, + "location": { + "message": "Location" + }, "unexpectedError": { "message": "An unexpected error has occurred." }, @@ -1046,6 +1053,56 @@ "notificationAddSave": { "message": "შენახვა" }, + "loginSaveSuccessDetails": { + "message": "$USERNAME$ saved to Bitwarden.", + "placeholders": { + "username": { + "content": "$1" + } + }, + "description": "Shown to user after login is saved." + }, + "loginUpdatedSuccessDetails": { + "message": "$USERNAME$ updated in Bitwarden.", + "placeholders": { + "username": { + "content": "$1" + } + }, + "description": "Shown to user after login is updated." + }, + "saveAsNewLoginAction": { + "message": "Save as new login", + "description": "Button text for saving login details as a new entry." + }, + "updateLoginAction": { + "message": "Update login", + "description": "Button text for updating an existing login entry." + }, + "saveLoginPrompt": { + "message": "Save login?", + "description": "Prompt asking the user if they want to save their login details." + }, + "updateLoginPrompt": { + "message": "Update existing login?", + "description": "Prompt asking the user if they want to update an existing login entry." + }, + "loginSaveSuccess": { + "message": "Login saved", + "description": "Message displayed when login details are successfully saved." + }, + "loginUpdateSuccess": { + "message": "Login updated", + "description": "Message displayed when login details are successfully updated." + }, + "saveFailure": { + "message": "Error saving", + "description": "Error message shown when the system fails to save login details." + }, + "saveFailureDetails": { + "message": "Oh no! We couldn't save this. Try entering the details manually.", + "description": "Detailed error message shown when saving login details fails." + }, "enableChangedPasswordNotification": { "message": "Ask to update existing login" }, @@ -1365,12 +1422,22 @@ "rememberMe": { "message": "დამიმახსოვრე" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Don't ask again on this device for 30 days" + }, "sendVerificationCodeEmailAgain": { "message": "Send verification code email again" }, "useAnotherTwoStepMethod": { "message": "Use another two-step login method" }, + "selectAnotherMethod": { + "message": "Select another method", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Use your recovery code" + }, "insertYubiKey": { "message": "Insert your YubiKey into your computer's USB port, then touch its button." }, @@ -1383,9 +1450,18 @@ "webAuthnNewTabOpen": { "message": "ახალი ჩანართის გახსნა" }, + "openInNewTab": { + "message": "Open in new tab" + }, "webAuthnAuthenticate": { "message": "Authenticate WebAuthn" }, + "readSecurityKey": { + "message": "Read security key" + }, + "awaitingSecurityKeyInteraction": { + "message": "Awaiting security key interaction..." + }, "loginUnavailable": { "message": "Login unavailable" }, @@ -1398,6 +1474,9 @@ "twoStepOptions": { "message": "Two-step login options" }, + "selectTwoStepLoginMethod": { + "message": "Select two-step login method" + }, "recoveryCodeDesc": { "message": "Lost access to all of your two-factor providers? Use your recovery code to turn off all two-factor providers from your account." }, @@ -2097,6 +2176,15 @@ "vaultTimeoutAction1": { "message": "Timeout action" }, + "newCustomizationOptionsCalloutTitle": { + "message": "New customization options" + }, + "newCustomizationOptionsCalloutContent": { + "message": "Customize your vault experience with quick copy actions, compact mode, and more!" + }, + "newCustomizationOptionsCalloutLink": { + "message": "View all Appearance settings" + }, "lock": { "message": "ჩაკეტვა", "description": "Verb form: to make secure or inaccessible by" @@ -2391,8 +2479,17 @@ "atRiskPasswords": { "message": "At-risk passwords" }, - "atRiskPasswordsDescSingleOrg": { - "message": "$ORGANIZATION$ is requesting you change the $COUNT$ passwords because they are at risk.", + "atRiskPasswordDescSingleOrg": { + "message": "$ORGANIZATION$ is requesting you change one password because it is at-risk.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + } + }, + "atRiskPasswordsDescSingleOrgPlural": { + "message": "$ORGANIZATION$ is requesting you change the $COUNT$ passwords because they are at-risk.", "placeholders": { "organization": { "content": "$1", @@ -2404,8 +2501,8 @@ } } }, - "atRiskPasswordsDescMultiOrg": { - "message": "Your organizations are requesting you change the $COUNT$ passwords because they are at risk.", + "atRiskPasswordsDescMultiOrgPlural": { + "message": "Your organizations are requesting you change the $COUNT$ passwords because they are at-risk.", "placeholders": { "count": { "content": "$1", @@ -2431,6 +2528,36 @@ "changeAtRiskPasswordsFasterDesc": { "message": "Update your settings so you can quickly autofill your passwords and generate new ones" }, + "reviewAtRiskLogins": { + "message": "Review at-risk logins" + }, + "reviewAtRiskPasswords": { + "message": "Review at-risk passwords" + }, + "reviewAtRiskLoginsSlideDesc": { + "message": "Your organization passwords are at-risk because they are weak, reused, and/or exposed.", + "description": "Description of the review at-risk login slide on the at-risk password page carousel" + }, + "reviewAtRiskLoginSlideImgAlt": { + "message": "Illustration of a list of logins that are at-risk" + }, + "generatePasswordSlideDesc": { + "message": "Quickly generate a strong, unique password with the Bitwarden autofill menu on the at-risk site.", + "description": "Description of the generate password slide on the at-risk password page carousel" + }, + "generatePasswordSlideImgAlt": { + "message": "Illustration of the Bitwarden autofill menu displaying a generated password" + }, + "updateInBitwarden": { + "message": "Update in Bitwarden" + }, + "updateInBitwardenSlideDesc": { + "message": "Bitwarden will then prompt you to update the password in the password manager.", + "description": "Description of the update in Bitwarden slide on the at-risk password page carousel" + }, + "updateInBitwardenSlideImgAlt": { + "message": "Illustration of a Bitwarden’s notification prompting the user to update the login" + }, "turnOnAutofill": { "message": "Turn on autofill" }, @@ -3983,6 +4110,9 @@ "activeAccount": { "message": "Active account" }, + "bitwardenAccount": { + "message": "Bitwarden account" + }, "availableAccounts": { "message": "Available accounts" }, @@ -4181,6 +4311,20 @@ } } }, + "copyFieldValue": { + "message": "Copy $FIELD$, $VALUE$", + "description": "Title for a button that copies a field value to the clipboard.", + "placeholders": { + "field": { + "content": "$1", + "example": "Username" + }, + "value": { + "content": "$2", + "example": "Foo" + } + } + }, "noValuesToCopy": { "message": "No values to copy" }, @@ -5002,5 +5146,8 @@ }, "updateDesktopAppOrDisableFingerprintDialogMessage": { "message": "To use biometric unlock, please update your desktop application, or disable fingerprint unlock in the desktop settings." + }, + "changeAtRiskPassword": { + "message": "Change at-risk password" } } diff --git a/apps/browser/src/_locales/km/messages.json b/apps/browser/src/_locales/km/messages.json index 9fe497bc1c7..dd0bf23c799 100644 --- a/apps/browser/src/_locales/km/messages.json +++ b/apps/browser/src/_locales/km/messages.json @@ -80,6 +80,15 @@ "masterPassHint": { "message": "Master password hint (optional)" }, + "passwordStrengthScore": { + "message": "Password strength score $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "joinOrganization": { "message": "Join organization" }, @@ -470,22 +479,6 @@ "length": { "message": "Length" }, - "uppercase": { - "message": "Uppercase (A-Z)", - "description": "deprecated. Use uppercaseLabel instead." - }, - "lowercase": { - "message": "Lowercase (a-z)", - "description": "deprecated. Use lowercaseLabel instead." - }, - "numbers": { - "message": "Numbers (0-9)", - "description": "deprecated. Use numbersLabel instead." - }, - "specialCharacters": { - "message": "Special characters (!@#$%^&*)", - "description": "deprecated. Use specialCharactersLabel instead." - }, "include": { "message": "Include", "description": "Card header for password generator include block" @@ -518,10 +511,6 @@ "message": "Include special characters", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "numWords": { "message": "Number of words" }, @@ -660,8 +649,8 @@ "browserNotSupportClipboard": { "message": "Your web browser does not support easy clipboard copying. Copy it manually instead." }, - "verifyIdentity": { - "message": "Verify identity" + "verifyYourIdentity": { + "message": "Verify your identity" }, "weDontRecognizeThisDevice": { "message": "We don't recognize this device. Enter the code sent to your email to verify your identity." @@ -876,6 +865,21 @@ "logInToBitwarden": { "message": "Log in to Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "Enter the code sent to your email" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Enter the code from your authenticator app" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Press your YubiKey to authenticate" + }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Duo two-step login is required for your account. Follow the steps below to finish logging in." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Follow the steps below to finish logging in." + }, "restartRegistration": { "message": "Restart registration" }, @@ -897,6 +901,9 @@ "no": { "message": "No" }, + "location": { + "message": "Location" + }, "unexpectedError": { "message": "An unexpected error has occurred." }, @@ -1046,6 +1053,56 @@ "notificationAddSave": { "message": "Save" }, + "loginSaveSuccessDetails": { + "message": "$USERNAME$ saved to Bitwarden.", + "placeholders": { + "username": { + "content": "$1" + } + }, + "description": "Shown to user after login is saved." + }, + "loginUpdatedSuccessDetails": { + "message": "$USERNAME$ updated in Bitwarden.", + "placeholders": { + "username": { + "content": "$1" + } + }, + "description": "Shown to user after login is updated." + }, + "saveAsNewLoginAction": { + "message": "Save as new login", + "description": "Button text for saving login details as a new entry." + }, + "updateLoginAction": { + "message": "Update login", + "description": "Button text for updating an existing login entry." + }, + "saveLoginPrompt": { + "message": "Save login?", + "description": "Prompt asking the user if they want to save their login details." + }, + "updateLoginPrompt": { + "message": "Update existing login?", + "description": "Prompt asking the user if they want to update an existing login entry." + }, + "loginSaveSuccess": { + "message": "Login saved", + "description": "Message displayed when login details are successfully saved." + }, + "loginUpdateSuccess": { + "message": "Login updated", + "description": "Message displayed when login details are successfully updated." + }, + "saveFailure": { + "message": "Error saving", + "description": "Error message shown when the system fails to save login details." + }, + "saveFailureDetails": { + "message": "Oh no! We couldn't save this. Try entering the details manually.", + "description": "Detailed error message shown when saving login details fails." + }, "enableChangedPasswordNotification": { "message": "Ask to update existing login" }, @@ -1365,12 +1422,22 @@ "rememberMe": { "message": "Remember me" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Don't ask again on this device for 30 days" + }, "sendVerificationCodeEmailAgain": { "message": "Send verification code email again" }, "useAnotherTwoStepMethod": { "message": "Use another two-step login method" }, + "selectAnotherMethod": { + "message": "Select another method", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Use your recovery code" + }, "insertYubiKey": { "message": "Insert your YubiKey into your computer's USB port, then touch its button." }, @@ -1383,9 +1450,18 @@ "webAuthnNewTabOpen": { "message": "Open new tab" }, + "openInNewTab": { + "message": "Open in new tab" + }, "webAuthnAuthenticate": { "message": "Authenticate WebAuthn" }, + "readSecurityKey": { + "message": "Read security key" + }, + "awaitingSecurityKeyInteraction": { + "message": "Awaiting security key interaction..." + }, "loginUnavailable": { "message": "Login unavailable" }, @@ -1398,6 +1474,9 @@ "twoStepOptions": { "message": "Two-step login options" }, + "selectTwoStepLoginMethod": { + "message": "Select two-step login method" + }, "recoveryCodeDesc": { "message": "Lost access to all of your two-factor providers? Use your recovery code to turn off all two-factor providers from your account." }, @@ -2097,6 +2176,15 @@ "vaultTimeoutAction1": { "message": "Timeout action" }, + "newCustomizationOptionsCalloutTitle": { + "message": "New customization options" + }, + "newCustomizationOptionsCalloutContent": { + "message": "Customize your vault experience with quick copy actions, compact mode, and more!" + }, + "newCustomizationOptionsCalloutLink": { + "message": "View all Appearance settings" + }, "lock": { "message": "Lock", "description": "Verb form: to make secure or inaccessible by" @@ -2391,8 +2479,17 @@ "atRiskPasswords": { "message": "At-risk passwords" }, - "atRiskPasswordsDescSingleOrg": { - "message": "$ORGANIZATION$ is requesting you change the $COUNT$ passwords because they are at risk.", + "atRiskPasswordDescSingleOrg": { + "message": "$ORGANIZATION$ is requesting you change one password because it is at-risk.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + } + }, + "atRiskPasswordsDescSingleOrgPlural": { + "message": "$ORGANIZATION$ is requesting you change the $COUNT$ passwords because they are at-risk.", "placeholders": { "organization": { "content": "$1", @@ -2404,8 +2501,8 @@ } } }, - "atRiskPasswordsDescMultiOrg": { - "message": "Your organizations are requesting you change the $COUNT$ passwords because they are at risk.", + "atRiskPasswordsDescMultiOrgPlural": { + "message": "Your organizations are requesting you change the $COUNT$ passwords because they are at-risk.", "placeholders": { "count": { "content": "$1", @@ -2431,6 +2528,36 @@ "changeAtRiskPasswordsFasterDesc": { "message": "Update your settings so you can quickly autofill your passwords and generate new ones" }, + "reviewAtRiskLogins": { + "message": "Review at-risk logins" + }, + "reviewAtRiskPasswords": { + "message": "Review at-risk passwords" + }, + "reviewAtRiskLoginsSlideDesc": { + "message": "Your organization passwords are at-risk because they are weak, reused, and/or exposed.", + "description": "Description of the review at-risk login slide on the at-risk password page carousel" + }, + "reviewAtRiskLoginSlideImgAlt": { + "message": "Illustration of a list of logins that are at-risk" + }, + "generatePasswordSlideDesc": { + "message": "Quickly generate a strong, unique password with the Bitwarden autofill menu on the at-risk site.", + "description": "Description of the generate password slide on the at-risk password page carousel" + }, + "generatePasswordSlideImgAlt": { + "message": "Illustration of the Bitwarden autofill menu displaying a generated password" + }, + "updateInBitwarden": { + "message": "Update in Bitwarden" + }, + "updateInBitwardenSlideDesc": { + "message": "Bitwarden will then prompt you to update the password in the password manager.", + "description": "Description of the update in Bitwarden slide on the at-risk password page carousel" + }, + "updateInBitwardenSlideImgAlt": { + "message": "Illustration of a Bitwarden’s notification prompting the user to update the login" + }, "turnOnAutofill": { "message": "Turn on autofill" }, @@ -3983,6 +4110,9 @@ "activeAccount": { "message": "Active account" }, + "bitwardenAccount": { + "message": "Bitwarden account" + }, "availableAccounts": { "message": "Available accounts" }, @@ -4181,6 +4311,20 @@ } } }, + "copyFieldValue": { + "message": "Copy $FIELD$, $VALUE$", + "description": "Title for a button that copies a field value to the clipboard.", + "placeholders": { + "field": { + "content": "$1", + "example": "Username" + }, + "value": { + "content": "$2", + "example": "Foo" + } + } + }, "noValuesToCopy": { "message": "No values to copy" }, @@ -5002,5 +5146,8 @@ }, "updateDesktopAppOrDisableFingerprintDialogMessage": { "message": "To use biometric unlock, please update your desktop application, or disable fingerprint unlock in the desktop settings." + }, + "changeAtRiskPassword": { + "message": "Change at-risk password" } } diff --git a/apps/browser/src/_locales/kn/messages.json b/apps/browser/src/_locales/kn/messages.json index af436923b14..8ed5d9e2254 100644 --- a/apps/browser/src/_locales/kn/messages.json +++ b/apps/browser/src/_locales/kn/messages.json @@ -80,6 +80,15 @@ "masterPassHint": { "message": "ಮಾಸ್ಟರ್ ಪಾಸ್ವರ್ಡ್ ಸುಳಿವು (ಐಚ್ಛಿಕ)" }, + "passwordStrengthScore": { + "message": "Password strength score $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "joinOrganization": { "message": "Join organization" }, @@ -470,22 +479,6 @@ "length": { "message": "ಉದ್ದ" }, - "uppercase": { - "message": "Uppercase (A-Z)", - "description": "deprecated. Use uppercaseLabel instead." - }, - "lowercase": { - "message": "Lowercase (a-z)", - "description": "deprecated. Use lowercaseLabel instead." - }, - "numbers": { - "message": "Numbers (0-9)", - "description": "deprecated. Use numbersLabel instead." - }, - "specialCharacters": { - "message": "Special characters (!@#$%^&*)", - "description": "deprecated. Use specialCharactersLabel instead." - }, "include": { "message": "Include", "description": "Card header for password generator include block" @@ -518,10 +511,6 @@ "message": "Include special characters", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "numWords": { "message": "ಪದಗಳ ಸಂಖ್ಯೆ" }, @@ -660,8 +649,8 @@ "browserNotSupportClipboard": { "message": "ನಿಮ್ಮ ವೆಬ್ ಬ್ರೌಸರ್ ಸುಲಭವಾದ ಕ್ಲಿಪ್‌ಬೋರ್ಡ್ ನಕಲು ಮಾಡುವುದನ್ನು ಬೆಂಬಲಿಸುವುದಿಲ್ಲ. ಬದಲಿಗೆ ಅದನ್ನು ಹಸ್ತಚಾಲಿತವಾಗಿ ನಕಲಿಸಿ." }, - "verifyIdentity": { - "message": "Verify identity" + "verifyYourIdentity": { + "message": "Verify your identity" }, "weDontRecognizeThisDevice": { "message": "We don't recognize this device. Enter the code sent to your email to verify your identity." @@ -876,6 +865,21 @@ "logInToBitwarden": { "message": "Log in to Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "Enter the code sent to your email" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Enter the code from your authenticator app" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Press your YubiKey to authenticate" + }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Duo two-step login is required for your account. Follow the steps below to finish logging in." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Follow the steps below to finish logging in." + }, "restartRegistration": { "message": "Restart registration" }, @@ -897,6 +901,9 @@ "no": { "message": "ಇಲ್ಲ" }, + "location": { + "message": "Location" + }, "unexpectedError": { "message": "ಅನಿರೀಕ್ಷಿತ ದೋಷ ಸಂಭವಿಸಿದೆ." }, @@ -1046,6 +1053,56 @@ "notificationAddSave": { "message": "ಹೌದು, ಈಗ ಉಳಿಸಿ" }, + "loginSaveSuccessDetails": { + "message": "$USERNAME$ saved to Bitwarden.", + "placeholders": { + "username": { + "content": "$1" + } + }, + "description": "Shown to user after login is saved." + }, + "loginUpdatedSuccessDetails": { + "message": "$USERNAME$ updated in Bitwarden.", + "placeholders": { + "username": { + "content": "$1" + } + }, + "description": "Shown to user after login is updated." + }, + "saveAsNewLoginAction": { + "message": "Save as new login", + "description": "Button text for saving login details as a new entry." + }, + "updateLoginAction": { + "message": "Update login", + "description": "Button text for updating an existing login entry." + }, + "saveLoginPrompt": { + "message": "Save login?", + "description": "Prompt asking the user if they want to save their login details." + }, + "updateLoginPrompt": { + "message": "Update existing login?", + "description": "Prompt asking the user if they want to update an existing login entry." + }, + "loginSaveSuccess": { + "message": "Login saved", + "description": "Message displayed when login details are successfully saved." + }, + "loginUpdateSuccess": { + "message": "Login updated", + "description": "Message displayed when login details are successfully updated." + }, + "saveFailure": { + "message": "Error saving", + "description": "Error message shown when the system fails to save login details." + }, + "saveFailureDetails": { + "message": "Oh no! We couldn't save this. Try entering the details manually.", + "description": "Detailed error message shown when saving login details fails." + }, "enableChangedPasswordNotification": { "message": "Ask to update existing login" }, @@ -1365,12 +1422,22 @@ "rememberMe": { "message": "ನನ್ನನ್ನು ನೆನಪಿನಲ್ಲಿ ಇಡು" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Don't ask again on this device for 30 days" + }, "sendVerificationCodeEmailAgain": { "message": "ಪರಿಶೀಲನೆ ಕೋಡ್ ಇಮೇಲ್ ಅನ್ನು ಮತ್ತೆ ಕಳುಹಿಸಿ" }, "useAnotherTwoStepMethod": { "message": "ಮತ್ತೊಂದು ಎರಡು-ಹಂತದ ಲಾಗಿನ್ ವಿಧಾನವನ್ನು ಬಳಸಿ" }, + "selectAnotherMethod": { + "message": "Select another method", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Use your recovery code" + }, "insertYubiKey": { "message": "ನಿಮ್ಮ ಯುಬಿಕಿಯನ್ನು ನಿಮ್ಮ ಕಂಪ್ಯೂಟರ್‌ನ ಯುಎಸ್‌ಬಿ ಪೋರ್ಟ್ಗೆ ಸೇರಿಸಿ, ನಂತರ ಅದರ ಗುಂಡಿಯನ್ನು ಸ್ಪರ್ಶಿಸಿ." }, @@ -1383,9 +1450,18 @@ "webAuthnNewTabOpen": { "message": "ಹೊಸ ಟ್ಯಾಬ್ ತೆರೆಯಿರಿ" }, + "openInNewTab": { + "message": "Open in new tab" + }, "webAuthnAuthenticate": { "message": "WebAuthn ಅನ್ನು ಪ್ರಮಾಣಿಕರಿಸು" }, + "readSecurityKey": { + "message": "Read security key" + }, + "awaitingSecurityKeyInteraction": { + "message": "Awaiting security key interaction..." + }, "loginUnavailable": { "message": "ಲಾಗಿನ್ ಲಭ್ಯವಿಲ್ಲ" }, @@ -1398,6 +1474,9 @@ "twoStepOptions": { "message": "ಎರಡು ಹಂತದ ಲಾಗಿನ್ ಆಯ್ಕೆಗಳು" }, + "selectTwoStepLoginMethod": { + "message": "Select two-step login method" + }, "recoveryCodeDesc": { "message": "ನಿಮ್ಮ ಎಲ್ಲಾ ಎರಡು ಅಂಶ ಪೂರೈಕೆದಾರರಿಗೆ ಪ್ರವೇಶವನ್ನು ಕಳೆದುಕೊಂಡಿದ್ದೀರಾ? ನಿಮ್ಮ ಖಾತೆಯಿಂದ ಎಲ್ಲಾ ಎರಡು ಅಂಶ ಪೂರೈಕೆದಾರರನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲು ನಿಮ್ಮ ಮರುಪಡೆಯುವಿಕೆ ಕೋಡ್ ಬಳಸಿ." }, @@ -2097,6 +2176,15 @@ "vaultTimeoutAction1": { "message": "Timeout action" }, + "newCustomizationOptionsCalloutTitle": { + "message": "New customization options" + }, + "newCustomizationOptionsCalloutContent": { + "message": "Customize your vault experience with quick copy actions, compact mode, and more!" + }, + "newCustomizationOptionsCalloutLink": { + "message": "View all Appearance settings" + }, "lock": { "message": "ಲಾಕ್‌", "description": "Verb form: to make secure or inaccessible by" @@ -2391,8 +2479,17 @@ "atRiskPasswords": { "message": "At-risk passwords" }, - "atRiskPasswordsDescSingleOrg": { - "message": "$ORGANIZATION$ is requesting you change the $COUNT$ passwords because they are at risk.", + "atRiskPasswordDescSingleOrg": { + "message": "$ORGANIZATION$ is requesting you change one password because it is at-risk.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + } + }, + "atRiskPasswordsDescSingleOrgPlural": { + "message": "$ORGANIZATION$ is requesting you change the $COUNT$ passwords because they are at-risk.", "placeholders": { "organization": { "content": "$1", @@ -2404,8 +2501,8 @@ } } }, - "atRiskPasswordsDescMultiOrg": { - "message": "Your organizations are requesting you change the $COUNT$ passwords because they are at risk.", + "atRiskPasswordsDescMultiOrgPlural": { + "message": "Your organizations are requesting you change the $COUNT$ passwords because they are at-risk.", "placeholders": { "count": { "content": "$1", @@ -2431,6 +2528,36 @@ "changeAtRiskPasswordsFasterDesc": { "message": "Update your settings so you can quickly autofill your passwords and generate new ones" }, + "reviewAtRiskLogins": { + "message": "Review at-risk logins" + }, + "reviewAtRiskPasswords": { + "message": "Review at-risk passwords" + }, + "reviewAtRiskLoginsSlideDesc": { + "message": "Your organization passwords are at-risk because they are weak, reused, and/or exposed.", + "description": "Description of the review at-risk login slide on the at-risk password page carousel" + }, + "reviewAtRiskLoginSlideImgAlt": { + "message": "Illustration of a list of logins that are at-risk" + }, + "generatePasswordSlideDesc": { + "message": "Quickly generate a strong, unique password with the Bitwarden autofill menu on the at-risk site.", + "description": "Description of the generate password slide on the at-risk password page carousel" + }, + "generatePasswordSlideImgAlt": { + "message": "Illustration of the Bitwarden autofill menu displaying a generated password" + }, + "updateInBitwarden": { + "message": "Update in Bitwarden" + }, + "updateInBitwardenSlideDesc": { + "message": "Bitwarden will then prompt you to update the password in the password manager.", + "description": "Description of the update in Bitwarden slide on the at-risk password page carousel" + }, + "updateInBitwardenSlideImgAlt": { + "message": "Illustration of a Bitwarden’s notification prompting the user to update the login" + }, "turnOnAutofill": { "message": "Turn on autofill" }, @@ -3983,6 +4110,9 @@ "activeAccount": { "message": "Active account" }, + "bitwardenAccount": { + "message": "Bitwarden account" + }, "availableAccounts": { "message": "Available accounts" }, @@ -4181,6 +4311,20 @@ } } }, + "copyFieldValue": { + "message": "Copy $FIELD$, $VALUE$", + "description": "Title for a button that copies a field value to the clipboard.", + "placeholders": { + "field": { + "content": "$1", + "example": "Username" + }, + "value": { + "content": "$2", + "example": "Foo" + } + } + }, "noValuesToCopy": { "message": "No values to copy" }, @@ -5002,5 +5146,8 @@ }, "updateDesktopAppOrDisableFingerprintDialogMessage": { "message": "To use biometric unlock, please update your desktop application, or disable fingerprint unlock in the desktop settings." + }, + "changeAtRiskPassword": { + "message": "Change at-risk password" } } diff --git a/apps/browser/src/_locales/ko/messages.json b/apps/browser/src/_locales/ko/messages.json index 7c484651f5a..63db503c785 100644 --- a/apps/browser/src/_locales/ko/messages.json +++ b/apps/browser/src/_locales/ko/messages.json @@ -80,6 +80,15 @@ "masterPassHint": { "message": "마스터 비밀번호 힌트 (선택)" }, + "passwordStrengthScore": { + "message": "Password strength score $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "joinOrganization": { "message": "\"조직\"에 가입하기" }, @@ -470,22 +479,6 @@ "length": { "message": "길이" }, - "uppercase": { - "message": "대문자 (A-Z)", - "description": "deprecated. Use uppercaseLabel instead." - }, - "lowercase": { - "message": "소문자 (a-z)", - "description": "deprecated. Use lowercaseLabel instead." - }, - "numbers": { - "message": "숫자 (0-9)", - "description": "deprecated. Use numbersLabel instead." - }, - "specialCharacters": { - "message": "특수 문자 (!@#$%^&*)", - "description": "deprecated. Use specialCharactersLabel instead." - }, "include": { "message": "포함", "description": "Card header for password generator include block" @@ -518,10 +511,6 @@ "message": "특수 문자 포함", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "numWords": { "message": "단어 수" }, @@ -660,8 +649,8 @@ "browserNotSupportClipboard": { "message": "사용하고 있는 웹 브라우저가 쉬운 클립보드 복사를 지원하지 않습니다. 직접 복사하세요." }, - "verifyIdentity": { - "message": "신원 확인" + "verifyYourIdentity": { + "message": "Verify your identity" }, "weDontRecognizeThisDevice": { "message": "We don't recognize this device. Enter the code sent to your email to verify your identity." @@ -876,6 +865,21 @@ "logInToBitwarden": { "message": "Bitwarden에 로그인" }, + "enterTheCodeSentToYourEmail": { + "message": "Enter the code sent to your email" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Enter the code from your authenticator app" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Press your YubiKey to authenticate" + }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Duo two-step login is required for your account. Follow the steps below to finish logging in." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Follow the steps below to finish logging in." + }, "restartRegistration": { "message": "등록 재시작" }, @@ -897,6 +901,9 @@ "no": { "message": "아니오" }, + "location": { + "message": "Location" + }, "unexpectedError": { "message": "예기치 못한 오류가 발생했습니다." }, @@ -1046,6 +1053,56 @@ "notificationAddSave": { "message": "예, 지금 저장하겠습니다." }, + "loginSaveSuccessDetails": { + "message": "$USERNAME$ saved to Bitwarden.", + "placeholders": { + "username": { + "content": "$1" + } + }, + "description": "Shown to user after login is saved." + }, + "loginUpdatedSuccessDetails": { + "message": "$USERNAME$ updated in Bitwarden.", + "placeholders": { + "username": { + "content": "$1" + } + }, + "description": "Shown to user after login is updated." + }, + "saveAsNewLoginAction": { + "message": "Save as new login", + "description": "Button text for saving login details as a new entry." + }, + "updateLoginAction": { + "message": "Update login", + "description": "Button text for updating an existing login entry." + }, + "saveLoginPrompt": { + "message": "Save login?", + "description": "Prompt asking the user if they want to save their login details." + }, + "updateLoginPrompt": { + "message": "Update existing login?", + "description": "Prompt asking the user if they want to update an existing login entry." + }, + "loginSaveSuccess": { + "message": "Login saved", + "description": "Message displayed when login details are successfully saved." + }, + "loginUpdateSuccess": { + "message": "Login updated", + "description": "Message displayed when login details are successfully updated." + }, + "saveFailure": { + "message": "Error saving", + "description": "Error message shown when the system fails to save login details." + }, + "saveFailureDetails": { + "message": "Oh no! We couldn't save this. Try entering the details manually.", + "description": "Detailed error message shown when saving login details fails." + }, "enableChangedPasswordNotification": { "message": "현재 로그인으로 업데이트할 건지 묻기" }, @@ -1365,12 +1422,22 @@ "rememberMe": { "message": "기억하기" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Don't ask again on this device for 30 days" + }, "sendVerificationCodeEmailAgain": { "message": "인증 코드 이메일 다시 보내기" }, "useAnotherTwoStepMethod": { "message": "다른 2단계 인증 사용" }, + "selectAnotherMethod": { + "message": "Select another method", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Use your recovery code" + }, "insertYubiKey": { "message": "YubiKey를 컴퓨터의 USB 포트에 삽입하고 이 버튼을 누르세요." }, @@ -1383,9 +1450,18 @@ "webAuthnNewTabOpen": { "message": "새 탭 열기" }, + "openInNewTab": { + "message": "Open in new tab" + }, "webAuthnAuthenticate": { "message": "WebAuthn 인증" }, + "readSecurityKey": { + "message": "Read security key" + }, + "awaitingSecurityKeyInteraction": { + "message": "Awaiting security key interaction..." + }, "loginUnavailable": { "message": "로그인 불가능" }, @@ -1398,6 +1474,9 @@ "twoStepOptions": { "message": "2단계 인증 옵션" }, + "selectTwoStepLoginMethod": { + "message": "Select two-step login method" + }, "recoveryCodeDesc": { "message": "모든 2단계 인증을 사용할 수 없는 상황인가요? 복구 코드를 사용하여 계정의 모든 2단계 인증을 비활성화할 수 있습니다." }, @@ -2097,6 +2176,15 @@ "vaultTimeoutAction1": { "message": "시간초과 시 행동" }, + "newCustomizationOptionsCalloutTitle": { + "message": "New customization options" + }, + "newCustomizationOptionsCalloutContent": { + "message": "Customize your vault experience with quick copy actions, compact mode, and more!" + }, + "newCustomizationOptionsCalloutLink": { + "message": "View all Appearance settings" + }, "lock": { "message": "잠금", "description": "Verb form: to make secure or inaccessible by" @@ -2391,8 +2479,17 @@ "atRiskPasswords": { "message": "At-risk passwords" }, - "atRiskPasswordsDescSingleOrg": { - "message": "$ORGANIZATION$ is requesting you change the $COUNT$ passwords because they are at risk.", + "atRiskPasswordDescSingleOrg": { + "message": "$ORGANIZATION$ is requesting you change one password because it is at-risk.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + } + }, + "atRiskPasswordsDescSingleOrgPlural": { + "message": "$ORGANIZATION$ is requesting you change the $COUNT$ passwords because they are at-risk.", "placeholders": { "organization": { "content": "$1", @@ -2404,8 +2501,8 @@ } } }, - "atRiskPasswordsDescMultiOrg": { - "message": "Your organizations are requesting you change the $COUNT$ passwords because they are at risk.", + "atRiskPasswordsDescMultiOrgPlural": { + "message": "Your organizations are requesting you change the $COUNT$ passwords because they are at-risk.", "placeholders": { "count": { "content": "$1", @@ -2431,6 +2528,36 @@ "changeAtRiskPasswordsFasterDesc": { "message": "Update your settings so you can quickly autofill your passwords and generate new ones" }, + "reviewAtRiskLogins": { + "message": "Review at-risk logins" + }, + "reviewAtRiskPasswords": { + "message": "Review at-risk passwords" + }, + "reviewAtRiskLoginsSlideDesc": { + "message": "Your organization passwords are at-risk because they are weak, reused, and/or exposed.", + "description": "Description of the review at-risk login slide on the at-risk password page carousel" + }, + "reviewAtRiskLoginSlideImgAlt": { + "message": "Illustration of a list of logins that are at-risk" + }, + "generatePasswordSlideDesc": { + "message": "Quickly generate a strong, unique password with the Bitwarden autofill menu on the at-risk site.", + "description": "Description of the generate password slide on the at-risk password page carousel" + }, + "generatePasswordSlideImgAlt": { + "message": "Illustration of the Bitwarden autofill menu displaying a generated password" + }, + "updateInBitwarden": { + "message": "Update in Bitwarden" + }, + "updateInBitwardenSlideDesc": { + "message": "Bitwarden will then prompt you to update the password in the password manager.", + "description": "Description of the update in Bitwarden slide on the at-risk password page carousel" + }, + "updateInBitwardenSlideImgAlt": { + "message": "Illustration of a Bitwarden’s notification prompting the user to update the login" + }, "turnOnAutofill": { "message": "Turn on autofill" }, @@ -3983,6 +4110,9 @@ "activeAccount": { "message": "계정 활성화" }, + "bitwardenAccount": { + "message": "Bitwarden account" + }, "availableAccounts": { "message": "사용 가능한 계정" }, @@ -4181,6 +4311,20 @@ } } }, + "copyFieldValue": { + "message": "Copy $FIELD$, $VALUE$", + "description": "Title for a button that copies a field value to the clipboard.", + "placeholders": { + "field": { + "content": "$1", + "example": "Username" + }, + "value": { + "content": "$2", + "example": "Foo" + } + } + }, "noValuesToCopy": { "message": "복사할 값이 없습니다" }, @@ -5002,5 +5146,8 @@ }, "updateDesktopAppOrDisableFingerprintDialogMessage": { "message": "To use biometric unlock, please update your desktop application, or disable fingerprint unlock in the desktop settings." + }, + "changeAtRiskPassword": { + "message": "Change at-risk password" } } diff --git a/apps/browser/src/_locales/lt/messages.json b/apps/browser/src/_locales/lt/messages.json index 58814072686..b05269e9b40 100644 --- a/apps/browser/src/_locales/lt/messages.json +++ b/apps/browser/src/_locales/lt/messages.json @@ -80,6 +80,15 @@ "masterPassHint": { "message": "Pagrindinio slaptažodžio užuomina (neprivaloma)" }, + "passwordStrengthScore": { + "message": "Password strength score $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "joinOrganization": { "message": "Join organization" }, @@ -470,22 +479,6 @@ "length": { "message": "Ilgis" }, - "uppercase": { - "message": "Didžiosiomis (A-Z)", - "description": "deprecated. Use uppercaseLabel instead." - }, - "lowercase": { - "message": "Mažosiomis (a-z)", - "description": "deprecated. Use lowercaseLabel instead." - }, - "numbers": { - "message": "Skaitmenys (0-9)", - "description": "deprecated. Use numbersLabel instead." - }, - "specialCharacters": { - "message": "Specialieji simboliai (!@#$%^&*)", - "description": "deprecated. Use specialCharactersLabel instead." - }, "include": { "message": "Include", "description": "Card header for password generator include block" @@ -518,10 +511,6 @@ "message": "Include special characters", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "numWords": { "message": "Žodžių skaičius" }, @@ -546,7 +535,7 @@ "description": "Label for the avoid ambiguous characters checkbox." }, "generatorPolicyInEffect": { - "message": "Enterprise policy requirements have been applied to your generator options.", + "message": "Jūsų generatoriaus parinktims taikomi įmonės politikos reikalavimai.", "description": "Indicates that a policy limits the credential generator screen." }, "searchVault": { @@ -660,8 +649,8 @@ "browserNotSupportClipboard": { "message": "Jūsų žiniatinklio naršyklė nepalaiko automatinio kopijavimo. Vietoj to nukopijuokite rankiniu būdu." }, - "verifyIdentity": { - "message": "Patvirtinti tapatybę" + "verifyYourIdentity": { + "message": "Verify your identity" }, "weDontRecognizeThisDevice": { "message": "We don't recognize this device. Enter the code sent to your email to verify your identity." @@ -876,6 +865,21 @@ "logInToBitwarden": { "message": "Log in to Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "Enter the code sent to your email" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Enter the code from your authenticator app" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Press your YubiKey to authenticate" + }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Duo two-step login is required for your account. Follow the steps below to finish logging in." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Follow the steps below to finish logging in." + }, "restartRegistration": { "message": "Restart registration" }, @@ -897,6 +901,9 @@ "no": { "message": "Ne" }, + "location": { + "message": "Location" + }, "unexpectedError": { "message": "Įvyko netikėta klaida." }, @@ -1046,6 +1053,56 @@ "notificationAddSave": { "message": "Išsaugoti" }, + "loginSaveSuccessDetails": { + "message": "$USERNAME$ saved to Bitwarden.", + "placeholders": { + "username": { + "content": "$1" + } + }, + "description": "Shown to user after login is saved." + }, + "loginUpdatedSuccessDetails": { + "message": "$USERNAME$ updated in Bitwarden.", + "placeholders": { + "username": { + "content": "$1" + } + }, + "description": "Shown to user after login is updated." + }, + "saveAsNewLoginAction": { + "message": "Save as new login", + "description": "Button text for saving login details as a new entry." + }, + "updateLoginAction": { + "message": "Update login", + "description": "Button text for updating an existing login entry." + }, + "saveLoginPrompt": { + "message": "Save login?", + "description": "Prompt asking the user if they want to save their login details." + }, + "updateLoginPrompt": { + "message": "Update existing login?", + "description": "Prompt asking the user if they want to update an existing login entry." + }, + "loginSaveSuccess": { + "message": "Login saved", + "description": "Message displayed when login details are successfully saved." + }, + "loginUpdateSuccess": { + "message": "Login updated", + "description": "Message displayed when login details are successfully updated." + }, + "saveFailure": { + "message": "Error saving", + "description": "Error message shown when the system fails to save login details." + }, + "saveFailureDetails": { + "message": "Oh no! We couldn't save this. Try entering the details manually.", + "description": "Detailed error message shown when saving login details fails." + }, "enableChangedPasswordNotification": { "message": "Paprašyti atnaujinti esamą prisijungimą" }, @@ -1365,12 +1422,22 @@ "rememberMe": { "message": "Prisiminti mane" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Don't ask again on this device for 30 days" + }, "sendVerificationCodeEmailAgain": { "message": "Pakartotinai atsiųsti patvirtinimo koda el. paštu" }, "useAnotherTwoStepMethod": { "message": "Naudoti dar vieną dviejų žingsnių prisijungimo metodą" }, + "selectAnotherMethod": { + "message": "Select another method", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Use your recovery code" + }, "insertYubiKey": { "message": "Įkišk YubiKey į savo kompiuterio USB prievadą, tada paliesk jo mygtuką." }, @@ -1383,9 +1450,18 @@ "webAuthnNewTabOpen": { "message": "Atidaryti naują skirtuką" }, + "openInNewTab": { + "message": "Open in new tab" + }, "webAuthnAuthenticate": { "message": "Autentifikuoti WebAuthn" }, + "readSecurityKey": { + "message": "Read security key" + }, + "awaitingSecurityKeyInteraction": { + "message": "Awaiting security key interaction..." + }, "loginUnavailable": { "message": "Prisijungimas nepasiekiamas" }, @@ -1398,6 +1474,9 @@ "twoStepOptions": { "message": "Dviejų žingsnių prisijungimo parinktys" }, + "selectTwoStepLoginMethod": { + "message": "Select two-step login method" + }, "recoveryCodeDesc": { "message": "Praradai prieigą prie visų savo dviejų veiksnių teikėjų? Naudok atkūrimo kodą, kad iš savo paskyros išjungtum visus dviejų veiksnių teikėjus." }, @@ -2097,6 +2176,15 @@ "vaultTimeoutAction1": { "message": "Timeout action" }, + "newCustomizationOptionsCalloutTitle": { + "message": "New customization options" + }, + "newCustomizationOptionsCalloutContent": { + "message": "Customize your vault experience with quick copy actions, compact mode, and more!" + }, + "newCustomizationOptionsCalloutLink": { + "message": "View all Appearance settings" + }, "lock": { "message": "Užrakinti", "description": "Verb form: to make secure or inaccessible by" @@ -2391,8 +2479,17 @@ "atRiskPasswords": { "message": "At-risk passwords" }, - "atRiskPasswordsDescSingleOrg": { - "message": "$ORGANIZATION$ is requesting you change the $COUNT$ passwords because they are at risk.", + "atRiskPasswordDescSingleOrg": { + "message": "$ORGANIZATION$ is requesting you change one password because it is at-risk.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + } + }, + "atRiskPasswordsDescSingleOrgPlural": { + "message": "$ORGANIZATION$ is requesting you change the $COUNT$ passwords because they are at-risk.", "placeholders": { "organization": { "content": "$1", @@ -2404,8 +2501,8 @@ } } }, - "atRiskPasswordsDescMultiOrg": { - "message": "Your organizations are requesting you change the $COUNT$ passwords because they are at risk.", + "atRiskPasswordsDescMultiOrgPlural": { + "message": "Your organizations are requesting you change the $COUNT$ passwords because they are at-risk.", "placeholders": { "count": { "content": "$1", @@ -2431,6 +2528,36 @@ "changeAtRiskPasswordsFasterDesc": { "message": "Update your settings so you can quickly autofill your passwords and generate new ones" }, + "reviewAtRiskLogins": { + "message": "Review at-risk logins" + }, + "reviewAtRiskPasswords": { + "message": "Review at-risk passwords" + }, + "reviewAtRiskLoginsSlideDesc": { + "message": "Your organization passwords are at-risk because they are weak, reused, and/or exposed.", + "description": "Description of the review at-risk login slide on the at-risk password page carousel" + }, + "reviewAtRiskLoginSlideImgAlt": { + "message": "Illustration of a list of logins that are at-risk" + }, + "generatePasswordSlideDesc": { + "message": "Quickly generate a strong, unique password with the Bitwarden autofill menu on the at-risk site.", + "description": "Description of the generate password slide on the at-risk password page carousel" + }, + "generatePasswordSlideImgAlt": { + "message": "Illustration of the Bitwarden autofill menu displaying a generated password" + }, + "updateInBitwarden": { + "message": "Update in Bitwarden" + }, + "updateInBitwardenSlideDesc": { + "message": "Bitwarden will then prompt you to update the password in the password manager.", + "description": "Description of the update in Bitwarden slide on the at-risk password page carousel" + }, + "updateInBitwardenSlideImgAlt": { + "message": "Illustration of a Bitwarden’s notification prompting the user to update the login" + }, "turnOnAutofill": { "message": "Turn on autofill" }, @@ -3983,6 +4110,9 @@ "activeAccount": { "message": "Active account" }, + "bitwardenAccount": { + "message": "Bitwarden account" + }, "availableAccounts": { "message": "Pasiekiamos paskyros" }, @@ -4181,6 +4311,20 @@ } } }, + "copyFieldValue": { + "message": "Copy $FIELD$, $VALUE$", + "description": "Title for a button that copies a field value to the clipboard.", + "placeholders": { + "field": { + "content": "$1", + "example": "Username" + }, + "value": { + "content": "$2", + "example": "Foo" + } + } + }, "noValuesToCopy": { "message": "No values to copy" }, @@ -5002,5 +5146,8 @@ }, "updateDesktopAppOrDisableFingerprintDialogMessage": { "message": "To use biometric unlock, please update your desktop application, or disable fingerprint unlock in the desktop settings." + }, + "changeAtRiskPassword": { + "message": "Change at-risk password" } } diff --git a/apps/browser/src/_locales/lv/messages.json b/apps/browser/src/_locales/lv/messages.json index 9799ff17146..f7fe453d227 100644 --- a/apps/browser/src/_locales/lv/messages.json +++ b/apps/browser/src/_locales/lv/messages.json @@ -80,6 +80,15 @@ "masterPassHint": { "message": "Galvenās paroles norāde (nav nepieciešama)" }, + "passwordStrengthScore": { + "message": "Paroles stipruma novērtējums $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "joinOrganization": { "message": "Pievienoties apvienībai" }, @@ -470,22 +479,6 @@ "length": { "message": "Garums" }, - "uppercase": { - "message": "Lielie burti (A-Z)", - "description": "deprecated. Use uppercaseLabel instead." - }, - "lowercase": { - "message": "Mazie burti (a-z)", - "description": "deprecated. Use lowercaseLabel instead." - }, - "numbers": { - "message": "Cipari (0-9)", - "description": "deprecated. Use numbersLabel instead." - }, - "specialCharacters": { - "message": "Īpašās rakstzīmes (!@#$%^&*)", - "description": "deprecated. Use specialCharactersLabel instead." - }, "include": { "message": "Iekļaut", "description": "Card header for password generator include block" @@ -518,10 +511,6 @@ "message": "Iekļaut īpašās rakstzīmes", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "numWords": { "message": "Vārdu skaits" }, @@ -660,8 +649,8 @@ "browserNotSupportClipboard": { "message": "Pārlūks neatbalsta vienkāršo ievietošanu starpliktuvē. Tā vietā tas jāievieto starpliktuvē pašrocīgi." }, - "verifyIdentity": { - "message": "Identitātes apliecināšana" + "verifyYourIdentity": { + "message": "Apliecināt savu identitāti" }, "weDontRecognizeThisDevice": { "message": "Mēs neatpazīstam šo ierīci. Jāievada kods, kas tika nosūtīts e-pastā, lai apliecinātu savu identitāti." @@ -876,6 +865,21 @@ "logInToBitwarden": { "message": "Pieteikties Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "Jāievada e-pastā nosūtītais kods" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Jāievada kods no savas autentificētājlietotnes" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Jāpiespiež sava YubiKey ierīce, lai autentificētu" + }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Ir nepieciešama Duo divpakāpju pieteikšanās, lai pieteiktos savā kontā. Jāseko zemāk esošajām norādēm, lai pabeigtu pieteikšanos." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Jāseko zemāk esošajām norādēm, lai pabeigtu pieteikšanos." + }, "restartRegistration": { "message": "Sākt reģistrēšanos no jauna" }, @@ -897,6 +901,9 @@ "no": { "message": "Nē" }, + "location": { + "message": "Atrašanās vieta" + }, "unexpectedError": { "message": "Ir radusies neparedzēta kļūda." }, @@ -1046,6 +1053,56 @@ "notificationAddSave": { "message": "Jā, saglabāt" }, + "loginSaveSuccessDetails": { + "message": "$USERNAME$ saglabāts Bitwarden.", + "placeholders": { + "username": { + "content": "$1" + } + }, + "description": "Shown to user after login is saved." + }, + "loginUpdatedSuccessDetails": { + "message": "$USERNAME$ atjaunināts Bitwarden.", + "placeholders": { + "username": { + "content": "$1" + } + }, + "description": "Shown to user after login is updated." + }, + "saveAsNewLoginAction": { + "message": "Saglabāt kā jaunu pieteikšanās vienumu", + "description": "Button text for saving login details as a new entry." + }, + "updateLoginAction": { + "message": "Atjaunināt pieteikšanās vienumu", + "description": "Button text for updating an existing login entry." + }, + "saveLoginPrompt": { + "message": "Saglabāt pieteikšanās vienumu?", + "description": "Prompt asking the user if they want to save their login details." + }, + "updateLoginPrompt": { + "message": "Atjaunināt esošo pieteikšanās vienumu?", + "description": "Prompt asking the user if they want to update an existing login entry." + }, + "loginSaveSuccess": { + "message": "Pieteikšanās vienums saglabāts", + "description": "Message displayed when login details are successfully saved." + }, + "loginUpdateSuccess": { + "message": "Pieteikšanās vienums atjaunināts", + "description": "Message displayed when login details are successfully updated." + }, + "saveFailure": { + "message": "Kļūda saglabāšanas laikā", + "description": "Error message shown when the system fails to save login details." + }, + "saveFailureDetails": { + "message": "Ak nē! Mēs nevarējā šo saglabāt. Jāmēģina pašrocīgi ievadīt informāciju.", + "description": "Detailed error message shown when saving login details fails." + }, "enableChangedPasswordNotification": { "message": "Vaicāt atjaunināt esošu pieteikšanās vienumu" }, @@ -1365,12 +1422,22 @@ "rememberMe": { "message": "Atcerēties mani" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Šajā ierīcē 30 dienas vairs nevaicāt" + }, "sendVerificationCodeEmailAgain": { "message": "Sūtīt apstiprinājuma koda e-pastu vēlreiz" }, "useAnotherTwoStepMethod": { "message": "Izmantot citu divpakāpju pieteikšanās veidu" }, + "selectAnotherMethod": { + "message": "Atlasīt citu veidu", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Izmantot savu atkopes kodu" + }, "insertYubiKey": { "message": "Ievieto savu YubiKey datora USB ligzdā un pieskaries tā pogai!" }, @@ -1383,9 +1450,18 @@ "webAuthnNewTabOpen": { "message": "Atvērt jaunu cilni" }, + "openInNewTab": { + "message": "Atvērt jaunā cilnē" + }, "webAuthnAuthenticate": { "message": "Autentificēt WebAuthn" }, + "readSecurityKey": { + "message": "Nolasīt drošības atslēgu" + }, + "awaitingSecurityKeyInteraction": { + "message": "Gaida mijiedarbību ar drošības atslēgu..." + }, "loginUnavailable": { "message": "Pieteikšanās nav pieejama" }, @@ -1398,6 +1474,9 @@ "twoStepOptions": { "message": "Divpakāpju pieteikšanās iespējas" }, + "selectTwoStepLoginMethod": { + "message": "Atlasīt divpakāpju pieteikšanās veidu" + }, "recoveryCodeDesc": { "message": "Zaudēta piekļuve visiem divpakāpju nodrošinātājiem? Izmanto atkopšanas kodus, lai atspējotu visus sava konta divpakāpju nodrošinātājus!" }, @@ -2097,6 +2176,15 @@ "vaultTimeoutAction1": { "message": "Noildzes darbība" }, + "newCustomizationOptionsCalloutTitle": { + "message": "Jaunas pielāgošanas iespējas" + }, + "newCustomizationOptionsCalloutContent": { + "message": "Savu glabātavas pieredzi var pielāgot ar ātrām kopēšanas darbībām, ciešo izkārtojumu un vēl." + }, + "newCustomizationOptionsCalloutLink": { + "message": "Apskatīt visus izskata iestatījumus" + }, "lock": { "message": "Slēgt", "description": "Verb form: to make secure or inaccessible by" @@ -2391,7 +2479,16 @@ "atRiskPasswords": { "message": "Riskam pakļautās paroles" }, - "atRiskPasswordsDescSingleOrg": { + "atRiskPasswordDescSingleOrg": { + "message": "$ORGANIZATION$ pieprasa mainīt vienu paroli, jo tā ir pakļauta riskam.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + } + }, + "atRiskPasswordsDescSingleOrgPlural": { "message": "$ORGANIZATION$ pieprasa mainīt $COUNT$ paroles, jo tās ir pakļautas riskam.", "placeholders": { "organization": { @@ -2404,7 +2501,7 @@ } } }, - "atRiskPasswordsDescMultiOrg": { + "atRiskPasswordsDescMultiOrgPlural": { "message": "Apvienības pieprasa mainīt $COUNT$ paroles, jo tās ir pakļautas riskam.", "placeholders": { "count": { @@ -2431,6 +2528,36 @@ "changeAtRiskPasswordsFasterDesc": { "message": "Jāatjaunina savi iestatījumi, lai varētu veikli aizpildīt paroles automātiski un izveidot jaunas" }, + "reviewAtRiskLogins": { + "message": "Pārskatīt riskam pakļautos pieteikšanās vienumus" + }, + "reviewAtRiskPasswords": { + "message": "Pārskatīt riskam pakļautās paroles" + }, + "reviewAtRiskLoginsSlideDesc": { + "message": "Apvienības paroles ir pakļautas riskam, jo tās ir vājas, atkārtoti izmantotas un/vai noplūdušas.", + "description": "Description of the review at-risk login slide on the at-risk password page carousel" + }, + "reviewAtRiskLoginSlideImgAlt": { + "message": "Riskam pakļauto pieteikšanās vienumu saraksta attēlojums" + }, + "generatePasswordSlideDesc": { + "message": "Riskam pakļauto vienumu vietnē ar automātiskās aizpildes izvēlni var ātri izveidot stipru, neatkārtojamu paroli.", + "description": "Description of the generate password slide on the at-risk password page carousel" + }, + "generatePasswordSlideImgAlt": { + "message": "Bitwarden automātiskās izvēlnes attēlojums, kurā ir redzama izveidota parole" + }, + "updateInBitwarden": { + "message": "Atjaunināt Bitwarden" + }, + "updateInBitwardenSlideDesc": { + "message": "Bitwarden tad vaicās atjaunināt paroli paroļu pārvaldniekā.", + "description": "Description of the update in Bitwarden slide on the at-risk password page carousel" + }, + "updateInBitwardenSlideImgAlt": { + "message": "Bitwarden paziņojuma, kas aicina lietotāju atjaunināt pieteikšanās vienumu, attēlojums" + }, "turnOnAutofill": { "message": "Ieslēgt automātisko aizpildi" }, @@ -3983,6 +4110,9 @@ "activeAccount": { "message": "Pašlaik izmantotais konts" }, + "bitwardenAccount": { + "message": "Bitwarden konts" + }, "availableAccounts": { "message": "Pieejamie konti" }, @@ -4181,6 +4311,20 @@ } } }, + "copyFieldValue": { + "message": "Ievietot starpliktuvē $FIELD$, $VALUE$", + "description": "Title for a button that copies a field value to the clipboard.", + "placeholders": { + "field": { + "content": "$1", + "example": "Username" + }, + "value": { + "content": "$2", + "example": "Foo" + } + } + }, "noValuesToCopy": { "message": "Nav vērtību, ko ievietot starpliktuvē" }, @@ -5002,5 +5146,8 @@ }, "updateDesktopAppOrDisableFingerprintDialogMessage": { "message": "Lai izmantotu atslēgšanu ar biometriju, lūgums atjaunināt darbvirsmas lietotni vai atspējot atslēgšanu ar pirkstu nospiedumu darbvirsmas iestatījumos." + }, + "changeAtRiskPassword": { + "message": "Change at-risk password" } } diff --git a/apps/browser/src/_locales/ml/messages.json b/apps/browser/src/_locales/ml/messages.json index 7bed62eb24b..f73de774ab2 100644 --- a/apps/browser/src/_locales/ml/messages.json +++ b/apps/browser/src/_locales/ml/messages.json @@ -80,6 +80,15 @@ "masterPassHint": { "message": "പ്രാഥമിക പാസ്‌വേഡ് സൂചന (ഇഷ്ടാനുസൃതമായ)" }, + "passwordStrengthScore": { + "message": "Password strength score $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "joinOrganization": { "message": "Join organization" }, @@ -470,22 +479,6 @@ "length": { "message": "നീളം" }, - "uppercase": { - "message": "Uppercase (A-Z)", - "description": "deprecated. Use uppercaseLabel instead." - }, - "lowercase": { - "message": "Lowercase (a-z)", - "description": "deprecated. Use lowercaseLabel instead." - }, - "numbers": { - "message": "Numbers (0-9)", - "description": "deprecated. Use numbersLabel instead." - }, - "specialCharacters": { - "message": "Special characters (!@#$%^&*)", - "description": "deprecated. Use specialCharactersLabel instead." - }, "include": { "message": "Include", "description": "Card header for password generator include block" @@ -518,10 +511,6 @@ "message": "Include special characters", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "numWords": { "message": "വാക്കുകളുടെ എണ്ണം" }, @@ -660,8 +649,8 @@ "browserNotSupportClipboard": { "message": "നിങ്ങളുടെ ബ്രൌസർ എളുപ്പമുള്ള ക്ലിപ്പ്ബോർഡ് പകർത്തൽ പിന്തുണയ്ക്കത്തില്ല. പകരം അത് സ്വമേധയാ പകർക്കുക ." }, - "verifyIdentity": { - "message": "Verify identity" + "verifyYourIdentity": { + "message": "Verify your identity" }, "weDontRecognizeThisDevice": { "message": "We don't recognize this device. Enter the code sent to your email to verify your identity." @@ -876,6 +865,21 @@ "logInToBitwarden": { "message": "Log in to Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "Enter the code sent to your email" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Enter the code from your authenticator app" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Press your YubiKey to authenticate" + }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Duo two-step login is required for your account. Follow the steps below to finish logging in." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Follow the steps below to finish logging in." + }, "restartRegistration": { "message": "Restart registration" }, @@ -897,6 +901,9 @@ "no": { "message": "തെറ്റ്" }, + "location": { + "message": "Location" + }, "unexpectedError": { "message": "ഒരു അപ്രതീക്ഷിത പിശക് സംഭവിച്ചു." }, @@ -1046,6 +1053,56 @@ "notificationAddSave": { "message": "ശരി, ഇപ്പോൾ സംരക്ഷിക്കുക" }, + "loginSaveSuccessDetails": { + "message": "$USERNAME$ saved to Bitwarden.", + "placeholders": { + "username": { + "content": "$1" + } + }, + "description": "Shown to user after login is saved." + }, + "loginUpdatedSuccessDetails": { + "message": "$USERNAME$ updated in Bitwarden.", + "placeholders": { + "username": { + "content": "$1" + } + }, + "description": "Shown to user after login is updated." + }, + "saveAsNewLoginAction": { + "message": "Save as new login", + "description": "Button text for saving login details as a new entry." + }, + "updateLoginAction": { + "message": "Update login", + "description": "Button text for updating an existing login entry." + }, + "saveLoginPrompt": { + "message": "Save login?", + "description": "Prompt asking the user if they want to save their login details." + }, + "updateLoginPrompt": { + "message": "Update existing login?", + "description": "Prompt asking the user if they want to update an existing login entry." + }, + "loginSaveSuccess": { + "message": "Login saved", + "description": "Message displayed when login details are successfully saved." + }, + "loginUpdateSuccess": { + "message": "Login updated", + "description": "Message displayed when login details are successfully updated." + }, + "saveFailure": { + "message": "Error saving", + "description": "Error message shown when the system fails to save login details." + }, + "saveFailureDetails": { + "message": "Oh no! We couldn't save this. Try entering the details manually.", + "description": "Detailed error message shown when saving login details fails." + }, "enableChangedPasswordNotification": { "message": "Ask to update existing login" }, @@ -1365,12 +1422,22 @@ "rememberMe": { "message": "എന്നെ ഓർക്കുക" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Don't ask again on this device for 30 days" + }, "sendVerificationCodeEmailAgain": { "message": "സ്ഥിരീകരണ കോഡ് ഇമെയിൽ വഴി അയയ്ക്കുക" }, "useAnotherTwoStepMethod": { "message": "മറ്റൊരു രണ്ട് ഘട്ട ലോഗിൻ രീതി ഉപയോഗിക്കുക" }, + "selectAnotherMethod": { + "message": "Select another method", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Use your recovery code" + }, "insertYubiKey": { "message": "നിങ്ങളുടെ കമ്പ്യൂട്ടറിന്റെ യു‌എസ്‌ബി പോർട്ടിലേക്ക് യുബിക്കി ഇടുക, തുടർന്ന് അതിന്റെ ബട്ടൺ അമർത്തുക." }, @@ -1383,9 +1450,18 @@ "webAuthnNewTabOpen": { "message": "Open new tab" }, + "openInNewTab": { + "message": "Open in new tab" + }, "webAuthnAuthenticate": { "message": "Authenticate WebAuthn" }, + "readSecurityKey": { + "message": "Read security key" + }, + "awaitingSecurityKeyInteraction": { + "message": "Awaiting security key interaction..." + }, "loginUnavailable": { "message": "പ്രവേശനം ലഭ്യമല്ല" }, @@ -1398,6 +1474,9 @@ "twoStepOptions": { "message": "രണ്ട്-ഘട്ട പ്രവേശനം ഓപ്ഷനുകൾ" }, + "selectTwoStepLoginMethod": { + "message": "Select two-step login method" + }, "recoveryCodeDesc": { "message": "നിങ്ങളുടെ രണ്ട്-ഘടക ദാതാക്കളിലേക്കുള്ള ആക്‌സസ്സ് നഷ്‌ടപ്പെട്ടോ? നിങ്ങളുടെ അക്കൗണ്ടിൽ നിന്ന് രണ്ട്-ഘടക ദാതാക്കളെ പ്രവർത്തനരഹിതമാക്കാൻ നിങ്ങളുടെ റിക്കവറി കോഡ് ഉപയോഗിക്കുക." }, @@ -2097,6 +2176,15 @@ "vaultTimeoutAction1": { "message": "Timeout action" }, + "newCustomizationOptionsCalloutTitle": { + "message": "New customization options" + }, + "newCustomizationOptionsCalloutContent": { + "message": "Customize your vault experience with quick copy actions, compact mode, and more!" + }, + "newCustomizationOptionsCalloutLink": { + "message": "View all Appearance settings" + }, "lock": { "message": "പൂട്ടുക", "description": "Verb form: to make secure or inaccessible by" @@ -2391,8 +2479,17 @@ "atRiskPasswords": { "message": "At-risk passwords" }, - "atRiskPasswordsDescSingleOrg": { - "message": "$ORGANIZATION$ is requesting you change the $COUNT$ passwords because they are at risk.", + "atRiskPasswordDescSingleOrg": { + "message": "$ORGANIZATION$ is requesting you change one password because it is at-risk.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + } + }, + "atRiskPasswordsDescSingleOrgPlural": { + "message": "$ORGANIZATION$ is requesting you change the $COUNT$ passwords because they are at-risk.", "placeholders": { "organization": { "content": "$1", @@ -2404,8 +2501,8 @@ } } }, - "atRiskPasswordsDescMultiOrg": { - "message": "Your organizations are requesting you change the $COUNT$ passwords because they are at risk.", + "atRiskPasswordsDescMultiOrgPlural": { + "message": "Your organizations are requesting you change the $COUNT$ passwords because they are at-risk.", "placeholders": { "count": { "content": "$1", @@ -2431,6 +2528,36 @@ "changeAtRiskPasswordsFasterDesc": { "message": "Update your settings so you can quickly autofill your passwords and generate new ones" }, + "reviewAtRiskLogins": { + "message": "Review at-risk logins" + }, + "reviewAtRiskPasswords": { + "message": "Review at-risk passwords" + }, + "reviewAtRiskLoginsSlideDesc": { + "message": "Your organization passwords are at-risk because they are weak, reused, and/or exposed.", + "description": "Description of the review at-risk login slide on the at-risk password page carousel" + }, + "reviewAtRiskLoginSlideImgAlt": { + "message": "Illustration of a list of logins that are at-risk" + }, + "generatePasswordSlideDesc": { + "message": "Quickly generate a strong, unique password with the Bitwarden autofill menu on the at-risk site.", + "description": "Description of the generate password slide on the at-risk password page carousel" + }, + "generatePasswordSlideImgAlt": { + "message": "Illustration of the Bitwarden autofill menu displaying a generated password" + }, + "updateInBitwarden": { + "message": "Update in Bitwarden" + }, + "updateInBitwardenSlideDesc": { + "message": "Bitwarden will then prompt you to update the password in the password manager.", + "description": "Description of the update in Bitwarden slide on the at-risk password page carousel" + }, + "updateInBitwardenSlideImgAlt": { + "message": "Illustration of a Bitwarden’s notification prompting the user to update the login" + }, "turnOnAutofill": { "message": "Turn on autofill" }, @@ -3983,6 +4110,9 @@ "activeAccount": { "message": "Active account" }, + "bitwardenAccount": { + "message": "Bitwarden account" + }, "availableAccounts": { "message": "Available accounts" }, @@ -4181,6 +4311,20 @@ } } }, + "copyFieldValue": { + "message": "Copy $FIELD$, $VALUE$", + "description": "Title for a button that copies a field value to the clipboard.", + "placeholders": { + "field": { + "content": "$1", + "example": "Username" + }, + "value": { + "content": "$2", + "example": "Foo" + } + } + }, "noValuesToCopy": { "message": "No values to copy" }, @@ -5002,5 +5146,8 @@ }, "updateDesktopAppOrDisableFingerprintDialogMessage": { "message": "To use biometric unlock, please update your desktop application, or disable fingerprint unlock in the desktop settings." + }, + "changeAtRiskPassword": { + "message": "Change at-risk password" } } diff --git a/apps/browser/src/_locales/mr/messages.json b/apps/browser/src/_locales/mr/messages.json index c264ec60f09..7a67bab80eb 100644 --- a/apps/browser/src/_locales/mr/messages.json +++ b/apps/browser/src/_locales/mr/messages.json @@ -80,6 +80,15 @@ "masterPassHint": { "message": "मुख्य पासवर्डचा संकेत (पर्यायी)" }, + "passwordStrengthScore": { + "message": "Password strength score $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "joinOrganization": { "message": "Join organization" }, @@ -470,22 +479,6 @@ "length": { "message": "लांबी" }, - "uppercase": { - "message": "Uppercase (A-Z)", - "description": "deprecated. Use uppercaseLabel instead." - }, - "lowercase": { - "message": "Lowercase (a-z)", - "description": "deprecated. Use lowercaseLabel instead." - }, - "numbers": { - "message": "Numbers (0-9)", - "description": "deprecated. Use numbersLabel instead." - }, - "specialCharacters": { - "message": "Special characters (!@#$%^&*)", - "description": "deprecated. Use specialCharactersLabel instead." - }, "include": { "message": "Include", "description": "Card header for password generator include block" @@ -518,10 +511,6 @@ "message": "Include special characters", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "numWords": { "message": "Number of words" }, @@ -660,8 +649,8 @@ "browserNotSupportClipboard": { "message": "Your web browser does not support easy clipboard copying. Copy it manually instead." }, - "verifyIdentity": { - "message": "ओळख सत्यापित करा" + "verifyYourIdentity": { + "message": "Verify your identity" }, "weDontRecognizeThisDevice": { "message": "We don't recognize this device. Enter the code sent to your email to verify your identity." @@ -876,6 +865,21 @@ "logInToBitwarden": { "message": "Log in to Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "Enter the code sent to your email" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Enter the code from your authenticator app" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Press your YubiKey to authenticate" + }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Duo two-step login is required for your account. Follow the steps below to finish logging in." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Follow the steps below to finish logging in." + }, "restartRegistration": { "message": "Restart registration" }, @@ -897,6 +901,9 @@ "no": { "message": "No" }, + "location": { + "message": "Location" + }, "unexpectedError": { "message": "An unexpected error has occurred." }, @@ -1046,6 +1053,56 @@ "notificationAddSave": { "message": "Save" }, + "loginSaveSuccessDetails": { + "message": "$USERNAME$ saved to Bitwarden.", + "placeholders": { + "username": { + "content": "$1" + } + }, + "description": "Shown to user after login is saved." + }, + "loginUpdatedSuccessDetails": { + "message": "$USERNAME$ updated in Bitwarden.", + "placeholders": { + "username": { + "content": "$1" + } + }, + "description": "Shown to user after login is updated." + }, + "saveAsNewLoginAction": { + "message": "Save as new login", + "description": "Button text for saving login details as a new entry." + }, + "updateLoginAction": { + "message": "Update login", + "description": "Button text for updating an existing login entry." + }, + "saveLoginPrompt": { + "message": "Save login?", + "description": "Prompt asking the user if they want to save their login details." + }, + "updateLoginPrompt": { + "message": "Update existing login?", + "description": "Prompt asking the user if they want to update an existing login entry." + }, + "loginSaveSuccess": { + "message": "Login saved", + "description": "Message displayed when login details are successfully saved." + }, + "loginUpdateSuccess": { + "message": "Login updated", + "description": "Message displayed when login details are successfully updated." + }, + "saveFailure": { + "message": "Error saving", + "description": "Error message shown when the system fails to save login details." + }, + "saveFailureDetails": { + "message": "Oh no! We couldn't save this. Try entering the details manually.", + "description": "Detailed error message shown when saving login details fails." + }, "enableChangedPasswordNotification": { "message": "Ask to update existing login" }, @@ -1365,12 +1422,22 @@ "rememberMe": { "message": "Remember me" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Don't ask again on this device for 30 days" + }, "sendVerificationCodeEmailAgain": { "message": "Send verification code email again" }, "useAnotherTwoStepMethod": { "message": "Use another two-step login method" }, + "selectAnotherMethod": { + "message": "Select another method", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Use your recovery code" + }, "insertYubiKey": { "message": "Insert your YubiKey into your computer's USB port, then touch its button." }, @@ -1383,9 +1450,18 @@ "webAuthnNewTabOpen": { "message": "Open new tab" }, + "openInNewTab": { + "message": "Open in new tab" + }, "webAuthnAuthenticate": { "message": "Authenticate WebAuthn" }, + "readSecurityKey": { + "message": "Read security key" + }, + "awaitingSecurityKeyInteraction": { + "message": "Awaiting security key interaction..." + }, "loginUnavailable": { "message": "Login unavailable" }, @@ -1398,6 +1474,9 @@ "twoStepOptions": { "message": "Two-step login options" }, + "selectTwoStepLoginMethod": { + "message": "Select two-step login method" + }, "recoveryCodeDesc": { "message": "Lost access to all of your two-factor providers? Use your recovery code to turn off all two-factor providers from your account." }, @@ -2097,6 +2176,15 @@ "vaultTimeoutAction1": { "message": "Timeout action" }, + "newCustomizationOptionsCalloutTitle": { + "message": "New customization options" + }, + "newCustomizationOptionsCalloutContent": { + "message": "Customize your vault experience with quick copy actions, compact mode, and more!" + }, + "newCustomizationOptionsCalloutLink": { + "message": "View all Appearance settings" + }, "lock": { "message": "Lock", "description": "Verb form: to make secure or inaccessible by" @@ -2391,8 +2479,17 @@ "atRiskPasswords": { "message": "At-risk passwords" }, - "atRiskPasswordsDescSingleOrg": { - "message": "$ORGANIZATION$ is requesting you change the $COUNT$ passwords because they are at risk.", + "atRiskPasswordDescSingleOrg": { + "message": "$ORGANIZATION$ is requesting you change one password because it is at-risk.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + } + }, + "atRiskPasswordsDescSingleOrgPlural": { + "message": "$ORGANIZATION$ is requesting you change the $COUNT$ passwords because they are at-risk.", "placeholders": { "organization": { "content": "$1", @@ -2404,8 +2501,8 @@ } } }, - "atRiskPasswordsDescMultiOrg": { - "message": "Your organizations are requesting you change the $COUNT$ passwords because they are at risk.", + "atRiskPasswordsDescMultiOrgPlural": { + "message": "Your organizations are requesting you change the $COUNT$ passwords because they are at-risk.", "placeholders": { "count": { "content": "$1", @@ -2431,6 +2528,36 @@ "changeAtRiskPasswordsFasterDesc": { "message": "Update your settings so you can quickly autofill your passwords and generate new ones" }, + "reviewAtRiskLogins": { + "message": "Review at-risk logins" + }, + "reviewAtRiskPasswords": { + "message": "Review at-risk passwords" + }, + "reviewAtRiskLoginsSlideDesc": { + "message": "Your organization passwords are at-risk because they are weak, reused, and/or exposed.", + "description": "Description of the review at-risk login slide on the at-risk password page carousel" + }, + "reviewAtRiskLoginSlideImgAlt": { + "message": "Illustration of a list of logins that are at-risk" + }, + "generatePasswordSlideDesc": { + "message": "Quickly generate a strong, unique password with the Bitwarden autofill menu on the at-risk site.", + "description": "Description of the generate password slide on the at-risk password page carousel" + }, + "generatePasswordSlideImgAlt": { + "message": "Illustration of the Bitwarden autofill menu displaying a generated password" + }, + "updateInBitwarden": { + "message": "Update in Bitwarden" + }, + "updateInBitwardenSlideDesc": { + "message": "Bitwarden will then prompt you to update the password in the password manager.", + "description": "Description of the update in Bitwarden slide on the at-risk password page carousel" + }, + "updateInBitwardenSlideImgAlt": { + "message": "Illustration of a Bitwarden’s notification prompting the user to update the login" + }, "turnOnAutofill": { "message": "Turn on autofill" }, @@ -3983,6 +4110,9 @@ "activeAccount": { "message": "Active account" }, + "bitwardenAccount": { + "message": "Bitwarden account" + }, "availableAccounts": { "message": "Available accounts" }, @@ -4181,6 +4311,20 @@ } } }, + "copyFieldValue": { + "message": "Copy $FIELD$, $VALUE$", + "description": "Title for a button that copies a field value to the clipboard.", + "placeholders": { + "field": { + "content": "$1", + "example": "Username" + }, + "value": { + "content": "$2", + "example": "Foo" + } + } + }, "noValuesToCopy": { "message": "No values to copy" }, @@ -5002,5 +5146,8 @@ }, "updateDesktopAppOrDisableFingerprintDialogMessage": { "message": "To use biometric unlock, please update your desktop application, or disable fingerprint unlock in the desktop settings." + }, + "changeAtRiskPassword": { + "message": "Change at-risk password" } } diff --git a/apps/browser/src/_locales/my/messages.json b/apps/browser/src/_locales/my/messages.json index 9fe497bc1c7..dd0bf23c799 100644 --- a/apps/browser/src/_locales/my/messages.json +++ b/apps/browser/src/_locales/my/messages.json @@ -80,6 +80,15 @@ "masterPassHint": { "message": "Master password hint (optional)" }, + "passwordStrengthScore": { + "message": "Password strength score $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "joinOrganization": { "message": "Join organization" }, @@ -470,22 +479,6 @@ "length": { "message": "Length" }, - "uppercase": { - "message": "Uppercase (A-Z)", - "description": "deprecated. Use uppercaseLabel instead." - }, - "lowercase": { - "message": "Lowercase (a-z)", - "description": "deprecated. Use lowercaseLabel instead." - }, - "numbers": { - "message": "Numbers (0-9)", - "description": "deprecated. Use numbersLabel instead." - }, - "specialCharacters": { - "message": "Special characters (!@#$%^&*)", - "description": "deprecated. Use specialCharactersLabel instead." - }, "include": { "message": "Include", "description": "Card header for password generator include block" @@ -518,10 +511,6 @@ "message": "Include special characters", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "numWords": { "message": "Number of words" }, @@ -660,8 +649,8 @@ "browserNotSupportClipboard": { "message": "Your web browser does not support easy clipboard copying. Copy it manually instead." }, - "verifyIdentity": { - "message": "Verify identity" + "verifyYourIdentity": { + "message": "Verify your identity" }, "weDontRecognizeThisDevice": { "message": "We don't recognize this device. Enter the code sent to your email to verify your identity." @@ -876,6 +865,21 @@ "logInToBitwarden": { "message": "Log in to Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "Enter the code sent to your email" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Enter the code from your authenticator app" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Press your YubiKey to authenticate" + }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Duo two-step login is required for your account. Follow the steps below to finish logging in." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Follow the steps below to finish logging in." + }, "restartRegistration": { "message": "Restart registration" }, @@ -897,6 +901,9 @@ "no": { "message": "No" }, + "location": { + "message": "Location" + }, "unexpectedError": { "message": "An unexpected error has occurred." }, @@ -1046,6 +1053,56 @@ "notificationAddSave": { "message": "Save" }, + "loginSaveSuccessDetails": { + "message": "$USERNAME$ saved to Bitwarden.", + "placeholders": { + "username": { + "content": "$1" + } + }, + "description": "Shown to user after login is saved." + }, + "loginUpdatedSuccessDetails": { + "message": "$USERNAME$ updated in Bitwarden.", + "placeholders": { + "username": { + "content": "$1" + } + }, + "description": "Shown to user after login is updated." + }, + "saveAsNewLoginAction": { + "message": "Save as new login", + "description": "Button text for saving login details as a new entry." + }, + "updateLoginAction": { + "message": "Update login", + "description": "Button text for updating an existing login entry." + }, + "saveLoginPrompt": { + "message": "Save login?", + "description": "Prompt asking the user if they want to save their login details." + }, + "updateLoginPrompt": { + "message": "Update existing login?", + "description": "Prompt asking the user if they want to update an existing login entry." + }, + "loginSaveSuccess": { + "message": "Login saved", + "description": "Message displayed when login details are successfully saved." + }, + "loginUpdateSuccess": { + "message": "Login updated", + "description": "Message displayed when login details are successfully updated." + }, + "saveFailure": { + "message": "Error saving", + "description": "Error message shown when the system fails to save login details." + }, + "saveFailureDetails": { + "message": "Oh no! We couldn't save this. Try entering the details manually.", + "description": "Detailed error message shown when saving login details fails." + }, "enableChangedPasswordNotification": { "message": "Ask to update existing login" }, @@ -1365,12 +1422,22 @@ "rememberMe": { "message": "Remember me" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Don't ask again on this device for 30 days" + }, "sendVerificationCodeEmailAgain": { "message": "Send verification code email again" }, "useAnotherTwoStepMethod": { "message": "Use another two-step login method" }, + "selectAnotherMethod": { + "message": "Select another method", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Use your recovery code" + }, "insertYubiKey": { "message": "Insert your YubiKey into your computer's USB port, then touch its button." }, @@ -1383,9 +1450,18 @@ "webAuthnNewTabOpen": { "message": "Open new tab" }, + "openInNewTab": { + "message": "Open in new tab" + }, "webAuthnAuthenticate": { "message": "Authenticate WebAuthn" }, + "readSecurityKey": { + "message": "Read security key" + }, + "awaitingSecurityKeyInteraction": { + "message": "Awaiting security key interaction..." + }, "loginUnavailable": { "message": "Login unavailable" }, @@ -1398,6 +1474,9 @@ "twoStepOptions": { "message": "Two-step login options" }, + "selectTwoStepLoginMethod": { + "message": "Select two-step login method" + }, "recoveryCodeDesc": { "message": "Lost access to all of your two-factor providers? Use your recovery code to turn off all two-factor providers from your account." }, @@ -2097,6 +2176,15 @@ "vaultTimeoutAction1": { "message": "Timeout action" }, + "newCustomizationOptionsCalloutTitle": { + "message": "New customization options" + }, + "newCustomizationOptionsCalloutContent": { + "message": "Customize your vault experience with quick copy actions, compact mode, and more!" + }, + "newCustomizationOptionsCalloutLink": { + "message": "View all Appearance settings" + }, "lock": { "message": "Lock", "description": "Verb form: to make secure or inaccessible by" @@ -2391,8 +2479,17 @@ "atRiskPasswords": { "message": "At-risk passwords" }, - "atRiskPasswordsDescSingleOrg": { - "message": "$ORGANIZATION$ is requesting you change the $COUNT$ passwords because they are at risk.", + "atRiskPasswordDescSingleOrg": { + "message": "$ORGANIZATION$ is requesting you change one password because it is at-risk.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + } + }, + "atRiskPasswordsDescSingleOrgPlural": { + "message": "$ORGANIZATION$ is requesting you change the $COUNT$ passwords because they are at-risk.", "placeholders": { "organization": { "content": "$1", @@ -2404,8 +2501,8 @@ } } }, - "atRiskPasswordsDescMultiOrg": { - "message": "Your organizations are requesting you change the $COUNT$ passwords because they are at risk.", + "atRiskPasswordsDescMultiOrgPlural": { + "message": "Your organizations are requesting you change the $COUNT$ passwords because they are at-risk.", "placeholders": { "count": { "content": "$1", @@ -2431,6 +2528,36 @@ "changeAtRiskPasswordsFasterDesc": { "message": "Update your settings so you can quickly autofill your passwords and generate new ones" }, + "reviewAtRiskLogins": { + "message": "Review at-risk logins" + }, + "reviewAtRiskPasswords": { + "message": "Review at-risk passwords" + }, + "reviewAtRiskLoginsSlideDesc": { + "message": "Your organization passwords are at-risk because they are weak, reused, and/or exposed.", + "description": "Description of the review at-risk login slide on the at-risk password page carousel" + }, + "reviewAtRiskLoginSlideImgAlt": { + "message": "Illustration of a list of logins that are at-risk" + }, + "generatePasswordSlideDesc": { + "message": "Quickly generate a strong, unique password with the Bitwarden autofill menu on the at-risk site.", + "description": "Description of the generate password slide on the at-risk password page carousel" + }, + "generatePasswordSlideImgAlt": { + "message": "Illustration of the Bitwarden autofill menu displaying a generated password" + }, + "updateInBitwarden": { + "message": "Update in Bitwarden" + }, + "updateInBitwardenSlideDesc": { + "message": "Bitwarden will then prompt you to update the password in the password manager.", + "description": "Description of the update in Bitwarden slide on the at-risk password page carousel" + }, + "updateInBitwardenSlideImgAlt": { + "message": "Illustration of a Bitwarden’s notification prompting the user to update the login" + }, "turnOnAutofill": { "message": "Turn on autofill" }, @@ -3983,6 +4110,9 @@ "activeAccount": { "message": "Active account" }, + "bitwardenAccount": { + "message": "Bitwarden account" + }, "availableAccounts": { "message": "Available accounts" }, @@ -4181,6 +4311,20 @@ } } }, + "copyFieldValue": { + "message": "Copy $FIELD$, $VALUE$", + "description": "Title for a button that copies a field value to the clipboard.", + "placeholders": { + "field": { + "content": "$1", + "example": "Username" + }, + "value": { + "content": "$2", + "example": "Foo" + } + } + }, "noValuesToCopy": { "message": "No values to copy" }, @@ -5002,5 +5146,8 @@ }, "updateDesktopAppOrDisableFingerprintDialogMessage": { "message": "To use biometric unlock, please update your desktop application, or disable fingerprint unlock in the desktop settings." + }, + "changeAtRiskPassword": { + "message": "Change at-risk password" } } diff --git a/apps/browser/src/_locales/nb/messages.json b/apps/browser/src/_locales/nb/messages.json index 18d889863a4..c8875e0b327 100644 --- a/apps/browser/src/_locales/nb/messages.json +++ b/apps/browser/src/_locales/nb/messages.json @@ -80,6 +80,15 @@ "masterPassHint": { "message": "Et hint for hovedpassordet (valgfritt)" }, + "passwordStrengthScore": { + "message": "Password strength score $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "joinOrganization": { "message": "Bli med i organisasjonen" }, @@ -470,22 +479,6 @@ "length": { "message": "Lengde" }, - "uppercase": { - "message": "Store bokstaver (A–Å)", - "description": "deprecated. Use uppercaseLabel instead." - }, - "lowercase": { - "message": "Små bokstaver (a-z)", - "description": "deprecated. Use lowercaseLabel instead." - }, - "numbers": { - "message": "Tall (0-9)", - "description": "deprecated. Use numbersLabel instead." - }, - "specialCharacters": { - "message": "Spesialtegn (!@#$%^&*)", - "description": "deprecated. Use specialCharactersLabel instead." - }, "include": { "message": "Inkluder", "description": "Card header for password generator include block" @@ -518,10 +511,6 @@ "message": "Inkluder spesialtegn", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "numWords": { "message": "Antall ord" }, @@ -660,8 +649,8 @@ "browserNotSupportClipboard": { "message": "Nettleseren din støtter ikke kopiering til utklippstavlen på noe enkelt vis. Prøv å kopiere det manuelt i stedet." }, - "verifyIdentity": { - "message": "Bekreft identitet" + "verifyYourIdentity": { + "message": "Verify your identity" }, "weDontRecognizeThisDevice": { "message": "We don't recognize this device. Enter the code sent to your email to verify your identity." @@ -876,6 +865,21 @@ "logInToBitwarden": { "message": "Logg inn på Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "Enter the code sent to your email" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Enter the code from your authenticator app" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Press your YubiKey to authenticate" + }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Duo two-step login is required for your account. Follow the steps below to finish logging in." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Follow the steps below to finish logging in." + }, "restartRegistration": { "message": "Start registreringen på nytt" }, @@ -897,6 +901,9 @@ "no": { "message": "Nei" }, + "location": { + "message": "Location" + }, "unexpectedError": { "message": "En uventet feil har oppstått." }, @@ -1046,6 +1053,56 @@ "notificationAddSave": { "message": "Ja, lagre nå" }, + "loginSaveSuccessDetails": { + "message": "$USERNAME$ saved to Bitwarden.", + "placeholders": { + "username": { + "content": "$1" + } + }, + "description": "Shown to user after login is saved." + }, + "loginUpdatedSuccessDetails": { + "message": "$USERNAME$ updated in Bitwarden.", + "placeholders": { + "username": { + "content": "$1" + } + }, + "description": "Shown to user after login is updated." + }, + "saveAsNewLoginAction": { + "message": "Save as new login", + "description": "Button text for saving login details as a new entry." + }, + "updateLoginAction": { + "message": "Update login", + "description": "Button text for updating an existing login entry." + }, + "saveLoginPrompt": { + "message": "Save login?", + "description": "Prompt asking the user if they want to save their login details." + }, + "updateLoginPrompt": { + "message": "Update existing login?", + "description": "Prompt asking the user if they want to update an existing login entry." + }, + "loginSaveSuccess": { + "message": "Login saved", + "description": "Message displayed when login details are successfully saved." + }, + "loginUpdateSuccess": { + "message": "Login updated", + "description": "Message displayed when login details are successfully updated." + }, + "saveFailure": { + "message": "Error saving", + "description": "Error message shown when the system fails to save login details." + }, + "saveFailureDetails": { + "message": "Oh no! We couldn't save this. Try entering the details manually.", + "description": "Detailed error message shown when saving login details fails." + }, "enableChangedPasswordNotification": { "message": "Spør om å oppdatere eksisterende innlogginger" }, @@ -1365,12 +1422,22 @@ "rememberMe": { "message": "Husk på meg" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Don't ask again on this device for 30 days" + }, "sendVerificationCodeEmailAgain": { "message": "Send E-posten med verifiseringskoden på nytt" }, "useAnotherTwoStepMethod": { "message": "Bruk en annen 2-trinnsinnloggingsmetode" }, + "selectAnotherMethod": { + "message": "Select another method", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Use your recovery code" + }, "insertYubiKey": { "message": "Sett inn din YubiKey i din datamaskins USB-uttak, og så trykk på dens knapp." }, @@ -1383,9 +1450,18 @@ "webAuthnNewTabOpen": { "message": "Åpne ny fane" }, + "openInNewTab": { + "message": "Open in new tab" + }, "webAuthnAuthenticate": { "message": "Autentiser WebAuthn" }, + "readSecurityKey": { + "message": "Read security key" + }, + "awaitingSecurityKeyInteraction": { + "message": "Awaiting security key interaction..." + }, "loginUnavailable": { "message": "Innloggingen er utilgjengelig" }, @@ -1398,6 +1474,9 @@ "twoStepOptions": { "message": "Alternativer for 2-trinnsinnlogging" }, + "selectTwoStepLoginMethod": { + "message": "Select two-step login method" + }, "recoveryCodeDesc": { "message": "Har du mistet tilgang til alle dine 2-trinnsleverandører? Bruk din gjenopprettingskode til å fjerne alle 2-trinnsleverandører fra din konto." }, @@ -2097,6 +2176,15 @@ "vaultTimeoutAction1": { "message": "Handling ved tidsavbrudd" }, + "newCustomizationOptionsCalloutTitle": { + "message": "New customization options" + }, + "newCustomizationOptionsCalloutContent": { + "message": "Customize your vault experience with quick copy actions, compact mode, and more!" + }, + "newCustomizationOptionsCalloutLink": { + "message": "View all Appearance settings" + }, "lock": { "message": "Lås", "description": "Verb form: to make secure or inaccessible by" @@ -2391,8 +2479,17 @@ "atRiskPasswords": { "message": "At-risk passwords" }, - "atRiskPasswordsDescSingleOrg": { - "message": "$ORGANIZATION$ is requesting you change the $COUNT$ passwords because they are at risk.", + "atRiskPasswordDescSingleOrg": { + "message": "$ORGANIZATION$ is requesting you change one password because it is at-risk.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + } + }, + "atRiskPasswordsDescSingleOrgPlural": { + "message": "$ORGANIZATION$ is requesting you change the $COUNT$ passwords because they are at-risk.", "placeholders": { "organization": { "content": "$1", @@ -2404,8 +2501,8 @@ } } }, - "atRiskPasswordsDescMultiOrg": { - "message": "Your organizations are requesting you change the $COUNT$ passwords because they are at risk.", + "atRiskPasswordsDescMultiOrgPlural": { + "message": "Your organizations are requesting you change the $COUNT$ passwords because they are at-risk.", "placeholders": { "count": { "content": "$1", @@ -2431,6 +2528,36 @@ "changeAtRiskPasswordsFasterDesc": { "message": "Update your settings so you can quickly autofill your passwords and generate new ones" }, + "reviewAtRiskLogins": { + "message": "Review at-risk logins" + }, + "reviewAtRiskPasswords": { + "message": "Review at-risk passwords" + }, + "reviewAtRiskLoginsSlideDesc": { + "message": "Your organization passwords are at-risk because they are weak, reused, and/or exposed.", + "description": "Description of the review at-risk login slide on the at-risk password page carousel" + }, + "reviewAtRiskLoginSlideImgAlt": { + "message": "Illustration of a list of logins that are at-risk" + }, + "generatePasswordSlideDesc": { + "message": "Quickly generate a strong, unique password with the Bitwarden autofill menu on the at-risk site.", + "description": "Description of the generate password slide on the at-risk password page carousel" + }, + "generatePasswordSlideImgAlt": { + "message": "Illustration of the Bitwarden autofill menu displaying a generated password" + }, + "updateInBitwarden": { + "message": "Update in Bitwarden" + }, + "updateInBitwardenSlideDesc": { + "message": "Bitwarden will then prompt you to update the password in the password manager.", + "description": "Description of the update in Bitwarden slide on the at-risk password page carousel" + }, + "updateInBitwardenSlideImgAlt": { + "message": "Illustration of a Bitwarden’s notification prompting the user to update the login" + }, "turnOnAutofill": { "message": "Turn on autofill" }, @@ -3983,6 +4110,9 @@ "activeAccount": { "message": "Aktiv konto" }, + "bitwardenAccount": { + "message": "Bitwarden account" + }, "availableAccounts": { "message": "Tilgjengelige kontoer" }, @@ -4181,6 +4311,20 @@ } } }, + "copyFieldValue": { + "message": "Copy $FIELD$, $VALUE$", + "description": "Title for a button that copies a field value to the clipboard.", + "placeholders": { + "field": { + "content": "$1", + "example": "Username" + }, + "value": { + "content": "$2", + "example": "Foo" + } + } + }, "noValuesToCopy": { "message": "Ingen verdier å kopiere" }, @@ -5002,5 +5146,8 @@ }, "updateDesktopAppOrDisableFingerprintDialogMessage": { "message": "For å bruke biometrisk opplåsing, må du oppdatere skrivebordsprogrammet eller skru av fingeravtrykksopplåsing i skrivebordsinnstillingene." + }, + "changeAtRiskPassword": { + "message": "Change at-risk password" } } diff --git a/apps/browser/src/_locales/ne/messages.json b/apps/browser/src/_locales/ne/messages.json index 9fe497bc1c7..dd0bf23c799 100644 --- a/apps/browser/src/_locales/ne/messages.json +++ b/apps/browser/src/_locales/ne/messages.json @@ -80,6 +80,15 @@ "masterPassHint": { "message": "Master password hint (optional)" }, + "passwordStrengthScore": { + "message": "Password strength score $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "joinOrganization": { "message": "Join organization" }, @@ -470,22 +479,6 @@ "length": { "message": "Length" }, - "uppercase": { - "message": "Uppercase (A-Z)", - "description": "deprecated. Use uppercaseLabel instead." - }, - "lowercase": { - "message": "Lowercase (a-z)", - "description": "deprecated. Use lowercaseLabel instead." - }, - "numbers": { - "message": "Numbers (0-9)", - "description": "deprecated. Use numbersLabel instead." - }, - "specialCharacters": { - "message": "Special characters (!@#$%^&*)", - "description": "deprecated. Use specialCharactersLabel instead." - }, "include": { "message": "Include", "description": "Card header for password generator include block" @@ -518,10 +511,6 @@ "message": "Include special characters", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "numWords": { "message": "Number of words" }, @@ -660,8 +649,8 @@ "browserNotSupportClipboard": { "message": "Your web browser does not support easy clipboard copying. Copy it manually instead." }, - "verifyIdentity": { - "message": "Verify identity" + "verifyYourIdentity": { + "message": "Verify your identity" }, "weDontRecognizeThisDevice": { "message": "We don't recognize this device. Enter the code sent to your email to verify your identity." @@ -876,6 +865,21 @@ "logInToBitwarden": { "message": "Log in to Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "Enter the code sent to your email" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Enter the code from your authenticator app" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Press your YubiKey to authenticate" + }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Duo two-step login is required for your account. Follow the steps below to finish logging in." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Follow the steps below to finish logging in." + }, "restartRegistration": { "message": "Restart registration" }, @@ -897,6 +901,9 @@ "no": { "message": "No" }, + "location": { + "message": "Location" + }, "unexpectedError": { "message": "An unexpected error has occurred." }, @@ -1046,6 +1053,56 @@ "notificationAddSave": { "message": "Save" }, + "loginSaveSuccessDetails": { + "message": "$USERNAME$ saved to Bitwarden.", + "placeholders": { + "username": { + "content": "$1" + } + }, + "description": "Shown to user after login is saved." + }, + "loginUpdatedSuccessDetails": { + "message": "$USERNAME$ updated in Bitwarden.", + "placeholders": { + "username": { + "content": "$1" + } + }, + "description": "Shown to user after login is updated." + }, + "saveAsNewLoginAction": { + "message": "Save as new login", + "description": "Button text for saving login details as a new entry." + }, + "updateLoginAction": { + "message": "Update login", + "description": "Button text for updating an existing login entry." + }, + "saveLoginPrompt": { + "message": "Save login?", + "description": "Prompt asking the user if they want to save their login details." + }, + "updateLoginPrompt": { + "message": "Update existing login?", + "description": "Prompt asking the user if they want to update an existing login entry." + }, + "loginSaveSuccess": { + "message": "Login saved", + "description": "Message displayed when login details are successfully saved." + }, + "loginUpdateSuccess": { + "message": "Login updated", + "description": "Message displayed when login details are successfully updated." + }, + "saveFailure": { + "message": "Error saving", + "description": "Error message shown when the system fails to save login details." + }, + "saveFailureDetails": { + "message": "Oh no! We couldn't save this. Try entering the details manually.", + "description": "Detailed error message shown when saving login details fails." + }, "enableChangedPasswordNotification": { "message": "Ask to update existing login" }, @@ -1365,12 +1422,22 @@ "rememberMe": { "message": "Remember me" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Don't ask again on this device for 30 days" + }, "sendVerificationCodeEmailAgain": { "message": "Send verification code email again" }, "useAnotherTwoStepMethod": { "message": "Use another two-step login method" }, + "selectAnotherMethod": { + "message": "Select another method", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Use your recovery code" + }, "insertYubiKey": { "message": "Insert your YubiKey into your computer's USB port, then touch its button." }, @@ -1383,9 +1450,18 @@ "webAuthnNewTabOpen": { "message": "Open new tab" }, + "openInNewTab": { + "message": "Open in new tab" + }, "webAuthnAuthenticate": { "message": "Authenticate WebAuthn" }, + "readSecurityKey": { + "message": "Read security key" + }, + "awaitingSecurityKeyInteraction": { + "message": "Awaiting security key interaction..." + }, "loginUnavailable": { "message": "Login unavailable" }, @@ -1398,6 +1474,9 @@ "twoStepOptions": { "message": "Two-step login options" }, + "selectTwoStepLoginMethod": { + "message": "Select two-step login method" + }, "recoveryCodeDesc": { "message": "Lost access to all of your two-factor providers? Use your recovery code to turn off all two-factor providers from your account." }, @@ -2097,6 +2176,15 @@ "vaultTimeoutAction1": { "message": "Timeout action" }, + "newCustomizationOptionsCalloutTitle": { + "message": "New customization options" + }, + "newCustomizationOptionsCalloutContent": { + "message": "Customize your vault experience with quick copy actions, compact mode, and more!" + }, + "newCustomizationOptionsCalloutLink": { + "message": "View all Appearance settings" + }, "lock": { "message": "Lock", "description": "Verb form: to make secure or inaccessible by" @@ -2391,8 +2479,17 @@ "atRiskPasswords": { "message": "At-risk passwords" }, - "atRiskPasswordsDescSingleOrg": { - "message": "$ORGANIZATION$ is requesting you change the $COUNT$ passwords because they are at risk.", + "atRiskPasswordDescSingleOrg": { + "message": "$ORGANIZATION$ is requesting you change one password because it is at-risk.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + } + }, + "atRiskPasswordsDescSingleOrgPlural": { + "message": "$ORGANIZATION$ is requesting you change the $COUNT$ passwords because they are at-risk.", "placeholders": { "organization": { "content": "$1", @@ -2404,8 +2501,8 @@ } } }, - "atRiskPasswordsDescMultiOrg": { - "message": "Your organizations are requesting you change the $COUNT$ passwords because they are at risk.", + "atRiskPasswordsDescMultiOrgPlural": { + "message": "Your organizations are requesting you change the $COUNT$ passwords because they are at-risk.", "placeholders": { "count": { "content": "$1", @@ -2431,6 +2528,36 @@ "changeAtRiskPasswordsFasterDesc": { "message": "Update your settings so you can quickly autofill your passwords and generate new ones" }, + "reviewAtRiskLogins": { + "message": "Review at-risk logins" + }, + "reviewAtRiskPasswords": { + "message": "Review at-risk passwords" + }, + "reviewAtRiskLoginsSlideDesc": { + "message": "Your organization passwords are at-risk because they are weak, reused, and/or exposed.", + "description": "Description of the review at-risk login slide on the at-risk password page carousel" + }, + "reviewAtRiskLoginSlideImgAlt": { + "message": "Illustration of a list of logins that are at-risk" + }, + "generatePasswordSlideDesc": { + "message": "Quickly generate a strong, unique password with the Bitwarden autofill menu on the at-risk site.", + "description": "Description of the generate password slide on the at-risk password page carousel" + }, + "generatePasswordSlideImgAlt": { + "message": "Illustration of the Bitwarden autofill menu displaying a generated password" + }, + "updateInBitwarden": { + "message": "Update in Bitwarden" + }, + "updateInBitwardenSlideDesc": { + "message": "Bitwarden will then prompt you to update the password in the password manager.", + "description": "Description of the update in Bitwarden slide on the at-risk password page carousel" + }, + "updateInBitwardenSlideImgAlt": { + "message": "Illustration of a Bitwarden’s notification prompting the user to update the login" + }, "turnOnAutofill": { "message": "Turn on autofill" }, @@ -3983,6 +4110,9 @@ "activeAccount": { "message": "Active account" }, + "bitwardenAccount": { + "message": "Bitwarden account" + }, "availableAccounts": { "message": "Available accounts" }, @@ -4181,6 +4311,20 @@ } } }, + "copyFieldValue": { + "message": "Copy $FIELD$, $VALUE$", + "description": "Title for a button that copies a field value to the clipboard.", + "placeholders": { + "field": { + "content": "$1", + "example": "Username" + }, + "value": { + "content": "$2", + "example": "Foo" + } + } + }, "noValuesToCopy": { "message": "No values to copy" }, @@ -5002,5 +5146,8 @@ }, "updateDesktopAppOrDisableFingerprintDialogMessage": { "message": "To use biometric unlock, please update your desktop application, or disable fingerprint unlock in the desktop settings." + }, + "changeAtRiskPassword": { + "message": "Change at-risk password" } } diff --git a/apps/browser/src/_locales/nl/messages.json b/apps/browser/src/_locales/nl/messages.json index 6019c5aa339..19e06e63581 100644 --- a/apps/browser/src/_locales/nl/messages.json +++ b/apps/browser/src/_locales/nl/messages.json @@ -80,6 +80,15 @@ "masterPassHint": { "message": "Hoofdwachtwoordhint (optioneel)" }, + "passwordStrengthScore": { + "message": "Score wachtwoordsterkte $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "joinOrganization": { "message": "Lid van organisatie worden" }, @@ -470,22 +479,6 @@ "length": { "message": "Lengte" }, - "uppercase": { - "message": "Hoofdletters (A-Z)", - "description": "deprecated. Use uppercaseLabel instead." - }, - "lowercase": { - "message": "Kleine letters (a-z)", - "description": "deprecated. Use lowercaseLabel instead." - }, - "numbers": { - "message": "Cijfers (0-9)", - "description": "deprecated. Use numbersLabel instead." - }, - "specialCharacters": { - "message": "Speciale tekens (!@#$%^&*)", - "description": "deprecated. Use specialCharactersLabel instead." - }, "include": { "message": "Toevoegen", "description": "Card header for password generator include block" @@ -518,10 +511,6 @@ "message": "Speciale tekens toevoegen", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "numWords": { "message": "Aantal woorden" }, @@ -660,8 +649,8 @@ "browserNotSupportClipboard": { "message": "Je webbrowser ondersteunt kopiëren naar plakbord niet. Kopieer handmatig." }, - "verifyIdentity": { - "message": "Identiteit verifiëren" + "verifyYourIdentity": { + "message": "Verifieer je identiteit" }, "weDontRecognizeThisDevice": { "message": "We herkennen dit apparaat niet. Voer de code in die naar je e-mail is verzonden om je identiteit te verifiëren." @@ -876,6 +865,21 @@ "logInToBitwarden": { "message": "Inloggen op Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "Voer de code in die naar je e-mailadres is verstuurd" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Voer de code uit je authenticatie-app in" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Druk op je YubiKey om te verifiëren" + }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Jouw account vereist Duo-tweestapsaanmelding. Volg de onderstaande stappen om het inloggen te voltooien." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Volg de onderstaande stappen om in te loggen." + }, "restartRegistration": { "message": "Registratie herstarten" }, @@ -897,6 +901,9 @@ "no": { "message": "Nee" }, + "location": { + "message": "Locatie" + }, "unexpectedError": { "message": "Er is een onverwachte fout opgetreden." }, @@ -1046,6 +1053,56 @@ "notificationAddSave": { "message": "Ja, nu opslaan" }, + "loginSaveSuccessDetails": { + "message": "$USERNAME$ opgeslagen in Bitwarden.", + "placeholders": { + "username": { + "content": "$1" + } + }, + "description": "Shown to user after login is saved." + }, + "loginUpdatedSuccessDetails": { + "message": "$USERNAME$ bijgewerkt in Bitwarden.", + "placeholders": { + "username": { + "content": "$1" + } + }, + "description": "Shown to user after login is updated." + }, + "saveAsNewLoginAction": { + "message": "Als nieuwe login opslaan", + "description": "Button text for saving login details as a new entry." + }, + "updateLoginAction": { + "message": "Login bijwerken", + "description": "Button text for updating an existing login entry." + }, + "saveLoginPrompt": { + "message": "Login opslaan?", + "description": "Prompt asking the user if they want to save their login details." + }, + "updateLoginPrompt": { + "message": "Bestaande login bijwerken?", + "description": "Prompt asking the user if they want to update an existing login entry." + }, + "loginSaveSuccess": { + "message": "Login opgeslagen", + "description": "Message displayed when login details are successfully saved." + }, + "loginUpdateSuccess": { + "message": "Login bijgewerkt", + "description": "Message displayed when login details are successfully updated." + }, + "saveFailure": { + "message": "Fout bij opslaan", + "description": "Error message shown when the system fails to save login details." + }, + "saveFailureDetails": { + "message": "Oh nee! We konden dit niet opslaan. Probeer de gegevens handmatig in te voeren.", + "description": "Detailed error message shown when saving login details fails." + }, "enableChangedPasswordNotification": { "message": "Vraag om bijwerken bestaande login" }, @@ -1365,12 +1422,22 @@ "rememberMe": { "message": "Mijn gegevens onthouden" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "30 dagen niet meer vragen op dit apparaat" + }, "sendVerificationCodeEmailAgain": { "message": "E-mail met verificatiecode opnieuw versturen" }, "useAnotherTwoStepMethod": { "message": "Gebruik een andere methode voor tweestapsaanmelding" }, + "selectAnotherMethod": { + "message": "Kies een andere methode", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Gebruik je herstelcode" + }, "insertYubiKey": { "message": "Plaats je YubiKey in de USB-poort van je computer en druk op de knop." }, @@ -1383,9 +1450,18 @@ "webAuthnNewTabOpen": { "message": "Nieuwe tab openen" }, + "openInNewTab": { + "message": "Openen in nieuwe tab" + }, "webAuthnAuthenticate": { "message": "Authenticeer WebAuthn" }, + "readSecurityKey": { + "message": "Beveiligingssleutel lezen" + }, + "awaitingSecurityKeyInteraction": { + "message": "Wacht op interactie met beveiligingssleutel..." + }, "loginUnavailable": { "message": "Login niet beschikbaar" }, @@ -1398,6 +1474,9 @@ "twoStepOptions": { "message": "Opties voor tweestapsaanmelding" }, + "selectTwoStepLoginMethod": { + "message": "Kies methode voor tweestapsaanmelding" + }, "recoveryCodeDesc": { "message": "Ben je de toegang tot al je tweestapsaanbieders verloren? Gebruik dan je herstelcode om alle tweestapsaanbieders op je account uit te schakelen." }, @@ -2097,6 +2176,15 @@ "vaultTimeoutAction1": { "message": "Time-out actie" }, + "newCustomizationOptionsCalloutTitle": { + "message": "Nieuwe aanpassingsopties" + }, + "newCustomizationOptionsCalloutContent": { + "message": "Personaliseer je kluiservaring met snelle kopieeracties, compacte modus en meer!" + }, + "newCustomizationOptionsCalloutLink": { + "message": "Alle personalisatie-instellingen bekijken" + }, "lock": { "message": "Vergrendelen", "description": "Verb form: to make secure or inaccessible by" @@ -2391,7 +2479,16 @@ "atRiskPasswords": { "message": "Wachtwoorden in gevaar" }, - "atRiskPasswordsDescSingleOrg": { + "atRiskPasswordDescSingleOrg": { + "message": "$ORGANIZATION$ vraagt je om één wachtwoord te wijzigen omdat deze een risico vormt.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + } + }, + "atRiskPasswordsDescSingleOrgPlural": { "message": "$ORGANIZATION$ vraagt je om de $COUNT$ wachtwoorden te wijzigen omdat ze een risico vormen.", "placeholders": { "organization": { @@ -2404,7 +2501,7 @@ } } }, - "atRiskPasswordsDescMultiOrg": { + "atRiskPasswordsDescMultiOrgPlural": { "message": "Je organisatie(s) vragen je de $COUNT$ wachtwoorden te wijzigen omdat ze een risico vormen.", "placeholders": { "count": { @@ -2431,6 +2528,36 @@ "changeAtRiskPasswordsFasterDesc": { "message": "Werk je instellingen bij voor het snel automatisch invullen van je wachtwoorden en genereren van nieuwe" }, + "reviewAtRiskLogins": { + "message": "Risicovolle logins bekijken" + }, + "reviewAtRiskPasswords": { + "message": "Risicovolle wachtwoorden bekijken" + }, + "reviewAtRiskLoginsSlideDesc": { + "message": "De wachtwoorden van je organisatie zijn in gevaar omdat ze zwak, hergebruikt en/of blootgelegd zijn.", + "description": "Description of the review at-risk login slide on the at-risk password page carousel" + }, + "reviewAtRiskLoginSlideImgAlt": { + "message": "Voorbeeld van een lijst van risicovolle logins" + }, + "generatePasswordSlideDesc": { + "message": "Genereer snel een sterk, uniek wachtwoord met het automatisch invulmenu van Bitwaren op de risicovolle website.", + "description": "Description of the generate password slide on the at-risk password page carousel" + }, + "generatePasswordSlideImgAlt": { + "message": "Voorbeeld van het automatisch invulmenu van Bitwarden met een gegenereerd wachtwoord" + }, + "updateInBitwarden": { + "message": "Bijwerken in Bitwarden" + }, + "updateInBitwardenSlideDesc": { + "message": "Bitwarden vraagt je vervolgens het wachtwoord bij te werken in de wachtwoordbeheerder.", + "description": "Description of the update in Bitwarden slide on the at-risk password page carousel" + }, + "updateInBitwardenSlideImgAlt": { + "message": "Voorbeeld van een Bitwarden-melding die de gebruiker aanspoort tot het bijwerken van de login" + }, "turnOnAutofill": { "message": "Automatisch invullen inschakelen" }, @@ -3983,6 +4110,9 @@ "activeAccount": { "message": "Actief account" }, + "bitwardenAccount": { + "message": "Bitwarden-account" + }, "availableAccounts": { "message": "Beschikbare accounts" }, @@ -4181,6 +4311,20 @@ } } }, + "copyFieldValue": { + "message": "$FIELD$, $VALUE$ kopiëren", + "description": "Title for a button that copies a field value to the clipboard.", + "placeholders": { + "field": { + "content": "$1", + "example": "Username" + }, + "value": { + "content": "$2", + "example": "Foo" + } + } + }, "noValuesToCopy": { "message": "Geen waarden om te kopiëren" }, @@ -5002,5 +5146,8 @@ }, "updateDesktopAppOrDisableFingerprintDialogMessage": { "message": "Als je biometrische gegevens wilt gebruiken, moet je de desktopapplicatie bijwerken of vingerafdrukontgrendeling uitschakelen in de instellingen van de desktopapplicatie." + }, + "changeAtRiskPassword": { + "message": "Risicovol wachtwoord wijzigen" } } diff --git a/apps/browser/src/_locales/nn/messages.json b/apps/browser/src/_locales/nn/messages.json index 9fe497bc1c7..dd0bf23c799 100644 --- a/apps/browser/src/_locales/nn/messages.json +++ b/apps/browser/src/_locales/nn/messages.json @@ -80,6 +80,15 @@ "masterPassHint": { "message": "Master password hint (optional)" }, + "passwordStrengthScore": { + "message": "Password strength score $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "joinOrganization": { "message": "Join organization" }, @@ -470,22 +479,6 @@ "length": { "message": "Length" }, - "uppercase": { - "message": "Uppercase (A-Z)", - "description": "deprecated. Use uppercaseLabel instead." - }, - "lowercase": { - "message": "Lowercase (a-z)", - "description": "deprecated. Use lowercaseLabel instead." - }, - "numbers": { - "message": "Numbers (0-9)", - "description": "deprecated. Use numbersLabel instead." - }, - "specialCharacters": { - "message": "Special characters (!@#$%^&*)", - "description": "deprecated. Use specialCharactersLabel instead." - }, "include": { "message": "Include", "description": "Card header for password generator include block" @@ -518,10 +511,6 @@ "message": "Include special characters", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "numWords": { "message": "Number of words" }, @@ -660,8 +649,8 @@ "browserNotSupportClipboard": { "message": "Your web browser does not support easy clipboard copying. Copy it manually instead." }, - "verifyIdentity": { - "message": "Verify identity" + "verifyYourIdentity": { + "message": "Verify your identity" }, "weDontRecognizeThisDevice": { "message": "We don't recognize this device. Enter the code sent to your email to verify your identity." @@ -876,6 +865,21 @@ "logInToBitwarden": { "message": "Log in to Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "Enter the code sent to your email" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Enter the code from your authenticator app" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Press your YubiKey to authenticate" + }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Duo two-step login is required for your account. Follow the steps below to finish logging in." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Follow the steps below to finish logging in." + }, "restartRegistration": { "message": "Restart registration" }, @@ -897,6 +901,9 @@ "no": { "message": "No" }, + "location": { + "message": "Location" + }, "unexpectedError": { "message": "An unexpected error has occurred." }, @@ -1046,6 +1053,56 @@ "notificationAddSave": { "message": "Save" }, + "loginSaveSuccessDetails": { + "message": "$USERNAME$ saved to Bitwarden.", + "placeholders": { + "username": { + "content": "$1" + } + }, + "description": "Shown to user after login is saved." + }, + "loginUpdatedSuccessDetails": { + "message": "$USERNAME$ updated in Bitwarden.", + "placeholders": { + "username": { + "content": "$1" + } + }, + "description": "Shown to user after login is updated." + }, + "saveAsNewLoginAction": { + "message": "Save as new login", + "description": "Button text for saving login details as a new entry." + }, + "updateLoginAction": { + "message": "Update login", + "description": "Button text for updating an existing login entry." + }, + "saveLoginPrompt": { + "message": "Save login?", + "description": "Prompt asking the user if they want to save their login details." + }, + "updateLoginPrompt": { + "message": "Update existing login?", + "description": "Prompt asking the user if they want to update an existing login entry." + }, + "loginSaveSuccess": { + "message": "Login saved", + "description": "Message displayed when login details are successfully saved." + }, + "loginUpdateSuccess": { + "message": "Login updated", + "description": "Message displayed when login details are successfully updated." + }, + "saveFailure": { + "message": "Error saving", + "description": "Error message shown when the system fails to save login details." + }, + "saveFailureDetails": { + "message": "Oh no! We couldn't save this. Try entering the details manually.", + "description": "Detailed error message shown when saving login details fails." + }, "enableChangedPasswordNotification": { "message": "Ask to update existing login" }, @@ -1365,12 +1422,22 @@ "rememberMe": { "message": "Remember me" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Don't ask again on this device for 30 days" + }, "sendVerificationCodeEmailAgain": { "message": "Send verification code email again" }, "useAnotherTwoStepMethod": { "message": "Use another two-step login method" }, + "selectAnotherMethod": { + "message": "Select another method", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Use your recovery code" + }, "insertYubiKey": { "message": "Insert your YubiKey into your computer's USB port, then touch its button." }, @@ -1383,9 +1450,18 @@ "webAuthnNewTabOpen": { "message": "Open new tab" }, + "openInNewTab": { + "message": "Open in new tab" + }, "webAuthnAuthenticate": { "message": "Authenticate WebAuthn" }, + "readSecurityKey": { + "message": "Read security key" + }, + "awaitingSecurityKeyInteraction": { + "message": "Awaiting security key interaction..." + }, "loginUnavailable": { "message": "Login unavailable" }, @@ -1398,6 +1474,9 @@ "twoStepOptions": { "message": "Two-step login options" }, + "selectTwoStepLoginMethod": { + "message": "Select two-step login method" + }, "recoveryCodeDesc": { "message": "Lost access to all of your two-factor providers? Use your recovery code to turn off all two-factor providers from your account." }, @@ -2097,6 +2176,15 @@ "vaultTimeoutAction1": { "message": "Timeout action" }, + "newCustomizationOptionsCalloutTitle": { + "message": "New customization options" + }, + "newCustomizationOptionsCalloutContent": { + "message": "Customize your vault experience with quick copy actions, compact mode, and more!" + }, + "newCustomizationOptionsCalloutLink": { + "message": "View all Appearance settings" + }, "lock": { "message": "Lock", "description": "Verb form: to make secure or inaccessible by" @@ -2391,8 +2479,17 @@ "atRiskPasswords": { "message": "At-risk passwords" }, - "atRiskPasswordsDescSingleOrg": { - "message": "$ORGANIZATION$ is requesting you change the $COUNT$ passwords because they are at risk.", + "atRiskPasswordDescSingleOrg": { + "message": "$ORGANIZATION$ is requesting you change one password because it is at-risk.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + } + }, + "atRiskPasswordsDescSingleOrgPlural": { + "message": "$ORGANIZATION$ is requesting you change the $COUNT$ passwords because they are at-risk.", "placeholders": { "organization": { "content": "$1", @@ -2404,8 +2501,8 @@ } } }, - "atRiskPasswordsDescMultiOrg": { - "message": "Your organizations are requesting you change the $COUNT$ passwords because they are at risk.", + "atRiskPasswordsDescMultiOrgPlural": { + "message": "Your organizations are requesting you change the $COUNT$ passwords because they are at-risk.", "placeholders": { "count": { "content": "$1", @@ -2431,6 +2528,36 @@ "changeAtRiskPasswordsFasterDesc": { "message": "Update your settings so you can quickly autofill your passwords and generate new ones" }, + "reviewAtRiskLogins": { + "message": "Review at-risk logins" + }, + "reviewAtRiskPasswords": { + "message": "Review at-risk passwords" + }, + "reviewAtRiskLoginsSlideDesc": { + "message": "Your organization passwords are at-risk because they are weak, reused, and/or exposed.", + "description": "Description of the review at-risk login slide on the at-risk password page carousel" + }, + "reviewAtRiskLoginSlideImgAlt": { + "message": "Illustration of a list of logins that are at-risk" + }, + "generatePasswordSlideDesc": { + "message": "Quickly generate a strong, unique password with the Bitwarden autofill menu on the at-risk site.", + "description": "Description of the generate password slide on the at-risk password page carousel" + }, + "generatePasswordSlideImgAlt": { + "message": "Illustration of the Bitwarden autofill menu displaying a generated password" + }, + "updateInBitwarden": { + "message": "Update in Bitwarden" + }, + "updateInBitwardenSlideDesc": { + "message": "Bitwarden will then prompt you to update the password in the password manager.", + "description": "Description of the update in Bitwarden slide on the at-risk password page carousel" + }, + "updateInBitwardenSlideImgAlt": { + "message": "Illustration of a Bitwarden’s notification prompting the user to update the login" + }, "turnOnAutofill": { "message": "Turn on autofill" }, @@ -3983,6 +4110,9 @@ "activeAccount": { "message": "Active account" }, + "bitwardenAccount": { + "message": "Bitwarden account" + }, "availableAccounts": { "message": "Available accounts" }, @@ -4181,6 +4311,20 @@ } } }, + "copyFieldValue": { + "message": "Copy $FIELD$, $VALUE$", + "description": "Title for a button that copies a field value to the clipboard.", + "placeholders": { + "field": { + "content": "$1", + "example": "Username" + }, + "value": { + "content": "$2", + "example": "Foo" + } + } + }, "noValuesToCopy": { "message": "No values to copy" }, @@ -5002,5 +5146,8 @@ }, "updateDesktopAppOrDisableFingerprintDialogMessage": { "message": "To use biometric unlock, please update your desktop application, or disable fingerprint unlock in the desktop settings." + }, + "changeAtRiskPassword": { + "message": "Change at-risk password" } } diff --git a/apps/browser/src/_locales/or/messages.json b/apps/browser/src/_locales/or/messages.json index 9fe497bc1c7..dd0bf23c799 100644 --- a/apps/browser/src/_locales/or/messages.json +++ b/apps/browser/src/_locales/or/messages.json @@ -80,6 +80,15 @@ "masterPassHint": { "message": "Master password hint (optional)" }, + "passwordStrengthScore": { + "message": "Password strength score $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "joinOrganization": { "message": "Join organization" }, @@ -470,22 +479,6 @@ "length": { "message": "Length" }, - "uppercase": { - "message": "Uppercase (A-Z)", - "description": "deprecated. Use uppercaseLabel instead." - }, - "lowercase": { - "message": "Lowercase (a-z)", - "description": "deprecated. Use lowercaseLabel instead." - }, - "numbers": { - "message": "Numbers (0-9)", - "description": "deprecated. Use numbersLabel instead." - }, - "specialCharacters": { - "message": "Special characters (!@#$%^&*)", - "description": "deprecated. Use specialCharactersLabel instead." - }, "include": { "message": "Include", "description": "Card header for password generator include block" @@ -518,10 +511,6 @@ "message": "Include special characters", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "numWords": { "message": "Number of words" }, @@ -660,8 +649,8 @@ "browserNotSupportClipboard": { "message": "Your web browser does not support easy clipboard copying. Copy it manually instead." }, - "verifyIdentity": { - "message": "Verify identity" + "verifyYourIdentity": { + "message": "Verify your identity" }, "weDontRecognizeThisDevice": { "message": "We don't recognize this device. Enter the code sent to your email to verify your identity." @@ -876,6 +865,21 @@ "logInToBitwarden": { "message": "Log in to Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "Enter the code sent to your email" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Enter the code from your authenticator app" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Press your YubiKey to authenticate" + }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Duo two-step login is required for your account. Follow the steps below to finish logging in." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Follow the steps below to finish logging in." + }, "restartRegistration": { "message": "Restart registration" }, @@ -897,6 +901,9 @@ "no": { "message": "No" }, + "location": { + "message": "Location" + }, "unexpectedError": { "message": "An unexpected error has occurred." }, @@ -1046,6 +1053,56 @@ "notificationAddSave": { "message": "Save" }, + "loginSaveSuccessDetails": { + "message": "$USERNAME$ saved to Bitwarden.", + "placeholders": { + "username": { + "content": "$1" + } + }, + "description": "Shown to user after login is saved." + }, + "loginUpdatedSuccessDetails": { + "message": "$USERNAME$ updated in Bitwarden.", + "placeholders": { + "username": { + "content": "$1" + } + }, + "description": "Shown to user after login is updated." + }, + "saveAsNewLoginAction": { + "message": "Save as new login", + "description": "Button text for saving login details as a new entry." + }, + "updateLoginAction": { + "message": "Update login", + "description": "Button text for updating an existing login entry." + }, + "saveLoginPrompt": { + "message": "Save login?", + "description": "Prompt asking the user if they want to save their login details." + }, + "updateLoginPrompt": { + "message": "Update existing login?", + "description": "Prompt asking the user if they want to update an existing login entry." + }, + "loginSaveSuccess": { + "message": "Login saved", + "description": "Message displayed when login details are successfully saved." + }, + "loginUpdateSuccess": { + "message": "Login updated", + "description": "Message displayed when login details are successfully updated." + }, + "saveFailure": { + "message": "Error saving", + "description": "Error message shown when the system fails to save login details." + }, + "saveFailureDetails": { + "message": "Oh no! We couldn't save this. Try entering the details manually.", + "description": "Detailed error message shown when saving login details fails." + }, "enableChangedPasswordNotification": { "message": "Ask to update existing login" }, @@ -1365,12 +1422,22 @@ "rememberMe": { "message": "Remember me" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Don't ask again on this device for 30 days" + }, "sendVerificationCodeEmailAgain": { "message": "Send verification code email again" }, "useAnotherTwoStepMethod": { "message": "Use another two-step login method" }, + "selectAnotherMethod": { + "message": "Select another method", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Use your recovery code" + }, "insertYubiKey": { "message": "Insert your YubiKey into your computer's USB port, then touch its button." }, @@ -1383,9 +1450,18 @@ "webAuthnNewTabOpen": { "message": "Open new tab" }, + "openInNewTab": { + "message": "Open in new tab" + }, "webAuthnAuthenticate": { "message": "Authenticate WebAuthn" }, + "readSecurityKey": { + "message": "Read security key" + }, + "awaitingSecurityKeyInteraction": { + "message": "Awaiting security key interaction..." + }, "loginUnavailable": { "message": "Login unavailable" }, @@ -1398,6 +1474,9 @@ "twoStepOptions": { "message": "Two-step login options" }, + "selectTwoStepLoginMethod": { + "message": "Select two-step login method" + }, "recoveryCodeDesc": { "message": "Lost access to all of your two-factor providers? Use your recovery code to turn off all two-factor providers from your account." }, @@ -2097,6 +2176,15 @@ "vaultTimeoutAction1": { "message": "Timeout action" }, + "newCustomizationOptionsCalloutTitle": { + "message": "New customization options" + }, + "newCustomizationOptionsCalloutContent": { + "message": "Customize your vault experience with quick copy actions, compact mode, and more!" + }, + "newCustomizationOptionsCalloutLink": { + "message": "View all Appearance settings" + }, "lock": { "message": "Lock", "description": "Verb form: to make secure or inaccessible by" @@ -2391,8 +2479,17 @@ "atRiskPasswords": { "message": "At-risk passwords" }, - "atRiskPasswordsDescSingleOrg": { - "message": "$ORGANIZATION$ is requesting you change the $COUNT$ passwords because they are at risk.", + "atRiskPasswordDescSingleOrg": { + "message": "$ORGANIZATION$ is requesting you change one password because it is at-risk.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + } + }, + "atRiskPasswordsDescSingleOrgPlural": { + "message": "$ORGANIZATION$ is requesting you change the $COUNT$ passwords because they are at-risk.", "placeholders": { "organization": { "content": "$1", @@ -2404,8 +2501,8 @@ } } }, - "atRiskPasswordsDescMultiOrg": { - "message": "Your organizations are requesting you change the $COUNT$ passwords because they are at risk.", + "atRiskPasswordsDescMultiOrgPlural": { + "message": "Your organizations are requesting you change the $COUNT$ passwords because they are at-risk.", "placeholders": { "count": { "content": "$1", @@ -2431,6 +2528,36 @@ "changeAtRiskPasswordsFasterDesc": { "message": "Update your settings so you can quickly autofill your passwords and generate new ones" }, + "reviewAtRiskLogins": { + "message": "Review at-risk logins" + }, + "reviewAtRiskPasswords": { + "message": "Review at-risk passwords" + }, + "reviewAtRiskLoginsSlideDesc": { + "message": "Your organization passwords are at-risk because they are weak, reused, and/or exposed.", + "description": "Description of the review at-risk login slide on the at-risk password page carousel" + }, + "reviewAtRiskLoginSlideImgAlt": { + "message": "Illustration of a list of logins that are at-risk" + }, + "generatePasswordSlideDesc": { + "message": "Quickly generate a strong, unique password with the Bitwarden autofill menu on the at-risk site.", + "description": "Description of the generate password slide on the at-risk password page carousel" + }, + "generatePasswordSlideImgAlt": { + "message": "Illustration of the Bitwarden autofill menu displaying a generated password" + }, + "updateInBitwarden": { + "message": "Update in Bitwarden" + }, + "updateInBitwardenSlideDesc": { + "message": "Bitwarden will then prompt you to update the password in the password manager.", + "description": "Description of the update in Bitwarden slide on the at-risk password page carousel" + }, + "updateInBitwardenSlideImgAlt": { + "message": "Illustration of a Bitwarden’s notification prompting the user to update the login" + }, "turnOnAutofill": { "message": "Turn on autofill" }, @@ -3983,6 +4110,9 @@ "activeAccount": { "message": "Active account" }, + "bitwardenAccount": { + "message": "Bitwarden account" + }, "availableAccounts": { "message": "Available accounts" }, @@ -4181,6 +4311,20 @@ } } }, + "copyFieldValue": { + "message": "Copy $FIELD$, $VALUE$", + "description": "Title for a button that copies a field value to the clipboard.", + "placeholders": { + "field": { + "content": "$1", + "example": "Username" + }, + "value": { + "content": "$2", + "example": "Foo" + } + } + }, "noValuesToCopy": { "message": "No values to copy" }, @@ -5002,5 +5146,8 @@ }, "updateDesktopAppOrDisableFingerprintDialogMessage": { "message": "To use biometric unlock, please update your desktop application, or disable fingerprint unlock in the desktop settings." + }, + "changeAtRiskPassword": { + "message": "Change at-risk password" } } diff --git a/apps/browser/src/_locales/pl/messages.json b/apps/browser/src/_locales/pl/messages.json index 0f552edd4eb..754cc510398 100644 --- a/apps/browser/src/_locales/pl/messages.json +++ b/apps/browser/src/_locales/pl/messages.json @@ -80,6 +80,15 @@ "masterPassHint": { "message": "Podpowiedź do hasła głównego (opcjonalnie)" }, + "passwordStrengthScore": { + "message": "Siła hasła: $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "joinOrganization": { "message": "Dołącz do organizacji" }, @@ -470,22 +479,6 @@ "length": { "message": "Długość" }, - "uppercase": { - "message": "Wielkie litery (A-Z)", - "description": "deprecated. Use uppercaseLabel instead." - }, - "lowercase": { - "message": "Małe litery (a-z)", - "description": "deprecated. Use lowercaseLabel instead." - }, - "numbers": { - "message": "Cyfry (0-9)", - "description": "deprecated. Use numbersLabel instead." - }, - "specialCharacters": { - "message": "Znaki specjalne (!@#$%^&*)", - "description": "deprecated. Use specialCharactersLabel instead." - }, "include": { "message": "Uwzględnij", "description": "Card header for password generator include block" @@ -518,10 +511,6 @@ "message": "Uwzględnij znaki specjalne", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "numWords": { "message": "Liczba słów" }, @@ -660,8 +649,8 @@ "browserNotSupportClipboard": { "message": "Przeglądarka nie obsługuje łatwego kopiowania schowka. Skopiuj element ręcznie." }, - "verifyIdentity": { - "message": "Zweryfikuj tożsamość" + "verifyYourIdentity": { + "message": "Potwierdź swoją tożsamość" }, "weDontRecognizeThisDevice": { "message": "Nie rozpoznajemy tego urządzenia. Wpisz kod wysłany na Twój e-mail, aby zweryfikować tożsamość." @@ -876,6 +865,21 @@ "logInToBitwarden": { "message": "Zaloguj się do Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "Wpisz kod wysłany na Twój adres e-mail" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Wpisz kod z aplikacji uwierzytelniającej" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Naciśnij YubiKey aby uwierzytelnić" + }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Logowanie dwustopniowe Duo jest wymagane dla twojego konta. Wykonaj poniższe kroki, by dokończyć logowanie" + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Wykonaj poniższe kroki, by dokończyć logowanie" + }, "restartRegistration": { "message": "Zrestartuj rejestrację" }, @@ -897,6 +901,9 @@ "no": { "message": "Nie" }, + "location": { + "message": "Lokalizacja" + }, "unexpectedError": { "message": "Wystąpił nieoczekiwany błąd." }, @@ -1046,6 +1053,56 @@ "notificationAddSave": { "message": "Zapisz" }, + "loginSaveSuccessDetails": { + "message": "$USERNAME$ został zapisany w Bitwarden.", + "placeholders": { + "username": { + "content": "$1" + } + }, + "description": "Shown to user after login is saved." + }, + "loginUpdatedSuccessDetails": { + "message": "$USERNAME$ został zaktualizowany w Bitwarden.", + "placeholders": { + "username": { + "content": "$1" + } + }, + "description": "Shown to user after login is updated." + }, + "saveAsNewLoginAction": { + "message": "Zapisz jako nowy login", + "description": "Button text for saving login details as a new entry." + }, + "updateLoginAction": { + "message": "Zaktualizuj dane logowania", + "description": "Button text for updating an existing login entry." + }, + "saveLoginPrompt": { + "message": "Zapisać dane logowania?", + "description": "Prompt asking the user if they want to save their login details." + }, + "updateLoginPrompt": { + "message": "Zaktualizować istniejące dane logowania?", + "description": "Prompt asking the user if they want to update an existing login entry." + }, + "loginSaveSuccess": { + "message": "Dane logowania zapisane", + "description": "Message displayed when login details are successfully saved." + }, + "loginUpdateSuccess": { + "message": "Dane logowania zostały zaktualizowane", + "description": "Message displayed when login details are successfully updated." + }, + "saveFailure": { + "message": "Błąd podczas zapisywania", + "description": "Error message shown when the system fails to save login details." + }, + "saveFailureDetails": { + "message": "O nie! Nie mogliśmy zapisać tego. Spróbuj wprowadzić szczegóły ręcznie.", + "description": "Detailed error message shown when saving login details fails." + }, "enableChangedPasswordNotification": { "message": "Poproś o aktualizację istniejących danych logowania" }, @@ -1365,12 +1422,22 @@ "rememberMe": { "message": "Zapamiętaj mnie" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Nie pytaj ponownie na tym urządzeniu przez 30 dni" + }, "sendVerificationCodeEmailAgain": { "message": "Wyślij ponownie wiadomość z kodem weryfikacyjnym" }, "useAnotherTwoStepMethod": { "message": "Użyj innej metody logowania dwustopniowego" }, + "selectAnotherMethod": { + "message": "Wybierz inną metodę", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Użyj kodu odzyskiwania" + }, "insertYubiKey": { "message": "Włóż klucz YubiKey do portu USB komputera, a następnie dotknij jego przycisku." }, @@ -1383,9 +1450,18 @@ "webAuthnNewTabOpen": { "message": "Otwórz nową kartę" }, + "openInNewTab": { + "message": "Otwórz w nowej karcie" + }, "webAuthnAuthenticate": { "message": "Uwierzytelnianie WebAuthn" }, + "readSecurityKey": { + "message": "Odczytaj klucz bezpieczeństwa" + }, + "awaitingSecurityKeyInteraction": { + "message": "Oczekiwanie na interakcję z kluczem bezpieczeństwa..." + }, "loginUnavailable": { "message": "Logowanie jest niedostępne" }, @@ -1398,6 +1474,9 @@ "twoStepOptions": { "message": "Opcje logowania dwustopniowego" }, + "selectTwoStepLoginMethod": { + "message": "Wybierz metodę logowania dwustopniowego" + }, "recoveryCodeDesc": { "message": "Utraciłeś dostęp do wszystkich swoich mechanizmów dwustopniowego logowania? Użyj kodów odzyskiwania, aby wyłączyć dwustopniowe logowanie na Twoim koncie." }, @@ -2097,6 +2176,15 @@ "vaultTimeoutAction1": { "message": "Akcja po przekroczeniu limitu czasu" }, + "newCustomizationOptionsCalloutTitle": { + "message": "Nowe opcje dostosowywania" + }, + "newCustomizationOptionsCalloutContent": { + "message": "Dostosuj swój sejf dzięki akcjom szybkiego kopiowania, trybowi kompaktowemu i więcej!" + }, + "newCustomizationOptionsCalloutLink": { + "message": "Zobacz wszystkie ustawienia wyglądu" + }, "lock": { "message": "Zablokuj", "description": "Verb form: to make secure or inaccessible by" @@ -2391,7 +2479,16 @@ "atRiskPasswords": { "message": "Zagrożone hasła" }, - "atRiskPasswordsDescSingleOrg": { + "atRiskPasswordDescSingleOrg": { + "message": "$ORGANIZATION$ prosi o zmianę jednego hasła, ponieważ jest ono zagrożone.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + } + }, + "atRiskPasswordsDescSingleOrgPlural": { "message": "$ORGANIZATION$ prosi o zmianę $COUNT$ haseł, ponieważ są one zagrożone.", "placeholders": { "organization": { @@ -2404,7 +2501,7 @@ } } }, - "atRiskPasswordsDescMultiOrg": { + "atRiskPasswordsDescMultiOrgPlural": { "message": "Twoje organizacje proszą o zmianę $COUNT$ haseł, ponieważ są one zagrożone.", "placeholders": { "count": { @@ -2431,6 +2528,36 @@ "changeAtRiskPasswordsFasterDesc": { "message": "Zaktualizuj swoje ustawienia, aby szybko autouzupełniać hasła i generować nowe" }, + "reviewAtRiskLogins": { + "message": "Przejrzyj zagrożone loginy" + }, + "reviewAtRiskPasswords": { + "message": "Przejrzyj zagrożone hasła" + }, + "reviewAtRiskLoginsSlideDesc": { + "message": "Twoje hasła organizacji są zagrożone, ponieważ są słabe, ponownie używane i/lub narażone.", + "description": "Description of the review at-risk login slide on the at-risk password page carousel" + }, + "reviewAtRiskLoginSlideImgAlt": { + "message": "Ilustracja listy loginów, które są zagrożone" + }, + "generatePasswordSlideDesc": { + "message": "Szybko wygeneruj silne, unikalne hasło z menu autouzupełniania Bitwarden na stronie narażonej na ryzyko.", + "description": "Description of the generate password slide on the at-risk password page carousel" + }, + "generatePasswordSlideImgAlt": { + "message": "Ilustracja menu autouzupełniania Bitwarden pokazująca wygenerowane hasło" + }, + "updateInBitwarden": { + "message": "Aktualizacja w Bitwarden" + }, + "updateInBitwardenSlideDesc": { + "message": "Bitwarden poprosi Cię o aktualizację hasła w menedżerze haseł.", + "description": "Description of the update in Bitwarden slide on the at-risk password page carousel" + }, + "updateInBitwardenSlideImgAlt": { + "message": "Ilustracja powiadomienia Bitwardena, która prosi użytkownika o aktualizację logowania" + }, "turnOnAutofill": { "message": "Włącz autouzupełnienie" }, @@ -3983,6 +4110,9 @@ "activeAccount": { "message": "Aktywne konto" }, + "bitwardenAccount": { + "message": "Konto Bitwarden" + }, "availableAccounts": { "message": "Dostępne konta" }, @@ -4181,6 +4311,20 @@ } } }, + "copyFieldValue": { + "message": "Kopiuj $FIELD$, $VALUE$", + "description": "Title for a button that copies a field value to the clipboard.", + "placeholders": { + "field": { + "content": "$1", + "example": "Username" + }, + "value": { + "content": "$2", + "example": "Foo" + } + } + }, "noValuesToCopy": { "message": "Brak wartości do skopiowania" }, @@ -5002,5 +5146,8 @@ }, "updateDesktopAppOrDisableFingerprintDialogMessage": { "message": "Aby używać odblokowywania biometrycznego, zaktualizuj aplikację na komputerze lub wyłącz odblokowywanie odciskiem palca w ustawieniach aplikacji na komputerze." + }, + "changeAtRiskPassword": { + "message": "Zmień hasło zagrożone" } } diff --git a/apps/browser/src/_locales/pt_BR/messages.json b/apps/browser/src/_locales/pt_BR/messages.json index 1e0d2f7241c..17a48bc1e03 100644 --- a/apps/browser/src/_locales/pt_BR/messages.json +++ b/apps/browser/src/_locales/pt_BR/messages.json @@ -80,6 +80,15 @@ "masterPassHint": { "message": "Dica de Senha Mestra (opcional)" }, + "passwordStrengthScore": { + "message": "Pontos fortes da senha: $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "joinOrganization": { "message": "Juntar-se à organização" }, @@ -177,7 +186,7 @@ "message": "Copiar Notas" }, "copy": { - "message": "Copy", + "message": "Copiar", "description": "Copy to clipboard" }, "fill": { @@ -450,16 +459,16 @@ "message": "Gerar frase secreta" }, "passwordGenerated": { - "message": "Password generated" + "message": "Senha gerada" }, "passphraseGenerated": { - "message": "Passphrase generated" + "message": "Senha gerada" }, "usernameGenerated": { - "message": "Username generated" + "message": "Nome de usuário gerado" }, "emailGenerated": { - "message": "Email generated" + "message": "E-mail gerado" }, "regeneratePassword": { "message": "Gerar Nova Senha" @@ -470,22 +479,6 @@ "length": { "message": "Comprimento" }, - "uppercase": { - "message": "Maiúsculas (A-Z)", - "description": "deprecated. Use uppercaseLabel instead." - }, - "lowercase": { - "message": "Minúsculas (a-z)", - "description": "deprecated. Use lowercaseLabel instead." - }, - "numbers": { - "message": "Números (0-9)", - "description": "deprecated. Use numbersLabel instead." - }, - "specialCharacters": { - "message": "Caracteres especiais (!@#$%^&*)", - "description": "deprecated. Use specialCharactersLabel instead." - }, "include": { "message": "Incluir", "description": "Card header for password generator include block" @@ -518,10 +511,6 @@ "message": "Incluir caracteres especiais", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "numWords": { "message": "Número de Palavras" }, @@ -660,14 +649,14 @@ "browserNotSupportClipboard": { "message": "O seu navegador web não suporta cópia para a área de transferência. Em alternativa, copie manualmente." }, - "verifyIdentity": { - "message": "Verificar Identidade" + "verifyYourIdentity": { + "message": "Verifique a sua identidade" }, "weDontRecognizeThisDevice": { - "message": "We don't recognize this device. Enter the code sent to your email to verify your identity." + "message": "Não reconhecemos este dispositivo. Digite o código enviado por e-mail para verificar a sua identidade." }, "continueLoggingIn": { - "message": "Continue logging in" + "message": "Manter sessão" }, "yourVaultIsLocked": { "message": "Seu cofre está trancado. Verifique sua identidade para continuar." @@ -876,6 +865,21 @@ "logInToBitwarden": { "message": "Inicie a sessão no Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "Digite o código enviado por e-mail" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Digite o código a partir do seu autenticador" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Insira sua YubiKey para autenticar" + }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Duo two-step login is required for your account. Follow the steps below to finish logging in." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Follow the steps below to finish logging in." + }, "restartRegistration": { "message": "Reiniciar registro" }, @@ -897,6 +901,9 @@ "no": { "message": "Não" }, + "location": { + "message": "Location" + }, "unexpectedError": { "message": "Ocorreu um erro inesperado." }, @@ -1046,6 +1053,56 @@ "notificationAddSave": { "message": "Salvar" }, + "loginSaveSuccessDetails": { + "message": "$USERNAME$ salvo no Bitwarden.", + "placeholders": { + "username": { + "content": "$1" + } + }, + "description": "Shown to user after login is saved." + }, + "loginUpdatedSuccessDetails": { + "message": "$USERNAME$ atualizado no Bitwarden.", + "placeholders": { + "username": { + "content": "$1" + } + }, + "description": "Shown to user after login is updated." + }, + "saveAsNewLoginAction": { + "message": "Salvar como nova sessão", + "description": "Button text for saving login details as a new entry." + }, + "updateLoginAction": { + "message": "Atualizar sessão", + "description": "Button text for updating an existing login entry." + }, + "saveLoginPrompt": { + "message": "Salvar sessão?", + "description": "Prompt asking the user if they want to save their login details." + }, + "updateLoginPrompt": { + "message": "Atualizar a sessão atual?", + "description": "Prompt asking the user if they want to update an existing login entry." + }, + "loginSaveSuccess": { + "message": "Sessão salva", + "description": "Message displayed when login details are successfully saved." + }, + "loginUpdateSuccess": { + "message": "Sessão atualizada", + "description": "Message displayed when login details are successfully updated." + }, + "saveFailure": { + "message": "Erro ao salvar", + "description": "Error message shown when the system fails to save login details." + }, + "saveFailureDetails": { + "message": "Ops! Não foi possível salvar isso. Tente digitar os detalhes manualmente.", + "description": "Detailed error message shown when saving login details fails." + }, "enableChangedPasswordNotification": { "message": "Pedir para atualizar os dados de login existentes" }, @@ -1365,12 +1422,22 @@ "rememberMe": { "message": "Lembrar de mim" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Não perguntar novamente neste dispositivo por 30 dias" + }, "sendVerificationCodeEmailAgain": { "message": "Enviar código de verificação para o e-mail novamente" }, "useAnotherTwoStepMethod": { "message": "Utilizar outro método de verificação em duas etapas" }, + "selectAnotherMethod": { + "message": "Escolher outro método", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Use seu código de recuperação" + }, "insertYubiKey": { "message": "Insira a sua YubiKey na porta USB do seu computador, e depois toque no botão da mesma." }, @@ -1383,9 +1450,18 @@ "webAuthnNewTabOpen": { "message": "Abrir nova aba" }, + "openInNewTab": { + "message": "Abrir numa nova aba" + }, "webAuthnAuthenticate": { "message": "Autenticar WebAuthn" }, + "readSecurityKey": { + "message": "Ler chave de segurança" + }, + "awaitingSecurityKeyInteraction": { + "message": "Aguardando interação com a chave de segurança..." + }, "loginUnavailable": { "message": "Sessão Indisponível" }, @@ -1398,6 +1474,9 @@ "twoStepOptions": { "message": "Opções de Login em Duas Etapas" }, + "selectTwoStepLoginMethod": { + "message": "Escolher iniciar sessão em duas etapas" + }, "recoveryCodeDesc": { "message": "Perdeu o acesso a todos os seus provedores de duas etapas? Utilize o seu código de recuperação para desativar todos os provedores de duas etapas da sua conta." }, @@ -2069,7 +2148,7 @@ "message": "Gerador de usuário" }, "useThisEmail": { - "message": "Use this email" + "message": "Usar este e-mail" }, "useThisPassword": { "message": "Use esta senha" @@ -2089,7 +2168,7 @@ "description": "This will be used as part of a larger sentence, broken up to include the generator icon. The full sentence will read 'Use the generator [GENERATOR_ICON] to create a strong unique password'" }, "vaultCustomization": { - "message": "Vault customization" + "message": "Personalização do cofre" }, "vaultTimeoutAction": { "message": "Ação de Tempo Limite do Cofre" @@ -2097,6 +2176,15 @@ "vaultTimeoutAction1": { "message": "Ação do tempo" }, + "newCustomizationOptionsCalloutTitle": { + "message": "Novas opções de personalização" + }, + "newCustomizationOptionsCalloutContent": { + "message": "Customize your vault experience with quick copy actions, compact mode, and more!" + }, + "newCustomizationOptionsCalloutLink": { + "message": "Ver todas as configurações de aparência" + }, "lock": { "message": "Bloquear", "description": "Verb form: to make secure or inaccessible by" @@ -2353,10 +2441,10 @@ "description": "A category title describing the concept of web domains" }, "blockedDomains": { - "message": "Blocked domains" + "message": "Domínios bloqueados" }, "learnMoreAboutBlockedDomains": { - "message": "Learn more about blocked domains" + "message": "Saiba mais sobre domínios bloqueados" }, "excludedDomains": { "message": "Domínios Excluídos" @@ -2377,10 +2465,10 @@ "message": "Change this in settings" }, "change": { - "message": "Change" + "message": "Alterar" }, "changeButtonTitle": { - "message": "Change password - $ITEMNAME$", + "message": "Alterar senha - $ITEMNAME$", "placeholders": { "itemname": { "content": "$1", @@ -2389,10 +2477,19 @@ } }, "atRiskPasswords": { - "message": "At-risk passwords" + "message": "Senhas em risco" }, - "atRiskPasswordsDescSingleOrg": { - "message": "$ORGANIZATION$ is requesting you change the $COUNT$ passwords because they are at risk.", + "atRiskPasswordDescSingleOrg": { + "message": "$ORGANIZATION$ is requesting you change one password because it is at-risk.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + } + }, + "atRiskPasswordsDescSingleOrgPlural": { + "message": "$ORGANIZATION$ is requesting you change the $COUNT$ passwords because they are at-risk.", "placeholders": { "organization": { "content": "$1", @@ -2404,8 +2501,8 @@ } } }, - "atRiskPasswordsDescMultiOrg": { - "message": "Your organizations are requesting you change the $COUNT$ passwords because they are at risk.", + "atRiskPasswordsDescMultiOrgPlural": { + "message": "Your organizations are requesting you change the $COUNT$ passwords because they are at-risk.", "placeholders": { "count": { "content": "$1", @@ -2431,14 +2528,44 @@ "changeAtRiskPasswordsFasterDesc": { "message": "Update your settings so you can quickly autofill your passwords and generate new ones" }, + "reviewAtRiskLogins": { + "message": "Review at-risk logins" + }, + "reviewAtRiskPasswords": { + "message": "Review at-risk passwords" + }, + "reviewAtRiskLoginsSlideDesc": { + "message": "Your organization passwords are at-risk because they are weak, reused, and/or exposed.", + "description": "Description of the review at-risk login slide on the at-risk password page carousel" + }, + "reviewAtRiskLoginSlideImgAlt": { + "message": "Illustration of a list of logins that are at-risk" + }, + "generatePasswordSlideDesc": { + "message": "Quickly generate a strong, unique password with the Bitwarden autofill menu on the at-risk site.", + "description": "Description of the generate password slide on the at-risk password page carousel" + }, + "generatePasswordSlideImgAlt": { + "message": "Illustration of the Bitwarden autofill menu displaying a generated password" + }, + "updateInBitwarden": { + "message": "Atualizar no Bitwarden" + }, + "updateInBitwardenSlideDesc": { + "message": "Bitwarden will then prompt you to update the password in the password manager.", + "description": "Description of the update in Bitwarden slide on the at-risk password page carousel" + }, + "updateInBitwardenSlideImgAlt": { + "message": "Illustration of a Bitwarden’s notification prompting the user to update the login" + }, "turnOnAutofill": { - "message": "Turn on autofill" + "message": "Ativar preenchimento automático" }, "turnedOnAutofill": { - "message": "Turned on autofill" + "message": "Desativar preenchimento automático" }, "dismiss": { - "message": "Dismiss" + "message": "Dispensar" }, "websiteItemLabel": { "message": "Site $number$ (URI)", @@ -2900,10 +3027,10 @@ "message": "Erro" }, "decryptionError": { - "message": "Decryption error" + "message": "Erro ao descriptografar" }, "couldNotDecryptVaultItemsBelow": { - "message": "Bitwarden could not decrypt the vault item(s) listed below." + "message": "O Bitwarden não pode descriptografar o(s) item(ns) do cofre listado abaixo." }, "contactCSToAvoidDataLossPart1": { "message": "Contact customer success", @@ -3246,7 +3373,7 @@ "message": "Login iniciado" }, "logInRequestSent": { - "message": "Request sent" + "message": "Pedido enviado" }, "exposedMasterPassword": { "message": "Senha mestra comprometida" @@ -3983,6 +4110,9 @@ "activeAccount": { "message": "Conta ativa" }, + "bitwardenAccount": { + "message": "Conta Bitwarden" + }, "availableAccounts": { "message": "Contas disponíveis" }, @@ -4104,10 +4234,10 @@ "message": "Chave de acesso removida" }, "autofillSuggestions": { - "message": "Autofill suggestions" + "message": "Sugestões de preenchimento automático" }, "itemSuggestions": { - "message": "Suggested items" + "message": "Itens sugeridos" }, "autofillSuggestionsTip": { "message": "Salvar um item de login para este site autopreenchimento" @@ -4181,6 +4311,20 @@ } } }, + "copyFieldValue": { + "message": "Copiar $FIELD$, $VALUE$", + "description": "Title for a button that copies a field value to the clipboard.", + "placeholders": { + "field": { + "content": "$1", + "example": "Username" + }, + "value": { + "content": "$2", + "example": "Foo" + } + } + }, "noValuesToCopy": { "message": "Não há valores para copiar" }, @@ -5002,5 +5146,8 @@ }, "updateDesktopAppOrDisableFingerprintDialogMessage": { "message": "To use biometric unlock, please update your desktop application, or disable fingerprint unlock in the desktop settings." + }, + "changeAtRiskPassword": { + "message": "Change at-risk password" } } diff --git a/apps/browser/src/_locales/pt_PT/messages.json b/apps/browser/src/_locales/pt_PT/messages.json index 28c1e2661df..b0bfda0066e 100644 --- a/apps/browser/src/_locales/pt_PT/messages.json +++ b/apps/browser/src/_locales/pt_PT/messages.json @@ -80,6 +80,15 @@ "masterPassHint": { "message": "Dica da palavra-passe mestra (opcional)" }, + "passwordStrengthScore": { + "message": "Pontuação da força da palavra-passe: $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "joinOrganization": { "message": "Aderir à organização" }, @@ -470,22 +479,6 @@ "length": { "message": "Comprimento" }, - "uppercase": { - "message": "Maiúsculas (A-Z)", - "description": "deprecated. Use uppercaseLabel instead." - }, - "lowercase": { - "message": "Minúsculas (a-z)", - "description": "deprecated. Use lowercaseLabel instead." - }, - "numbers": { - "message": "Números (0-9)", - "description": "deprecated. Use numbersLabel instead." - }, - "specialCharacters": { - "message": "Carateres especiais (!@#$%^&*)", - "description": "deprecated. Use specialCharactersLabel instead." - }, "include": { "message": "Incluir", "description": "Card header for password generator include block" @@ -518,10 +511,6 @@ "message": "Incluir carateres especiais", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "numWords": { "message": "Número de palavras" }, @@ -660,8 +649,8 @@ "browserNotSupportClipboard": { "message": "O seu navegador Web não suporta a cópia fácil da área de transferência. Em vez disso, copie manualmente." }, - "verifyIdentity": { - "message": "Verificar identidade" + "verifyYourIdentity": { + "message": "Verify your identity" }, "weDontRecognizeThisDevice": { "message": "Não reconhecemos este dispositivo. Introduza o código enviado para o seu e-mail para verificar a sua identidade." @@ -876,6 +865,21 @@ "logInToBitwarden": { "message": "Iniciar sessão no Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "Introduza o código enviado para o seu e-mail" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Introduza o código da sua app de autenticação" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Prima a sua YubiKey para se autenticar" + }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "A verificação de dois passos do Duo é necessária para a sua conta. Siga os passos abaixo para concluir o início de sessão." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Siga os passos abaixo para concluir o início de sessão." + }, "restartRegistration": { "message": "Reiniciar registo" }, @@ -897,6 +901,9 @@ "no": { "message": "Não" }, + "location": { + "message": "Localização" + }, "unexpectedError": { "message": "Ocorreu um erro inesperado." }, @@ -1046,6 +1053,56 @@ "notificationAddSave": { "message": "Guardar" }, + "loginSaveSuccessDetails": { + "message": "$USERNAME$ guardado no Bitwarden.", + "placeholders": { + "username": { + "content": "$1" + } + }, + "description": "Shown to user after login is saved." + }, + "loginUpdatedSuccessDetails": { + "message": "$USERNAME$ atualizado no Bitwarden.", + "placeholders": { + "username": { + "content": "$1" + } + }, + "description": "Shown to user after login is updated." + }, + "saveAsNewLoginAction": { + "message": "Guardar como nova credencial", + "description": "Button text for saving login details as a new entry." + }, + "updateLoginAction": { + "message": "Atualizar credencial", + "description": "Button text for updating an existing login entry." + }, + "saveLoginPrompt": { + "message": "Guardar credencial?", + "description": "Prompt asking the user if they want to save their login details." + }, + "updateLoginPrompt": { + "message": "Atualizar credencial existente?", + "description": "Prompt asking the user if they want to update an existing login entry." + }, + "loginSaveSuccess": { + "message": "Credencial guardada", + "description": "Message displayed when login details are successfully saved." + }, + "loginUpdateSuccess": { + "message": "Credencial atualizada", + "description": "Message displayed when login details are successfully updated." + }, + "saveFailure": { + "message": "Erro ao guardar", + "description": "Error message shown when the system fails to save login details." + }, + "saveFailureDetails": { + "message": "Oh não! Não conseguimos guardar isto. Tente introduzir os detalhes manualmente.", + "description": "Detailed error message shown when saving login details fails." + }, "enableChangedPasswordNotification": { "message": "Pedir para atualizar credencial existente" }, @@ -1365,12 +1422,22 @@ "rememberMe": { "message": "Memorizar" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Não voltar a perguntar neste dispositivo durante 30 dias" + }, "sendVerificationCodeEmailAgain": { "message": "Enviar e-mail com o código de verificação novamente" }, "useAnotherTwoStepMethod": { "message": "Utilizar outro método de verificação de dois passos" }, + "selectAnotherMethod": { + "message": "Selecionar outro método", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Utilize o seu código de recuperação" + }, "insertYubiKey": { "message": "Introduza a sua YubiKey na porta USB do seu computador, depois toque no botão da mesma." }, @@ -1383,9 +1450,18 @@ "webAuthnNewTabOpen": { "message": "Abrir novo separador" }, + "openInNewTab": { + "message": "Abrir num novo separador" + }, "webAuthnAuthenticate": { "message": "Autenticar o WebAuthn" }, + "readSecurityKey": { + "message": "Ler chave de segurança" + }, + "awaitingSecurityKeyInteraction": { + "message": "A aguardar interação da chave de segurança..." + }, "loginUnavailable": { "message": "Início de sessão indisponível" }, @@ -1398,6 +1474,9 @@ "twoStepOptions": { "message": "Opções de verificação de dois passos" }, + "selectTwoStepLoginMethod": { + "message": "Selecionar método de verificação de dois passos" + }, "recoveryCodeDesc": { "message": "Perdeu o acesso a todos os seus fornecedores de verificação de dois passos? Utilize o seu código de recuperação para desativar todos os fornecedores de verificação de dois passos da sua conta." }, @@ -2097,6 +2176,15 @@ "vaultTimeoutAction1": { "message": "Ação de tempo limite" }, + "newCustomizationOptionsCalloutTitle": { + "message": "Novas opções de personalização" + }, + "newCustomizationOptionsCalloutContent": { + "message": "Personalize a sua experiência no cofre com ações de cópia rápida, modo compacto e muito mais!" + }, + "newCustomizationOptionsCalloutLink": { + "message": "Ver todas as definições de Aspeto" + }, "lock": { "message": "Bloquear", "description": "Verb form: to make secure or inaccessible by" @@ -2391,7 +2479,16 @@ "atRiskPasswords": { "message": "Palavras-passe em risco" }, - "atRiskPasswordsDescSingleOrg": { + "atRiskPasswordDescSingleOrg": { + "message": "A $ORGANIZATION$ pede-lhe que altere uma palavra-passe por estarem em risco.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + } + }, + "atRiskPasswordsDescSingleOrgPlural": { "message": "A $ORGANIZATION$ pede-lhe que altere as $COUNT$ palavras-passe por estarem em risco.", "placeholders": { "organization": { @@ -2404,7 +2501,7 @@ } } }, - "atRiskPasswordsDescMultiOrg": { + "atRiskPasswordsDescMultiOrgPlural": { "message": "As suas organizações pedem-lhe que altere as $COUNT$ palavras-passe por estarem em risco.", "placeholders": { "count": { @@ -2431,6 +2528,36 @@ "changeAtRiskPasswordsFasterDesc": { "message": "Atualize as suas definições para poder preencher automaticamente as suas palavras-passe e gerar novas palavras-passe" }, + "reviewAtRiskLogins": { + "message": "Rever credenciais em risco" + }, + "reviewAtRiskPasswords": { + "message": "Rever palavras-passe em risco" + }, + "reviewAtRiskLoginsSlideDesc": { + "message": "As palavras-passe da sua organização estão em risco porque são fracas, reutilizadas e/ou expostas.", + "description": "Description of the review at-risk login slide on the at-risk password page carousel" + }, + "reviewAtRiskLoginSlideImgAlt": { + "message": "Ilustração de uma lista de credenciais que estão em risco" + }, + "generatePasswordSlideDesc": { + "message": "Gira rapidamente uma palavra-passe forte e única com o menu de preenchimento automático do Bitwarden no site em risco.", + "description": "Description of the generate password slide on the at-risk password page carousel" + }, + "generatePasswordSlideImgAlt": { + "message": "Ilustração do menu de preenchimento automático do Bitwarden com uma palavra-passe gerada" + }, + "updateInBitwarden": { + "message": "Atualização no Bitwarden" + }, + "updateInBitwardenSlideDesc": { + "message": "O Bitwarden pedir-lhe-á então para atualizar a palavra-passe no gestor de palavras-passe.", + "description": "Description of the update in Bitwarden slide on the at-risk password page carousel" + }, + "updateInBitwardenSlideImgAlt": { + "message": "Ilustração de uma notificação do Bitwarden a pedir ao utilizador que atualize a credencial" + }, "turnOnAutofill": { "message": "Ativar o preenchimento automático" }, @@ -3983,6 +4110,9 @@ "activeAccount": { "message": "Conta ativa" }, + "bitwardenAccount": { + "message": "Conta Bitwarden" + }, "availableAccounts": { "message": "Contas disponíveis" }, @@ -4181,6 +4311,20 @@ } } }, + "copyFieldValue": { + "message": "Copiar $FIELD$, $VALUE$", + "description": "Title for a button that copies a field value to the clipboard.", + "placeholders": { + "field": { + "content": "$1", + "example": "Username" + }, + "value": { + "content": "$2", + "example": "Foo" + } + } + }, "noValuesToCopy": { "message": "Não há valores a copiar" }, @@ -5002,5 +5146,8 @@ }, "updateDesktopAppOrDisableFingerprintDialogMessage": { "message": "Para utilizar o desbloqueio biométrico, atualize a sua aplicação para computador ou desative o desbloqueio por impressão digital nas definições dessa mesma app." + }, + "changeAtRiskPassword": { + "message": "Alterar palavra-passe em risco" } } diff --git a/apps/browser/src/_locales/ro/messages.json b/apps/browser/src/_locales/ro/messages.json index c3291112629..e25e8dae1b6 100644 --- a/apps/browser/src/_locales/ro/messages.json +++ b/apps/browser/src/_locales/ro/messages.json @@ -80,6 +80,15 @@ "masterPassHint": { "message": "Indiciu pentru parola principală (opțional)" }, + "passwordStrengthScore": { + "message": "Password strength score $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "joinOrganization": { "message": "Alăturați-vă organizației" }, @@ -470,22 +479,6 @@ "length": { "message": "Lungime" }, - "uppercase": { - "message": "Litere mari (A-Z)", - "description": "deprecated. Use uppercaseLabel instead." - }, - "lowercase": { - "message": "Litere mici (a-z)", - "description": "deprecated. Use lowercaseLabel instead." - }, - "numbers": { - "message": "Numere (0-9)", - "description": "deprecated. Use numbersLabel instead." - }, - "specialCharacters": { - "message": "Caractere speciale (!@#$%^&*)", - "description": "deprecated. Use specialCharactersLabel instead." - }, "include": { "message": "Include", "description": "Card header for password generator include block" @@ -518,10 +511,6 @@ "message": "Include special characters", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "numWords": { "message": "Număr de cuvinte" }, @@ -660,8 +649,8 @@ "browserNotSupportClipboard": { "message": "Browserul dvs. nu acceptă copierea în clipboard. Transcrieți datele manual." }, - "verifyIdentity": { - "message": "Verificare identitate" + "verifyYourIdentity": { + "message": "Verify your identity" }, "weDontRecognizeThisDevice": { "message": "We don't recognize this device. Enter the code sent to your email to verify your identity." @@ -876,6 +865,21 @@ "logInToBitwarden": { "message": "Log in to Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "Enter the code sent to your email" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Enter the code from your authenticator app" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Press your YubiKey to authenticate" + }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Duo two-step login is required for your account. Follow the steps below to finish logging in." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Follow the steps below to finish logging in." + }, "restartRegistration": { "message": "Reporniți înregistrarea" }, @@ -897,6 +901,9 @@ "no": { "message": "Nu" }, + "location": { + "message": "Location" + }, "unexpectedError": { "message": "A survenit o eroare neașteptată." }, @@ -1046,6 +1053,56 @@ "notificationAddSave": { "message": "Salvare" }, + "loginSaveSuccessDetails": { + "message": "$USERNAME$ saved to Bitwarden.", + "placeholders": { + "username": { + "content": "$1" + } + }, + "description": "Shown to user after login is saved." + }, + "loginUpdatedSuccessDetails": { + "message": "$USERNAME$ updated in Bitwarden.", + "placeholders": { + "username": { + "content": "$1" + } + }, + "description": "Shown to user after login is updated." + }, + "saveAsNewLoginAction": { + "message": "Save as new login", + "description": "Button text for saving login details as a new entry." + }, + "updateLoginAction": { + "message": "Update login", + "description": "Button text for updating an existing login entry." + }, + "saveLoginPrompt": { + "message": "Save login?", + "description": "Prompt asking the user if they want to save their login details." + }, + "updateLoginPrompt": { + "message": "Update existing login?", + "description": "Prompt asking the user if they want to update an existing login entry." + }, + "loginSaveSuccess": { + "message": "Login saved", + "description": "Message displayed when login details are successfully saved." + }, + "loginUpdateSuccess": { + "message": "Login updated", + "description": "Message displayed when login details are successfully updated." + }, + "saveFailure": { + "message": "Error saving", + "description": "Error message shown when the system fails to save login details." + }, + "saveFailureDetails": { + "message": "Oh no! We couldn't save this. Try entering the details manually.", + "description": "Detailed error message shown when saving login details fails." + }, "enableChangedPasswordNotification": { "message": "Solicitați actualizarea autentificării existente" }, @@ -1365,12 +1422,22 @@ "rememberMe": { "message": "Memorare autentificare" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Don't ask again on this device for 30 days" + }, "sendVerificationCodeEmailAgain": { "message": "Retrimitere e-mail cu codul de verificare" }, "useAnotherTwoStepMethod": { "message": "Utilizare de metodă diferită de autentificare în două etape" }, + "selectAnotherMethod": { + "message": "Select another method", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Use your recovery code" + }, "insertYubiKey": { "message": "Introduceți YubiKey în portul USB al calculatorului apoi apăsați butonul acestuia." }, @@ -1383,9 +1450,18 @@ "webAuthnNewTabOpen": { "message": "Deschideți o filă nouă" }, + "openInNewTab": { + "message": "Open in new tab" + }, "webAuthnAuthenticate": { "message": "Autentificare WebAuthn" }, + "readSecurityKey": { + "message": "Read security key" + }, + "awaitingSecurityKeyInteraction": { + "message": "Awaiting security key interaction..." + }, "loginUnavailable": { "message": "Autentificare indisponibilă" }, @@ -1398,6 +1474,9 @@ "twoStepOptions": { "message": "Opțiuni de autentificare în două etape" }, + "selectTwoStepLoginMethod": { + "message": "Select two-step login method" + }, "recoveryCodeDesc": { "message": "Ați pierdut accesul la toți furnizorii de autentificare în două etape? Utilizați codul de recuperare pentru a dezactiva toți acești furnizori din contul dvs." }, @@ -2097,6 +2176,15 @@ "vaultTimeoutAction1": { "message": "Timeout action" }, + "newCustomizationOptionsCalloutTitle": { + "message": "New customization options" + }, + "newCustomizationOptionsCalloutContent": { + "message": "Customize your vault experience with quick copy actions, compact mode, and more!" + }, + "newCustomizationOptionsCalloutLink": { + "message": "View all Appearance settings" + }, "lock": { "message": "Blocare", "description": "Verb form: to make secure or inaccessible by" @@ -2391,8 +2479,17 @@ "atRiskPasswords": { "message": "At-risk passwords" }, - "atRiskPasswordsDescSingleOrg": { - "message": "$ORGANIZATION$ is requesting you change the $COUNT$ passwords because they are at risk.", + "atRiskPasswordDescSingleOrg": { + "message": "$ORGANIZATION$ is requesting you change one password because it is at-risk.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + } + }, + "atRiskPasswordsDescSingleOrgPlural": { + "message": "$ORGANIZATION$ is requesting you change the $COUNT$ passwords because they are at-risk.", "placeholders": { "organization": { "content": "$1", @@ -2404,8 +2501,8 @@ } } }, - "atRiskPasswordsDescMultiOrg": { - "message": "Your organizations are requesting you change the $COUNT$ passwords because they are at risk.", + "atRiskPasswordsDescMultiOrgPlural": { + "message": "Your organizations are requesting you change the $COUNT$ passwords because they are at-risk.", "placeholders": { "count": { "content": "$1", @@ -2431,6 +2528,36 @@ "changeAtRiskPasswordsFasterDesc": { "message": "Update your settings so you can quickly autofill your passwords and generate new ones" }, + "reviewAtRiskLogins": { + "message": "Review at-risk logins" + }, + "reviewAtRiskPasswords": { + "message": "Review at-risk passwords" + }, + "reviewAtRiskLoginsSlideDesc": { + "message": "Your organization passwords are at-risk because they are weak, reused, and/or exposed.", + "description": "Description of the review at-risk login slide on the at-risk password page carousel" + }, + "reviewAtRiskLoginSlideImgAlt": { + "message": "Illustration of a list of logins that are at-risk" + }, + "generatePasswordSlideDesc": { + "message": "Quickly generate a strong, unique password with the Bitwarden autofill menu on the at-risk site.", + "description": "Description of the generate password slide on the at-risk password page carousel" + }, + "generatePasswordSlideImgAlt": { + "message": "Illustration of the Bitwarden autofill menu displaying a generated password" + }, + "updateInBitwarden": { + "message": "Update in Bitwarden" + }, + "updateInBitwardenSlideDesc": { + "message": "Bitwarden will then prompt you to update the password in the password manager.", + "description": "Description of the update in Bitwarden slide on the at-risk password page carousel" + }, + "updateInBitwardenSlideImgAlt": { + "message": "Illustration of a Bitwarden’s notification prompting the user to update the login" + }, "turnOnAutofill": { "message": "Turn on autofill" }, @@ -3983,6 +4110,9 @@ "activeAccount": { "message": "Active account" }, + "bitwardenAccount": { + "message": "Bitwarden account" + }, "availableAccounts": { "message": "Available accounts" }, @@ -4181,6 +4311,20 @@ } } }, + "copyFieldValue": { + "message": "Copy $FIELD$, $VALUE$", + "description": "Title for a button that copies a field value to the clipboard.", + "placeholders": { + "field": { + "content": "$1", + "example": "Username" + }, + "value": { + "content": "$2", + "example": "Foo" + } + } + }, "noValuesToCopy": { "message": "No values to copy" }, @@ -5002,5 +5146,8 @@ }, "updateDesktopAppOrDisableFingerprintDialogMessage": { "message": "To use biometric unlock, please update your desktop application, or disable fingerprint unlock in the desktop settings." + }, + "changeAtRiskPassword": { + "message": "Change at-risk password" } } diff --git a/apps/browser/src/_locales/ru/messages.json b/apps/browser/src/_locales/ru/messages.json index f1fadb1af0e..591eaabb9aa 100644 --- a/apps/browser/src/_locales/ru/messages.json +++ b/apps/browser/src/_locales/ru/messages.json @@ -80,6 +80,15 @@ "masterPassHint": { "message": "Подсказка к мастер-паролю (необяз.)" }, + "passwordStrengthScore": { + "message": "Оценка надежности пароля $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "joinOrganization": { "message": "Присоединиться к организации" }, @@ -470,22 +479,6 @@ "length": { "message": "Длина" }, - "uppercase": { - "message": "Прописные буквы (A-Z)", - "description": "deprecated. Use uppercaseLabel instead." - }, - "lowercase": { - "message": "Строчные буквы (a-z)", - "description": "deprecated. Use lowercaseLabel instead." - }, - "numbers": { - "message": "Цифры (0-9)", - "description": "deprecated. Use numbersLabel instead." - }, - "specialCharacters": { - "message": "Специальные символы (!@#$%^&*)", - "description": "deprecated. Use specialCharactersLabel instead." - }, "include": { "message": "Включить", "description": "Card header for password generator include block" @@ -518,10 +511,6 @@ "message": "Включить специальные символы", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "numWords": { "message": "Количество слов" }, @@ -660,8 +649,8 @@ "browserNotSupportClipboard": { "message": "Ваш браузер не поддерживает копирование данных в буфер обмена. Скопируйте вручную." }, - "verifyIdentity": { - "message": "Подтвердить личность" + "verifyYourIdentity": { + "message": "Подтвердите вашу личность" }, "weDontRecognizeThisDevice": { "message": "Мы не распознали это устройство. Введите код, отправленный на ваш email, чтобы подтвердить вашу личность." @@ -876,6 +865,21 @@ "logInToBitwarden": { "message": "Войти в Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "Введите код, отправленный на ваш email" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Введите код из приложения-аутентификатора" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Нажмите на YubiKey для аутентификации" + }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Duo two-step login is required for your account. Follow the steps below to finish logging in." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Следуйте указаниям ниже, чтобы завершить авторизацию." + }, "restartRegistration": { "message": "Перезапустить регистрацию" }, @@ -897,6 +901,9 @@ "no": { "message": "Нет" }, + "location": { + "message": "Местоположение" + }, "unexpectedError": { "message": "Произошла непредвиденная ошибка." }, @@ -1046,6 +1053,56 @@ "notificationAddSave": { "message": "Сохранить" }, + "loginSaveSuccessDetails": { + "message": "$USERNAME$ сохранен в Bitwarden.", + "placeholders": { + "username": { + "content": "$1" + } + }, + "description": "Shown to user after login is saved." + }, + "loginUpdatedSuccessDetails": { + "message": "$USERNAME$ обновлен в Bitwarden.", + "placeholders": { + "username": { + "content": "$1" + } + }, + "description": "Shown to user after login is updated." + }, + "saveAsNewLoginAction": { + "message": "Сохранить как новый логин", + "description": "Button text for saving login details as a new entry." + }, + "updateLoginAction": { + "message": "Обновить логин", + "description": "Button text for updating an existing login entry." + }, + "saveLoginPrompt": { + "message": "Сохранить логин?", + "description": "Prompt asking the user if they want to save their login details." + }, + "updateLoginPrompt": { + "message": "Обновить существующий логин?", + "description": "Prompt asking the user if they want to update an existing login entry." + }, + "loginSaveSuccess": { + "message": "Логин сохранен", + "description": "Message displayed when login details are successfully saved." + }, + "loginUpdateSuccess": { + "message": "Логин обновлен", + "description": "Message displayed when login details are successfully updated." + }, + "saveFailure": { + "message": "Ошибка при сохранении", + "description": "Error message shown when the system fails to save login details." + }, + "saveFailureDetails": { + "message": "О нет! Мы не смогли сохранить это. Попробуйте ввести данные вручную.", + "description": "Detailed error message shown when saving login details fails." + }, "enableChangedPasswordNotification": { "message": "Спрашивать при обновлении существующего логина" }, @@ -1365,12 +1422,22 @@ "rememberMe": { "message": "Запомнить меня" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Не спрашивать на этом устройстве в течение 30 дней" + }, "sendVerificationCodeEmailAgain": { "message": "Отправить код подтверждения еще раз" }, "useAnotherTwoStepMethod": { "message": "Использовать другой метод двухэтапной аутентификации" }, + "selectAnotherMethod": { + "message": "Выбрать другой способ", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Использовать код восстановления" + }, "insertYubiKey": { "message": "Вставьте свой YubiKey в USB-порт компьютера и нажмите его кнопку." }, @@ -1383,9 +1450,18 @@ "webAuthnNewTabOpen": { "message": "Открыть новую вкладку" }, + "openInNewTab": { + "message": "Открыть в новой вкладке" + }, "webAuthnAuthenticate": { "message": "Аутентификация WebAutn" }, + "readSecurityKey": { + "message": "Считать ключ безопасности" + }, + "awaitingSecurityKeyInteraction": { + "message": "Ожидание взаимодействия с ключом безопасности..." + }, "loginUnavailable": { "message": "Вход недоступен" }, @@ -1398,6 +1474,9 @@ "twoStepOptions": { "message": "Настройки двухэтапной аутентификации" }, + "selectTwoStepLoginMethod": { + "message": "Выбрать другой метод двухэтапной аутентификации" + }, "recoveryCodeDesc": { "message": "Потеряли доступ ко всем вариантам двухэтапной аутентификации? Используйте код восстановления, чтобы отключить двухэтапную аутентификацию для вашей учетной записи." }, @@ -2097,6 +2176,15 @@ "vaultTimeoutAction1": { "message": "Тайм-аут действия" }, + "newCustomizationOptionsCalloutTitle": { + "message": "Новые возможности настроек" + }, + "newCustomizationOptionsCalloutContent": { + "message": "Настройте работу с хранилищем с помощью действий быстрого копирования, компактного режима и многого другого!" + }, + "newCustomizationOptionsCalloutLink": { + "message": "Посмотреть все настройки внешнего вида" + }, "lock": { "message": "Блокировка", "description": "Verb form: to make secure or inaccessible by" @@ -2391,8 +2479,17 @@ "atRiskPasswords": { "message": "Пароли, подверженные риску" }, - "atRiskPasswordsDescSingleOrg": { - "message": "$ORGANIZATION$ is requesting you change the $COUNT$ passwords because they are at risk.", + "atRiskPasswordDescSingleOrg": { + "message": "$ORGANIZATION$ запрашивает смену одного пароля, так как он находится под угрозой.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + } + }, + "atRiskPasswordsDescSingleOrgPlural": { + "message": "$ORGANIZATION$ запрашивает смену $COUNT$ паролей, так как они находятся под угрозой.", "placeholders": { "organization": { "content": "$1", @@ -2404,8 +2501,8 @@ } } }, - "atRiskPasswordsDescMultiOrg": { - "message": "Your organizations are requesting you change the $COUNT$ passwords because they are at risk.", + "atRiskPasswordsDescMultiOrgPlural": { + "message": "Ваша организация запрашивает смену $COUNT$ паролей, так как они находятся под угрозой.", "placeholders": { "count": { "content": "$1", @@ -2431,6 +2528,36 @@ "changeAtRiskPasswordsFasterDesc": { "message": "Update your settings so you can quickly autofill your passwords and generate new ones" }, + "reviewAtRiskLogins": { + "message": "Обзор логинов, находящихся под угрозой" + }, + "reviewAtRiskPasswords": { + "message": "Обзор паролей, находящихся под угрозой" + }, + "reviewAtRiskLoginsSlideDesc": { + "message": "Пароли вашей организации находятся под угрозой, потому что они слабые, повторно используются и/или раскрыты.", + "description": "Description of the review at-risk login slide on the at-risk password page carousel" + }, + "reviewAtRiskLoginSlideImgAlt": { + "message": "Иллюстрация списка логинов, которые находятся под угрозой" + }, + "generatePasswordSlideDesc": { + "message": "Быстро сгенерируйте надежный уникальный пароль с помощью меню автозаполнения Bitwarden на сайте, находящемся под угрозой.", + "description": "Description of the generate password slide on the at-risk password page carousel" + }, + "generatePasswordSlideImgAlt": { + "message": "Иллюстрация меню автозаполнения Bitwarden, отображающего сгенерированный пароль" + }, + "updateInBitwarden": { + "message": "Обновить в Bitwarden" + }, + "updateInBitwardenSlideDesc": { + "message": "После этого Bitwarden предложит вам обновить пароль в менеджере паролей.", + "description": "Description of the update in Bitwarden slide on the at-risk password page carousel" + }, + "updateInBitwardenSlideImgAlt": { + "message": "Иллюстрация уведомления Bitwarden, предлагающего пользователю обновить логин" + }, "turnOnAutofill": { "message": "Turn on autofill" }, @@ -3983,6 +4110,9 @@ "activeAccount": { "message": "Активный аккаунт" }, + "bitwardenAccount": { + "message": "Аккаунт Bitwarden" + }, "availableAccounts": { "message": "Доступные аккаунты" }, @@ -4181,6 +4311,20 @@ } } }, + "copyFieldValue": { + "message": "Скопировать $FIELD$, $VALUE$", + "description": "Title for a button that copies a field value to the clipboard.", + "placeholders": { + "field": { + "content": "$1", + "example": "Username" + }, + "value": { + "content": "$2", + "example": "Foo" + } + } + }, "noValuesToCopy": { "message": "Нет значений для копирования" }, @@ -5002,5 +5146,8 @@ }, "updateDesktopAppOrDisableFingerprintDialogMessage": { "message": "Чтобы использовать биометрическую разблокировку, обновите приложение для компьютера или отключите разблокировку по отпечатку пальца в настройках компьютера." + }, + "changeAtRiskPassword": { + "message": "Изменить пароль, находящийся под угрозой" } } diff --git a/apps/browser/src/_locales/si/messages.json b/apps/browser/src/_locales/si/messages.json index dfab38fd25d..99f3747b172 100644 --- a/apps/browser/src/_locales/si/messages.json +++ b/apps/browser/src/_locales/si/messages.json @@ -80,6 +80,15 @@ "masterPassHint": { "message": "ප්රධාන මුරපදය ඉඟියක් (විකල්ප)" }, + "passwordStrengthScore": { + "message": "Password strength score $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "joinOrganization": { "message": "Join organization" }, @@ -470,22 +479,6 @@ "length": { "message": "දිග" }, - "uppercase": { - "message": "Uppercase (A-Z)", - "description": "deprecated. Use uppercaseLabel instead." - }, - "lowercase": { - "message": "Lowercase (a-z)", - "description": "deprecated. Use lowercaseLabel instead." - }, - "numbers": { - "message": "Numbers (0-9)", - "description": "deprecated. Use numbersLabel instead." - }, - "specialCharacters": { - "message": "Special characters (!@#$%^&*)", - "description": "deprecated. Use specialCharactersLabel instead." - }, "include": { "message": "Include", "description": "Card header for password generator include block" @@ -518,10 +511,6 @@ "message": "Include special characters", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "numWords": { "message": "වචන ගණන" }, @@ -660,8 +649,8 @@ "browserNotSupportClipboard": { "message": "ඔබේ වෙබ් බ්රව්සරය පහසු පසුරු පුවරුවක් පිටපත් කිරීමට සහාය නොදක්වයි. ඒ වෙනුවට එය අතින් පිටපත් කරන්න." }, - "verifyIdentity": { - "message": "අනන්යතාවය සත්යාපනය කරන්න" + "verifyYourIdentity": { + "message": "Verify your identity" }, "weDontRecognizeThisDevice": { "message": "We don't recognize this device. Enter the code sent to your email to verify your identity." @@ -876,6 +865,21 @@ "logInToBitwarden": { "message": "Log in to Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "Enter the code sent to your email" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Enter the code from your authenticator app" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Press your YubiKey to authenticate" + }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Duo two-step login is required for your account. Follow the steps below to finish logging in." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Follow the steps below to finish logging in." + }, "restartRegistration": { "message": "Restart registration" }, @@ -897,6 +901,9 @@ "no": { "message": "නැත" }, + "location": { + "message": "Location" + }, "unexpectedError": { "message": "අනපේක්ෂිත දෝෂයක් සිදුවී ඇත." }, @@ -1046,6 +1053,56 @@ "notificationAddSave": { "message": "සුරකින්න" }, + "loginSaveSuccessDetails": { + "message": "$USERNAME$ saved to Bitwarden.", + "placeholders": { + "username": { + "content": "$1" + } + }, + "description": "Shown to user after login is saved." + }, + "loginUpdatedSuccessDetails": { + "message": "$USERNAME$ updated in Bitwarden.", + "placeholders": { + "username": { + "content": "$1" + } + }, + "description": "Shown to user after login is updated." + }, + "saveAsNewLoginAction": { + "message": "Save as new login", + "description": "Button text for saving login details as a new entry." + }, + "updateLoginAction": { + "message": "Update login", + "description": "Button text for updating an existing login entry." + }, + "saveLoginPrompt": { + "message": "Save login?", + "description": "Prompt asking the user if they want to save their login details." + }, + "updateLoginPrompt": { + "message": "Update existing login?", + "description": "Prompt asking the user if they want to update an existing login entry." + }, + "loginSaveSuccess": { + "message": "Login saved", + "description": "Message displayed when login details are successfully saved." + }, + "loginUpdateSuccess": { + "message": "Login updated", + "description": "Message displayed when login details are successfully updated." + }, + "saveFailure": { + "message": "Error saving", + "description": "Error message shown when the system fails to save login details." + }, + "saveFailureDetails": { + "message": "Oh no! We couldn't save this. Try entering the details manually.", + "description": "Detailed error message shown when saving login details fails." + }, "enableChangedPasswordNotification": { "message": "Ask to update existing login" }, @@ -1365,12 +1422,22 @@ "rememberMe": { "message": "මාව මතක තබා ගන්න" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Don't ask again on this device for 30 days" + }, "sendVerificationCodeEmailAgain": { "message": "සත්යාපන කේතය නැවත විද්යුත් තැපෑල යවන්න" }, "useAnotherTwoStepMethod": { "message": "තවත් පියවර දෙකක පිවිසුම් ක්රමයක් භාවිතා කරන්න" }, + "selectAnotherMethod": { + "message": "Select another method", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Use your recovery code" + }, "insertYubiKey": { "message": "ඔබේ පරිගණකයේ USB පෝට් එකට ඔබගේ YuBiKey ඇතුල් කරන්න, ඉන්පසු එහි බොත්තම ස්පර්ශ කරන්න." }, @@ -1383,9 +1450,18 @@ "webAuthnNewTabOpen": { "message": "නව ටැබය විවෘත කරන්න" }, + "openInNewTab": { + "message": "Open in new tab" + }, "webAuthnAuthenticate": { "message": "සත්‍යවත් වෙබ් සත්‍යවත් කරන්න" }, + "readSecurityKey": { + "message": "Read security key" + }, + "awaitingSecurityKeyInteraction": { + "message": "Awaiting security key interaction..." + }, "loginUnavailable": { "message": "ලොගින් වන්න ලබාගත නොහැක" }, @@ -1398,6 +1474,9 @@ "twoStepOptions": { "message": "ද්වි-පියවර ලොගින් වන්න විකල්ප" }, + "selectTwoStepLoginMethod": { + "message": "Select two-step login method" + }, "recoveryCodeDesc": { "message": "ඔබගේ ද්වි-සාධක සපයන්නන් සියලු ප්රවේශ අහිමි? ඔබගේ ගිණුමෙන් සියලුම ද්වි-සාධක සපයන්නන් අක්රීය කිරීමට ඔබගේ ප්රතිසාධන කේතය භාවිතා කරන්න." }, @@ -2097,6 +2176,15 @@ "vaultTimeoutAction1": { "message": "Timeout action" }, + "newCustomizationOptionsCalloutTitle": { + "message": "New customization options" + }, + "newCustomizationOptionsCalloutContent": { + "message": "Customize your vault experience with quick copy actions, compact mode, and more!" + }, + "newCustomizationOptionsCalloutLink": { + "message": "View all Appearance settings" + }, "lock": { "message": "අගුල", "description": "Verb form: to make secure or inaccessible by" @@ -2391,8 +2479,17 @@ "atRiskPasswords": { "message": "At-risk passwords" }, - "atRiskPasswordsDescSingleOrg": { - "message": "$ORGANIZATION$ is requesting you change the $COUNT$ passwords because they are at risk.", + "atRiskPasswordDescSingleOrg": { + "message": "$ORGANIZATION$ is requesting you change one password because it is at-risk.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + } + }, + "atRiskPasswordsDescSingleOrgPlural": { + "message": "$ORGANIZATION$ is requesting you change the $COUNT$ passwords because they are at-risk.", "placeholders": { "organization": { "content": "$1", @@ -2404,8 +2501,8 @@ } } }, - "atRiskPasswordsDescMultiOrg": { - "message": "Your organizations are requesting you change the $COUNT$ passwords because they are at risk.", + "atRiskPasswordsDescMultiOrgPlural": { + "message": "Your organizations are requesting you change the $COUNT$ passwords because they are at-risk.", "placeholders": { "count": { "content": "$1", @@ -2431,6 +2528,36 @@ "changeAtRiskPasswordsFasterDesc": { "message": "Update your settings so you can quickly autofill your passwords and generate new ones" }, + "reviewAtRiskLogins": { + "message": "Review at-risk logins" + }, + "reviewAtRiskPasswords": { + "message": "Review at-risk passwords" + }, + "reviewAtRiskLoginsSlideDesc": { + "message": "Your organization passwords are at-risk because they are weak, reused, and/or exposed.", + "description": "Description of the review at-risk login slide on the at-risk password page carousel" + }, + "reviewAtRiskLoginSlideImgAlt": { + "message": "Illustration of a list of logins that are at-risk" + }, + "generatePasswordSlideDesc": { + "message": "Quickly generate a strong, unique password with the Bitwarden autofill menu on the at-risk site.", + "description": "Description of the generate password slide on the at-risk password page carousel" + }, + "generatePasswordSlideImgAlt": { + "message": "Illustration of the Bitwarden autofill menu displaying a generated password" + }, + "updateInBitwarden": { + "message": "Update in Bitwarden" + }, + "updateInBitwardenSlideDesc": { + "message": "Bitwarden will then prompt you to update the password in the password manager.", + "description": "Description of the update in Bitwarden slide on the at-risk password page carousel" + }, + "updateInBitwardenSlideImgAlt": { + "message": "Illustration of a Bitwarden’s notification prompting the user to update the login" + }, "turnOnAutofill": { "message": "Turn on autofill" }, @@ -3983,6 +4110,9 @@ "activeAccount": { "message": "Active account" }, + "bitwardenAccount": { + "message": "Bitwarden account" + }, "availableAccounts": { "message": "Available accounts" }, @@ -4181,6 +4311,20 @@ } } }, + "copyFieldValue": { + "message": "Copy $FIELD$, $VALUE$", + "description": "Title for a button that copies a field value to the clipboard.", + "placeholders": { + "field": { + "content": "$1", + "example": "Username" + }, + "value": { + "content": "$2", + "example": "Foo" + } + } + }, "noValuesToCopy": { "message": "No values to copy" }, @@ -5002,5 +5146,8 @@ }, "updateDesktopAppOrDisableFingerprintDialogMessage": { "message": "To use biometric unlock, please update your desktop application, or disable fingerprint unlock in the desktop settings." + }, + "changeAtRiskPassword": { + "message": "Change at-risk password" } } diff --git a/apps/browser/src/_locales/sk/messages.json b/apps/browser/src/_locales/sk/messages.json index 512f18b697c..d8fc1d8049b 100644 --- a/apps/browser/src/_locales/sk/messages.json +++ b/apps/browser/src/_locales/sk/messages.json @@ -80,6 +80,15 @@ "masterPassHint": { "message": "Nápoveď k hlavnému heslu (voliteľné)" }, + "passwordStrengthScore": { + "message": "Sila hesla $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "joinOrganization": { "message": "Pripojte sa k organizácii" }, @@ -470,22 +479,6 @@ "length": { "message": "Dĺžka" }, - "uppercase": { - "message": "Veľké písmená (A-Z)", - "description": "deprecated. Use uppercaseLabel instead." - }, - "lowercase": { - "message": "Malé písmená (a-z)", - "description": "deprecated. Use lowercaseLabel instead." - }, - "numbers": { - "message": "Čísla (0-9)", - "description": "deprecated. Use numbersLabel instead." - }, - "specialCharacters": { - "message": "Špeciálne znaky (!@#$%^&*)", - "description": "deprecated. Use specialCharactersLabel instead." - }, "include": { "message": "Zahrnúť", "description": "Card header for password generator include block" @@ -518,10 +511,6 @@ "message": "Zahrnúť špeciálne znaky", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "numWords": { "message": "Počet slov" }, @@ -660,8 +649,8 @@ "browserNotSupportClipboard": { "message": "Váš webový prehliadač nepodporuje automatické kopírovanie do schránky. Kopírujte manuálne." }, - "verifyIdentity": { - "message": "Overiť identitu" + "verifyYourIdentity": { + "message": "Overte svoju totožnosť" }, "weDontRecognizeThisDevice": { "message": "Toto zariadenie nepoznáme. Na overenie vašej totožnosti zadajte kód, ktorý bol zaslaný na váš e-mail." @@ -876,6 +865,21 @@ "logInToBitwarden": { "message": "Prihlásenie do Bitwardenu" }, + "enterTheCodeSentToYourEmail": { + "message": "Zadajte kód zaslaný na váš e-mail" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Zadajte kód z overovacej aplikácie" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Stlačte YubiKey na overenie" + }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Pre váš účet sa vyžaduje dvojstupňové prihlásenie Duo. Na dokončenie prihlásenie nasledujte pokyny." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Na dokončenie prihlásenia postupujte podľa pokynov." + }, "restartRegistration": { "message": "Zopakovať registráciu" }, @@ -897,6 +901,9 @@ "no": { "message": "Nie" }, + "location": { + "message": "Poloha" + }, "unexpectedError": { "message": "Vyskytla sa neočakávaná chyba." }, @@ -1046,6 +1053,56 @@ "notificationAddSave": { "message": "Uložiť" }, + "loginSaveSuccessDetails": { + "message": "$USERNAME$ uložené do Bitwarden.", + "placeholders": { + "username": { + "content": "$1" + } + }, + "description": "Shown to user after login is saved." + }, + "loginUpdatedSuccessDetails": { + "message": "$USERNAME$ aktualizované v Bitwarden.", + "placeholders": { + "username": { + "content": "$1" + } + }, + "description": "Shown to user after login is updated." + }, + "saveAsNewLoginAction": { + "message": "Uložiť ako nové prihlasovacie údaje", + "description": "Button text for saving login details as a new entry." + }, + "updateLoginAction": { + "message": "Aktualizovať prihlasovacie údaje", + "description": "Button text for updating an existing login entry." + }, + "saveLoginPrompt": { + "message": "Uložiť prihlasovacie údaje?", + "description": "Prompt asking the user if they want to save their login details." + }, + "updateLoginPrompt": { + "message": "Aktualizovať existujúce prihlasovacie údaje?", + "description": "Prompt asking the user if they want to update an existing login entry." + }, + "loginSaveSuccess": { + "message": "Prihlasovacie údaje uložené", + "description": "Message displayed when login details are successfully saved." + }, + "loginUpdateSuccess": { + "message": "Prihlasovacie údaje aktualizované", + "description": "Message displayed when login details are successfully updated." + }, + "saveFailure": { + "message": "Chyba pri ukladaní", + "description": "Error message shown when the system fails to save login details." + }, + "saveFailureDetails": { + "message": "Ale nie! Nepodarilo sa nám to uložiť. Skúste zadať údaje manuálne.", + "description": "Detailed error message shown when saving login details fails." + }, "enableChangedPasswordNotification": { "message": "Požiadať o aktualizáciu existujúceho prihlasovania" }, @@ -1365,12 +1422,22 @@ "rememberMe": { "message": "Zapamätať si ma" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Nepýtať sa znova na tomto zariadení 30 dní" + }, "sendVerificationCodeEmailAgain": { "message": "Znovu zaslať overovací kód emailom" }, "useAnotherTwoStepMethod": { "message": "Použiť inú dvojstupňovú metódu prihlásenia" }, + "selectAnotherMethod": { + "message": "Vyberte iný spôsob", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Použiť obnovovací kód" + }, "insertYubiKey": { "message": "Vložte váš YubiKey do USB portu počítača a stlačte jeho tlačidlo." }, @@ -1383,9 +1450,18 @@ "webAuthnNewTabOpen": { "message": "Otvoriť v novej karte" }, + "openInNewTab": { + "message": "Otvoriť v novej karte" + }, "webAuthnAuthenticate": { "message": "Overiť cez WebAuthn" }, + "readSecurityKey": { + "message": "Prečítať bezpečnostný kľúč" + }, + "awaitingSecurityKeyInteraction": { + "message": "Čaká sa na interakciu s bezpečnostným kľúčom..." + }, "loginUnavailable": { "message": "Prihlásenie nie je dispozícii" }, @@ -1398,6 +1474,9 @@ "twoStepOptions": { "message": "Možnosti dvojstupňového prihlásenia" }, + "selectTwoStepLoginMethod": { + "message": "Vyberte metódu dvojstupňového prihlásenia" + }, "recoveryCodeDesc": { "message": "Stratili ste prístup ku všetkým vašim dvojstupňovým poskytovateľom? Použite váš záchranný kód pre vypnutie všetkých poskytovateľov vo vašom účte." }, @@ -2097,6 +2176,15 @@ "vaultTimeoutAction1": { "message": "Akcia pri vypršaní časového limitu" }, + "newCustomizationOptionsCalloutTitle": { + "message": "Nové možnosti prispôsobenia" + }, + "newCustomizationOptionsCalloutContent": { + "message": "Prispôsobte si trezor pomocou akcií rýchleho kopírovania, kompaktného režimu a ďalších možností!" + }, + "newCustomizationOptionsCalloutLink": { + "message": "Zobraziť všetky nastavenia vzhľadu" + }, "lock": { "message": "Uzamknúť", "description": "Verb form: to make secure or inaccessible by" @@ -2391,7 +2479,16 @@ "atRiskPasswords": { "message": "Rizikové heslá" }, - "atRiskPasswordsDescSingleOrg": { + "atRiskPasswordDescSingleOrg": { + "message": "$ORGANIZATION$ vás žiada o zmenu hesla, pretože je ohrozené.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + } + }, + "atRiskPasswordsDescSingleOrgPlural": { "message": "$ORGANIZATION$ vás žiada o zmenu $COUNT$ hesiel, pretože sú ohrozené.", "placeholders": { "organization": { @@ -2404,7 +2501,7 @@ } } }, - "atRiskPasswordsDescMultiOrg": { + "atRiskPasswordsDescMultiOrgPlural": { "message": "Vaše organizácie vás žiadajú o zmenu $COUNT$ hesiel, pretože sú ohrozené.", "placeholders": { "count": { @@ -2431,6 +2528,36 @@ "changeAtRiskPasswordsFasterDesc": { "message": "Aktualizujte nastavenia, aby ste mohli rýchlo vypĺňať svoje heslá a vygenerovať nové" }, + "reviewAtRiskLogins": { + "message": "Prehľad ohrozených prihlasovacích mien" + }, + "reviewAtRiskPasswords": { + "message": "Prehľad ohrozených hesiel" + }, + "reviewAtRiskLoginsSlideDesc": { + "message": "Heslá vašej organizácie sú v ohrození, pretože sú slabé, opakovane používané a/alebo uniknuté.", + "description": "Description of the review at-risk login slide on the at-risk password page carousel" + }, + "reviewAtRiskLoginSlideImgAlt": { + "message": "Príklady zoznamu prihlásení, ktoré sú ohrozené" + }, + "generatePasswordSlideDesc": { + "message": "Rýchlo generujte silné, jedinečné heslo pomocu ponuky automatického vypĺňania Bitwardenu na ohrozených stránkach.", + "description": "Description of the generate password slide on the at-risk password page carousel" + }, + "generatePasswordSlideImgAlt": { + "message": "Príklad ponuky automatického vypĺňania Bitwardenu zobrazujúca vygenerované heslo" + }, + "updateInBitwarden": { + "message": "Aktualizovať v Bitwardene" + }, + "updateInBitwardenSlideDesc": { + "message": "Bitwarden vás vyzve na aktualizáciu hesla v správcovi hesiel.", + "description": "Description of the update in Bitwarden slide on the at-risk password page carousel" + }, + "updateInBitwardenSlideImgAlt": { + "message": "Príklad upozornenia Bitwardenu na aktualizovanie prihlasovacích údajov" + }, "turnOnAutofill": { "message": "Zapnúť automatické vypĺňanie" }, @@ -3983,6 +4110,9 @@ "activeAccount": { "message": "Aktívny účet" }, + "bitwardenAccount": { + "message": "Účet Bitwarden" + }, "availableAccounts": { "message": "Dostupné účty" }, @@ -4181,6 +4311,20 @@ } } }, + "copyFieldValue": { + "message": "Kopírovať $FIELD$, $VALUE$", + "description": "Title for a button that copies a field value to the clipboard.", + "placeholders": { + "field": { + "content": "$1", + "example": "Username" + }, + "value": { + "content": "$2", + "example": "Foo" + } + } + }, "noValuesToCopy": { "message": "Nie je čo kopírovať" }, @@ -4235,7 +4379,7 @@ } }, "new": { - "message": "Nová" + "message": "Nové" }, "removeItem": { "message": "Odstrániť $NAME$", @@ -5002,5 +5146,8 @@ }, "updateDesktopAppOrDisableFingerprintDialogMessage": { "message": "Ak chcete používať biometrické odomykanie, aktualizujte desktopovú aplikáciu alebo vypnite odomykanie odtlačkom prsta v nastaveniach desktopovej aplikácie." + }, + "changeAtRiskPassword": { + "message": "Zmeniť rizikové heslá" } } diff --git a/apps/browser/src/_locales/sl/messages.json b/apps/browser/src/_locales/sl/messages.json index b1c20934758..531704980e5 100644 --- a/apps/browser/src/_locales/sl/messages.json +++ b/apps/browser/src/_locales/sl/messages.json @@ -80,6 +80,15 @@ "masterPassHint": { "message": "Namig za glavno geslo (neobvezno)" }, + "passwordStrengthScore": { + "message": "Password strength score $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "joinOrganization": { "message": "Join organization" }, @@ -470,22 +479,6 @@ "length": { "message": "Dolžina" }, - "uppercase": { - "message": "Velike črke (A-Z)", - "description": "deprecated. Use uppercaseLabel instead." - }, - "lowercase": { - "message": "Male črke (a-z)", - "description": "deprecated. Use lowercaseLabel instead." - }, - "numbers": { - "message": "Števke (0-9)", - "description": "deprecated. Use numbersLabel instead." - }, - "specialCharacters": { - "message": "Posebni znaki (!@#$%^&*)", - "description": "deprecated. Use specialCharactersLabel instead." - }, "include": { "message": "Include", "description": "Card header for password generator include block" @@ -518,10 +511,6 @@ "message": "Include special characters", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "numWords": { "message": "Število besed" }, @@ -660,8 +649,8 @@ "browserNotSupportClipboard": { "message": "Vaš brskalnik ne podpira enostavnega kopiranja na odložišče. Prosimo, kopirajte ročno." }, - "verifyIdentity": { - "message": "Preverjanje istovetnosti" + "verifyYourIdentity": { + "message": "Verify your identity" }, "weDontRecognizeThisDevice": { "message": "We don't recognize this device. Enter the code sent to your email to verify your identity." @@ -876,6 +865,21 @@ "logInToBitwarden": { "message": "Log in to Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "Enter the code sent to your email" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Enter the code from your authenticator app" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Press your YubiKey to authenticate" + }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Duo two-step login is required for your account. Follow the steps below to finish logging in." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Follow the steps below to finish logging in." + }, "restartRegistration": { "message": "Restart registration" }, @@ -897,6 +901,9 @@ "no": { "message": "Ne" }, + "location": { + "message": "Location" + }, "unexpectedError": { "message": "Prišlo je do nepričakovane napake." }, @@ -1046,6 +1053,56 @@ "notificationAddSave": { "message": "Da, shrani zdaj" }, + "loginSaveSuccessDetails": { + "message": "$USERNAME$ saved to Bitwarden.", + "placeholders": { + "username": { + "content": "$1" + } + }, + "description": "Shown to user after login is saved." + }, + "loginUpdatedSuccessDetails": { + "message": "$USERNAME$ updated in Bitwarden.", + "placeholders": { + "username": { + "content": "$1" + } + }, + "description": "Shown to user after login is updated." + }, + "saveAsNewLoginAction": { + "message": "Save as new login", + "description": "Button text for saving login details as a new entry." + }, + "updateLoginAction": { + "message": "Update login", + "description": "Button text for updating an existing login entry." + }, + "saveLoginPrompt": { + "message": "Save login?", + "description": "Prompt asking the user if they want to save their login details." + }, + "updateLoginPrompt": { + "message": "Update existing login?", + "description": "Prompt asking the user if they want to update an existing login entry." + }, + "loginSaveSuccess": { + "message": "Login saved", + "description": "Message displayed when login details are successfully saved." + }, + "loginUpdateSuccess": { + "message": "Login updated", + "description": "Message displayed when login details are successfully updated." + }, + "saveFailure": { + "message": "Error saving", + "description": "Error message shown when the system fails to save login details." + }, + "saveFailureDetails": { + "message": "Oh no! We couldn't save this. Try entering the details manually.", + "description": "Detailed error message shown when saving login details fails." + }, "enableChangedPasswordNotification": { "message": "Predlagaj posodobitev obstoječe prijave" }, @@ -1365,12 +1422,22 @@ "rememberMe": { "message": "Zapomni si me" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Don't ask again on this device for 30 days" + }, "sendVerificationCodeEmailAgain": { "message": "Ponovno pošlji verifikacijsko kodo na email" }, "useAnotherTwoStepMethod": { "message": "Uporabi drugi način prijave v dveh korakih" }, + "selectAnotherMethod": { + "message": "Select another method", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Use your recovery code" + }, "insertYubiKey": { "message": "Priključi svoj YubiKey v USB priključek, nato pa pritisni na njegovo tipko." }, @@ -1383,9 +1450,18 @@ "webAuthnNewTabOpen": { "message": "Odpri nov zavihek" }, + "openInNewTab": { + "message": "Open in new tab" + }, "webAuthnAuthenticate": { "message": "Authenticate WebAuthn" }, + "readSecurityKey": { + "message": "Read security key" + }, + "awaitingSecurityKeyInteraction": { + "message": "Awaiting security key interaction..." + }, "loginUnavailable": { "message": "Prijava ni na voljo" }, @@ -1398,6 +1474,9 @@ "twoStepOptions": { "message": "Možnosti dvostopenjske prijave" }, + "selectTwoStepLoginMethod": { + "message": "Select two-step login method" + }, "recoveryCodeDesc": { "message": "Ste izgubili dostop do vseh ponudnikov dvostopenjske prijave? Uporabite svojo kodo za obnovitev in tako onemogočite dvostopenjsko prijavo v svoj račun." }, @@ -2097,6 +2176,15 @@ "vaultTimeoutAction1": { "message": "Timeout action" }, + "newCustomizationOptionsCalloutTitle": { + "message": "New customization options" + }, + "newCustomizationOptionsCalloutContent": { + "message": "Customize your vault experience with quick copy actions, compact mode, and more!" + }, + "newCustomizationOptionsCalloutLink": { + "message": "View all Appearance settings" + }, "lock": { "message": "Zaklepanje", "description": "Verb form: to make secure or inaccessible by" @@ -2391,8 +2479,17 @@ "atRiskPasswords": { "message": "At-risk passwords" }, - "atRiskPasswordsDescSingleOrg": { - "message": "$ORGANIZATION$ is requesting you change the $COUNT$ passwords because they are at risk.", + "atRiskPasswordDescSingleOrg": { + "message": "$ORGANIZATION$ is requesting you change one password because it is at-risk.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + } + }, + "atRiskPasswordsDescSingleOrgPlural": { + "message": "$ORGANIZATION$ is requesting you change the $COUNT$ passwords because they are at-risk.", "placeholders": { "organization": { "content": "$1", @@ -2404,8 +2501,8 @@ } } }, - "atRiskPasswordsDescMultiOrg": { - "message": "Your organizations are requesting you change the $COUNT$ passwords because they are at risk.", + "atRiskPasswordsDescMultiOrgPlural": { + "message": "Your organizations are requesting you change the $COUNT$ passwords because they are at-risk.", "placeholders": { "count": { "content": "$1", @@ -2431,6 +2528,36 @@ "changeAtRiskPasswordsFasterDesc": { "message": "Update your settings so you can quickly autofill your passwords and generate new ones" }, + "reviewAtRiskLogins": { + "message": "Review at-risk logins" + }, + "reviewAtRiskPasswords": { + "message": "Review at-risk passwords" + }, + "reviewAtRiskLoginsSlideDesc": { + "message": "Your organization passwords are at-risk because they are weak, reused, and/or exposed.", + "description": "Description of the review at-risk login slide on the at-risk password page carousel" + }, + "reviewAtRiskLoginSlideImgAlt": { + "message": "Illustration of a list of logins that are at-risk" + }, + "generatePasswordSlideDesc": { + "message": "Quickly generate a strong, unique password with the Bitwarden autofill menu on the at-risk site.", + "description": "Description of the generate password slide on the at-risk password page carousel" + }, + "generatePasswordSlideImgAlt": { + "message": "Illustration of the Bitwarden autofill menu displaying a generated password" + }, + "updateInBitwarden": { + "message": "Update in Bitwarden" + }, + "updateInBitwardenSlideDesc": { + "message": "Bitwarden will then prompt you to update the password in the password manager.", + "description": "Description of the update in Bitwarden slide on the at-risk password page carousel" + }, + "updateInBitwardenSlideImgAlt": { + "message": "Illustration of a Bitwarden’s notification prompting the user to update the login" + }, "turnOnAutofill": { "message": "Turn on autofill" }, @@ -3983,6 +4110,9 @@ "activeAccount": { "message": "Active account" }, + "bitwardenAccount": { + "message": "Bitwarden account" + }, "availableAccounts": { "message": "Available accounts" }, @@ -4181,6 +4311,20 @@ } } }, + "copyFieldValue": { + "message": "Copy $FIELD$, $VALUE$", + "description": "Title for a button that copies a field value to the clipboard.", + "placeholders": { + "field": { + "content": "$1", + "example": "Username" + }, + "value": { + "content": "$2", + "example": "Foo" + } + } + }, "noValuesToCopy": { "message": "No values to copy" }, @@ -5002,5 +5146,8 @@ }, "updateDesktopAppOrDisableFingerprintDialogMessage": { "message": "To use biometric unlock, please update your desktop application, or disable fingerprint unlock in the desktop settings." + }, + "changeAtRiskPassword": { + "message": "Change at-risk password" } } diff --git a/apps/browser/src/_locales/sr/messages.json b/apps/browser/src/_locales/sr/messages.json index d20e904d5b9..19f841ef0e6 100644 --- a/apps/browser/src/_locales/sr/messages.json +++ b/apps/browser/src/_locales/sr/messages.json @@ -80,6 +80,15 @@ "masterPassHint": { "message": "Савет Главне Лозинке (опционо)" }, + "passwordStrengthScore": { + "message": "Снага лозинкe $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "joinOrganization": { "message": "Придружи Организацију" }, @@ -177,7 +186,7 @@ "message": "Копирати белешке" }, "copy": { - "message": "Copy", + "message": "Копирај", "description": "Copy to clipboard" }, "fill": { @@ -470,22 +479,6 @@ "length": { "message": "Дужина" }, - "uppercase": { - "message": "Велика слова (A-Z)", - "description": "deprecated. Use uppercaseLabel instead." - }, - "lowercase": { - "message": "Мала слова (a-z)", - "description": "deprecated. Use lowercaseLabel instead." - }, - "numbers": { - "message": "Цифре (0-9)", - "description": "deprecated. Use numbersLabel instead." - }, - "specialCharacters": { - "message": "Специјална слова (!@#$%^&*)", - "description": "deprecated. Use specialCharactersLabel instead." - }, "include": { "message": "Укључити", "description": "Card header for password generator include block" @@ -518,10 +511,6 @@ "message": "Укључити специјална слова", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "numWords": { "message": "Број речи" }, @@ -660,8 +649,8 @@ "browserNotSupportClipboard": { "message": "Ваш прегледач не подржава једноставно копирање у клипборду. Уместо тога копирајте га ручно." }, - "verifyIdentity": { - "message": "Потврдите идентитет" + "verifyYourIdentity": { + "message": "Потврдите свој идентитет" }, "weDontRecognizeThisDevice": { "message": "Не препознајемо овај уређај. Унесите код послат на адресу ваше електронске поште да би сте потврдили ваш идентитет." @@ -876,6 +865,21 @@ "logInToBitwarden": { "message": "Пријавите се на Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "Унесите кôд послат на ваш имејл" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Унесите кôд из апликације за аутентификацију" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Стисните Ваш YubiKey за аутентификацију" + }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "За ваш налог је потребан два корака. Следите наведене кораке да бисте завршили пријављивање." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Следите наведене кораке да бисте завршили пријављивање." + }, "restartRegistration": { "message": "Поново покрените регистрацију" }, @@ -897,6 +901,9 @@ "no": { "message": "Не" }, + "location": { + "message": "Локација" + }, "unexpectedError": { "message": "Дошло је до неочекиване грешке." }, @@ -1030,7 +1037,7 @@ "message": "Кликните на ставке за ауто-попуњавање у приказу сефа" }, "clickToAutofill": { - "message": "Click items in autofill suggestion to fill" + "message": "Кликните на ставке у ауто-пуњење предлогу за попуњавање" }, "clearClipboard": { "message": "Обриши привремену меморију", @@ -1046,6 +1053,56 @@ "notificationAddSave": { "message": "Сачувај" }, + "loginSaveSuccessDetails": { + "message": "$USERNAME$ сачуван и Bitwarden.", + "placeholders": { + "username": { + "content": "$1" + } + }, + "description": "Shown to user after login is saved." + }, + "loginUpdatedSuccessDetails": { + "message": "$USERNAME$ ажурирано у Bitwarden.", + "placeholders": { + "username": { + "content": "$1" + } + }, + "description": "Shown to user after login is updated." + }, + "saveAsNewLoginAction": { + "message": "Сачувати као нову пријаву", + "description": "Button text for saving login details as a new entry." + }, + "updateLoginAction": { + "message": "Ажурирати пријаву", + "description": "Button text for updating an existing login entry." + }, + "saveLoginPrompt": { + "message": "Сачувати пријаву?", + "description": "Prompt asking the user if they want to save their login details." + }, + "updateLoginPrompt": { + "message": "Ажурирајте постојећу пријаву?", + "description": "Prompt asking the user if they want to update an existing login entry." + }, + "loginSaveSuccess": { + "message": "Пријава сачувана", + "description": "Message displayed when login details are successfully saved." + }, + "loginUpdateSuccess": { + "message": "Пријава ажурирана", + "description": "Message displayed when login details are successfully updated." + }, + "saveFailure": { + "message": "Грешка при снимању", + "description": "Error message shown when the system fails to save login details." + }, + "saveFailureDetails": { + "message": "Ох не! Нисмо могли да то сачувамо. Покушајте да ручно унесете детаље.", + "description": "Detailed error message shown when saving login details fails." + }, "enableChangedPasswordNotification": { "message": "Питај за ажурирање постојеће пријаве" }, @@ -1365,12 +1422,22 @@ "rememberMe": { "message": "Запамти ме" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Не питајте поново на овом уређају 30 дана" + }, "sendVerificationCodeEmailAgain": { "message": "Поново послати верификациони код на имејл" }, "useAnotherTwoStepMethod": { "message": "Користите другу методу пријављивања у два корака" }, + "selectAnotherMethod": { + "message": "Изаберите другу методу", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Употребите шифру за опоравак" + }, "insertYubiKey": { "message": "Убаците свој YubiKey у УСБ порт рачунара, а затим додирните његово дугме." }, @@ -1383,9 +1450,18 @@ "webAuthnNewTabOpen": { "message": "Отвори нови језичак " }, + "openInNewTab": { + "message": "Отвори у новом језичку" + }, "webAuthnAuthenticate": { "message": "WebAutn аутентификација" }, + "readSecurityKey": { + "message": "Читај сигурносни кључ" + }, + "awaitingSecurityKeyInteraction": { + "message": "Чека се интеракција сигурносног кључа..." + }, "loginUnavailable": { "message": "Пријава недоступна" }, @@ -1398,6 +1474,9 @@ "twoStepOptions": { "message": "Опције дво-коракне пријаве" }, + "selectTwoStepLoginMethod": { + "message": "Одабрати методу пријављивања у два корака" + }, "recoveryCodeDesc": { "message": "Изгубили сте приступ свим својим двофакторским добављачима? Употребите код за опоравак да онемогућите све двофакторске добављаче из налога." }, @@ -2089,7 +2168,7 @@ "description": "This will be used as part of a larger sentence, broken up to include the generator icon. The full sentence will read 'Use the generator [GENERATOR_ICON] to create a strong unique password'" }, "vaultCustomization": { - "message": "Vault customization" + "message": "Прилагођавање сефа" }, "vaultTimeoutAction": { "message": "Акција на тајмаут сефа" @@ -2097,6 +2176,15 @@ "vaultTimeoutAction1": { "message": "Акција тајмаута" }, + "newCustomizationOptionsCalloutTitle": { + "message": "Нове опције прилагођавања" + }, + "newCustomizationOptionsCalloutContent": { + "message": "Прилагодите своје искуство сефа помоћу брзих акција копирања, компактног режима и још много тога!" + }, + "newCustomizationOptionsCalloutLink": { + "message": "Погледајте сва подешавања изглед" + }, "lock": { "message": "Закључај", "description": "Verb form: to make secure or inaccessible by" @@ -2356,7 +2444,7 @@ "message": "Блокирани домени" }, "learnMoreAboutBlockedDomains": { - "message": "Learn more about blocked domains" + "message": "Сазнајте више о блокираним доменима" }, "excludedDomains": { "message": "Изузети домени" @@ -2377,10 +2465,10 @@ "message": "Промените ово у подешавањима" }, "change": { - "message": "Change" + "message": "Промени" }, "changeButtonTitle": { - "message": "Change password - $ITEMNAME$", + "message": "Промена лозинке - $ITEMNAME$", "placeholders": { "itemname": { "content": "$1", @@ -2389,10 +2477,19 @@ } }, "atRiskPasswords": { - "message": "At-risk passwords" + "message": "Лозинке под ризиком" }, - "atRiskPasswordsDescSingleOrg": { - "message": "$ORGANIZATION$ is requesting you change the $COUNT$ passwords because they are at risk.", + "atRiskPasswordDescSingleOrg": { + "message": "$ORGANIZATION$ тражи да промените једну лозинку јер је ризична.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + } + }, + "atRiskPasswordsDescSingleOrgPlural": { + "message": "$ORGANIZATION$ тражи да промените $COUNT$ лозинке пошто су под ризиком.", "placeholders": { "organization": { "content": "$1", @@ -2404,8 +2501,8 @@ } } }, - "atRiskPasswordsDescMultiOrg": { - "message": "Your organizations are requesting you change the $COUNT$ passwords because they are at risk.", + "atRiskPasswordsDescMultiOrgPlural": { + "message": "Ваша организација тражи да промените $COUNT$ лозинке пошто су под ризиком.", "placeholders": { "count": { "content": "$1", @@ -2414,10 +2511,10 @@ } }, "reviewAndChangeAtRiskPassword": { - "message": "Review and change one at-risk password" + "message": "Прегледајте и промените једну лозинку за ризик" }, "reviewAndChangeAtRiskPasswordsPlural": { - "message": "Review and change $COUNT$ at-risk passwords", + "message": "Прегледајте и промените лозинке под ризиком: $COUNT$", "placeholders": { "count": { "content": "$1", @@ -2426,19 +2523,49 @@ } }, "changeAtRiskPasswordsFaster": { - "message": "Change at-risk passwords faster" + "message": "Брже промените лозинке за ризик" }, "changeAtRiskPasswordsFasterDesc": { - "message": "Update your settings so you can quickly autofill your passwords and generate new ones" + "message": "Ажурирајте поставке да бисте брзо поставили лозинке и генерисати нове" + }, + "reviewAtRiskLogins": { + "message": "Прегледајте ризичне пријаве" + }, + "reviewAtRiskPasswords": { + "message": "Прегледати ризичне лозинке" + }, + "reviewAtRiskLoginsSlideDesc": { + "message": "Ваше организационе лозинке су ризичне јер су слабе, поново употребљене и/или изложене.", + "description": "Description of the review at-risk login slide on the at-risk password page carousel" + }, + "reviewAtRiskLoginSlideImgAlt": { + "message": "Илустрација листе пријаве које су ризичне" + }, + "generatePasswordSlideDesc": { + "message": "Брзо генеришите снажну, јединствену лозинку са Bitwarden менијем аутопуњења за коришћење на ризичном сајту.", + "description": "Description of the generate password slide on the at-risk password page carousel" + }, + "generatePasswordSlideImgAlt": { + "message": "Илустрација Bitwarden-ског менија аутопуњења који приказују генерисану лозинку" + }, + "updateInBitwarden": { + "message": "Ажурирања у Bitwarden" + }, + "updateInBitwardenSlideDesc": { + "message": "Bitwarden ће тада затражити да ажурирате лозинку у менаџеру лозинке.", + "description": "Description of the update in Bitwarden slide on the at-risk password page carousel" + }, + "updateInBitwardenSlideImgAlt": { + "message": "Илустрација Bitwarden-ског обавештења за ажирриање пријаве" }, "turnOnAutofill": { - "message": "Turn on autofill" + "message": "Омогућите ауто-пуњење" }, "turnedOnAutofill": { - "message": "Turned on autofill" + "message": "Ауто-пуњење упаљено" }, "dismiss": { - "message": "Dismiss" + "message": "Одбаци" }, "websiteItemLabel": { "message": "Сајт $number$ (УРЛ)", @@ -3045,7 +3172,7 @@ } }, "forwaderInvalidOperation": { - "message": "$SERVICENAME$ refused your request. Please contact your service provider for assistance.", + "message": "$SERVICENAME$ одбио ваш захтев. Обратите се свом провајдеру сервиса за помоћ.", "description": "Displayed when the user is forbidden from using the API by the forwarding service.", "placeholders": { "servicename": { @@ -3055,7 +3182,7 @@ } }, "forwaderInvalidOperationWithMessage": { - "message": "$SERVICENAME$ refused your request: $ERRORMESSAGE$", + "message": "$SERVICENAME$ одбио ваш захтев: $ERRORMESSAGE$", "description": "Displayed when the user is forbidden from using the API by the forwarding service with an error message.", "placeholders": { "servicename": { @@ -3983,6 +4110,9 @@ "activeAccount": { "message": "Активан налог" }, + "bitwardenAccount": { + "message": "Bitwarden налог" + }, "availableAccounts": { "message": "Доступни налози" }, @@ -4181,6 +4311,20 @@ } } }, + "copyFieldValue": { + "message": "Копирај $FIELD$, $VALUE$", + "description": "Title for a button that copies a field value to the clipboard.", + "placeholders": { + "field": { + "content": "$1", + "example": "Username" + }, + "value": { + "content": "$2", + "example": "Foo" + } + } + }, "noValuesToCopy": { "message": "Нема вредности за копирање" }, @@ -5002,5 +5146,8 @@ }, "updateDesktopAppOrDisableFingerprintDialogMessage": { "message": "Да би сте користили биометријско откључавање, надоградите вашу апликацију на рачунару, или онемогућите откључавање отиском прста у подешавањима на рачунару." + }, + "changeAtRiskPassword": { + "message": "Променити ризичну лозинку" } } diff --git a/apps/browser/src/_locales/sv/messages.json b/apps/browser/src/_locales/sv/messages.json index 15e2160b9d2..74c17f93511 100644 --- a/apps/browser/src/_locales/sv/messages.json +++ b/apps/browser/src/_locales/sv/messages.json @@ -80,6 +80,15 @@ "masterPassHint": { "message": "Huvudlösenordsledtråd (valfri)" }, + "passwordStrengthScore": { + "message": "Password strength score $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "joinOrganization": { "message": "Gå med i organisation" }, @@ -177,7 +186,7 @@ "message": "Kopiera anteckningar" }, "copy": { - "message": "Copy", + "message": "Kopiera", "description": "Copy to clipboard" }, "fill": { @@ -470,22 +479,6 @@ "length": { "message": "Längd" }, - "uppercase": { - "message": "Versaler (A-Ö)", - "description": "deprecated. Use uppercaseLabel instead." - }, - "lowercase": { - "message": "Gemener (a-ö)", - "description": "deprecated. Use lowercaseLabel instead." - }, - "numbers": { - "message": "Siffror (0-9)", - "description": "deprecated. Use numbersLabel instead." - }, - "specialCharacters": { - "message": "Specialtecken (!@#$%^&*)", - "description": "deprecated. Use specialCharactersLabel instead." - }, "include": { "message": "Inkludera", "description": "Card header for password generator include block" @@ -518,10 +511,6 @@ "message": "Inkludera specialtecken", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "numWords": { "message": "Antal ord" }, @@ -660,8 +649,8 @@ "browserNotSupportClipboard": { "message": "Din webbläsare har inte stöd för att enkelt kopiera till urklipp. Kopiera till urklipp manuellt istället." }, - "verifyIdentity": { - "message": "Verifiera identitet" + "verifyYourIdentity": { + "message": "Verify your identity" }, "weDontRecognizeThisDevice": { "message": "We don't recognize this device. Enter the code sent to your email to verify your identity." @@ -876,6 +865,21 @@ "logInToBitwarden": { "message": "Logga in på Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "Enter the code sent to your email" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Enter the code from your authenticator app" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Press your YubiKey to authenticate" + }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Duo two-step login is required for your account. Follow the steps below to finish logging in." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Follow the steps below to finish logging in." + }, "restartRegistration": { "message": "Restart registration" }, @@ -897,6 +901,9 @@ "no": { "message": "Nej" }, + "location": { + "message": "Location" + }, "unexpectedError": { "message": "Ett okänt fel har inträffat." }, @@ -1046,6 +1053,56 @@ "notificationAddSave": { "message": "Spara" }, + "loginSaveSuccessDetails": { + "message": "$USERNAME$ saved to Bitwarden.", + "placeholders": { + "username": { + "content": "$1" + } + }, + "description": "Shown to user after login is saved." + }, + "loginUpdatedSuccessDetails": { + "message": "$USERNAME$ updated in Bitwarden.", + "placeholders": { + "username": { + "content": "$1" + } + }, + "description": "Shown to user after login is updated." + }, + "saveAsNewLoginAction": { + "message": "Save as new login", + "description": "Button text for saving login details as a new entry." + }, + "updateLoginAction": { + "message": "Update login", + "description": "Button text for updating an existing login entry." + }, + "saveLoginPrompt": { + "message": "Save login?", + "description": "Prompt asking the user if they want to save their login details." + }, + "updateLoginPrompt": { + "message": "Update existing login?", + "description": "Prompt asking the user if they want to update an existing login entry." + }, + "loginSaveSuccess": { + "message": "Login saved", + "description": "Message displayed when login details are successfully saved." + }, + "loginUpdateSuccess": { + "message": "Login updated", + "description": "Message displayed when login details are successfully updated." + }, + "saveFailure": { + "message": "Error saving", + "description": "Error message shown when the system fails to save login details." + }, + "saveFailureDetails": { + "message": "Oh no! We couldn't save this. Try entering the details manually.", + "description": "Detailed error message shown when saving login details fails." + }, "enableChangedPasswordNotification": { "message": "Be om att uppdatera befintlig inloggning" }, @@ -1365,12 +1422,22 @@ "rememberMe": { "message": "Kom ihåg mig" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Don't ask again on this device for 30 days" + }, "sendVerificationCodeEmailAgain": { "message": "Skicka e-postmeddelandet med verifieringskoden igen" }, "useAnotherTwoStepMethod": { "message": "Använd en annan inloggningsmetod för tvåstegsverifiering" }, + "selectAnotherMethod": { + "message": "Select another method", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Use your recovery code" + }, "insertYubiKey": { "message": "Sätt i din YubiKey i en av datorns USB-portar och sätt fingret på knappen." }, @@ -1383,9 +1450,18 @@ "webAuthnNewTabOpen": { "message": "Öppna ny flik" }, + "openInNewTab": { + "message": "Open in new tab" + }, "webAuthnAuthenticate": { "message": "Autentisera WebAuthn" }, + "readSecurityKey": { + "message": "Read security key" + }, + "awaitingSecurityKeyInteraction": { + "message": "Awaiting security key interaction..." + }, "loginUnavailable": { "message": "Inloggning ej tillgänglig" }, @@ -1398,6 +1474,9 @@ "twoStepOptions": { "message": "Alternativ för tvåstegsverifiering" }, + "selectTwoStepLoginMethod": { + "message": "Select two-step login method" + }, "recoveryCodeDesc": { "message": "Förlorat åtkomst till alla dina metoder för tvåstegsverifiering? Använd din återställningskod för att inaktivera tvåstegsverifiering på ditt konto." }, @@ -2097,6 +2176,15 @@ "vaultTimeoutAction1": { "message": "Timeout action" }, + "newCustomizationOptionsCalloutTitle": { + "message": "New customization options" + }, + "newCustomizationOptionsCalloutContent": { + "message": "Customize your vault experience with quick copy actions, compact mode, and more!" + }, + "newCustomizationOptionsCalloutLink": { + "message": "View all Appearance settings" + }, "lock": { "message": "Lås", "description": "Verb form: to make secure or inaccessible by" @@ -2391,8 +2479,17 @@ "atRiskPasswords": { "message": "At-risk passwords" }, - "atRiskPasswordsDescSingleOrg": { - "message": "$ORGANIZATION$ is requesting you change the $COUNT$ passwords because they are at risk.", + "atRiskPasswordDescSingleOrg": { + "message": "$ORGANIZATION$ is requesting you change one password because it is at-risk.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + } + }, + "atRiskPasswordsDescSingleOrgPlural": { + "message": "$ORGANIZATION$ is requesting you change the $COUNT$ passwords because they are at-risk.", "placeholders": { "organization": { "content": "$1", @@ -2404,8 +2501,8 @@ } } }, - "atRiskPasswordsDescMultiOrg": { - "message": "Your organizations are requesting you change the $COUNT$ passwords because they are at risk.", + "atRiskPasswordsDescMultiOrgPlural": { + "message": "Your organizations are requesting you change the $COUNT$ passwords because they are at-risk.", "placeholders": { "count": { "content": "$1", @@ -2431,6 +2528,36 @@ "changeAtRiskPasswordsFasterDesc": { "message": "Update your settings so you can quickly autofill your passwords and generate new ones" }, + "reviewAtRiskLogins": { + "message": "Review at-risk logins" + }, + "reviewAtRiskPasswords": { + "message": "Review at-risk passwords" + }, + "reviewAtRiskLoginsSlideDesc": { + "message": "Your organization passwords are at-risk because they are weak, reused, and/or exposed.", + "description": "Description of the review at-risk login slide on the at-risk password page carousel" + }, + "reviewAtRiskLoginSlideImgAlt": { + "message": "Illustration of a list of logins that are at-risk" + }, + "generatePasswordSlideDesc": { + "message": "Quickly generate a strong, unique password with the Bitwarden autofill menu on the at-risk site.", + "description": "Description of the generate password slide on the at-risk password page carousel" + }, + "generatePasswordSlideImgAlt": { + "message": "Illustration of the Bitwarden autofill menu displaying a generated password" + }, + "updateInBitwarden": { + "message": "Update in Bitwarden" + }, + "updateInBitwardenSlideDesc": { + "message": "Bitwarden will then prompt you to update the password in the password manager.", + "description": "Description of the update in Bitwarden slide on the at-risk password page carousel" + }, + "updateInBitwardenSlideImgAlt": { + "message": "Illustration of a Bitwarden’s notification prompting the user to update the login" + }, "turnOnAutofill": { "message": "Turn on autofill" }, @@ -3983,6 +4110,9 @@ "activeAccount": { "message": "Aktivt konto" }, + "bitwardenAccount": { + "message": "Bitwarden account" + }, "availableAccounts": { "message": "Tillgängliga konton" }, @@ -4181,6 +4311,20 @@ } } }, + "copyFieldValue": { + "message": "Copy $FIELD$, $VALUE$", + "description": "Title for a button that copies a field value to the clipboard.", + "placeholders": { + "field": { + "content": "$1", + "example": "Username" + }, + "value": { + "content": "$2", + "example": "Foo" + } + } + }, "noValuesToCopy": { "message": "No values to copy" }, @@ -5002,5 +5146,8 @@ }, "updateDesktopAppOrDisableFingerprintDialogMessage": { "message": "To use biometric unlock, please update your desktop application, or disable fingerprint unlock in the desktop settings." + }, + "changeAtRiskPassword": { + "message": "Change at-risk password" } } diff --git a/apps/browser/src/_locales/te/messages.json b/apps/browser/src/_locales/te/messages.json index 9fe497bc1c7..dd0bf23c799 100644 --- a/apps/browser/src/_locales/te/messages.json +++ b/apps/browser/src/_locales/te/messages.json @@ -80,6 +80,15 @@ "masterPassHint": { "message": "Master password hint (optional)" }, + "passwordStrengthScore": { + "message": "Password strength score $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "joinOrganization": { "message": "Join organization" }, @@ -470,22 +479,6 @@ "length": { "message": "Length" }, - "uppercase": { - "message": "Uppercase (A-Z)", - "description": "deprecated. Use uppercaseLabel instead." - }, - "lowercase": { - "message": "Lowercase (a-z)", - "description": "deprecated. Use lowercaseLabel instead." - }, - "numbers": { - "message": "Numbers (0-9)", - "description": "deprecated. Use numbersLabel instead." - }, - "specialCharacters": { - "message": "Special characters (!@#$%^&*)", - "description": "deprecated. Use specialCharactersLabel instead." - }, "include": { "message": "Include", "description": "Card header for password generator include block" @@ -518,10 +511,6 @@ "message": "Include special characters", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "numWords": { "message": "Number of words" }, @@ -660,8 +649,8 @@ "browserNotSupportClipboard": { "message": "Your web browser does not support easy clipboard copying. Copy it manually instead." }, - "verifyIdentity": { - "message": "Verify identity" + "verifyYourIdentity": { + "message": "Verify your identity" }, "weDontRecognizeThisDevice": { "message": "We don't recognize this device. Enter the code sent to your email to verify your identity." @@ -876,6 +865,21 @@ "logInToBitwarden": { "message": "Log in to Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "Enter the code sent to your email" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Enter the code from your authenticator app" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Press your YubiKey to authenticate" + }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Duo two-step login is required for your account. Follow the steps below to finish logging in." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Follow the steps below to finish logging in." + }, "restartRegistration": { "message": "Restart registration" }, @@ -897,6 +901,9 @@ "no": { "message": "No" }, + "location": { + "message": "Location" + }, "unexpectedError": { "message": "An unexpected error has occurred." }, @@ -1046,6 +1053,56 @@ "notificationAddSave": { "message": "Save" }, + "loginSaveSuccessDetails": { + "message": "$USERNAME$ saved to Bitwarden.", + "placeholders": { + "username": { + "content": "$1" + } + }, + "description": "Shown to user after login is saved." + }, + "loginUpdatedSuccessDetails": { + "message": "$USERNAME$ updated in Bitwarden.", + "placeholders": { + "username": { + "content": "$1" + } + }, + "description": "Shown to user after login is updated." + }, + "saveAsNewLoginAction": { + "message": "Save as new login", + "description": "Button text for saving login details as a new entry." + }, + "updateLoginAction": { + "message": "Update login", + "description": "Button text for updating an existing login entry." + }, + "saveLoginPrompt": { + "message": "Save login?", + "description": "Prompt asking the user if they want to save their login details." + }, + "updateLoginPrompt": { + "message": "Update existing login?", + "description": "Prompt asking the user if they want to update an existing login entry." + }, + "loginSaveSuccess": { + "message": "Login saved", + "description": "Message displayed when login details are successfully saved." + }, + "loginUpdateSuccess": { + "message": "Login updated", + "description": "Message displayed when login details are successfully updated." + }, + "saveFailure": { + "message": "Error saving", + "description": "Error message shown when the system fails to save login details." + }, + "saveFailureDetails": { + "message": "Oh no! We couldn't save this. Try entering the details manually.", + "description": "Detailed error message shown when saving login details fails." + }, "enableChangedPasswordNotification": { "message": "Ask to update existing login" }, @@ -1365,12 +1422,22 @@ "rememberMe": { "message": "Remember me" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Don't ask again on this device for 30 days" + }, "sendVerificationCodeEmailAgain": { "message": "Send verification code email again" }, "useAnotherTwoStepMethod": { "message": "Use another two-step login method" }, + "selectAnotherMethod": { + "message": "Select another method", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Use your recovery code" + }, "insertYubiKey": { "message": "Insert your YubiKey into your computer's USB port, then touch its button." }, @@ -1383,9 +1450,18 @@ "webAuthnNewTabOpen": { "message": "Open new tab" }, + "openInNewTab": { + "message": "Open in new tab" + }, "webAuthnAuthenticate": { "message": "Authenticate WebAuthn" }, + "readSecurityKey": { + "message": "Read security key" + }, + "awaitingSecurityKeyInteraction": { + "message": "Awaiting security key interaction..." + }, "loginUnavailable": { "message": "Login unavailable" }, @@ -1398,6 +1474,9 @@ "twoStepOptions": { "message": "Two-step login options" }, + "selectTwoStepLoginMethod": { + "message": "Select two-step login method" + }, "recoveryCodeDesc": { "message": "Lost access to all of your two-factor providers? Use your recovery code to turn off all two-factor providers from your account." }, @@ -2097,6 +2176,15 @@ "vaultTimeoutAction1": { "message": "Timeout action" }, + "newCustomizationOptionsCalloutTitle": { + "message": "New customization options" + }, + "newCustomizationOptionsCalloutContent": { + "message": "Customize your vault experience with quick copy actions, compact mode, and more!" + }, + "newCustomizationOptionsCalloutLink": { + "message": "View all Appearance settings" + }, "lock": { "message": "Lock", "description": "Verb form: to make secure or inaccessible by" @@ -2391,8 +2479,17 @@ "atRiskPasswords": { "message": "At-risk passwords" }, - "atRiskPasswordsDescSingleOrg": { - "message": "$ORGANIZATION$ is requesting you change the $COUNT$ passwords because they are at risk.", + "atRiskPasswordDescSingleOrg": { + "message": "$ORGANIZATION$ is requesting you change one password because it is at-risk.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + } + }, + "atRiskPasswordsDescSingleOrgPlural": { + "message": "$ORGANIZATION$ is requesting you change the $COUNT$ passwords because they are at-risk.", "placeholders": { "organization": { "content": "$1", @@ -2404,8 +2501,8 @@ } } }, - "atRiskPasswordsDescMultiOrg": { - "message": "Your organizations are requesting you change the $COUNT$ passwords because they are at risk.", + "atRiskPasswordsDescMultiOrgPlural": { + "message": "Your organizations are requesting you change the $COUNT$ passwords because they are at-risk.", "placeholders": { "count": { "content": "$1", @@ -2431,6 +2528,36 @@ "changeAtRiskPasswordsFasterDesc": { "message": "Update your settings so you can quickly autofill your passwords and generate new ones" }, + "reviewAtRiskLogins": { + "message": "Review at-risk logins" + }, + "reviewAtRiskPasswords": { + "message": "Review at-risk passwords" + }, + "reviewAtRiskLoginsSlideDesc": { + "message": "Your organization passwords are at-risk because they are weak, reused, and/or exposed.", + "description": "Description of the review at-risk login slide on the at-risk password page carousel" + }, + "reviewAtRiskLoginSlideImgAlt": { + "message": "Illustration of a list of logins that are at-risk" + }, + "generatePasswordSlideDesc": { + "message": "Quickly generate a strong, unique password with the Bitwarden autofill menu on the at-risk site.", + "description": "Description of the generate password slide on the at-risk password page carousel" + }, + "generatePasswordSlideImgAlt": { + "message": "Illustration of the Bitwarden autofill menu displaying a generated password" + }, + "updateInBitwarden": { + "message": "Update in Bitwarden" + }, + "updateInBitwardenSlideDesc": { + "message": "Bitwarden will then prompt you to update the password in the password manager.", + "description": "Description of the update in Bitwarden slide on the at-risk password page carousel" + }, + "updateInBitwardenSlideImgAlt": { + "message": "Illustration of a Bitwarden’s notification prompting the user to update the login" + }, "turnOnAutofill": { "message": "Turn on autofill" }, @@ -3983,6 +4110,9 @@ "activeAccount": { "message": "Active account" }, + "bitwardenAccount": { + "message": "Bitwarden account" + }, "availableAccounts": { "message": "Available accounts" }, @@ -4181,6 +4311,20 @@ } } }, + "copyFieldValue": { + "message": "Copy $FIELD$, $VALUE$", + "description": "Title for a button that copies a field value to the clipboard.", + "placeholders": { + "field": { + "content": "$1", + "example": "Username" + }, + "value": { + "content": "$2", + "example": "Foo" + } + } + }, "noValuesToCopy": { "message": "No values to copy" }, @@ -5002,5 +5146,8 @@ }, "updateDesktopAppOrDisableFingerprintDialogMessage": { "message": "To use biometric unlock, please update your desktop application, or disable fingerprint unlock in the desktop settings." + }, + "changeAtRiskPassword": { + "message": "Change at-risk password" } } diff --git a/apps/browser/src/_locales/th/messages.json b/apps/browser/src/_locales/th/messages.json index d37c7fc7a21..6657625a7b9 100644 --- a/apps/browser/src/_locales/th/messages.json +++ b/apps/browser/src/_locales/th/messages.json @@ -80,6 +80,15 @@ "masterPassHint": { "message": "Master Password Hint (optional)" }, + "passwordStrengthScore": { + "message": "Password strength score $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "joinOrganization": { "message": "Join organization" }, @@ -470,22 +479,6 @@ "length": { "message": "ความยาว" }, - "uppercase": { - "message": "ตัวพิมพ์ใหญ่ (A-Z)", - "description": "deprecated. Use uppercaseLabel instead." - }, - "lowercase": { - "message": "ตัวพิมพ์เล็ก (a-z)", - "description": "deprecated. Use lowercaseLabel instead." - }, - "numbers": { - "message": "ตัวเลข (0-9)", - "description": "deprecated. Use numbersLabel instead." - }, - "specialCharacters": { - "message": "อักขระพิเศษ (!@#$%^&*)", - "description": "deprecated. Use specialCharactersLabel instead." - }, "include": { "message": "Include", "description": "Card header for password generator include block" @@ -518,10 +511,6 @@ "message": "Include special characters", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "numWords": { "message": "Number of Words" }, @@ -660,8 +649,8 @@ "browserNotSupportClipboard": { "message": "เว็บเบราว์เซอร์ของคุณไม่รองรับการคัดลอกคลิปบอร์ดอย่างง่าย คัดลอกด้วยตนเองแทน" }, - "verifyIdentity": { - "message": "ยืนยันตัวตน" + "verifyYourIdentity": { + "message": "Verify your identity" }, "weDontRecognizeThisDevice": { "message": "We don't recognize this device. Enter the code sent to your email to verify your identity." @@ -876,6 +865,21 @@ "logInToBitwarden": { "message": "Log in to Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "Enter the code sent to your email" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Enter the code from your authenticator app" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Press your YubiKey to authenticate" + }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Duo two-step login is required for your account. Follow the steps below to finish logging in." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Follow the steps below to finish logging in." + }, "restartRegistration": { "message": "Restart registration" }, @@ -897,6 +901,9 @@ "no": { "message": "ไม่ใช่" }, + "location": { + "message": "Location" + }, "unexpectedError": { "message": "An unexpected error has occured." }, @@ -1046,6 +1053,56 @@ "notificationAddSave": { "message": "Yes, Save Now" }, + "loginSaveSuccessDetails": { + "message": "$USERNAME$ saved to Bitwarden.", + "placeholders": { + "username": { + "content": "$1" + } + }, + "description": "Shown to user after login is saved." + }, + "loginUpdatedSuccessDetails": { + "message": "$USERNAME$ updated in Bitwarden.", + "placeholders": { + "username": { + "content": "$1" + } + }, + "description": "Shown to user after login is updated." + }, + "saveAsNewLoginAction": { + "message": "Save as new login", + "description": "Button text for saving login details as a new entry." + }, + "updateLoginAction": { + "message": "Update login", + "description": "Button text for updating an existing login entry." + }, + "saveLoginPrompt": { + "message": "Save login?", + "description": "Prompt asking the user if they want to save their login details." + }, + "updateLoginPrompt": { + "message": "Update existing login?", + "description": "Prompt asking the user if they want to update an existing login entry." + }, + "loginSaveSuccess": { + "message": "Login saved", + "description": "Message displayed when login details are successfully saved." + }, + "loginUpdateSuccess": { + "message": "Login updated", + "description": "Message displayed when login details are successfully updated." + }, + "saveFailure": { + "message": "Error saving", + "description": "Error message shown when the system fails to save login details." + }, + "saveFailureDetails": { + "message": "Oh no! We couldn't save this. Try entering the details manually.", + "description": "Detailed error message shown when saving login details fails." + }, "enableChangedPasswordNotification": { "message": "ขอให้ปรับปรุงการเข้าสู่ระบบที่มีอยู่" }, @@ -1365,12 +1422,22 @@ "rememberMe": { "message": "Remember me" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Don't ask again on this device for 30 days" + }, "sendVerificationCodeEmailAgain": { "message": "ส่งโค้ดยืนยันไปยังอีเมลอีกครั้ง" }, "useAnotherTwoStepMethod": { "message": "Use another two-step login method" }, + "selectAnotherMethod": { + "message": "Select another method", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Use your recovery code" + }, "insertYubiKey": { "message": "Insert your YubiKey into your computer's USB port, then touch its button." }, @@ -1383,9 +1450,18 @@ "webAuthnNewTabOpen": { "message": "Open new tab" }, + "openInNewTab": { + "message": "Open in new tab" + }, "webAuthnAuthenticate": { "message": "Authenticate WebAuthn" }, + "readSecurityKey": { + "message": "Read security key" + }, + "awaitingSecurityKeyInteraction": { + "message": "Awaiting security key interaction..." + }, "loginUnavailable": { "message": "Login Unavailable" }, @@ -1398,6 +1474,9 @@ "twoStepOptions": { "message": "Two-step Login Options" }, + "selectTwoStepLoginMethod": { + "message": "Select two-step login method" + }, "recoveryCodeDesc": { "message": "Lost access to all of your two-factor providers? Use your recovery code to turn off all two-factor providers from your account." }, @@ -2097,6 +2176,15 @@ "vaultTimeoutAction1": { "message": "Timeout action" }, + "newCustomizationOptionsCalloutTitle": { + "message": "New customization options" + }, + "newCustomizationOptionsCalloutContent": { + "message": "Customize your vault experience with quick copy actions, compact mode, and more!" + }, + "newCustomizationOptionsCalloutLink": { + "message": "View all Appearance settings" + }, "lock": { "message": "ล็อก", "description": "Verb form: to make secure or inaccessible by" @@ -2391,8 +2479,17 @@ "atRiskPasswords": { "message": "At-risk passwords" }, - "atRiskPasswordsDescSingleOrg": { - "message": "$ORGANIZATION$ is requesting you change the $COUNT$ passwords because they are at risk.", + "atRiskPasswordDescSingleOrg": { + "message": "$ORGANIZATION$ is requesting you change one password because it is at-risk.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + } + }, + "atRiskPasswordsDescSingleOrgPlural": { + "message": "$ORGANIZATION$ is requesting you change the $COUNT$ passwords because they are at-risk.", "placeholders": { "organization": { "content": "$1", @@ -2404,8 +2501,8 @@ } } }, - "atRiskPasswordsDescMultiOrg": { - "message": "Your organizations are requesting you change the $COUNT$ passwords because they are at risk.", + "atRiskPasswordsDescMultiOrgPlural": { + "message": "Your organizations are requesting you change the $COUNT$ passwords because they are at-risk.", "placeholders": { "count": { "content": "$1", @@ -2431,6 +2528,36 @@ "changeAtRiskPasswordsFasterDesc": { "message": "Update your settings so you can quickly autofill your passwords and generate new ones" }, + "reviewAtRiskLogins": { + "message": "Review at-risk logins" + }, + "reviewAtRiskPasswords": { + "message": "Review at-risk passwords" + }, + "reviewAtRiskLoginsSlideDesc": { + "message": "Your organization passwords are at-risk because they are weak, reused, and/or exposed.", + "description": "Description of the review at-risk login slide on the at-risk password page carousel" + }, + "reviewAtRiskLoginSlideImgAlt": { + "message": "Illustration of a list of logins that are at-risk" + }, + "generatePasswordSlideDesc": { + "message": "Quickly generate a strong, unique password with the Bitwarden autofill menu on the at-risk site.", + "description": "Description of the generate password slide on the at-risk password page carousel" + }, + "generatePasswordSlideImgAlt": { + "message": "Illustration of the Bitwarden autofill menu displaying a generated password" + }, + "updateInBitwarden": { + "message": "Update in Bitwarden" + }, + "updateInBitwardenSlideDesc": { + "message": "Bitwarden will then prompt you to update the password in the password manager.", + "description": "Description of the update in Bitwarden slide on the at-risk password page carousel" + }, + "updateInBitwardenSlideImgAlt": { + "message": "Illustration of a Bitwarden’s notification prompting the user to update the login" + }, "turnOnAutofill": { "message": "Turn on autofill" }, @@ -3983,6 +4110,9 @@ "activeAccount": { "message": "Active account" }, + "bitwardenAccount": { + "message": "Bitwarden account" + }, "availableAccounts": { "message": "Available accounts" }, @@ -4181,6 +4311,20 @@ } } }, + "copyFieldValue": { + "message": "Copy $FIELD$, $VALUE$", + "description": "Title for a button that copies a field value to the clipboard.", + "placeholders": { + "field": { + "content": "$1", + "example": "Username" + }, + "value": { + "content": "$2", + "example": "Foo" + } + } + }, "noValuesToCopy": { "message": "No values to copy" }, @@ -5002,5 +5146,8 @@ }, "updateDesktopAppOrDisableFingerprintDialogMessage": { "message": "To use biometric unlock, please update your desktop application, or disable fingerprint unlock in the desktop settings." + }, + "changeAtRiskPassword": { + "message": "Change at-risk password" } } diff --git a/apps/browser/src/_locales/tr/messages.json b/apps/browser/src/_locales/tr/messages.json index acabe8a5688..784c1731a24 100644 --- a/apps/browser/src/_locales/tr/messages.json +++ b/apps/browser/src/_locales/tr/messages.json @@ -80,6 +80,15 @@ "masterPassHint": { "message": "Ana parola ipucu (isteğe bağlı)" }, + "passwordStrengthScore": { + "message": "Password strength score $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "joinOrganization": { "message": "Kuruluşa katıl" }, @@ -470,22 +479,6 @@ "length": { "message": "Uzunluk" }, - "uppercase": { - "message": "Büyük harf (A-Z)", - "description": "deprecated. Use uppercaseLabel instead." - }, - "lowercase": { - "message": "Küçük harf (a-z)", - "description": "deprecated. Use lowercaseLabel instead." - }, - "numbers": { - "message": "Rakamlar (0-9)", - "description": "deprecated. Use numbersLabel instead." - }, - "specialCharacters": { - "message": "Özel karakterler (!@#$%^&*)", - "description": "deprecated. Use specialCharactersLabel instead." - }, "include": { "message": "Dahil et", "description": "Card header for password generator include block" @@ -518,10 +511,6 @@ "message": "Özel karakterleri dahil et", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "numWords": { "message": "Kelime sayısı" }, @@ -660,8 +649,8 @@ "browserNotSupportClipboard": { "message": "Web tarayıcınız panoya kopyalamayı desteklemiyor. Parolayı elle kopyalayın." }, - "verifyIdentity": { - "message": "Kimliği doğrula" + "verifyYourIdentity": { + "message": "Kimliğinizi doğrulayın" }, "weDontRecognizeThisDevice": { "message": "Bu cihazı tanıyamadık. Kimliğinizi doğrulamak için e-postanıza gönderilen kodu girin." @@ -876,6 +865,21 @@ "logInToBitwarden": { "message": "Bitwarden'a giriş yapın" }, + "enterTheCodeSentToYourEmail": { + "message": "E-posta adresinize gönderilen kodu girin" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Kimlik doğrulama uygulamanızdaki kodu girin" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Press your YubiKey to authenticate" + }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Duo two-step login is required for your account. Follow the steps below to finish logging in." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Follow the steps below to finish logging in." + }, "restartRegistration": { "message": "Kaydı yeniden başlat" }, @@ -897,6 +901,9 @@ "no": { "message": "Hayır" }, + "location": { + "message": "Konum" + }, "unexpectedError": { "message": "Beklenmedik bir hata oluştu." }, @@ -1000,7 +1007,7 @@ "message": "Hesap eklemeyi öner" }, "vaultSaveOptionsTitle": { - "message": "Kasa seçeneklerine kaydet" + "message": "Kasaya kaydetme seçenekleri" }, "addLoginNotificationDesc": { "message": "\"Hesap ekle\" bildirimi, ilk kez kullandığınız hesap bilgilerini kasanıza kaydetmek isteyip istemediğinizi otomatik olarak sorar." @@ -1027,7 +1034,7 @@ "message": "Kolay otomatik doldurma için sekme sayfasında kimlikleri listele." }, "clickToAutofillOnVault": { - "message": "Kasa görünümünde otomatik doldurmak istediğiniz kayıtlara tıklayın" + "message": "Kasa görünümünde kayıtlara tıklayınca otomatik doldur" }, "clickToAutofill": { "message": "Otomatik doldurma önerisindeki kayıtlara tıkladığımda doldur" @@ -1046,6 +1053,56 @@ "notificationAddSave": { "message": "Kaydet" }, + "loginSaveSuccessDetails": { + "message": "$USERNAME$ Bitwarden'a kaydedildi.", + "placeholders": { + "username": { + "content": "$1" + } + }, + "description": "Shown to user after login is saved." + }, + "loginUpdatedSuccessDetails": { + "message": "$USERNAME$ Bitwarden'da güncellendi.", + "placeholders": { + "username": { + "content": "$1" + } + }, + "description": "Shown to user after login is updated." + }, + "saveAsNewLoginAction": { + "message": "Yeni hesap olarak kaydet", + "description": "Button text for saving login details as a new entry." + }, + "updateLoginAction": { + "message": "Hesabı güncelle", + "description": "Button text for updating an existing login entry." + }, + "saveLoginPrompt": { + "message": "Hesap kaydedilsin mi?", + "description": "Prompt asking the user if they want to save their login details." + }, + "updateLoginPrompt": { + "message": "Mevcut hesap güncellensin mi?", + "description": "Prompt asking the user if they want to update an existing login entry." + }, + "loginSaveSuccess": { + "message": "Hesap kaydedildi", + "description": "Message displayed when login details are successfully saved." + }, + "loginUpdateSuccess": { + "message": "Hesap güncellendi", + "description": "Message displayed when login details are successfully updated." + }, + "saveFailure": { + "message": "Kaydetme hatası", + "description": "Error message shown when the system fails to save login details." + }, + "saveFailureDetails": { + "message": "Bu hesabı kaydedemedik. Bilgileri elle girmeyi deneyin.", + "description": "Detailed error message shown when saving login details fails." + }, "enableChangedPasswordNotification": { "message": "Mevcut hesapları güncellemeyi öner" }, @@ -1365,12 +1422,22 @@ "rememberMe": { "message": "Beni hatırla" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Don't ask again on this device for 30 days" + }, "sendVerificationCodeEmailAgain": { "message": "Doğrulama kodunu yeniden gönder" }, "useAnotherTwoStepMethod": { "message": "Başka bir iki aşamalı giriş yöntemini kullan" }, + "selectAnotherMethod": { + "message": "Select another method", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Use your recovery code" + }, "insertYubiKey": { "message": "YubiKey'i bilgisayarınızın USB portuna takın, ardından düğmesine dokunun." }, @@ -1383,9 +1450,18 @@ "webAuthnNewTabOpen": { "message": "Yeni sekme aç" }, + "openInNewTab": { + "message": "Yeni sekmede aç" + }, "webAuthnAuthenticate": { "message": "WebAutn ile doğrula" }, + "readSecurityKey": { + "message": "Read security key" + }, + "awaitingSecurityKeyInteraction": { + "message": "Awaiting security key interaction..." + }, "loginUnavailable": { "message": "Giriş yapılamıyor" }, @@ -1398,6 +1474,9 @@ "twoStepOptions": { "message": "İki aşamalı giriş seçenekleri" }, + "selectTwoStepLoginMethod": { + "message": "Select two-step login method" + }, "recoveryCodeDesc": { "message": "İki aşamalı doğrulama sağlayıcılarınıza ulaşamıyor musunuz? Kurtarma kodunuzu kullanarak hesabınızdaki tüm iki aşamalı giriş sağlayıcılarını devre dışı bırakabilirsiniz." }, @@ -2097,6 +2176,15 @@ "vaultTimeoutAction1": { "message": "Zaman aşımı eylemi" }, + "newCustomizationOptionsCalloutTitle": { + "message": "Yeni özelleştirme seçenekleri" + }, + "newCustomizationOptionsCalloutContent": { + "message": "Customize your vault experience with quick copy actions, compact mode, and more!" + }, + "newCustomizationOptionsCalloutLink": { + "message": "View all Appearance settings" + }, "lock": { "message": "Kilitle", "description": "Verb form: to make secure or inaccessible by" @@ -2391,8 +2479,17 @@ "atRiskPasswords": { "message": "Riskli parolalar" }, - "atRiskPasswordsDescSingleOrg": { - "message": "$ORGANIZATION$ is requesting you change the $COUNT$ passwords because they are at risk.", + "atRiskPasswordDescSingleOrg": { + "message": "$ORGANIZATION$ is requesting you change one password because it is at-risk.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + } + }, + "atRiskPasswordsDescSingleOrgPlural": { + "message": "$ORGANIZATION$ is requesting you change the $COUNT$ passwords because they are at-risk.", "placeholders": { "organization": { "content": "$1", @@ -2404,8 +2501,8 @@ } } }, - "atRiskPasswordsDescMultiOrg": { - "message": "Your organizations are requesting you change the $COUNT$ passwords because they are at risk.", + "atRiskPasswordsDescMultiOrgPlural": { + "message": "Your organizations are requesting you change the $COUNT$ passwords because they are at-risk.", "placeholders": { "count": { "content": "$1", @@ -2431,6 +2528,36 @@ "changeAtRiskPasswordsFasterDesc": { "message": "Update your settings so you can quickly autofill your passwords and generate new ones" }, + "reviewAtRiskLogins": { + "message": "Review at-risk logins" + }, + "reviewAtRiskPasswords": { + "message": "Review at-risk passwords" + }, + "reviewAtRiskLoginsSlideDesc": { + "message": "Your organization passwords are at-risk because they are weak, reused, and/or exposed.", + "description": "Description of the review at-risk login slide on the at-risk password page carousel" + }, + "reviewAtRiskLoginSlideImgAlt": { + "message": "Illustration of a list of logins that are at-risk" + }, + "generatePasswordSlideDesc": { + "message": "Quickly generate a strong, unique password with the Bitwarden autofill menu on the at-risk site.", + "description": "Description of the generate password slide on the at-risk password page carousel" + }, + "generatePasswordSlideImgAlt": { + "message": "Illustration of the Bitwarden autofill menu displaying a generated password" + }, + "updateInBitwarden": { + "message": "Update in Bitwarden" + }, + "updateInBitwardenSlideDesc": { + "message": "Bitwarden will then prompt you to update the password in the password manager.", + "description": "Description of the update in Bitwarden slide on the at-risk password page carousel" + }, + "updateInBitwardenSlideImgAlt": { + "message": "Illustration of a Bitwarden’s notification prompting the user to update the login" + }, "turnOnAutofill": { "message": "Otomatik doldurmayı etkinleştir" }, @@ -3983,6 +4110,9 @@ "activeAccount": { "message": "Aktif hesap" }, + "bitwardenAccount": { + "message": "Bitwarden hesabı" + }, "availableAccounts": { "message": "Mevcut hesaplar" }, @@ -4181,6 +4311,20 @@ } } }, + "copyFieldValue": { + "message": "Kopyala: $FIELD$, $VALUE$", + "description": "Title for a button that copies a field value to the clipboard.", + "placeholders": { + "field": { + "content": "$1", + "example": "Username" + }, + "value": { + "content": "$2", + "example": "Foo" + } + } + }, "noValuesToCopy": { "message": "Kopyalanacak değer yok" }, @@ -5002,5 +5146,8 @@ }, "updateDesktopAppOrDisableFingerprintDialogMessage": { "message": "To use biometric unlock, please update your desktop application, or disable fingerprint unlock in the desktop settings." + }, + "changeAtRiskPassword": { + "message": "Change at-risk password" } } diff --git a/apps/browser/src/_locales/uk/messages.json b/apps/browser/src/_locales/uk/messages.json index abe0a082e88..69b6d3d5ce8 100644 --- a/apps/browser/src/_locales/uk/messages.json +++ b/apps/browser/src/_locales/uk/messages.json @@ -80,6 +80,15 @@ "masterPassHint": { "message": "Підказка для головного пароля (необов'язково)" }, + "passwordStrengthScore": { + "message": "Рейтинг надійності пароля $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "joinOrganization": { "message": "Приєднатися до організації" }, @@ -470,22 +479,6 @@ "length": { "message": "Довжина" }, - "uppercase": { - "message": "Верхній регістр (A-Z)", - "description": "deprecated. Use uppercaseLabel instead." - }, - "lowercase": { - "message": "Нижній регістр (a-z)", - "description": "deprecated. Use lowercaseLabel instead." - }, - "numbers": { - "message": "Числа (0-9)", - "description": "deprecated. Use numbersLabel instead." - }, - "specialCharacters": { - "message": "Спеціальні символи (!@#$%^&*)", - "description": "deprecated. Use specialCharactersLabel instead." - }, "include": { "message": "Включити", "description": "Card header for password generator include block" @@ -518,10 +511,6 @@ "message": "Спеціальні символи", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "numWords": { "message": "Кількість слів" }, @@ -660,8 +649,8 @@ "browserNotSupportClipboard": { "message": "Ваш браузер не підтримує копіювання даних в буфер обміну. Скопіюйте вручну." }, - "verifyIdentity": { - "message": "Виконати перевірку" + "verifyYourIdentity": { + "message": "Підтвердьте свою особу" }, "weDontRecognizeThisDevice": { "message": "Ми не розпізнаємо цей пристрій. Введіть код, надісланий на вашу електронну пошту, щоб підтвердити вашу особу." @@ -876,6 +865,21 @@ "logInToBitwarden": { "message": "Увійти в Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "Введіть код, надісланий вам електронною поштою" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Введіть код з програми автентифікації" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Натисніть свій YubiKey для автентифікації" + }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Для вашого облікового запису необхідно пройти двоетапну перевірку з Duo. Виконайте наведені нижче кроки, щоб завершити вхід." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Виконайте наведені нижче кроки, щоб завершити вхід." + }, "restartRegistration": { "message": "Перезапустити реєстрацію" }, @@ -897,6 +901,9 @@ "no": { "message": "Ні" }, + "location": { + "message": "Розташування" + }, "unexpectedError": { "message": "Сталася неочікувана помилка." }, @@ -1030,7 +1037,7 @@ "message": "Натисніть на запис у режимі перегляду сховища для автозаповнення" }, "clickToAutofill": { - "message": "Click items in autofill suggestion to fill" + "message": "Натисніть запис у пропозиціях для автозаповнення" }, "clearClipboard": { "message": "Очистити буфер обміну", @@ -1046,6 +1053,56 @@ "notificationAddSave": { "message": "Зберегти" }, + "loginSaveSuccessDetails": { + "message": "$USERNAME$ збережено до Bitwarden.", + "placeholders": { + "username": { + "content": "$1" + } + }, + "description": "Shown to user after login is saved." + }, + "loginUpdatedSuccessDetails": { + "message": "$USERNAME$ оновлено у Bitwarden.", + "placeholders": { + "username": { + "content": "$1" + } + }, + "description": "Shown to user after login is updated." + }, + "saveAsNewLoginAction": { + "message": "Зберегти як новий запис", + "description": "Button text for saving login details as a new entry." + }, + "updateLoginAction": { + "message": "Оновити запис", + "description": "Button text for updating an existing login entry." + }, + "saveLoginPrompt": { + "message": "Зберегти запис?", + "description": "Prompt asking the user if they want to save their login details." + }, + "updateLoginPrompt": { + "message": "Оновити наявний запис?", + "description": "Prompt asking the user if they want to update an existing login entry." + }, + "loginSaveSuccess": { + "message": "Запис збережено", + "description": "Message displayed when login details are successfully saved." + }, + "loginUpdateSuccess": { + "message": "Запис оновлено", + "description": "Message displayed when login details are successfully updated." + }, + "saveFailure": { + "message": "Помилка збереження", + "description": "Error message shown when the system fails to save login details." + }, + "saveFailureDetails": { + "message": "На жаль, не вдається зберегти. Введіть дані вручну.", + "description": "Detailed error message shown when saving login details fails." + }, "enableChangedPasswordNotification": { "message": "Запитувати про оновлення запису" }, @@ -1365,12 +1422,22 @@ "rememberMe": { "message": "Запам'ятати мене" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Більше не запитувати на цьому пристрої протягом 30 днів" + }, "sendVerificationCodeEmailAgain": { "message": "Надіслати код підтвердження ще раз" }, "useAnotherTwoStepMethod": { "message": "Інший спосіб двоетапної перевірки" }, + "selectAnotherMethod": { + "message": "Обрати інший спосіб", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Використати код відновлення" + }, "insertYubiKey": { "message": "Вставте свій YubiKey в USB порт комп'ютера, потім торкніться цієї кнопки." }, @@ -1383,9 +1450,18 @@ "webAuthnNewTabOpen": { "message": "Відкрити нову вкладку" }, + "openInNewTab": { + "message": "Відкрити в новій вкладці" + }, "webAuthnAuthenticate": { "message": "Автентифікація WebAuthn" }, + "readSecurityKey": { + "message": "Зчитати ключ безпеки" + }, + "awaitingSecurityKeyInteraction": { + "message": "Очікується взаємодія з ключем безпеки..." + }, "loginUnavailable": { "message": "Вхід недоступний" }, @@ -1398,6 +1474,9 @@ "twoStepOptions": { "message": "Налаштування двоетапної перевірки" }, + "selectTwoStepLoginMethod": { + "message": "Виберіть спосіб двоетапної перевірки" + }, "recoveryCodeDesc": { "message": "Втратили доступ до всіх провайдерів двоетапної перевірки? Скористайтеся кодом відновлення, щоб вимкнути двоетапну перевірку для свого облікового запису." }, @@ -2089,7 +2168,7 @@ "description": "This will be used as part of a larger sentence, broken up to include the generator icon. The full sentence will read 'Use the generator [GENERATOR_ICON] to create a strong unique password'" }, "vaultCustomization": { - "message": "Vault customization" + "message": "Налаштування сховища" }, "vaultTimeoutAction": { "message": "Дія після часу очікування сховища" @@ -2097,6 +2176,15 @@ "vaultTimeoutAction1": { "message": "Дія після часу очікування" }, + "newCustomizationOptionsCalloutTitle": { + "message": "Нові можливості налаштування" + }, + "newCustomizationOptionsCalloutContent": { + "message": "Налаштуйте своє сховище за допомогою швидких дій копіювання, компактного режиму та інших можливостей!" + }, + "newCustomizationOptionsCalloutLink": { + "message": "Всі налаштування подання" + }, "lock": { "message": "Блокувати", "description": "Verb form: to make secure or inaccessible by" @@ -2391,7 +2479,16 @@ "atRiskPasswords": { "message": "Ризиковані паролі" }, - "atRiskPasswordsDescSingleOrg": { + "atRiskPasswordDescSingleOrg": { + "message": "$ORGANIZATION$ вимагає зміни один пароль, оскільки він ризикований.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + } + }, + "atRiskPasswordsDescSingleOrgPlural": { "message": "$ORGANIZATION$ вимагає зміни $COUNT$ паролів, оскільки вони ризиковані.", "placeholders": { "organization": { @@ -2404,7 +2501,7 @@ } } }, - "atRiskPasswordsDescMultiOrg": { + "atRiskPasswordsDescMultiOrgPlural": { "message": "Ваші організації вимагають зміни $COUNT$ паролів, оскільки вони ризиковані.", "placeholders": { "count": { @@ -2431,6 +2528,36 @@ "changeAtRiskPasswordsFasterDesc": { "message": "Оновіть налаштування, щоб швидше автоматично заповнювати й створювати паролі" }, + "reviewAtRiskLogins": { + "message": "Переглянути записи з ризиком" + }, + "reviewAtRiskPasswords": { + "message": "Переглянути ризиковані паролі" + }, + "reviewAtRiskLoginsSlideDesc": { + "message": "Паролі вашої організації ризиковані, оскільки вони ненадійні, повторно використовуються, та/або викриті.", + "description": "Description of the review at-risk login slide on the at-risk password page carousel" + }, + "reviewAtRiskLoginSlideImgAlt": { + "message": "Ілюстрація списку ризикованих записів" + }, + "generatePasswordSlideDesc": { + "message": "Швидко згенеруйте надійний, унікальний пароль через меню автозаповнення Bitwarden на сайті з ризикованим паролем.", + "description": "Description of the generate password slide on the at-risk password page carousel" + }, + "generatePasswordSlideImgAlt": { + "message": "Ілюстрація меню автозаповнення Bitwarden, що показує згенерований пароль" + }, + "updateInBitwarden": { + "message": "Оновити в Bitwarden" + }, + "updateInBitwardenSlideDesc": { + "message": "Потім Bitwarden запропонує вам оновити пароль у менеджері паролів.", + "description": "Description of the update in Bitwarden slide on the at-risk password page carousel" + }, + "updateInBitwardenSlideImgAlt": { + "message": "Ілюстрація сповіщення Bitwarden, що спонукає користувача оновити пароль" + }, "turnOnAutofill": { "message": "Увімкніть автозаповнення" }, @@ -3983,6 +4110,9 @@ "activeAccount": { "message": "Активний обліковий запис" }, + "bitwardenAccount": { + "message": "Обліковий запис Bitwarden" + }, "availableAccounts": { "message": "Доступні облікові записи" }, @@ -4181,6 +4311,20 @@ } } }, + "copyFieldValue": { + "message": "Копіювати $FIELD$, $VALUE$", + "description": "Title for a button that copies a field value to the clipboard.", + "placeholders": { + "field": { + "content": "$1", + "example": "Username" + }, + "value": { + "content": "$2", + "example": "Foo" + } + } + }, "noValuesToCopy": { "message": "Немає значень для копіювання" }, @@ -4206,7 +4350,7 @@ "message": "Сповіщення" }, "appearance": { - "message": "Вигляд" + "message": "Подання" }, "errorAssigningTargetCollection": { "message": "Помилка призначення цільової збірки." @@ -5002,5 +5146,8 @@ }, "updateDesktopAppOrDisableFingerprintDialogMessage": { "message": "Щоб використовувати біометричне розблокування, оновіть комп'ютерну програму, або вимкніть розблокування відбитком пальця в налаштуваннях системи." + }, + "changeAtRiskPassword": { + "message": "Змінити ризикований пароль" } } diff --git a/apps/browser/src/_locales/vi/messages.json b/apps/browser/src/_locales/vi/messages.json index f4164e66ee2..84f918d1acb 100644 --- a/apps/browser/src/_locales/vi/messages.json +++ b/apps/browser/src/_locales/vi/messages.json @@ -80,6 +80,15 @@ "masterPassHint": { "message": "Gợi ý mật khẩu chính (tùy chọn)" }, + "passwordStrengthScore": { + "message": "Password strength score $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "joinOrganization": { "message": "Tham gia tổ chức" }, @@ -470,22 +479,6 @@ "length": { "message": "Độ dài" }, - "uppercase": { - "message": "Chữ in hoa (A-Z)", - "description": "deprecated. Use uppercaseLabel instead." - }, - "lowercase": { - "message": "Chữ in thường (a-z)", - "description": "deprecated. Use lowercaseLabel instead." - }, - "numbers": { - "message": "Chữ số (0-9)", - "description": "deprecated. Use numbersLabel instead." - }, - "specialCharacters": { - "message": "Ký tự đặc biệt (!@#$%^&*)", - "description": "deprecated. Use specialCharactersLabel instead." - }, "include": { "message": "Bao gồm", "description": "Card header for password generator include block" @@ -518,10 +511,6 @@ "message": "Bao gồm các ký tự đặc biệt", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "numWords": { "message": "Số từ" }, @@ -660,8 +649,8 @@ "browserNotSupportClipboard": { "message": "Trình duyệt web của bạn không hỗ trợ dễ dàng sao chép bộ nhớ tạm. Bạn có thể sao chép nó theo cách thủ công để thay thế." }, - "verifyIdentity": { - "message": "Xác minh danh tính" + "verifyYourIdentity": { + "message": "Verify your identity" }, "weDontRecognizeThisDevice": { "message": "We don't recognize this device. Enter the code sent to your email to verify your identity." @@ -876,6 +865,21 @@ "logInToBitwarden": { "message": "Log in to Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "Enter the code sent to your email" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Enter the code from your authenticator app" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Press your YubiKey to authenticate" + }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Duo two-step login is required for your account. Follow the steps below to finish logging in." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Follow the steps below to finish logging in." + }, "restartRegistration": { "message": "Tiến hành đăng ký lại" }, @@ -897,6 +901,9 @@ "no": { "message": "Không" }, + "location": { + "message": "Location" + }, "unexpectedError": { "message": "Một lỗi bất ngờ đã xảy ra." }, @@ -1046,6 +1053,56 @@ "notificationAddSave": { "message": "Lưu" }, + "loginSaveSuccessDetails": { + "message": "$USERNAME$ saved to Bitwarden.", + "placeholders": { + "username": { + "content": "$1" + } + }, + "description": "Shown to user after login is saved." + }, + "loginUpdatedSuccessDetails": { + "message": "$USERNAME$ updated in Bitwarden.", + "placeholders": { + "username": { + "content": "$1" + } + }, + "description": "Shown to user after login is updated." + }, + "saveAsNewLoginAction": { + "message": "Save as new login", + "description": "Button text for saving login details as a new entry." + }, + "updateLoginAction": { + "message": "Update login", + "description": "Button text for updating an existing login entry." + }, + "saveLoginPrompt": { + "message": "Save login?", + "description": "Prompt asking the user if they want to save their login details." + }, + "updateLoginPrompt": { + "message": "Update existing login?", + "description": "Prompt asking the user if they want to update an existing login entry." + }, + "loginSaveSuccess": { + "message": "Login saved", + "description": "Message displayed when login details are successfully saved." + }, + "loginUpdateSuccess": { + "message": "Login updated", + "description": "Message displayed when login details are successfully updated." + }, + "saveFailure": { + "message": "Error saving", + "description": "Error message shown when the system fails to save login details." + }, + "saveFailureDetails": { + "message": "Oh no! We couldn't save this. Try entering the details manually.", + "description": "Detailed error message shown when saving login details fails." + }, "enableChangedPasswordNotification": { "message": "Hỏi để cập nhật đăng nhập hiện có" }, @@ -1365,12 +1422,22 @@ "rememberMe": { "message": "Ghi nhớ đăng nhập" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Don't ask again on this device for 30 days" + }, "sendVerificationCodeEmailAgain": { "message": "Gửi lại email chứa mã xác nhận" }, "useAnotherTwoStepMethod": { "message": "Sử dụng phương pháp đăng nhập 2 bước khác" }, + "selectAnotherMethod": { + "message": "Select another method", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Use your recovery code" + }, "insertYubiKey": { "message": "Lắp YubiKey vào cổng USB máy tính của bạn, sau đó chạm vào nút trên nó." }, @@ -1383,9 +1450,18 @@ "webAuthnNewTabOpen": { "message": "Mở thẻ mới" }, + "openInNewTab": { + "message": "Open in new tab" + }, "webAuthnAuthenticate": { "message": "Xác thực WebAuthn" }, + "readSecurityKey": { + "message": "Read security key" + }, + "awaitingSecurityKeyInteraction": { + "message": "Awaiting security key interaction..." + }, "loginUnavailable": { "message": "Đăng nhập không có sẵn" }, @@ -1398,6 +1474,9 @@ "twoStepOptions": { "message": "Tùy chọn xác thực hai lớp" }, + "selectTwoStepLoginMethod": { + "message": "Select two-step login method" + }, "recoveryCodeDesc": { "message": "Bạn mất quyền truy cập vào tất cả các dịch vụ xác thực 2 lớp? Sử dụng mã phục hồi của bạn để vô hiệu hóa tất cả các dịch vụ xác thực hai lớp trong tài khoản của bạn." }, @@ -2097,6 +2176,15 @@ "vaultTimeoutAction1": { "message": "Timeout action" }, + "newCustomizationOptionsCalloutTitle": { + "message": "New customization options" + }, + "newCustomizationOptionsCalloutContent": { + "message": "Customize your vault experience with quick copy actions, compact mode, and more!" + }, + "newCustomizationOptionsCalloutLink": { + "message": "View all Appearance settings" + }, "lock": { "message": "Khóa", "description": "Verb form: to make secure or inaccessible by" @@ -2391,8 +2479,17 @@ "atRiskPasswords": { "message": "At-risk passwords" }, - "atRiskPasswordsDescSingleOrg": { - "message": "$ORGANIZATION$ is requesting you change the $COUNT$ passwords because they are at risk.", + "atRiskPasswordDescSingleOrg": { + "message": "$ORGANIZATION$ is requesting you change one password because it is at-risk.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + } + }, + "atRiskPasswordsDescSingleOrgPlural": { + "message": "$ORGANIZATION$ is requesting you change the $COUNT$ passwords because they are at-risk.", "placeholders": { "organization": { "content": "$1", @@ -2404,8 +2501,8 @@ } } }, - "atRiskPasswordsDescMultiOrg": { - "message": "Your organizations are requesting you change the $COUNT$ passwords because they are at risk.", + "atRiskPasswordsDescMultiOrgPlural": { + "message": "Your organizations are requesting you change the $COUNT$ passwords because they are at-risk.", "placeholders": { "count": { "content": "$1", @@ -2431,6 +2528,36 @@ "changeAtRiskPasswordsFasterDesc": { "message": "Update your settings so you can quickly autofill your passwords and generate new ones" }, + "reviewAtRiskLogins": { + "message": "Review at-risk logins" + }, + "reviewAtRiskPasswords": { + "message": "Review at-risk passwords" + }, + "reviewAtRiskLoginsSlideDesc": { + "message": "Your organization passwords are at-risk because they are weak, reused, and/or exposed.", + "description": "Description of the review at-risk login slide on the at-risk password page carousel" + }, + "reviewAtRiskLoginSlideImgAlt": { + "message": "Illustration of a list of logins that are at-risk" + }, + "generatePasswordSlideDesc": { + "message": "Quickly generate a strong, unique password with the Bitwarden autofill menu on the at-risk site.", + "description": "Description of the generate password slide on the at-risk password page carousel" + }, + "generatePasswordSlideImgAlt": { + "message": "Illustration of the Bitwarden autofill menu displaying a generated password" + }, + "updateInBitwarden": { + "message": "Update in Bitwarden" + }, + "updateInBitwardenSlideDesc": { + "message": "Bitwarden will then prompt you to update the password in the password manager.", + "description": "Description of the update in Bitwarden slide on the at-risk password page carousel" + }, + "updateInBitwardenSlideImgAlt": { + "message": "Illustration of a Bitwarden’s notification prompting the user to update the login" + }, "turnOnAutofill": { "message": "Turn on autofill" }, @@ -3983,6 +4110,9 @@ "activeAccount": { "message": "Tài khoản đang hoạt động" }, + "bitwardenAccount": { + "message": "Bitwarden account" + }, "availableAccounts": { "message": "Các tài khoản khả dụng" }, @@ -4181,6 +4311,20 @@ } } }, + "copyFieldValue": { + "message": "Copy $FIELD$, $VALUE$", + "description": "Title for a button that copies a field value to the clipboard.", + "placeholders": { + "field": { + "content": "$1", + "example": "Username" + }, + "value": { + "content": "$2", + "example": "Foo" + } + } + }, "noValuesToCopy": { "message": "Không có giá trị để sao chép" }, @@ -5002,5 +5146,8 @@ }, "updateDesktopAppOrDisableFingerprintDialogMessage": { "message": "To use biometric unlock, please update your desktop application, or disable fingerprint unlock in the desktop settings." + }, + "changeAtRiskPassword": { + "message": "Change at-risk password" } } diff --git a/apps/browser/src/_locales/zh_CN/messages.json b/apps/browser/src/_locales/zh_CN/messages.json index 7b94c0b07b6..409d94604d9 100644 --- a/apps/browser/src/_locales/zh_CN/messages.json +++ b/apps/browser/src/_locales/zh_CN/messages.json @@ -80,6 +80,15 @@ "masterPassHint": { "message": "主密码提示(可选)" }, + "passwordStrengthScore": { + "message": "密码强度评分 $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "joinOrganization": { "message": "加入组织" }, @@ -470,22 +479,6 @@ "length": { "message": "长度" }, - "uppercase": { - "message": "大写 (A-Z)", - "description": "deprecated. Use uppercaseLabel instead." - }, - "lowercase": { - "message": "小写 (a-z)", - "description": "deprecated. Use lowercaseLabel instead." - }, - "numbers": { - "message": "数字 (0-9)", - "description": "deprecated. Use numbersLabel instead." - }, - "specialCharacters": { - "message": "特殊字符 (!@#$%^&*)", - "description": "deprecated. Use specialCharactersLabel instead." - }, "include": { "message": "包含", "description": "Card header for password generator include block" @@ -518,10 +511,6 @@ "message": "包含特殊字符", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "numWords": { "message": "单词个数" }, @@ -660,8 +649,8 @@ "browserNotSupportClipboard": { "message": "您的浏览器不支持剪贴板简单复制,请手动复制。" }, - "verifyIdentity": { - "message": "验证身份" + "verifyYourIdentity": { + "message": "验证您的身份" }, "weDontRecognizeThisDevice": { "message": "我们无法识别这个设备。请输入发送到您电子邮箱中的代码以验证您的身份。" @@ -876,6 +865,21 @@ "logInToBitwarden": { "message": "登录到 Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "输入发送到您的电子邮箱的代码" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "输入来自您的验证器 App 的代码" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "按下 YubiKey 以验证身份" + }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "您的账户要求使用 Duo 两步登录。请按照以下步骤完成登录。" + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "按照以下步骤完成登录。" + }, "restartRegistration": { "message": "重启注册" }, @@ -897,6 +901,9 @@ "no": { "message": "否" }, + "location": { + "message": "位置" + }, "unexpectedError": { "message": "发生意外错误。" }, @@ -907,7 +914,7 @@ "message": "文件夹已添加" }, "twoStepLoginConfirmation": { - "message": "两步登录要求您从其他设备(例如安全钥匙、验证器 App、短信、电话或者电子邮件)来验证您的登录,这能使您的账户更加安全。两步登录需要在 bitwarden.com 网页版密码库中设置。现在访问此网站吗?" + "message": "两步登录要求您从其他设备(例如安全密钥、验证器 App、短信、电话或者电子邮件)来验证您的登录,这能使您的账户更加安全。两步登录需要在 bitwarden.com 网页版密码库中设置。现在访问此网站吗?" }, "twoStepLoginConfirmationContent": { "message": "在 Bitwarden 网页 App 中设置两步登录,让您的账户更加安全。" @@ -993,7 +1000,7 @@ "message": "搜索类型" }, "noneFolder": { - "message": "无文件夹", + "message": "默认文件夹", "description": "This is the folder for uncategorized items" }, "enableAddLoginNotification": { @@ -1006,7 +1013,7 @@ "message": "在密码库中找不到匹配项目时询问添加一个。" }, "addLoginNotificationDescAlt": { - "message": "如果在密码库中找不到项目,询问添加一个。适用于所有已登录的账户。" + "message": "在密码库中找不到匹配项目时询问添加一个。适用于所有已登录的账户。" }, "showCardsInVaultViewV2": { "message": "在密码库视图中将支付卡始终显示为自动填充建议" @@ -1046,14 +1053,64 @@ "notificationAddSave": { "message": "保存" }, + "loginSaveSuccessDetails": { + "message": "$USERNAME$ 已保存到 Bitwarden。", + "placeholders": { + "username": { + "content": "$1" + } + }, + "description": "Shown to user after login is saved." + }, + "loginUpdatedSuccessDetails": { + "message": "$USERNAME$ 已在 Bitwarden 中更新。", + "placeholders": { + "username": { + "content": "$1" + } + }, + "description": "Shown to user after login is updated." + }, + "saveAsNewLoginAction": { + "message": "保存为新的登录", + "description": "Button text for saving login details as a new entry." + }, + "updateLoginAction": { + "message": "更新登录", + "description": "Button text for updating an existing login entry." + }, + "saveLoginPrompt": { + "message": "保存登录吗?", + "description": "Prompt asking the user if they want to save their login details." + }, + "updateLoginPrompt": { + "message": "更新现有的登录吗?", + "description": "Prompt asking the user if they want to update an existing login entry." + }, + "loginSaveSuccess": { + "message": "登录已保存", + "description": "Message displayed when login details are successfully saved." + }, + "loginUpdateSuccess": { + "message": "登录已更新", + "description": "Message displayed when login details are successfully updated." + }, + "saveFailure": { + "message": "保存时出错", + "description": "Error message shown when the system fails to save login details." + }, + "saveFailureDetails": { + "message": "哦不!我们无法保存它。请尝试手动输入详细信息。", + "description": "Detailed error message shown when saving login details fails." + }, "enableChangedPasswordNotification": { "message": "询问更新现有的登录" }, "changedPasswordNotificationDesc": { - "message": "在网站上检测到更改时询问更新登录密码。" + "message": "在网站上检测到更改时询问更新登录的密码。" }, "changedPasswordNotificationDescAlt": { - "message": "当在网站上检测到更改时,询问更新登录项目的密码。适用于所有已登录的账户。" + "message": "在网站上检测到更改时询问更新登录的密码。适用于所有已登录的账户。" }, "enableUsePasskeys": { "message": "询问保存和使用通行密钥" @@ -1300,7 +1357,7 @@ "message": "升级到高级版并接收:" }, "premiumPrice": { - "message": "全部仅需 $PRICE$ /年!", + "message": "所有功能仅需 $PRICE$ /年!", "placeholders": { "price": { "content": "$1", @@ -1309,7 +1366,7 @@ } }, "premiumPriceV2": { - "message": "全部仅需 $PRICE$ 每年!", + "message": "所有功能仅需 $PRICE$ /年!", "placeholders": { "price": { "content": "$1", @@ -1327,7 +1384,7 @@ "message": "如果登录包含验证器密钥,当自动填充此登录时,将 TOTP 验证码复制到剪贴板。" }, "enableAutoBiometricsPrompt": { - "message": "启动时要求生物识别" + "message": "启动时提示生物识别" }, "premiumRequired": { "message": "需要高级会员" @@ -1365,17 +1422,27 @@ "rememberMe": { "message": "记住我" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "30 天内在此设备上不再询问" + }, "sendVerificationCodeEmailAgain": { "message": "再次发送验证码电子邮件" }, "useAnotherTwoStepMethod": { "message": "使用其他两步登录方式" }, + "selectAnotherMethod": { + "message": "选择其他方式", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "使用您的恢复代码" + }, "insertYubiKey": { "message": "将您的 YubiKey 插入计算机的 USB 端口,然后触摸其按钮。" }, "insertU2f": { - "message": "将您的安全钥匙插入计算机的 USB 端口。如果它有按钮,请触摸它。" + "message": "将您的安全密钥插入计算机的 USB 端口。如果它有按钮,请触摸它。" }, "webAuthnNewTab": { "message": "要开始 WebAuthn 2FA 验证,请点击下面的按钮打开一个新标签页,并按照新标签页中提供的说明操作。" @@ -1383,9 +1450,18 @@ "webAuthnNewTabOpen": { "message": "打开新标签页" }, + "openInNewTab": { + "message": "在新标签页中打开" + }, "webAuthnAuthenticate": { "message": "验证 WebAuthn" }, + "readSecurityKey": { + "message": "读取安全密钥" + }, + "awaitingSecurityKeyInteraction": { + "message": "等待安全密钥交互..." + }, "loginUnavailable": { "message": "登录不可用" }, @@ -1393,11 +1469,14 @@ "message": "此账户已设置两步登录,但此浏览器不支持任何已配置的两步登录提供程序。" }, "noTwoStepProviders2": { - "message": "请使用支持的网页浏览器(例如 Chrome)和/或添加其他支持更广泛的提供程序(例如验证器 App)。" + "message": "请使用受支持的网页浏览器(例如 Chrome),和/或添加其他跨网页浏览器支持更好的提供程序(例如验证器 App)。" }, "twoStepOptions": { "message": "两步登录选项" }, + "selectTwoStepLoginMethod": { + "message": "选择两步登录方式" + }, "recoveryCodeDesc": { "message": "无法访问您所有的双重身份提供程序吗?请使用您的恢复代码来关闭您账户中所有的双重身份提供程序。" }, @@ -1412,7 +1491,7 @@ "description": "'Bitwarden Authenticator' is a product name and should not be translated." }, "yubiKeyTitleV2": { - "message": "Yubico OTP 安全钥匙" + "message": "Yubico OTP 安全密钥" }, "yubiKeyDesc": { "message": "使用 YubiKey 来访问您的账户。支持 YubiKey 4、4 Nano、4C 以及 NEO 设备。" @@ -1422,14 +1501,14 @@ "description": "'Duo Security' and 'Duo Mobile' are product names and should not be translated." }, "duoOrganizationDesc": { - "message": "为您的组织使用 Duo Security 的 Duo 移动 App、短信、电话或 U2F 安全钥匙来进行验证。", + "message": "为您的组织使用 Duo Security 的 Duo 移动 App、短信、电话或 U2F 安全密钥来进行验证。", "description": "'Duo Security' and 'Duo Mobile' are product names and should not be translated." }, "webAuthnTitle": { "message": "FIDO2 WebAuthn" }, "webAuthnDesc": { - "message": "使用任何 WebAuthn 兼容的安全钥匙访问您的账户。" + "message": "使用任何 WebAuthn 兼容的安全密钥访问您的账户。" }, "emailTitle": { "message": "电子邮箱" @@ -1575,7 +1654,7 @@ "message": "为当前网站自动填充最后一次使用的身份信息" }, "commandGeneratePasswordDesc": { - "message": "生成一个新的随机密码并将其复制到剪贴板中。" + "message": "生成一个新的随机密码并将其复制到剪贴板" }, "commandLockVaultDesc": { "message": "锁定密码库" @@ -1890,11 +1969,11 @@ "message": "没有在已知的数据泄露中发现此密码,它暂时比较安全。" }, "baseDomain": { - "message": "基础域", + "message": "基础域名", "description": "Domain name. Ex. website.com" }, "baseDomainOptionRecommended": { - "message": "基础域(推荐)", + "message": "基础域名(推荐)", "description": "Domain name. Ex. website.com" }, "domainName": { @@ -2002,10 +2081,10 @@ "description": "ex. A weak password. Scale: Weak -> Good -> Strong" }, "weakMasterPassword": { - "message": "弱主密码" + "message": "脆弱的主密码" }, "weakMasterPasswordDesc": { - "message": "您选择的主密码较弱。您应该使用强密码(或密码短语)来正确保护您的 Bitwarden 账户。仍要使用此主密码吗?" + "message": "您选择的主密码较弱。您应该使用强密码(或密码短语)来正确保护您的 Bitwarden 账户。确定要使用这个主密码吗?" }, "pin": { "message": "PIN 码", @@ -2051,7 +2130,7 @@ "message": "浏览器重启后使用主密码锁定" }, "lockWithMasterPassOnRestart1": { - "message": "浏览器重启时需要主密码" + "message": "浏览器重启时要求主密码" }, "selectOneCollection": { "message": "您必须至少选择一个集合。" @@ -2097,6 +2176,15 @@ "vaultTimeoutAction1": { "message": "超时动作" }, + "newCustomizationOptionsCalloutTitle": { + "message": "新的自定义选项" + }, + "newCustomizationOptionsCalloutContent": { + "message": "自定义您的密码库体验,包括快速复制操作、紧凑模式等!" + }, + "newCustomizationOptionsCalloutLink": { + "message": "查看所有外观设置" + }, "lock": { "message": "锁定", "description": "Verb form: to make secure or inaccessible by" @@ -2362,10 +2450,10 @@ "message": "排除域名" }, "excludedDomainsDesc": { - "message": "Bitwarden 将不会询问是否为这些域名保存登录信息。您必须刷新页面才能使更改生效。" + "message": "Bitwarden 将不会提示保存这些域名的登录信息。您必须刷新页面才能使更改生效。" }, "excludedDomainsDescAlt": { - "message": "Bitwarden 将不会询问是否为所有已登录账户的这些域名保存登录信息。您必须刷新页面才能使更改生效。" + "message": "Bitwarden 将不会提示为所有已登录账户保存这些域名的登录信息。您必须刷新页面才能使更改生效。" }, "blockedDomainsDesc": { "message": "将不会为这些网站提供自动填充和其他相关功能。您必须刷新页面才能使更改生效。" @@ -2389,9 +2477,18 @@ } }, "atRiskPasswords": { - "message": "有风险的密码" + "message": "存在风险的密码" }, - "atRiskPasswordsDescSingleOrg": { + "atRiskPasswordDescSingleOrg": { + "message": "$ORGANIZATION$ 要求您更改 1 个密码,因为它存在风险。", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + } + }, + "atRiskPasswordsDescSingleOrgPlural": { "message": "$ORGANIZATION$ 要求您更改 $COUNT$ 个密码,因为它们存在风险。", "placeholders": { "organization": { @@ -2404,7 +2501,7 @@ } } }, - "atRiskPasswordsDescMultiOrg": { + "atRiskPasswordsDescMultiOrgPlural": { "message": "您的组织要求您更改 $COUNT$ 个密码,因为它们存在风险。", "placeholders": { "count": { @@ -2414,10 +2511,10 @@ } }, "reviewAndChangeAtRiskPassword": { - "message": "审查并更改某个有风险的密码" + "message": "审查并更改 1 个存在风险的密码" }, "reviewAndChangeAtRiskPasswordsPlural": { - "message": "审查并更改 $COUNT$ 个有风险的密码", + "message": "审查并更改 $COUNT$ 个存在风险的密码", "placeholders": { "count": { "content": "$1", @@ -2431,6 +2528,36 @@ "changeAtRiskPasswordsFasterDesc": { "message": "更新您的设置,以便您可以快速自动填充密码并生成新的密码" }, + "reviewAtRiskLogins": { + "message": "审查存在风险的登录" + }, + "reviewAtRiskPasswords": { + "message": "审查存在风险的密码" + }, + "reviewAtRiskLoginsSlideDesc": { + "message": "您的组织密码存在风险,因为它们过于简单、被重复使用和/或已暴露。", + "description": "Description of the review at-risk login slide on the at-risk password page carousel" + }, + "reviewAtRiskLoginSlideImgAlt": { + "message": "存在风险的登录列表示意图" + }, + "generatePasswordSlideDesc": { + "message": "在存在风险的网站上,使用 Bitwarden 自动填充菜单快速生成强大且唯一的密码。", + "description": "Description of the generate password slide on the at-risk password page carousel" + }, + "generatePasswordSlideImgAlt": { + "message": "Bitwarden 自动填充菜单显示生成的密码示意图" + }, + "updateInBitwarden": { + "message": "在 Bitwarden 中更新" + }, + "updateInBitwardenSlideDesc": { + "message": "然后,Bitwarden 会提示您更新密码管理器中的密码。", + "description": "Description of the update in Bitwarden slide on the at-risk password page carousel" + }, + "updateInBitwardenSlideImgAlt": { + "message": "提示用户更新登录的 Bitwarden 通知示意图" + }, "turnOnAutofill": { "message": "开启自动填充" }, @@ -2465,7 +2592,7 @@ "message": "排除域名更改已保存" }, "limitSendViews": { - "message": "限制查看" + "message": "查看次数限制" }, "limitSendViewsHint": { "message": "达到限额后,任何人无法查看此 Send。", @@ -3693,7 +3820,7 @@ } }, "tryAgain": { - "message": "请重试" + "message": "重试" }, "verificationRequiredForActionSetPinToContinue": { "message": "此操作需要验证。设置一个 PIN 码以继续。" @@ -3983,6 +4110,9 @@ "activeAccount": { "message": "活动账户" }, + "bitwardenAccount": { + "message": "Bitwarden 账户" + }, "availableAccounts": { "message": "可用账户" }, @@ -4005,7 +4135,7 @@ "message": "托管于" }, "useDeviceOrHardwareKey": { - "message": "使用您的设备或实体钥匙" + "message": "使用您的设备或硬件密钥" }, "justOnce": { "message": "仅此一次" @@ -4181,6 +4311,20 @@ } } }, + "copyFieldValue": { + "message": "复制 $FIELD$,$VALUE$", + "description": "Title for a button that copies a field value to the clipboard.", + "placeholders": { + "field": { + "content": "$1", + "example": "Username" + }, + "value": { + "content": "$2", + "example": "Foo" + } + } + }, "noValuesToCopy": { "message": "没有要复制的值" }, @@ -4722,7 +4866,7 @@ "message": "自定义超时时间最小为 1 分钟。" }, "additionalContentAvailable": { - "message": "其他内容可用" + "message": "有更多内容可用" }, "fileSavedToDevice": { "message": "文件已保存到设备。可以在设备下载中进行管理。" @@ -5002,5 +5146,8 @@ }, "updateDesktopAppOrDisableFingerprintDialogMessage": { "message": "要使用生物识别解锁,请更新您的桌面应用程序,或在桌面设置中禁用指纹解锁。" + }, + "changeAtRiskPassword": { + "message": "更改有风险的密码" } } diff --git a/apps/browser/src/_locales/zh_TW/messages.json b/apps/browser/src/_locales/zh_TW/messages.json index 4f80f1c6412..242a583d704 100644 --- a/apps/browser/src/_locales/zh_TW/messages.json +++ b/apps/browser/src/_locales/zh_TW/messages.json @@ -80,6 +80,15 @@ "masterPassHint": { "message": "主密碼提示(選用)" }, + "passwordStrengthScore": { + "message": "Password strength score $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "joinOrganization": { "message": "加入組織" }, @@ -470,22 +479,6 @@ "length": { "message": "長度" }, - "uppercase": { - "message": "大寫 (A-Z)", - "description": "deprecated. Use uppercaseLabel instead." - }, - "lowercase": { - "message": "小寫 (a-z)", - "description": "deprecated. Use lowercaseLabel instead." - }, - "numbers": { - "message": "數字 (0-9)", - "description": "deprecated. Use numbersLabel instead." - }, - "specialCharacters": { - "message": "特殊字元 (!@#$%^&*)", - "description": "deprecated. Use specialCharactersLabel instead." - }, "include": { "message": "包含", "description": "Card header for password generator include block" @@ -518,10 +511,6 @@ "message": "包含特殊字元", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "numWords": { "message": "單字數量" }, @@ -660,8 +649,8 @@ "browserNotSupportClipboard": { "message": "您的瀏覽器不支援剪貼簿簡單複製,請手動複製。" }, - "verifyIdentity": { - "message": "驗證身份" + "verifyYourIdentity": { + "message": "Verify your identity" }, "weDontRecognizeThisDevice": { "message": "我們無法識別此裝置。請輸入已傳送到您電子郵件的驗證碼以驗證您的身分。" @@ -876,6 +865,21 @@ "logInToBitwarden": { "message": "登入 Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "Enter the code sent to your email" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Enter the code from your authenticator app" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Press your YubiKey to authenticate" + }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Duo two-step login is required for your account. Follow the steps below to finish logging in." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Follow the steps below to finish logging in." + }, "restartRegistration": { "message": "重新啟動註冊" }, @@ -897,6 +901,9 @@ "no": { "message": "否" }, + "location": { + "message": "Location" + }, "unexpectedError": { "message": "發生了未預期的錯誤。" }, @@ -1046,6 +1053,56 @@ "notificationAddSave": { "message": "儲存" }, + "loginSaveSuccessDetails": { + "message": "$USERNAME$ saved to Bitwarden.", + "placeholders": { + "username": { + "content": "$1" + } + }, + "description": "Shown to user after login is saved." + }, + "loginUpdatedSuccessDetails": { + "message": "$USERNAME$ updated in Bitwarden.", + "placeholders": { + "username": { + "content": "$1" + } + }, + "description": "Shown to user after login is updated." + }, + "saveAsNewLoginAction": { + "message": "Save as new login", + "description": "Button text for saving login details as a new entry." + }, + "updateLoginAction": { + "message": "Update login", + "description": "Button text for updating an existing login entry." + }, + "saveLoginPrompt": { + "message": "Save login?", + "description": "Prompt asking the user if they want to save their login details." + }, + "updateLoginPrompt": { + "message": "Update existing login?", + "description": "Prompt asking the user if they want to update an existing login entry." + }, + "loginSaveSuccess": { + "message": "Login saved", + "description": "Message displayed when login details are successfully saved." + }, + "loginUpdateSuccess": { + "message": "Login updated", + "description": "Message displayed when login details are successfully updated." + }, + "saveFailure": { + "message": "Error saving", + "description": "Error message shown when the system fails to save login details." + }, + "saveFailureDetails": { + "message": "Oh no! We couldn't save this. Try entering the details manually.", + "description": "Detailed error message shown when saving login details fails." + }, "enableChangedPasswordNotification": { "message": "詢問更新現有的登入資料" }, @@ -1365,12 +1422,22 @@ "rememberMe": { "message": "記住我" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Don't ask again on this device for 30 days" + }, "sendVerificationCodeEmailAgain": { "message": "再次傳送​​包含驗證碼的電子郵件" }, "useAnotherTwoStepMethod": { "message": "使用另一種兩步驟登入方法" }, + "selectAnotherMethod": { + "message": "Select another method", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Use your recovery code" + }, "insertYubiKey": { "message": "將您的 YubiKey 插入電腦的 USB 連接埠,然後按一下它的按鈕。" }, @@ -1383,9 +1450,18 @@ "webAuthnNewTabOpen": { "message": "開啟新分頁" }, + "openInNewTab": { + "message": "Open in new tab" + }, "webAuthnAuthenticate": { "message": "驗證 WebAuthn" }, + "readSecurityKey": { + "message": "Read security key" + }, + "awaitingSecurityKeyInteraction": { + "message": "Awaiting security key interaction..." + }, "loginUnavailable": { "message": "登入無法使用" }, @@ -1398,6 +1474,9 @@ "twoStepOptions": { "message": "兩步驟登入選項" }, + "selectTwoStepLoginMethod": { + "message": "Select two-step login method" + }, "recoveryCodeDesc": { "message": "無法使用任何雙因素提供程式嗎?請使用您的復原碼以停用您帳戶的所有雙因素提供程式。" }, @@ -2097,6 +2176,15 @@ "vaultTimeoutAction1": { "message": "逾時後動作" }, + "newCustomizationOptionsCalloutTitle": { + "message": "New customization options" + }, + "newCustomizationOptionsCalloutContent": { + "message": "Customize your vault experience with quick copy actions, compact mode, and more!" + }, + "newCustomizationOptionsCalloutLink": { + "message": "View all Appearance settings" + }, "lock": { "message": "鎖定", "description": "Verb form: to make secure or inaccessible by" @@ -2391,8 +2479,17 @@ "atRiskPasswords": { "message": "At-risk passwords" }, - "atRiskPasswordsDescSingleOrg": { - "message": "$ORGANIZATION$ is requesting you change the $COUNT$ passwords because they are at risk.", + "atRiskPasswordDescSingleOrg": { + "message": "$ORGANIZATION$ is requesting you change one password because it is at-risk.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + } + }, + "atRiskPasswordsDescSingleOrgPlural": { + "message": "$ORGANIZATION$ is requesting you change the $COUNT$ passwords because they are at-risk.", "placeholders": { "organization": { "content": "$1", @@ -2404,8 +2501,8 @@ } } }, - "atRiskPasswordsDescMultiOrg": { - "message": "Your organizations are requesting you change the $COUNT$ passwords because they are at risk.", + "atRiskPasswordsDescMultiOrgPlural": { + "message": "Your organizations are requesting you change the $COUNT$ passwords because they are at-risk.", "placeholders": { "count": { "content": "$1", @@ -2431,6 +2528,36 @@ "changeAtRiskPasswordsFasterDesc": { "message": "Update your settings so you can quickly autofill your passwords and generate new ones" }, + "reviewAtRiskLogins": { + "message": "Review at-risk logins" + }, + "reviewAtRiskPasswords": { + "message": "Review at-risk passwords" + }, + "reviewAtRiskLoginsSlideDesc": { + "message": "Your organization passwords are at-risk because they are weak, reused, and/or exposed.", + "description": "Description of the review at-risk login slide on the at-risk password page carousel" + }, + "reviewAtRiskLoginSlideImgAlt": { + "message": "Illustration of a list of logins that are at-risk" + }, + "generatePasswordSlideDesc": { + "message": "Quickly generate a strong, unique password with the Bitwarden autofill menu on the at-risk site.", + "description": "Description of the generate password slide on the at-risk password page carousel" + }, + "generatePasswordSlideImgAlt": { + "message": "Illustration of the Bitwarden autofill menu displaying a generated password" + }, + "updateInBitwarden": { + "message": "Update in Bitwarden" + }, + "updateInBitwardenSlideDesc": { + "message": "Bitwarden will then prompt you to update the password in the password manager.", + "description": "Description of the update in Bitwarden slide on the at-risk password page carousel" + }, + "updateInBitwardenSlideImgAlt": { + "message": "Illustration of a Bitwarden’s notification prompting the user to update the login" + }, "turnOnAutofill": { "message": "Turn on autofill" }, @@ -3983,6 +4110,9 @@ "activeAccount": { "message": "目前帳戶" }, + "bitwardenAccount": { + "message": "Bitwarden account" + }, "availableAccounts": { "message": "可用帳戶" }, @@ -4181,6 +4311,20 @@ } } }, + "copyFieldValue": { + "message": "Copy $FIELD$, $VALUE$", + "description": "Title for a button that copies a field value to the clipboard.", + "placeholders": { + "field": { + "content": "$1", + "example": "Username" + }, + "value": { + "content": "$2", + "example": "Foo" + } + } + }, "noValuesToCopy": { "message": "沒有資料可以複製" }, @@ -5002,5 +5146,8 @@ }, "updateDesktopAppOrDisableFingerprintDialogMessage": { "message": "為了使用生物辨識解鎖,請更新您的桌面應用程式,或在設定中停用指紋解鎖。" + }, + "changeAtRiskPassword": { + "message": "Change at-risk password" } } diff --git a/apps/browser/src/auth/popup/account-switching/account-switcher.component.html b/apps/browser/src/auth/popup/account-switching/account-switcher.component.html index 0152cd1c7ff..de8ab4c7b08 100644 --- a/apps/browser/src/auth/popup/account-switching/account-switcher.component.html +++ b/apps/browser/src/auth/popup/account-switching/account-switcher.component.html @@ -15,7 +15,7 @@ -

{{ "availableAccounts" | i18n }}

+

{{ "availableAccounts" | i18n }}

diff --git a/apps/browser/src/auth/popup/account-switching/account-switcher.component.ts b/apps/browser/src/auth/popup/account-switching/account-switcher.component.ts index 25e1b2ae83f..78bee121afb 100644 --- a/apps/browser/src/auth/popup/account-switching/account-switcher.component.ts +++ b/apps/browser/src/auth/popup/account-switching/account-switcher.component.ts @@ -5,12 +5,14 @@ import { Subject, firstValueFrom, map, of, startWith, switchMap } from "rxjs"; import { JslibModule } from "@bitwarden/angular/jslib.module"; import { LockService } from "@bitwarden/auth/common"; -import { VaultTimeoutSettingsService } from "@bitwarden/common/abstractions/vault-timeout/vault-timeout-settings.service"; -import { VaultTimeoutService } from "@bitwarden/common/abstractions/vault-timeout/vault-timeout.service"; import { AccountService } from "@bitwarden/common/auth/abstractions/account.service"; import { AuthService } from "@bitwarden/common/auth/abstractions/auth.service"; import { AuthenticationStatus } from "@bitwarden/common/auth/enums/authentication-status"; -import { VaultTimeoutAction } from "@bitwarden/common/enums/vault-timeout-action.enum"; +import { + VaultTimeoutAction, + VaultTimeoutService, + VaultTimeoutSettingsService, +} from "@bitwarden/common/key-management/vault-timeout"; import { UserId } from "@bitwarden/common/types/guid"; import { AvatarModule, @@ -19,6 +21,7 @@ import { ItemModule, SectionComponent, SectionHeaderComponent, + TypographyModule, } from "@bitwarden/components"; import { enableAccountSwitching } from "../../../platform/flags"; @@ -46,6 +49,7 @@ import { AccountSwitcherService } from "./services/account-switcher.service"; AccountComponent, SectionComponent, SectionHeaderComponent, + TypographyModule, ], }) export class AccountSwitcherComponent implements OnInit, OnDestroy { diff --git a/apps/browser/src/auth/popup/account-switching/current-account.component.html b/apps/browser/src/auth/popup/account-switching/current-account.component.html index dacf4b34be5..f59a2b08fdd 100644 --- a/apps/browser/src/auth/popup/account-switching/current-account.component.html +++ b/apps/browser/src/auth/popup/account-switching/current-account.component.html @@ -5,8 +5,7 @@ class="tw-rounded-full hover:tw-outline hover:tw-outline-1 hover:tw-outline-offset-1" (click)="currentAccountClicked()" > - {{ "switchAccounts" | i18n }}: - {{ "activeAccount" | i18n }} {{ currentAccount.email }} + {{ "bitwardenAccount" | i18n }} {{ currentAccount.email }} { let activeAccountSubject: BehaviorSubject; let authStatusSubject: ReplaySubject>; + let envBSubject: BehaviorSubject; + const mockHostName = "mockHostName"; + const mockEnv: Partial = { + getHostname: () => mockHostName, + }; + const accountService = mock(); const avatarService = mock(); const messagingService = mock(); @@ -41,6 +50,9 @@ describe("AccountSwitcherService", () => { accountService.activeAccount$ = activeAccountSubject; authService.authStatuses$ = authStatusSubject; + envBSubject = new BehaviorSubject(mockEnv as Environment); + environmentService.getEnvironment$.mockReturnValue(envBSubject); + accountSwitcherService = new AccountSwitcherService( accountService, avatarService, @@ -79,11 +91,16 @@ describe("AccountSwitcherService", () => { expect(accounts).toHaveLength(3); expect(accounts[0].id).toBe("1"); expect(accounts[0].isActive).toBeTruthy(); + + expect(accounts[0].server).toBe(mockHostName); + expect(accounts[1].id).toBe("2"); expect(accounts[1].isActive).toBeFalsy(); + expect(accounts[1].server).toBe(mockHostName); expect(accounts[2].id).toBe("addAccount"); expect(accounts[2].isActive).toBeFalsy(); + expect(accounts[2].server).toBe(undefined); }); it.each([5, 6])( diff --git a/apps/browser/src/auth/popup/account-switching/services/account-switcher.service.ts b/apps/browser/src/auth/popup/account-switching/services/account-switcher.service.ts index 535df3ec6bb..bfed7dc1408 100644 --- a/apps/browser/src/auth/popup/account-switching/services/account-switcher.service.ts +++ b/apps/browser/src/auth/popup/account-switching/services/account-switcher.service.ts @@ -66,11 +66,12 @@ export class AccountSwitcherService { const hasMaxAccounts = loggedInIds.length >= this.ACCOUNT_LIMIT; const options: AvailableAccount[] = await Promise.all( loggedInIds.map(async (id: UserId) => { + const userEnv = await firstValueFrom(this.environmentService.getEnvironment$(id)); return { name: accounts[id].name ?? accounts[id].email, email: accounts[id].email, id: id, - server: (await this.environmentService.getEnvironment(id))?.getHostname(), + server: userEnv?.getHostname(), status: accountStatuses[id], isActive: id === activeAccount?.id, avatarColor: await firstValueFrom( diff --git a/apps/browser/src/auth/popup/extension-anon-layout-wrapper/extension-anon-layout-wrapper.component.html b/apps/browser/src/auth/popup/extension-anon-layout-wrapper/extension-anon-layout-wrapper.component.html index 8893697da17..88a3b1c3076 100644 --- a/apps/browser/src/auth/popup/extension-anon-layout-wrapper/extension-anon-layout-wrapper.component.html +++ b/apps/browser/src/auth/popup/extension-anon-layout-wrapper/extension-anon-layout-wrapper.component.html @@ -5,7 +5,7 @@ [showBackButton]="showBackButton" [pageTitle]="''" > - + diff --git a/apps/browser/src/auth/popup/home.component.ts b/apps/browser/src/auth/popup/home.component.ts index dbdcf7d5aa8..0c4510204d1 100644 --- a/apps/browser/src/auth/popup/home.component.ts +++ b/apps/browser/src/auth/popup/home.component.ts @@ -81,8 +81,10 @@ export class HomeComponent implements OnInit, OnDestroy { tap(async (flag) => { // If the flag is turned ON, we must force a reload to ensure the correct UI is shown if (flag) { + const qParams = await firstValueFrom(this.route.queryParams); + const uniqueQueryParams = { - ...this.route.queryParams, + ...qParams, // adding a unique timestamp to the query params to force a reload t: new Date().getTime().toString(), }; diff --git a/apps/browser/src/auth/popup/settings/account-security.component.spec.ts b/apps/browser/src/auth/popup/settings/account-security.component.spec.ts index e68edd64e03..60b38570482 100644 --- a/apps/browser/src/auth/popup/settings/account-security.component.spec.ts +++ b/apps/browser/src/auth/popup/settings/account-security.component.spec.ts @@ -5,14 +5,17 @@ import { mock } from "jest-mock-extended"; import { firstValueFrom, of } from "rxjs"; import { PinServiceAbstraction } from "@bitwarden/auth/common"; -import { VaultTimeoutSettingsService } from "@bitwarden/common/abstractions/vault-timeout/vault-timeout-settings.service"; -import { VaultTimeoutService } from "@bitwarden/common/abstractions/vault-timeout/vault-timeout.service"; import { PolicyService } from "@bitwarden/common/admin-console/abstractions/policy/policy.service.abstraction"; import { PolicyType } from "@bitwarden/common/admin-console/enums"; import { Policy } from "@bitwarden/common/admin-console/models/domain/policy"; import { AccountService } from "@bitwarden/common/auth/abstractions/account.service"; import { UserVerificationService } from "@bitwarden/common/auth/abstractions/user-verification/user-verification.service.abstraction"; -import { VaultTimeoutAction } from "@bitwarden/common/enums/vault-timeout-action.enum"; +import { + VaultTimeoutSettingsService, + VaultTimeoutService, + VaultTimeoutStringType, + VaultTimeoutAction, +} from "@bitwarden/common/key-management/vault-timeout"; 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"; @@ -21,7 +24,6 @@ import { MessageSender } from "@bitwarden/common/platform/messaging"; import { Utils } from "@bitwarden/common/platform/misc/utils"; import { FakeAccountService, mockAccountServiceWith } from "@bitwarden/common/spec"; import { UserId } from "@bitwarden/common/types/guid"; -import { VaultTimeoutStringType } from "@bitwarden/common/types/vault-timeout.type"; import { DialogService, ToastService } from "@bitwarden/components"; import { BiometricStateService, BiometricsService, KeyService } from "@bitwarden/key-management"; diff --git a/apps/browser/src/auth/popup/settings/account-security.component.ts b/apps/browser/src/auth/popup/settings/account-security.component.ts index 4a64783c78c..8cdfdab9524 100644 --- a/apps/browser/src/auth/popup/settings/account-security.component.ts +++ b/apps/browser/src/auth/popup/settings/account-security.component.ts @@ -25,24 +25,24 @@ import { import { JslibModule } from "@bitwarden/angular/jslib.module"; import { FingerprintDialogComponent, VaultTimeoutInputComponent } from "@bitwarden/auth/angular"; import { PinServiceAbstraction } from "@bitwarden/auth/common"; -import { VaultTimeoutSettingsService } from "@bitwarden/common/abstractions/vault-timeout/vault-timeout-settings.service"; -import { VaultTimeoutService } from "@bitwarden/common/abstractions/vault-timeout/vault-timeout.service"; import { PolicyService } from "@bitwarden/common/admin-console/abstractions/policy/policy.service.abstraction"; import { PolicyType } from "@bitwarden/common/admin-console/enums"; import { AccountService } from "@bitwarden/common/auth/abstractions/account.service"; import { UserVerificationService } from "@bitwarden/common/auth/abstractions/user-verification/user-verification.service.abstraction"; import { DeviceType } from "@bitwarden/common/enums"; -import { VaultTimeoutAction } from "@bitwarden/common/enums/vault-timeout-action.enum"; +import { + VaultTimeout, + VaultTimeoutAction, + VaultTimeoutOption, + VaultTimeoutService, + VaultTimeoutSettingsService, + VaultTimeoutStringType, +} from "@bitwarden/common/key-management/vault-timeout"; import { EnvironmentService } from "@bitwarden/common/platform/abstractions/environment.service"; import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; import { MessagingService } from "@bitwarden/common/platform/abstractions/messaging.service"; import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service"; import { StateService } from "@bitwarden/common/platform/abstractions/state.service"; -import { - VaultTimeout, - VaultTimeoutOption, - VaultTimeoutStringType, -} from "@bitwarden/common/types/vault-timeout.type"; import { CardComponent, CheckboxModule, @@ -99,7 +99,6 @@ import { AwaitDesktopDialogComponent } from "./await-desktop-dialog.component"; VaultTimeoutInputComponent, ], }) -// eslint-disable-next-line rxjs-angular/prefer-takeuntil export class AccountSecurityComponent implements OnInit, OnDestroy { protected readonly VaultTimeoutAction = VaultTimeoutAction; diff --git a/apps/browser/src/auth/services/extension-two-factor-auth-component.service.spec.ts b/apps/browser/src/auth/services/extension-two-factor-auth-component.service.spec.ts index 408bb5b0ca4..2247328acab 100644 --- a/apps/browser/src/auth/services/extension-two-factor-auth-component.service.spec.ts +++ b/apps/browser/src/auth/services/extension-two-factor-auth-component.service.spec.ts @@ -15,6 +15,7 @@ jest.mock("../popup/utils/auth-popout-window", () => { jest.mock("../../platform/popup/browser-popup-utils", () => ({ inSingleActionPopout: jest.fn(), + inPopout: jest.fn(), })); import { DuoLaunchAction } from "@bitwarden/auth/angular"; @@ -173,6 +174,8 @@ describe("ExtensionTwoFactorAuthComponentService", () => { return key === AuthPopoutType.twoFactorAuthDuo; }); + jest.spyOn(BrowserPopupUtils, "inPopout").mockImplementation(() => false); + expect(extensionTwoFactorAuthComponentService.determineDuoLaunchAction()).toBe( DuoLaunchAction.DIRECT_LAUNCH, ); @@ -180,10 +183,20 @@ describe("ExtensionTwoFactorAuthComponentService", () => { it("should return SINGLE_ACTION_POPOUT if not in two factor auth duo popout", () => { jest.spyOn(BrowserPopupUtils, "inSingleActionPopout").mockImplementation(() => false); + jest.spyOn(BrowserPopupUtils, "inPopout").mockImplementation(() => false); expect(extensionTwoFactorAuthComponentService.determineDuoLaunchAction()).toBe( DuoLaunchAction.SINGLE_ACTION_POPOUT, ); }); + + it("should return DIRECT_LAUNCH if in popout", () => { + jest.spyOn(BrowserPopupUtils, "inSingleActionPopout").mockImplementation(() => false); + jest.spyOn(BrowserPopupUtils, "inPopout").mockImplementation(() => true); + + expect(extensionTwoFactorAuthComponentService.determineDuoLaunchAction()).toBe( + DuoLaunchAction.DIRECT_LAUNCH, + ); + }); }); }); diff --git a/apps/browser/src/auth/services/extension-two-factor-auth-component.service.ts b/apps/browser/src/auth/services/extension-two-factor-auth-component.service.ts index c11baadb595..f768b223984 100644 --- a/apps/browser/src/auth/services/extension-two-factor-auth-component.service.ts +++ b/apps/browser/src/auth/services/extension-two-factor-auth-component.service.ts @@ -106,7 +106,9 @@ export class ExtensionTwoFactorAuthComponentService AuthPopoutType.twoFactorAuthDuo, ); - if (inTwoFactorAuthDuoPopout) { + const inPopout = BrowserPopupUtils.inPopout(this.window); + + if (inTwoFactorAuthDuoPopout || inPopout) { return DuoLaunchAction.DIRECT_LAUNCH; } diff --git a/apps/browser/src/auth/services/extension-two-factor-auth-webauthn-component.service.spec.ts b/apps/browser/src/auth/services/extension-two-factor-auth-webauthn-component.service.spec.ts index b53f05172ce..dfbf69f1a7f 100644 --- a/apps/browser/src/auth/services/extension-two-factor-auth-webauthn-component.service.spec.ts +++ b/apps/browser/src/auth/services/extension-two-factor-auth-webauthn-component.service.spec.ts @@ -1,39 +1,17 @@ -import { MockProxy, mock } from "jest-mock-extended"; - -import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service"; - import { ExtensionTwoFactorAuthWebAuthnComponentService } from "./extension-two-factor-auth-webauthn-component.service"; describe("ExtensionTwoFactorAuthWebAuthnComponentService", () => { let extensionTwoFactorAuthWebAuthnComponentService: ExtensionTwoFactorAuthWebAuthnComponentService; - let platformUtilsService: MockProxy; - beforeEach(() => { jest.clearAllMocks(); - platformUtilsService = mock(); - extensionTwoFactorAuthWebAuthnComponentService = - new ExtensionTwoFactorAuthWebAuthnComponentService(platformUtilsService); + new ExtensionTwoFactorAuthWebAuthnComponentService(); }); describe("shouldOpenWebAuthnInNewTab", () => { - it("should return false if the browser is Chrome", () => { - // Arrange - platformUtilsService.isChrome.mockReturnValue(true); - - // Act - const result = extensionTwoFactorAuthWebAuthnComponentService.shouldOpenWebAuthnInNewTab(); - - // Assert - expect(result).toBe(false); - }); - - it("should return true if the browser is not Chrome", () => { - // Arrange - platformUtilsService.isChrome.mockReturnValue(false); - + it("should return true", () => { // Act const result = extensionTwoFactorAuthWebAuthnComponentService.shouldOpenWebAuthnInNewTab(); diff --git a/apps/browser/src/auth/services/extension-two-factor-auth-webauthn-component.service.ts b/apps/browser/src/auth/services/extension-two-factor-auth-webauthn-component.service.ts index 84a54cbc12e..2af3dbe3f2b 100644 --- a/apps/browser/src/auth/services/extension-two-factor-auth-webauthn-component.service.ts +++ b/apps/browser/src/auth/services/extension-two-factor-auth-webauthn-component.service.ts @@ -2,29 +2,18 @@ import { DefaultTwoFactorAuthWebAuthnComponentService, TwoFactorAuthWebAuthnComponentService, } from "@bitwarden/auth/angular"; -import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service"; export class ExtensionTwoFactorAuthWebAuthnComponentService extends DefaultTwoFactorAuthWebAuthnComponentService implements TwoFactorAuthWebAuthnComponentService { - constructor(private platformUtilsService: PlatformUtilsService) { - super(); - } - /** - * In the browser extension, we open webAuthn in a new web client tab sometimes due to inline - * WebAuthn Iframe's not working in some browsers. We open a 2FA popout upon successful - * completion of WebAuthn submission with query parameters to finish the 2FA process. + * In the browser extension, we open webAuthn in a new web client tab due to inline + * WebAuthn Iframe's not working due "WebAuthn is not supported on sites with TLS certificate errors". + * We open a 2FA popout upon successful completion of WebAuthn submission with query parameters to finish the 2FA process. * @returns boolean */ shouldOpenWebAuthnInNewTab(): boolean { - const isChrome = this.platformUtilsService.isChrome(); - if (isChrome) { - // Chrome now supports WebAuthn in the iframe in the extension now. - return false; - } - return true; } } diff --git a/apps/browser/src/autofill/background/abstractions/notification.background.ts b/apps/browser/src/autofill/background/abstractions/notification.background.ts index 1b989283112..851f07576dd 100644 --- a/apps/browser/src/autofill/background/abstractions/notification.background.ts +++ b/apps/browser/src/autofill/background/abstractions/notification.background.ts @@ -100,6 +100,7 @@ type NotificationBackgroundExtensionMessageHandlers = { bgChangedPassword: ({ message, sender }: BackgroundOnMessageHandlerParams) => Promise; bgRemoveTabFromNotificationQueue: ({ sender }: BackgroundSenderParam) => void; bgSaveCipher: ({ message, sender }: BackgroundOnMessageHandlerParams) => void; + bgOpenVault: ({ message, sender }: BackgroundOnMessageHandlerParams) => Promise; bgNeverSave: ({ sender }: BackgroundSenderParam) => Promise; bgUnlockPopoutOpened: ({ message, sender }: BackgroundOnMessageHandlerParams) => Promise; bgReopenUnlockPopout: ({ sender }: BackgroundSenderParam) => Promise; diff --git a/apps/browser/src/autofill/background/notification.background.spec.ts b/apps/browser/src/autofill/background/notification.background.spec.ts index 40c4d07cadf..e02e3d8d951 100644 --- a/apps/browser/src/autofill/background/notification.background.spec.ts +++ b/apps/browser/src/autofill/background/notification.background.spec.ts @@ -812,7 +812,10 @@ describe("NotificationBackground", () => { newPassword: "newPassword", }); notificationBackground["notificationQueue"] = [queueMessage]; - const cipherView = mock(); + const cipherView = mock({ + id: "testId", + login: { username: "testUser" }, + }); getDecryptedCipherByIdSpy.mockResolvedValueOnce(cipherView); sendMockExtensionMessage(message, sender); @@ -828,9 +831,14 @@ describe("NotificationBackground", () => { "testId", ); expect(updateWithServerSpy).toHaveBeenCalled(); - expect(tabSendMessageSpy).toHaveBeenCalledWith(sender.tab, { - command: "saveCipherAttemptCompleted", - }); + expect(tabSendMessageDataSpy).toHaveBeenCalledWith( + sender.tab, + "saveCipherAttemptCompleted", + { + username: cipherView.login.username, + cipherId: cipherView.id, + }, + ); }); it("updates the cipher password if the queue message was locked and an existing cipher has the same username as the message", async () => { @@ -976,11 +984,16 @@ describe("NotificationBackground", () => { }); notificationBackground["notificationQueue"] = [queueMessage]; const cipherView = mock({ + id: "testId", login: { username: "test", password: "password" }, }); folderExistsSpy.mockResolvedValueOnce(false); convertAddLoginQueueMessageToCipherViewSpy.mockReturnValueOnce(cipherView); editItemSpy.mockResolvedValueOnce(undefined); + cipherEncryptSpy.mockResolvedValueOnce({ + ...cipherView, + id: "testId", + }); sendMockExtensionMessage(message, sender); await flushPromises(); @@ -991,9 +1004,14 @@ describe("NotificationBackground", () => { ); expect(cipherEncryptSpy).toHaveBeenCalledWith(cipherView, "testId"); expect(createWithServerSpy).toHaveBeenCalled(); - expect(tabSendMessageSpy).toHaveBeenCalledWith(sender.tab, { - command: "saveCipherAttemptCompleted", - }); + expect(tabSendMessageDataSpy).toHaveBeenCalledWith( + sender.tab, + "saveCipherAttemptCompleted", + { + username: cipherView.login.username, + cipherId: cipherView.id, + }, + ); expect(tabSendMessageSpy).toHaveBeenCalledWith(sender.tab, { command: "addedCipher" }); }); diff --git a/apps/browser/src/autofill/background/notification.background.ts b/apps/browser/src/autofill/background/notification.background.ts index 1a99425b7de..11037e7e261 100644 --- a/apps/browser/src/autofill/background/notification.background.ts +++ b/apps/browser/src/autofill/background/notification.background.ts @@ -87,6 +87,7 @@ export default class NotificationBackground { getWebVaultUrlForNotification: () => this.getWebVaultUrl(), notificationRefreshFlagValue: () => this.getNotificationFlag(), bgGetDecryptedCiphers: () => this.getNotificationCipherData(), + bgOpenVault: ({ message, sender }) => this.openVault(message, sender.tab), }; constructor( @@ -594,7 +595,10 @@ export default class NotificationBackground { const cipher = await this.cipherService.encrypt(newCipher, activeUserId); try { await this.cipherService.createWithServer(cipher); - await BrowserApi.tabSendMessage(tab, { command: "saveCipherAttemptCompleted" }); + await BrowserApi.tabSendMessageData(tab, "saveCipherAttemptCompleted", { + username: String(queueMessage?.username), + cipherId: String(cipher?.id), + }); await BrowserApi.tabSendMessage(tab, { command: "addedCipher" }); } catch (error) { await BrowserApi.tabSendMessageData(tab, "saveCipherAttemptCompleted", { @@ -630,15 +634,16 @@ export default class NotificationBackground { await BrowserApi.tabSendMessage(tab, { command: "editedCipher" }); return; } - const cipher = await this.cipherService.encrypt(cipherView, userId); try { - // We've only updated the password, no need to broadcast editedCipher message await this.cipherService.updateWithServer(cipher); - await BrowserApi.tabSendMessage(tab, { command: "saveCipherAttemptCompleted" }); + await BrowserApi.tabSendMessageData(tab, "saveCipherAttemptCompleted", { + username: String(cipherView?.login?.username), + cipherId: String(cipherView?.id), + }); } catch (error) { await BrowserApi.tabSendMessageData(tab, "saveCipherAttemptCompleted", { - error: String(error.message), + error: String(error?.message), }); } } @@ -663,6 +668,16 @@ export default class NotificationBackground { await this.openAddEditVaultItemPopout(senderTab, { cipherId: cipherView.id }); } + private async openVault( + message: NotificationBackgroundExtensionMessage, + senderTab: chrome.tabs.Tab, + ) { + if (!message.cipherId) { + await this.openAddEditVaultItemPopout(senderTab); + } + await this.openAddEditVaultItemPopout(senderTab, { cipherId: message.cipherId }); + } + private async folderExists(folderId: string, userId: UserId) { if (Utils.isNullOrWhitespace(folderId) || folderId === "null") { return false; diff --git a/apps/browser/src/autofill/background/overlay.background.spec.ts b/apps/browser/src/autofill/background/overlay.background.spec.ts index 22531788d37..81e6c538c13 100644 --- a/apps/browser/src/autofill/background/overlay.background.spec.ts +++ b/apps/browser/src/autofill/background/overlay.background.spec.ts @@ -190,7 +190,9 @@ describe("OverlayBackground", () => { inlineMenuFieldQualificationService = new InlineMenuFieldQualificationService(); themeStateService = mock(); themeStateService.selectedTheme$ = selectedThemeMock$; - totpService = mock(); + totpService = mock({ + getCode$: jest.fn().mockReturnValue(of(undefined)), + }); overlayBackground = new OverlayBackground( logService, cipherService, diff --git a/apps/browser/src/autofill/background/overlay.background.ts b/apps/browser/src/autofill/background/overlay.background.ts index 1d55a154ee3..454b12cdcea 100644 --- a/apps/browser/src/autofill/background/overlay.background.ts +++ b/apps/browser/src/autofill/background/overlay.background.ts @@ -707,13 +707,15 @@ export class OverlayBackground implements OverlayBackgroundInterface { }; if (cipher.type === CipherType.Login) { - const totpCode = await this.totpService.getCode(cipher.login?.totp); - const totpCodeTimeInterval = this.totpService.getTimeInterval(cipher.login?.totp); + const totpResponse = cipher.login?.totp + ? await firstValueFrom(this.totpService.getCode$(cipher.login.totp)) + : undefined; + inlineMenuData.login = { username: cipher.login.username, - totp: totpCode, + totp: totpResponse?.code, totpField: this.isTotpFieldForCurrentField(), - totpCodeTimeInterval: totpCodeTimeInterval, + totpCodeTimeInterval: totpResponse?.period, passkey: hasPasskey ? { rpName: cipher.login.fido2Credentials[0].rpName, @@ -1131,9 +1133,13 @@ export class OverlayBackground implements OverlayBackgroundInterface { this.updateLastUsedInlineMenuCipher(inlineMenuCipherId, cipher); if (cipher.login?.totp) { - this.platformUtilsService.copyToClipboard( - await this.totpService.getCode(cipher.login.totp), - ); + const totpResponse = await firstValueFrom(this.totpService.getCode$(cipher.login.totp)); + + if (totpResponse?.code) { + this.platformUtilsService.copyToClipboard(totpResponse.code); + } else { + this.logService.error("Failed to get TOTP code for inline menu cipher"); + } } return; } diff --git a/apps/browser/src/autofill/browser/context-menu-clicked-handler.spec.ts b/apps/browser/src/autofill/browser/context-menu-clicked-handler.spec.ts index c8cb7e81f72..61d6b9dc480 100644 --- a/apps/browser/src/autofill/browser/context-menu-clicked-handler.spec.ts +++ b/apps/browser/src/autofill/browser/context-menu-clicked-handler.spec.ts @@ -1,4 +1,5 @@ import { mock, MockProxy } from "jest-mock-extended"; +import { of } from "rxjs"; import { EventCollectionService } from "@bitwarden/common/abstractions/event/event-collection.service"; import { AuthService } from "@bitwarden/common/auth/abstractions/auth.service"; @@ -159,19 +160,25 @@ describe("ContextMenuClickedHandler", () => { it("copies totp code to clipboard", async () => { cipherService.getAllDecrypted.mockResolvedValue([createCipher({ totp: "TEST_TOTP_SEED" })]); - totpService.getCode.mockImplementation((seed) => { + jest.spyOn(totpService, "getCode$").mockImplementation((seed: string) => { if (seed === "TEST_TOTP_SEED") { - return Promise.resolve("123456"); + return of({ + code: "123456", + period: 30, + }); } - return Promise.resolve("654321"); + return of({ + code: "654321", + period: 30, + }); }); await sut.run(createData(`${COPY_VERIFICATION_CODE_ID}_1`, COPY_VERIFICATION_CODE_ID), { url: "https://test.com", } as any); - expect(totpService.getCode).toHaveBeenCalledTimes(1); + expect(totpService.getCode$).toHaveBeenCalledTimes(1); expect(copyToClipboard).toHaveBeenCalledWith({ text: "123456", diff --git a/apps/browser/src/autofill/browser/context-menu-clicked-handler.ts b/apps/browser/src/autofill/browser/context-menu-clicked-handler.ts index 69c8b6e70b8..2fb435a4c67 100644 --- a/apps/browser/src/autofill/browser/context-menu-clicked-handler.ts +++ b/apps/browser/src/autofill/browser/context-menu-clicked-handler.ts @@ -205,8 +205,9 @@ export class ContextMenuClickedHandler { action: COPY_VERIFICATION_CODE_ID, }); } else { + const totpResponse = await firstValueFrom(this.totpService.getCode$(cipher.login.totp)); this.copyToClipboard({ - text: await this.totpService.getCode(cipher.login.totp), + text: totpResponse.code, tab: tab, }); } diff --git a/apps/browser/src/autofill/content/components/constants/styles.ts b/apps/browser/src/autofill/content/components/constants/styles.ts index cd6054e90ba..cdf8f1ead53 100644 --- a/apps/browser/src/autofill/content/components/constants/styles.ts +++ b/apps/browser/src/autofill/content/components/constants/styles.ts @@ -124,8 +124,6 @@ export const themes = { // For compatibility system: lightTheme, - nord: lightTheme, - solarizedDark: darkTheme, }; export const spacing = { diff --git a/apps/browser/src/autofill/content/components/lit-stories/notification/confirmation.lit-stories.ts b/apps/browser/src/autofill/content/components/lit-stories/notification/confirmation.lit-stories.ts index 94dbaace9aa..b3dee95efd0 100644 --- a/apps/browser/src/autofill/content/components/lit-stories/notification/confirmation.lit-stories.ts +++ b/apps/browser/src/autofill/content/components/lit-stories/notification/confirmation.lit-stories.ts @@ -7,7 +7,7 @@ import { NotificationConfirmationBody } from "../../notification/confirmation"; type Args = { buttonText: string; confirmationMessage: string; - handleClick: () => void; + handleOpenVault: () => void; theme: Theme; error: string; }; diff --git a/apps/browser/src/autofill/content/components/lit-stories/notification/footer.lit-stories.ts b/apps/browser/src/autofill/content/components/lit-stories/notification/footer.lit-stories.ts index b03aeeae311..5ad0a5a2aca 100644 --- a/apps/browser/src/autofill/content/components/lit-stories/notification/footer.lit-stories.ts +++ b/apps/browser/src/autofill/content/components/lit-stories/notification/footer.lit-stories.ts @@ -9,6 +9,7 @@ type Args = { notificationType: NotificationType; theme: Theme; handleSaveAction: (e: Event) => void; + i18n: { [key: string]: string }; }; export default { @@ -23,6 +24,11 @@ export default { args: { theme: ThemeTypes.Light, notificationType: "add", + i18n: { + saveAsNewLoginAction: "Save as New Login", + saveAction: "Save", + }, + handleSaveAction: () => alert("Save action triggered"), }, parameters: { design: { diff --git a/apps/browser/src/autofill/content/components/lit-stories/rows/button-row.lit-stories.ts b/apps/browser/src/autofill/content/components/lit-stories/rows/button-row.lit-stories.ts index ffef4751627..7f833f2a1f6 100644 --- a/apps/browser/src/autofill/content/components/lit-stories/rows/button-row.lit-stories.ts +++ b/apps/browser/src/autofill/content/components/lit-stories/rows/button-row.lit-stories.ts @@ -7,15 +7,18 @@ import { ButtonRow } from "../../rows/button-row"; type Args = { theme: Theme; buttonAction: (e: Event) => void; + buttonText: string; }; export default { title: "Components/Rows/Button Row", argTypes: { theme: { control: "select", options: [...Object.values(ThemeTypes)] }, + buttonText: { control: "text" }, }, args: { theme: ThemeTypes.Light, + buttonText: "Action", }, } as Meta; diff --git a/apps/browser/src/autofill/content/components/notification/confirmation-container.ts b/apps/browser/src/autofill/content/components/notification/confirmation-container.ts new file mode 100644 index 00000000000..8fdc5474486 --- /dev/null +++ b/apps/browser/src/autofill/content/components/notification/confirmation-container.ts @@ -0,0 +1,110 @@ +import { css } from "@emotion/css"; +import { html } from "lit"; + +import { Theme, ThemeTypes } from "@bitwarden/common/platform/enums"; + +import { + NotificationBarIframeInitData, + NotificationTypes, + NotificationType, +} from "../../../notification/abstractions/notification-bar"; +import { themes, spacing } from "../constants/styles"; + +import { NotificationConfirmationBody } from "./confirmation"; +import { + NotificationHeader, + componentClassPrefix as notificationHeaderClassPrefix, +} from "./header"; + +export function NotificationConfirmationContainer({ + error, + handleCloseNotification, + handleOpenVault, + i18n, + theme = ThemeTypes.Light, + type, + username, +}: NotificationBarIframeInitData & { + handleCloseNotification: (e: Event) => void; + handleOpenVault: (e: Event) => void; +} & { + error: string; + i18n: { [key: string]: string }; + type: NotificationType; + username: string; +}) { + const headerMessage = getHeaderMessage(i18n, type, error); + const confirmationMessage = getConfirmationMessage(i18n, username, type, error); + const buttonText = error ? i18n.newItem : i18n.view; + + return html` +
+ ${NotificationHeader({ + handleCloseNotification, + message: headerMessage, + theme, + })} + ${NotificationConfirmationBody({ + buttonText, + confirmationMessage, + error: error, + handleOpenVault, + theme, + })} +
+ `; +} + +const notificationContainerStyles = (theme: Theme) => css` + position: absolute; + right: 20px; + border: 1px solid ${themes[theme].secondary["300"]}; + border-radius: ${spacing["4"]}; + box-shadow: -2px 4px 6px 0px #0000001a; + background-color: ${themes[theme].background.alt}; + width: 400px; + overflow: hidden; + + [class*="${notificationHeaderClassPrefix}-"] { + border-radius: ${spacing["4"]} ${spacing["4"]} 0 0; + border-bottom: 0.5px solid ${themes[theme].secondary["300"]}; + } +`; + +function getConfirmationMessage( + i18n: { [key: string]: string }, + username: string, + type?: NotificationType, + error?: string, +) { + const loginSaveSuccessDetails = chrome.i18n.getMessage("loginSaveSuccessDetails", [username]); + const loginUpdatedSuccessDetails = chrome.i18n.getMessage("loginUpdatedSuccessDetails", [ + username, + ]); + + if (error) { + return i18n.saveFailureDetails; + } + return type === "add" ? loginSaveSuccessDetails : loginUpdatedSuccessDetails; +} + +function getHeaderMessage( + i18n: { [key: string]: string }, + type?: NotificationType, + error?: string, +) { + if (error) { + return i18n.saveFailure; + } + + switch (type) { + case NotificationTypes.Add: + return i18n.loginSaveSuccess; + case NotificationTypes.Change: + return i18n.loginUpdateSuccess; + case NotificationTypes.Unlock: + return ""; + default: + return undefined; + } +} 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 745899481dd..d6f7ba3024d 100644 --- a/apps/browser/src/autofill/content/components/notification/confirmation-message.ts +++ b/apps/browser/src/autofill/content/components/notification/confirmation-message.ts @@ -35,7 +35,6 @@ const baseTextStyles = css` text-align: left; text-overflow: ellipsis; line-height: 24px; - white-space: nowrap; font-family: "DM Sans", sans-serif; font-size: 16px; `; diff --git a/apps/browser/src/autofill/content/components/notification/confirmation.ts b/apps/browser/src/autofill/content/components/notification/confirmation.ts index 0c389f75eb6..8c213a7663f 100644 --- a/apps/browser/src/autofill/content/components/notification/confirmation.ts +++ b/apps/browser/src/autofill/content/components/notification/confirmation.ts @@ -1,7 +1,7 @@ import createEmotion from "@emotion/css/create-instance"; import { html } from "lit"; -import { Theme, ThemeTypes } from "@bitwarden/common/platform/enums"; +import { Theme } from "@bitwarden/common/platform/enums"; import { themes } from "../constants/styles"; import { PartyHorn, Warning } from "../icons"; @@ -18,12 +18,14 @@ export function NotificationConfirmationBody({ buttonText, error, confirmationMessage, - theme = ThemeTypes.Light, + theme, + handleOpenVault, }: { error?: string; buttonText: string; confirmationMessage: string; theme: Theme; + handleOpenVault: (e: Event) => void; }) { const IconComponent = !error ? PartyHorn : Warning; return html` @@ -31,7 +33,7 @@ export function NotificationConfirmationBody({
${IconComponent({ theme })}
${confirmationMessage && buttonText ? NotificationConfirmationMessage({ - handleClick: () => {}, + handleClick: handleOpenVault, confirmationMessage, theme, buttonText, @@ -54,5 +56,4 @@ const notificationConfirmationBodyStyles = ({ theme }: { theme: Theme }) => css` justify-content: flex-start; background-color: ${themes[theme].background.alt}; padding: 12px; - white-space: nowrap; `; diff --git a/apps/browser/src/autofill/content/components/notification/container.ts b/apps/browser/src/autofill/content/components/notification/container.ts index 1cdde3ec3ed..f98ef795749 100644 --- a/apps/browser/src/autofill/content/components/notification/container.ts +++ b/apps/browser/src/autofill/content/components/notification/container.ts @@ -58,6 +58,7 @@ export function NotificationContainer({ handleSaveAction, theme, notificationType: type, + i18n, })}
`; diff --git a/apps/browser/src/autofill/content/components/notification/footer.ts b/apps/browser/src/autofill/content/components/notification/footer.ts index edc6d6f6e00..6de4a333dfe 100644 --- a/apps/browser/src/autofill/content/components/notification/footer.ts +++ b/apps/browser/src/autofill/content/components/notification/footer.ts @@ -15,14 +15,16 @@ export function NotificationFooter({ handleSaveAction, notificationType, theme, + i18n, }: { handleSaveAction: (e: Event) => void; + i18n: { [key: string]: string }; notificationType?: NotificationType; theme: Theme; }) { const isChangeNotification = notificationType === NotificationTypes.Change; - // @TODO localize - const saveNewItemText = "Save as new login"; + const saveNewItemText = i18n.saveAsNewLoginAction; + const buttonText = i18n.saveAction; return html`
@@ -32,7 +34,7 @@ export function NotificationFooter({ handleAction: handleSaveAction, theme, }) - : ButtonRow({ theme, buttonAction: handleSaveAction })} + : ButtonRow({ theme, buttonAction: handleSaveAction, buttonText })}
`; } diff --git a/apps/browser/src/autofill/content/components/notification/header.ts b/apps/browser/src/autofill/content/components/notification/header.ts index 85f6e48cd5d..50c2c629942 100644 --- a/apps/browser/src/autofill/content/components/notification/header.ts +++ b/apps/browser/src/autofill/content/components/notification/header.ts @@ -17,12 +17,12 @@ const { css } = createEmotion({ export function NotificationHeader({ message, - standalone, + standalone = false, theme = ThemeTypes.Light, handleCloseNotification, }: { message?: string; - standalone: boolean; + standalone?: boolean; theme: Theme; handleCloseNotification: (e: Event) => void; }) { @@ -49,7 +49,7 @@ const notificationHeaderStyles = ({ display: flex; align-items: center; justify-content: flex-start; - background-color: ${themes[theme].background.alt}; + background-color: ${themes[theme].background}; padding: 12px 16px 8px 16px; white-space: nowrap; diff --git a/apps/browser/src/autofill/content/components/rows/button-row.ts b/apps/browser/src/autofill/content/components/rows/button-row.ts index 942c8dd55fe..1feef016a81 100644 --- a/apps/browser/src/autofill/content/components/rows/button-row.ts +++ b/apps/browser/src/autofill/content/components/rows/button-row.ts @@ -11,16 +11,18 @@ import { DropdownMenu } from "../dropdown-menu"; export function ButtonRow({ theme, buttonAction, + buttonText, }: { theme: Theme; buttonAction: (e: Event) => void; + buttonText: string; }) { return html`
${[ ActionButton({ buttonAction: buttonAction, - buttonText: "Action Button", + buttonText, theme, }), DropdownContainer({ diff --git a/apps/browser/src/autofill/content/notification-bar.ts b/apps/browser/src/autofill/content/notification-bar.ts index 8c6251b7030..ae489ea956b 100644 --- a/apps/browser/src/autofill/content/notification-bar.ts +++ b/apps/browser/src/autofill/content/notification-bar.ts @@ -193,6 +193,8 @@ async function loadNotificationBar() { { command: "saveCipherAttemptCompleted", error: msg.data?.error, + username: msg.data?.username, + cipherId: msg.data?.cipherId, }, "*", ); @@ -843,6 +845,7 @@ async function loadNotificationBar() { theme: typeData.theme, removeIndividualVault: typeData.removeIndividualVault, importType: typeData.importType, + launchTimestamp: typeData.launchTimestamp, }; const notificationBarUrl = "notification/bar.html"; @@ -871,11 +874,32 @@ async function loadNotificationBar() { const barPageUrl: string = chrome.runtime.getURL(barPage); function getIframeStyle(useComponentBar: boolean): string { - return ( - (useComponentBar - ? "height: calc(276px + 25px); width: 450px; right: 0;" - : "height: 42px; width: 100%;") + " border: 0; min-height: initial;" - ); + const isNotificationFresh = + notificationBarInitData.launchTimestamp && + Date.now() - notificationBarInitData.launchTimestamp < 500; + + const baseStyle = useComponentBar + ? isNotificationFresh + ? "height: calc(276px + 25px); width: 450px; right: 0; transform:translateX(100%); opacity:0;" + : "height: calc(276px + 25px); width: 450px; right: 0; transform:translateX(0%); opacity:1;" + : "height: 42px; width: 100%;"; + + const transitionStyle = + isNotificationFresh && useComponentBar + ? "transition: transform 0.15s ease-in, opacity 0.15s ease; transform:translateX(0%); opacity:1; transition-delay: 0.25s;" + : ""; + + notificationBarIframe.style.cssText = baseStyle + " border: 0; min-height: initial;"; + + if (isNotificationFresh && useComponentBar) { + requestAnimationFrame(() => { + requestAnimationFrame(() => { + notificationBarIframe.style.cssText += transitionStyle; + }); + }); + } + + return baseStyle + " border: 0; min-height: initial;"; } notificationBarIframe = document.createElement("iframe"); diff --git a/apps/browser/src/autofill/deprecated/background/overlay.background.deprecated.spec.ts b/apps/browser/src/autofill/deprecated/background/overlay.background.deprecated.spec.ts index 497664542ad..d5541b5da48 100644 --- a/apps/browser/src/autofill/deprecated/background/overlay.background.deprecated.spec.ts +++ b/apps/browser/src/autofill/deprecated/background/overlay.background.deprecated.spec.ts @@ -479,7 +479,6 @@ describe("OverlayBackground", () => { it("will set up onMessage and onConnect listeners", () => { overlayBackground["setupExtensionMessageListeners"](); - // eslint-disable-next-line expect(chrome.runtime.onMessage.addListener).toHaveBeenCalled(); expect(chrome.runtime.onConnect.addListener).toHaveBeenCalled(); }); diff --git a/apps/browser/src/autofill/deprecated/overlay/iframe-content/autofill-overlay-iframe.service.deprecated.spec.ts b/apps/browser/src/autofill/deprecated/overlay/iframe-content/autofill-overlay-iframe.service.deprecated.spec.ts index 67f7ed66885..e79cba71763 100644 --- a/apps/browser/src/autofill/deprecated/overlay/iframe-content/autofill-overlay-iframe.service.deprecated.spec.ts +++ b/apps/browser/src/autofill/deprecated/overlay/iframe-content/autofill-overlay-iframe.service.deprecated.spec.ts @@ -277,32 +277,6 @@ describe("AutofillOverlayIframeService", () => { borderColor: "#4c525f", }); }); - - it("updates the border to match the `nord` theme", () => { - const message = { - command: "initAutofillOverlayList", - theme: ThemeType.Nord, - }; - - sendPortMessage(portSpy, message); - - expect(updateElementStylesSpy).toBeCalledWith(autofillOverlayIframeService["iframe"], { - borderColor: "#2E3440", - }); - }); - - it("updates the border to match the `solarizedDark` theme", () => { - const message = { - command: "initAutofillOverlayList", - theme: ThemeType.SolarizedDark, - }; - - sendPortMessage(portSpy, message); - - expect(updateElementStylesSpy).toBeCalledWith(autofillOverlayIframeService["iframe"], { - borderColor: "#073642", - }); - }); }); describe("updating the iframe's position", () => { diff --git a/apps/browser/src/autofill/deprecated/overlay/iframe-content/autofill-overlay-iframe.service.deprecated.ts b/apps/browser/src/autofill/deprecated/overlay/iframe-content/autofill-overlay-iframe.service.deprecated.ts index 402c384b8be..e0df9eb60b6 100644 --- a/apps/browser/src/autofill/deprecated/overlay/iframe-content/autofill-overlay-iframe.service.deprecated.ts +++ b/apps/browser/src/autofill/deprecated/overlay/iframe-content/autofill-overlay-iframe.service.deprecated.ts @@ -221,12 +221,6 @@ class AutofillOverlayIframeService implements AutofillOverlayIframeServiceInterf if (verifiedTheme === ThemeTypes.Dark) { borderColor = "#4c525f"; } - if (theme === ThemeTypes.Nord) { - borderColor = "#2E3440"; - } - if (theme === ThemeTypes.SolarizedDark) { - borderColor = "#073642"; - } if (borderColor) { this.updateElementStyles(this.iframe, { borderColor }); } diff --git a/apps/browser/src/autofill/notification/abstractions/notification-bar.ts b/apps/browser/src/autofill/notification/abstractions/notification-bar.ts index 53948a26a2e..cb14a86dffa 100644 --- a/apps/browser/src/autofill/notification/abstractions/notification-bar.ts +++ b/apps/browser/src/autofill/notification/abstractions/notification-bar.ts @@ -19,10 +19,11 @@ type NotificationBarIframeInitData = { }; type NotificationBarWindowMessage = { - [key: string]: any; command: string; error?: string; initData?: NotificationBarIframeInitData; + username?: string; + cipherId?: string; }; type NotificationBarWindowMessageHandlers = { diff --git a/apps/browser/src/autofill/notification/bar.scss b/apps/browser/src/autofill/notification/bar.scss index cd995a115ff..2f1a7f1d318 100644 --- a/apps/browser/src/autofill/notification/bar.scss +++ b/apps/browser/src/autofill/notification/bar.scss @@ -334,19 +334,3 @@ button { } } } - -.theme_solarizedDark { - .notification-bar-redesign #content .inner-wrapper { - #select-folder { - background-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nbm9uZSc+PHBhdGggc3Ryb2tlPScjZWVlOGQ1JyBkPSdtNSA2IDMgMyAzLTMnLz48L3N2Zz4="); - } - } -} - -.theme_nord { - .notification-bar-redesign #content .inner-wrapper { - #select-folder { - background-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nbm9uZSc+PHBhdGggc3Ryb2tlPScjRTVFOUYwJyBkPSdtNSA2IDMgMyAzLTMnLz48L3N2Zz4="); - } - } -} diff --git a/apps/browser/src/autofill/notification/bar.ts b/apps/browser/src/autofill/notification/bar.ts index 5a8d7855bea..c3f29e1332f 100644 --- a/apps/browser/src/autofill/notification/bar.ts +++ b/apps/browser/src/autofill/notification/bar.ts @@ -7,6 +7,7 @@ import { ConsoleLogService } from "@bitwarden/common/platform/services/console-l import type { FolderView } from "@bitwarden/common/vault/models/view/folder.view"; import { AdjustNotificationBarMessageData } from "../background/abstractions/notification.background"; +import { NotificationConfirmationContainer } from "../content/components/notification/confirmation-container"; import { NotificationContainer } from "../content/components/notification/container"; import { buildSvgDomElement } from "../utils"; import { circleCheckIcon } from "../utils/svg-icons"; @@ -22,12 +23,17 @@ const logService = new ConsoleLogService(false); let notificationBarIframeInitData: NotificationBarIframeInitData = {}; let windowMessageOrigin: string; let useComponentBar = false; + const notificationBarWindowMessageHandlers: NotificationBarWindowMessageHandlers = { initNotificationBar: ({ message }) => initNotificationBar(message), - saveCipherAttemptCompleted: ({ message }) => handleSaveCipherAttemptCompletedMessage(message), + saveCipherAttemptCompleted: ({ message }) => + useComponentBar + ? handleSaveCipherConfirmation(message) + : handleSaveCipherAttemptCompletedMessage(message), }; globalThis.addEventListener("load", load); + function load() { setupWindowMessageListener(); sendPlatformMessage({ command: "notificationRefreshFlagValue" }, (flagValue) => { @@ -35,7 +41,6 @@ function load() { applyNotificationBarStyle(); }); } - function applyNotificationBarStyle() { if (!useComponentBar) { // eslint-disable-next-line @typescript-eslint/no-require-imports @@ -44,6 +49,35 @@ function applyNotificationBarStyle() { postMessageToParent({ command: "initNotificationBar" }); } +function getI18n() { + return { + appName: chrome.i18n.getMessage("appName"), + close: chrome.i18n.getMessage("close"), + folder: chrome.i18n.getMessage("folder"), + loginSaveSuccess: chrome.i18n.getMessage("loginSaveSuccess"), + loginSaveSuccessDetails: chrome.i18n.getMessage("loginSaveSuccessDetails"), + loginUpdateSuccess: chrome.i18n.getMessage("loginUpdateSuccess"), + loginUpdateSuccessDetails: chrome.i18n.getMessage("loginUpdatedSuccessDetails"), + newItem: chrome.i18n.getMessage("newItem"), + never: chrome.i18n.getMessage("never"), + notificationAddDesc: chrome.i18n.getMessage("notificationAddDesc"), + notificationAddSave: chrome.i18n.getMessage("notificationAddSave"), + notificationChangeDesc: chrome.i18n.getMessage("notificationChangeDesc"), + notificationChangeSave: chrome.i18n.getMessage("notificationChangeSave"), + notificationEdit: chrome.i18n.getMessage("edit"), + notificationUnlock: chrome.i18n.getMessage("notificationUnlock"), + notificationUnlockDesc: chrome.i18n.getMessage("notificationUnlockDesc"), + saveAction: chrome.i18n.getMessage("notificationAddSave"), + saveAsNewLoginAction: chrome.i18n.getMessage("saveAsNewLoginAction"), + saveFailure: chrome.i18n.getMessage("saveFailure"), + saveFailureDetails: chrome.i18n.getMessage("saveFailureDetails"), + saveLoginPrompt: chrome.i18n.getMessage("saveLoginPrompt"), + updateLoginAction: chrome.i18n.getMessage("updateLoginAction"), + updateLoginPrompt: chrome.i18n.getMessage("updateLoginPrompt"), + view: chrome.i18n.getMessage("view"), + }; +} + function initNotificationBar(message: NotificationBarWindowMessage) { const { initData } = message; if (!initData) { @@ -52,42 +86,13 @@ function initNotificationBar(message: NotificationBarWindowMessage) { notificationBarIframeInitData = initData; const { isVaultLocked, theme } = notificationBarIframeInitData; - - const i18n = { - appName: chrome.i18n.getMessage("appName"), - close: chrome.i18n.getMessage("close"), - never: chrome.i18n.getMessage("never"), - folder: chrome.i18n.getMessage("folder"), - notificationAddSave: chrome.i18n.getMessage("notificationAddSave"), - notificationAddDesc: chrome.i18n.getMessage("notificationAddDesc"), - notificationEdit: chrome.i18n.getMessage("edit"), - notificationChangeSave: chrome.i18n.getMessage("notificationChangeSave"), - notificationChangeDesc: chrome.i18n.getMessage("notificationChangeDesc"), - notificationUnlock: chrome.i18n.getMessage("notificationUnlock"), - notificationUnlockDesc: chrome.i18n.getMessage("notificationUnlockDesc"), - - // @TODO move values to message catalog - saveAction: "Save", - saveAsNewLoginAction: "Save as new login", - updateLoginAction: "Update login", - saveLoginPrompt: "Save login?", - updateLoginPrompt: "Update existing login?", - loginSaveSuccess: "Login saved", - loginSaveSuccessDetails: "Login saved to Bitwarden.", - loginUpdateSuccess: "Login saved", - loginUpdateSuccessDetails: "Login updated in Bitwarden.", - saveFailure: "Error saving", - saveFailureDetails: "Oh no! We couldn't save this. Try entering the details as a New item", - }; + const i18n = getI18n(); + const resolvedTheme = getResolvedTheme(theme); if (useComponentBar) { document.body.innerHTML = ""; // Current implementations utilize a require for scss files which creates the need to remove the node. document.head.querySelectorAll('link[rel="stylesheet"]').forEach((node) => node.remove()); - const themeType = getTheme(globalThis, theme); - - // There are other possible passed theme values, but for now, resolve to dark or light - const resolvedTheme: Theme = themeType === ThemeTypes.Dark ? ThemeTypes.Dark : ThemeTypes.Light; sendPlatformMessage({ command: "bgGetDecryptedCiphers" }, (cipherData) => { // @TODO use context to avoid prop drilling @@ -105,77 +110,71 @@ function initNotificationBar(message: NotificationBarWindowMessage) { document.body, ); }); - } + } else { + setNotificationBarTheme(); - setNotificationBarTheme(); + (document.getElementById("logo") as HTMLImageElement).src = isVaultLocked + ? chrome.runtime.getURL("images/icon38_locked.png") + : chrome.runtime.getURL("images/icon38.png"); - (document.getElementById("logo") as HTMLImageElement).src = isVaultLocked - ? chrome.runtime.getURL("images/icon38_locked.png") - : chrome.runtime.getURL("images/icon38.png"); + setupLogoLink(i18n); - setupLogoLink(i18n); + // i18n for "Add" template + const addTemplate = document.getElementById("template-add") as HTMLTemplateElement; - // i18n for "Add" template - const addTemplate = document.getElementById("template-add") as HTMLTemplateElement; + const neverButton = addTemplate.content.getElementById("never-save"); + neverButton.textContent = i18n.never; - const neverButton = addTemplate.content.getElementById("never-save"); - neverButton.textContent = i18n.never; + const selectFolder = addTemplate.content.getElementById("select-folder"); + selectFolder.hidden = isVaultLocked || removeIndividualVault(); + selectFolder.setAttribute("aria-label", i18n.folder); - const selectFolder = addTemplate.content.getElementById("select-folder"); - selectFolder.hidden = isVaultLocked || removeIndividualVault(); - selectFolder.setAttribute("aria-label", i18n.folder); + const addButton = addTemplate.content.getElementById("add-save"); + addButton.textContent = i18n.notificationAddSave; - const addButton = addTemplate.content.getElementById("add-save"); - addButton.textContent = i18n.notificationAddSave; + const addEditButton = addTemplate.content.getElementById("add-edit"); + // If Remove Individual Vault policy applies, "Add" opens the edit tab, so we hide the Edit button + addEditButton.hidden = removeIndividualVault(); + addEditButton.textContent = i18n.notificationEdit; - const addEditButton = addTemplate.content.getElementById("add-edit"); - // If Remove Individual Vault policy applies, "Add" opens the edit tab, so we hide the Edit button - addEditButton.hidden = removeIndividualVault(); - addEditButton.textContent = i18n.notificationEdit; + addTemplate.content.getElementById("add-text").textContent = i18n.notificationAddDesc; - addTemplate.content.getElementById("add-text").textContent = i18n.notificationAddDesc; + // i18n for "Change" (update password) template + const changeTemplate = document.getElementById("template-change") as HTMLTemplateElement; - // i18n for "Change" (update password) template - const changeTemplate = document.getElementById("template-change") as HTMLTemplateElement; + const changeButton = changeTemplate.content.getElementById("change-save"); + changeButton.textContent = i18n.notificationChangeSave; - const changeButton = changeTemplate.content.getElementById("change-save"); - changeButton.textContent = i18n.notificationChangeSave; + const changeEditButton = changeTemplate.content.getElementById("change-edit"); + changeEditButton.textContent = i18n.notificationEdit; - const changeEditButton = changeTemplate.content.getElementById("change-edit"); - changeEditButton.textContent = i18n.notificationEdit; + changeTemplate.content.getElementById("change-text").textContent = i18n.notificationChangeDesc; - changeTemplate.content.getElementById("change-text").textContent = i18n.notificationChangeDesc; + // i18n for "Unlock" (unlock extension) template + const unlockTemplate = document.getElementById("template-unlock") as HTMLTemplateElement; - // i18n for "Unlock" (unlock extension) template - const unlockTemplate = document.getElementById("template-unlock") as HTMLTemplateElement; + const unlockButton = unlockTemplate.content.getElementById("unlock-vault"); + unlockButton.textContent = i18n.notificationUnlock; - const unlockButton = unlockTemplate.content.getElementById("unlock-vault"); - unlockButton.textContent = i18n.notificationUnlock; + unlockTemplate.content.getElementById("unlock-text").textContent = i18n.notificationUnlockDesc; - unlockTemplate.content.getElementById("unlock-text").textContent = i18n.notificationUnlockDesc; + // i18n for body content + const closeButton = document.getElementById("close-button"); + closeButton.title = i18n.close; - // i18n for body content - const closeButton = document.getElementById("close-button"); - closeButton.title = i18n.close; + const notificationType = initData.type; + if (notificationType === "add") { + handleTypeAdd(); + } else if (notificationType === "change") { + handleTypeChange(); + } else if (notificationType === "unlock") { + handleTypeUnlock(); + } - const notificationType = initData.type; - if (notificationType === "add") { - handleTypeAdd(); - } else if (notificationType === "change") { - handleTypeChange(); - } else if (notificationType === "unlock") { - handleTypeUnlock(); - } + closeButton.addEventListener("click", handleCloseNotification); - closeButton.addEventListener("click", handleCloseNotification); - - globalThis.addEventListener("resize", adjustHeight); - adjustHeight(); - function handleCloseNotification(e: Event) { - e.preventDefault(); - sendPlatformMessage({ - command: "bgCloseNotificationBar", - }); + globalThis.addEventListener("resize", adjustHeight); + adjustHeight(); } function handleEditOrUpdateAction(e: Event) { const notificationType = initData.type; @@ -183,6 +182,12 @@ function initNotificationBar(message: NotificationBarWindowMessage) { notificationType === "add" ? sendSaveCipherMessage(true) : sendSaveCipherMessage(false); } } +function handleCloseNotification(e: Event) { + e.preventDefault(); + sendPlatformMessage({ + command: "bgCloseNotificationBar", + }); +} function handleSaveAction(e: Event) { e.preventDefault(); @@ -282,6 +287,37 @@ function handleSaveCipherAttemptCompletedMessage(message: NotificationBarWindowM ); } +function openViewVaultItemPopout(e: Event, cipherId: string) { + e.preventDefault(); + sendPlatformMessage({ + command: "bgOpenVault", + cipherId, + }); +} + +function handleSaveCipherConfirmation(message: NotificationBarWindowMessage) { + const { theme, type } = notificationBarIframeInitData; + const { error, username, cipherId } = message; + const i18n = getI18n(); + const resolvedTheme = getResolvedTheme(theme); + + globalThis.setTimeout(() => sendPlatformMessage({ command: "bgCloseNotificationBar" }), 5000); + + return render( + NotificationConfirmationContainer({ + ...notificationBarIframeInitData, + type: type as NotificationType, + theme: resolvedTheme, + handleCloseNotification, + i18n, + error, + username, + handleOpenVault: (e) => openViewVaultItemPopout(e, cipherId), + }), + document.body, + ); +} + function handleTypeUnlock() { setContent(document.getElementById("template-unlock") as HTMLTemplateElement); @@ -395,6 +431,14 @@ function getTheme(globalThis: any, theme: NotificationBarIframeInitData["theme"] return theme; } +function getResolvedTheme(theme: Theme) { + const themeType = getTheme(globalThis, theme); + + // There are other possible passed theme values, but for now, resolve to dark or light + const resolvedTheme: Theme = themeType === ThemeTypes.Dark ? ThemeTypes.Dark : ThemeTypes.Light; + return resolvedTheme; +} + function setNotificationBarTheme() { const theme = getTheme(globalThis, notificationBarIframeInitData.theme); diff --git a/apps/browser/src/autofill/overlay/inline-menu/iframe-content/autofill-inline-menu-iframe.service.spec.ts b/apps/browser/src/autofill/overlay/inline-menu/iframe-content/autofill-inline-menu-iframe.service.spec.ts index 7d7b48f83cb..9f2947c2e99 100644 --- a/apps/browser/src/autofill/overlay/inline-menu/iframe-content/autofill-inline-menu-iframe.service.spec.ts +++ b/apps/browser/src/autofill/overlay/inline-menu/iframe-content/autofill-inline-menu-iframe.service.spec.ts @@ -302,38 +302,6 @@ describe("AutofillInlineMenuIframeService", () => { }, ); }); - - it("updates the border to match the `nord` theme", () => { - const message = { - command: "initAutofillInlineMenuList", - theme: ThemeType.Nord, - }; - - sendPortMessage(portSpy, message); - - expect(updateElementStylesSpy).toHaveBeenCalledWith( - autofillInlineMenuIframeService["iframe"], - { - borderColor: "#2E3440", - }, - ); - }); - - it("updates the border to match the `solarizedDark` theme", () => { - const message = { - command: "initAutofillInlineMenuList", - theme: ThemeType.SolarizedDark, - }; - - sendPortMessage(portSpy, message); - - expect(updateElementStylesSpy).toHaveBeenCalledWith( - autofillInlineMenuIframeService["iframe"], - { - borderColor: "#073642", - }, - ); - }); }); describe("updating the iframe's position", () => { diff --git a/apps/browser/src/autofill/overlay/inline-menu/iframe-content/autofill-inline-menu-iframe.service.ts b/apps/browser/src/autofill/overlay/inline-menu/iframe-content/autofill-inline-menu-iframe.service.ts index 72bf631f50b..9a9821f643c 100644 --- a/apps/browser/src/autofill/overlay/inline-menu/iframe-content/autofill-inline-menu-iframe.service.ts +++ b/apps/browser/src/autofill/overlay/inline-menu/iframe-content/autofill-inline-menu-iframe.service.ts @@ -250,12 +250,6 @@ export class AutofillInlineMenuIframeService implements AutofillInlineMenuIframe if (verifiedTheme === ThemeTypes.Dark) { borderColor = "#4c525f"; } - if (theme === ThemeTypes.Nord) { - borderColor = "#2E3440"; - } - if (theme === ThemeTypes.SolarizedDark) { - borderColor = "#073642"; - } if (borderColor) { this.updateElementStyles(this.iframe, { borderColor }); } diff --git a/apps/browser/src/autofill/popup/fido2/fido2.component.ts b/apps/browser/src/autofill/popup/fido2/fido2.component.ts index 24c14c98685..0471d460fd5 100644 --- a/apps/browser/src/autofill/popup/fido2/fido2.component.ts +++ b/apps/browser/src/autofill/popup/fido2/fido2.component.ts @@ -389,11 +389,14 @@ export class Fido2Component implements OnInit, OnDestroy { } protected async search() { + const userId = await firstValueFrom(getUserId(this.accountService.activeAccount$)); + this.hasSearched = true; - const isSearchable = await this.searchService.isSearchable(this.searchText); + const isSearchable = await this.searchService.isSearchable(userId, this.searchText); if (isSearchable) { this.displayedCiphers = await this.searchService.searchCiphers( + userId, this.searchText, null, this.ciphers, diff --git a/apps/browser/src/autofill/services/autofill.service.spec.ts b/apps/browser/src/autofill/services/autofill.service.spec.ts index 3843734ad64..7bc66ea322c 100644 --- a/apps/browser/src/autofill/services/autofill.service.spec.ts +++ b/apps/browser/src/autofill/services/autofill.service.spec.ts @@ -921,12 +921,12 @@ describe("AutofillService", () => { .spyOn(billingAccountProfileStateService, "hasPremiumFromAnySource$") .mockImplementation(() => of(true)); jest.spyOn(autofillService, "getShouldAutoCopyTotp").mockResolvedValue(true); - jest.spyOn(totpService, "getCode").mockResolvedValue(totpCode); + totpService.getCode$.mockReturnValue(of({ code: totpCode, period: 30 })); const autofillResult = await autofillService.doAutoFill(autofillOptions); expect(autofillService.getShouldAutoCopyTotp).toHaveBeenCalled(); - expect(totpService.getCode).toHaveBeenCalledWith(autofillOptions.cipher.login.totp); + expect(totpService.getCode$).toHaveBeenCalledWith(autofillOptions.cipher.login.totp); expect(autofillResult).toBe(totpCode); }); @@ -940,7 +940,7 @@ describe("AutofillService", () => { const autofillResult = await autofillService.doAutoFill(autofillOptions); expect(autofillService.getShouldAutoCopyTotp).not.toHaveBeenCalled(); - expect(totpService.getCode).not.toHaveBeenCalled(); + expect(totpService.getCode$).not.toHaveBeenCalled(); expect(autofillResult).toBeNull(); }); @@ -956,12 +956,12 @@ describe("AutofillService", () => { it("returns a null value if the login does not contain a TOTP value", async () => { autofillOptions.cipher.login.totp = undefined; jest.spyOn(autofillService, "getShouldAutoCopyTotp"); - jest.spyOn(totpService, "getCode"); + jest.spyOn(totpService, "getCode$"); const autofillResult = await autofillService.doAutoFill(autofillOptions); expect(autofillService.getShouldAutoCopyTotp).not.toHaveBeenCalled(); - expect(totpService.getCode).not.toHaveBeenCalled(); + expect(totpService.getCode$).not.toHaveBeenCalled(); expect(autofillResult).toBeNull(); }); @@ -984,12 +984,12 @@ describe("AutofillService", () => { .spyOn(billingAccountProfileStateService, "hasPremiumFromAnySource$") .mockImplementation(() => of(true)); jest.spyOn(autofillService, "getShouldAutoCopyTotp").mockResolvedValue(false); - jest.spyOn(totpService, "getCode"); + jest.spyOn(totpService, "getCode$"); const autofillResult = await autofillService.doAutoFill(autofillOptions); expect(autofillService.getShouldAutoCopyTotp).toHaveBeenCalled(); - expect(totpService.getCode).not.toHaveBeenCalled(); + expect(totpService.getCode$).not.toHaveBeenCalled(); expect(autofillResult).toBeNull(); }); }); diff --git a/apps/browser/src/autofill/services/autofill.service.ts b/apps/browser/src/autofill/services/autofill.service.ts index fc7d0ebcc99..e833420b859 100644 --- a/apps/browser/src/autofill/services/autofill.service.ts +++ b/apps/browser/src/autofill/services/autofill.service.ts @@ -494,7 +494,7 @@ export default class AutofillService implements AutofillServiceInterface { const shouldAutoCopyTotp = await this.getShouldAutoCopyTotp(); totp = shouldAutoCopyTotp - ? await this.totpService.getCode(options.cipher.login.totp) + ? (await firstValueFrom(this.totpService.getCode$(options.cipher.login.totp))).code : null; }), ); @@ -992,7 +992,10 @@ export default class AutofillService implements AutofillServiceInterface { } filledFields[t.opid] = t; - let totpValue = await this.totpService.getCode(login.totp); + const totpResponse = await firstValueFrom( + this.totpService.getCode$(options.cipher.login.totp), + ); + let totpValue = totpResponse.code; if (totpValue.length == totps.length) { totpValue = totpValue.charAt(i); } @@ -1409,7 +1412,6 @@ export default class AutofillService implements AutofillServiceInterface { let doesContainValue = false; CreditCardAutoFillConstants.CardAttributesExtended.forEach((attributeName) => { - // eslint-disable-next-line no-prototype-builtins if (doesContainValue || !field[attributeName]) { return; } diff --git a/apps/browser/src/autofill/shared/styles/variables.scss b/apps/browser/src/autofill/shared/styles/variables.scss index 12d55ad8be6..ae6a060798a 100644 --- a/apps/browser/src/autofill/shared/styles/variables.scss +++ b/apps/browser/src/autofill/shared/styles/variables.scss @@ -1,6 +1,4 @@ -@import "~nord/src/sass/nord.scss"; - -$dark-icon-themes: "theme_dark", "theme_solarizedDark", "theme_nord"; +$dark-icon-themes: "theme_dark"; $font-family-sans-serif: "DM Sans", "Helvetica Neue", Helvetica, Arial, sans-serif; $font-family-source-code-pro: "Source Code Pro", monospace; @@ -34,14 +32,6 @@ $border-color: #ced4dc; $border-radius: 3px; $focus-outline-color: #1252a3; -$solarizedDarkBase0: #839496; -$solarizedDarkBase03: #002b36; -$solarizedDarkBase02: #073642; -$solarizedDarkBase01: #586e75; -$solarizedDarkBase2: #eee8d5; -$solarizedDarkCyan: #2aa198; -$solarizedDarkGreen: #859900; - $themes: ( light: ( textColor: $text-color-light, @@ -79,41 +69,6 @@ $themes: ( passwordSpecialColor: $password-special-color-dark, passwordNumberColor: $password-number-color-dark, ), - nord: ( - textColor: $nord5, - mutedTextColor: $nord4, - backgroundColor: $nord1, - backgroundOffsetColor: darken($nord1, 2.75%), - buttonPrimaryColor: $nord8, - primaryColor: $nord9, - textContrast: $nord2, - inputBorderColor: $nord0, - inputBackgroundColor: $nord2, - borderColor: $nord0, - focusOutlineColor: lighten($focus-outline-color, 25%), - successColor: $success-color-dark, - passkeysAuthenticating: $nord4, - passwordSpecialColor: $nord12, - passwordNumberColor: $nord8, - ), - solarizedDark: ( - textColor: $solarizedDarkBase2, - // Muted uses main text color to avoid contrast issues - mutedTextColor: $solarizedDarkBase2, - backgroundColor: $solarizedDarkBase03, - backgroundOffsetColor: darken($solarizedDarkBase03, 2.75%), - buttonPrimaryColor: $solarizedDarkCyan, - primaryColor: $solarizedDarkGreen, - textContrast: $solarizedDarkBase02, - inputBorderColor: rgba($solarizedDarkBase2, 0.2), - inputBackgroundColor: $solarizedDarkBase01, - borderColor: $solarizedDarkBase2, - focusOutlineColor: lighten($focus-outline-color, 15%), - successColor: $success-color-dark, - passkeysAuthenticating: $solarizedDarkBase2, - passwordSpecialColor: #b58900, - passwordNumberColor: $solarizedDarkCyan, - ), ); @mixin themify($themes: $themes) { diff --git a/apps/browser/src/autofill/types/index.ts b/apps/browser/src/autofill/types/index.ts index 58ac95e7edf..30ebf38fef5 100644 --- a/apps/browser/src/autofill/types/index.ts +++ b/apps/browser/src/autofill/types/index.ts @@ -1,6 +1,5 @@ -import { VaultTimeoutAction } from "@bitwarden/common/enums/vault-timeout-action.enum"; +import { VaultTimeout, VaultTimeoutAction } from "@bitwarden/common/key-management/vault-timeout"; import { Region } from "@bitwarden/common/platform/abstractions/environment.service"; -import { VaultTimeout } from "@bitwarden/common/types/vault-timeout.type"; import { CipherType } from "@bitwarden/common/vault/enums"; export type UserSettings = { diff --git a/apps/browser/src/background/commands.background.ts b/apps/browser/src/background/commands.background.ts index 5cf58b1653f..f09ebb6c8a1 100644 --- a/apps/browser/src/background/commands.background.ts +++ b/apps/browser/src/background/commands.background.ts @@ -1,9 +1,9 @@ // FIXME: Update this file to be type safe and remove this and next line // @ts-strict-ignore -import { VaultTimeoutService } from "@bitwarden/common/abstractions/vault-timeout/vault-timeout.service"; import { AuthService } from "@bitwarden/common/auth/abstractions/auth.service"; import { AuthenticationStatus } from "@bitwarden/common/auth/enums/authentication-status"; import { ExtensionCommand, ExtensionCommandType } from "@bitwarden/common/autofill/constants"; +import { VaultTimeoutService } from "@bitwarden/common/key-management/vault-timeout"; import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service"; import { openUnlockPopout } from "../auth/popup/utils/auth-popout-window"; diff --git a/apps/browser/src/background/idle.background.ts b/apps/browser/src/background/idle.background.ts index 08d4b9fc00c..90276eaea0a 100644 --- a/apps/browser/src/background/idle.background.ts +++ b/apps/browser/src/background/idle.background.ts @@ -2,12 +2,14 @@ // @ts-strict-ignore import { firstValueFrom } from "rxjs"; -import { VaultTimeoutSettingsService } from "@bitwarden/common/abstractions/vault-timeout/vault-timeout-settings.service"; -import { VaultTimeoutService } from "@bitwarden/common/abstractions/vault-timeout/vault-timeout.service"; import { AccountService } from "@bitwarden/common/auth/abstractions/account.service"; -import { VaultTimeoutAction } from "@bitwarden/common/enums/vault-timeout-action.enum"; +import { + VaultTimeoutAction, + VaultTimeoutService, + VaultTimeoutSettingsService, + VaultTimeoutStringType, +} from "@bitwarden/common/key-management/vault-timeout"; import { NotificationsService } from "@bitwarden/common/platform/notifications"; -import { VaultTimeoutStringType } from "@bitwarden/common/types/vault-timeout.type"; const IdleInterval = 60 * 5; // 5 minutes @@ -32,12 +34,8 @@ export default class IdleBackground { const idleHandler = (newState: string) => { if (newState === "active") { - // 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 this.notificationsService.reconnectFromActivity(); } else { - // 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 this.notificationsService.disconnectFromInactivity(); } }; diff --git a/apps/browser/src/background/main.background.ts b/apps/browser/src/background/main.background.ts index bb9ec41cc7d..cd65220936e 100644 --- a/apps/browser/src/background/main.background.ts +++ b/apps/browser/src/background/main.background.ts @@ -1,5 +1,7 @@ // FIXME: Update this file to be type safe and remove this and next line // @ts-strict-ignore +import "core-js/proposals/explicit-resource-management"; + import { filter, firstValueFrom, map, merge, Subject, timeout } from "rxjs"; import { CollectionService, DefaultCollectionService } from "@bitwarden/admin-console/common"; @@ -19,7 +21,6 @@ import { AuditService as AuditServiceAbstraction } from "@bitwarden/common/abstr import { EventCollectionService as EventCollectionServiceAbstraction } from "@bitwarden/common/abstractions/event/event-collection.service"; import { EventUploadService as EventUploadServiceAbstraction } from "@bitwarden/common/abstractions/event/event-upload.service"; import { SearchService as SearchServiceAbstraction } from "@bitwarden/common/abstractions/search.service"; -import { VaultTimeoutSettingsService as VaultTimeoutSettingsServiceAbstraction } from "@bitwarden/common/abstractions/vault-timeout/vault-timeout-settings.service"; import { InternalOrganizationServiceAbstraction } from "@bitwarden/common/admin-console/abstractions/organization/organization.service.abstraction"; import { PolicyApiServiceAbstraction } from "@bitwarden/common/admin-console/abstractions/policy/policy-api.service.abstraction"; import { InternalPolicyService as InternalPolicyServiceAbstraction } from "@bitwarden/common/admin-console/abstractions/policy/policy.service.abstraction"; @@ -82,6 +83,11 @@ import { EncryptServiceImplementation } from "@bitwarden/common/key-management/c import { FallbackBulkEncryptService } from "@bitwarden/common/key-management/crypto/services/fallback-bulk-encrypt.service"; import { MultithreadEncryptServiceImplementation } from "@bitwarden/common/key-management/crypto/services/multithread-encrypt.service.implementation"; import { DefaultProcessReloadService } from "@bitwarden/common/key-management/services/default-process-reload.service"; +import { + DefaultVaultTimeoutSettingsService, + VaultTimeoutSettingsService, + VaultTimeoutStringType, +} from "@bitwarden/common/key-management/vault-timeout"; import { AppIdService as AppIdServiceAbstraction } from "@bitwarden/common/platform/abstractions/app-id.service"; import { ConfigApiServiceAbstraction } from "@bitwarden/common/platform/abstractions/config/config-api.service.abstraction"; import { ConfigService } from "@bitwarden/common/platform/abstractions/config/config.service"; @@ -169,7 +175,6 @@ import { AuditService } from "@bitwarden/common/services/audit.service"; import { EventCollectionService } from "@bitwarden/common/services/event/event-collection.service"; import { EventUploadService } from "@bitwarden/common/services/event/event-upload.service"; import { SearchService } from "@bitwarden/common/services/search.service"; -import { VaultTimeoutSettingsService } from "@bitwarden/common/services/vault-timeout/vault-timeout-settings.service"; import { PasswordStrengthService, PasswordStrengthServiceAbstraction, @@ -180,7 +185,6 @@ import { SendStateProvider } from "@bitwarden/common/tools/send/services/send-st import { SendService } from "@bitwarden/common/tools/send/services/send.service"; import { InternalSendService as InternalSendServiceAbstraction } from "@bitwarden/common/tools/send/services/send.service.abstraction"; import { UserId } from "@bitwarden/common/types/guid"; -import { VaultTimeoutStringType } from "@bitwarden/common/types/vault-timeout.type"; import { CipherService as CipherServiceAbstraction } from "@bitwarden/common/vault/abstractions/cipher.service"; import { CipherFileUploadService as CipherFileUploadServiceAbstraction } from "@bitwarden/common/vault/abstractions/file-upload/cipher-file-upload.service"; import { FolderApiServiceAbstraction } from "@bitwarden/common/vault/abstractions/folder/folder-api.service.abstraction"; @@ -252,6 +256,7 @@ import AutofillService from "../autofill/services/autofill.service"; import { InlineMenuFieldQualificationService } from "../autofill/services/inline-menu-field-qualification.service"; import { SafariApp } from "../browser/safariApp"; import { BackgroundBrowserBiometricsService } from "../key-management/biometrics/background-browser-biometrics.service"; +import VaultTimeoutService from "../key-management/vault-timeout/vault-timeout.service"; import { BrowserApi } from "../platform/browser/browser-api"; import { flagEnabled } from "../platform/flags"; import { UpdateBadge } from "../platform/listeners/update-badge"; @@ -277,7 +282,6 @@ import { BrowserStorageServiceProvider } from "../platform/storage/browser-stora import { OffscreenStorageService } from "../platform/storage/offscreen-storage.service"; import { SyncServiceListener } from "../platform/sync/sync-service.listener"; import { fromChromeRuntimeMessaging } from "../platform/utils/from-chrome-runtime-messaging"; -import VaultTimeoutService from "../services/vault-timeout/vault-timeout.service"; import { VaultFilterService } from "../vault/services/vault-filter.service"; import CommandsBackground from "./commands.background"; @@ -308,7 +312,7 @@ export default class MainBackground { userDecryptionOptionsService: InternalUserDecryptionOptionsServiceAbstraction; collectionService: CollectionService; vaultTimeoutService?: VaultTimeoutService; - vaultTimeoutSettingsService: VaultTimeoutSettingsServiceAbstraction; + vaultTimeoutSettingsService: VaultTimeoutSettingsService; passwordGenerationService: PasswordGenerationServiceAbstraction; syncService: SyncService; passwordStrengthService: PasswordStrengthServiceAbstraction; @@ -682,7 +686,7 @@ export default class MainBackground { this.organizationService = new DefaultOrganizationService(this.stateProvider); this.policyService = new PolicyService(this.stateProvider, this.organizationService); - this.vaultTimeoutSettingsService = new VaultTimeoutSettingsService( + this.vaultTimeoutSettingsService = new DefaultVaultTimeoutSettingsService( this.accountService, this.pinService, this.userDecryptionOptionsService, @@ -830,10 +834,7 @@ export default class MainBackground { this.configService, ); - this.themeStateService = new DefaultThemeStateService( - this.globalStateProvider, - this.configService, - ); + this.themeStateService = new DefaultThemeStateService(this.globalStateProvider); this.bulkEncryptService = new FallbackBulkEncryptService(this.encryptService); @@ -974,7 +975,7 @@ export default class MainBackground { this.authService, this.accountService, ); - this.totpService = new TotpService(this.cryptoFunctionService, this.logService); + this.totpService = new TotpService(this.sdkService); this.scriptInjectorService = new BrowserScriptInjectorService( this.domainSettingsService, @@ -1290,7 +1291,7 @@ export default class MainBackground { } this.containerService.attachToGlobal(self); - await this.sdkLoadService.load(); + await this.sdkLoadService.loadAndInit(); // Only the "true" background should run migrations await this.stateService.init({ runMigrations: true }); diff --git a/apps/browser/src/billing/popup/settings/premium-v2.component.html b/apps/browser/src/billing/popup/settings/premium-v2.component.html index f578de8ae7a..4f87a0f6781 100644 --- a/apps/browser/src/billing/popup/settings/premium-v2.component.html +++ b/apps/browser/src/billing/popup/settings/premium-v2.component.html @@ -45,14 +45,14 @@ #refreshBtn type="button" (click)="refresh()" - [disabled]="$any(refreshBtn).loading" + [disabled]="$any(refreshBtn).loading()" [appApiAction]="refreshPromise" bitButton > - {{ "premiumRefresh" | i18n }} + {{ "premiumRefresh" | i18n }} diff --git a/apps/browser/src/images/at-risk-password-carousel/generate_password.dark.png b/apps/browser/src/images/at-risk-password-carousel/generate_password.dark.png new file mode 100644 index 00000000000..8d0fbbdec56 Binary files /dev/null and b/apps/browser/src/images/at-risk-password-carousel/generate_password.dark.png differ diff --git a/apps/browser/src/images/at-risk-password-carousel/generate_password.light.png b/apps/browser/src/images/at-risk-password-carousel/generate_password.light.png new file mode 100644 index 00000000000..4e46ce2adc3 Binary files /dev/null and b/apps/browser/src/images/at-risk-password-carousel/generate_password.light.png differ diff --git a/apps/browser/src/images/at-risk-password-carousel/review_at-risk_logins.dark.png b/apps/browser/src/images/at-risk-password-carousel/review_at-risk_logins.dark.png new file mode 100644 index 00000000000..47e1d40bd4e Binary files /dev/null and b/apps/browser/src/images/at-risk-password-carousel/review_at-risk_logins.dark.png differ diff --git a/apps/browser/src/images/at-risk-password-carousel/review_at-risk_logins.light.png b/apps/browser/src/images/at-risk-password-carousel/review_at-risk_logins.light.png new file mode 100644 index 00000000000..a248f04c978 Binary files /dev/null and b/apps/browser/src/images/at-risk-password-carousel/review_at-risk_logins.light.png differ diff --git a/apps/browser/src/images/at-risk-password-carousel/update_login.dark.png b/apps/browser/src/images/at-risk-password-carousel/update_login.dark.png new file mode 100644 index 00000000000..a04d3e369ba Binary files /dev/null and b/apps/browser/src/images/at-risk-password-carousel/update_login.dark.png differ diff --git a/apps/browser/src/images/at-risk-password-carousel/update_login.light.png b/apps/browser/src/images/at-risk-password-carousel/update_login.light.png new file mode 100644 index 00000000000..3bc176f8acd Binary files /dev/null and b/apps/browser/src/images/at-risk-password-carousel/update_login.light.png differ diff --git a/apps/browser/src/key-management/lock/services/extension-lock-component.service.spec.ts b/apps/browser/src/key-management/lock/services/extension-lock-component.service.spec.ts index faf5036d0f7..9afc723825c 100644 --- a/apps/browser/src/key-management/lock/services/extension-lock-component.service.spec.ts +++ b/apps/browser/src/key-management/lock/services/extension-lock-component.service.spec.ts @@ -6,7 +6,7 @@ import { PinServiceAbstraction, UserDecryptionOptionsServiceAbstraction, } from "@bitwarden/auth/common"; -import { VaultTimeoutSettingsService } from "@bitwarden/common/abstractions/vault-timeout/vault-timeout-settings.service"; +import { VaultTimeoutSettingsService } from "@bitwarden/common/key-management/vault-timeout"; import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service"; import { UserId } from "@bitwarden/common/types/guid"; import { diff --git a/apps/browser/src/services/vault-timeout/foreground-vault-timeout.service.ts b/apps/browser/src/key-management/vault-timeout/foreground-vault-timeout.service.ts similarity index 90% rename from apps/browser/src/services/vault-timeout/foreground-vault-timeout.service.ts rename to apps/browser/src/key-management/vault-timeout/foreground-vault-timeout.service.ts index 0d49595d2eb..5003dfd5b29 100644 --- a/apps/browser/src/services/vault-timeout/foreground-vault-timeout.service.ts +++ b/apps/browser/src/key-management/vault-timeout/foreground-vault-timeout.service.ts @@ -1,6 +1,6 @@ // FIXME: Update this file to be type safe and remove this and next line // @ts-strict-ignore -import { VaultTimeoutService as BaseVaultTimeoutService } from "@bitwarden/common/abstractions/vault-timeout/vault-timeout.service"; +import { VaultTimeoutService as BaseVaultTimeoutService } from "@bitwarden/common/key-management/vault-timeout/abstractions/vault-timeout.service"; import { MessagingService } from "@bitwarden/common/platform/abstractions/messaging.service"; import { UserId } from "@bitwarden/common/types/guid"; diff --git a/apps/browser/src/services/vault-timeout/vault-timeout.service.ts b/apps/browser/src/key-management/vault-timeout/vault-timeout.service.ts similarity index 93% rename from apps/browser/src/services/vault-timeout/vault-timeout.service.ts rename to apps/browser/src/key-management/vault-timeout/vault-timeout.service.ts index e0b9db5422b..51f90fb98a6 100644 --- a/apps/browser/src/services/vault-timeout/vault-timeout.service.ts +++ b/apps/browser/src/key-management/vault-timeout/vault-timeout.service.ts @@ -1,4 +1,4 @@ -import { VaultTimeoutService as BaseVaultTimeoutService } from "@bitwarden/common/services/vault-timeout/vault-timeout.service"; +import { VaultTimeoutService as BaseVaultTimeoutService } from "@bitwarden/common/key-management/vault-timeout/services/vault-timeout.service"; import { SafariApp } from "../../browser/safariApp"; diff --git a/apps/browser/src/manifest.json b/apps/browser/src/manifest.json index 63bdcf0ccf0..5bfca440b99 100644 --- a/apps/browser/src/manifest.json +++ b/apps/browser/src/manifest.json @@ -2,7 +2,7 @@ "manifest_version": 2, "name": "__MSG_extName__", "short_name": "__MSG_appName__", - "version": "2025.2.2", + "version": "2025.3.0", "description": "__MSG_extDesc__", "default_locale": "en", "author": "Bitwarden Inc.", diff --git a/apps/browser/src/manifest.v3.json b/apps/browser/src/manifest.v3.json index 6a537a11fc4..1e2ac1812ca 100644 --- a/apps/browser/src/manifest.v3.json +++ b/apps/browser/src/manifest.v3.json @@ -3,7 +3,7 @@ "minimum_chrome_version": "102.0", "name": "__MSG_extName__", "short_name": "__MSG_appName__", - "version": "2025.2.2", + "version": "2025.3.0", "description": "__MSG_extDesc__", "default_locale": "en", "author": "Bitwarden Inc.", diff --git a/apps/browser/src/platform/popup/layout/popup-tab-navigation.component.html b/apps/browser/src/platform/popup/layout/popup-tab-navigation.component.html index a4ae3161b47..bed4eac3f90 100644 --- a/apps/browser/src/platform/popup/layout/popup-tab-navigation.component.html +++ b/apps/browser/src/platform/popup/layout/popup-tab-navigation.component.html @@ -7,7 +7,7 @@
+ diff --git a/apps/browser/src/vault/popup/components/at-risk-carousel-dialog/at-risk-carousel-dialog.component.ts b/apps/browser/src/vault/popup/components/at-risk-carousel-dialog/at-risk-carousel-dialog.component.ts new file mode 100644 index 00000000000..9af9f0aeda3 --- /dev/null +++ b/apps/browser/src/vault/popup/components/at-risk-carousel-dialog/at-risk-carousel-dialog.component.ts @@ -0,0 +1,46 @@ +import { DialogRef } from "@angular/cdk/dialog"; +import { Component, inject, signal } from "@angular/core"; + +import { ButtonModule, DialogModule, DialogService, TypographyModule } from "@bitwarden/components"; +import { I18nPipe } from "@bitwarden/ui-common"; +import { DarkImageSourceDirective, VaultCarouselModule } from "@bitwarden/vault"; + +export enum AtRiskCarouselDialogResult { + Dismissed = "dismissed", +} + +@Component({ + selector: "vault-at-risk-carousel-dialog", + templateUrl: "./at-risk-carousel-dialog.component.html", + imports: [ + DialogModule, + VaultCarouselModule, + TypographyModule, + ButtonModule, + DarkImageSourceDirective, + I18nPipe, + ], + standalone: true, +}) +export class AtRiskCarouselDialogComponent { + private dialogRef = inject(DialogRef); + + protected dismissBtnEnabled = signal(false); + + protected async dismiss() { + this.dialogRef.close(AtRiskCarouselDialogResult.Dismissed); + } + + protected onSlideChange(slideIndex: number) { + // Only enable the dismiss button on the last slide + if (slideIndex === 2) { + this.dismissBtnEnabled.set(true); + } + } + + static open(dialogService: DialogService) { + return dialogService.open(AtRiskCarouselDialogComponent, { + disableClose: true, + }); + } +} diff --git a/apps/browser/src/vault/popup/components/at-risk-passwords/at-risk-password-page.service.ts b/apps/browser/src/vault/popup/components/at-risk-passwords/at-risk-password-page.service.ts index f8cd4a60650..4f3c235dc3f 100644 --- a/apps/browser/src/vault/popup/components/at-risk-passwords/at-risk-password-page.service.ts +++ b/apps/browser/src/vault/popup/components/at-risk-passwords/at-risk-password-page.service.ts @@ -2,18 +2,27 @@ import { inject, Injectable } from "@angular/core"; import { map, Observable } from "rxjs"; import { - BANNERS_DISMISSED_DISK, + AT_RISK_PASSWORDS_PAGE_DISK, StateProvider, UserKeyDefinition, } from "@bitwarden/common/platform/state"; import { UserId } from "@bitwarden/common/types/guid"; -export const AT_RISK_PASSWORD_AUTOFILL_CALLOUT_DISMISSED_KEY = new UserKeyDefinition( - BANNERS_DISMISSED_DISK, - "atRiskPasswordAutofillBannerDismissed", +const AUTOFILL_CALLOUT_DISMISSED_KEY = new UserKeyDefinition( + AT_RISK_PASSWORDS_PAGE_DISK, + "autofillCalloutDismissed", { deserializer: (bannersDismissed) => bannersDismissed, - clearOn: [], // Do not clear dismissed banners + clearOn: [], // Do not clear dismissed callout + }, +); + +const GETTING_STARTED_CAROUSEL_DISMISSED_KEY = new UserKeyDefinition( + AT_RISK_PASSWORDS_PAGE_DISK, + "gettingStartedCarouselDismissed", + { + deserializer: (bannersDismissed) => bannersDismissed, + clearOn: [], // Do not clear dismissed carousel }, ); @@ -23,13 +32,23 @@ export class AtRiskPasswordPageService { isCalloutDismissed(userId: UserId): Observable { return this.stateProvider - .getUser(userId, AT_RISK_PASSWORD_AUTOFILL_CALLOUT_DISMISSED_KEY) + .getUser(userId, AUTOFILL_CALLOUT_DISMISSED_KEY) .state$.pipe(map((dismissed) => !!dismissed)); } async dismissCallout(userId: UserId): Promise { + await this.stateProvider.getUser(userId, AUTOFILL_CALLOUT_DISMISSED_KEY).update(() => true); + } + + isGettingStartedDismissed(userId: UserId): Observable { + return this.stateProvider + .getUser(userId, GETTING_STARTED_CAROUSEL_DISMISSED_KEY) + .state$.pipe(map((dismissed) => !!dismissed)); + } + + async dismissGettingStarted(userId: UserId): Promise { await this.stateProvider - .getUser(userId, AT_RISK_PASSWORD_AUTOFILL_CALLOUT_DISMISSED_KEY) + .getUser(userId, GETTING_STARTED_CAROUSEL_DISMISSED_KEY) .update(() => true); } } diff --git a/apps/browser/src/vault/popup/components/at-risk-passwords/at-risk-passwords.component.html b/apps/browser/src/vault/popup/components/at-risk-passwords/at-risk-passwords.component.html index 044848eec8c..cd93401c861 100644 --- a/apps/browser/src/vault/popup/components/at-risk-passwords/at-risk-passwords.component.html +++ b/apps/browser/src/vault/popup/components/at-risk-passwords/at-risk-passwords.component.html @@ -6,7 +6,7 @@ {{ "turnOnAutofill" | i18n }} diff --git a/apps/browser/src/vault/popup/components/at-risk-passwords/at-risk-passwords.component.spec.ts b/apps/browser/src/vault/popup/components/at-risk-passwords/at-risk-passwords.component.spec.ts index 39b9650538a..3bf786ad5b7 100644 --- a/apps/browser/src/vault/popup/components/at-risk-passwords/at-risk-passwords.component.spec.ts +++ b/apps/browser/src/vault/popup/components/at-risk-passwords/at-risk-passwords.component.spec.ts @@ -16,7 +16,7 @@ import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.servic import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service"; import { CipherService } from "@bitwarden/common/vault/abstractions/cipher.service"; import { CipherView } from "@bitwarden/common/vault/models/view/cipher.view"; -import { ToastService } from "@bitwarden/components"; +import { DialogService, ToastService } from "@bitwarden/components"; import { ChangeLoginPasswordService, DefaultChangeLoginPasswordService, @@ -28,6 +28,7 @@ import { import { PopupHeaderComponent } from "../../../../platform/popup/layout/popup-header.component"; import { PopupPageComponent } from "../../../../platform/popup/layout/popup-page.component"; +import { AtRiskCarouselDialogResult } from "../at-risk-carousel-dialog/at-risk-carousel-dialog.component"; import { AtRiskPasswordPageService } from "./at-risk-password-page.service"; import { AtRiskPasswordsComponent } from "./at-risk-passwords.component"; @@ -73,6 +74,7 @@ describe("AtRiskPasswordsComponent", () => { const mockToastService = mock(); const mockAtRiskPasswordPageService = mock(); const mockChangeLoginPasswordService = mock(); + const mockDialogService = mock(); beforeEach(async () => { mockTasks$ = new BehaviorSubject([ @@ -109,6 +111,7 @@ describe("AtRiskPasswordsComponent", () => { calloutDismissed$ = new BehaviorSubject(false); setInlineMenuVisibility.mockClear(); mockToastService.showToast.mockClear(); + mockDialogService.open.mockClear(); mockAtRiskPasswordPageService.isCalloutDismissed.mockReturnValue(calloutDismissed$); await TestBed.configureTestingModule({ @@ -162,6 +165,7 @@ describe("AtRiskPasswordsComponent", () => { providers: [ AtRiskPasswordPageService, { provide: ChangeLoginPasswordService, useClass: DefaultChangeLoginPasswordService }, + DialogService, ], }, add: { @@ -169,6 +173,7 @@ describe("AtRiskPasswordsComponent", () => { providers: [ { provide: AtRiskPasswordPageService, useValue: mockAtRiskPasswordPageService }, { provide: ChangeLoginPasswordService, useValue: mockChangeLoginPasswordService }, + { provide: DialogService, useValue: mockDialogService }, ], }, }) @@ -193,8 +198,27 @@ describe("AtRiskPasswordsComponent", () => { describe("pageDescription$", () => { it("should use single org description when tasks belong to one org", async () => { - const description = await firstValueFrom(component["pageDescription$"]); - expect(description).toBe("atRiskPasswordsDescSingleOrg"); + // Single task + let description = await firstValueFrom(component["pageDescription$"]); + expect(description).toBe("atRiskPasswordDescSingleOrg"); + + // Multiple tasks + mockTasks$.next([ + { + id: "task", + organizationId: "org", + cipherId: "cipher", + type: SecurityTaskType.UpdateAtRiskCredential, + } as SecurityTask, + { + id: "task2", + organizationId: "org", + cipherId: "cipher2", + type: SecurityTaskType.UpdateAtRiskCredential, + } as SecurityTask, + ]); + description = await firstValueFrom(component["pageDescription$"]); + expect(description).toBe("atRiskPasswordsDescSingleOrgPlural"); }); it("should use multiple org description when tasks belong to multiple orgs", async () => { @@ -213,7 +237,7 @@ describe("AtRiskPasswordsComponent", () => { } as SecurityTask, ]); const description = await firstValueFrom(component["pageDescription$"]); - expect(description).toBe("atRiskPasswordsDescMultiOrg"); + expect(description).toBe("atRiskPasswordsDescMultiOrgPlural"); }); }); @@ -269,4 +293,31 @@ describe("AtRiskPasswordsComponent", () => { }); }); }); + + describe("getting started carousel", () => { + it("should open the carousel automatically if the user has not dismissed it", async () => { + mockAtRiskPasswordPageService.isGettingStartedDismissed.mockReturnValue(of(false)); + mockDialogService.open.mockReturnValue({ closed: of(undefined) } as any); + await component.ngOnInit(); + expect(mockDialogService.open).toHaveBeenCalled(); + }); + + it("should not open the carousel automatically if the user has already dismissed it", async () => { + mockDialogService.open.mockClear(); // Need to clear the mock since the component is already initialized once + mockAtRiskPasswordPageService.isGettingStartedDismissed.mockReturnValue(of(true)); + mockDialogService.open.mockReturnValue({ closed: of(undefined) } as any); + await component.ngOnInit(); + expect(mockDialogService.open).not.toHaveBeenCalled(); + }); + + it("should mark the carousel as dismissed when the user dismisses it", async () => { + mockAtRiskPasswordPageService.isGettingStartedDismissed.mockReturnValue(of(false)); + mockDialogService.open.mockReturnValue({ + closed: of(AtRiskCarouselDialogResult.Dismissed), + } as any); + await component.ngOnInit(); + expect(mockDialogService.open).toHaveBeenCalled(); + expect(mockAtRiskPasswordPageService.dismissGettingStarted).toHaveBeenCalled(); + }); + }); }); diff --git a/apps/browser/src/vault/popup/components/at-risk-passwords/at-risk-passwords.component.ts b/apps/browser/src/vault/popup/components/at-risk-passwords/at-risk-passwords.component.ts index 4753bc77ecb..dd3d53fed7d 100644 --- a/apps/browser/src/vault/popup/components/at-risk-passwords/at-risk-passwords.component.ts +++ b/apps/browser/src/vault/popup/components/at-risk-passwords/at-risk-passwords.component.ts @@ -1,5 +1,5 @@ import { CommonModule } from "@angular/common"; -import { Component, inject, signal } from "@angular/core"; +import { Component, inject, OnInit, signal } from "@angular/core"; import { Router } from "@angular/router"; import { combineLatest, firstValueFrom, map, of, shareReplay, startWith, switchMap } from "rxjs"; @@ -19,6 +19,8 @@ import { BadgeModule, ButtonModule, CalloutModule, + DialogModule, + DialogService, ItemModule, ToastService, TypographyModule, @@ -30,11 +32,16 @@ import { PasswordRepromptService, SecurityTaskType, TaskService, + VaultCarouselModule, } from "@bitwarden/vault"; 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"; +import { + AtRiskCarouselDialogComponent, + AtRiskCarouselDialogResult, +} from "../at-risk-carousel-dialog/at-risk-carousel-dialog.component"; import { AtRiskPasswordPageService } from "./at-risk-password-page.service"; @@ -50,6 +57,8 @@ import { AtRiskPasswordPageService } from "./at-risk-password-page.service"; CalloutModule, ButtonModule, BadgeModule, + DialogModule, + VaultCarouselModule, ], providers: [ AtRiskPasswordPageService, @@ -59,7 +68,7 @@ import { AtRiskPasswordPageService } from "./at-risk-password-page.service"; standalone: true, templateUrl: "./at-risk-passwords.component.html", }) -export class AtRiskPasswordsComponent { +export class AtRiskPasswordsComponent implements OnInit { private taskService = inject(TaskService); private organizationService = inject(OrganizationService); private cipherService = inject(CipherService); @@ -72,6 +81,7 @@ export class AtRiskPasswordsComponent { private atRiskPasswordPageService = inject(AtRiskPasswordPageService); private changeLoginPasswordService = inject(ChangeLoginPasswordService); private platformUtilsService = inject(PlatformUtilsService); + private dialogService = inject(DialogService); /** * The cipher that is currently being launched. Used to show a loading spinner on the badge button. @@ -105,14 +115,23 @@ export class AtRiskPasswordsComponent { startWith(true), ); - protected calloutDismissed$ = this.activeUserData$.pipe( + private calloutDismissed$ = this.activeUserData$.pipe( switchMap(({ userId }) => this.atRiskPasswordPageService.isCalloutDismissed(userId)), ); - - protected inlineAutofillSettingEnabled$ = this.autofillSettingsService.inlineMenuVisibility$.pipe( + private inlineAutofillSettingEnabled$ = this.autofillSettingsService.inlineMenuVisibility$.pipe( map((setting) => setting !== AutofillOverlayVisibility.Off), ); + protected showAutofillCallout$ = combineLatest([ + this.calloutDismissed$, + this.inlineAutofillSettingEnabled$, + ]).pipe( + map(([calloutDismissed, inlineAutofillSettingEnabled]) => { + return !calloutDismissed && !inlineAutofillSettingEnabled; + }), + startWith(false), + ); + protected atRiskItems$ = this.activeUserData$.pipe( map(({ tasks, ciphers }) => tasks @@ -133,14 +152,37 @@ export class AtRiskPasswordsComponent { const [orgId] = orgIds; return this.organizationService.organizations$(userId).pipe( getOrganizationById(orgId), - map((org) => this.i18nService.t("atRiskPasswordsDescSingleOrg", org?.name, tasks.length)), + map((org) => + this.i18nService.t( + tasks.length === 1 + ? "atRiskPasswordDescSingleOrg" + : "atRiskPasswordsDescSingleOrgPlural", + org?.name, + tasks.length, + ), + ), ); } - return of(this.i18nService.t("atRiskPasswordsDescMultiOrg", tasks.length)); + return of(this.i18nService.t("atRiskPasswordsDescMultiOrgPlural", tasks.length)); }), ); + async ngOnInit() { + const { userId } = await firstValueFrom(this.activeUserData$); + const gettingStartedDismissed = await firstValueFrom( + this.atRiskPasswordPageService.isGettingStartedDismissed(userId), + ); + if (!gettingStartedDismissed) { + const ref = AtRiskCarouselDialogComponent.open(this.dialogService); + + const result = await firstValueFrom(ref.closed); + if (result === AtRiskCarouselDialogResult.Dismissed) { + await this.atRiskPasswordPageService.dismissGettingStarted(userId); + } + } + } + async viewCipher(cipher: CipherView) { const repromptPassed = await this.passwordRepromptService.passwordRepromptCheck(cipher); if (!repromptPassed) { diff --git a/apps/browser/src/vault/popup/components/vault-v2/item-copy-action/item-copy-actions.component.html b/apps/browser/src/vault/popup/components/vault-v2/item-copy-action/item-copy-actions.component.html index fbfebe8efff..bb3a7b12096 100644 --- a/apps/browser/src/vault/popup/components/vault-v2/item-copy-action/item-copy-actions.component.html +++ b/apps/browser/src/vault/popup/components/vault-v2/item-copy-action/item-copy-actions.component.html @@ -36,32 +36,46 @@ - - + - - + bitIconButton="bwi-clone" + size="small" + [appA11yTitle]=" + hasLoginValues ? ('copyInfoTitle' | i18n: cipher.name) : ('noValuesToCopy' | i18n) + " + [disabled]="!hasLoginValues" + [bitMenuTriggerFor]="loginOptions" + > + + + + + +
@@ -92,52 +106,78 @@ - - - - + + + + + + + - - - - - - + + + + + + + + + diff --git a/apps/browser/src/vault/popup/components/vault-v2/item-copy-action/item-copy-actions.component.ts b/apps/browser/src/vault/popup/components/vault-v2/item-copy-action/item-copy-actions.component.ts index 53439dc4abd..a51e5f5406a 100644 --- a/apps/browser/src/vault/popup/components/vault-v2/item-copy-action/item-copy-actions.component.ts +++ b/apps/browser/src/vault/popup/components/vault-v2/item-copy-action/item-copy-actions.component.ts @@ -4,6 +4,7 @@ import { CommonModule } from "@angular/common"; import { Component, Input, inject } from "@angular/core"; import { JslibModule } from "@bitwarden/angular/jslib.module"; +import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; import { CipherType } from "@bitwarden/common/vault/enums"; import { CipherView } from "@bitwarden/common/vault/models/view/cipher.view"; import { IconButtonModule, ItemModule, MenuModule } from "@bitwarden/components"; @@ -11,6 +12,11 @@ import { CopyCipherFieldDirective } from "@bitwarden/vault"; import { VaultPopupCopyButtonsService } from "../../../services/vault-popup-copy-buttons.service"; +type CipherItem = { + value: string; + key: string; +}; + @Component({ standalone: true, selector: "app-item-copy-actions", @@ -37,6 +43,50 @@ export class ItemCopyActionsComponent { ); } + get singleCopiableLogin() { + const loginItems: CipherItem[] = [ + { value: this.cipher.login.username, key: "username" }, + { value: this.cipher.login.password, key: "password" }, + { value: this.cipher.login.totp, key: "totp" }, + ]; + // If both the password and username are visible but the password is hidden, return the username + if (!this.cipher.viewPassword && this.cipher.login.username && this.cipher.login.password) { + return { value: this.cipher.login.username, key: this.i18nService.t("username") }; + } + return this.findSingleCopiableItem(loginItems); + } + + get singleCopiableCard() { + const cardItems: CipherItem[] = [ + { value: this.cipher.card.code, key: "code" }, + { value: this.cipher.card.number, key: "number" }, + ]; + return this.findSingleCopiableItem(cardItems); + } + + get singleCopiableIdentity() { + const identityItems: CipherItem[] = [ + { value: this.cipher.identity.fullAddressForCopy, key: "address" }, + { value: this.cipher.identity.email, key: "email" }, + { value: this.cipher.identity.username, key: "username" }, + { value: this.cipher.identity.phone, key: "phone" }, + ]; + return this.findSingleCopiableItem(identityItems); + } + + /* + * Given a list of CipherItems, if there is only one item with a value, + * return it with the translated key. Otherwise return null + */ + findSingleCopiableItem(items: { value: string; key: string }[]): CipherItem | null { + const singleItemWithValue = items.find( + (key) => key.value && items.every((f) => f === key || !f.value), + ); + return singleItemWithValue + ? { value: singleItemWithValue.value, key: this.i18nService.t(singleItemWithValue.key) } + : null; + } + get hasCardValues() { return !!this.cipher.card.code || !!this.cipher.card.number; } @@ -62,5 +112,5 @@ export class ItemCopyActionsComponent { ); } - constructor() {} + constructor(private i18nService: I18nService) {} } diff --git a/apps/browser/src/vault/popup/components/vault-v2/new-settings-callout/new-settings-callout.component.html b/apps/browser/src/vault/popup/components/vault-v2/new-settings-callout/new-settings-callout.component.html new file mode 100644 index 00000000000..a6abe8ed3ac --- /dev/null +++ b/apps/browser/src/vault/popup/components/vault-v2/new-settings-callout/new-settings-callout.component.html @@ -0,0 +1,28 @@ + + + +
+ {{ "newCustomizationOptionsCalloutContent" | i18n }} + + {{ "newCustomizationOptionsCalloutLink" | i18n }} + +
+
+
diff --git a/apps/browser/src/vault/popup/components/vault-v2/new-settings-callout/new-settings-callout.component.ts b/apps/browser/src/vault/popup/components/vault-v2/new-settings-callout/new-settings-callout.component.ts new file mode 100644 index 00000000000..713dc21c424 --- /dev/null +++ b/apps/browser/src/vault/popup/components/vault-v2/new-settings-callout/new-settings-callout.component.ts @@ -0,0 +1,81 @@ +import { CommonModule } from "@angular/common"; +import { Component, OnDestroy, OnInit } from "@angular/core"; +import { Router } from "@angular/router"; +import { firstValueFrom } from "rxjs"; + +import { JslibModule } from "@bitwarden/angular/jslib.module"; +import { VaultProfileService } from "@bitwarden/angular/vault/services/vault-profile.service"; +import { AccountService } from "@bitwarden/common/auth/abstractions/account.service"; +import { getUserId } from "@bitwarden/common/auth/services/account.service"; +import { LogService } from "@bitwarden/common/platform/abstractions/log.service"; +import { UserId } from "@bitwarden/common/types/guid"; +import { VaultSettingsService } from "@bitwarden/common/vault/abstractions/vault-settings/vault-settings.service"; +import { ButtonModule, PopoverModule } from "@bitwarden/components"; + +import { VaultPopupCopyButtonsService } from "../../../services/vault-popup-copy-buttons.service"; +import { VaultPageService } from "../vault-page.service"; + +@Component({ + selector: "new-settings-callout", + templateUrl: "new-settings-callout.component.html", + standalone: true, + imports: [PopoverModule, JslibModule, CommonModule, ButtonModule], + providers: [VaultPageService], +}) +export class NewSettingsCalloutComponent implements OnInit, OnDestroy { + protected showNewCustomizationSettingsCallout = false; + protected activeUserId: UserId | null = null; + + constructor( + private accountService: AccountService, + private vaultProfileService: VaultProfileService, + private vaultPageService: VaultPageService, + private router: Router, + private logService: LogService, + private copyButtonService: VaultPopupCopyButtonsService, + private vaultSettingsService: VaultSettingsService, + ) {} + + async ngOnInit() { + this.activeUserId = await firstValueFrom(this.accountService.activeAccount$.pipe(getUserId)); + + const showQuickCopyActions = await firstValueFrom(this.copyButtonService.showQuickCopyActions$); + const clickItemsToAutofillVaultView = await firstValueFrom( + this.vaultSettingsService.clickItemsToAutofillVaultView$, + ); + + let profileCreatedDate: Date; + + try { + profileCreatedDate = await this.vaultProfileService.getProfileCreationDate(this.activeUserId); + } catch (e) { + this.logService.error("Error getting profile creation date", e); + // Default to before the cutoff date to ensure the callout is shown + profileCreatedDate = new Date("2024-12-24"); + } + + const hasCalloutBeenDismissed = await firstValueFrom( + this.vaultPageService.isCalloutDismissed(this.activeUserId), + ); + + this.showNewCustomizationSettingsCallout = + !showQuickCopyActions && + !clickItemsToAutofillVaultView && + !hasCalloutBeenDismissed && + profileCreatedDate < new Date("2024-12-25"); + } + + async goToAppearance() { + await this.router.navigate(["/appearance"]); + } + + async dismissCallout() { + if (this.activeUserId) { + await this.vaultPageService.dismissCallout(this.activeUserId); + } + } + + async ngOnDestroy() { + await this.dismissCallout(); + } +} diff --git a/apps/browser/src/vault/popup/components/vault-v2/vault-generator-dialog/vault-generator-dialog.component.html b/apps/browser/src/vault/popup/components/vault-v2/vault-generator-dialog/vault-generator-dialog.component.html index 9e29f1f1294..ccff7313258 100644 --- a/apps/browser/src/vault/popup/components/vault-v2/vault-generator-dialog/vault-generator-dialog.component.html +++ b/apps/browser/src/vault/popup/components/vault-v2/vault-generator-dialog/vault-generator-dialog.component.html @@ -3,13 +3,14 @@ slot="header" [backAction]="close" showBackButton - [pageTitle]="title" + [pageTitle]="titleKey | i18n" > @@ -19,6 +20,7 @@ buttonType="primary" (click)="selectValue()" data-testid="select-button" + [disabled]="!(selectButtonText && generatedValue)" > {{ selectButtonText }} diff --git a/apps/browser/src/vault/popup/components/vault-v2/vault-generator-dialog/vault-generator-dialog.component.spec.ts b/apps/browser/src/vault/popup/components/vault-v2/vault-generator-dialog/vault-generator-dialog.component.spec.ts index 3255593a424..9c94f8fc63f 100644 --- a/apps/browser/src/vault/popup/components/vault-v2/vault-generator-dialog/vault-generator-dialog.component.spec.ts +++ b/apps/browser/src/vault/popup/components/vault-v2/vault-generator-dialog/vault-generator-dialog.component.spec.ts @@ -1,15 +1,18 @@ import { DIALOG_DATA, DialogRef } from "@angular/cdk/dialog"; import { Component, EventEmitter, Input, Output } from "@angular/core"; import { ComponentFixture, TestBed } from "@angular/core/testing"; +import { By } from "@angular/platform-browser"; import { NoopAnimationsModule } from "@angular/platform-browser/animations"; import { mock, MockProxy } from "jest-mock-extended"; import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; +import { AlgorithmInfo } from "@bitwarden/generator-core"; import { CipherFormGeneratorComponent } from "@bitwarden/vault"; import { PopupRouterCacheService } from "../../../../../platform/popup/view-cache/popup-router-cache.service"; import { + GeneratorDialogAction, GeneratorDialogParams, GeneratorDialogResult, VaultGeneratorDialogComponent, @@ -21,8 +24,9 @@ import { standalone: true, }) class MockCipherFormGenerator { - @Input() type: "password" | "username"; - @Input() uri: string; + @Input() type: "password" | "username" = "password"; + @Output() algorithmSelected: EventEmitter = new EventEmitter(); + @Input() uri: string = ""; @Output() valueGenerated = new EventEmitter(); } @@ -53,34 +57,87 @@ describe("VaultGeneratorDialogComponent", () => { fixture = TestBed.createComponent(VaultGeneratorDialogComponent); component = fixture.componentInstance; - }); - - it("should create", () => { fixture.detectChanges(); - expect(component).toBeTruthy(); }); - it("should use the appropriate text based on generator type", () => { - expect(component["title"]).toBe("passwordGenerator"); - expect(component["selectButtonText"]).toBe("useThisPassword"); - - dialogData.type = "username"; - - fixture = TestBed.createComponent(VaultGeneratorDialogComponent); - component = fixture.componentInstance; - - expect(component["title"]).toBe("usernameGenerator"); - expect(component["selectButtonText"]).toBe("useThisUsername"); + it("should show password generator title", () => { + const header = fixture.debugElement.query(By.css("popup-header")).componentInstance; + expect(header.pageTitle).toBe("passwordGenerator"); }); - it("should close the dialog with the generated value when the user selects it", () => { - component["generatedValue"] = "generated-value"; + it("should pass type to cipher form generator", () => { + const generator = fixture.debugElement.query( + By.css("vault-cipher-form-generator"), + ).componentInstance; + expect(generator.type).toBe("password"); + }); - fixture.nativeElement.querySelector("button[data-testid='select-button']").click(); + it("should enable select button when value is generated", () => { + component.onAlgorithmSelected({ useGeneratedValue: "Test" } as any); + component.onValueGenerated("test-password"); + fixture.detectChanges(); + + const button = fixture.debugElement.query( + By.css("[data-testid='select-button']"), + ).nativeElement; + expect(button.disabled).toBe(false); + }); + + it("should disable the button if no value has been generated", () => { + const generator = fixture.debugElement.query( + By.css("vault-cipher-form-generator"), + ).componentInstance; + + generator.algorithmSelected.emit({ useGeneratedValue: "Use Password" } as any); + fixture.detectChanges(); + + const button = fixture.debugElement.query( + By.css("[data-testid='select-button']"), + ).nativeElement; + expect(button.disabled).toBe(true); + }); + + it("should disable the button if no algorithm is selected", () => { + const generator = fixture.debugElement.query( + By.css("vault-cipher-form-generator"), + ).componentInstance; + + generator.valueGenerated.emit("test-password"); + fixture.detectChanges(); + + const button = fixture.debugElement.query( + By.css("[data-testid='select-button']"), + ).nativeElement; + expect(button.disabled).toBe(true); + }); + + it("should update button text when algorithm is selected", () => { + component.onAlgorithmSelected({ useGeneratedValue: "Use This Password" } as any); + fixture.detectChanges(); + + const button = fixture.debugElement.query( + By.css("[data-testid='select-button']"), + ).nativeElement; + expect(button.textContent.trim()).toBe("Use This Password"); + }); + + it("should close with generated value when selected", () => { + component.onAlgorithmSelected({ useGeneratedValue: "Test" } as any); + component.onValueGenerated("test-password"); + fixture.detectChanges(); + + fixture.debugElement.query(By.css("[data-testid='select-button']")).nativeElement.click(); expect(mockDialogRef.close).toHaveBeenCalledWith({ - action: "selected", - generatedValue: "generated-value", + action: GeneratorDialogAction.Selected, + generatedValue: "test-password", + }); + }); + + it("should close with canceled action when dismissed", () => { + fixture.debugElement.query(By.css("popup-header")).componentInstance.backAction(); + expect(mockDialogRef.close).toHaveBeenCalledWith({ + action: GeneratorDialogAction.Canceled, }); }); }); diff --git a/apps/browser/src/vault/popup/components/vault-v2/vault-generator-dialog/vault-generator-dialog.component.ts b/apps/browser/src/vault/popup/components/vault-v2/vault-generator-dialog/vault-generator-dialog.component.ts index 9e6750004d8..0eeb2e95a29 100644 --- a/apps/browser/src/vault/popup/components/vault-v2/vault-generator-dialog/vault-generator-dialog.component.ts +++ b/apps/browser/src/vault/popup/components/vault-v2/vault-generator-dialog/vault-generator-dialog.component.ts @@ -7,6 +7,8 @@ import { Component, Inject } from "@angular/core"; import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; import { ButtonModule, DialogService } from "@bitwarden/components"; +import { AlgorithmInfo } from "@bitwarden/generator-core"; +import { I18nPipe } from "@bitwarden/ui-common"; import { CipherFormGeneratorComponent } from "@bitwarden/vault"; import { PopupFooterComponent } from "../../../../../platform/popup/layout/popup-footer.component"; @@ -39,13 +41,12 @@ export enum GeneratorDialogAction { CommonModule, CipherFormGeneratorComponent, ButtonModule, + I18nPipe, ], }) export class VaultGeneratorDialogComponent { - protected title = this.i18nService.t(this.isPassword ? "passwordGenerator" : "usernameGenerator"); - protected selectButtonText = this.i18nService.t( - this.isPassword ? "useThisPassword" : "useThisUsername", - ); + protected selectButtonText: string | undefined; + protected titleKey = this.isPassword ? "passwordGenerator" : "usernameGenerator"; /** * Whether the dialog is generating a password/passphrase. If false, it is generating a username. @@ -92,6 +93,16 @@ export class VaultGeneratorDialogComponent { this.generatedValue = value; } + onAlgorithmSelected = (selected?: AlgorithmInfo) => { + if (selected) { + this.selectButtonText = selected.useGeneratedValue; + } else { + // default to email + this.selectButtonText = this.i18nService.t("useThisEmail"); + } + this.generatedValue = undefined; + }; + /** * Opens the vault generator dialog in a full screen dialog. */ diff --git a/apps/browser/src/vault/popup/components/vault-v2/vault-header/vault-header-v2.component.spec.ts b/apps/browser/src/vault/popup/components/vault-v2/vault-header/vault-header-v2.component.spec.ts index fb5ac4b3391..cda055176e8 100644 --- a/apps/browser/src/vault/popup/components/vault-v2/vault-header/vault-header-v2.component.spec.ts +++ b/apps/browser/src/vault/popup/components/vault-v2/vault-header/vault-header-v2.component.spec.ts @@ -77,7 +77,7 @@ describe("VaultHeaderV2Component", () => { { provide: LogService, useValue: mock() }, { provide: VaultPopupItemsService, - useValue: mock({ latestSearchText$: new BehaviorSubject("") }), + useValue: mock({ searchText$: new BehaviorSubject("") }), }, { provide: SyncService, diff --git a/apps/browser/src/vault/popup/components/vault-v2/vault-page.service.ts b/apps/browser/src/vault/popup/components/vault-v2/vault-page.service.ts new file mode 100644 index 00000000000..a7c52ed4c51 --- /dev/null +++ b/apps/browser/src/vault/popup/components/vault-v2/vault-page.service.ts @@ -0,0 +1,35 @@ +import { inject, Injectable } from "@angular/core"; +import { map, Observable } from "rxjs"; + +import { + BANNERS_DISMISSED_DISK, + StateProvider, + UserKeyDefinition, +} from "@bitwarden/common/platform/state"; +import { UserId } from "@bitwarden/common/types/guid"; + +export const NEW_CUSTOMIZATION_OPTIONS_CALLOUT_DISMISSED_KEY = new UserKeyDefinition( + BANNERS_DISMISSED_DISK, + "newCustomizationOptionsCalloutDismissed", + { + deserializer: (calloutDismissed) => calloutDismissed, + clearOn: [], // Do not clear dismissed callouts + }, +); + +@Injectable() +export class VaultPageService { + private stateProvider = inject(StateProvider); + + isCalloutDismissed(userId: UserId): Observable { + return this.stateProvider + .getUser(userId, NEW_CUSTOMIZATION_OPTIONS_CALLOUT_DISMISSED_KEY) + .state$.pipe(map((dismissed) => !!dismissed)); + } + + async dismissCallout(userId: UserId): Promise { + await this.stateProvider + .getUser(userId, NEW_CUSTOMIZATION_OPTIONS_CALLOUT_DISMISSED_KEY) + .update(() => true); + } +} diff --git a/apps/browser/src/vault/popup/components/vault-v2/vault-search/vault-v2-search.component.ts b/apps/browser/src/vault/popup/components/vault-v2/vault-search/vault-v2-search.component.ts index d9b310da231..32f5611f436 100644 --- a/apps/browser/src/vault/popup/components/vault-v2/vault-search/vault-v2-search.component.ts +++ b/apps/browser/src/vault/popup/components/vault-v2/vault-search/vault-v2-search.component.ts @@ -1,5 +1,3 @@ -// FIXME: Update this file to be type safe and remove this and next line -// @ts-strict-ignore import { CommonModule } from "@angular/common"; import { Component } from "@angular/core"; import { takeUntilDestroyed } from "@angular/core/rxjs-interop"; @@ -20,7 +18,7 @@ const SearchTextDebounceInterval = 200; templateUrl: "vault-v2-search.component.html", }) export class VaultV2SearchComponent { - searchText: string; + searchText: string = ""; private searchText$ = new Subject(); @@ -30,11 +28,11 @@ export class VaultV2SearchComponent { } onSearchTextChanged() { - this.searchText$.next(this.searchText); + this.vaultPopupItemsService.applyFilter(this.searchText); } subscribeToLatestSearchText(): Subscription { - return this.vaultPopupItemsService.latestSearchText$ + return this.vaultPopupItemsService.searchText$ .pipe( takeUntilDestroyed(), filter((data) => !!data), diff --git a/apps/browser/src/vault/popup/components/vault-v2/vault-v2.component.html b/apps/browser/src/vault/popup/components/vault-v2/vault-v2.component.html index 8cb538a429a..bb7cd8e52d0 100644 --- a/apps/browser/src/vault/popup/components/vault-v2/vault-v2.component.html +++ b/apps/browser/src/vault/popup/components/vault-v2/vault-v2.component.html @@ -85,4 +85,5 @@ > + diff --git a/apps/browser/src/vault/popup/components/vault-v2/vault-v2.component.ts b/apps/browser/src/vault/popup/components/vault-v2/vault-v2.component.ts index 73b691bc4ac..1ae1b205af3 100644 --- a/apps/browser/src/vault/popup/components/vault-v2/vault-v2.component.ts +++ b/apps/browser/src/vault/popup/components/vault-v2/vault-v2.component.ts @@ -15,6 +15,7 @@ import { } from "rxjs"; import { JslibModule } from "@bitwarden/angular/jslib.module"; +import { VaultProfileService } from "@bitwarden/angular/vault/services/vault-profile.service"; import { AccountService } from "@bitwarden/common/auth/abstractions/account.service"; import { getUserId } from "@bitwarden/common/auth/services/account.service"; import { FeatureFlag } from "@bitwarden/common/enums/feature-flag.enum"; @@ -44,7 +45,9 @@ import { NewItemDropdownV2Component, NewItemInitialValues, } from "./new-item-dropdown/new-item-dropdown-v2.component"; +import { NewSettingsCalloutComponent } from "./new-settings-callout/new-settings-callout.component"; import { VaultHeaderV2Component } from "./vault-header/vault-header-v2.component"; +import { VaultPageService } from "./vault-page.service"; import { AutofillVaultListItemsComponent, VaultListItemsContainerComponent } from "."; @@ -77,7 +80,9 @@ enum VaultState { DecryptionFailureDialogComponent, BannerComponent, AtRiskPasswordCalloutComponent, + NewSettingsCalloutComponent, ], + providers: [VaultPageService], }) export class VaultV2Component implements OnInit, AfterViewInit, OnDestroy { @ViewChild(CdkVirtualScrollableElement) virtualScrollElement?: CdkVirtualScrollableElement; @@ -115,6 +120,7 @@ export class VaultV2Component implements OnInit, AfterViewInit, OnDestroy { protected noResultsIcon = Icons.NoResults; protected VaultStateEnum = VaultState; + protected showNewCustomizationSettingsCallout = false; constructor( private vaultPopupItemsService: VaultPopupItemsService, @@ -124,6 +130,8 @@ export class VaultV2Component implements OnInit, AfterViewInit, OnDestroy { private destroyRef: DestroyRef, private cipherService: CipherService, private dialogService: DialogService, + private vaultProfileService: VaultProfileService, + private vaultPageService: VaultPageService, ) { combineLatest([ this.vaultPopupItemsService.emptyVault$, @@ -178,7 +186,7 @@ export class VaultV2Component implements OnInit, AfterViewInit, OnDestroy { }); } - ngOnDestroy(): void { + ngOnDestroy() { this.vaultScrollPositionService.stop(); } diff --git a/apps/browser/src/vault/popup/components/vault-v2/view-v2/view-v2.component.ts b/apps/browser/src/vault/popup/components/vault-v2/view-v2/view-v2.component.ts index 209691869f0..b9eae380ca0 100644 --- a/apps/browser/src/vault/popup/components/vault-v2/view-v2/view-v2.component.ts +++ b/apps/browser/src/vault/popup/components/vault-v2/view-v2/view-v2.component.ts @@ -37,8 +37,16 @@ import { IconButtonModule, SearchModule, ToastService, + CalloutModule, } from "@bitwarden/components"; -import { CipherViewComponent, CopyCipherFieldService } from "@bitwarden/vault"; +import { + ChangeLoginPasswordService, + CipherViewComponent, + CopyCipherFieldService, + DefaultChangeLoginPasswordService, + DefaultTaskService, + TaskService, +} from "@bitwarden/vault"; import { BrowserApi } from "../../../../../platform/browser/browser-api"; import BrowserPopupUtils from "../../../../../platform/popup/browser-popup-utils"; @@ -82,10 +90,13 @@ type LoadAction = CipherViewComponent, AsyncActionsModule, PopOutComponent, + CalloutModule, ], providers: [ { provide: ViewPasswordHistoryService, useClass: BrowserViewPasswordHistoryService }, { provide: PremiumUpgradePromptService, useClass: BrowserPremiumUpgradePromptService }, + { provide: TaskService, useClass: DefaultTaskService }, + { provide: ChangeLoginPasswordService, useClass: DefaultChangeLoginPasswordService }, ], }) export class ViewV2Component { diff --git a/apps/browser/src/vault/popup/services/vault-popup-items.service.spec.ts b/apps/browser/src/vault/popup/services/vault-popup-items.service.spec.ts index 6d7b7b57d23..52cb393c684 100644 --- a/apps/browser/src/vault/popup/services/vault-popup-items.service.spec.ts +++ b/apps/browser/src/vault/popup/services/vault-popup-items.service.spec.ts @@ -1,4 +1,5 @@ -import { TestBed } from "@angular/core/testing"; +import { WritableSignal, signal } from "@angular/core"; +import { TestBed, discardPeriodicTasks, fakeAsync, tick } from "@angular/core/testing"; import { mock } from "jest-mock-extended"; import { BehaviorSubject, firstValueFrom, timeout } from "rxjs"; @@ -21,6 +22,7 @@ import { CipherView } from "@bitwarden/common/vault/models/view/cipher.view"; import { InlineMenuFieldQualificationService } from "../../../autofill/services/inline-menu-field-qualification.service"; import { BrowserApi } from "../../../platform/browser/browser-api"; +import { PopupViewCacheService } from "../../../platform/popup/view-cache/popup-view-cache.service"; import { VaultPopupAutofillService } from "./vault-popup-autofill.service"; import { VaultPopupItemsService } from "./vault-popup-items.service"; @@ -35,6 +37,10 @@ describe("VaultPopupItemsService", () => { let mockOrg: Organization; let mockCollections: CollectionView[]; let activeUserLastSync$: BehaviorSubject; + let viewCacheService: { + signal: jest.Mock; + mockSignal: WritableSignal; + }; let ciphersSubject: BehaviorSubject>; let localDataSubject: BehaviorSubject>; @@ -81,7 +87,7 @@ describe("VaultPopupItemsService", () => { failedToDecryptCiphersSubject.asObservable(), ); - searchService.searchCiphers.mockImplementation(async (_, __, ciphers) => ciphers); + searchService.searchCiphers.mockImplementation(async (userId, _, __, ciphers) => ciphers); cipherServiceMock.filterCiphersForUrl.mockImplementation(async (ciphers) => ciphers.filter((c) => ["0", "1"].includes(c.id)), ); @@ -125,6 +131,12 @@ describe("VaultPopupItemsService", () => { activeUserLastSync$ = new BehaviorSubject(new Date()); syncServiceMock.activeUserLastSync$.mockReturnValue(activeUserLastSync$); + const testSearchSignal = createMockSignal(""); + viewCacheService = { + mockSignal: testSearchSignal, + signal: jest.fn((options) => testSearchSignal), + }; + testBed = TestBed.configureTestingModule({ providers: [ { provide: CipherService, useValue: cipherServiceMock }, @@ -141,6 +153,7 @@ describe("VaultPopupItemsService", () => { provide: InlineMenuFieldQualificationService, useValue: inlineMenuFieldQualificationServiceMock, }, + { provide: PopupViewCacheService, useValue: viewCacheService }, ], }); @@ -263,7 +276,7 @@ describe("VaultPopupItemsService", () => { it("should filter autoFillCiphers$ down to search term", (done) => { const searchText = "Login"; - searchService.searchCiphers.mockImplementation(async (q, _, ciphers) => { + searchService.searchCiphers.mockImplementation(async (userId, q, _, ciphers) => { return ciphers.filter((cipher) => { return cipher.name.includes(searchText); }); @@ -455,15 +468,37 @@ describe("VaultPopupItemsService", () => { describe("applyFilter", () => { it("should call search Service with the new search term", (done) => { const searchText = "Hello"; - service.applyFilter(searchText); const searchServiceSpy = jest.spyOn(searchService, "searchCiphers"); + service.applyFilter(searchText); service.favoriteCiphers$.subscribe(() => { - expect(searchServiceSpy).toHaveBeenCalledWith(searchText, null, expect.anything()); + expect(searchServiceSpy).toHaveBeenCalledWith( + "UserId", + searchText, + undefined, + expect.anything(), + ); done(); }); }); }); + + it("should update searchText$ when applyFilter is called", fakeAsync(() => { + let latestValue: string | null; + service.searchText$.subscribe((val) => { + latestValue = val; + }); + tick(); + expect(latestValue!).toEqual(""); + + service.applyFilter("test search"); + tick(); + expect(latestValue!).toEqual("test search"); + + expect(viewCacheService.mockSignal()).toEqual("test search"); + + discardPeriodicTasks(); + })); }); // A function to generate a list of ciphers of different types @@ -518,3 +553,9 @@ function cipherFactory(count: number): Record { } return Object.fromEntries(ciphers.map((c) => [c.id, c])); } + +function createMockSignal(initialValue: T): WritableSignal { + const s = signal(initialValue); + s.set = (value: T) => s.update(() => value); + return s; +} diff --git a/apps/browser/src/vault/popup/services/vault-popup-items.service.ts b/apps/browser/src/vault/popup/services/vault-popup-items.service.ts index c71c2ca32c3..dac6a141d41 100644 --- a/apps/browser/src/vault/popup/services/vault-popup-items.service.ts +++ b/apps/browser/src/vault/popup/services/vault-popup-items.service.ts @@ -1,8 +1,6 @@ -// FIXME: Update this file to be type safe and remove this and next line -// @ts-strict-ignore -import { Injectable, NgZone } from "@angular/core"; +import { inject, Injectable, NgZone } from "@angular/core"; +import { toObservable } from "@angular/core/rxjs-interop"; import { - BehaviorSubject, combineLatest, concatMap, distinctUntilChanged, @@ -25,15 +23,17 @@ import { CollectionService } from "@bitwarden/admin-console/common"; import { SearchService } from "@bitwarden/common/abstractions/search.service"; import { OrganizationService } from "@bitwarden/common/admin-console/abstractions/organization/organization.service.abstraction"; import { AccountService } from "@bitwarden/common/auth/abstractions/account.service"; +import { getUserId } from "@bitwarden/common/auth/services/account.service"; import { Utils } from "@bitwarden/common/platform/misc/utils"; import { SyncService } from "@bitwarden/common/platform/sync"; -import { CollectionId, OrganizationId } from "@bitwarden/common/types/guid"; +import { CollectionId, OrganizationId, UserId } from "@bitwarden/common/types/guid"; import { CipherService } from "@bitwarden/common/vault/abstractions/cipher.service"; import { VaultSettingsService } from "@bitwarden/common/vault/abstractions/vault-settings/vault-settings.service"; import { CipherType } from "@bitwarden/common/vault/enums"; import { CipherView } from "@bitwarden/common/vault/models/view/cipher.view"; import { runInsideAngular } from "../../../platform/browser/run-inside-angular.operator"; +import { PopupViewCacheService } from "../../../platform/popup/view-cache/popup-view-cache.service"; import { waitUntil } from "../../util"; import { PopupCipherView } from "../views/popup-cipher.view"; @@ -47,7 +47,12 @@ import { MY_VAULT_ID, VaultPopupListFiltersService } from "./vault-popup-list-fi providedIn: "root", }) export class VaultPopupItemsService { - private _searchText$ = new BehaviorSubject(""); + private cachedSearchText = inject(PopupViewCacheService).signal({ + key: "vault-search-text", + initialValue: "", + }); + + readonly searchText$ = toObservable(this.cachedSearchText); /** * Subject that emits whenever new ciphers are being processed/filtered. @@ -55,10 +60,13 @@ export class VaultPopupItemsService { */ private _ciphersLoading$ = new Subject(); - latestSearchText$: Observable = this._searchText$.asObservable(); + private activeUserId$ = this.accountService.activeAccount$.pipe( + map((a) => a?.id), + filter((userId): userId is UserId => userId !== null), + ); - private organizations$ = this.accountService.activeAccount$.pipe( - switchMap((account) => this.organizationService.organizations$(account?.id)), + private organizations$ = this.activeUserId$.pipe( + switchMap((userId) => this.organizationService.organizations$(userId)), ); /** * Observable that contains the list of other cipher types that should be shown @@ -88,7 +96,7 @@ export class VaultPopupItemsService { */ private _allDecryptedCiphers$: Observable = this.accountService.activeAccount$.pipe( map((a) => a?.id), - filter((userId) => userId != null), + filter((userId): userId is UserId => userId != null), switchMap((userId) => merge(this.cipherService.ciphers$(userId), this.cipherService.localData$(userId)).pipe( runInsideAngular(this.ngZone), @@ -131,22 +139,31 @@ export class VaultPopupItemsService { * Observable that indicates whether there is search text present that is searchable. * @private */ - private _hasSearchText$ = this._searchText$.pipe( - switchMap((searchText) => this.searchService.isSearchable(searchText)), + private _hasSearchText = combineLatest([ + this.searchText$, + getUserId(this.accountService.activeAccount$), + ]).pipe( + switchMap(([searchText, userId]) => { + return this.searchService.isSearchable(userId, searchText); + }), ); private _filteredCipherList$: Observable = combineLatest([ this._activeCipherList$, - this._searchText$, + this.searchText$, this.vaultPopupListFiltersService.filterFunction$, + getUserId(this.accountService.activeAccount$), ]).pipe( - map(([ciphers, searchText, filterFunction]): [CipherView[], string] => [ + map(([ciphers, searchText, filterFunction, userId]): [CipherView[], string, UserId] => [ filterFunction(ciphers), searchText, + userId, ]), switchMap( - ([ciphers, searchText]) => - this.searchService.searchCiphers(searchText, null, ciphers) as Promise, + ([ciphers, searchText, userId]) => + this.searchService.searchCiphers(userId, searchText, undefined, ciphers) as Promise< + PopupCipherView[] + >, ), shareReplay({ refCount: true, bufferSize: 1 }), ); @@ -163,7 +180,7 @@ export class VaultPopupItemsService { this.vaultPopupAutofillService.currentAutofillTab$, ]).pipe( switchMap(([ciphers, otherTypes, tab]) => { - if (!tab) { + if (!tab || !tab.url) { return of([]); } return this.cipherService.filterCiphersForUrl(ciphers, tab.url, otherTypes); @@ -215,7 +232,7 @@ export class VaultPopupItemsService { * Observable that indicates whether a filter or search text is currently applied to the ciphers. */ hasFilterApplied$ = combineLatest([ - this._hasSearchText$, + this._hasSearchText, this.vaultPopupListFiltersService.filters$, ]).pipe( map(([hasSearchText, filters]) => { @@ -248,7 +265,7 @@ export class VaultPopupItemsService { return false; } - const org = orgs.find((o) => o.id === filters.organization.id); + const org = orgs.find((o) => o.id === filters?.organization?.id); return org ? !org.enabled : false; }), ); @@ -292,7 +309,7 @@ export class VaultPopupItemsService { ) {} applyFilter(newSearchText: string) { - this._searchText$.next(newSearchText); + this.cachedSearchText.set(newSearchText); } /** diff --git a/apps/browser/src/vault/popup/services/vault-popup-list-filters.service.spec.ts b/apps/browser/src/vault/popup/services/vault-popup-list-filters.service.spec.ts index ec823d5738f..99a27c54bcc 100644 --- a/apps/browser/src/vault/popup/services/vault-popup-list-filters.service.spec.ts +++ b/apps/browser/src/vault/popup/services/vault-popup-list-filters.service.spec.ts @@ -1,8 +1,9 @@ -import { TestBed } from "@angular/core/testing"; +import { Injector, WritableSignal, runInInjectionContext, signal } from "@angular/core"; +import { TestBed, discardPeriodicTasks, fakeAsync, tick } from "@angular/core/testing"; import { FormBuilder } from "@angular/forms"; import { BehaviorSubject, skipWhile } from "rxjs"; -import { CollectionService, Collection, CollectionView } from "@bitwarden/admin-console/common"; +import { CollectionService, CollectionView } from "@bitwarden/admin-console/common"; import { OrganizationService } from "@bitwarden/common/admin-console/abstractions/organization/organization.service.abstraction"; import { PolicyService } from "@bitwarden/common/admin-console/abstractions/policy/policy.service.abstraction"; import { PolicyType } from "@bitwarden/common/admin-console/enums"; @@ -19,17 +20,27 @@ import { CipherType } from "@bitwarden/common/vault/enums"; import { CipherView } from "@bitwarden/common/vault/models/view/cipher.view"; import { FolderView } from "@bitwarden/common/vault/models/view/folder.view"; -import { MY_VAULT_ID, VaultPopupListFiltersService } from "./vault-popup-list-filters.service"; +import { PopupViewCacheService } from "../../../platform/popup/view-cache/popup-view-cache.service"; + +import { + CachedFilterState, + MY_VAULT_ID, + VaultPopupListFiltersService, +} from "./vault-popup-list-filters.service"; describe("VaultPopupListFiltersService", () => { let service: VaultPopupListFiltersService; - const _memberOrganizations$ = new BehaviorSubject([]); + let _memberOrganizations$ = new BehaviorSubject([]); const memberOrganizations$ = (userId: UserId) => _memberOrganizations$; const organizations$ = new BehaviorSubject([]); - const folderViews$ = new BehaviorSubject([]); + let folderViews$ = new BehaviorSubject([]); const cipherViews$ = new BehaviorSubject({}); - const decryptedCollections$ = new BehaviorSubject([]); + let decryptedCollections$ = new BehaviorSubject([]); const policyAppliesToActiveUser$ = new BehaviorSubject(false); + let viewCacheService: { + signal: jest.Mock; + mockSignal: WritableSignal; + }; const collectionService = { decryptedCollections$, @@ -61,12 +72,19 @@ describe("VaultPopupListFiltersService", () => { const update = jest.fn().mockResolvedValue(undefined); beforeEach(() => { - _memberOrganizations$.next([]); - decryptedCollections$.next([]); + _memberOrganizations$ = new BehaviorSubject([]); // Fresh instance per test + folderViews$ = new BehaviorSubject([]); // Fresh instance per test + decryptedCollections$ = new BehaviorSubject([]); // Fresh instance per test policyAppliesToActiveUser$.next(false); policyService.policyAppliesToActiveUser$.mockClear(); const accountService = mockAccountServiceWith("userId" as UserId); + const mockCachedSignal = createMockSignal({}); + + viewCacheService = { + mockSignal: mockCachedSignal, + signal: jest.fn(() => mockCachedSignal), + }; collectionService.getAllNested = () => Promise.resolve([]); TestBed.configureTestingModule({ @@ -104,6 +122,10 @@ describe("VaultPopupListFiltersService", () => { provide: AccountService, useValue: accountService, }, + { + provide: PopupViewCacheService, + useValue: viewCacheService, + }, ], }); @@ -440,7 +462,7 @@ describe("VaultPopupListFiltersService", () => { }); it("filters by collection", (done) => { - const collection = { id: "1234" } as Collection; + const collection = { id: "1234" } as CollectionView; service.filterFunction$.subscribe((filterFunction) => { expect(filterFunction(ciphers)).toEqual([ciphers[1]]); @@ -505,4 +527,194 @@ describe("VaultPopupListFiltersService", () => { expect(updateCallback()).toBe(false); }); }); + + describe("caching", () => { + it("initializes form from cached state", fakeAsync(() => { + const cachedState: CachedFilterState = { + organizationId: MY_VAULT_ID, + collectionId: "test-collection-id", + folderId: "test-folder-id", + cipherType: CipherType.Login, + }; + + const seededOrganizations: Organization[] = [ + { id: MY_VAULT_ID, name: "Test Org" } as Organization, + ]; + const seededCollections: CollectionView[] = [ + { + id: "test-collection-id", + organizationId: MY_VAULT_ID, + name: "Test collection", + } as CollectionView, + ]; + const seededFolderViews: FolderView[] = [ + { id: "test-folder-id", name: "Test Folder" } as FolderView, + ]; + + const { service } = createSeededVaultPopupListFiltersService( + seededOrganizations, + seededCollections, + seededFolderViews, + cachedState, + ); + + tick(); + + expect(service.filterForm.value).toEqual({ + organization: { id: MY_VAULT_ID }, + collection: { + id: "test-collection-id", + organizationId: MY_VAULT_ID, + name: "Test collection", + }, + folder: { id: "test-folder-id", name: "Test Folder" }, + cipherType: CipherType.Login, + }); + discardPeriodicTasks(); + })); + + it("serializes filters to cache on changes", fakeAsync(() => { + const seededOrganizations: Organization[] = [ + { id: "test-org-id", name: "Org" } as Organization, + ]; + const seededCollections: CollectionView[] = [ + { + id: "test-collection-id", + organizationId: "test-org-id", + name: "Test collection", + } as CollectionView, + ]; + const seededFolderViews: FolderView[] = [ + { id: "test-folder-id", name: "Test Folder" } as FolderView, + ]; + + const { service, cachedSignal } = createSeededVaultPopupListFiltersService( + seededOrganizations, + seededCollections, + seededFolderViews, + {}, + ); + const testOrg = { id: "test-org-id", name: "Org" } as Organization; + const testCollection = { + id: "test-collection-id", + organizationId: "test-org-id", + name: "Test collection", + } as CollectionView; + const testFolder = { id: "test-folder-id", name: "Test Folder" } as FolderView; + + service.filterForm.patchValue({ + organization: testOrg, + collection: testCollection, + folder: testFolder, + cipherType: CipherType.Card, + }); + + tick(300); + + // force another emission by patching with the same value again. workaround for debounce times + service.filterForm.patchValue({ + organization: testOrg, + collection: testCollection, + folder: testFolder, + cipherType: CipherType.Card, + }); + + tick(300); + + expect(cachedSignal()).toEqual({ + organizationId: "test-org-id", + collectionId: "test-collection-id", + folderId: "test-folder-id", + cipherType: CipherType.Card, + }); + discardPeriodicTasks(); + })); + }); }); + +function createMockSignal(initialValue: T): WritableSignal { + const s = signal(initialValue); + s.set = (value: T) => s.update(() => value); + return s; +} + +// Helper function to create a seeded VaultPopupListFiltersService +function createSeededVaultPopupListFiltersService( + organizations: Organization[], + collections: CollectionView[], + folderViews: FolderView[], + cachedState: CachedFilterState = {}, +): { service: VaultPopupListFiltersService; cachedSignal: WritableSignal } { + const seededMemberOrganizations$ = new BehaviorSubject(organizations); + const seededCollections$ = new BehaviorSubject(collections); + const seededFolderViews$ = new BehaviorSubject(folderViews); + + const organizationServiceMock = { + memberOrganizations$: (userId: string) => seededMemberOrganizations$, + organizations$: seededMemberOrganizations$, + } as any; + + const collectionServiceMock = { + decryptedCollections$: seededCollections$, + getAllNested: () => + Promise.resolve( + seededCollections$.value.map((c) => ({ + children: [], + node: c, + parent: null, + })), + ), + } as any; + + const folderServiceMock = { + folderViews$: () => seededFolderViews$, + } as any; + + const cipherServiceMock = { + cipherViews$: () => new BehaviorSubject({}), + } as any; + + const i18nServiceMock = { + t: (key: string) => key, + } as any; + + const policyServiceMock = { + policyAppliesToActiveUser$: jest.fn(() => new BehaviorSubject(false)), + } as any; + + const stateProviderMock = { + getGlobal: () => ({ + state$: new BehaviorSubject(false), + update: jest.fn().mockResolvedValue(undefined), + }), + } as any; + + const accountServiceMock = mockAccountServiceWith("userId" as UserId); + const formBuilderInstance = new FormBuilder(); + + const seededCachedSignal = createMockSignal(cachedState); + const viewCacheServiceMock = { + signal: jest.fn(() => seededCachedSignal), + mockSignal: seededCachedSignal, + } as any; + + // Get an injector from TestBed so that we can run in an injection context. + const injector = TestBed.inject(Injector); + let service: VaultPopupListFiltersService; + runInInjectionContext(injector, () => { + service = new VaultPopupListFiltersService( + folderServiceMock, + cipherServiceMock, + organizationServiceMock, + i18nServiceMock, + collectionServiceMock, + formBuilderInstance, + policyServiceMock, + stateProviderMock, + accountServiceMock, + viewCacheServiceMock, + ); + }); + + return { service: service!, cachedSignal: seededCachedSignal }; +} diff --git a/apps/browser/src/vault/popup/services/vault-popup-list-filters.service.ts b/apps/browser/src/vault/popup/services/vault-popup-list-filters.service.ts index 59ccde3bd44..8d9f6664e45 100644 --- a/apps/browser/src/vault/popup/services/vault-popup-list-filters.service.ts +++ b/apps/browser/src/vault/popup/services/vault-popup-list-filters.service.ts @@ -1,20 +1,22 @@ -// FIXME: Update this file to be type safe and remove this and next line -// @ts-strict-ignore import { Injectable } from "@angular/core"; import { takeUntilDestroyed } from "@angular/core/rxjs-interop"; import { FormBuilder } from "@angular/forms"; import { combineLatest, + debounceTime, distinctUntilChanged, + filter, map, Observable, + of, shareReplay, startWith, switchMap, + take, tap, } from "rxjs"; -import { CollectionService, Collection, CollectionView } from "@bitwarden/admin-console/common"; +import { CollectionService, CollectionView } from "@bitwarden/admin-console/common"; import { DynamicTreeNode } from "@bitwarden/angular/vault/vault-filter/models/dynamic-tree-node.model"; import { OrganizationService } from "@bitwarden/common/admin-console/abstractions/organization/organization.service.abstraction"; import { PolicyService } from "@bitwarden/common/admin-console/abstractions/policy/policy.service.abstraction"; @@ -29,6 +31,7 @@ import { StateProvider, VAULT_SETTINGS_DISK, } from "@bitwarden/common/platform/state"; +import { UserId } from "@bitwarden/common/types/guid"; import { CipherService } from "@bitwarden/common/vault/abstractions/cipher.service"; import { FolderService } from "@bitwarden/common/vault/abstractions/folder/folder.service.abstraction"; import { CipherType } from "@bitwarden/common/vault/enums"; @@ -38,14 +41,26 @@ import { FolderView } from "@bitwarden/common/vault/models/view/folder.view"; import { ServiceUtils } from "@bitwarden/common/vault/service-utils"; import { ChipSelectOption } from "@bitwarden/components"; +import { PopupViewCacheService } from "../../../platform/popup/view-cache/popup-view-cache.service"; + const FILTER_VISIBILITY_KEY = new KeyDefinition(VAULT_SETTINGS_DISK, "filterVisibility", { deserializer: (obj) => obj, }); +/** + * Serialized state of the PopupListFilter for interfacing with the PopupViewCacheService + */ +export interface CachedFilterState { + organizationId?: string; + collectionId?: string; + folderId?: string; + cipherType?: CipherType | null; +} + /** All available cipher filters */ export type PopupListFilter = { organization: Organization | null; - collection: Collection | null; + collection: CollectionView | null; folder: FolderView | null; cipherType: CipherType | null; }; @@ -76,8 +91,9 @@ export class VaultPopupListFiltersService { * Observable for `filterForm` value */ filters$ = this.filterForm.valueChanges.pipe( - startWith(INITIAL_FILTERS), - ) as Observable; + startWith(this.filterForm.value), + shareReplay({ bufferSize: 1, refCount: true }), + ); /** Emits the number of applied filters. */ numberOfAppliedFilters$ = this.filters$.pipe( @@ -93,7 +109,65 @@ export class VaultPopupListFiltersService { */ private cipherViews: CipherView[] = []; - private activeUserId$ = this.accountService.activeAccount$.pipe(map((a) => a?.id)); + private activeUserId$ = this.accountService.activeAccount$.pipe( + map((a) => a?.id), + filter((userId): userId is UserId => userId !== null), + ); + + private serializeFilters(): CachedFilterState { + return { + organizationId: this.filterForm.value.organization?.id, + collectionId: this.filterForm.value.collection?.id, + folderId: this.filterForm.value.folder?.id, + cipherType: this.filterForm.value.cipherType, + }; + } + + private deserializeFilters(state: CachedFilterState): void { + combineLatest([this.organizations$, this.collections$, this.folders$]) + .pipe(take(1)) + .subscribe(([orgOptions, collectionOptions, folderOptions]) => { + const patchValue: PopupListFilter = { + organization: null, + collection: null, + folder: null, + cipherType: null, + }; + + if (state.organizationId) { + if (state.organizationId === MY_VAULT_ID) { + patchValue.organization = { id: MY_VAULT_ID } as Organization; + } else { + const orgOption = orgOptions.find((o) => o.value?.id === state.organizationId); + patchValue.organization = orgOption?.value || null; + } + } + + if (state.collectionId) { + const collection = collectionOptions + .flatMap((c) => this.flattenOptions(c)) + .find((c) => c.value?.id === state.collectionId)?.value; + patchValue.collection = collection || null; + } + + if (state.folderId) { + const folder = folderOptions + .flatMap((f) => this.flattenOptions(f)) + .find((f) => f.value?.id === state.folderId)?.value; + patchValue.folder = folder || null; + } + + if (state.cipherType) { + patchValue.cipherType = state.cipherType; + } + + this.filterForm.patchValue(patchValue); + }); + } + + private flattenOptions(option: ChipSelectOption): ChipSelectOption[] { + return [option, ...(option.children?.flatMap((c) => this.flattenOptions(c)) || [])]; + } constructor( private folderService: FolderService, @@ -105,10 +179,30 @@ export class VaultPopupListFiltersService { private policyService: PolicyService, private stateProvider: StateProvider, private accountService: AccountService, + private viewCacheService: PopupViewCacheService, ) { this.filterForm.controls.organization.valueChanges .pipe(takeUntilDestroyed()) .subscribe(this.validateOrganizationChange.bind(this)); + + const cachedFilters = this.viewCacheService.signal({ + key: "vault-filters", + initialValue: {}, + deserializer: (v) => v, + }); + + this.deserializeFilters(cachedFilters()); + + // Save changes to cache + this.filterForm.valueChanges + .pipe( + debounceTime(300), + map(() => this.serializeFilters()), + distinctUntilChanged((a, b) => JSON.stringify(a) === JSON.stringify(b)), + ) + .subscribe((state) => { + cachedFilters.set(state); + }); } /** Stored state for the visibility of the filters. */ @@ -130,14 +224,11 @@ export class VaultPopupListFiltersService { return false; } - if ( - filters.collection !== null && - !cipher.collectionIds.includes(filters.collection.id) - ) { + if (filters.collection && !cipher.collectionIds?.includes(filters.collection.id)) { return false; } - if (filters.folder !== null && cipher.folderId !== filters.folder.id) { + if (filters.folder && cipher.folderId !== filters.folder.id) { return false; } @@ -147,7 +238,7 @@ export class VaultPopupListFiltersService { if (cipher.organizationId !== null) { return false; } - } else if (filters.organization !== null) { + } else if (filters.organization) { if (cipher.organizationId !== filters.organization.id) { return false; } @@ -199,7 +290,9 @@ export class VaultPopupListFiltersService { */ organizations$: Observable[]> = combineLatest([ this.accountService.activeAccount$.pipe( - switchMap((account) => this.organizationService.memberOrganizations$(account?.id)), + switchMap((account) => + account === null ? of([]) : this.organizationService.memberOrganizations$(account.id), + ), ), this.policyService.policyAppliesToActiveUser$(PolicyType.PersonalOwnership), ]).pipe( @@ -285,7 +378,7 @@ export class VaultPopupListFiltersService { map(([filters, folders, cipherViews]): [PopupListFilter, FolderView[], CipherView[]] => { if (folders.length === 1 && folders[0].id === null) { // Do not display folder selections when only the "no folder" option is available. - return [filters, [], cipherViews]; + return [filters as PopupListFilter, [], cipherViews]; } // Sort folders by alphabetic name @@ -304,7 +397,7 @@ export class VaultPopupListFiltersService { // Move the "no folder" option to the end of the list arrangedFolders = [...folders.filter((f) => f.id !== null), updatedNoFolder]; } - return [filters, arrangedFolders, cipherViews]; + return [filters as PopupListFilter, arrangedFolders, cipherViews]; }), map(([filters, folders, cipherViews]) => { const organizationId = filters.organization?.id ?? null; @@ -410,7 +503,7 @@ export class VaultPopupListFiltersService { // Remove "/" from beginning and end of the folder name // then split the folder name by the delimiter const parts = f.name != null ? f.name.replace(/^\/+|\/+$/g, "").split(NESTING_DELIMITER) : []; - ServiceUtils.nestedTraverse(nodes, 0, parts, folderCopy, null, NESTING_DELIMITER); + ServiceUtils.nestedTraverse(nodes, 0, parts, folderCopy, undefined, NESTING_DELIMITER); }); return nodes; @@ -429,7 +522,7 @@ export class VaultPopupListFiltersService { // When the organization filter changes and a collection is already selected, // reset the collection filter if the collection does not belong to the new organization filter if (currentFilters.collection && currentFilters.collection.organizationId !== organization.id) { - this.filterForm.get("collection").setValue(null); + this.filterForm.get("collection")?.setValue(null); } // When the organization filter changes and a folder is already selected, @@ -444,12 +537,12 @@ export class VaultPopupListFiltersService { // Find any ciphers within the organization that belong to the current folder const newOrgContainsFolder = orgCiphers.some( - (oc) => oc.folderId === currentFilters.folder.id, + (oc) => oc.folderId === currentFilters?.folder?.id, ); // If the new organization does not contain the current folder, reset the folder filter if (!newOrgContainsFolder) { - this.filterForm.get("folder").setValue(null); + this.filterForm.get("folder")?.setValue(null); } } } diff --git a/apps/browser/src/vault/popup/settings/appearance-v2.component.spec.ts b/apps/browser/src/vault/popup/settings/appearance-v2.component.spec.ts index 7d67a9458b2..30715ebaedf 100644 --- a/apps/browser/src/vault/popup/settings/appearance-v2.component.spec.ts +++ b/apps/browser/src/vault/popup/settings/appearance-v2.component.spec.ts @@ -47,7 +47,7 @@ describe("AppearanceV2Component", () => { const showFavicons$ = new BehaviorSubject(true); const enableBadgeCounter$ = new BehaviorSubject(true); - const selectedTheme$ = new BehaviorSubject(ThemeType.Nord); + const selectedTheme$ = new BehaviorSubject(ThemeType.Light); const enableRoutingAnimation$ = new BehaviorSubject(true); const enableCompactMode$ = new BehaviorSubject(false); const showQuickCopyActions$ = new BehaviorSubject(false); @@ -135,7 +135,7 @@ describe("AppearanceV2Component", () => { enableAnimations: true, enableFavicon: true, enableBadgeCounter: true, - theme: ThemeType.Nord, + theme: ThemeType.Light, enableCompactMode: false, showQuickCopyActions: false, width: "default", diff --git a/apps/browser/src/vault/popup/settings/appearance-v2.component.ts b/apps/browser/src/vault/popup/settings/appearance-v2.component.ts index d6fca96c08c..1462a2d7ab4 100644 --- a/apps/browser/src/vault/popup/settings/appearance-v2.component.ts +++ b/apps/browser/src/vault/popup/settings/appearance-v2.component.ts @@ -12,7 +12,7 @@ import { DomainSettingsService } from "@bitwarden/common/autofill/services/domai import { AnimationControlService } from "@bitwarden/common/platform/abstractions/animation-control.service"; import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; import { MessagingService } from "@bitwarden/common/platform/abstractions/messaging.service"; -import { ThemeType } from "@bitwarden/common/platform/enums"; +import { Theme, ThemeTypes } from "@bitwarden/common/platform/enums"; import { ThemeStateService } from "@bitwarden/common/platform/theming/theme-state.service"; import { VaultSettingsService } from "@bitwarden/common/vault/abstractions/vault-settings/vault-settings.service"; import { @@ -60,7 +60,7 @@ export class AppearanceV2Component implements OnInit { appearanceForm = this.formBuilder.group({ enableFavicon: false, enableBadgeCounter: true, - theme: ThemeType.System, + theme: ThemeTypes.System as Theme, enableAnimations: true, enableCompactMode: false, showQuickCopyActions: false, @@ -72,7 +72,7 @@ export class AppearanceV2Component implements OnInit { formLoading = true; /** Available theme options */ - themeOptions: { name: string; value: ThemeType }[]; + themeOptions: { name: string; value: Theme }[]; /** Available width options */ protected readonly widthOptions: Option[] = [ @@ -93,9 +93,9 @@ export class AppearanceV2Component implements OnInit { private vaultSettingsService: VaultSettingsService, ) { this.themeOptions = [ - { name: i18nService.t("systemDefault"), value: ThemeType.System }, - { name: i18nService.t("light"), value: ThemeType.Light }, - { name: i18nService.t("dark"), value: ThemeType.Dark }, + { name: i18nService.t("systemDefault"), value: ThemeTypes.System }, + { name: i18nService.t("light"), value: ThemeTypes.Light }, + { name: i18nService.t("dark"), value: ThemeTypes.Dark }, ]; } @@ -191,7 +191,7 @@ export class AppearanceV2Component implements OnInit { this.messagingService.send("bgUpdateContextMenu"); } - async saveTheme(newTheme: ThemeType) { + async saveTheme(newTheme: Theme) { await this.themeStateService.setSelectedTheme(newTheme); } diff --git a/apps/browser/store/locales/fr/copy.resx b/apps/browser/store/locales/fr/copy.resx index 5c690049d0d..327d39a23c4 100644 --- a/apps/browser/store/locales/fr/copy.resx +++ b/apps/browser/store/locales/fr/copy.resx @@ -124,49 +124,51 @@ À la maison, au travail ou en déplacement, Bitwarden sécurise facilement tous vos mots de passe, clés d'accès et informations sensibles. - Recognized as the best password manager by PCMag, WIRED, The Verge, CNET, G2, and more! + Reconnu comme le meilleur gestionnaire de mots de passe par PCMag, WIRED, The Verge, CNET, G2, et bien d'autres ! -SECURE YOUR DIGITAL LIFE -Secure your digital life and protect against data breaches by generating and saving unique, strong passwords for every account. Maintain everything in an end-to-end encrypted password vault that only you can access. +SÉCURISEZ VOTRE VIE NUMÉRIQUE +Sécurisez votre vie numérique et protégez-vous contre les brèches de données en générant et en enregistrant des mots de passe uniques et forts pour chaque compte. Conservez tout dans un coffre chiffré de bout en bout auquel vous êtes le seul à avoir accès. -ACCESS YOUR DATA, ANYWHERE, ANYTIME, ON ANY DEVICE -Easily manage, store, secure, and share unlimited passwords across unlimited devices without restrictions. +ACCÉDER À VOS DONNÉES, PARTOUT, À TOUT MOMENT ET SUR N'IMPORTE QUEL APPAREIL +Gérez, stockez, sécurisez et partagez facilement un nombre illimité de mots de passe sur un nombre illimité d'appareils, sans aucune restriction. -EVERYONE SHOULD HAVE THE TOOLS TO STAY SAFE ONLINE -Utilize Bitwarden for free with no ads or selling data. Bitwarden believes everyone should have the ability to stay safe online. Premium plans offer access to advanced features. +TOUT LE MONDE DEVRAIT DISPOSER DES OUTILS NÉCESSAIRES POUR ASSURER SA SÉCURITÉ EN LIGNE +Utilisez Bitwarden gratuitement, sans publicité ni vente de données. Bitwarden estime que tout le monde devrait avoir la possibilité de rester en sécurité en ligne. Les plans Premium et Familles permettent d'accéder à des fonctionnalités avancées. -EMPOWER YOUR TEAMS WITH BITWARDEN -Plans for Teams and Enterprise come with professional business features. Some examples include SSO integration, self-hosting, directory integration and SCIM provisioning, global policies, API access, event logs, and more. +RESPONSABILISEZ VOS ÉQUIPES AVEC BITWARDEN +Les plans Équipes et Entreprises sont dotées de fonctionnalités professionnelles. Citons par exemple l'intégration SSO, l'auto-hébergement, l'intégration de l'annuaire et le SCIM provisioning, les politiques globales de sécurité, l'accès API, les journaux d'événements, etc. -Use Bitwarden to secure your workforce and share sensitive information with colleagues. +Utilisez Bitwarden pour sécuriser votre personnel et partager des informations sensibles avec vos collègues. -More reasons to choose Bitwarden: +D'autres raisons de choisir Bitwarden : -World-Class Encryption -Passwords are protected with advanced end-to-end encryption (AES-256 bit, salted hashtag, and PBKDF2 SHA-256) so your data stays secure and private. +Chiffrement de classe mondiale +Les mots de passe sont protégés par un cryptage avancé de bout en bout (AES-256 bits, hachage salé et PBKDF2 SHA-256) afin que vos données restent sécurisées et privées. -3rd-party Audits -Bitwarden regularly conducts comprehensive third-party security audits with notable security firms. These annual audits include source code assessments and penetration testing across Bitwarden IPs, servers, and web applications. +Chiffrement de classe mondiale +Les mots de passe sont protégés par un cryptage avancé de bout en bout (AES-256 bits, hashtag salé et PBKDF2 SHA-256) afin que vos données restent sécurisées et privées. -Advanced 2FA -Secure your login with a third-party authenticator, emailed codes, or FIDO2 WebAuthn credentials such as a hardware security key or passkey. +Audits de tierces parties +Bitwarden effectue régulièrement des audits de sécurité complets avec des sociétés tierces de sécurité renommées. Ces audits annuels comprennent des évaluations du code source et des tests de pénétration sur les IP, les serveurs et les applications web de Bitwarden. + +2FA avancé +Sécurisez votre connexion à l'aide d'un authentificateur tiers, de codes envoyés par courriel ou d'identifiants FIDO2 WebAuthn tels qu'une clé de sécurité matérielle ou une clé d'identificatio (passkey). Bitwarden Send -Transmit data directly to others while maintaining end-to-end encrypted security and limiting exposure. +Transmettez des données directement à d'autres personnes tout en maintenant une sécurité cryptée de bout en bout et en limitant l'exposition. -Built-in Generator -Create long, complex, and distinct passwords and unique usernames for every site you visit. Integrate with email alias providers for additional privacy. +Générateur intégré +Créez des mots de passe longs, complexes et distincts et des noms d'utilisateur uniques pour chaque site que vous visitez. Intégration avec des fournisseurs d'alias de courriels pour plus de confidentialité. -Global Translations -Bitwarden translations exist for more than 60 languages, translated by the global community though Crowdin. +Traductions globales +Il existe des traductions de Bitwarden dans plus de 60 langues, traduites par la communauté mondiale via Crowdin. -Cross-Platform Applications -Secure and share sensitive data within your Bitwarden Vault from any browser, mobile device, or desktop OS, and more. +Applications multiplateformes +Sécurisez et partagez des données sensibles dans votre coffre Bitwarden à partir de n'importe quel navigateur, appareil mobile ou système d'exploitation de bureau, et plus encore. -Bitwarden secures more than just passwords -End-to-end encrypted credential management solutions from Bitwarden empower organizations to secure everything, including developer secrets and passkey experiences. Visit Bitwarden.com to learn more about Bitwarden Secrets Manager and Bitwarden Passwordless.dev! - +Bitwarden sécurise bien plus que les mots de passe +Les solutions de gestion de bout en bout des identifiants chiffrés de Bitwarden permettent aux organisations de tout sécuriser, y compris les secrets des développeurs et les expériences de clés de passe. Visitez Bitwarden.com pour en savoir plus sur Bitwarden Secrets Manager et Bitwarden Passwordless.dev ! À la maison, au travail ou en déplacement, Bitwarden sécurise facilement tous vos mots de passe, clés d'accès et informations sensibles. diff --git a/apps/browser/store/locales/he/copy.resx b/apps/browser/store/locales/he/copy.resx index 37ca9b6d667..372467a7bee 100644 --- a/apps/browser/store/locales/he/copy.resx +++ b/apps/browser/store/locales/he/copy.resx @@ -127,7 +127,7 @@ מוכר בתור מנהל הסיסמאות הטוב ביותר על ידי G2, CNET, The Verge, WIRED, PCMag, ועוד! אבטח את החיים הדיגיטליים שלך -אבטח את החיים הדיגיטלים שלך והגן מפני פרצות נתונים על ידי יצירת ושמירת סיסמה ייחודית וחזקה עבור כל חשבון. שמור הכל בכספת סיסמאות מוצפנת מקצה-לקצה שרק אתה יכול לגשת אליה. +אבטח את החיים הדיגיטלים שלך והגן מפני פרצות נתונים על ידי יצירת ושמירת סיסמה ייחודית וחזקה עבור כל חשבון. שמור הכל בכספת סיסמאות מוצפנת מקצה־לקצה שרק אתה יכול לגשת אליה. לגשת לנתונים שלך בכל מקום, זמן, ומכשיר נהל, אחסן, אבטח, ושתף בקלות מספר בלתי מוגבל של סיסמאות בין מספר בלתי מוגבל של מכשירים ללא הגבלות. @@ -144,7 +144,7 @@ עוד סיבות לבחור ב־Bitwarden: הצפנה ברמה עולמית -סיסמאות מוגנת עם הצפנה מקצה-לקצה מתקדמת (AES‏-256 סיביות, גיבוב מלוח, ו־PBKDF2 SHA-256) כך שהנתונים שלך נשארים מאובטחים ופרטיים. +סיסמאות מוגנת עם הצפנה מקצה־לקצה מתקדמת (AES-256 סיביות, גיבוב מלוח, ו־PBKDF2 SHA-256) כך שהנתונים שלך נשארים מאובטחים ופרטיים. ביקורות צד שלישי Bitwarden באופן קבוע מבצעת ביקורות אבטחה מקיפות של צד שלישי עם חברות אבטחה בולטות. הביקורות השנתיות הללו כוללות הערכות קוד מקור ובדיקות חדירה על פני פרוטוקולי אינטרנט, שרתים, ויישומי רשת של Bitwarden. @@ -152,8 +152,8 @@ Bitwarden באופן קבוע מבצעת ביקורות אבטחה מקיפות 2FA מתקדם אבטח את הכניסות שלך עם מאמת צד שלישי, קודים בדוא"ל, או אישורי FIDO2 WebAuthn כמו מפתח אבטחת חומרה או מפתח גישה. -Bitwarden סנד -שדר נתונים ישירות אל אחרים תוך כדי שמירה על אבטחת הצפנה מקצה-לקצה והגבלת חשיפה. +Bitwarden סֵנְד +שדר נתונים ישירות אל אחרים תוך שמירה על אבטחת הצפנה מקצה־לקצה והגבלת חשיפה. מחולל מובנה צור סיסמאות ארוכות, מורכבות, ושונות ושמות משתמש ייחודיים עבור כל אתר שאתה מבקר. שלב עם ספקי כינויי דוא"ל עבור פרטיות נוספת. @@ -162,10 +162,10 @@ Bitwarden סנד תרגומים של Bitwarden קיימים ביותר מ־60 שפות, תורגמו על ידי הקהילה הגלובלית דרך Crowdin. יישומים חוצי פלטפורמות -אבטח ושתף מידע רגיש בתוך כספת ה-Bitwarden שלך מכל דפדפן, מכשיר נייד, או מערכת הפעלה של שולחן עבודה, ועוד. +אבטח ושתף מידע רגיש בתוך כספת ה־Bitwarden שלך מכל דפדפן, מכשיר נייד, או מערכת הפעלה של שולחן עבודה, ועוד. Bitwarden מאבטח יותר מרק סיסמאות -פתרונות ניהול אישורים מוצפנים מקצה-לקצה מאת Bitwarden מעצימות ארגונים לאבטח הכל, כולל סודות פיתוח וחוויות מפתח גישה. בקר ב־Bitwarden.com כדי ללמוד עוד על מנהל הסודות של Bitwarden ו־Bitwarden Passwordless.dev! +פתרונות ניהול אישורים מוצפנים מקצה־לקצה מאת Bitwarden מעצימות ארגונים לאבטח הכל, כולל סודות פיתוח וחוויות מפתח גישה. בקר ב־Bitwarden.com כדי ללמוד עוד על מנהל הסודות של Bitwarden ו־Bitwarden Passwordless.dev! diff --git a/apps/browser/store/locales/pl/copy.resx b/apps/browser/store/locales/pl/copy.resx index 5641c68c488..3d5c4f47864 100644 --- a/apps/browser/store/locales/pl/copy.resx +++ b/apps/browser/store/locales/pl/copy.resx @@ -121,7 +121,7 @@ Menedżer Haseł Bitwarden - W domu, w pracy, lub w ruchu, Bitwarden z łatwością zabezpiecza wszystkie Twoje hasła, passkeys i poufne informacje. + W domu, w pracy lub w ruchu Bitwarden z łatwością zabezpiecza wszystkie twoje hasła, klucze i poufne informacje. Uznany za najlepszego menedżera haseł przez PCMag, WIRED, The Verge, CNET, G2 i wielu innych! diff --git a/apps/browser/store/locales/pt_BR/copy.resx b/apps/browser/store/locales/pt_BR/copy.resx index f4643115237..266f4008523 100644 --- a/apps/browser/store/locales/pt_BR/copy.resx +++ b/apps/browser/store/locales/pt_BR/copy.resx @@ -168,7 +168,7 @@ Com nossas soluções em gerenciamento de credenciais criptografadas ponta a pon - Em casa, no trabalho ou em qualquer lugar, a Bitwarden protege facilmente todas as suas senhas, chaves de acesso e informações sensíveis. + Onde quer que você esteja, a Bitwarden protege facilmente todas as suas senha, chaves de acesso e informações sensíveis. Sincronize e acesse o seu cofre através de múltiplos dispositivos diff --git a/apps/browser/store/locales/zh_CN/copy.resx b/apps/browser/store/locales/zh_CN/copy.resx index 0f73ccd6619..c66c6fdb411 100644 --- a/apps/browser/store/locales/zh_CN/copy.resx +++ b/apps/browser/store/locales/zh_CN/copy.resx @@ -150,7 +150,7 @@ Bitwarden 定期与知名的安全公司进行全面的第三方安全审计。这些年度审计包括对 Bitwarden IP、服务器和 Web 应用程序的源代码评估和渗透测试。 高级 2FA -使用第三方验证器、电子邮件代码或 FIDO2 WebAuthn 凭据(例如硬件安全钥匙或通行密钥)保护您的登录。 +使用第三方验证器、电子邮件代码或 FIDO2 WebAuthn 凭据(例如硬件安全密钥或通行密钥)保护您的登录。 Bitwarden Send 直接传输数据给他人,同时保持端对端加密的安全性并防止暴露。 diff --git a/apps/browser/tailwind.config.js b/apps/browser/tailwind.config.js index f0a7db8e8bc..02e1d86f5ac 100644 --- a/apps/browser/tailwind.config.js +++ b/apps/browser/tailwind.config.js @@ -1,4 +1,4 @@ -/* eslint-disable no-undef, @typescript-eslint/no-require-imports */ +/* eslint-disable @typescript-eslint/no-require-imports */ const config = require("../../libs/components/tailwind.config.base"); config.content = [ diff --git a/apps/browser/test.setup.ts b/apps/browser/test.setup.ts index 27f53e9de15..eb635e646e1 100644 --- a/apps/browser/test.setup.ts +++ b/apps/browser/test.setup.ts @@ -1,4 +1,4 @@ -import "jest-preset-angular/setup-jest"; +import "@bitwarden/ui-common/setup-jest"; import { addCustomMatchers } from "@bitwarden/common/spec"; addCustomMatchers(); diff --git a/apps/browser/tsconfig.json b/apps/browser/tsconfig.json index 6b6096825a7..e836af1327c 100644 --- a/apps/browser/tsconfig.json +++ b/apps/browser/tsconfig.json @@ -32,6 +32,7 @@ "@bitwarden/send-ui": ["../../libs/tools/send/send-ui/src"], "@bitwarden/tools-card": ["../../libs/tools/card/src"], "@bitwarden/ui-common": ["../../libs/ui/common/src"], + "@bitwarden/ui-common/setup-jest": ["../../libs/ui/common/src/setup-jest"], "@bitwarden/vault-export-core": [ "../../libs/tools/export/vault-export/vault-export-core/src" ], diff --git a/apps/cli/package.json b/apps/cli/package.json index a6c099826c5..f8f1c8a02d9 100644 --- a/apps/cli/package.json +++ b/apps/cli/package.json @@ -1,7 +1,7 @@ { "name": "@bitwarden/cli", "description": "A secure and free password manager for all of your devices.", - "version": "2025.2.0", + "version": "2025.3.0", "keywords": [ "bitwarden", "password", @@ -72,7 +72,7 @@ "inquirer": "8.2.6", "jsdom": "26.0.0", "jszip": "3.10.1", - "koa": "2.15.3", + "koa": "2.15.4", "koa-bodyparser": "4.4.1", "koa-json": "2.0.2", "lowdb": "1.0.0", diff --git a/apps/cli/scripts/sign-cli.ps1 b/apps/cli/scripts/sign-cli.ps1 new file mode 100644 index 00000000000..65b763f19ad --- /dev/null +++ b/apps/cli/scripts/sign-cli.ps1 @@ -0,0 +1,44 @@ + + +function SignExe { + param ( + [Parameter(Mandatory=$true)] + [ValidateScript({![string]::IsNullOrEmpty($_)})] + [string]$vaultUrl, + + [Parameter(Mandatory=$false)] + [ValidateScript({![string]::IsNullOrEmpty($_)})] + [string]$clientId, + + [Parameter(Mandatory=$false)] + [ValidateScript({![string]::IsNullOrEmpty($_)})] + [string]$tenantId, + + [Parameter(Mandatory=$false)] + [ValidateScript({![string]::IsNullOrEmpty($_)})] + [string]$clientSecret, + + [Parameter(Mandatory=$false)] + [ValidateScript({![string]::IsNullOrEmpty($_)})] + [string]$certName, + + [Parameter(Mandatory=$false)] + [ValidateScript({Test-Path $_})] + [string] $exePath, + + # [Parameter(Mandatory=$false)] + # [string] $hashAlgorithm, # -fd option + + # [Parameter(Mandatory=$false)] + # [string] $site, # -du option + + [Parameter(Mandatory=$false)] + [string] $timestampService = "http://timestamp.digicert.com" + ) + + echo "Signing $exePath ..." + azuresigntool sign -kvu $vaultUrl -kvi $clientId -kvt $tenantId -kvs $clientSecret -kvc $certName -tr $timestampService $exePath +} + + +SignExe -vaultUrl $env:SIGNING_VAULT_URL -clientId $env:SIGNING_CLIENT_ID -tenantId $env:SIGNING_TENANT_ID -clientSecret $env:SIGNING_CLIENT_SECRET -certName $env:SIGNING_CERT_NAME -exePath $env:EXE_PATH diff --git a/apps/cli/src/auth/commands/lock.command.ts b/apps/cli/src/auth/commands/lock.command.ts index 809d3c6a881..f3b8018f40e 100644 --- a/apps/cli/src/auth/commands/lock.command.ts +++ b/apps/cli/src/auth/commands/lock.command.ts @@ -1,6 +1,6 @@ // FIXME: Update this file to be type safe and remove this and next line // @ts-strict-ignore -import { VaultTimeoutService } from "@bitwarden/common/abstractions/vault-timeout/vault-timeout.service"; +import { VaultTimeoutService } from "@bitwarden/common/key-management/vault-timeout"; import { Response } from "../../models/response"; import { MessageResponse } from "../../models/response/message.response"; diff --git a/apps/cli/src/auth/commands/login.command.ts b/apps/cli/src/auth/commands/login.command.ts index 14cd93f370f..985816fb0dd 100644 --- a/apps/cli/src/auth/commands/login.command.ts +++ b/apps/cli/src/auth/commands/login.command.ts @@ -311,6 +311,26 @@ export class LoginCommand { ); } + // Opting for not checking feature flag since the server will not respond with + // requiresDeviceVerification if the feature flag is not enabled. + if (response.requiresDeviceVerification) { + let newDeviceToken: string = null; + if (this.canInteract) { + const answer: inquirer.Answers = await inquirer.createPromptModule({ + output: process.stderr, + })({ + type: "input", + name: "token", + message: "New device login code:", + }); + newDeviceToken = answer.token; + } + if (newDeviceToken == null || newDeviceToken === "") { + return Response.badRequest("Code is required."); + } + response = await this.loginStrategyService.logInNewDeviceVerification(newDeviceToken); + } + if (response.captchaSiteKey) { const twoFactorRequest = new TokenTwoFactorRequest(selectedProvider.type, twoFactorToken); const handledResponse = await this.handleCaptchaRequired(twoFactorRequest); diff --git a/apps/cli/src/bw.ts b/apps/cli/src/bw.ts index 5e9d3dfbc94..fcf0ef3dc8d 100644 --- a/apps/cli/src/bw.ts +++ b/apps/cli/src/bw.ts @@ -1,3 +1,5 @@ +import "core-js/proposals/explicit-resource-management"; + import { program } from "commander"; import { OssServeConfigurator } from "./oss-serve-configurator"; diff --git a/apps/cli/src/commands/get.command.ts b/apps/cli/src/commands/get.command.ts index 92c3a8baeaf..28c06505f8a 100644 --- a/apps/cli/src/commands/get.command.ts +++ b/apps/cli/src/commands/get.command.ts @@ -254,8 +254,8 @@ export class GetCommand extends DownloadCommand { return Response.error("No TOTP available for this login."); } - const totp = await this.totpService.getCode(cipher.login.totp); - if (totp == null) { + const totpResponse = await firstValueFrom(this.totpService.getCode$(cipher.login.totp)); + if (!totpResponse.code) { return Response.error("Couldn't generate TOTP code."); } @@ -276,7 +276,7 @@ export class GetCommand extends DownloadCommand { } } - const res = new StringResponse(totp); + const res = new StringResponse(totpResponse.code); return Response.success(res); } @@ -571,7 +571,7 @@ export class GetCommand extends DownloadCommand { const pubKey = Utils.fromB64ToArray(response.publicKey); fingerprint = await this.keyService.getFingerprint(id, pubKey); } catch { - // eslint-disable-next-line + // empty - handled by the null check below } } diff --git a/apps/cli/src/platform/services/cli-sdk-load.service.ts b/apps/cli/src/platform/services/cli-sdk-load.service.ts index ee3b48e34d7..638e64a8214 100644 --- a/apps/cli/src/platform/services/cli-sdk-load.service.ts +++ b/apps/cli/src/platform/services/cli-sdk-load.service.ts @@ -1,7 +1,7 @@ import { SdkLoadService } from "@bitwarden/common/platform/abstractions/sdk/sdk-load.service"; import * as sdk from "@bitwarden/sdk-internal"; -export class CliSdkLoadService implements SdkLoadService { +export class CliSdkLoadService extends SdkLoadService { async load(): Promise { const module = await import("@bitwarden/sdk-internal/bitwarden_wasm_internal_bg.wasm"); (sdk as any).init(module); diff --git a/apps/cli/src/platform/services/node-api.service.ts b/apps/cli/src/platform/services/node-api.service.ts index f4d1d30e8b1..8c7629fb3d9 100644 --- a/apps/cli/src/platform/services/node-api.service.ts +++ b/apps/cli/src/platform/services/node-api.service.ts @@ -4,8 +4,8 @@ import * as FormData from "form-data"; import { HttpsProxyAgent } from "https-proxy-agent"; import * as fe from "node-fetch"; -import { VaultTimeoutSettingsService } from "@bitwarden/common/abstractions/vault-timeout/vault-timeout-settings.service"; import { TokenService } from "@bitwarden/common/auth/abstractions/token.service"; +import { VaultTimeoutSettingsService } from "@bitwarden/common/key-management/vault-timeout"; import { AppIdService } from "@bitwarden/common/platform/abstractions/app-id.service"; import { EnvironmentService } from "@bitwarden/common/platform/abstractions/environment.service"; import { LogService } from "@bitwarden/common/platform/abstractions/log.service"; diff --git a/apps/cli/src/service-container/service-container.ts b/apps/cli/src/service-container/service-container.ts index 98926f7ae65..0e776375e6a 100644 --- a/apps/cli/src/service-container/service-container.ts +++ b/apps/cli/src/service-container/service-container.ts @@ -64,6 +64,13 @@ import { DefaultBillingAccountProfileStateService } from "@bitwarden/common/bill import { ClientType } from "@bitwarden/common/enums"; import { EncryptServiceImplementation } from "@bitwarden/common/key-management/crypto/services/encrypt.service.implementation"; import { FallbackBulkEncryptService } from "@bitwarden/common/key-management/crypto/services/fallback-bulk-encrypt.service"; +import { + DefaultVaultTimeoutService, + DefaultVaultTimeoutSettingsService, + VaultTimeoutService, + VaultTimeoutSettingsService, + VaultTimeoutStringType, +} from "@bitwarden/common/key-management/vault-timeout"; import { ConfigApiServiceAbstraction } from "@bitwarden/common/platform/abstractions/config/config-api.service.abstraction"; import { ConfigService } from "@bitwarden/common/platform/abstractions/config/config.service"; import { @@ -122,8 +129,6 @@ import { AuditService } from "@bitwarden/common/services/audit.service"; import { EventCollectionService } from "@bitwarden/common/services/event/event-collection.service"; import { EventUploadService } from "@bitwarden/common/services/event/event-upload.service"; import { SearchService } from "@bitwarden/common/services/search.service"; -import { VaultTimeoutSettingsService } from "@bitwarden/common/services/vault-timeout/vault-timeout-settings.service"; -import { VaultTimeoutService } from "@bitwarden/common/services/vault-timeout/vault-timeout.service"; import { PasswordStrengthService, PasswordStrengthServiceAbstraction, @@ -132,7 +137,6 @@ import { SendApiService } from "@bitwarden/common/tools/send/services/send-api.s import { SendStateProvider } from "@bitwarden/common/tools/send/services/send-state.provider"; import { SendService } from "@bitwarden/common/tools/send/services/send.service"; import { UserId } from "@bitwarden/common/types/guid"; -import { VaultTimeoutStringType } from "@bitwarden/common/types/vault-timeout.type"; import { InternalFolderService } from "@bitwarden/common/vault/abstractions/folder/folder.service.abstraction"; import { CipherAuthorizationService, @@ -464,7 +468,7 @@ export class ServiceContainer { this.organizationService = new DefaultOrganizationService(this.stateProvider); this.policyService = new PolicyService(this.stateProvider, this.organizationService); - this.vaultTimeoutSettingsService = new VaultTimeoutSettingsService( + this.vaultTimeoutSettingsService = new DefaultVaultTimeoutSettingsService( this.accountService, this.pinService, this.userDecryptionOptionsService, @@ -712,7 +716,7 @@ export class ServiceContainer { const biometricService = new CliBiometricsService(); - this.vaultTimeoutService = new VaultTimeoutService( + this.vaultTimeoutService = new DefaultVaultTimeoutService( this.accountService, this.masterPasswordService, this.cipherService, @@ -762,7 +766,7 @@ export class ServiceContainer { this.stateProvider, ); - this.totpService = new TotpService(this.cryptoFunctionService, this.logService); + this.totpService = new TotpService(this.sdkService); this.importApiService = new ImportApiService(this.apiService); @@ -867,7 +871,7 @@ export class ServiceContainer { return; } - await this.sdkLoadService.load(); + await this.sdkLoadService.loadAndInit(); await this.storageService.init(); await this.stateService.init(); this.containerService.attachToGlobal(global); diff --git a/apps/desktop/desktop_native/Cargo.lock b/apps/desktop/desktop_native/Cargo.lock index 1299a65f956..58cc4552f1e 100644 --- a/apps/desktop/desktop_native/Cargo.lock +++ b/apps/desktop/desktop_native/Cargo.lock @@ -333,9 +333,9 @@ checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de" [[package]] name = "async-trait" -version = "0.1.85" +version = "0.1.86" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f934833b4b7233644e5848f235df3f57ed8c80f1528a26c3dfa13d2147fa056" +checksum = "644dd749086bf3771a2fbc5f256fdb982d53f011c7d5d560304eafeecebce79d" dependencies = [ "proc-macro2", "quote", @@ -439,7 +439,7 @@ checksum = "8f68f53c83ab957f72c32642f3868eec03eb974d1fb82e453128456482613d36" [[package]] name = "bitwarden-russh" version = "0.1.0" -source = "git+https://github.com/bitwarden/bitwarden-russh.git?rev=23b50e3bbe6d56ef19ab0e98e8bb1462cb6d77ae#23b50e3bbe6d56ef19ab0e98e8bb1462cb6d77ae" +source = "git+https://github.com/bitwarden/bitwarden-russh.git?rev=3d48f140fd506412d186203238993163a8c4e536#3d48f140fd506412d186203238993163a8c4e536" dependencies = [ "anyhow", "byteorder", @@ -519,9 +519,9 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" -version = "1.9.0" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "325918d6fe32f23b19878fe4b34794ae41fc19ddbe53b10571a4874d44ffd39b" +checksum = "f61dac84819c6588b558454b194026eb1f09c293b9036ae9b159e74e73ab6cf9" [[package]] name = "camino" @@ -635,9 +635,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.27" +version = "4.5.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "769b0145982b4b48713e01ec42d61614425f27b7058bda7180a3a41f30104796" +checksum = "027bb0d98429ae334a8698531da7077bdf906419543a35a55c2cb1b66437d767" dependencies = [ "clap_builder", "clap_derive", @@ -645,9 +645,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.27" +version = "4.5.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b26884eb4b57140e4d2d93652abfa49498b938b3c9179f9fc487b0acc3edad7" +checksum = "5589e0cba072e0f3d23791efac0fd8627b49c829c196a492e88168e6a669d863" dependencies = [ "anstream", "anstyle", @@ -657,9 +657,9 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.5.24" +version = "4.5.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54b755194d6389280185988721fffba69495eed5ee9feeee9a599b53db80318c" +checksum = "bf4ced95c6f4a675af3da73304b9ac4ed991640c36374e4b46795c49e17cf1ed" dependencies = [ "heck", "proc-macro2", @@ -830,9 +830,9 @@ dependencies = [ [[package]] name = "cxx" -version = "1.0.137" +version = "1.0.141" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fc894913dccfed0f84106062c284fa021c3ba70cb1d78797d6f5165d4492e45" +checksum = "8bc580dceb395cae0efdde0a88f034cfd8a276897e40c693a7b87bed17971d33" dependencies = [ "cc", "cxxbridge-cmd", @@ -844,9 +844,9 @@ dependencies = [ [[package]] name = "cxx-build" -version = "1.0.137" +version = "1.0.141" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "503b2bfb6b3e8ce7f95d865a67419451832083d3186958290cee6c53e39dfcfe" +checksum = "49d8c1baedad72a7efda12ad8d7ad687b3e7221dfb304a12443fd69e9de8bb30" dependencies = [ "cc", "codespan-reporting", @@ -858,9 +858,9 @@ dependencies = [ [[package]] name = "cxxbridge-cmd" -version = "1.0.137" +version = "1.0.141" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0d2cb64a95b4b5a381971482235c4db2e0208302a962acdbe314db03cbbe2fb" +checksum = "e43afb0e3b2ef293492a31ecd796af902112460d53e5f923f7804f348a769f9c" dependencies = [ "clap", "codespan-reporting", @@ -871,15 +871,15 @@ dependencies = [ [[package]] name = "cxxbridge-flags" -version = "1.0.137" +version = "1.0.141" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f797b0206463c9c2a68ed605ab28892cca784f1ef066050f4942e3de26ad885" +checksum = "0257ad2096a2474fe877e9e055ab69603851c3d6b394efcc7e0443899c2492ce" [[package]] name = "cxxbridge-macro" -version = "1.0.137" +version = "1.0.141" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e79010a2093848e65a3e0f7062d3f02fb2ef27f866416dfe436fccfa73d3bb59" +checksum = "b46cbd7358a46b760609f1cb5093683328e58ca50e594a308716f5403fdc03e5" dependencies = [ "proc-macro2", "quote", @@ -942,6 +942,7 @@ dependencies = [ "base64", "bitwarden-russh", "byteorder", + "bytes", "cbc", "core-foundation", "desktop_objc", @@ -1055,15 +1056,6 @@ dependencies = [ "windows-sys 0.59.0", ] -[[package]] -name = "dlib" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "330c60081dcc4c72131f8eb70510f1ac07223e5d4163db481a04a0befcffa412" -dependencies = [ - "libloading", -] - [[package]] name = "doctest-file" version = "1.0.0" @@ -1100,9 +1092,9 @@ dependencies = [ [[package]] name = "either" -version = "1.13.0" +version = "1.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" +checksum = "b7914353092ddf589ad78f25c5c1c21b7f80b0ff8621e7c814c3485b5306da9d" [[package]] name = "embed_plist" @@ -1139,9 +1131,9 @@ dependencies = [ [[package]] name = "equivalent" -version = "1.0.1" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" +checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" [[package]] name = "errno" @@ -1469,9 +1461,9 @@ dependencies = [ [[package]] name = "inout" -version = "0.1.3" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5" +checksum = "879f10e63c20629ecabbb64a8010319738c66a5cd0c29b02d63d272b03751d01" dependencies = [ "block-padding", "generic-array", @@ -1670,9 +1662,9 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] name = "miniz_oxide" -version = "0.8.3" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8402cab7aefae129c6977bb0ff1b8fd9a04eb5b51efc50a70bea51cda0c7924" +checksum = "8e3e04debbb59698c15bacbb6d93584a8c0ca9cc3213cb423d31f760d8843ce5" dependencies = [ "adler2", ] @@ -2007,9 +1999,9 @@ dependencies = [ [[package]] name = "once_cell" -version = "1.20.2" +version = "1.20.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" +checksum = "945462a4b81e43c4e3ba96bd7b49d834c6f61198356aa858733bc4acf3cbe62e" [[package]] name = "oo7" @@ -2310,9 +2302,9 @@ dependencies = [ [[package]] name = "prettyplease" -version = "0.2.27" +version = "0.2.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "483f8c21f64f3ea09fe0f30f5d48c3e8eefe5dac9129f0075f76593b4c1da705" +checksum = "6924ced06e1f7dfe3fa48d57b9f74f55d8915f5036121bef647ef4b204895fac" dependencies = [ "proc-macro2", "syn", @@ -2338,9 +2330,9 @@ dependencies = [ [[package]] name = "quick-xml" -version = "0.36.2" +version = "0.37.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7649a7b4df05aed9ea7ec6f628c67c9953a43869b8bc50929569b2999d443fe" +checksum = "165859e9e55f79d67b96c5d96f4e88b6f2695a1972849c15a6a3f5c59fc2c003" dependencies = [ "memchr", ] @@ -2412,9 +2404,9 @@ checksum = "d3edd4d5d42c92f0a659926464d4cce56b562761267ecf0f469d85b7de384175" [[package]] name = "redox_syscall" -version = "0.5.8" +version = "0.5.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03a862b389f93e68874fbf580b9de08dd02facb9a788ebadaf4a3fd33cf58834" +checksum = "82b568323e98e49e2a0899dcee453dd679fae22d69adf9b11dd508d1549b7e2f" dependencies = [ "bitflags", ] @@ -2498,9 +2490,9 @@ checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" [[package]] name = "rustc-hash" -version = "2.1.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7fb8039b3032c191086b10f11f319a6e99e1e82889c5cc6046f515c9db1d497" +checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d" [[package]] name = "rustc_version" @@ -2545,12 +2537,6 @@ dependencies = [ "cipher", ] -[[package]] -name = "scoped-tls" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" - [[package]] name = "scopeguard" version = "1.2.0" @@ -2744,9 +2730,9 @@ dependencies = [ [[package]] name = "smallvec" -version = "1.13.2" +version = "1.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" +checksum = "7fcf8323ef1faaee30a44a340193b1ac6814fd9b7b4e88e9d4519a3e4abe1cfd" [[package]] name = "smawk" @@ -2847,9 +2833,9 @@ checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" [[package]] name = "syn" -version = "2.0.96" +version = "2.0.98" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5d0adab1ae378d7f53bdebc67a39f1f151407ef230f0ce2883572f5d8985c80" +checksum = "36147f1a48ae0ec2b5b3bc5b537d267457555a10dc06f3dbc8cb11ba3006d3b1" dependencies = [ "proc-macro2", "quote", @@ -2872,9 +2858,9 @@ dependencies = [ [[package]] name = "tempfile" -version = "3.16.0" +version = "3.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38c246215d7d24f48ae091a2902398798e05d978b24315d6efbc00ede9a8bb91" +checksum = "22e5a0acb1f3f55f65cc4a866c361b2fb2a0ff6366785ae6fbb5f85df07ba230" dependencies = [ "cfg-if", "fastrand", @@ -3043,9 +3029,9 @@ checksum = "0dd7358ecb8fc2f8d014bf86f6f638ce72ba252a2c3a2572f2a795f1d23efb41" [[package]] name = "toml_edit" -version = "0.22.22" +version = "0.22.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ae48d6208a266e853d946088ed816055e556cc6028c5e8e2b84d9fa5dd7c7f5" +checksum = "17b4795ff5edd201c7cd6dca065ae59972ce77d1b80fa0a84d94950ece7d1474" dependencies = [ "indexmap", "toml_datetime", @@ -3121,9 +3107,9 @@ checksum = "75b844d17643ee918803943289730bec8aac480150456169e647ed0b576ba539" [[package]] name = "unicode-ident" -version = "1.0.16" +version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a210d160f08b701c8721ba1c726c11662f877ea6b7094007e1ca9a1041945034" +checksum = "00e2473a93778eb0bad35909dff6a10d28e63f792f16ed15e404fca9d5eeedbe" [[package]] name = "unicode-segmentation" @@ -3306,23 +3292,22 @@ dependencies = [ [[package]] name = "wayland-backend" -version = "0.3.7" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "056535ced7a150d45159d3a8dc30f91a2e2d588ca0b23f70e56033622b8016f6" +checksum = "b7208998eaa3870dad37ec8836979581506e0c5c64c20c9e79e9d2a10d6f47bf" dependencies = [ "cc", "downcast-rs", "rustix", - "scoped-tls", "smallvec", "wayland-sys", ] [[package]] name = "wayland-client" -version = "0.31.7" +version = "0.31.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b66249d3fc69f76fd74c82cc319300faa554e9d865dab1f7cd66cc20db10b280" +checksum = "c2120de3d33638aaef5b9f4472bff75f07c56379cf76ea320bd3a3d65ecaf73f" dependencies = [ "bitflags", "rustix", @@ -3357,9 +3342,9 @@ dependencies = [ [[package]] name = "wayland-scanner" -version = "0.31.5" +version = "0.31.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "597f2001b2e5fc1121e3d5b9791d3e78f05ba6bfa4641053846248e3a13661c3" +checksum = "896fdafd5d28145fce7958917d69f2fd44469b1d4e861cb5961bcbeebc6d1484" dependencies = [ "proc-macro2", "quick-xml", @@ -3368,12 +3353,10 @@ dependencies = [ [[package]] name = "wayland-sys" -version = "0.31.5" +version = "0.31.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "efa8ac0d8e8ed3e3b5c9fc92c7881406a268e11555abe36493efabe649a29e09" +checksum = "dbcebb399c77d5aa9fa5db874806ee7b4eba4e73650948e8f93963f128896615" dependencies = [ - "dlib", - "log", "pkg-config", ] @@ -3512,6 +3495,12 @@ dependencies = [ "syn", ] +[[package]] +name = "windows-link" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6dccfd733ce2b1753b03b6d3c65edf020262ea35e20ccdf3e288043e6dd620e3" + [[package]] name = "windows-plugin-authenticator" version = "0.0.0" @@ -3525,8 +3514,8 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4286ad90ddb45071efd1a66dfa43eb02dd0dfbae1545ad6cc3c51cf34d7e8ba3" dependencies = [ - "windows-result 0.3.0", - "windows-strings 0.3.0", + "windows-result 0.3.1", + "windows-strings 0.3.1", "windows-targets 0.53.0", ] @@ -3550,11 +3539,11 @@ dependencies = [ [[package]] name = "windows-result" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d08106ce80268c4067c0571ca55a9b4e9516518eaa1a1fe9b37ca403ae1d1a34" +checksum = "06374efe858fab7e4f881500e6e86ec8bc28f9462c47e5a9941a0142ad86b189" dependencies = [ - "windows-targets 0.53.0", + "windows-link", ] [[package]] @@ -3569,11 +3558,11 @@ dependencies = [ [[package]] name = "windows-strings" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b888f919960b42ea4e11c2f408fadb55f78a9f236d5eef084103c8ce52893491" +checksum = "87fa48cc5d406560701792be122a10132491cff9d0aeb23583cc2dcafc847319" dependencies = [ - "windows-targets 0.53.0", + "windows-link", ] [[package]] @@ -3781,9 +3770,9 @@ checksum = "271414315aff87387382ec3d271b52d7ae78726f5d44ac98b4f4030c91880486" [[package]] name = "winnow" -version = "0.6.25" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad699df48212c6cc6eb4435f35500ac6fd3b9913324f938aea302022ce19d310" +checksum = "0e7f4ea97f6f78012141bcdb6a216b2609f0979ada50b20ca5b52dde2eac2bb1" dependencies = [ "memchr", ] diff --git a/apps/desktop/desktop_native/Cargo.toml b/apps/desktop/desktop_native/Cargo.toml index 78142d618ed..5478d397651 100644 --- a/apps/desktop/desktop_native/Cargo.toml +++ b/apps/desktop/desktop_native/Cargo.toml @@ -2,6 +2,12 @@ resolver = "2" members = ["napi", "core", "proxy", "macos_provider", "windows-plugin-authenticator"] +[workspace.package] +version = "0.0.0" +license = "GPL-3.0" +edition = "2021" +publish = false + [workspace.dependencies] anyhow = "=1.0.94" log = "=0.4.25" diff --git a/apps/desktop/desktop_native/core/Cargo.toml b/apps/desktop/desktop_native/core/Cargo.toml index 03b5a60b8b1..8a0bcd0e0a7 100644 --- a/apps/desktop/desktop_native/core/Cargo.toml +++ b/apps/desktop/desktop_native/core/Cargo.toml @@ -1,9 +1,9 @@ [package] -edition = "2021" -license = "GPL-3.0" name = "desktop_core" -version = "0.0.0" -publish = false +edition = { workspace = true } +license = { workspace = true } +version = { workspace = true } +publish = { workspace = true } [features] default = [ @@ -19,9 +19,9 @@ manual_test = [] [dependencies] aes = "=0.8.4" -anyhow.workspace = true +anyhow = { workspace = true } arboard = { version = "=3.4.1", default-features = false, features = [ - "wayland-data-control", + "wayland-data-control", ] } argon2 = { version = "=0.5.3", features = ["zeroize"] } base64 = "=0.22.1" @@ -32,42 +32,43 @@ pin-project = "=1.1.8" dirs = "=6.0.0" futures = "=0.3.31" interprocess = { version = "=2.2.1", features = ["tokio"] } -log.workspace = true +log = { workspace = true } rand = "=0.8.5" russh-cryptovec = "=0.7.3" scopeguard = "=1.2.0" sha2 = "=0.10.8" ssh-encoding = "=0.2.0" ssh-key = { version = "=0.6.7", default-features = false, features = [ - "encryption", - "ed25519", - "rsa", - "getrandom", + "encryption", + "ed25519", + "rsa", + "getrandom", ] } -bitwarden-russh = { git = "https://github.com/bitwarden/bitwarden-russh.git", rev = "23b50e3bbe6d56ef19ab0e98e8bb1462cb6d77ae" } +bitwarden-russh = { git = "https://github.com/bitwarden/bitwarden-russh.git", rev = "3d48f140fd506412d186203238993163a8c4e536" } tokio = { workspace = true, features = ["io-util", "sync", "macros", "net"] } tokio-stream = { workspace = true, features = ["net"] } tokio-util = { workspace = true, features = ["codec"] } -thiserror.workspace = true +thiserror = { workspace = true } typenum = "=1.17.0" pkcs8 = { version = "=0.10.2", features = ["alloc", "encryption", "pem"] } rsa = "=0.9.6" ed25519 = { version = "=2.2.3", features = ["pkcs8"] } -sysinfo = { version = "=0.33.1", features = ["windows"] } +bytes = "1.9.0" +sysinfo = { version = "0.33.1", features = ["windows"] } [target.'cfg(windows)'.dependencies] widestring = { version = "=1.1.0", optional = true } windows = { version = "=0.58.0", features = [ - "Foundation", - "Security_Credentials_UI", - "Security_Cryptography", - "Storage_Streams", - "Win32_Foundation", - "Win32_Security_Credentials", - "Win32_System_WinRT", - "Win32_UI_Input_KeyboardAndMouse", - "Win32_UI_WindowsAndMessaging", - "Win32_System_Pipes", + "Foundation", + "Security_Credentials_UI", + "Security_Cryptography", + "Storage_Streams", + "Win32_Foundation", + "Win32_Security_Credentials", + "Win32_System_WinRT", + "Win32_UI_Input_KeyboardAndMouse", + "Win32_UI_WindowsAndMessaging", + "Win32_System_Pipes", ], optional = true } [target.'cfg(windows)'.dev-dependencies] diff --git a/apps/desktop/desktop_native/core/src/ssh_agent/mod.rs b/apps/desktop/desktop_native/core/src/ssh_agent/mod.rs index 4e304ccea78..3fe327948f8 100644 --- a/apps/desktop/desktop_native/core/src/ssh_agent/mod.rs +++ b/apps/desktop/desktop_native/core/src/ssh_agent/mod.rs @@ -18,6 +18,8 @@ mod peercred_unix_listener_stream; pub mod importer; pub mod peerinfo; +mod request_parser; + #[derive(Clone)] pub struct BitwardenDesktopAgent { keystore: ssh_agent::KeyStore, @@ -35,19 +37,37 @@ pub struct SshAgentUIRequest { pub cipher_id: Option, pub process_name: String, pub is_list: bool, + pub namespace: Option, + pub is_forwarding: bool, } impl ssh_agent::Agent for BitwardenDesktopAgent { - async fn confirm(&self, ssh_key: Key, info: &peerinfo::models::PeerInfo) -> bool { + async fn confirm(&self, ssh_key: Key, data: &[u8], info: &peerinfo::models::PeerInfo) -> bool { if !self.is_running() { println!("[BitwardenDesktopAgent] Agent is not running, but tried to call confirm"); return false; } let request_id = self.get_request_id().await; + let request_data = match request_parser::parse_request(data) { + Ok(data) => data, + Err(e) => { + println!("[SSH Agent] Error while parsing request: {}", e); + return false; + } + }; + let namespace = match request_data { + request_parser::SshAgentSignRequest::SshSigRequest(ref req) => { + Some(req.namespace.clone()) + } + _ => None, + }; + println!( - "[SSH Agent] Confirming request from application: {}", - info.process_name() + "[SSH Agent] Confirming request from application: {}, is_forwarding: {}, namespace: {}", + info.process_name(), + info.is_forwarding(), + namespace.clone().unwrap_or_default(), ); let mut rx_channel = self.get_ui_response_rx.lock().await.resubscribe(); @@ -57,6 +77,8 @@ impl ssh_agent::Agent for BitwardenDesktopAgent { cipher_id: Some(ssh_key.cipher_uuid.clone()), process_name: info.process_name().to_string(), is_list: false, + namespace, + is_forwarding: info.is_forwarding(), }) .await .expect("Should send request to ui"); @@ -81,6 +103,8 @@ impl ssh_agent::Agent for BitwardenDesktopAgent { cipher_id: None, process_name: info.process_name().to_string(), is_list: true, + namespace: None, + is_forwarding: info.is_forwarding(), }; self.show_ui_request_tx .send(message) @@ -93,6 +117,17 @@ impl ssh_agent::Agent for BitwardenDesktopAgent { } false } + + async fn set_is_forwarding( + &self, + is_forwarding: bool, + connection_info: &peerinfo::models::PeerInfo, + ) { + // is_forwarding can only be added but never removed from a connection + if is_forwarding { + connection_info.set_forwarding(is_forwarding); + } + } } impl BitwardenDesktopAgent { diff --git a/apps/desktop/desktop_native/core/src/ssh_agent/peercred_unix_listener_stream.rs b/apps/desktop/desktop_native/core/src/ssh_agent/peercred_unix_listener_stream.rs index f0114fc08da..77eec5e35c7 100644 --- a/apps/desktop/desktop_native/core/src/ssh_agent/peercred_unix_listener_stream.rs +++ b/apps/desktop/desktop_native/core/src/ssh_agent/peercred_unix_listener_stream.rs @@ -31,26 +31,15 @@ impl Stream for PeercredUnixListenerStream { Ok(peer) => match peer.pid() { Some(pid) => pid, None => { - return Poll::Ready(Some(Err(io::Error::new( - io::ErrorKind::Other, - "Failed to get peer PID", - )))); + return Poll::Ready(Some(Ok((stream, PeerInfo::unknown())))); } }, - Err(err) => { - return Poll::Ready(Some(Err(io::Error::new( - io::ErrorKind::Other, - format!("Failed to get peer credentials: {}", err), - )))); - } + Err(_) => return Poll::Ready(Some(Ok((stream, PeerInfo::unknown())))), }; let peer_info = peerinfo::gather::get_peer_info(pid as u32); match peer_info { Ok(info) => Poll::Ready(Some(Ok((stream, info)))), - Err(err) => Poll::Ready(Some(Err(io::Error::new( - io::ErrorKind::Other, - format!("Failed to get peer info: {}", err), - )))), + Err(_) => Poll::Ready(Some(Ok((stream, PeerInfo::unknown())))), } } Poll::Ready(Err(err)) => Poll::Ready(Some(Err(err))), diff --git a/apps/desktop/desktop_native/core/src/ssh_agent/peerinfo/models.rs b/apps/desktop/desktop_native/core/src/ssh_agent/peerinfo/models.rs index 823d912883e..35a5a508263 100644 --- a/apps/desktop/desktop_native/core/src/ssh_agent/peerinfo/models.rs +++ b/apps/desktop/desktop_native/core/src/ssh_agent/peerinfo/models.rs @@ -1,3 +1,5 @@ +use std::sync::{atomic::AtomicBool, Arc}; + /** * Peerinfo represents the information of a peer process connecting over a socket. * This can be later extended to include more information (icon, app name) for the corresponding application. @@ -7,6 +9,7 @@ pub struct PeerInfo { uid: u32, pid: u32, process_name: String, + is_forwarding: Arc, } impl PeerInfo { @@ -15,6 +18,16 @@ impl PeerInfo { uid, pid, process_name, + is_forwarding: Arc::new(AtomicBool::new(false)), + } + } + + pub fn unknown() -> Self { + Self { + uid: 0, + pid: 0, + process_name: "Unknown application".to_string(), + is_forwarding: Arc::new(AtomicBool::new(false)), } } @@ -29,4 +42,14 @@ impl PeerInfo { pub fn process_name(&self) -> &str { &self.process_name } + + pub fn is_forwarding(&self) -> bool { + self.is_forwarding + .load(std::sync::atomic::Ordering::Relaxed) + } + + pub fn set_forwarding(&self, value: bool) { + self.is_forwarding + .store(value, std::sync::atomic::Ordering::Relaxed); + } } diff --git a/apps/desktop/desktop_native/core/src/ssh_agent/request_parser.rs b/apps/desktop/desktop_native/core/src/ssh_agent/request_parser.rs new file mode 100644 index 00000000000..e93aa19869e --- /dev/null +++ b/apps/desktop/desktop_native/core/src/ssh_agent/request_parser.rs @@ -0,0 +1,41 @@ +use bytes::{Buf, Bytes}; + +#[derive(Debug)] +pub(crate) struct SshSigRequest { + pub namespace: String, +} + +#[derive(Debug)] +pub(crate) struct SignRequest {} + +#[derive(Debug)] +pub(crate) enum SshAgentSignRequest { + SshSigRequest(SshSigRequest), + SignRequest(SignRequest), +} + +pub(crate) fn parse_request(data: &[u8]) -> Result { + let mut data = Bytes::copy_from_slice(data); + let magic_header = "SSHSIG"; + let header = data.split_to(magic_header.len()); + + // sshsig; based on https://github.com/openssh/openssh-portable/blob/master/PROTOCOL.sshsig + if header == magic_header.as_bytes() { + let _version = data.get_u32(); + + // read until null byte + let namespace = data + .into_iter() + .take_while(|&x| x != 0) + .collect::>(); + let namespace = + String::from_utf8(namespace).map_err(|_| anyhow::anyhow!("Invalid namespace"))?; + + Ok(SshAgentSignRequest::SshSigRequest(SshSigRequest { + namespace, + })) + } else { + // regular sign request + Ok(SshAgentSignRequest::SignRequest(SignRequest {})) + } +} diff --git a/apps/desktop/desktop_native/core/src/ssh_agent/unix.rs b/apps/desktop/desktop_native/core/src/ssh_agent/unix.rs index ae03421a425..6644da508f4 100644 --- a/apps/desktop/desktop_native/core/src/ssh_agent/unix.rs +++ b/apps/desktop/desktop_native/core/src/ssh_agent/unix.rs @@ -28,7 +28,7 @@ impl BitwardenDesktopAgent { show_ui_request_tx: auth_request_tx, get_ui_response_rx: auth_response_rx, request_id: Arc::new(AtomicU32::new(0)), - needs_unlock: Arc::new(AtomicBool::new(false)), + needs_unlock: Arc::new(AtomicBool::new(true)), is_running: Arc::new(AtomicBool::new(false)), }; let cloned_agent_state = agent.clone(); @@ -47,11 +47,21 @@ impl BitwardenDesktopAgent { return; } }; - ssh_agent_directory - .join(".bitwarden-ssh-agent.sock") - .to_str() - .expect("Path should be valid") - .to_owned() + + let is_flatpak = std::env::var("container") == Ok("flatpak".to_string()); + if !is_flatpak { + ssh_agent_directory + .join(".bitwarden-ssh-agent.sock") + .to_str() + .expect("Path should be valid") + .to_owned() + } else { + ssh_agent_directory + .join(".var/app/com.bitwarden.desktop/data/.bitwarden-ssh-agent.sock") + .to_str() + .expect("Path should be valid") + .to_owned() + } } }; diff --git a/apps/desktop/desktop_native/macos_provider/Cargo.toml b/apps/desktop/desktop_native/macos_provider/Cargo.toml index a488ce88a1c..e160f7f35d6 100644 --- a/apps/desktop/desktop_native/macos_provider/Cargo.toml +++ b/apps/desktop/desktop_native/macos_provider/Cargo.toml @@ -1,9 +1,9 @@ [package] name = "macos_provider" -license = "GPL-3.0" -version = "0.0.0" -edition = "2021" -publish = false +edition = { workspace = true } +license = { workspace = true } +version = { workspace = true } +publish = { workspace = true } [[bin]] name = "uniffi-bindgen" @@ -16,11 +16,11 @@ bench = false [dependencies] desktop_core = { path = "../core" } futures = "=0.3.31" -log.workspace = true +log = { workspace = true } serde = { workspace = true, features = ["derive"] } -serde_json.workspace = true +serde_json = { workspace = true } tokio = { workspace = true, features = ["sync"] } -tokio-util.workspace = true +tokio-util = { workspace = true } uniffi = { version = "=0.28.3", features = ["cli"] } [target.'cfg(target_os = "macos")'.dependencies] diff --git a/apps/desktop/desktop_native/napi/Cargo.toml b/apps/desktop/desktop_native/napi/Cargo.toml index 73afee72b55..a9513fa49a8 100644 --- a/apps/desktop/desktop_native/napi/Cargo.toml +++ b/apps/desktop/desktop_native/napi/Cargo.toml @@ -1,10 +1,10 @@ [package] -edition = "2021" -exclude = ["index.node"] -license = "GPL-3.0" name = "desktop_napi" -version = "0.0.0" -publish = false +exclude = ["index.node"] +edition = { workspace = true } +license = { workspace = true } +version = { workspace = true } +publish = { workspace = true } [lib] crate-type = ["cdylib"] @@ -16,15 +16,15 @@ manual_test = [] [dependencies] base64 = "=0.22.1" hex = "=0.4.3" -anyhow = "=1.0.94" +anyhow = { workspace = true } desktop_core = { path = "../core" } napi = { version = "=2.16.15", features = ["async"] } napi-derive = "=2.16.13" serde = { workspace = true, features = ["derive"] } -serde_json.workspace = true -tokio.workspace = true -tokio-util.workspace = true -tokio-stream.workspace = true +serde_json = { workspace = true } +tokio = { workspace = true } +tokio-util = { workspace = true } +tokio-stream = { workspace = true } [target.'cfg(windows)'.dependencies] windows-registry = "=0.4.0" diff --git a/apps/desktop/desktop_native/napi/index.d.ts b/apps/desktop/desktop_native/napi/index.d.ts index 997e951c89e..c40b7aed487 100644 --- a/apps/desktop/desktop_native/napi/index.d.ts +++ b/apps/desktop/desktop_native/napi/index.d.ts @@ -67,7 +67,14 @@ export declare namespace sshagent { status: SshKeyImportStatus sshKey?: SshKey } - export function serve(callback: (err: Error | null, arg0: string | undefined | null, arg1: boolean, arg2: string) => any): Promise + export interface SshUiRequest { + cipherId?: string + isList: boolean + processName: string + isForwarding: boolean + namespace?: string + } + export function serve(callback: (err: Error | null, arg: SshUiRequest) => any): Promise export function stop(agentState: SshAgentState): void export function isRunning(agentState: SshAgentState): boolean export function setKeys(agentState: SshAgentState, newKeys: Array): void diff --git a/apps/desktop/desktop_native/napi/src/lib.rs b/apps/desktop/desktop_native/napi/src/lib.rs index 35566e16813..7d20bd50699 100644 --- a/apps/desktop/desktop_native/napi/src/lib.rs +++ b/apps/desktop/desktop_native/napi/src/lib.rs @@ -243,9 +243,18 @@ pub mod sshagent { } } + #[napi(object)] + pub struct SshUIRequest { + pub cipher_id: Option, + pub is_list: bool, + pub process_name: String, + pub is_forwarding: bool, + pub namespace: Option, + } + #[napi] pub async fn serve( - callback: ThreadsafeFunction<(Option, bool, String), CalleeHandled>, + callback: ThreadsafeFunction, ) -> napi::Result { let (auth_request_tx, mut auth_request_rx) = tokio::sync::mpsc::channel::(32); @@ -262,11 +271,13 @@ pub mod sshagent { let auth_response_tx_arc = cloned_response_tx_arc; let callback = cloned_callback; let promise_result: Result, napi::Error> = callback - .call_async(Ok(( - request.cipher_id, - request.is_list, - request.process_name, - ))) + .call_async(Ok(SshUIRequest { + cipher_id: request.cipher_id, + is_list: request.is_list, + process_name: request.process_name, + is_forwarding: request.is_forwarding, + namespace: request.namespace, + })) .await; match promise_result { Ok(promise_result) => match promise_result.await { diff --git a/apps/desktop/desktop_native/objc/Cargo.toml b/apps/desktop/desktop_native/objc/Cargo.toml index 2d6478c77c9..07961f8e13f 100644 --- a/apps/desktop/desktop_native/objc/Cargo.toml +++ b/apps/desktop/desktop_native/objc/Cargo.toml @@ -1,17 +1,17 @@ [package] -edition = "2021" -license = "GPL-3.0" name = "desktop_objc" -version = "0.0.0" -publish = false +edition = { workspace = true } +license = { workspace = true } +version = { workspace = true } +publish = { workspace = true } [features] default = [] [dependencies] -anyhow.workspace = true -thiserror.workspace = true -tokio.workspace = true +anyhow = { workspace = true } +thiserror = { workspace = true } +tokio = { workspace = true } [target.'cfg(target_os = "macos")'.dependencies] core-foundation = "=0.10.0" diff --git a/apps/desktop/desktop_native/objc/src/lib.rs b/apps/desktop/desktop_native/objc/src/lib.rs index eb969cb5f56..f5a7623cfc3 100644 --- a/apps/desktop/desktop_native/objc/src/lib.rs +++ b/apps/desktop/desktop_native/objc/src/lib.rs @@ -68,13 +68,13 @@ mod objc { use super::*; - extern "C" { - pub fn runCommand(context: *mut c_void, value: *const c_char); - pub fn freeObjCString(value: &ObjCString); + unsafe extern "C" { + pub unsafe fn runCommand(context: *mut c_void, value: *const c_char); + pub unsafe fn freeObjCString(value: &ObjCString); } /// This function is called from the ObjC code to return the output of the command - #[no_mangle] + #[unsafe(no_mangle)] pub extern "C" fn commandReturn(context: &mut CommandContext, value: ObjCString) -> bool { let value: String = match value.try_into() { Ok(value) => value, diff --git a/apps/desktop/desktop_native/proxy/Cargo.toml b/apps/desktop/desktop_native/proxy/Cargo.toml index 27f2856f3a6..10ff1ed8eae 100644 --- a/apps/desktop/desktop_native/proxy/Cargo.toml +++ b/apps/desktop/desktop_native/proxy/Cargo.toml @@ -1,16 +1,15 @@ [package] -edition = "2021" -exclude = ["index.node"] -license = "GPL-3.0" name = "desktop_proxy" -version = "0.0.0" -publish = false +edition = { workspace = true } +license = { workspace = true } +version = { workspace = true } +publish = { workspace = true } [dependencies] -anyhow.workspace = true +anyhow = { workspace = true } desktop_core = { path = "../core" } futures = "=0.3.31" -log.workspace = true +log = { workspace = true } simplelog = "=0.12.2" tokio = { workspace = true, features = ["io-std", "io-util", "macros", "rt"] } tokio-util = { workspace = true, features = ["codec"] } diff --git a/apps/desktop/desktop_native/windows-plugin-authenticator/Cargo.toml b/apps/desktop/desktop_native/windows-plugin-authenticator/Cargo.toml index b8759cfca3f..3443fed4fd6 100644 --- a/apps/desktop/desktop_native/windows-plugin-authenticator/Cargo.toml +++ b/apps/desktop/desktop_native/windows-plugin-authenticator/Cargo.toml @@ -1,9 +1,9 @@ [package] name = "windows-plugin-authenticator" -version = "0.0.0" -edition = "2021" -license = "GPL-3.0" -publish = false +edition = { workspace = true } +license = { workspace = true } +version = { workspace = true } +publish = { workspace = true } [target.'cfg(target_os = "windows")'.build-dependencies] bindgen = "0.71.1" diff --git a/apps/desktop/native-messaging-test-runner/package-lock.json b/apps/desktop/native-messaging-test-runner/package-lock.json index f9c5f0709e4..02a5e850401 100644 --- a/apps/desktop/native-messaging-test-runner/package-lock.json +++ b/apps/desktop/native-messaging-test-runner/package-lock.json @@ -12,15 +12,13 @@ "@bitwarden/common": "file:../../../libs/common", "@bitwarden/node": "file:../../../libs/node", "module-alias": "2.2.3", - "node-ipc": "9.2.1", "ts-node": "10.9.2", "uuid": "11.0.5", "yargs": "17.7.2" }, "devDependencies": { "@types/node": "22.10.7", - "@types/node-ipc": "9.2.3", - "typescript": "4.7.4" + "typescript": "5.4.2" } }, "../../../libs/common": { @@ -31,10 +29,7 @@ "../../../libs/node": { "name": "@bitwarden/node", "version": "0.0.0", - "license": "GPL-3.0", - "dependencies": { - "@bitwarden/common": "file:../common" - } + "license": "GPL-3.0" }, "node_modules/@bitwarden/common": { "resolved": "../../../libs/common", @@ -114,16 +109,6 @@ "undici-types": "~6.20.0" } }, - "node_modules/@types/node-ipc": { - "version": "9.2.3", - "resolved": "https://registry.npmjs.org/@types/node-ipc/-/node-ipc-9.2.3.tgz", - "integrity": "sha512-/MvSiF71fYf3+zwqkh/zkVkZj1hl1Uobre9EMFy08mqfJNAmpR0vmPgOUdEIDVgifxHj6G1vYMPLSBLLxoDACQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, "node_modules/acorn": { "version": "8.14.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", @@ -225,15 +210,6 @@ "node": ">=0.3.1" } }, - "node_modules/easy-stack": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/easy-stack/-/easy-stack-1.0.1.tgz", - "integrity": "sha512-wK2sCs4feiiJeFXn3zvY0p41mdU5VUgbgs1rNsc/y5ngFUijdWd+iIN8eoyuZHKB8xN6BL4PdWmzqFmxNg6V2w==", - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, "node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", @@ -249,15 +225,6 @@ "node": ">=6" } }, - "node_modules/event-pubsub": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/event-pubsub/-/event-pubsub-4.3.0.tgz", - "integrity": "sha512-z7IyloorXvKbFx9Bpie2+vMJKKx1fH1EN5yiTfp8CiLOTptSYy1g8H4yDpGlEdshL1PBiFtBHepF2cNsqeEeFQ==", - "license": "Unlicense", - "engines": { - "node": ">=4.0.0" - } - }, "node_modules/get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", @@ -276,27 +243,6 @@ "node": ">=8" } }, - "node_modules/js-message": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/js-message/-/js-message-1.0.7.tgz", - "integrity": "sha512-efJLHhLjIyKRewNS9EGZ4UpI8NguuL6fKkhRxVuMmrGV2xN/0APGdQYwLFky5w9naebSZ0OwAGp0G6/2Cg90rA==", - "license": "MIT", - "engines": { - "node": ">=0.6.0" - } - }, - "node_modules/js-queue": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/js-queue/-/js-queue-2.0.2.tgz", - "integrity": "sha512-pbKLsbCfi7kriM3s1J4DDCo7jQkI58zPLHi0heXPzPlj0hjUsm+FesPUbE0DSbIVIK503A36aUBoCN7eMFedkA==", - "license": "MIT", - "dependencies": { - "easy-stack": "^1.0.1" - }, - "engines": { - "node": ">=1.0.0" - } - }, "node_modules/make-error": { "version": "1.3.6", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", @@ -309,20 +255,6 @@ "integrity": "sha512-23g5BFj4zdQL/b6tor7Ji+QY4pEfNH784BMslY9Qb0UnJWRAt+lQGLYmRaM0KDBwIG23ffEBELhZDP2rhi9f/Q==", "license": "MIT" }, - "node_modules/node-ipc": { - "version": "9.2.1", - "resolved": "https://registry.npmjs.org/node-ipc/-/node-ipc-9.2.1.tgz", - "integrity": "sha512-mJzaM6O3xHf9VT8BULvJSbdVbmHUKRNOH7zDDkCrA1/T+CVjq2WVIDfLt0azZRXpgArJtl3rtmEozrbXPZ9GaQ==", - "license": "MIT", - "dependencies": { - "event-pubsub": "4.3.0", - "js-message": "1.0.7", - "js-queue": "2.0.2" - }, - "engines": { - "node": ">=8.0.0" - } - }, "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -402,16 +334,16 @@ } }, "node_modules/typescript": { - "version": "4.7.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz", - "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==", + "version": "5.4.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.2.tgz", + "integrity": "sha512-+2/g0Fds1ERlP6JsakQQDXjZdZMM+rqpamFZJEKh4kwTIn3iDkgKtby0CeNd5ATNZ4Ry1ax15TMx0W2V+miizQ==", "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" }, "engines": { - "node": ">=4.2.0" + "node": ">=14.17" } }, "node_modules/undici-types": { diff --git a/apps/desktop/native-messaging-test-runner/package.json b/apps/desktop/native-messaging-test-runner/package.json index 977b93e70d2..0df272c142f 100644 --- a/apps/desktop/native-messaging-test-runner/package.json +++ b/apps/desktop/native-messaging-test-runner/package.json @@ -17,15 +17,13 @@ "@bitwarden/common": "file:../../../libs/common", "@bitwarden/node": "file:../../../libs/node", "module-alias": "2.2.3", - "node-ipc": "9.2.1", "ts-node": "10.9.2", "uuid": "11.0.5", "yargs": "17.7.2" }, "devDependencies": { "@types/node": "22.10.7", - "@types/node-ipc": "9.2.3", - "typescript": "4.7.4" + "typescript": "5.4.2" }, "_moduleAliases": { "@bitwarden/common": "dist/libs/common/src", diff --git a/apps/desktop/native-messaging-test-runner/src/ipc.service.ts b/apps/desktop/native-messaging-test-runner/src/ipc.service.ts index 68c7ac73ab0..b02ff1a4225 100644 --- a/apps/desktop/native-messaging-test-runner/src/ipc.service.ts +++ b/apps/desktop/native-messaging-test-runner/src/ipc.service.ts @@ -1,9 +1,7 @@ /* eslint-disable no-console */ -// FIXME: Update this file to be type safe and remove this and next line -// @ts-strict-ignore -import { homedir } from "os"; - -import * as NodeIPC from "node-ipc"; +import { ChildProcess, spawn } from "child_process"; +import * as fs from "fs"; +import * as path from "path"; // eslint-disable-next-line no-restricted-imports import { MessageCommon } from "../../src/models/native-messaging/message-common"; @@ -13,11 +11,6 @@ import { UnencryptedMessageResponse } from "../../src/models/native-messaging/un import Deferred from "./deferred"; import { race } from "./race"; -NodeIPC.config.id = "native-messaging-test-runner"; -NodeIPC.config.maxRetries = 0; -NodeIPC.config.silent = true; - -const DESKTOP_APP_PATH = `${homedir}/tmp/app.bitwarden`; const DEFAULT_MESSAGE_TIMEOUT = 10 * 1000; // 10 seconds export type MessageHandler = (MessageCommon) => void; @@ -42,6 +35,10 @@ export default class IPCService { // A set of deferred promises that are awaiting socket connection private awaitingConnection = new Set>(); + // The IPC desktop_proxy process + private process?: ChildProcess; + private processOutputBuffer = Buffer.alloc(0); + constructor( private socketName: string, private messageHandler: MessageHandler, @@ -72,47 +69,47 @@ export default class IPCService { private _connect() { this.connectionState = IPCConnectionState.Connecting; - NodeIPC.connectTo(this.socketName, DESKTOP_APP_PATH, () => { - // Process incoming message - this.getSocket().on("message", (message: any) => { - this.processMessage(message); - }); + const proxyPath = selectProxyPath(); + console.log(`[IPCService] connecting to proxy at ${proxyPath}`); - this.getSocket().on("error", (error: Error) => { - // Only makes sense as long as config.maxRetries stays set to 0. Otherwise this will be - // invoked multiple times each time a connection error happens - console.log("[IPCService] errored"); - console.log( - "\x1b[33m Please make sure the desktop app is running locally and 'Allow DuckDuckGo browser integration' setting is enabled \x1b[0m", - ); - this.awaitingConnection.forEach((deferred) => { - console.log(`rejecting: ${deferred}`); - deferred.reject(error); - }); - this.awaitingConnection.clear(); - }); + this.process = spawn(proxyPath, process.argv.slice(1), { + cwd: process.cwd(), + stdio: "pipe", + shell: false, + }); - this.getSocket().on("connect", () => { - console.log("[IPCService] connected"); - this.connectionState = IPCConnectionState.Connected; + this.process.stdout.on("data", (data: Buffer) => { + this.processIpcMessage(data); + }); - this.awaitingConnection.forEach((deferred) => { - deferred.resolve(null); - }); - this.awaitingConnection.clear(); - }); + this.process.stderr.on("data", (data: Buffer) => { + console.error(`proxy log: ${data}`); + }); - this.getSocket().on("disconnect", () => { - console.log("[IPCService] disconnected"); - this.connectionState = IPCConnectionState.Disconnected; + this.process.on("error", (error) => { + // Only makes sense as long as config.maxRetries stays set to 0. Otherwise this will be + // invoked multiple times each time a connection error happens + console.log("[IPCService] errored"); + console.log( + "\x1b[33m Please make sure the desktop app is running locally and 'Allow DuckDuckGo browser integration' setting is enabled \x1b[0m", + ); + this.awaitingConnection.forEach((deferred) => { + console.log(`rejecting: ${deferred}`); + deferred.reject(error); }); + this.awaitingConnection.clear(); + }); + + this.process.on("exit", () => { + console.log("[IPCService] disconnected"); + this.connectionState = IPCConnectionState.Disconnected; }); } disconnect() { console.log("[IPCService] disconnecting..."); if (this.connectionState !== IPCConnectionState.Disconnected) { - NodeIPC.disconnect(this.socketName); + this.process?.kill(); } } @@ -133,7 +130,7 @@ export default class IPCService { this.pendingMessages.set(message.messageId, deferred); - this.getSocket().emit("message", message); + this.sendIpcMessage(message); try { // Since we can not guarantee that a response message will ever be sent, we put a timeout @@ -151,8 +148,56 @@ export default class IPCService { } } - private getSocket() { - return NodeIPC.of[this.socketName]; + // As we're using the desktop_proxy to communicate with the native messaging directly, + // the messages need to follow Native Messaging Host protocol (uint32 size followed by message). + // https://developer.chrome.com/docs/extensions/develop/concepts/native-messaging#native-messaging-host-protocol + private sendIpcMessage(message: MessageCommon) { + const messageStr = JSON.stringify(message); + const buffer = Buffer.alloc(4 + messageStr.length); + buffer.writeUInt32LE(messageStr.length, 0); + buffer.write(messageStr, 4); + + this.process?.stdin.write(buffer); + } + + private processIpcMessage(data: Buffer) { + this.processOutputBuffer = Buffer.concat([this.processOutputBuffer, data]); + + // We might receive more than one IPC message per data event, so we need to process them all + // We continue as long as we have at least 4 + 1 bytes in the buffer, where the first 4 bytes + // represent the message length and the 5th byte is the message + while (this.processOutputBuffer.length > 4) { + // Read the message length and ensure we have the full message + const msgLength = this.processOutputBuffer.readUInt32LE(0); + if (msgLength + 4 < this.processOutputBuffer.length) { + return; + } + + // Parse the message from the buffer + const messageStr = this.processOutputBuffer.subarray(4, msgLength + 4).toString(); + const message = JSON.parse(messageStr); + + // Store the remaining buffer, which is part of the next message + this.processOutputBuffer = this.processOutputBuffer.subarray(msgLength + 4); + + // Process the connect/disconnect messages separately + if (message?.command === "connected") { + console.log("[IPCService] connected"); + this.connectionState = IPCConnectionState.Connected; + + this.awaitingConnection.forEach((deferred) => { + deferred.resolve(null); + }); + this.awaitingConnection.clear(); + continue; + } else if (message?.command === "disconnected") { + console.log("[IPCService] disconnected"); + this.connectionState = IPCConnectionState.Disconnected; + continue; + } + + this.processMessage(message); + } } private processMessage(message: any) { @@ -172,3 +217,41 @@ export default class IPCService { } } } + +function selectProxyPath(): string { + const proxyExtension = process.platform === "win32" ? ".exe" : ""; + + // If the PROXY_PATH environment variable is set, use that + if (process.env.PROXY_PATH) { + if (!fs.existsSync(process.env.PROXY_PATH)) { + throw new Error(`PROXY_PATH is set to ${process.env.PROXY_PATH} but the file does not exist`); + } + return process.env.PROXY_PATH; + } + + // Otherwise try the debug build if present + const debugProxyPath = path.join( + __dirname, + "..", + "..", + "..", + "..", + "..", + "..", + "desktop_native", + "target", + "debug", + `desktop_proxy${proxyExtension}`, + ); + if (fs.existsSync(debugProxyPath)) { + return debugProxyPath; + } + + // On MacOS, try the release build (sandboxed) + const macReleaseProxyPath = `/Applications/Bitwarden.app/Contents/MacOS/desktop_proxy${proxyExtension}`; + if (process.platform === "darwin" && fs.existsSync(macReleaseProxyPath)) { + return macReleaseProxyPath; + } + + throw new Error("Could not find the desktop_proxy executable"); +} diff --git a/apps/desktop/native-messaging-test-runner/tsconfig.json b/apps/desktop/native-messaging-test-runner/tsconfig.json index 72a28de3f7a..59c7040e509 100644 --- a/apps/desktop/native-messaging-test-runner/tsconfig.json +++ b/apps/desktop/native-messaging-test-runner/tsconfig.json @@ -5,12 +5,17 @@ "target": "es6", "module": "CommonJS", "moduleResolution": "node", + "emitDecoratorMetadata": true, + "experimentalDecorators": true, "sourceMap": false, "declaration": false, "paths": { "@src/*": ["src/*"], - "@bitwarden/node/*": ["../../../libs/node/src/*"], - "@bitwarden/common/*": ["../../../libs/common/src/*"] + "@bitwarden/admin-console/*": ["../../../libs/admin-console/src/*"], + "@bitwarden/auth/*": ["../../../libs/auth/src/*"], + "@bitwarden/common/*": ["../../../libs/common/src/*"], + "@bitwarden/key-management": ["../../../libs/key-management/src/"], + "@bitwarden/node/*": ["../../../libs/node/src/*"] }, "plugins": [ { diff --git a/apps/desktop/package.json b/apps/desktop/package.json index 992f218f6c6..d4fe93d05b9 100644 --- a/apps/desktop/package.json +++ b/apps/desktop/package.json @@ -1,7 +1,7 @@ { "name": "@bitwarden/desktop", "description": "A secure and free password manager for all of your devices.", - "version": "2025.2.2", + "version": "2025.3.0", "keywords": [ "bitwarden", "password", diff --git a/apps/desktop/postcss.config.js b/apps/desktop/postcss.config.js index 05e2b04124f..5657df3afcf 100644 --- a/apps/desktop/postcss.config.js +++ b/apps/desktop/postcss.config.js @@ -1,4 +1,4 @@ -/* eslint-disable @typescript-eslint/no-require-imports, no-undef */ +/* eslint-disable @typescript-eslint/no-require-imports */ module.exports = { plugins: [ require("postcss-import"), diff --git a/apps/desktop/src/app/accounts/settings.component.spec.ts b/apps/desktop/src/app/accounts/settings.component.spec.ts index 3caad4d5af8..342d4717511 100644 --- a/apps/desktop/src/app/accounts/settings.component.spec.ts +++ b/apps/desktop/src/app/accounts/settings.component.spec.ts @@ -6,7 +6,6 @@ import { firstValueFrom, of } from "rxjs"; import { I18nPipe } from "@bitwarden/angular/platform/pipes/i18n.pipe"; import { PinServiceAbstraction } from "@bitwarden/auth/common"; -import { VaultTimeoutSettingsService } from "@bitwarden/common/abstractions/vault-timeout/vault-timeout-settings.service"; import { PolicyService } from "@bitwarden/common/admin-console/abstractions/policy/policy.service.abstraction"; import { PolicyType } from "@bitwarden/common/admin-console/enums"; import { Policy } from "@bitwarden/common/admin-console/models/domain/policy"; @@ -15,7 +14,11 @@ import { UserVerificationService } from "@bitwarden/common/auth/abstractions/use import { AutofillSettingsServiceAbstraction } from "@bitwarden/common/autofill/services/autofill-settings.service"; import { DomainSettingsService } from "@bitwarden/common/autofill/services/domain-settings.service"; import { DeviceType } from "@bitwarden/common/enums"; -import { VaultTimeoutAction } from "@bitwarden/common/enums/vault-timeout-action.enum"; +import { + VaultTimeoutSettingsService, + VaultTimeoutStringType, + VaultTimeoutAction, +} from "@bitwarden/common/key-management/vault-timeout"; import { ConfigService } from "@bitwarden/common/platform/abstractions/config/config.service"; import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; import { LogService } from "@bitwarden/common/platform/abstractions/log.service"; @@ -27,7 +30,6 @@ import { Utils } from "@bitwarden/common/platform/misc/utils"; import { ThemeStateService } from "@bitwarden/common/platform/theming/theme-state.service"; import { FakeAccountService, mockAccountServiceWith } from "@bitwarden/common/spec"; import { UserId } from "@bitwarden/common/types/guid"; -import { VaultTimeoutStringType } from "@bitwarden/common/types/vault-timeout.type"; import { DialogService } from "@bitwarden/components"; import { BiometricStateService, BiometricsStatus, KeyService } from "@bitwarden/key-management"; diff --git a/apps/desktop/src/app/accounts/settings.component.ts b/apps/desktop/src/app/accounts/settings.component.ts index 136036de68e..abb31fb0c0b 100644 --- a/apps/desktop/src/app/accounts/settings.component.ts +++ b/apps/desktop/src/app/accounts/settings.component.ts @@ -15,7 +15,6 @@ import { } from "rxjs/operators"; import { PinServiceAbstraction } from "@bitwarden/auth/common"; -import { VaultTimeoutSettingsService } from "@bitwarden/common/abstractions/vault-timeout/vault-timeout-settings.service"; import { PolicyService } from "@bitwarden/common/admin-console/abstractions/policy/policy.service.abstraction"; import { PolicyType } from "@bitwarden/common/admin-console/enums"; import { AccountService } from "@bitwarden/common/auth/abstractions/account.service"; @@ -24,22 +23,23 @@ import { AutofillSettingsServiceAbstraction } from "@bitwarden/common/autofill/s import { DomainSettingsService } from "@bitwarden/common/autofill/services/domain-settings.service"; import { DeviceType } from "@bitwarden/common/enums"; import { FeatureFlag } from "@bitwarden/common/enums/feature-flag.enum"; -import { VaultTimeoutAction } from "@bitwarden/common/enums/vault-timeout-action.enum"; +import { + VaultTimeout, + VaultTimeoutAction, + VaultTimeoutOption, + VaultTimeoutSettingsService, + VaultTimeoutStringType, +} from "@bitwarden/common/key-management/vault-timeout"; import { ConfigService } from "@bitwarden/common/platform/abstractions/config/config.service"; import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; import { LogService } from "@bitwarden/common/platform/abstractions/log.service"; import { MessagingService } from "@bitwarden/common/platform/abstractions/messaging.service"; import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service"; import { StateService } from "@bitwarden/common/platform/abstractions/state.service"; -import { ThemeType } from "@bitwarden/common/platform/enums/theme-type.enum"; +import { Theme, ThemeTypes } from "@bitwarden/common/platform/enums/theme-type.enum"; import { Utils } from "@bitwarden/common/platform/misc/utils"; import { ThemeStateService } from "@bitwarden/common/platform/theming/theme-state.service"; import { UserId } from "@bitwarden/common/types/guid"; -import { - VaultTimeout, - VaultTimeoutOption, - VaultTimeoutStringType, -} from "@bitwarden/common/types/vault-timeout.type"; import { DialogService } from "@bitwarden/components"; import { KeyService, BiometricStateService, BiometricsStatus } from "@bitwarden/key-management"; @@ -53,7 +53,6 @@ import { NativeMessagingManifestService } from "../services/native-messaging-man selector: "app-settings", templateUrl: "settings.component.html", }) -// eslint-disable-next-line rxjs-angular/prefer-takeuntil export class SettingsComponent implements OnInit, OnDestroy { // For use in template protected readonly VaultTimeoutAction = VaultTimeoutAction; @@ -129,7 +128,7 @@ export class SettingsComponent implements OnInit, OnDestroy { enableSshAgent: false, allowScreenshots: false, enableDuckDuckGoBrowserIntegration: false, - theme: [null as ThemeType | null], + theme: [null as Theme | null], locale: [null as string | null], }); @@ -199,10 +198,9 @@ export class SettingsComponent implements OnInit, OnDestroy { this.localeOptions = localeOptions; this.themeOptions = [ - { name: this.i18nService.t("default"), value: ThemeType.System }, - { name: this.i18nService.t("light"), value: ThemeType.Light }, - { name: this.i18nService.t("dark"), value: ThemeType.Dark }, - { name: "Nord", value: ThemeType.Nord }, + { name: this.i18nService.t("default"), value: ThemeTypes.System }, + { name: this.i18nService.t("light"), value: ThemeTypes.Light }, + { name: this.i18nService.t("dark"), value: ThemeTypes.Dark }, ]; this.clearClipboardOptions = [ diff --git a/apps/desktop/src/app/app-routing.module.ts b/apps/desktop/src/app/app-routing.module.ts index b9dccf70322..19b92d4762a 100644 --- a/apps/desktop/src/app/app-routing.module.ts +++ b/apps/desktop/src/app/app-routing.module.ts @@ -15,7 +15,6 @@ import { tdeDecryptionRequiredGuard, unauthGuardFn, } from "@bitwarden/angular/auth/guards"; -import { canAccessFeature } from "@bitwarden/angular/platform/guard/feature-flag.guard"; import { NewDeviceVerificationNoticeGuard } from "@bitwarden/angular/vault/guards"; import { AnonLayoutWrapperComponent, @@ -43,7 +42,6 @@ import { NewDeviceVerificationComponent, DeviceVerificationIcon, } from "@bitwarden/auth/angular"; -import { FeatureFlag } from "@bitwarden/common/enums/feature-flag.enum"; import { LockComponent } from "@bitwarden/key-management-ui"; import { NewDeviceVerificationNoticePageOneComponent, @@ -99,7 +97,7 @@ const routes: Routes = [ ], data: { pageTitle: { - key: "verifyIdentity", + key: "verifyYourIdentity", }, } satisfies RouteDataProperties & AnonLayoutWrapperData, }, @@ -123,16 +121,12 @@ const routes: Routes = [ { path: "device-verification", component: AnonLayoutWrapperComponent, - canActivate: [ - canAccessFeature(FeatureFlag.NewDeviceVerification), - unauthGuardFn(), - activeAuthGuard(), - ], + canActivate: [unauthGuardFn(), activeAuthGuard()], children: [{ path: "", component: NewDeviceVerificationComponent }], data: { pageIcon: DeviceVerificationIcon, pageTitle: { - key: "verifyIdentity", + key: "verifyYourIdentity", }, pageSubtitle: { key: "weDontRecognizeThisDevice", diff --git a/apps/desktop/src/app/app.component.ts b/apps/desktop/src/app/app.component.ts index f19f508d4ba..85c159f0278 100644 --- a/apps/desktop/src/app/app.component.ts +++ b/apps/desktop/src/app/app.component.ts @@ -20,8 +20,6 @@ import { FingerprintDialogComponent, LoginApprovalComponent } from "@bitwarden/a import { DESKTOP_SSO_CALLBACK, LogoutReason } from "@bitwarden/auth/common"; import { EventUploadService } from "@bitwarden/common/abstractions/event/event-upload.service"; import { SearchService } from "@bitwarden/common/abstractions/search.service"; -import { VaultTimeoutSettingsService } from "@bitwarden/common/abstractions/vault-timeout/vault-timeout-settings.service"; -import { VaultTimeoutService } from "@bitwarden/common/abstractions/vault-timeout/vault-timeout.service"; import { OrganizationService } from "@bitwarden/common/admin-console/abstractions/organization/organization.service.abstraction"; import { InternalPolicyService } from "@bitwarden/common/admin-console/abstractions/policy/policy.service.abstraction"; import { AccountService } from "@bitwarden/common/auth/abstractions/account.service"; @@ -33,8 +31,14 @@ import { AuthenticationStatus } from "@bitwarden/common/auth/enums/authenticatio import { ForceSetPasswordReason } from "@bitwarden/common/auth/models/domain/force-set-password-reason"; import { getUserId } from "@bitwarden/common/auth/services/account.service"; import { FeatureFlag } from "@bitwarden/common/enums/feature-flag.enum"; -import { VaultTimeoutAction } from "@bitwarden/common/enums/vault-timeout-action.enum"; import { ProcessReloadServiceAbstraction } from "@bitwarden/common/key-management/abstractions/process-reload.service"; +import { + VaultTimeout, + VaultTimeoutAction, + VaultTimeoutService, + VaultTimeoutSettingsService, + VaultTimeoutStringType, +} from "@bitwarden/common/key-management/vault-timeout"; import { BroadcasterService } from "@bitwarden/common/platform/abstractions/broadcaster.service"; import { ConfigService } from "@bitwarden/common/platform/abstractions/config/config.service"; import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; @@ -48,7 +52,6 @@ import { NotificationsService } from "@bitwarden/common/platform/notifications"; import { StateEventRunnerService } from "@bitwarden/common/platform/state"; import { SyncService } from "@bitwarden/common/platform/sync"; import { UserId } from "@bitwarden/common/types/guid"; -import { VaultTimeout, VaultTimeoutStringType } from "@bitwarden/common/types/vault-timeout.type"; import { CipherService } from "@bitwarden/common/vault/abstractions/cipher.service"; import { InternalFolderService } from "@bitwarden/common/vault/abstractions/folder/folder.service.abstraction"; import { CipherType } from "@bitwarden/common/vault/enums"; @@ -716,12 +719,8 @@ export class AppComponent implements OnInit, OnDestroy { private idleStateChanged() { if (this.isIdle) { - // 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 this.notificationsService.disconnectFromInactivity(); } else { - // 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 this.notificationsService.reconnectFromActivity(); } } diff --git a/apps/desktop/src/app/app.module.ts b/apps/desktop/src/app/app.module.ts index dce98cde9bc..f3b9e0818db 100644 --- a/apps/desktop/src/app/app.module.ts +++ b/apps/desktop/src/app/app.module.ts @@ -21,8 +21,8 @@ import { SsoComponentV1 } from "../auth/sso-v1.component"; import { TwoFactorOptionsComponentV1 } from "../auth/two-factor-options-v1.component"; import { TwoFactorComponentV1 } from "../auth/two-factor-v1.component"; import { UpdateTempPasswordComponent } from "../auth/update-temp-password.component"; +import { SshAgentService } from "../autofill/services/ssh-agent.service"; import { PremiumComponent } from "../billing/app/accounts/premium.component"; -import { SshAgentService } from "../platform/services/ssh-agent.service"; import { AddEditCustomFieldsComponent } from "../vault/app/vault/add-edit-custom-fields.component"; import { AddEditComponent } from "../vault/app/vault/add-edit.component"; import { AttachmentsComponent } from "../vault/app/vault/attachments.component"; diff --git a/apps/desktop/src/app/layout/account-switcher.component.ts b/apps/desktop/src/app/layout/account-switcher.component.ts index db8c2a85bde..d8ffa5ae546 100644 --- a/apps/desktop/src/app/layout/account-switcher.component.ts +++ b/apps/desktop/src/app/layout/account-switcher.component.ts @@ -110,7 +110,9 @@ export class AccountSwitcherComponent implements OnInit { name: active.name, email: active.email, avatarColor: await firstValueFrom(this.avatarService.avatarColor$), - server: (await this.environmentService.getEnvironment())?.getHostname(), + server: ( + await firstValueFrom(this.environmentService.getEnvironment$(active.id)) + )?.getHostname(), }; }), ); @@ -221,7 +223,9 @@ export class AccountSwitcherComponent implements OnInit { email: baseAccounts[userId].email, authenticationStatus: await this.authService.getAuthStatus(userId), avatarColor: await firstValueFrom(this.avatarService.getUserAvatarColor$(userId as UserId)), - server: (await this.environmentService.getEnvironment(userId))?.getHostname(), + server: ( + await firstValueFrom(this.environmentService.getEnvironment$(userId as UserId)) + )?.getHostname(), }; } diff --git a/apps/desktop/src/app/main.ts b/apps/desktop/src/app/main.ts index ba964177dbc..16d03aefbdd 100644 --- a/apps/desktop/src/app/main.ts +++ b/apps/desktop/src/app/main.ts @@ -1,3 +1,5 @@ +import "core-js/proposals/explicit-resource-management"; + import { enableProdMode } from "@angular/core"; import { platformBrowserDynamic } from "@angular/platform-browser-dynamic"; diff --git a/apps/desktop/src/app/services/desktop-theme.service.ts b/apps/desktop/src/app/services/desktop-theme.service.ts deleted file mode 100644 index 321aff677df..00000000000 --- a/apps/desktop/src/app/services/desktop-theme.service.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { map } from "rxjs"; - -import { ThemeType } from "@bitwarden/common/platform/enums"; -import { GlobalStateProvider } from "@bitwarden/common/platform/state"; -import { - THEME_SELECTION, - ThemeStateService, -} from "@bitwarden/common/platform/theming/theme-state.service"; - -export class DesktopThemeStateService implements ThemeStateService { - private readonly selectedThemeState = this.globalStateProvider.get(THEME_SELECTION); - - selectedTheme$ = this.selectedThemeState.state$.pipe(map((theme) => theme ?? this.defaultTheme)); - - constructor( - private globalStateProvider: GlobalStateProvider, - private defaultTheme: ThemeType = ThemeType.System, - ) {} - - async setSelectedTheme(theme: ThemeType): Promise { - await this.selectedThemeState.update(() => theme, { - shouldUpdate: (currentTheme) => currentTheme !== theme, - }); - } -} diff --git a/apps/desktop/src/app/services/init.service.ts b/apps/desktop/src/app/services/init.service.ts index 6a58f36cfb9..08efa4a592e 100644 --- a/apps/desktop/src/app/services/init.service.ts +++ b/apps/desktop/src/app/services/init.service.ts @@ -8,6 +8,7 @@ import { EventUploadService as EventUploadServiceAbstraction } from "@bitwarden/ import { AccountService } from "@bitwarden/common/auth/abstractions/account.service"; import { TwoFactorService as TwoFactorServiceAbstraction } from "@bitwarden/common/auth/abstractions/two-factor.service"; import { EncryptService } from "@bitwarden/common/key-management/crypto/abstractions/encrypt.service"; +import { DefaultVaultTimeoutService } from "@bitwarden/common/key-management/vault-timeout"; import { I18nService as I18nServiceAbstraction } from "@bitwarden/common/platform/abstractions/i18n.service"; import { PlatformUtilsService as PlatformUtilsServiceAbstraction } from "@bitwarden/common/platform/abstractions/platform-utils.service"; import { SdkLoadService } from "@bitwarden/common/platform/abstractions/sdk/sdk-load.service"; @@ -17,13 +18,12 @@ import { ContainerService } from "@bitwarden/common/platform/services/container. import { UserAutoUnlockKeyService } from "@bitwarden/common/platform/services/user-auto-unlock-key.service"; import { SyncService as SyncServiceAbstraction } from "@bitwarden/common/platform/sync"; import { EventUploadService } from "@bitwarden/common/services/event/event-upload.service"; -import { VaultTimeoutService } from "@bitwarden/common/services/vault-timeout/vault-timeout.service"; import { UserId } from "@bitwarden/common/types/guid"; import { KeyService as KeyServiceAbstraction } from "@bitwarden/key-management"; import { DesktopAutofillService } from "../../autofill/services/desktop-autofill.service"; +import { SshAgentService } from "../../autofill/services/ssh-agent.service"; import { I18nRendererService } from "../../platform/services/i18n.renderer.service"; -import { SshAgentService } from "../../platform/services/ssh-agent.service"; import { VersionService } from "../../platform/services/version.service"; import { NativeMessagingService } from "../../services/native-messaging.service"; @@ -32,7 +32,7 @@ export class InitService { constructor( @Inject(WINDOW) private win: Window, private syncService: SyncServiceAbstraction, - private vaultTimeoutService: VaultTimeoutService, + private vaultTimeoutService: DefaultVaultTimeoutService, private i18nService: I18nServiceAbstraction, private eventUploadService: EventUploadServiceAbstraction, private twoFactorService: TwoFactorServiceAbstraction, @@ -54,7 +54,7 @@ export class InitService { init() { return async () => { - await this.sdkLoadService.load(); + await this.sdkLoadService.loadAndInit(); await this.sshAgentService.init(); this.nativeMessagingService.init(); await this.stateService.init({ runMigrations: false }); // Desktop will run them in main process diff --git a/apps/desktop/src/app/services/services.module.ts b/apps/desktop/src/app/services/services.module.ts index 83a2c6bad5c..edd07097b54 100644 --- a/apps/desktop/src/app/services/services.module.ts +++ b/apps/desktop/src/app/services/services.module.ts @@ -36,7 +36,6 @@ import { SsoUrlService, } from "@bitwarden/auth/common"; import { ApiService } from "@bitwarden/common/abstractions/api.service"; -import { VaultTimeoutSettingsService } from "@bitwarden/common/abstractions/vault-timeout/vault-timeout-settings.service"; import { OrganizationApiServiceAbstraction } from "@bitwarden/common/admin-console/abstractions/organization/organization-api.service.abstraction"; import { PolicyService as PolicyServiceAbstraction } from "@bitwarden/common/admin-console/abstractions/policy/policy.service.abstraction"; import { @@ -54,6 +53,10 @@ import { ClientType } from "@bitwarden/common/enums"; import { ProcessReloadServiceAbstraction } from "@bitwarden/common/key-management/abstractions/process-reload.service"; import { EncryptService } from "@bitwarden/common/key-management/crypto/abstractions/encrypt.service"; import { DefaultProcessReloadService } from "@bitwarden/common/key-management/services/default-process-reload.service"; +import { + VaultTimeoutSettingsService, + VaultTimeoutStringType, +} from "@bitwarden/common/key-management/vault-timeout"; import { ConfigService } from "@bitwarden/common/platform/abstractions/config/config.service"; import { CryptoFunctionService as CryptoFunctionServiceAbstraction } from "@bitwarden/common/platform/abstractions/crypto-function.service"; import { EnvironmentService } from "@bitwarden/common/platform/abstractions/environment.service"; @@ -88,8 +91,6 @@ import { GlobalStateProvider, StateProvider } from "@bitwarden/common/platform/s // eslint-disable-next-line import/no-restricted-paths -- Implementation for memory storage import { MemoryStorageService as MemoryStorageServiceForStateProviders } from "@bitwarden/common/platform/state/storage/memory-storage.service"; import { SyncService } from "@bitwarden/common/platform/sync"; -import { ThemeStateService } from "@bitwarden/common/platform/theming/theme-state.service"; -import { VaultTimeoutStringType } from "@bitwarden/common/types/vault-timeout.type"; import { CipherService as CipherServiceAbstraction } from "@bitwarden/common/vault/abstractions/cipher.service"; import { DialogService, ToastService } from "@bitwarden/components"; import { PasswordGenerationServiceAbstraction } from "@bitwarden/generator-legacy"; @@ -133,7 +134,6 @@ import { SearchBarService } from "../layout/search/search-bar.service"; import { DesktopFileDownloadService } from "./desktop-file-download.service"; import { DesktopSetPasswordJitService } from "./desktop-set-password-jit.service"; -import { DesktopThemeStateService } from "./desktop-theme.service"; import { InitService } from "./init.service"; import { NativeMessagingManifestService } from "./native-messaging-manifest.service"; import { RendererCryptoFunctionService } from "./renderer-crypto-function.service"; @@ -266,11 +266,6 @@ const safeProviders: SafeProvider[] = [ useFactory: () => fromIpcSystemTheme(), deps: [], }), - safeProvider({ - provide: ThemeStateService, - useClass: DesktopThemeStateService, - deps: [GlobalStateProvider], - }), safeProvider({ provide: EncryptedMessageHandlerService, deps: [ diff --git a/apps/desktop/src/app/tools/send/send.component.ts b/apps/desktop/src/app/tools/send/send.component.ts index b6c89978c6a..d8b63e9d97c 100644 --- a/apps/desktop/src/app/tools/send/send.component.ts +++ b/apps/desktop/src/app/tools/send/send.component.ts @@ -5,6 +5,7 @@ import { Component, NgZone, OnDestroy, OnInit, ViewChild } from "@angular/core"; import { SendComponent as BaseSendComponent } from "@bitwarden/angular/tools/send/send.component"; import { SearchService } from "@bitwarden/common/abstractions/search.service"; import { PolicyService } from "@bitwarden/common/admin-console/abstractions/policy/policy.service.abstraction"; +import { AccountService } from "@bitwarden/common/auth/abstractions/account.service"; import { BroadcasterService } from "@bitwarden/common/platform/abstractions/broadcaster.service"; import { EnvironmentService } from "@bitwarden/common/platform/abstractions/environment.service"; import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; @@ -52,6 +53,7 @@ export class SendComponent extends BaseSendComponent implements OnInit, OnDestro sendApiService: SendApiService, dialogService: DialogService, toastService: ToastService, + accountService: AccountService, ) { super( sendService, @@ -65,6 +67,7 @@ export class SendComponent extends BaseSendComponent implements OnInit, OnDestro sendApiService, dialogService, toastService, + accountService, ); // eslint-disable-next-line rxjs-angular/prefer-takeuntil this.searchBarService.searchText$.subscribe((searchText) => { diff --git a/apps/desktop/src/auth/login/login-v1.component.ts b/apps/desktop/src/auth/login/login-v1.component.ts index 5d1a1d818d5..ff8688353be 100644 --- a/apps/desktop/src/auth/login/login-v1.component.ts +++ b/apps/desktop/src/auth/login/login-v1.component.ts @@ -3,7 +3,7 @@ import { Component, NgZone, OnDestroy, OnInit, ViewChild, ViewContainerRef } from "@angular/core"; import { FormBuilder } from "@angular/forms"; import { ActivatedRoute, Router } from "@angular/router"; -import { Subject, takeUntil, tap } from "rxjs"; +import { Subject, firstValueFrom, takeUntil, tap } from "rxjs"; import { LoginComponentV1 as BaseLoginComponent } from "@bitwarden/angular/auth/components/login-v1.component"; import { FormValidationErrorsService } from "@bitwarden/angular/platform/abstractions/form-validation-errors.service"; @@ -143,10 +143,11 @@ export class LoginComponentV1 extends BaseLoginComponent implements OnInit, OnDe .getFeatureFlag$(FeatureFlag.UnauthenticatedExtensionUIRefresh) .pipe( tap(async (flag) => { - // If the flag is turned ON, we must force a reload to ensure the correct UI is shown if (flag) { + const qParams = await firstValueFrom(this.route.queryParams); + const uniqueQueryParams = { - ...this.route.queryParams, + ...qParams, // adding a unique timestamp to the query params to force a reload t: new Date().getTime().toString(), }; @@ -156,7 +157,7 @@ export class LoginComponentV1 extends BaseLoginComponent implements OnInit, OnDe }); } }), - takeUntil(this.destroy$), + takeUntil(this.componentDestroyed$), ) .subscribe(); } diff --git a/apps/desktop/src/auth/two-factor-v1.component.ts b/apps/desktop/src/auth/two-factor-v1.component.ts index 26a6f81b88c..3980e944dfd 100644 --- a/apps/desktop/src/auth/two-factor-v1.component.ts +++ b/apps/desktop/src/auth/two-factor-v1.component.ts @@ -37,7 +37,6 @@ const BroadcasterSubscriptionId = "TwoFactorComponent"; selector: "app-two-factor", templateUrl: "two-factor-v1.component.html", }) -// eslint-disable-next-line rxjs-angular/prefer-takeuntil export class TwoFactorComponentV1 extends BaseTwoFactorComponent implements OnDestroy { @ViewChild("twoFactorOptions", { read: ViewContainerRef, static: true }) twoFactorOptionsModal: ViewContainerRef; diff --git a/apps/desktop/src/platform/main/main-ssh-agent.service.ts b/apps/desktop/src/autofill/main/main-ssh-agent.service.ts similarity index 92% rename from apps/desktop/src/platform/main/main-ssh-agent.service.ts rename to apps/desktop/src/autofill/main/main-ssh-agent.service.ts index cc4565f27f4..af79d9d7316 100644 --- a/apps/desktop/src/platform/main/main-ssh-agent.service.ts +++ b/apps/desktop/src/autofill/main/main-ssh-agent.service.ts @@ -47,7 +47,7 @@ export class MainSshAgentService { init() { // handle sign request passing to UI sshagent - .serve(async (err: Error, cipherId: string, isListRequest: boolean, processName: string) => { + .serve(async (err: Error, sshUiRequest: sshagent.SshUiRequest) => { // clear all old (> SIGN_TIMEOUT) requests this.requestResponses = this.requestResponses.filter( (response) => response.timestamp > new Date(Date.now() - this.SIGN_TIMEOUT), @@ -56,10 +56,12 @@ export class MainSshAgentService { this.request_id += 1; const id_for_this_request = this.request_id; this.messagingService.send("sshagent.signrequest", { - cipherId, - isListRequest, + cipherId: sshUiRequest.cipherId, + isListRequest: sshUiRequest.isList, requestId: id_for_this_request, - processName, + processName: sshUiRequest.processName, + isAgentForwarding: sshUiRequest.isForwarding, + namespace: sshUiRequest.namespace, }); const result = await firstValueFrom( diff --git a/apps/desktop/src/platform/services/ssh-agent.service.ts b/apps/desktop/src/autofill/services/ssh-agent.service.ts similarity index 95% rename from apps/desktop/src/platform/services/ssh-agent.service.ts rename to apps/desktop/src/autofill/services/ssh-agent.service.ts index 31b615dd365..87c6de75a95 100644 --- a/apps/desktop/src/platform/services/ssh-agent.service.ts +++ b/apps/desktop/src/autofill/services/ssh-agent.service.ts @@ -34,9 +34,8 @@ import { CipherService } from "@bitwarden/common/vault/abstractions/cipher.servi import { CipherType } from "@bitwarden/common/vault/enums"; import { DialogService, ToastService } from "@bitwarden/components"; -import { ApproveSshRequestComponent } from "../components/approve-ssh-request"; - -import { DesktopSettingsService } from "./desktop-settings.service"; +import { ApproveSshRequestComponent } from "../../platform/components/approve-ssh-request"; +import { DesktopSettingsService } from "../../platform/services/desktop-settings.service"; @Injectable({ providedIn: "root", @@ -130,7 +129,7 @@ export class SshAgentService implements OnDestroy { throw error; }), - map(() => message), + map(() => [message, account.id]), ); } @@ -148,6 +147,8 @@ export class SshAgentService implements OnDestroy { const isListRequest = message.isListRequest as boolean; const requestId = message.requestId as number; let application = message.processName as string; + const namespace = message.namespace as string; + const isAgentForwarding = message.isAgentForwarding as boolean; if (application == "") { application = this.i18nService.t("unknownApplication"); } @@ -181,6 +182,8 @@ export class SshAgentService implements OnDestroy { this.dialogService, cipher.name, application, + isAgentForwarding, + namespace, ); const result = await firstValueFrom(dialogRef.closed); diff --git a/apps/desktop/src/key-management/biometrics/biometrics.service.spec.ts b/apps/desktop/src/key-management/biometrics/biometrics.service.spec.ts deleted file mode 100644 index 9e5755dd579..00000000000 --- a/apps/desktop/src/key-management/biometrics/biometrics.service.spec.ts +++ /dev/null @@ -1,187 +0,0 @@ -import { mock, MockProxy } from "jest-mock-extended"; - -import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; -import { LogService } from "@bitwarden/common/platform/abstractions/log.service"; -import { MessagingService } from "@bitwarden/common/platform/abstractions/messaging.service"; -import { UserId } from "@bitwarden/common/types/guid"; -import { - BiometricsService, - BiometricsStatus, - BiometricStateService, -} from "@bitwarden/key-management"; - -import { WindowMain } from "../../main/window.main"; - -import { MainBiometricsService } from "./main-biometrics.service"; -import OsBiometricsServiceLinux from "./os-biometrics-linux.service"; -import OsBiometricsServiceMac from "./os-biometrics-mac.service"; -import OsBiometricsServiceWindows from "./os-biometrics-windows.service"; -import { OsBiometricService } from "./os-biometrics.service"; - -jest.mock("@bitwarden/desktop-napi", () => { - return { - biometrics: jest.fn(), - passwords: jest.fn(), - }; -}); - -describe("biometrics tests", function () { - const i18nService = mock(); - const windowMain = mock(); - const logService = mock(); - const messagingService = mock(); - const biometricStateService = mock(); - - it("Should call the platformspecific methods", async () => { - const sut = new MainBiometricsService( - i18nService, - windowMain, - logService, - messagingService, - process.platform, - biometricStateService, - ); - - const mockService = mock(); - (sut as any).osBiometricsService = mockService; - - await sut.authenticateBiometric(); - expect(mockService.authenticateBiometric).toBeCalled(); - }); - - describe("Should create a platform specific service", function () { - it("Should create a biometrics service specific for Windows", () => { - const sut = new MainBiometricsService( - i18nService, - windowMain, - logService, - messagingService, - "win32", - biometricStateService, - ); - - const internalService = (sut as any).osBiometricsService; - expect(internalService).not.toBeNull(); - expect(internalService).toBeInstanceOf(OsBiometricsServiceWindows); - }); - - it("Should create a biometrics service specific for MacOs", () => { - const sut = new MainBiometricsService( - i18nService, - windowMain, - logService, - messagingService, - "darwin", - biometricStateService, - ); - const internalService = (sut as any).osBiometricsService; - expect(internalService).not.toBeNull(); - expect(internalService).toBeInstanceOf(OsBiometricsServiceMac); - }); - - it("Should create a biometrics service specific for Linux", () => { - const sut = new MainBiometricsService( - i18nService, - windowMain, - logService, - messagingService, - "linux", - biometricStateService, - ); - - const internalService = (sut as any).osBiometricsService; - expect(internalService).not.toBeNull(); - expect(internalService).toBeInstanceOf(OsBiometricsServiceLinux); - }); - }); - - describe("can auth biometric", () => { - let sut: BiometricsService; - let innerService: MockProxy; - - beforeEach(() => { - sut = new MainBiometricsService( - i18nService, - windowMain, - logService, - messagingService, - process.platform, - biometricStateService, - ); - - innerService = mock(); - (sut as any).osBiometricsService = innerService; - }); - - it("should return the correct biometric status for system status", async () => { - const testCases = [ - // happy path - [true, false, false, BiometricsStatus.Available], - [false, true, true, BiometricsStatus.HardwareUnavailable], - [true, true, true, BiometricsStatus.AutoSetupNeeded], - [true, true, false, BiometricsStatus.ManualSetupNeeded], - - // should not happen - [false, false, true, BiometricsStatus.HardwareUnavailable], - [true, false, true, BiometricsStatus.Available], - [false, true, false, BiometricsStatus.HardwareUnavailable], - [false, false, false, BiometricsStatus.HardwareUnavailable], - ]; - - for (const [supportsBiometric, needsSetup, canAutoSetup, expected] of testCases) { - innerService.osSupportsBiometric.mockResolvedValue(supportsBiometric as boolean); - innerService.osBiometricsNeedsSetup.mockResolvedValue(needsSetup as boolean); - innerService.osBiometricsCanAutoSetup.mockResolvedValue(canAutoSetup as boolean); - - const actual = await sut.getBiometricsStatus(); - expect(actual).toBe(expected); - } - }); - - it("should return the correct biometric status for user status", async () => { - const testCases = [ - // system status, biometric unlock enabled, require password on start, has key half, result - [BiometricsStatus.Available, false, false, false, BiometricsStatus.NotEnabledLocally], - [BiometricsStatus.Available, false, true, false, BiometricsStatus.NotEnabledLocally], - [BiometricsStatus.Available, false, false, true, BiometricsStatus.NotEnabledLocally], - [BiometricsStatus.Available, false, true, true, BiometricsStatus.NotEnabledLocally], - - [ - BiometricsStatus.PlatformUnsupported, - true, - true, - true, - BiometricsStatus.PlatformUnsupported, - ], - [BiometricsStatus.ManualSetupNeeded, true, true, true, BiometricsStatus.ManualSetupNeeded], - [BiometricsStatus.AutoSetupNeeded, true, true, true, BiometricsStatus.AutoSetupNeeded], - - [BiometricsStatus.Available, true, false, true, BiometricsStatus.Available], - [BiometricsStatus.Available, true, true, false, BiometricsStatus.UnlockNeeded], - [BiometricsStatus.Available, true, false, true, BiometricsStatus.Available], - ]; - - for (const [ - systemStatus, - unlockEnabled, - requirePasswordOnStart, - hasKeyHalf, - expected, - ] of testCases) { - sut.getBiometricsStatus = jest.fn().mockResolvedValue(systemStatus as BiometricsStatus); - biometricStateService.getBiometricUnlockEnabled.mockResolvedValue(unlockEnabled as boolean); - biometricStateService.getRequirePasswordOnStart.mockResolvedValue( - requirePasswordOnStart as boolean, - ); - (sut as any).clientKeyHalves = new Map(); - const userId = "test" as UserId; - if (hasKeyHalf) { - (sut as any).clientKeyHalves.set(userId, "test"); - } - - const actual = await sut.getBiometricsStatusForUser(userId); - expect(actual).toBe(expected); - } - }); - }); -}); diff --git a/apps/desktop/src/key-management/biometrics/desktop.biometrics.service.ts b/apps/desktop/src/key-management/biometrics/desktop.biometrics.service.ts index 0c0efea78f9..6415443bfbc 100644 --- a/apps/desktop/src/key-management/biometrics/desktop.biometrics.service.ts +++ b/apps/desktop/src/key-management/biometrics/desktop.biometrics.service.ts @@ -11,5 +11,5 @@ export abstract class DesktopBiometricsService extends BiometricsService { abstract setupBiometrics(): Promise; - abstract setClientKeyHalfForUser(userId: UserId, value: string): Promise; + abstract setClientKeyHalfForUser(userId: UserId, value: string | null): Promise; } diff --git a/apps/desktop/src/key-management/biometrics/main-biometrics-ipc.listener.ts b/apps/desktop/src/key-management/biometrics/main-biometrics-ipc.listener.ts index 1605f650e12..fe40aad54d9 100644 --- a/apps/desktop/src/key-management/biometrics/main-biometrics-ipc.listener.ts +++ b/apps/desktop/src/key-management/biometrics/main-biometrics-ipc.listener.ts @@ -44,9 +44,6 @@ export class MainBiometricsIPCListener { message.userId as UserId, ); case BiometricAction.SetClientKeyHalf: - if (message.key == null) { - return; - } return await this.biometricService.setClientKeyHalfForUser( message.userId as UserId, message.key, diff --git a/apps/desktop/src/key-management/biometrics/main-biometrics.service.spec.ts b/apps/desktop/src/key-management/biometrics/main-biometrics.service.spec.ts new file mode 100644 index 00000000000..88dd8c60ed5 --- /dev/null +++ b/apps/desktop/src/key-management/biometrics/main-biometrics.service.spec.ts @@ -0,0 +1,426 @@ +import { mock, MockProxy } from "jest-mock-extended"; + +import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; +import { LogService } from "@bitwarden/common/platform/abstractions/log.service"; +import { MessagingService } from "@bitwarden/common/platform/abstractions/messaging.service"; +import { EncryptionType } from "@bitwarden/common/platform/enums"; +import { Utils } from "@bitwarden/common/platform/misc/utils"; +import { UserId } from "@bitwarden/common/types/guid"; +import { + BiometricsService, + BiometricsStatus, + BiometricStateService, +} from "@bitwarden/key-management"; + +import { WindowMain } from "../../main/window.main"; + +import { MainBiometricsService } from "./main-biometrics.service"; +import OsBiometricsServiceLinux from "./os-biometrics-linux.service"; +import OsBiometricsServiceMac from "./os-biometrics-mac.service"; +import OsBiometricsServiceWindows from "./os-biometrics-windows.service"; +import { OsBiometricService } from "./os-biometrics.service"; + +jest.mock("@bitwarden/desktop-napi", () => { + return { + biometrics: jest.fn(), + passwords: jest.fn(), + }; +}); + +describe("MainBiometricsService", function () { + const i18nService = mock(); + const windowMain = mock(); + const logService = mock(); + const messagingService = mock(); + const biometricStateService = mock(); + + it("Should call the platformspecific methods", async () => { + const sut = new MainBiometricsService( + i18nService, + windowMain, + logService, + messagingService, + process.platform, + biometricStateService, + ); + + const mockService = mock(); + (sut as any).osBiometricsService = mockService; + + await sut.authenticateBiometric(); + expect(mockService.authenticateBiometric).toBeCalled(); + }); + + describe("Should create a platform specific service", function () { + it("Should create a biometrics service specific for Windows", () => { + const sut = new MainBiometricsService( + i18nService, + windowMain, + logService, + messagingService, + "win32", + biometricStateService, + ); + + const internalService = (sut as any).osBiometricsService; + expect(internalService).not.toBeNull(); + expect(internalService).toBeInstanceOf(OsBiometricsServiceWindows); + }); + + it("Should create a biometrics service specific for MacOs", () => { + const sut = new MainBiometricsService( + i18nService, + windowMain, + logService, + messagingService, + "darwin", + biometricStateService, + ); + const internalService = (sut as any).osBiometricsService; + expect(internalService).not.toBeNull(); + expect(internalService).toBeInstanceOf(OsBiometricsServiceMac); + }); + + it("Should create a biometrics service specific for Linux", () => { + const sut = new MainBiometricsService( + i18nService, + windowMain, + logService, + messagingService, + "linux", + biometricStateService, + ); + + const internalService = (sut as any).osBiometricsService; + expect(internalService).not.toBeNull(); + expect(internalService).toBeInstanceOf(OsBiometricsServiceLinux); + }); + }); + + describe("can auth biometric", () => { + let sut: BiometricsService; + let innerService: MockProxy; + + beforeEach(() => { + sut = new MainBiometricsService( + i18nService, + windowMain, + logService, + messagingService, + process.platform, + biometricStateService, + ); + + innerService = mock(); + (sut as any).osBiometricsService = innerService; + }); + + it("should return the correct biometric status for system status", async () => { + const testCases = [ + // happy path + [true, false, false, BiometricsStatus.Available], + [false, true, true, BiometricsStatus.HardwareUnavailable], + [true, true, true, BiometricsStatus.AutoSetupNeeded], + [true, true, false, BiometricsStatus.ManualSetupNeeded], + + // should not happen + [false, false, true, BiometricsStatus.HardwareUnavailable], + [true, false, true, BiometricsStatus.Available], + [false, true, false, BiometricsStatus.HardwareUnavailable], + [false, false, false, BiometricsStatus.HardwareUnavailable], + ]; + + for (const [supportsBiometric, needsSetup, canAutoSetup, expected] of testCases) { + innerService.osSupportsBiometric.mockResolvedValue(supportsBiometric as boolean); + innerService.osBiometricsNeedsSetup.mockResolvedValue(needsSetup as boolean); + innerService.osBiometricsCanAutoSetup.mockResolvedValue(canAutoSetup as boolean); + + const actual = await sut.getBiometricsStatus(); + expect(actual).toBe(expected); + } + }); + + it("should return the correct biometric status for user status", async () => { + const testCases = [ + // system status, biometric unlock enabled, require password on start, has key half, result + [BiometricsStatus.Available, false, false, false, BiometricsStatus.NotEnabledLocally], + [BiometricsStatus.Available, false, true, false, BiometricsStatus.NotEnabledLocally], + [BiometricsStatus.Available, false, false, true, BiometricsStatus.NotEnabledLocally], + [BiometricsStatus.Available, false, true, true, BiometricsStatus.NotEnabledLocally], + + [ + BiometricsStatus.PlatformUnsupported, + true, + true, + true, + BiometricsStatus.PlatformUnsupported, + ], + [BiometricsStatus.ManualSetupNeeded, true, true, true, BiometricsStatus.ManualSetupNeeded], + [BiometricsStatus.AutoSetupNeeded, true, true, true, BiometricsStatus.AutoSetupNeeded], + + [BiometricsStatus.Available, true, false, true, BiometricsStatus.Available], + [BiometricsStatus.Available, true, true, false, BiometricsStatus.UnlockNeeded], + [BiometricsStatus.Available, true, false, true, BiometricsStatus.Available], + ]; + + for (const [ + systemStatus, + unlockEnabled, + requirePasswordOnStart, + hasKeyHalf, + expected, + ] of testCases) { + sut.getBiometricsStatus = jest.fn().mockResolvedValue(systemStatus as BiometricsStatus); + biometricStateService.getBiometricUnlockEnabled.mockResolvedValue(unlockEnabled as boolean); + biometricStateService.getRequirePasswordOnStart.mockResolvedValue( + requirePasswordOnStart as boolean, + ); + (sut as any).clientKeyHalves = new Map(); + const userId = "test" as UserId; + if (hasKeyHalf) { + (sut as any).clientKeyHalves.set(userId, "test"); + } + + const actual = await sut.getBiometricsStatusForUser(userId); + expect(actual).toBe(expected); + } + }); + }); + + describe("setupBiometrics", () => { + it("should call the platform specific setup method", async () => { + const sut = new MainBiometricsService( + i18nService, + windowMain, + logService, + messagingService, + process.platform, + biometricStateService, + ); + const osBiometricsService = mock(); + (sut as any).osBiometricsService = osBiometricsService; + + await sut.setupBiometrics(); + + expect(osBiometricsService.osBiometricsSetup).toHaveBeenCalled(); + }); + }); + + describe("setClientKeyHalfForUser", () => { + let sut: MainBiometricsService; + + beforeEach(() => { + sut = new MainBiometricsService( + i18nService, + windowMain, + logService, + messagingService, + process.platform, + biometricStateService, + ); + }); + + it("should set the client key half for the user", async () => { + const userId = "test" as UserId; + const keyHalf = "testKeyHalf"; + + await sut.setClientKeyHalfForUser(userId, keyHalf); + + expect((sut as any).clientKeyHalves.has(userId)).toBe(true); + expect((sut as any).clientKeyHalves.get(userId)).toBe(keyHalf); + }); + + it("should reset the client key half for the user", async () => { + const userId = "test" as UserId; + + await sut.setClientKeyHalfForUser(userId, null); + + expect((sut as any).clientKeyHalves.has(userId)).toBe(true); + expect((sut as any).clientKeyHalves.get(userId)).toBe(null); + }); + }); + + describe("authenticateWithBiometrics", () => { + it("should call the platform specific authenticate method", async () => { + const sut = new MainBiometricsService( + i18nService, + windowMain, + logService, + messagingService, + process.platform, + biometricStateService, + ); + const osBiometricsService = mock(); + (sut as any).osBiometricsService = osBiometricsService; + + await sut.authenticateWithBiometrics(); + + expect(osBiometricsService.authenticateBiometric).toHaveBeenCalled(); + }); + }); + + describe("unlockWithBiometricsForUser", () => { + let sut: MainBiometricsService; + let osBiometricsService: MockProxy; + + beforeEach(() => { + sut = new MainBiometricsService( + i18nService, + windowMain, + logService, + messagingService, + process.platform, + biometricStateService, + ); + osBiometricsService = mock(); + (sut as any).osBiometricsService = osBiometricsService; + }); + + it("should return null if no biometric key is returned ", async () => { + const userId = "test" as UserId; + (sut as any).clientKeyHalves.set(userId, "testKeyHalf"); + + const userKey = await sut.unlockWithBiometricsForUser(userId); + + expect(userKey).toBeNull(); + expect(osBiometricsService.getBiometricKey).toHaveBeenCalledWith( + "Bitwarden_biometric", + `${userId}_user_biometric`, + "testKeyHalf", + ); + }); + + it("should return the biometric key if a valid key is returned", async () => { + const userId = "test" as UserId; + (sut as any).clientKeyHalves.set(userId, "testKeyHalf"); + const biometricKey = Utils.fromBufferToB64(new Uint8Array(64)); + osBiometricsService.getBiometricKey.mockResolvedValue(biometricKey); + + const userKey = await sut.unlockWithBiometricsForUser(userId); + + expect(userKey).not.toBeNull(); + expect(userKey!.keyB64).toBe(biometricKey); + expect(userKey!.encType).toBe(EncryptionType.AesCbc256_HmacSha256_B64); + expect(osBiometricsService.getBiometricKey).toHaveBeenCalledWith( + "Bitwarden_biometric", + `${userId}_user_biometric`, + "testKeyHalf", + ); + }); + }); + + describe("setBiometricProtectedUnlockKeyForUser", () => { + let sut: MainBiometricsService; + let osBiometricsService: MockProxy; + + beforeEach(() => { + sut = new MainBiometricsService( + i18nService, + windowMain, + logService, + messagingService, + process.platform, + biometricStateService, + ); + osBiometricsService = mock(); + (sut as any).osBiometricsService = osBiometricsService; + }); + + it("should throw an error if no client key half is provided", async () => { + const userId = "test" as UserId; + const unlockKey = "testUnlockKey"; + + await expect(sut.setBiometricProtectedUnlockKeyForUser(userId, unlockKey)).rejects.toThrow( + "No client key half provided for user", + ); + }); + + it("should call the platform specific setBiometricKey method", async () => { + const userId = "test" as UserId; + const unlockKey = "testUnlockKey"; + + (sut as any).clientKeyHalves.set(userId, "testKeyHalf"); + + await sut.setBiometricProtectedUnlockKeyForUser(userId, unlockKey); + + expect(osBiometricsService.setBiometricKey).toHaveBeenCalledWith( + "Bitwarden_biometric", + `${userId}_user_biometric`, + unlockKey, + "testKeyHalf", + ); + }); + }); + + describe("deleteBiometricUnlockKeyForUser", () => { + it("should call the platform specific deleteBiometricKey method", async () => { + const sut = new MainBiometricsService( + i18nService, + windowMain, + logService, + messagingService, + process.platform, + biometricStateService, + ); + const osBiometricsService = mock(); + (sut as any).osBiometricsService = osBiometricsService; + + const userId = "test" as UserId; + + await sut.deleteBiometricUnlockKeyForUser(userId); + + expect(osBiometricsService.deleteBiometricKey).toHaveBeenCalledWith( + "Bitwarden_biometric", + `${userId}_user_biometric`, + ); + }); + }); + + describe("setShouldAutopromptNow", () => { + let sut: MainBiometricsService; + + beforeEach(() => { + sut = new MainBiometricsService( + i18nService, + windowMain, + logService, + messagingService, + process.platform, + biometricStateService, + ); + }); + + it("should set shouldAutopromptNow to false", async () => { + await sut.setShouldAutopromptNow(false); + + const shouldAutoPrompt = await sut.getShouldAutopromptNow(); + + expect(shouldAutoPrompt).toBe(false); + }); + + it("should set shouldAutopromptNow to true", async () => { + await sut.setShouldAutopromptNow(true); + + const shouldAutoPrompt = await sut.getShouldAutopromptNow(); + + expect(shouldAutoPrompt).toBe(true); + }); + }); + + describe("getShouldAutopromptNow", () => { + it("defaults shouldAutoPrompt is true", async () => { + const sut = new MainBiometricsService( + i18nService, + windowMain, + logService, + messagingService, + process.platform, + biometricStateService, + ); + + const shouldAutoPrompt = await sut.getShouldAutopromptNow(); + + expect(shouldAutoPrompt).toBe(true); + }); + }); +}); diff --git a/apps/desktop/src/key-management/biometrics/main-biometrics.service.ts b/apps/desktop/src/key-management/biometrics/main-biometrics.service.ts index 013e69f118c..dd2e15a2fe8 100644 --- a/apps/desktop/src/key-management/biometrics/main-biometrics.service.ts +++ b/apps/desktop/src/key-management/biometrics/main-biometrics.service.ts @@ -13,7 +13,7 @@ import { OsBiometricService } from "./os-biometrics.service"; export class MainBiometricsService extends DesktopBiometricsService { private osBiometricsService: OsBiometricService; - private clientKeyHalves = new Map(); + private clientKeyHalves = new Map(); private shouldAutoPrompt = true; constructor( @@ -104,7 +104,7 @@ export class MainBiometricsService extends DesktopBiometricsService { return await this.osBiometricsService.osBiometricsSetup(); } - async setClientKeyHalfForUser(userId: UserId, value: string): Promise { + async setClientKeyHalfForUser(userId: UserId, value: string | null): Promise { this.clientKeyHalves.set(userId, value); } @@ -116,7 +116,7 @@ export class MainBiometricsService extends DesktopBiometricsService { const biometricKey = await this.osBiometricsService.getBiometricKey( "Bitwarden_biometric", `${userId}_user_biometric`, - this.clientKeyHalves.get(userId), + this.clientKeyHalves.get(userId) ?? undefined, ); if (biometricKey == null) { return null; @@ -136,7 +136,7 @@ export class MainBiometricsService extends DesktopBiometricsService { service, storageKey, value, - this.clientKeyHalves.get(userId), + this.clientKeyHalves.get(userId) ?? undefined, ); } diff --git a/apps/desktop/src/key-management/biometrics/renderer-biometrics.service.ts b/apps/desktop/src/key-management/biometrics/renderer-biometrics.service.ts index a08e68b53f2..2a0b1282778 100644 --- a/apps/desktop/src/key-management/biometrics/renderer-biometrics.service.ts +++ b/apps/desktop/src/key-management/biometrics/renderer-biometrics.service.ts @@ -40,7 +40,7 @@ export class RendererBiometricsService extends DesktopBiometricsService { return await ipc.keyManagement.biometric.setupBiometrics(); } - async setClientKeyHalfForUser(userId: UserId, value: string): Promise { + async setClientKeyHalfForUser(userId: UserId, value: string | null): Promise { return await ipc.keyManagement.biometric.setClientKeyHalf(userId, value); } diff --git a/apps/desktop/src/key-management/lock/services/desktop-lock-component.service.spec.ts b/apps/desktop/src/key-management/lock/services/desktop-lock-component.service.spec.ts index 56f28bde0ef..6bfbc803e87 100644 --- a/apps/desktop/src/key-management/lock/services/desktop-lock-component.service.spec.ts +++ b/apps/desktop/src/key-management/lock/services/desktop-lock-component.service.spec.ts @@ -6,8 +6,8 @@ import { PinServiceAbstraction, UserDecryptionOptionsServiceAbstraction, } from "@bitwarden/auth/common"; -import { VaultTimeoutSettingsService } from "@bitwarden/common/abstractions/vault-timeout/vault-timeout-settings.service"; import { DeviceType } from "@bitwarden/common/enums"; +import { VaultTimeoutSettingsService } from "@bitwarden/common/key-management/vault-timeout"; import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service"; import { UserId } from "@bitwarden/common/types/guid"; import { KeyService, BiometricsService, BiometricsStatus } from "@bitwarden/key-management"; diff --git a/apps/desktop/src/key-management/preload.ts b/apps/desktop/src/key-management/preload.ts index b73542ca725..c955571697b 100644 --- a/apps/desktop/src/key-management/preload.ts +++ b/apps/desktop/src/key-management/preload.ts @@ -39,7 +39,7 @@ const biometric = { ipcRenderer.invoke("biometric", { action: BiometricAction.Setup, } satisfies BiometricMessage), - setClientKeyHalf: (userId: string, value: string): Promise => + setClientKeyHalf: (userId: string, value: string | null): Promise => ipcRenderer.invoke("biometric", { action: BiometricAction.SetClientKeyHalf, userId: userId, diff --git a/apps/desktop/src/locales/af/messages.json b/apps/desktop/src/locales/af/messages.json index be14f15b4f7..5e41c61d900 100644 --- a/apps/desktop/src/locales/af/messages.json +++ b/apps/desktop/src/locales/af/messages.json @@ -543,10 +543,6 @@ "message": "Include special characters", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "numWords": { "message": "Aantal Woorde" }, @@ -652,6 +648,15 @@ "logInToBitwarden": { "message": "Log in to Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "Enter the code sent to your email" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Enter the code from your authenticator app" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Press your YubiKey to authenticate" + }, "logInWithPasskey": { "message": "Log in with passkey" }, @@ -704,6 +709,15 @@ "masterPassHintLabel": { "message": "Master password hint" }, + "passwordStrengthScore": { + "message": "Password strength score $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "joinOrganization": { "message": "Join organization" }, @@ -816,6 +830,9 @@ "webauthnCancelOrTimeout": { "message": "The authentication was cancelled or took too long. Please try again." }, + "openInNewTab": { + "message": "Open in new tab" + }, "invalidVerificationCode": { "message": "Ongeldige bevestigingskode" }, @@ -846,12 +863,22 @@ "rememberMe": { "message": "Onthou my" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Don't ask again on this device for 30 days" + }, "sendVerificationCodeEmailAgain": { "message": "Stuur weer e-pos met bevestigingskode" }, "useAnotherTwoStepMethod": { "message": "Gebruik ’n ander tweestapaantekenmetode" }, + "selectAnotherMethod": { + "message": "Select another method", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Use your recovery code" + }, "insertYubiKey": { "message": "Plaas u YubiKey in u rekenaar se USB-poort en druk dan op sy knop." }, @@ -885,7 +912,7 @@ "message": "Bevestig met Duo Security vir u organisasie d.m.v. die Duo Mobile-toep, SMS, spraakoproep of ’n U2F-beveiligingsleutel.", "description": "'Duo Security' and 'Duo Mobile' are product names and should not be translated." }, - "verifyIdentity": { + "verifyYourIdentity": { "message": "Verify your Identity" }, "weDontRecognizeThisDevice": { @@ -918,6 +945,9 @@ "twoStepOptions": { "message": "Opsies vir tweestapaantekening" }, + "selectTwoStepLoginMethod": { + "message": "Select two-step login method" + }, "selfHostedEnvironment": { "message": "Selfgehuisveste omgewing" }, @@ -2247,6 +2277,12 @@ "webAuthnAuthenticate": { "message": "Waarmerk WebAuthn" }, + "readSecurityKey": { + "message": "Read security key" + }, + "awaitingSecurityKeyInteraction": { + "message": "Awaiting security key interaction..." + }, "hideEmail": { "message": "Versteek my e-posadres vir ontvangers." }, @@ -3206,6 +3242,12 @@ "duoRequiredByOrgForAccount": { "message": "Duo two-step login is required for your account." }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Duo two-step login is required for your account. Follow the steps below to finish logging in." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Follow the steps below to finish logging in." + }, "launchDuo": { "message": "Launch Duo in Browser" }, @@ -3463,9 +3505,27 @@ "sshkeyApprovalTitle": { "message": "Confirm SSH key usage" }, + "agentForwardingWarningTitle": { + "message": "Warning: Agent Forwarding" + }, + "agentForwardingWarningText": { + "message": "This request comes from a remote device that you are logged into" + }, "sshkeyApprovalMessageInfix": { "message": "is requesting access to" }, + "sshkeyApprovalMessageSuffix": { + "message": "in order to" + }, + "sshActionLogin": { + "message": "authenticate to a server" + }, + "sshActionSign": { + "message": "sign a message" + }, + "sshActionGitSign": { + "message": "sign a git commit" + }, "unknownApplication": { "message": "An application" }, @@ -3540,5 +3600,8 @@ }, "updateBrowserOrDisableFingerprintDialogMessage": { "message": "The browser extension you are using is out of date. Please update it or disable browser integration fingerprint validation in the desktop app settings." + }, + "changeAtRiskPassword": { + "message": "Change at-risk password" } } diff --git a/apps/desktop/src/locales/ar/messages.json b/apps/desktop/src/locales/ar/messages.json index c0834bed1e6..1ca24a28a0b 100644 --- a/apps/desktop/src/locales/ar/messages.json +++ b/apps/desktop/src/locales/ar/messages.json @@ -543,10 +543,6 @@ "message": "تضمين أحرف خاصة", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "numWords": { "message": "عدد الكلمات" }, @@ -652,6 +648,15 @@ "logInToBitwarden": { "message": "تسجيل الدخول إلى Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "Enter the code sent to your email" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Enter the code from your authenticator app" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Press your YubiKey to authenticate" + }, "logInWithPasskey": { "message": "تسجيل الدخول باستخدام مفتاح المرور" }, @@ -704,6 +709,15 @@ "masterPassHintLabel": { "message": "تلميح كلمة المرور الرئيسية" }, + "passwordStrengthScore": { + "message": "Password strength score $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "joinOrganization": { "message": "الانضمام إلى المؤسسة" }, @@ -816,6 +830,9 @@ "webauthnCancelOrTimeout": { "message": "تم إلغاء المصادقة أو استغرقت وقتا طويلا. الرجاء المحاولة مرة أخرى." }, + "openInNewTab": { + "message": "Open in new tab" + }, "invalidVerificationCode": { "message": "رمز التحقق غير صالح" }, @@ -846,12 +863,22 @@ "rememberMe": { "message": "تذكرني" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Don't ask again on this device for 30 days" + }, "sendVerificationCodeEmailAgain": { "message": "إرسال رمز التحقق إلى البريد الإلكتروني مرة أخرى" }, "useAnotherTwoStepMethod": { "message": "استخدام طريقة أخرى لتسجيل الدخول بخطوتين" }, + "selectAnotherMethod": { + "message": "Select another method", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Use your recovery code" + }, "insertYubiKey": { "message": "أدخل YubiKey الخاص بك في منفذ USB في كمبيوترك، ثم لمس الزر." }, @@ -885,7 +912,7 @@ "message": "تحقق من خلال نظام الحماية الثنائي لمؤسستك باستخدام تطبيق Duo Mobile أو الرسائل القصيرة أو المكالمة الهاتفية أو مفتاح الأمان U2F.", "description": "'Duo Security' and 'Duo Mobile' are product names and should not be translated." }, - "verifyIdentity": { + "verifyYourIdentity": { "message": "Verify your Identity" }, "weDontRecognizeThisDevice": { @@ -918,6 +945,9 @@ "twoStepOptions": { "message": "خيارات تسجيل الدخول بخطوتين" }, + "selectTwoStepLoginMethod": { + "message": "Select two-step login method" + }, "selfHostedEnvironment": { "message": "البيئة المستضافة ذاتيا" }, @@ -2247,6 +2277,12 @@ "webAuthnAuthenticate": { "message": "مصادقة WebAuthn" }, + "readSecurityKey": { + "message": "Read security key" + }, + "awaitingSecurityKeyInteraction": { + "message": "Awaiting security key interaction..." + }, "hideEmail": { "message": "إخفاء عنوان البريد الإلكتروني الخاص بي من المستلمين." }, @@ -3206,6 +3242,12 @@ "duoRequiredByOrgForAccount": { "message": "تسجيل الدخول لـ Duo من خطوتين مطلوب لحسابك." }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Duo two-step login is required for your account. Follow the steps below to finish logging in." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Follow the steps below to finish logging in." + }, "launchDuo": { "message": "تشغيل دوو في المتصفح" }, @@ -3463,9 +3505,27 @@ "sshkeyApprovalTitle": { "message": "تأكيد استخدام مفتاح SSH" }, + "agentForwardingWarningTitle": { + "message": "Warning: Agent Forwarding" + }, + "agentForwardingWarningText": { + "message": "This request comes from a remote device that you are logged into" + }, "sshkeyApprovalMessageInfix": { "message": "يطلب الوصول إلى" }, + "sshkeyApprovalMessageSuffix": { + "message": "in order to" + }, + "sshActionLogin": { + "message": "authenticate to a server" + }, + "sshActionSign": { + "message": "sign a message" + }, + "sshActionGitSign": { + "message": "sign a git commit" + }, "unknownApplication": { "message": "تطبيق" }, @@ -3540,5 +3600,8 @@ }, "updateBrowserOrDisableFingerprintDialogMessage": { "message": "The browser extension you are using is out of date. Please update it or disable browser integration fingerprint validation in the desktop app settings." + }, + "changeAtRiskPassword": { + "message": "Change at-risk password" } } diff --git a/apps/desktop/src/locales/az/messages.json b/apps/desktop/src/locales/az/messages.json index 50bfcf8f476..3cc138f9d52 100644 --- a/apps/desktop/src/locales/az/messages.json +++ b/apps/desktop/src/locales/az/messages.json @@ -543,10 +543,6 @@ "message": "Xüsusi xarakterləri daxil et", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "numWords": { "message": "Söz sayı" }, @@ -652,6 +648,15 @@ "logInToBitwarden": { "message": "Bitwarden-ə giriş edin" }, + "enterTheCodeSentToYourEmail": { + "message": "E-poçtunuza göndərilən kodu daxil edin" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Kimlik doğrulayıcı tətbiqinizdəki kodu daxil edin" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Kimliyi doğrulamaq üçün YubiKey-inizə basın" + }, "logInWithPasskey": { "message": "Keçid açarı ilə giriş et" }, @@ -704,6 +709,15 @@ "masterPassHintLabel": { "message": "Ana parol ipucusu" }, + "passwordStrengthScore": { + "message": "Parolun güc xalı: $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "joinOrganization": { "message": "Təşkilata qoşul" }, @@ -816,6 +830,9 @@ "webauthnCancelOrTimeout": { "message": "Kimlik doğrulama ləğv edildi və ya çox uzun çəkdi. Lütfən yenidən sınayın." }, + "openInNewTab": { + "message": "Yeni vərəqdə aç" + }, "invalidVerificationCode": { "message": "Yararsız doğrulama kodu" }, @@ -846,12 +863,22 @@ "rememberMe": { "message": "Məni xatırla" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Bu cihazda 30 gün ərzində soruşulmasın" + }, "sendVerificationCodeEmailAgain": { "message": "Doğrulama kodu olan e-poçtu yenidən göndər" }, "useAnotherTwoStepMethod": { "message": "Başqa bir iki mərhələli giriş metodu istifadə edin" }, + "selectAnotherMethod": { + "message": "Başqa üsul seçin", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Geri qaytarma kodunuzu istifadə edin" + }, "insertYubiKey": { "message": "\"YubiKey\"i kompüterinizin USB portuna taxın, daha sonra düyməsinə toxunun." }, @@ -885,7 +912,7 @@ "message": "Təşkilatınızını Duo Security ilə doğrulamaq üçün Duo Mobile tətbiqi, SMS, telefon zəngi və ya U2F güvənlik açarını istifadə edin.", "description": "'Duo Security' and 'Duo Mobile' are product names and should not be translated." }, - "verifyIdentity": { + "verifyYourIdentity": { "message": "Kimliyinizi doğrulayın" }, "weDontRecognizeThisDevice": { @@ -918,6 +945,9 @@ "twoStepOptions": { "message": "İki mərhələli giriş seçimləri" }, + "selectTwoStepLoginMethod": { + "message": "İki addımlı giriş üsulunu seçin" + }, "selfHostedEnvironment": { "message": "Self-hosted mühit" }, @@ -2247,6 +2277,12 @@ "webAuthnAuthenticate": { "message": "WebAuthn kimlik doğrulama" }, + "readSecurityKey": { + "message": "Güvənlik açarını oxu" + }, + "awaitingSecurityKeyInteraction": { + "message": "Güvənlik açarı ilə əlaqə gözlənilir..." + }, "hideEmail": { "message": "E-poçt ünvanımı alıcılardan gizlət." }, @@ -3206,6 +3242,12 @@ "duoRequiredByOrgForAccount": { "message": "Hesabınız üçün Duo iki addımlı giriş tələb olunur." }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Hesabınız üçün Duo iki addımlı giriş tələb olunur. Giriş prosesini tamamlamaq üçün aşağıdakı addımları izləyin." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Giriş prosesini tamamlamaq üçün aşağıdakı addımları izləyin." + }, "launchDuo": { "message": "Duo-nu brauzerdə başlat" }, @@ -3463,9 +3505,27 @@ "sshkeyApprovalTitle": { "message": "SSH açar istifadəsini təsdiqlə" }, + "agentForwardingWarningTitle": { + "message": "Xəbərdarlıq: Nümayəndə yönləndirilir" + }, + "agentForwardingWarningText": { + "message": "Bu tələb, giriş etdiyiniz remote bir cihazdan gəlir" + }, "sshkeyApprovalMessageInfix": { "message": "bura müraciət tələb edir:" }, + "sshkeyApprovalMessageSuffix": { + "message": "məqsəd" + }, + "sshActionLogin": { + "message": "serverdə kimlik doğrulaması et" + }, + "sshActionSign": { + "message": "bir mesajı imzala" + }, + "sshActionGitSign": { + "message": "git commit-ini imzala" + }, "unknownApplication": { "message": "Bir tətbiq" }, @@ -3540,5 +3600,8 @@ }, "updateBrowserOrDisableFingerprintDialogMessage": { "message": "İstifadə etdiyiniz brauzer uzantısı köhnəlib. Lütfən onu güncəlləyin, ya da masaüstü tətbiq ayarlarında brauzer inteqrasiyası üzrə barmaq izi ilə doğrulamanı sıradan çıxardın." + }, + "changeAtRiskPassword": { + "message": "Riskli parolları dəyişdir" } } diff --git a/apps/desktop/src/locales/be/messages.json b/apps/desktop/src/locales/be/messages.json index 05a680898f9..abfcf1f3f5e 100644 --- a/apps/desktop/src/locales/be/messages.json +++ b/apps/desktop/src/locales/be/messages.json @@ -543,10 +543,6 @@ "message": "Include special characters", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "numWords": { "message": "Колькасць слоў" }, @@ -652,6 +648,15 @@ "logInToBitwarden": { "message": "Log in to Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "Enter the code sent to your email" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Enter the code from your authenticator app" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Press your YubiKey to authenticate" + }, "logInWithPasskey": { "message": "Log in with passkey" }, @@ -704,6 +709,15 @@ "masterPassHintLabel": { "message": "Master password hint" }, + "passwordStrengthScore": { + "message": "Password strength score $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "joinOrganization": { "message": "Join organization" }, @@ -816,6 +830,9 @@ "webauthnCancelOrTimeout": { "message": "The authentication was cancelled or took too long. Please try again." }, + "openInNewTab": { + "message": "Open in new tab" + }, "invalidVerificationCode": { "message": "Памылковы праверачны код" }, @@ -846,12 +863,22 @@ "rememberMe": { "message": "Запомніць мяне" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Don't ask again on this device for 30 days" + }, "sendVerificationCodeEmailAgain": { "message": "Адправіць праверачны код яшчэ раз" }, "useAnotherTwoStepMethod": { "message": "Выкарыстоўваць іншы метад двухэтапнага ўваходу" }, + "selectAnotherMethod": { + "message": "Select another method", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Use your recovery code" + }, "insertYubiKey": { "message": "Устаўце свой YubiKey у порт USB камп'ютара, а потым націсніце на кнопку." }, @@ -885,7 +912,7 @@ "message": "Праверка з дапамогай Duo Security для вашай арганізацыі, выкарыстоўваючы праграму Duo Mobile, SMS, тэлефонны выклік або ключ бяспекі U2F.", "description": "'Duo Security' and 'Duo Mobile' are product names and should not be translated." }, - "verifyIdentity": { + "verifyYourIdentity": { "message": "Verify your Identity" }, "weDontRecognizeThisDevice": { @@ -918,6 +945,9 @@ "twoStepOptions": { "message": "Параметры двухэтапнага ўваходу" }, + "selectTwoStepLoginMethod": { + "message": "Select two-step login method" + }, "selfHostedEnvironment": { "message": "Асяроддзе ўласнага хостынгу" }, @@ -2247,6 +2277,12 @@ "webAuthnAuthenticate": { "message": "Аўтэнтыфікацыя WebAuthn" }, + "readSecurityKey": { + "message": "Read security key" + }, + "awaitingSecurityKeyInteraction": { + "message": "Awaiting security key interaction..." + }, "hideEmail": { "message": "Схаваць маю электронную пошту ад атрымальнікаў." }, @@ -3206,6 +3242,12 @@ "duoRequiredByOrgForAccount": { "message": "Duo two-step login is required for your account." }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Duo two-step login is required for your account. Follow the steps below to finish logging in." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Follow the steps below to finish logging in." + }, "launchDuo": { "message": "Launch Duo in Browser" }, @@ -3463,9 +3505,27 @@ "sshkeyApprovalTitle": { "message": "Confirm SSH key usage" }, + "agentForwardingWarningTitle": { + "message": "Warning: Agent Forwarding" + }, + "agentForwardingWarningText": { + "message": "This request comes from a remote device that you are logged into" + }, "sshkeyApprovalMessageInfix": { "message": "is requesting access to" }, + "sshkeyApprovalMessageSuffix": { + "message": "in order to" + }, + "sshActionLogin": { + "message": "authenticate to a server" + }, + "sshActionSign": { + "message": "sign a message" + }, + "sshActionGitSign": { + "message": "sign a git commit" + }, "unknownApplication": { "message": "An application" }, @@ -3540,5 +3600,8 @@ }, "updateBrowserOrDisableFingerprintDialogMessage": { "message": "The browser extension you are using is out of date. Please update it or disable browser integration fingerprint validation in the desktop app settings." + }, + "changeAtRiskPassword": { + "message": "Change at-risk password" } } diff --git a/apps/desktop/src/locales/bg/messages.json b/apps/desktop/src/locales/bg/messages.json index cdada0bd00d..a93e2cd725a 100644 --- a/apps/desktop/src/locales/bg/messages.json +++ b/apps/desktop/src/locales/bg/messages.json @@ -543,10 +543,6 @@ "message": "Включване на специални знаци", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "numWords": { "message": "Брой думи" }, @@ -652,6 +648,15 @@ "logInToBitwarden": { "message": "Впишете се в Битуорден" }, + "enterTheCodeSentToYourEmail": { + "message": "Въведете кода изпратен на е-пощата Ви" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Въведете кода от Вашето приложение за удостоверяване" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Натиснете бутона на своя YubiKey за удостоверяване" + }, "logInWithPasskey": { "message": "Вписване със секретен ключ" }, @@ -704,6 +709,15 @@ "masterPassHintLabel": { "message": "Подсказка за главната парола" }, + "passwordStrengthScore": { + "message": "Оценка на сложността на паролата: $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "joinOrganization": { "message": "Присъединяване към организацията" }, @@ -816,6 +830,9 @@ "webauthnCancelOrTimeout": { "message": "Удостоверяването беше отменено или отне твърде много време. Моля, опитайте отново." }, + "openInNewTab": { + "message": "Отваряне в нов раздел" + }, "invalidVerificationCode": { "message": "Грешен код за потвърждаване" }, @@ -846,12 +863,22 @@ "rememberMe": { "message": "Запомняне" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Не ме питайте отново на това устройство за 30 дни" + }, "sendVerificationCodeEmailAgain": { "message": "Повторно изпращане на писмото за потвърждение" }, "useAnotherTwoStepMethod": { "message": "Използвайте друг начин на двустепенно удостоверяване" }, + "selectAnotherMethod": { + "message": "Изберете друг метод", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Използване на код за възстановяване" + }, "insertYubiKey": { "message": "Поставете устройството на YubiKey в USB порт на компютъра и натиснете бутона на устройството." }, @@ -885,7 +912,7 @@ "message": "Удостоверяване чрез Duo Security за организацията ви, с ползване на приложението Duo Mobile, SMS, телефонен разговор или устройство U2F.", "description": "'Duo Security' and 'Duo Mobile' are product names and should not be translated." }, - "verifyIdentity": { + "verifyYourIdentity": { "message": "Потвърдете самоличността си" }, "weDontRecognizeThisDevice": { @@ -918,6 +945,9 @@ "twoStepOptions": { "message": "Настройки на двустепенното удостоверяване" }, + "selectTwoStepLoginMethod": { + "message": "Изберете начин за двустепенно удостоверяване" + }, "selfHostedEnvironment": { "message": "Собствена среда" }, @@ -2247,6 +2277,12 @@ "webAuthnAuthenticate": { "message": "Идентификация WebAuthn" }, + "readSecurityKey": { + "message": "Прочитане на ключа за сигурност" + }, + "awaitingSecurityKeyInteraction": { + "message": "Изчакване на действие с ключ за сигурност…" + }, "hideEmail": { "message": "Скриване на е-пощата ми от получателите." }, @@ -3206,6 +3242,12 @@ "duoRequiredByOrgForAccount": { "message": "Вашата регистрация изисква двустепенно удостоверяване чрез Duo." }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Вашият акаунт изисква вписване чрез двустепенно удостоверяване с Duo. Следвайте стъпките по-долу, за да завършите вписването." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Следвайте стъпките по-долу, за да завършите вписването." + }, "launchDuo": { "message": "Стартирайте Duo в браузъра" }, @@ -3463,9 +3505,27 @@ "sshkeyApprovalTitle": { "message": "Потвърждаване на употребата на SSH ключа" }, + "agentForwardingWarningTitle": { + "message": "Внимание: Пренасочване на агента" + }, + "agentForwardingWarningText": { + "message": "Тази заявка идва от отдалечено устройство, в което сте вписан(а)" + }, "sshkeyApprovalMessageInfix": { "message": "иска достъп до" }, + "sshkeyApprovalMessageSuffix": { + "message": "за да" + }, + "sshActionLogin": { + "message": "се удостоверите в сървър" + }, + "sshActionSign": { + "message": "подпишете съобщение" + }, + "sshActionGitSign": { + "message": "подпишете подаване в git" + }, "unknownApplication": { "message": "Приложение" }, @@ -3540,5 +3600,8 @@ }, "updateBrowserOrDisableFingerprintDialogMessage": { "message": "Добавката за браузъра, която използвате, е остаряла. Моля, обновете я или изключете интеграцията за проверка на пръстов отпечатък в браузъра от настройките на самостоятелното приложение." + }, + "changeAtRiskPassword": { + "message": "Промяна на парола в риск" } } diff --git a/apps/desktop/src/locales/bn/messages.json b/apps/desktop/src/locales/bn/messages.json index 5b34f668c4f..de96415ad8d 100644 --- a/apps/desktop/src/locales/bn/messages.json +++ b/apps/desktop/src/locales/bn/messages.json @@ -543,10 +543,6 @@ "message": "Include special characters", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "numWords": { "message": "শব্দের সংখ্যা" }, @@ -652,6 +648,15 @@ "logInToBitwarden": { "message": "Log in to Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "Enter the code sent to your email" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Enter the code from your authenticator app" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Press your YubiKey to authenticate" + }, "logInWithPasskey": { "message": "Log in with passkey" }, @@ -704,6 +709,15 @@ "masterPassHintLabel": { "message": "Master password hint" }, + "passwordStrengthScore": { + "message": "Password strength score $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "joinOrganization": { "message": "Join organization" }, @@ -816,6 +830,9 @@ "webauthnCancelOrTimeout": { "message": "The authentication was cancelled or took too long. Please try again." }, + "openInNewTab": { + "message": "Open in new tab" + }, "invalidVerificationCode": { "message": "Invalid verification code" }, @@ -846,12 +863,22 @@ "rememberMe": { "message": "আমাকে মনে রাখবেন" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Don't ask again on this device for 30 days" + }, "sendVerificationCodeEmailAgain": { "message": "আবার যাচাইকরণ কোড ইমেইলে প্রেরণ করুন" }, "useAnotherTwoStepMethod": { "message": "অন্য দ্বি-পদক্ষেপ প্রবেশ পদ্ধতি ব্যবহার করুন" }, + "selectAnotherMethod": { + "message": "Select another method", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Use your recovery code" + }, "insertYubiKey": { "message": "আপনার কম্পিউটারের ইউএসবি পোর্টে আপনার YubiKey ঢোকান, তারপরে তার বোতামটি স্পর্শ করুন।" }, @@ -885,7 +912,7 @@ "message": "Duo Mobile app, এসএমএস, ফোন কল, বা U2F সুরক্ষা কী ব্যবহার করে আপনার সংস্থার জন্য Duo Security এর মাধ্যমে যাচাই করুন।", "description": "'Duo Security' and 'Duo Mobile' are product names and should not be translated." }, - "verifyIdentity": { + "verifyYourIdentity": { "message": "Verify your Identity" }, "weDontRecognizeThisDevice": { @@ -918,6 +945,9 @@ "twoStepOptions": { "message": "দ্বি-পদক্ষেপ লগইন বিকল্প" }, + "selectTwoStepLoginMethod": { + "message": "Select two-step login method" + }, "selfHostedEnvironment": { "message": "স্ব-হোস্টকৃত পরিবেশ" }, @@ -2247,6 +2277,12 @@ "webAuthnAuthenticate": { "message": "Authenticate WebAuthn" }, + "readSecurityKey": { + "message": "Read security key" + }, + "awaitingSecurityKeyInteraction": { + "message": "Awaiting security key interaction..." + }, "hideEmail": { "message": "Hide my email address from recipients." }, @@ -3206,6 +3242,12 @@ "duoRequiredByOrgForAccount": { "message": "Duo two-step login is required for your account." }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Duo two-step login is required for your account. Follow the steps below to finish logging in." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Follow the steps below to finish logging in." + }, "launchDuo": { "message": "Launch Duo in Browser" }, @@ -3463,9 +3505,27 @@ "sshkeyApprovalTitle": { "message": "Confirm SSH key usage" }, + "agentForwardingWarningTitle": { + "message": "Warning: Agent Forwarding" + }, + "agentForwardingWarningText": { + "message": "This request comes from a remote device that you are logged into" + }, "sshkeyApprovalMessageInfix": { "message": "is requesting access to" }, + "sshkeyApprovalMessageSuffix": { + "message": "in order to" + }, + "sshActionLogin": { + "message": "authenticate to a server" + }, + "sshActionSign": { + "message": "sign a message" + }, + "sshActionGitSign": { + "message": "sign a git commit" + }, "unknownApplication": { "message": "An application" }, @@ -3540,5 +3600,8 @@ }, "updateBrowserOrDisableFingerprintDialogMessage": { "message": "The browser extension you are using is out of date. Please update it or disable browser integration fingerprint validation in the desktop app settings." + }, + "changeAtRiskPassword": { + "message": "Change at-risk password" } } diff --git a/apps/desktop/src/locales/bs/messages.json b/apps/desktop/src/locales/bs/messages.json index c28cc71c4bf..5bf06600dfd 100644 --- a/apps/desktop/src/locales/bs/messages.json +++ b/apps/desktop/src/locales/bs/messages.json @@ -543,10 +543,6 @@ "message": "Include special characters", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "numWords": { "message": "Broj riječi" }, @@ -652,6 +648,15 @@ "logInToBitwarden": { "message": "Log in to Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "Enter the code sent to your email" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Enter the code from your authenticator app" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Press your YubiKey to authenticate" + }, "logInWithPasskey": { "message": "Log in with passkey" }, @@ -704,6 +709,15 @@ "masterPassHintLabel": { "message": "Master password hint" }, + "passwordStrengthScore": { + "message": "Password strength score $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "joinOrganization": { "message": "Join organization" }, @@ -816,6 +830,9 @@ "webauthnCancelOrTimeout": { "message": "The authentication was cancelled or took too long. Please try again." }, + "openInNewTab": { + "message": "Open in new tab" + }, "invalidVerificationCode": { "message": "Neispravan verifikacijski kod" }, @@ -846,12 +863,22 @@ "rememberMe": { "message": "Zapamti me" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Don't ask again on this device for 30 days" + }, "sendVerificationCodeEmailAgain": { "message": "Ponovo pošaljite E-Mail sa verifikacionim kodom" }, "useAnotherTwoStepMethod": { "message": "Koristite drugi način prijavljivanja u dva koraka" }, + "selectAnotherMethod": { + "message": "Select another method", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Use your recovery code" + }, "insertYubiKey": { "message": "Ubaci svoj YubiKey u USB slot računara, a zatim dodirni njegovu tipku." }, @@ -885,7 +912,7 @@ "message": "Potvrdi sa Duo Security za svoju organizaciju pomoću aplikacije Duo Mobile, SMS-om, telefonskim pozivom ili U2F sigurnosnim ključem.", "description": "'Duo Security' and 'Duo Mobile' are product names and should not be translated." }, - "verifyIdentity": { + "verifyYourIdentity": { "message": "Verify your Identity" }, "weDontRecognizeThisDevice": { @@ -918,6 +945,9 @@ "twoStepOptions": { "message": "Opcije prijave u dva koraka" }, + "selectTwoStepLoginMethod": { + "message": "Select two-step login method" + }, "selfHostedEnvironment": { "message": "Vlastito hosting okruženje" }, @@ -2247,6 +2277,12 @@ "webAuthnAuthenticate": { "message": "Authenticate WebAuthn" }, + "readSecurityKey": { + "message": "Read security key" + }, + "awaitingSecurityKeyInteraction": { + "message": "Awaiting security key interaction..." + }, "hideEmail": { "message": "Hide my email address from recipients." }, @@ -3206,6 +3242,12 @@ "duoRequiredByOrgForAccount": { "message": "Duo two-step login is required for your account." }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Duo two-step login is required for your account. Follow the steps below to finish logging in." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Follow the steps below to finish logging in." + }, "launchDuo": { "message": "Launch Duo in Browser" }, @@ -3463,9 +3505,27 @@ "sshkeyApprovalTitle": { "message": "Confirm SSH key usage" }, + "agentForwardingWarningTitle": { + "message": "Warning: Agent Forwarding" + }, + "agentForwardingWarningText": { + "message": "This request comes from a remote device that you are logged into" + }, "sshkeyApprovalMessageInfix": { "message": "is requesting access to" }, + "sshkeyApprovalMessageSuffix": { + "message": "in order to" + }, + "sshActionLogin": { + "message": "authenticate to a server" + }, + "sshActionSign": { + "message": "sign a message" + }, + "sshActionGitSign": { + "message": "sign a git commit" + }, "unknownApplication": { "message": "An application" }, @@ -3540,5 +3600,8 @@ }, "updateBrowserOrDisableFingerprintDialogMessage": { "message": "The browser extension you are using is out of date. Please update it or disable browser integration fingerprint validation in the desktop app settings." + }, + "changeAtRiskPassword": { + "message": "Change at-risk password" } } diff --git a/apps/desktop/src/locales/ca/messages.json b/apps/desktop/src/locales/ca/messages.json index d732c4912c7..4155a3e4275 100644 --- a/apps/desktop/src/locales/ca/messages.json +++ b/apps/desktop/src/locales/ca/messages.json @@ -543,10 +543,6 @@ "message": "Inclou caràcters especials", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "numWords": { "message": "Nombre de paraules" }, @@ -652,6 +648,15 @@ "logInToBitwarden": { "message": "Inicia sessió a Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "Enter the code sent to your email" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Enter the code from your authenticator app" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Press your YubiKey to authenticate" + }, "logInWithPasskey": { "message": "Inicieu sessió amb la clau de pas" }, @@ -704,6 +709,15 @@ "masterPassHintLabel": { "message": "Pista de la contrasenya mestra" }, + "passwordStrengthScore": { + "message": "Password strength score $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "joinOrganization": { "message": "Uniu-vos a l'organització" }, @@ -816,6 +830,9 @@ "webauthnCancelOrTimeout": { "message": "L'autenticació s'ha cancel·lat o ha tardat massa. Torna-ho a provar." }, + "openInNewTab": { + "message": "Open in new tab" + }, "invalidVerificationCode": { "message": "Codi de verificació no vàlid" }, @@ -846,12 +863,22 @@ "rememberMe": { "message": "Recorda'm" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Don't ask again on this device for 30 days" + }, "sendVerificationCodeEmailAgain": { "message": "Envia el codi de verificació altra vegada" }, "useAnotherTwoStepMethod": { "message": "Utilitzeu un altre mètode d'inici de sessió en dues passes" }, + "selectAnotherMethod": { + "message": "Select another method", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Use your recovery code" + }, "insertYubiKey": { "message": "Introduïu la vostra YubiKey al port USB de l'ordinador i, a continuació, premeu el seu botó." }, @@ -885,8 +912,8 @@ "message": "Verifiqueu amb Duo Security per a la vostra organització mitjançant l'aplicació Duo Mobile, SMS, trucada telefònica o clau de seguretat U2F.", "description": "'Duo Security' and 'Duo Mobile' are product names and should not be translated." }, - "verifyIdentity": { - "message": "Verifiqueu la vostra identitat" + "verifyYourIdentity": { + "message": "Verify your Identity" }, "weDontRecognizeThisDevice": { "message": "No reconeixem aquest dispositiu. Introduïu el codi que us hem enviat al correu electrònic per verificar la identitat." @@ -918,6 +945,9 @@ "twoStepOptions": { "message": "Opcions d'inici de sessió en dues passes" }, + "selectTwoStepLoginMethod": { + "message": "Select two-step login method" + }, "selfHostedEnvironment": { "message": "Entorn d'allotjament propi" }, @@ -2247,6 +2277,12 @@ "webAuthnAuthenticate": { "message": "Autenticar WebAuthn" }, + "readSecurityKey": { + "message": "Read security key" + }, + "awaitingSecurityKeyInteraction": { + "message": "Awaiting security key interaction..." + }, "hideEmail": { "message": "Amagueu la meua adreça de correu electrònic als destinataris." }, @@ -3206,6 +3242,12 @@ "duoRequiredByOrgForAccount": { "message": "Es requereix l'inici de sessió en dos passos de DUO al vostre compte." }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Duo two-step login is required for your account. Follow the steps below to finish logging in." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Follow the steps below to finish logging in." + }, "launchDuo": { "message": "Inicia Duo al navegador" }, @@ -3463,9 +3505,27 @@ "sshkeyApprovalTitle": { "message": "Confirm SSH key usage" }, + "agentForwardingWarningTitle": { + "message": "Warning: Agent Forwarding" + }, + "agentForwardingWarningText": { + "message": "This request comes from a remote device that you are logged into" + }, "sshkeyApprovalMessageInfix": { "message": "is requesting access to" }, + "sshkeyApprovalMessageSuffix": { + "message": "in order to" + }, + "sshActionLogin": { + "message": "authenticate to a server" + }, + "sshActionSign": { + "message": "sign a message" + }, + "sshActionGitSign": { + "message": "sign a git commit" + }, "unknownApplication": { "message": "Una aplicació" }, @@ -3540,5 +3600,8 @@ }, "updateBrowserOrDisableFingerprintDialogMessage": { "message": "The browser extension you are using is out of date. Please update it or disable browser integration fingerprint validation in the desktop app settings." + }, + "changeAtRiskPassword": { + "message": "Change at-risk password" } } diff --git a/apps/desktop/src/locales/cs/messages.json b/apps/desktop/src/locales/cs/messages.json index 6f996578f07..f8503936640 100644 --- a/apps/desktop/src/locales/cs/messages.json +++ b/apps/desktop/src/locales/cs/messages.json @@ -543,10 +543,6 @@ "message": "Zahrnout speciální znaky", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "numWords": { "message": "Počet slov" }, @@ -652,6 +648,15 @@ "logInToBitwarden": { "message": "Přihlásit se do Bitwardenu" }, + "enterTheCodeSentToYourEmail": { + "message": "Zadejte kód odeslaný na Váš e-mail" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Zadejte kód z Vaší ověřovací aplikace" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Stiskněte svůj YubiKey pro ověření" + }, "logInWithPasskey": { "message": "Přihlásit se pomocí přístupového klíče" }, @@ -704,6 +709,15 @@ "masterPassHintLabel": { "message": "Nápověda k hlavnímu heslu" }, + "passwordStrengthScore": { + "message": "Skóre síly hesla: $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "joinOrganization": { "message": "Přidat se k organizaci" }, @@ -816,6 +830,9 @@ "webauthnCancelOrTimeout": { "message": "Ověření bylo zrušeno nebo trvalo příliš dlouho. Zkuste to znovu." }, + "openInNewTab": { + "message": "Otevřít v nové kartě" + }, "invalidVerificationCode": { "message": "Neplatný ověřovací kód" }, @@ -846,12 +863,22 @@ "rememberMe": { "message": "Zapamatovat mě" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Neptat se na tomto zařízení 30 dnů" + }, "sendVerificationCodeEmailAgain": { "message": "Znovu zaslat ověřovací kód na e-mail" }, "useAnotherTwoStepMethod": { "message": "Použít jinou metodu dvoufázového přihlášení" }, + "selectAnotherMethod": { + "message": "Vybrat jinou metodu", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Použít obnovovací kód" + }, "insertYubiKey": { "message": "Vložte YubiKey do USB portu Vašeho počítače a stiskněte jeho tlačítko." }, @@ -885,7 +912,7 @@ "message": "Ověření pomocí Duo Security pro Vaši organizaci prostřednictvím aplikace Duo Mobile, SMS, telefonního hovoru nebo bezpečnostního klíče U2F.", "description": "'Duo Security' and 'Duo Mobile' are product names and should not be translated." }, - "verifyIdentity": { + "verifyYourIdentity": { "message": "Ověřte svou totožnost" }, "weDontRecognizeThisDevice": { @@ -918,6 +945,9 @@ "twoStepOptions": { "message": "Volby dvoufázového přihlášení" }, + "selectTwoStepLoginMethod": { + "message": "Vyberte metodu dvoufázového přihlášení" + }, "selfHostedEnvironment": { "message": "Vlastní hostované prostředí" }, @@ -2247,6 +2277,12 @@ "webAuthnAuthenticate": { "message": "Ověřit WebAuthn" }, + "readSecurityKey": { + "message": "Přečíst bezpečnostní klíč" + }, + "awaitingSecurityKeyInteraction": { + "message": "Čeká se na interakci s bezpečnostním klíčem..." + }, "hideEmail": { "message": "Skrýt moji e-mailovou adresu před příjemci." }, @@ -3206,6 +3242,12 @@ "duoRequiredByOrgForAccount": { "message": "Pro Váš účet je vyžadováno dvoufázové přihlášení DUO." }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Pro Váš účet je nutné dvoufázové přihlášení. Pro dokončení přihlášení postupujte podle následujících kroků." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Postupujte podle kroků níže pro dokončení přihlášení." + }, "launchDuo": { "message": "Spustit DUO v prohlížeči" }, @@ -3463,9 +3505,27 @@ "sshkeyApprovalTitle": { "message": "Potvrdit použití SSH klíče" }, + "agentForwardingWarningTitle": { + "message": "Varování: Agent přesměrování" + }, + "agentForwardingWarningText": { + "message": "Tento požadavek pochází ze vzdáleného zařízení, ke kterému jste přihlášeni" + }, "sshkeyApprovalMessageInfix": { "message": "žádá o přístup k" }, + "sshkeyApprovalMessageSuffix": { + "message": "za účelem" + }, + "sshActionLogin": { + "message": "ověření na serveru" + }, + "sshActionSign": { + "message": "podepsání zprávy" + }, + "sshActionGitSign": { + "message": "podepsání commitu na gitu" + }, "unknownApplication": { "message": "Aplikace" }, @@ -3540,5 +3600,8 @@ }, "updateBrowserOrDisableFingerprintDialogMessage": { "message": "Použité rozšíření prohlížeče je zastaralé. Aktualizujte jej nebo zakažte ověření otisků prstů při integraci prohlížeče v nastavení aplikace." + }, + "changeAtRiskPassword": { + "message": "Změnit ohrožené heslo" } } diff --git a/apps/desktop/src/locales/cy/messages.json b/apps/desktop/src/locales/cy/messages.json index 91e8f451569..b1519f8aea8 100644 --- a/apps/desktop/src/locales/cy/messages.json +++ b/apps/desktop/src/locales/cy/messages.json @@ -543,10 +543,6 @@ "message": "Include special characters", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "numWords": { "message": "Number of words" }, @@ -652,6 +648,15 @@ "logInToBitwarden": { "message": "Log in to Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "Enter the code sent to your email" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Enter the code from your authenticator app" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Press your YubiKey to authenticate" + }, "logInWithPasskey": { "message": "Log in with passkey" }, @@ -704,6 +709,15 @@ "masterPassHintLabel": { "message": "Master password hint" }, + "passwordStrengthScore": { + "message": "Password strength score $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "joinOrganization": { "message": "Join organization" }, @@ -816,6 +830,9 @@ "webauthnCancelOrTimeout": { "message": "The authentication was cancelled or took too long. Please try again." }, + "openInNewTab": { + "message": "Open in new tab" + }, "invalidVerificationCode": { "message": "Invalid verification code" }, @@ -846,12 +863,22 @@ "rememberMe": { "message": "Remember me" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Don't ask again on this device for 30 days" + }, "sendVerificationCodeEmailAgain": { "message": "Send verification code email again" }, "useAnotherTwoStepMethod": { "message": "Use another two-step login method" }, + "selectAnotherMethod": { + "message": "Select another method", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Use your recovery code" + }, "insertYubiKey": { "message": "Insert your YubiKey into your computer's USB port, then touch its button." }, @@ -885,7 +912,7 @@ "message": "Verify with Duo Security for your organization using the Duo Mobile app, SMS, phone call, or U2F security key.", "description": "'Duo Security' and 'Duo Mobile' are product names and should not be translated." }, - "verifyIdentity": { + "verifyYourIdentity": { "message": "Verify your Identity" }, "weDontRecognizeThisDevice": { @@ -918,6 +945,9 @@ "twoStepOptions": { "message": "Two-step login options" }, + "selectTwoStepLoginMethod": { + "message": "Select two-step login method" + }, "selfHostedEnvironment": { "message": "Self-hosted environment" }, @@ -2247,6 +2277,12 @@ "webAuthnAuthenticate": { "message": "Authenticate WebAuthn" }, + "readSecurityKey": { + "message": "Read security key" + }, + "awaitingSecurityKeyInteraction": { + "message": "Awaiting security key interaction..." + }, "hideEmail": { "message": "Hide my email address from recipients." }, @@ -3206,6 +3242,12 @@ "duoRequiredByOrgForAccount": { "message": "Duo two-step login is required for your account." }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Duo two-step login is required for your account. Follow the steps below to finish logging in." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Follow the steps below to finish logging in." + }, "launchDuo": { "message": "Launch Duo in Browser" }, @@ -3463,9 +3505,27 @@ "sshkeyApprovalTitle": { "message": "Confirm SSH key usage" }, + "agentForwardingWarningTitle": { + "message": "Warning: Agent Forwarding" + }, + "agentForwardingWarningText": { + "message": "This request comes from a remote device that you are logged into" + }, "sshkeyApprovalMessageInfix": { "message": "is requesting access to" }, + "sshkeyApprovalMessageSuffix": { + "message": "in order to" + }, + "sshActionLogin": { + "message": "authenticate to a server" + }, + "sshActionSign": { + "message": "sign a message" + }, + "sshActionGitSign": { + "message": "sign a git commit" + }, "unknownApplication": { "message": "An application" }, @@ -3540,5 +3600,8 @@ }, "updateBrowserOrDisableFingerprintDialogMessage": { "message": "The browser extension you are using is out of date. Please update it or disable browser integration fingerprint validation in the desktop app settings." + }, + "changeAtRiskPassword": { + "message": "Change at-risk password" } } diff --git a/apps/desktop/src/locales/da/messages.json b/apps/desktop/src/locales/da/messages.json index 93818506a61..123c4fed4f8 100644 --- a/apps/desktop/src/locales/da/messages.json +++ b/apps/desktop/src/locales/da/messages.json @@ -543,10 +543,6 @@ "message": "Inkludér specialtegn", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "numWords": { "message": "Antal ord" }, @@ -652,6 +648,15 @@ "logInToBitwarden": { "message": "Log ind på Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "Enter the code sent to your email" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Enter the code from your authenticator app" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Press your YubiKey to authenticate" + }, "logInWithPasskey": { "message": "Log ind med adgangsnøgle" }, @@ -704,6 +709,15 @@ "masterPassHintLabel": { "message": "Hovedadgangskodetip" }, + "passwordStrengthScore": { + "message": "Password strength score $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "joinOrganization": { "message": "Bliv medlem af organisation" }, @@ -816,6 +830,9 @@ "webauthnCancelOrTimeout": { "message": "Godkendelsen blev afbrudt eller tog for lang tid. Forsøg igen." }, + "openInNewTab": { + "message": "Open in new tab" + }, "invalidVerificationCode": { "message": "Ugyldig bekræftelseskode" }, @@ -846,12 +863,22 @@ "rememberMe": { "message": "Husk mig" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Don't ask again on this device for 30 days" + }, "sendVerificationCodeEmailAgain": { "message": "Send bekræftelseskodee-mail igen" }, "useAnotherTwoStepMethod": { "message": "Brug en anden totrins-loginmetode" }, + "selectAnotherMethod": { + "message": "Select another method", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Use your recovery code" + }, "insertYubiKey": { "message": "Indsæt din YubiKey i din computers USB-port og tryk derefter på dens knap." }, @@ -885,8 +912,8 @@ "message": "Bekræft med Duo Security for din organisation vha. Duo Mobile-app, SMS, telefonopkald eller U2F-sikkerhedsnøgle.", "description": "'Duo Security' and 'Duo Mobile' are product names and should not be translated." }, - "verifyIdentity": { - "message": "Bekræft identiteten" + "verifyYourIdentity": { + "message": "Verify your Identity" }, "weDontRecognizeThisDevice": { "message": "Denne enhed er ikke genkendt. Angiv koden i den tilsendte e-mail for at bekræfte identiteten." @@ -918,6 +945,9 @@ "twoStepOptions": { "message": "Totrins-login indstillinger" }, + "selectTwoStepLoginMethod": { + "message": "Select two-step login method" + }, "selfHostedEnvironment": { "message": "Selv-hostet miljø" }, @@ -2247,6 +2277,12 @@ "webAuthnAuthenticate": { "message": "Godkend WebAuthn" }, + "readSecurityKey": { + "message": "Read security key" + }, + "awaitingSecurityKeyInteraction": { + "message": "Awaiting security key interaction..." + }, "hideEmail": { "message": "Skjul min e-mailadresse for modtagere." }, @@ -3206,6 +3242,12 @@ "duoRequiredByOrgForAccount": { "message": "Duo totrinsindlogning kræves for kontoen." }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Duo two-step login is required for your account. Follow the steps below to finish logging in." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Follow the steps below to finish logging in." + }, "launchDuo": { "message": "Start Duo i webbrowser" }, @@ -3463,9 +3505,27 @@ "sshkeyApprovalTitle": { "message": "Bekræft brug af SSH-nøgle" }, + "agentForwardingWarningTitle": { + "message": "Warning: Agent Forwarding" + }, + "agentForwardingWarningText": { + "message": "This request comes from a remote device that you are logged into" + }, "sshkeyApprovalMessageInfix": { "message": "anmoder om adgang til" }, + "sshkeyApprovalMessageSuffix": { + "message": "in order to" + }, + "sshActionLogin": { + "message": "authenticate to a server" + }, + "sshActionSign": { + "message": "sign a message" + }, + "sshActionGitSign": { + "message": "sign a git commit" + }, "unknownApplication": { "message": "En applikation" }, @@ -3540,5 +3600,8 @@ }, "updateBrowserOrDisableFingerprintDialogMessage": { "message": "Den anvendte webbrowserudvidelse er forældet. Opdatér den venligst eller deaktivér webbrowserintegreret fingeraftryksbekræftelse i computer-app indstillingerne." + }, + "changeAtRiskPassword": { + "message": "Change at-risk password" } } diff --git a/apps/desktop/src/locales/de/messages.json b/apps/desktop/src/locales/de/messages.json index 527a3014637..f3cced1dcfd 100644 --- a/apps/desktop/src/locales/de/messages.json +++ b/apps/desktop/src/locales/de/messages.json @@ -543,10 +543,6 @@ "message": "Sonderzeichen einschließen", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "numWords": { "message": "Anzahl der Wörter" }, @@ -652,6 +648,15 @@ "logInToBitwarden": { "message": "Bei Bitwarden anmelden" }, + "enterTheCodeSentToYourEmail": { + "message": "Gib den an deine E-Mail-Adresse gesendeten Code ein" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Gib den Code aus deiner Authenticator-App ein" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Drücke zum Authentifizieren auf deinen YubiKey" + }, "logInWithPasskey": { "message": "Mit Passkey anmelden" }, @@ -704,6 +709,15 @@ "masterPassHintLabel": { "message": "Master-Passwort-Hinweis" }, + "passwordStrengthScore": { + "message": "Bewertung der Passwortstärke $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "joinOrganization": { "message": "Organisation beitreten" }, @@ -816,6 +830,9 @@ "webauthnCancelOrTimeout": { "message": "Die Authentifizierung wurde abgebrochen oder hat zu lange gedauert. Bitte versuche es erneut." }, + "openInNewTab": { + "message": "In neuem Tab öffnen" + }, "invalidVerificationCode": { "message": "Ungültiger Verifizierungscode" }, @@ -846,12 +863,22 @@ "rememberMe": { "message": "Angemeldet bleiben" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Für 30 Tage auf diesem Gerät nicht mehr fragen" + }, "sendVerificationCodeEmailAgain": { "message": "E-Mail mit Bestätigungscode erneut versenden" }, "useAnotherTwoStepMethod": { "message": "Eine andere Zwei-Faktor-Anmeldemethode verwenden" }, + "selectAnotherMethod": { + "message": "Wähle eine andere Methode", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Verwende deinen Wiederherstellungscode" + }, "insertYubiKey": { "message": "Stecke deinen YubiKey in einen USB-Anschluss deines Computers, dann berühre den Button." }, @@ -885,7 +912,7 @@ "message": "Nutze Duo Security, um dich mit der Duo-Mobile-App, SMS, per Anruf oder U2F-Sicherheitsschlüssel bei deiner Organisation zu verifizieren.", "description": "'Duo Security' and 'Duo Mobile' are product names and should not be translated." }, - "verifyIdentity": { + "verifyYourIdentity": { "message": "Verifiziere deine Identität" }, "weDontRecognizeThisDevice": { @@ -918,6 +945,9 @@ "twoStepOptions": { "message": "Optionen für Zwei-Faktor-Authentifizierung" }, + "selectTwoStepLoginMethod": { + "message": "Zwei-Faktor-Authentifizierungsmethode auswählen" + }, "selfHostedEnvironment": { "message": "Selbst gehostete Umgebung" }, @@ -1776,7 +1806,7 @@ "message": "Passwort oder PIN beim Start der App verlangen" }, "requirePasswordWithoutPinOnStart": { - "message": "Benötigt ein Passwort beim Starten der App" + "message": "Ein Passwort beim Starten der App verlangen" }, "recommendedForSecurity": { "message": "Aus Sicherheitsgründen empfohlen." @@ -2247,6 +2277,12 @@ "webAuthnAuthenticate": { "message": "WebAuthn authentifizieren" }, + "readSecurityKey": { + "message": "Sicherheitsschlüssel auslesen" + }, + "awaitingSecurityKeyInteraction": { + "message": "Warte auf Sicherheitsschlüssel-Interaktion..." + }, "hideEmail": { "message": "Meine E-Mail-Adresse vor den Empfängern ausblenden." }, @@ -3206,6 +3242,12 @@ "duoRequiredByOrgForAccount": { "message": "Für dein Konto ist die DUO Zwei-Faktor-Authentifizierung erforderlich." }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Die Duo-Zwei-Faktor-Authentifizierung ist für dein Konto erforderlich. Folge den Schritten unten, um die Anmeldung abzuschließen." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Folge den Schritten unten, um die Anmeldung abzuschließen." + }, "launchDuo": { "message": "Duo im Browser starten" }, @@ -3463,9 +3505,27 @@ "sshkeyApprovalTitle": { "message": "Verwendung des SSH-Schlüssels bestätigen" }, + "agentForwardingWarningTitle": { + "message": "Warnung: Agent-Weiterleitung" + }, + "agentForwardingWarningText": { + "message": "Diese Anfrage kommt von einem entfernten Gerät, bei dem du angemeldet bist" + }, "sshkeyApprovalMessageInfix": { "message": "fragt den Zugriff an für" }, + "sshkeyApprovalMessageSuffix": { + "message": "um" + }, + "sshActionLogin": { + "message": "sich bei einem Server zu authentifizieren" + }, + "sshActionSign": { + "message": "eine Nachricht zu signieren" + }, + "sshActionGitSign": { + "message": "einen Git-Commit zu signieren" + }, "unknownApplication": { "message": "Eine Anwendung" }, @@ -3540,5 +3600,8 @@ }, "updateBrowserOrDisableFingerprintDialogMessage": { "message": "Die von dir verwendete Browser-Erweiterung ist veraltet. Bitte aktualisiere sie oder deaktiviere die Fingerabdrucküberprüfung der Browser-Integration in den Einstellungen der Desktop-App." + }, + "changeAtRiskPassword": { + "message": "Gefährdetes Passwort ändern" } } diff --git a/apps/desktop/src/locales/el/messages.json b/apps/desktop/src/locales/el/messages.json index ace7a5ac3bf..9e710b544df 100644 --- a/apps/desktop/src/locales/el/messages.json +++ b/apps/desktop/src/locales/el/messages.json @@ -543,10 +543,6 @@ "message": "Συμπερίληψη ειδικών χαρακτήρων", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "numWords": { "message": "Αριθμός λέξεων" }, @@ -652,6 +648,15 @@ "logInToBitwarden": { "message": "Σύνδεση στο Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "Enter the code sent to your email" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Enter the code from your authenticator app" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Press your YubiKey to authenticate" + }, "logInWithPasskey": { "message": "Σύνδεση με κλειδί πρόσβασης" }, @@ -704,6 +709,15 @@ "masterPassHintLabel": { "message": "Υπόδειξη κύριου κωδικού πρόσβασης" }, + "passwordStrengthScore": { + "message": "Password strength score $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "joinOrganization": { "message": "Συμμετοχή σε οργανισμό" }, @@ -816,6 +830,9 @@ "webauthnCancelOrTimeout": { "message": "Η αυθεντικοποίηση ακυρώθηκε ή διήρκησε πολύ ώρα. Παρακαλώ προσπαθήστε ξανά." }, + "openInNewTab": { + "message": "Open in new tab" + }, "invalidVerificationCode": { "message": "Μη έγκυρος κωδικός επαλήθευσης" }, @@ -846,12 +863,22 @@ "rememberMe": { "message": "Να με θυμάσαι" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Don't ask again on this device for 30 days" + }, "sendVerificationCodeEmailAgain": { "message": "Επανάληψη αποστολής κωδικού επαλήθευσης μέσω ηλ. ταχυδρομείου" }, "useAnotherTwoStepMethod": { "message": "Χρήση άλλης μεθόδου σύνδεσης δύο βημάτων" }, + "selectAnotherMethod": { + "message": "Select another method", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Use your recovery code" + }, "insertYubiKey": { "message": "Τοποθετήστε το YubiKey στη θύρα USB του υπολογιστή σας και έπειτα αγγίξτε το κουμπί του." }, @@ -885,8 +912,8 @@ "message": "Επαληθεύστε με το Duo Security για τον οργανισμό σας χρησιμοποιώντας την εφαρμογή Duo Mobile, μήνυμα SMS, τηλεφωνική κλήση ή κλειδί ασφαλείας U2F.", "description": "'Duo Security' and 'Duo Mobile' are product names and should not be translated." }, - "verifyIdentity": { - "message": "Επαληθεύστε την ταυτότητά σας" + "verifyYourIdentity": { + "message": "Verify your Identity" }, "weDontRecognizeThisDevice": { "message": "Δεν αναγνωρίζουμε αυτή τη συσκευή. Εισάγετε τον κωδικό που στάλθηκε στο email σας για να επαληθεύσετε την ταυτότητά σας." @@ -918,6 +945,9 @@ "twoStepOptions": { "message": "Επιλογές σύνδεσης δύο βημάτων" }, + "selectTwoStepLoginMethod": { + "message": "Select two-step login method" + }, "selfHostedEnvironment": { "message": "Αυτο-φιλοξενούμενο περιβάλλον" }, @@ -2247,6 +2277,12 @@ "webAuthnAuthenticate": { "message": "Ταυτοποίηση WebAutn" }, + "readSecurityKey": { + "message": "Read security key" + }, + "awaitingSecurityKeyInteraction": { + "message": "Awaiting security key interaction..." + }, "hideEmail": { "message": "Απόκρυψη της διεύθυνσης email μου από τους παραλήπτες." }, @@ -3206,6 +3242,12 @@ "duoRequiredByOrgForAccount": { "message": "Η σύνδεση δύο βημάτων Duo απαιτείται για τον λογαριασμό σας." }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Duo two-step login is required for your account. Follow the steps below to finish logging in." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Follow the steps below to finish logging in." + }, "launchDuo": { "message": "Εκκίνηση Duo στον περιηγητή" }, @@ -3463,9 +3505,27 @@ "sshkeyApprovalTitle": { "message": "Επιβεβαίωση χρήσης κλειδιού SSH" }, + "agentForwardingWarningTitle": { + "message": "Warning: Agent Forwarding" + }, + "agentForwardingWarningText": { + "message": "This request comes from a remote device that you are logged into" + }, "sshkeyApprovalMessageInfix": { "message": "ζητά πρόσβαση σε" }, + "sshkeyApprovalMessageSuffix": { + "message": "in order to" + }, + "sshActionLogin": { + "message": "authenticate to a server" + }, + "sshActionSign": { + "message": "sign a message" + }, + "sshActionGitSign": { + "message": "sign a git commit" + }, "unknownApplication": { "message": "Μια εφαρμογή" }, @@ -3540,5 +3600,8 @@ }, "updateBrowserOrDisableFingerprintDialogMessage": { "message": "Η επέκταση περιηγητή που χρησιμοποιείτε είναι ξεπερασμένη. Παρακαλούμε ενημερώστε την ή απενεργοποιήστε την επικύρωση δακτυλικών αποτυπωμάτων του προγράμματος περιήγησης στις ρυθμίσεις της εφαρμογής για την επιφάνεια εργασίας." + }, + "changeAtRiskPassword": { + "message": "Change at-risk password" } } diff --git a/apps/desktop/src/locales/en/messages.json b/apps/desktop/src/locales/en/messages.json index ed55c5fb070..b485b471ccb 100644 --- a/apps/desktop/src/locales/en/messages.json +++ b/apps/desktop/src/locales/en/messages.json @@ -543,10 +543,6 @@ "message": "Include special characters", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "numWords": { "message": "Number of words" }, @@ -882,7 +878,7 @@ }, "useYourRecoveryCode": { "message": "Use your recovery code" - }, + }, "insertYubiKey": { "message": "Insert your YubiKey into your computer's USB port, then touch its button." }, @@ -916,7 +912,7 @@ "message": "Verify with Duo Security for your organization using the Duo Mobile app, SMS, phone call, or U2F security key.", "description": "'Duo Security' and 'Duo Mobile' are product names and should not be translated." }, - "verifyIdentity": { + "verifyYourIdentity": { "message": "Verify your Identity" }, "weDontRecognizeThisDevice": { @@ -1013,6 +1009,9 @@ "no": { "message": "No" }, + "location": { + "message": "Location" + }, "overwritePassword": { "message": "Overwrite password" }, @@ -3509,9 +3508,27 @@ "sshkeyApprovalTitle": { "message": "Confirm SSH key usage" }, + "agentForwardingWarningTitle": { + "message": "Warning: Agent Forwarding" + }, + "agentForwardingWarningText": { + "message": "This request comes from a remote device that you are logged into" + }, "sshkeyApprovalMessageInfix": { "message": "is requesting access to" }, + "sshkeyApprovalMessageSuffix": { + "message": "in order to" + }, + "sshActionLogin": { + "message": "authenticate to a server" + }, + "sshActionSign": { + "message": "sign a message" + }, + "sshActionGitSign": { + "message": "sign a git commit" + }, "unknownApplication": { "message": "An application" }, @@ -3586,5 +3603,8 @@ }, "updateBrowserOrDisableFingerprintDialogMessage": { "message": "The browser extension you are using is out of date. Please update it or disable browser integration fingerprint validation in the desktop app settings." + }, + "changeAtRiskPassword": { + "message": "Change at-risk password" } } diff --git a/apps/desktop/src/locales/en_GB/messages.json b/apps/desktop/src/locales/en_GB/messages.json index 46140d7408d..8bd94012da2 100644 --- a/apps/desktop/src/locales/en_GB/messages.json +++ b/apps/desktop/src/locales/en_GB/messages.json @@ -543,10 +543,6 @@ "message": "Include special characters", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "numWords": { "message": "Number of words" }, @@ -652,6 +648,15 @@ "logInToBitwarden": { "message": "Log in to Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "Enter the code sent to your email" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Enter the code from your authenticator app" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Press your YubiKey to authenticate" + }, "logInWithPasskey": { "message": "Log in with passkey" }, @@ -704,6 +709,15 @@ "masterPassHintLabel": { "message": "Master password hint" }, + "passwordStrengthScore": { + "message": "Password strength score $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "joinOrganization": { "message": "Join organisation" }, @@ -816,6 +830,9 @@ "webauthnCancelOrTimeout": { "message": "The authentication was cancelled or took too long. Please try again." }, + "openInNewTab": { + "message": "Open in new tab" + }, "invalidVerificationCode": { "message": "Invalid verification code" }, @@ -846,12 +863,22 @@ "rememberMe": { "message": "Remember me" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Don't ask again on this device for 30 days" + }, "sendVerificationCodeEmailAgain": { "message": "Send verification code email again" }, "useAnotherTwoStepMethod": { "message": "Use another two-step login method" }, + "selectAnotherMethod": { + "message": "Select another method", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Use your recovery code" + }, "insertYubiKey": { "message": "Insert your YubiKey into your computer's USB port, then touch its button." }, @@ -885,7 +912,7 @@ "message": "Verify with Duo Security for your organisation using the Duo Mobile app, SMS, phone call, or U2F security key.", "description": "'Duo Security' and 'Duo Mobile' are product names and should not be translated." }, - "verifyIdentity": { + "verifyYourIdentity": { "message": "Verify your Identity" }, "weDontRecognizeThisDevice": { @@ -918,6 +945,9 @@ "twoStepOptions": { "message": "Two-step login options" }, + "selectTwoStepLoginMethod": { + "message": "Select two-step login method" + }, "selfHostedEnvironment": { "message": "Self-hosted environment" }, @@ -2247,6 +2277,12 @@ "webAuthnAuthenticate": { "message": "Authenticate WebAuthn" }, + "readSecurityKey": { + "message": "Read security key" + }, + "awaitingSecurityKeyInteraction": { + "message": "Awaiting security key interaction..." + }, "hideEmail": { "message": "Hide my email address from recipients." }, @@ -3206,6 +3242,12 @@ "duoRequiredByOrgForAccount": { "message": "Duo two-step login is required for your account." }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Duo two-step login is required for your account. Follow the steps below to finish logging in." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Follow the steps below to finish logging in." + }, "launchDuo": { "message": "Launch Duo in Browser" }, @@ -3463,9 +3505,27 @@ "sshkeyApprovalTitle": { "message": "Confirm SSH key usage" }, + "agentForwardingWarningTitle": { + "message": "Warning: Agent Forwarding" + }, + "agentForwardingWarningText": { + "message": "This request comes from a remote device that you are logged into" + }, "sshkeyApprovalMessageInfix": { "message": "is requesting access to" }, + "sshkeyApprovalMessageSuffix": { + "message": "in order to" + }, + "sshActionLogin": { + "message": "authenticate to a server" + }, + "sshActionSign": { + "message": "sign a message" + }, + "sshActionGitSign": { + "message": "sign a git commit" + }, "unknownApplication": { "message": "An application" }, @@ -3540,5 +3600,8 @@ }, "updateBrowserOrDisableFingerprintDialogMessage": { "message": "The browser extension you are using is out of date. Please update it or disable browser integration fingerprint validation in the desktop app settings." + }, + "changeAtRiskPassword": { + "message": "Change at-risk password" } } diff --git a/apps/desktop/src/locales/en_IN/messages.json b/apps/desktop/src/locales/en_IN/messages.json index 451e9f3fb45..19d435d6e24 100644 --- a/apps/desktop/src/locales/en_IN/messages.json +++ b/apps/desktop/src/locales/en_IN/messages.json @@ -543,10 +543,6 @@ "message": "Include special characters", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "numWords": { "message": "Number of words" }, @@ -652,6 +648,15 @@ "logInToBitwarden": { "message": "Log in to Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "Enter the code sent to your email" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Enter the code from your authenticator app" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Press your YubiKey to authenticate" + }, "logInWithPasskey": { "message": "Log in with passkey" }, @@ -704,6 +709,15 @@ "masterPassHintLabel": { "message": "Master password hint" }, + "passwordStrengthScore": { + "message": "Password strength score $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "joinOrganization": { "message": "Join organisation" }, @@ -816,6 +830,9 @@ "webauthnCancelOrTimeout": { "message": "The authentication was cancelled or took too long. Please try again." }, + "openInNewTab": { + "message": "Open in new tab" + }, "invalidVerificationCode": { "message": "Invalid verification code" }, @@ -846,12 +863,22 @@ "rememberMe": { "message": "Remember me" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Don't ask again on this device for 30 days" + }, "sendVerificationCodeEmailAgain": { "message": "Send verification code email again" }, "useAnotherTwoStepMethod": { "message": "Use another two-step login method" }, + "selectAnotherMethod": { + "message": "Select another method", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Use your recovery code" + }, "insertYubiKey": { "message": "Insert your YubiKey into your computer's USB port, then touch its button." }, @@ -885,7 +912,7 @@ "message": "Verify with Duo Security for your organisation using the Duo Mobile app, SMS, phone call, or U2F security key.", "description": "'Duo Security' and 'Duo Mobile' are product names and should not be translated." }, - "verifyIdentity": { + "verifyYourIdentity": { "message": "Verify your Identity" }, "weDontRecognizeThisDevice": { @@ -918,6 +945,9 @@ "twoStepOptions": { "message": "Two-step login options" }, + "selectTwoStepLoginMethod": { + "message": "Select two-step login method" + }, "selfHostedEnvironment": { "message": "Self-hosted environment" }, @@ -2247,6 +2277,12 @@ "webAuthnAuthenticate": { "message": "Authenticate WebAuthn" }, + "readSecurityKey": { + "message": "Read security key" + }, + "awaitingSecurityKeyInteraction": { + "message": "Awaiting security key interaction..." + }, "hideEmail": { "message": "Hide my email address from recepients." }, @@ -3206,6 +3242,12 @@ "duoRequiredByOrgForAccount": { "message": "Duo two-step login is required for your account." }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Duo two-step login is required for your account. Follow the steps below to finish logging in." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Follow the steps below to finish logging in." + }, "launchDuo": { "message": "Launch Duo in Browser" }, @@ -3463,9 +3505,27 @@ "sshkeyApprovalTitle": { "message": "Confirm SSH key usage" }, + "agentForwardingWarningTitle": { + "message": "Warning: Agent Forwarding" + }, + "agentForwardingWarningText": { + "message": "This request comes from a remote device that you are logged into" + }, "sshkeyApprovalMessageInfix": { "message": "is requesting access to" }, + "sshkeyApprovalMessageSuffix": { + "message": "in order to" + }, + "sshActionLogin": { + "message": "authenticate to a server" + }, + "sshActionSign": { + "message": "sign a message" + }, + "sshActionGitSign": { + "message": "sign a git commit" + }, "unknownApplication": { "message": "An application" }, @@ -3540,5 +3600,8 @@ }, "updateBrowserOrDisableFingerprintDialogMessage": { "message": "The browser extension you are using is out of date. Please update it or disable browser integration fingerprint validation in the desktop app settings." + }, + "changeAtRiskPassword": { + "message": "Change at-risk password" } } diff --git a/apps/desktop/src/locales/eo/messages.json b/apps/desktop/src/locales/eo/messages.json index 8861198efba..a1a3e61e80d 100644 --- a/apps/desktop/src/locales/eo/messages.json +++ b/apps/desktop/src/locales/eo/messages.json @@ -543,10 +543,6 @@ "message": "Include special characters", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "numWords": { "message": "Number of words" }, @@ -652,6 +648,15 @@ "logInToBitwarden": { "message": "Log in to Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "Enter the code sent to your email" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Enter the code from your authenticator app" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Press your YubiKey to authenticate" + }, "logInWithPasskey": { "message": "Log in with passkey" }, @@ -704,6 +709,15 @@ "masterPassHintLabel": { "message": "Master password hint" }, + "passwordStrengthScore": { + "message": "Password strength score $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "joinOrganization": { "message": "Join organization" }, @@ -816,6 +830,9 @@ "webauthnCancelOrTimeout": { "message": "The authentication was cancelled or took too long. Please try again." }, + "openInNewTab": { + "message": "Open in new tab" + }, "invalidVerificationCode": { "message": "Invalid verification code" }, @@ -846,12 +863,22 @@ "rememberMe": { "message": "Remember me" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Don't ask again on this device for 30 days" + }, "sendVerificationCodeEmailAgain": { "message": "Send verification code email again" }, "useAnotherTwoStepMethod": { "message": "Use another two-step login method" }, + "selectAnotherMethod": { + "message": "Select another method", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Use your recovery code" + }, "insertYubiKey": { "message": "Insert your YubiKey into your computer's USB port, then touch its button." }, @@ -885,7 +912,7 @@ "message": "Verify with Duo Security for your organization using the Duo Mobile app, SMS, phone call, or U2F security key.", "description": "'Duo Security' and 'Duo Mobile' are product names and should not be translated." }, - "verifyIdentity": { + "verifyYourIdentity": { "message": "Verify your Identity" }, "weDontRecognizeThisDevice": { @@ -918,6 +945,9 @@ "twoStepOptions": { "message": "Two-step login options" }, + "selectTwoStepLoginMethod": { + "message": "Select two-step login method" + }, "selfHostedEnvironment": { "message": "Self-hosted environment" }, @@ -2247,6 +2277,12 @@ "webAuthnAuthenticate": { "message": "Authenticate WebAuthn" }, + "readSecurityKey": { + "message": "Read security key" + }, + "awaitingSecurityKeyInteraction": { + "message": "Awaiting security key interaction..." + }, "hideEmail": { "message": "Hide my email address from recipients." }, @@ -3206,6 +3242,12 @@ "duoRequiredByOrgForAccount": { "message": "Duo two-step login is required for your account." }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Duo two-step login is required for your account. Follow the steps below to finish logging in." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Follow the steps below to finish logging in." + }, "launchDuo": { "message": "Launch Duo in Browser" }, @@ -3463,9 +3505,27 @@ "sshkeyApprovalTitle": { "message": "Confirm SSH key usage" }, + "agentForwardingWarningTitle": { + "message": "Warning: Agent Forwarding" + }, + "agentForwardingWarningText": { + "message": "This request comes from a remote device that you are logged into" + }, "sshkeyApprovalMessageInfix": { "message": "is requesting access to" }, + "sshkeyApprovalMessageSuffix": { + "message": "in order to" + }, + "sshActionLogin": { + "message": "authenticate to a server" + }, + "sshActionSign": { + "message": "sign a message" + }, + "sshActionGitSign": { + "message": "sign a git commit" + }, "unknownApplication": { "message": "An application" }, @@ -3540,5 +3600,8 @@ }, "updateBrowserOrDisableFingerprintDialogMessage": { "message": "The browser extension you are using is out of date. Please update it or disable browser integration fingerprint validation in the desktop app settings." + }, + "changeAtRiskPassword": { + "message": "Change at-risk password" } } diff --git a/apps/desktop/src/locales/es/messages.json b/apps/desktop/src/locales/es/messages.json index 493c2594791..36ce677b4d1 100644 --- a/apps/desktop/src/locales/es/messages.json +++ b/apps/desktop/src/locales/es/messages.json @@ -543,10 +543,6 @@ "message": "Include special characters", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "numWords": { "message": "Número de palabras" }, @@ -652,6 +648,15 @@ "logInToBitwarden": { "message": "Log in to Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "Enter the code sent to your email" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Enter the code from your authenticator app" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Press your YubiKey to authenticate" + }, "logInWithPasskey": { "message": "Log in with passkey" }, @@ -704,6 +709,15 @@ "masterPassHintLabel": { "message": "Pista de la contraseña maestra" }, + "passwordStrengthScore": { + "message": "Password strength score $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "joinOrganization": { "message": "Unirse a organización" }, @@ -816,6 +830,9 @@ "webauthnCancelOrTimeout": { "message": "La autenticación fue cancelada o tardó demasiado. Por favor, inténtalo de nuevo." }, + "openInNewTab": { + "message": "Open in new tab" + }, "invalidVerificationCode": { "message": "Código de verificación incorrecto" }, @@ -846,12 +863,22 @@ "rememberMe": { "message": "Recordarme" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Don't ask again on this device for 30 days" + }, "sendVerificationCodeEmailAgain": { "message": "Reenviar código de verificación por correo electrónico" }, "useAnotherTwoStepMethod": { "message": "Utilizar otro método de autenticación en dos pasos" }, + "selectAnotherMethod": { + "message": "Select another method", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Use your recovery code" + }, "insertYubiKey": { "message": "Inserta tu YubiKey en el puerto USB de tu equipo y posteriormente pulsa su botón." }, @@ -885,7 +912,7 @@ "message": "Verificar con Duo Security para tu organización usando la aplicación Duo Mobile, SMS, llamada telefónica o llave de seguridad U2F.", "description": "'Duo Security' and 'Duo Mobile' are product names and should not be translated." }, - "verifyIdentity": { + "verifyYourIdentity": { "message": "Verify your Identity" }, "weDontRecognizeThisDevice": { @@ -918,6 +945,9 @@ "twoStepOptions": { "message": "Opciones de la autenticación en dos pasos" }, + "selectTwoStepLoginMethod": { + "message": "Select two-step login method" + }, "selfHostedEnvironment": { "message": "Entorno de alojamiento propio" }, @@ -2247,6 +2277,12 @@ "webAuthnAuthenticate": { "message": "Autenticar WebAuthn" }, + "readSecurityKey": { + "message": "Read security key" + }, + "awaitingSecurityKeyInteraction": { + "message": "Awaiting security key interaction..." + }, "hideEmail": { "message": "Ocultar mi dirección de correo electrónico a los destinatarios." }, @@ -3206,6 +3242,12 @@ "duoRequiredByOrgForAccount": { "message": "Se requiere el inicio de sesión en dos pasos de Duo para tu cuenta." }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Duo two-step login is required for your account. Follow the steps below to finish logging in." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Follow the steps below to finish logging in." + }, "launchDuo": { "message": "Inicia Duo en el navegador" }, @@ -3463,9 +3505,27 @@ "sshkeyApprovalTitle": { "message": "Confirm SSH key usage" }, + "agentForwardingWarningTitle": { + "message": "Warning: Agent Forwarding" + }, + "agentForwardingWarningText": { + "message": "This request comes from a remote device that you are logged into" + }, "sshkeyApprovalMessageInfix": { "message": "is requesting access to" }, + "sshkeyApprovalMessageSuffix": { + "message": "in order to" + }, + "sshActionLogin": { + "message": "authenticate to a server" + }, + "sshActionSign": { + "message": "sign a message" + }, + "sshActionGitSign": { + "message": "sign a git commit" + }, "unknownApplication": { "message": "An application" }, @@ -3540,5 +3600,8 @@ }, "updateBrowserOrDisableFingerprintDialogMessage": { "message": "The browser extension you are using is out of date. Please update it or disable browser integration fingerprint validation in the desktop app settings." + }, + "changeAtRiskPassword": { + "message": "Change at-risk password" } } diff --git a/apps/desktop/src/locales/et/messages.json b/apps/desktop/src/locales/et/messages.json index 3d4edad99d1..c295be3313c 100644 --- a/apps/desktop/src/locales/et/messages.json +++ b/apps/desktop/src/locales/et/messages.json @@ -543,10 +543,6 @@ "message": "Include special characters", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "numWords": { "message": "Sõnade arv" }, @@ -652,6 +648,15 @@ "logInToBitwarden": { "message": "Log in to Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "Enter the code sent to your email" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Enter the code from your authenticator app" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Press your YubiKey to authenticate" + }, "logInWithPasskey": { "message": "Log in with passkey" }, @@ -704,6 +709,15 @@ "masterPassHintLabel": { "message": "Ülemparooli vihje" }, + "passwordStrengthScore": { + "message": "Password strength score $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "joinOrganization": { "message": "Liitu organisatsiooniga" }, @@ -816,6 +830,9 @@ "webauthnCancelOrTimeout": { "message": "Autentimine tühistati või kestis liiga kaua aega. Palun proovi uuesti." }, + "openInNewTab": { + "message": "Open in new tab" + }, "invalidVerificationCode": { "message": "Vale kinnituskood" }, @@ -846,12 +863,22 @@ "rememberMe": { "message": "Jäta mind meelde" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Don't ask again on this device for 30 days" + }, "sendVerificationCodeEmailAgain": { "message": "Saada kinnituskood uuesti e-postile" }, "useAnotherTwoStepMethod": { "message": "Kasuta teist kaheastmelist sisselogimise meetodit" }, + "selectAnotherMethod": { + "message": "Select another method", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Use your recovery code" + }, "insertYubiKey": { "message": "Sisesta oma YubiKey arvuti USB porti ja kliki sellele nupule." }, @@ -885,7 +912,7 @@ "message": "Kinnita organisatsiooni jaoks Duo Security abil, kasutades selleks Duo Mobile rakendust, SMS-i, telefonikõnet või U2F turvavõtit.", "description": "'Duo Security' and 'Duo Mobile' are product names and should not be translated." }, - "verifyIdentity": { + "verifyYourIdentity": { "message": "Verify your Identity" }, "weDontRecognizeThisDevice": { @@ -918,6 +945,9 @@ "twoStepOptions": { "message": "Kaheastmelise sisselogimise valikud" }, + "selectTwoStepLoginMethod": { + "message": "Select two-step login method" + }, "selfHostedEnvironment": { "message": "Self-hosted Environment" }, @@ -2247,6 +2277,12 @@ "webAuthnAuthenticate": { "message": "WebAuthn kinnitamine" }, + "readSecurityKey": { + "message": "Read security key" + }, + "awaitingSecurityKeyInteraction": { + "message": "Awaiting security key interaction..." + }, "hideEmail": { "message": "Ära näita saajatele minu e-posti aadressi." }, @@ -3206,6 +3242,12 @@ "duoRequiredByOrgForAccount": { "message": "Duo kahe-astmeline sisselogimine on sinu kontol nõutud." }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Duo two-step login is required for your account. Follow the steps below to finish logging in." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Follow the steps below to finish logging in." + }, "launchDuo": { "message": "Käivita Duo brauseris" }, @@ -3463,9 +3505,27 @@ "sshkeyApprovalTitle": { "message": "Confirm SSH key usage" }, + "agentForwardingWarningTitle": { + "message": "Warning: Agent Forwarding" + }, + "agentForwardingWarningText": { + "message": "This request comes from a remote device that you are logged into" + }, "sshkeyApprovalMessageInfix": { "message": "is requesting access to" }, + "sshkeyApprovalMessageSuffix": { + "message": "in order to" + }, + "sshActionLogin": { + "message": "authenticate to a server" + }, + "sshActionSign": { + "message": "sign a message" + }, + "sshActionGitSign": { + "message": "sign a git commit" + }, "unknownApplication": { "message": "An application" }, @@ -3540,5 +3600,8 @@ }, "updateBrowserOrDisableFingerprintDialogMessage": { "message": "The browser extension you are using is out of date. Please update it or disable browser integration fingerprint validation in the desktop app settings." + }, + "changeAtRiskPassword": { + "message": "Change at-risk password" } } diff --git a/apps/desktop/src/locales/eu/messages.json b/apps/desktop/src/locales/eu/messages.json index 114bf241513..5d3cfae9b76 100644 --- a/apps/desktop/src/locales/eu/messages.json +++ b/apps/desktop/src/locales/eu/messages.json @@ -543,10 +543,6 @@ "message": "Include special characters", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "numWords": { "message": "Hitz kopurua" }, @@ -652,6 +648,15 @@ "logInToBitwarden": { "message": "Log in to Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "Enter the code sent to your email" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Enter the code from your authenticator app" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Press your YubiKey to authenticate" + }, "logInWithPasskey": { "message": "Log in with passkey" }, @@ -704,6 +709,15 @@ "masterPassHintLabel": { "message": "Master password hint" }, + "passwordStrengthScore": { + "message": "Password strength score $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "joinOrganization": { "message": "Join organization" }, @@ -816,6 +830,9 @@ "webauthnCancelOrTimeout": { "message": "The authentication was cancelled or took too long. Please try again." }, + "openInNewTab": { + "message": "Open in new tab" + }, "invalidVerificationCode": { "message": "Egiaztatze-kodea ez da baliozkoa" }, @@ -846,12 +863,22 @@ "rememberMe": { "message": "Gogora nazazu" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Don't ask again on this device for 30 days" + }, "sendVerificationCodeEmailAgain": { "message": "Berbidali email bidezko egiaztatze-kodea" }, "useAnotherTwoStepMethod": { "message": "Erabili bi urratseko saio hasierarako beste modu bat" }, + "selectAnotherMethod": { + "message": "Select another method", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Use your recovery code" + }, "insertYubiKey": { "message": "Sartu zure YubiKey-a ordenagailuko USB atakan, ondoren, sakatu bere botoia." }, @@ -885,7 +912,7 @@ "message": "Egiaztatu zure erakunderako Duo Securityrekin Duo Mobile aplikazioa, SMS, telefono deia edo U2F segurtasun-gakoa erabiliz.", "description": "'Duo Security' and 'Duo Mobile' are product names and should not be translated." }, - "verifyIdentity": { + "verifyYourIdentity": { "message": "Verify your Identity" }, "weDontRecognizeThisDevice": { @@ -918,6 +945,9 @@ "twoStepOptions": { "message": "Bi urratseko saio hasieraren aukerak" }, + "selectTwoStepLoginMethod": { + "message": "Select two-step login method" + }, "selfHostedEnvironment": { "message": "Ostatze ingurune propioa" }, @@ -2247,6 +2277,12 @@ "webAuthnAuthenticate": { "message": "WebAuthn autentifikatu" }, + "readSecurityKey": { + "message": "Read security key" + }, + "awaitingSecurityKeyInteraction": { + "message": "Awaiting security key interaction..." + }, "hideEmail": { "message": "Ezkutatu nire emaila hartzaileei." }, @@ -3206,6 +3242,12 @@ "duoRequiredByOrgForAccount": { "message": "Duo two-step login is required for your account." }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Duo two-step login is required for your account. Follow the steps below to finish logging in." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Follow the steps below to finish logging in." + }, "launchDuo": { "message": "Launch Duo in Browser" }, @@ -3463,9 +3505,27 @@ "sshkeyApprovalTitle": { "message": "Confirm SSH key usage" }, + "agentForwardingWarningTitle": { + "message": "Warning: Agent Forwarding" + }, + "agentForwardingWarningText": { + "message": "This request comes from a remote device that you are logged into" + }, "sshkeyApprovalMessageInfix": { "message": "is requesting access to" }, + "sshkeyApprovalMessageSuffix": { + "message": "in order to" + }, + "sshActionLogin": { + "message": "authenticate to a server" + }, + "sshActionSign": { + "message": "sign a message" + }, + "sshActionGitSign": { + "message": "sign a git commit" + }, "unknownApplication": { "message": "An application" }, @@ -3540,5 +3600,8 @@ }, "updateBrowserOrDisableFingerprintDialogMessage": { "message": "The browser extension you are using is out of date. Please update it or disable browser integration fingerprint validation in the desktop app settings." + }, + "changeAtRiskPassword": { + "message": "Change at-risk password" } } diff --git a/apps/desktop/src/locales/fa/messages.json b/apps/desktop/src/locales/fa/messages.json index 65b152bfa5d..c8ca8c9c94a 100644 --- a/apps/desktop/src/locales/fa/messages.json +++ b/apps/desktop/src/locales/fa/messages.json @@ -543,10 +543,6 @@ "message": "Include special characters", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "numWords": { "message": "تعداد کلمات" }, @@ -652,6 +648,15 @@ "logInToBitwarden": { "message": "Log in to Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "Enter the code sent to your email" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Enter the code from your authenticator app" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Press your YubiKey to authenticate" + }, "logInWithPasskey": { "message": "Log in with passkey" }, @@ -704,6 +709,15 @@ "masterPassHintLabel": { "message": "Master password hint" }, + "passwordStrengthScore": { + "message": "Password strength score $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "joinOrganization": { "message": "Join organization" }, @@ -816,6 +830,9 @@ "webauthnCancelOrTimeout": { "message": "The authentication was cancelled or took too long. Please try again." }, + "openInNewTab": { + "message": "Open in new tab" + }, "invalidVerificationCode": { "message": "کد تأیید نامعتبر است" }, @@ -846,12 +863,22 @@ "rememberMe": { "message": "مرا به خاطر بسپار" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Don't ask again on this device for 30 days" + }, "sendVerificationCodeEmailAgain": { "message": "ارسال دوباره ایمیل کد تأیید" }, "useAnotherTwoStepMethod": { "message": "استفاده از روش ورود دو مرحله‌ای دیگر" }, + "selectAnotherMethod": { + "message": "Select another method", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Use your recovery code" + }, "insertYubiKey": { "message": "YubiKey خود را وارد پورت USB رایانه کنید، بعد دکمه آن را بفشارید." }, @@ -885,7 +912,7 @@ "message": "از Duo Security با استفاده از برنامه تلفن همراه، پیامک، تماس تلفنی یا کلید امنیتی U2F برای تأیید سازمان خود استفاده کنید.", "description": "'Duo Security' and 'Duo Mobile' are product names and should not be translated." }, - "verifyIdentity": { + "verifyYourIdentity": { "message": "Verify your Identity" }, "weDontRecognizeThisDevice": { @@ -918,6 +945,9 @@ "twoStepOptions": { "message": "گزینه‌های ورود دو مرحله‌ای" }, + "selectTwoStepLoginMethod": { + "message": "Select two-step login method" + }, "selfHostedEnvironment": { "message": "محیط خود میزبان" }, @@ -2247,6 +2277,12 @@ "webAuthnAuthenticate": { "message": "تأیید اعتبار در WebAuthn" }, + "readSecurityKey": { + "message": "Read security key" + }, + "awaitingSecurityKeyInteraction": { + "message": "Awaiting security key interaction..." + }, "hideEmail": { "message": "نشانی ایمیلم را از گیرندگان مخفی کن." }, @@ -3206,6 +3242,12 @@ "duoRequiredByOrgForAccount": { "message": "Duo two-step login is required for your account." }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Duo two-step login is required for your account. Follow the steps below to finish logging in." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Follow the steps below to finish logging in." + }, "launchDuo": { "message": "Launch Duo in Browser" }, @@ -3463,9 +3505,27 @@ "sshkeyApprovalTitle": { "message": "Confirm SSH key usage" }, + "agentForwardingWarningTitle": { + "message": "Warning: Agent Forwarding" + }, + "agentForwardingWarningText": { + "message": "This request comes from a remote device that you are logged into" + }, "sshkeyApprovalMessageInfix": { "message": "is requesting access to" }, + "sshkeyApprovalMessageSuffix": { + "message": "in order to" + }, + "sshActionLogin": { + "message": "authenticate to a server" + }, + "sshActionSign": { + "message": "sign a message" + }, + "sshActionGitSign": { + "message": "sign a git commit" + }, "unknownApplication": { "message": "An application" }, @@ -3540,5 +3600,8 @@ }, "updateBrowserOrDisableFingerprintDialogMessage": { "message": "The browser extension you are using is out of date. Please update it or disable browser integration fingerprint validation in the desktop app settings." + }, + "changeAtRiskPassword": { + "message": "Change at-risk password" } } diff --git a/apps/desktop/src/locales/fi/messages.json b/apps/desktop/src/locales/fi/messages.json index 139bd5a1d78..25e1d99e27b 100644 --- a/apps/desktop/src/locales/fi/messages.json +++ b/apps/desktop/src/locales/fi/messages.json @@ -543,10 +543,6 @@ "message": "Sisällytä erikoismerkkejä", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "numWords": { "message": "Sanojen määrä" }, @@ -652,6 +648,15 @@ "logInToBitwarden": { "message": "Kirjaudu Bitwardeniin" }, + "enterTheCodeSentToYourEmail": { + "message": "Syötä sähköpostitse vastaanottamasi koodi" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Syötä todennussovelluksesi näyttämä koodi" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Tunnistaudu painamalla YubiKeytäsi" + }, "logInWithPasskey": { "message": "Kirjaudu pääsyavaimella" }, @@ -704,6 +709,15 @@ "masterPassHintLabel": { "message": "Pääsalasanan vihje" }, + "passwordStrengthScore": { + "message": "Password strength score $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "joinOrganization": { "message": "Liity organisaatioon" }, @@ -816,6 +830,9 @@ "webauthnCancelOrTimeout": { "message": "Tunnistautuminen peruttiin tai se kesti liian kauan. Yritä uudelleen." }, + "openInNewTab": { + "message": "Avaa uudessa välilehdessä" + }, "invalidVerificationCode": { "message": "Virheellinen todennuskoodi" }, @@ -846,12 +863,22 @@ "rememberMe": { "message": "Muista minut" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Don't ask again on this device for 30 days" + }, "sendVerificationCodeEmailAgain": { "message": "Lähetä todennuskoodi sähköpostitse uudelleen" }, "useAnotherTwoStepMethod": { "message": "Käytä vaihtoehtoista todennustapaa" }, + "selectAnotherMethod": { + "message": "Select another method", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Use your recovery code" + }, "insertYubiKey": { "message": "Kytke YubiKey-todennuslaitteesi tietokoneen USB-porttiin ja paina sen painiketta." }, @@ -885,7 +912,7 @@ "message": "Vahvista organisaatiollesi Duo Securityn avulla käyttäen Duo Mobile ‑sovellusta, tekstiviestiä, puhelua tai U2F-suojausavainta.", "description": "'Duo Security' and 'Duo Mobile' are product names and should not be translated." }, - "verifyIdentity": { + "verifyYourIdentity": { "message": "Verify your Identity" }, "weDontRecognizeThisDevice": { @@ -918,6 +945,9 @@ "twoStepOptions": { "message": "Kaksivaiheisen kirjautumisen asetukset" }, + "selectTwoStepLoginMethod": { + "message": "Select two-step login method" + }, "selfHostedEnvironment": { "message": "Itse ylläpidetty palvelinympäristö" }, @@ -2247,6 +2277,12 @@ "webAuthnAuthenticate": { "message": "WebAuthn-todennus" }, + "readSecurityKey": { + "message": "Read security key" + }, + "awaitingSecurityKeyInteraction": { + "message": "Awaiting security key interaction..." + }, "hideEmail": { "message": "Piilota sähköpostiosoitteeni vastaanottajilta." }, @@ -3206,6 +3242,12 @@ "duoRequiredByOrgForAccount": { "message": "Tilillesi kirjautuminen vaatii Duo-vahvistuksen." }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Duo two-step login is required for your account. Follow the steps below to finish logging in." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Follow the steps below to finish logging in." + }, "launchDuo": { "message": "Avaa Duo verkkoselaimessa" }, @@ -3463,9 +3505,27 @@ "sshkeyApprovalTitle": { "message": "Vahvista SSH-avainkäyttö" }, + "agentForwardingWarningTitle": { + "message": "Warning: Agent Forwarding" + }, + "agentForwardingWarningText": { + "message": "This request comes from a remote device that you are logged into" + }, "sshkeyApprovalMessageInfix": { "message": "pyytää pääsyä" }, + "sshkeyApprovalMessageSuffix": { + "message": "in order to" + }, + "sshActionLogin": { + "message": "authenticate to a server" + }, + "sshActionSign": { + "message": "sign a message" + }, + "sshActionGitSign": { + "message": "sign a git commit" + }, "unknownApplication": { "message": "Sovellus" }, @@ -3540,5 +3600,8 @@ }, "updateBrowserOrDisableFingerprintDialogMessage": { "message": "The browser extension you are using is out of date. Please update it or disable browser integration fingerprint validation in the desktop app settings." + }, + "changeAtRiskPassword": { + "message": "Change at-risk password" } } diff --git a/apps/desktop/src/locales/fil/messages.json b/apps/desktop/src/locales/fil/messages.json index 9842b419522..8d30653d2bd 100644 --- a/apps/desktop/src/locales/fil/messages.json +++ b/apps/desktop/src/locales/fil/messages.json @@ -543,10 +543,6 @@ "message": "Include special characters", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "numWords": { "message": "Ang bilang ng mga salitaNumero ng mga salita" }, @@ -652,6 +648,15 @@ "logInToBitwarden": { "message": "Log in to Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "Enter the code sent to your email" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Enter the code from your authenticator app" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Press your YubiKey to authenticate" + }, "logInWithPasskey": { "message": "Log in with passkey" }, @@ -704,6 +709,15 @@ "masterPassHintLabel": { "message": "Master password hint" }, + "passwordStrengthScore": { + "message": "Password strength score $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "joinOrganization": { "message": "Join organization" }, @@ -816,6 +830,9 @@ "webauthnCancelOrTimeout": { "message": "The authentication was cancelled or took too long. Please try again." }, + "openInNewTab": { + "message": "Open in new tab" + }, "invalidVerificationCode": { "message": "Maling verification code" }, @@ -846,12 +863,22 @@ "rememberMe": { "message": "Tandaan mo ako" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Don't ask again on this device for 30 days" + }, "sendVerificationCodeEmailAgain": { "message": "Ipadala muli ang email ng verification code" }, "useAnotherTwoStepMethod": { "message": "Gamitin ang isa pang two-step na paraan ng pag-login" }, + "selectAnotherMethod": { + "message": "Select another method", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Use your recovery code" + }, "insertYubiKey": { "message": "Ipasok ang iyong YubiKey sa USB port ng iyong computer, pagkatapos ay hawakan ang pindutan nito." }, @@ -885,7 +912,7 @@ "message": "Patunayan sa Duo Security para sa iyong samahan gamit ang Duo Mobile app, SMS, tawag sa telepono, o U2F security key.", "description": "'Duo Security' and 'Duo Mobile' are product names and should not be translated." }, - "verifyIdentity": { + "verifyYourIdentity": { "message": "Verify your Identity" }, "weDontRecognizeThisDevice": { @@ -918,6 +945,9 @@ "twoStepOptions": { "message": "Mga pagpipilian para sa two-step login" }, + "selectTwoStepLoginMethod": { + "message": "Select two-step login method" + }, "selfHostedEnvironment": { "message": "Kapaligirang self-hosted" }, @@ -2247,6 +2277,12 @@ "webAuthnAuthenticate": { "message": "I-authenticate ang WebAuthn" }, + "readSecurityKey": { + "message": "Read security key" + }, + "awaitingSecurityKeyInteraction": { + "message": "Awaiting security key interaction..." + }, "hideEmail": { "message": "Itago ang aking email address mula sa mga tatanggap." }, @@ -3206,6 +3242,12 @@ "duoRequiredByOrgForAccount": { "message": "Duo two-step login is required for your account." }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Duo two-step login is required for your account. Follow the steps below to finish logging in." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Follow the steps below to finish logging in." + }, "launchDuo": { "message": "Launch Duo in Browser" }, @@ -3463,9 +3505,27 @@ "sshkeyApprovalTitle": { "message": "Confirm SSH key usage" }, + "agentForwardingWarningTitle": { + "message": "Warning: Agent Forwarding" + }, + "agentForwardingWarningText": { + "message": "This request comes from a remote device that you are logged into" + }, "sshkeyApprovalMessageInfix": { "message": "is requesting access to" }, + "sshkeyApprovalMessageSuffix": { + "message": "in order to" + }, + "sshActionLogin": { + "message": "authenticate to a server" + }, + "sshActionSign": { + "message": "sign a message" + }, + "sshActionGitSign": { + "message": "sign a git commit" + }, "unknownApplication": { "message": "An application" }, @@ -3540,5 +3600,8 @@ }, "updateBrowserOrDisableFingerprintDialogMessage": { "message": "The browser extension you are using is out of date. Please update it or disable browser integration fingerprint validation in the desktop app settings." + }, + "changeAtRiskPassword": { + "message": "Change at-risk password" } } diff --git a/apps/desktop/src/locales/fr/messages.json b/apps/desktop/src/locales/fr/messages.json index f308c3fbd69..27c91a0c8b5 100644 --- a/apps/desktop/src/locales/fr/messages.json +++ b/apps/desktop/src/locales/fr/messages.json @@ -169,7 +169,7 @@ "message": "Numéro de passeport" }, "licenseNumber": { - "message": "Numéro de permis" + "message": "Numéro de licence" }, "email": { "message": "Courriel" @@ -217,25 +217,25 @@ "message": "Confirmez le mot de passe" }, "enterSshKeyPasswordDesc": { - "message": "Entrez le mot de passe de la clé SSH." + "message": "Saisissez le mot de passe de la clé SSH." }, "enterSshKeyPassword": { - "message": "Entrez le mot de passe" + "message": "Saisissez le mot de passe" }, "sshAgentUnlockRequired": { "message": "Veuillez déverrouiller votre coffre pour approuver la demande de clé SSH." }, "sshAgentUnlockTimeout": { - "message": "La requête de clé SSH a expiré." + "message": "La demande de clé SSH a expiré." }, "enableSshAgent": { - "message": "Activer l'agent SSH" + "message": "Activez l'agent SSH" }, "enableSshAgentDesc": { - "message": "Activez l'agent SSH pour signer les requêtes SSH directement depuis votre coffre Bitwarden." + "message": "Activez l'agent SSH pour signer les demandes SSH directement depuis votre coffre Bitwarden." }, "enableSshAgentHelp": { - "message": "L'agent SSH est un service destiné aux développeurs qui vous permet de signer des requêtes SSH directement depuis votre coffre Bitwarden." + "message": "L'agent SSH est un service - destiné aux développeurs - qui vous permet de signer des demandes SSH directement depuis votre coffre Bitwarden." }, "premiumRequired": { "message": "Premium requis" @@ -253,14 +253,14 @@ "message": "Erreur de déchiffrement" }, "couldNotDecryptVaultItemsBelow": { - "message": "Bitwarden could not decrypt the vault item(s) listed below." + "message": "Bitwarden n'a pas pu déchiffrer le(s) élément(s) du coffre listé(s) ci-dessous." }, "contactCSToAvoidDataLossPart1": { - "message": "Contact customer success", + "message": "Contacter le service clientèle", "description": "This is part of a larger sentence. The full sentence will read 'Contact customer success to avoid additional data loss.'" }, "contactCSToAvoidDataLossPart2": { - "message": "to avoid additional data loss.", + "message": "afin d'éviter toute perte de données supplémentaire.", "description": "This is part of a larger sentence. The full sentence will read 'Contact customer success to avoid additional data loss.'" }, "january": { @@ -543,10 +543,6 @@ "message": "Inclure des caractères spéciaux", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "numWords": { "message": "Nombre de mots" }, @@ -652,6 +648,15 @@ "logInToBitwarden": { "message": "Se connecter à Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "Saisissez le code envoyé à votre adresse courriel" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Saisissez le code de votre application d'authentification" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Touchez votre YubiKey pour vous authentifier" + }, "logInWithPasskey": { "message": "Se connecter avec une clé d'accès" }, @@ -704,6 +709,15 @@ "masterPassHintLabel": { "message": "Indice du mot de passe principal" }, + "passwordStrengthScore": { + "message": "Score de force du mot de passe $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "joinOrganization": { "message": "Rejoindre l'organisation" }, @@ -729,7 +743,7 @@ "message": "Demander l'indice" }, "requestPasswordHint": { - "message": "Obtenir l'indice du mot de passe" + "message": "Demande d'indice de mot de passe" }, "enterYourAccountEmailAddressAndYourPasswordHintWillBeSentToYou": { "message": "Saisissez l'adresse courriel de votre compte et votre indice de mot de passe vous sera envoyé" @@ -816,6 +830,9 @@ "webauthnCancelOrTimeout": { "message": "L'authentification a été annulée ou a pris trop de temps. Veuillez réessayer." }, + "openInNewTab": { + "message": "Ouvrir dans un nouvel onglet" + }, "invalidVerificationCode": { "message": "Code de vérification invalide" }, @@ -846,12 +863,22 @@ "rememberMe": { "message": "Rester connecté" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Ne plus demander sur cet appareil pendant 30 jours" + }, "sendVerificationCodeEmailAgain": { "message": "Envoyer à nouveau le courriel de code de vérification" }, "useAnotherTwoStepMethod": { "message": "Utiliser une autre méthode de connexion en deux étapes" }, + "selectAnotherMethod": { + "message": "Sélectionner une autre méthode", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Utilisez votre code de récupération" + }, "insertYubiKey": { "message": "Insérez votre YubiKey dans le port USB de votre ordinateur puis appuyez sur son bouton." }, @@ -885,14 +912,14 @@ "message": "Sécurisez votre organisation avec Duo Security à l'aide de l'application Duo Mobile, l'envoi d'un SMS, un appel vocal ou une clé de sécurité U2F.", "description": "'Duo Security' and 'Duo Mobile' are product names and should not be translated." }, - "verifyIdentity": { - "message": "Verify your Identity" + "verifyYourIdentity": { + "message": "Vérifiez votre identité" }, "weDontRecognizeThisDevice": { - "message": "We don't recognize this device. Enter the code sent to your email to verify your identity." + "message": "Nous ne reconnaissons pas cet appareil. Saisissez le code envoyé à votre adresse courriel pour vérifier votre identité." }, "continueLoggingIn": { - "message": "Continue logging in" + "message": "Continuer à se connecter" }, "webAuthnTitle": { "message": "WebAuthn FIDO2" @@ -918,6 +945,9 @@ "twoStepOptions": { "message": "Options d'authentification à deux facteurs" }, + "selectTwoStepLoginMethod": { + "message": "Sélectionnez la méthode d'authentification à deux facteurs" + }, "selfHostedEnvironment": { "message": "Environnement auto-hébergé" }, @@ -1343,7 +1373,7 @@ "description": "Copy credit card number" }, "copyEmail": { - "message": "Copy email" + "message": "Copier le courriel" }, "copySecurityCode": { "message": "Copier le code de sécurité", @@ -1626,13 +1656,13 @@ "message": "Ce mot de passe sera utilisé pour exporter et importer ce fichier" }, "accountRestrictedOptionDescription": { - "message": "Utilisez la clé de chiffrement de votre compte, dérivée du nom d'utilisateur et du mot de passe principal de votre compte, pour chiffrer l'export et restreindre l'import au seul compte Bitwarden actuel." + "message": "Utilisez la clé de chiffrement de votre compte, dérivée du nom d'utilisateur et du mot de passe principal de votre compte, pour chiffrer l'exportation et restreindre l'importation au seul compte Bitwarden actuel." }, "passwordProtected": { "message": "Protégé par mot de passe" }, "passwordProtectedOptionDescription": { - "message": "Définissez un mot de passe de fichier pour chiffrer l'export et déchiffrer son import sur n'importe quel compte Bitwarden." + "message": "Définissez un mot de passe de fichier pour chiffrer l'exportation et déchiffrer son importation sur n'importe quel compte Bitwarden." }, "exportTypeHeading": { "message": "Type d'exportation" @@ -1776,7 +1806,7 @@ "message": "Exiger un mot de passe ou un code PIN au démarrage de Bitwarden" }, "requirePasswordWithoutPinOnStart": { - "message": "Require password on app start" + "message": "Exiger un mot de passe au démarrage de l'application" }, "recommendedForSecurity": { "message": "Recommandé pour la sécurité." @@ -2067,10 +2097,10 @@ "message": "Les options de biométrie dans le navigateur nécessitent au préalable l'activation des options de biométrie dans l'application de bureau." }, "biometricsManualSetupTitle": { - "message": "Automatic setup not available" + "message": "Configuration automatique non disponible" }, "biometricsManualSetupDesc": { - "message": "Due to the installation method, biometrics support could not be automatically enabled. Would you like to open the documentation on how to do this manually?" + "message": "En raison de la méthode d'installation, la prise en charge de la biométrie n'a pas pu être activée automatiquement. Souhaitez-vous ouvrir la documentation sur la manière de procéder manuellement ?" }, "personalOwnershipSubmitError": { "message": "En raison d'une politique d'entreprise, il vous est interdit d'enregistrer des éléments dans votre coffre personnel. Sélectionnez une organisation dans l'option Propriété et choisissez parmi les collections disponibles." @@ -2247,6 +2277,12 @@ "webAuthnAuthenticate": { "message": "Authentifier WebAuthn" }, + "readSecurityKey": { + "message": "Lire la clé de sécurité" + }, + "awaitingSecurityKeyInteraction": { + "message": "En attente de l'interaction de la clé de sécurité..." + }, "hideEmail": { "message": "Masquer mon adresse électronique aux destinataires." }, @@ -2284,7 +2320,7 @@ "message": "Votre mot de passe principal ne répond pas aux exigences de politique de sécurité de cette organisation. Pour pouvoir accéder au coffre, vous devez mettre à jour votre mot de passe principal dès maintenant. En poursuivant, vous serez déconnecté de votre session actuelle et vous devrez vous reconnecter. Les sessions actives sur d'autres appareils peuver rester actives pendant encore une heure." }, "tdeDisabledMasterPasswordRequired": { - "message": "Your organization has disabled trusted device encryption. Please set a master password to access your vault." + "message": "Votre organisation a désactivé le chiffrement des appareils de confiance. Veuillez définir un mot de passe principal pour accéder à votre coffre." }, "tryAgain": { "message": "Essayez de nouveau" @@ -2467,7 +2503,7 @@ "message": "Export du coffre-fort de l'organisation" }, "exportingOrganizationVaultDesc": { - "message": "Seul le coffre-fort de l'organisation associé à $ORGANIZATION$ sera exporté. Les coffres individuels ou d'autres organisations ne seront pas inclus.", + "message": "Seul le coffre de l'organisation associé à $ORGANIZATION$ sera exporté. Les coffres individuels ou d'autres organisations ne seront pas inclus.", "placeholders": { "organization": { "content": "$1", @@ -2584,11 +2620,11 @@ "message": "Générer un alias de courriel avec un service de transfert externe." }, "forwarderDomainName": { - "message": "Email domain", + "message": "Domaine du courriel", "description": "Labels the domain name email forwarder service option" }, "forwarderDomainNameHint": { - "message": "Choose a domain that is supported by the selected service", + "message": "Choisissez un domaine qui est pris en charge par le service sélectionné", "description": "Guidance provided for email forwarding services that support multiple email domains." }, "forwarderError": { @@ -2644,7 +2680,7 @@ } }, "forwaderInvalidOperation": { - "message": "$SERVICENAME$ refused your request. Please contact your service provider for assistance.", + "message": "$SERVICENAME$ a refusé votre demande. Veuillez contacter votre fournisseur de service pour assistance.", "description": "Displayed when the user is forbidden from using the API by the forwarding service.", "placeholders": { "servicename": { @@ -2654,7 +2690,7 @@ } }, "forwaderInvalidOperationWithMessage": { - "message": "$SERVICENAME$ refused your request: $ERRORMESSAGE$", + "message": "$SERVICENAME$ a refusé votre demande : $ERRORMESSAGE$", "description": "Displayed when the user is forbidden from using the API by the forwarding service with an error message.", "placeholders": { "servicename": { @@ -2698,7 +2734,7 @@ } }, "forwarderUnknownError": { - "message": "Unknown $SERVICENAME$ error occurred.", + "message": "Une erreur inconnue $SERVICENAME$ s'est produite.", "description": "Displayed when the forwarding service failed due to an unknown error.", "placeholders": { "servicename": { @@ -2708,7 +2744,7 @@ } }, "forwarderUnknownForwarder": { - "message": "Unknown forwarder: '$SERVICENAME$'.", + "message": "Émetteur inconnu : '$SERVICENAME$'.", "description": "Displayed when the forwarding service is not supported.", "placeholders": { "servicename": { @@ -2782,13 +2818,13 @@ "message": "Une notification a été envoyée à votre appareil" }, "notificationSentDevicePart1": { - "message": "Unlock Bitwarden on your device or on the " + "message": "Déverrouillez Bitwarden sur votre appareil ou sur le " }, "notificationSentDeviceAnchor": { - "message": "web app" + "message": "application web" }, "notificationSentDevicePart2": { - "message": "Make sure the Fingerprint phrase matches the one below before approving." + "message": "Assurez-vous que la phrase d'empreinte correspond à celle ci-dessous avant d'approuver." }, "needAnotherOptionV1": { "message": "Besoin d'une autre option ?" @@ -2822,7 +2858,7 @@ "message": "Essayez-vous d'accéder à votre compte ?" }, "accessAttemptBy": { - "message": "Access attempt by $EMAIL$", + "message": "Tentative d'accès par $EMAIL$", "placeholders": { "email": { "content": "$1", @@ -2840,10 +2876,10 @@ "message": "Heure" }, "confirmAccess": { - "message": "Confirm access" + "message": "Confirmer l'accès" }, "denyAccess": { - "message": "Deny access" + "message": "Refuser l'accès" }, "logInConfirmedForEmailOnDevice": { "message": "Connexion confirmée pour $EMAIL$ sur $DEVICE$", @@ -2880,7 +2916,7 @@ "message": "Cette demande n'est plus valide." }, "confirmAccessAttempt": { - "message": "Confirm access attempt for $EMAIL$", + "message": "Confirmer la tentative d’accès pour $EMAIL$", "placeholders": { "email": { "content": "$1", @@ -2892,7 +2928,7 @@ "message": "Connexion demandée" }, "accountAccessRequested": { - "message": "Account access requested" + "message": "Accès au compte demandé" }, "creatingAccountOn": { "message": "Création du compte sur" @@ -3140,7 +3176,7 @@ "message": "Sous-menu" }, "toggleSideNavigation": { - "message": "Toggle side navigation" + "message": "Basculer la navigation latérale" }, "skipToContent": { "message": "Accéder au contenu" @@ -3198,7 +3234,7 @@ } }, "duoHealthCheckResultsInNullAuthUrlError": { - "message": "Error connecting with the Duo service. Use a different two-step login method or contact Duo for assistance." + "message": "Erreur de connexion avec le service Duo. Utilisez une autre méthode d'authentification à deux facteurs ou contactez Duo pour obtenir de l'aide." }, "launchDuoAndFollowStepsToFinishLoggingIn": { "message": "Lancez Duo et suivez les étapes pour terminer la connexion." @@ -3206,6 +3242,12 @@ "duoRequiredByOrgForAccount": { "message": "L'authentification à double facteur Duo est requise pour votre compte." }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "L'authentification à deux facteurs Duo est requise pour votre compte. Suivez les étapes ci-dessous afin de réussir à vous connecter." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Suivez les étapes ci-dessous afin de réussir à vous connecter." + }, "launchDuo": { "message": "Lancer Duo dans le navigateur" }, @@ -3385,7 +3427,7 @@ "message": "Erreur lors de l'assignation du dossier cible." }, "viewItemsIn": { - "message": "View items in $NAME$", + "message": "Afficher les éléments dans $NAME$", "description": "Button to view the contents of a folder or collection", "placeholders": { "name": { @@ -3395,7 +3437,7 @@ } }, "backTo": { - "message": "Back to $NAME$", + "message": "Revenir à $NAME$", "description": "Navigate back to a previous folder or collection", "placeholders": { "name": { @@ -3422,28 +3464,28 @@ "message": "Données" }, "fileSends": { - "message": "File Sends" + "message": "Envois de fichiers" }, "textSends": { - "message": "Text Sends" + "message": "Envois de texte" }, "ssoError": { - "message": "No free ports could be found for the sso login." + "message": "Aucun port libre n’a pu être trouvé pour la connexion SSO." }, "biometricsStatusHelptextUnlockNeeded": { - "message": "Biometric unlock is unavailable because PIN or password unlock is required first." + "message": "Le déverrouillage par biométrie n’est pas disponible parce qu'il faut au préalable déverrouiller avec le code PIN ou le mot de passe." }, "biometricsStatusHelptextHardwareUnavailable": { - "message": "Biometric unlock is currently unavailable." + "message": "Le déverrouillage par biométrie n'est pas disponible actuellement." }, "biometricsStatusHelptextAutoSetupNeeded": { - "message": "Biometric unlock is unavailable due to misconfigured system files." + "message": "Le déverrouillage par biométrie n'est pas disponible en raison de fichiers système mal configurés." }, "biometricsStatusHelptextManualSetupNeeded": { - "message": "Biometric unlock is unavailable due to misconfigured system files." + "message": "Le déverrouillage par biométrie n'est pas disponible en raison de fichiers système mal configurés." }, "biometricsStatusHelptextNotEnabledLocally": { - "message": "Biometric unlock is unavailable because it is not enabled for $EMAIL$ in the Bitwarden desktop app.", + "message": "Le déverrouillage par biométrie n'est pas disponible car elle n'est pas activée pour $EMAIL$ dans l'application de bureau Bitwarden.", "placeholders": { "email": { "content": "$1", @@ -3452,7 +3494,7 @@ } }, "biometricsStatusHelptextUnavailableReasonUnknown": { - "message": "Biometric unlock is currently unavailable for an unknown reason." + "message": "Le déverrouillage par biométrie n'est pas disponible actuellement pour une raison inconnue." }, "authorize": { "message": "Autoriser" @@ -3463,9 +3505,27 @@ "sshkeyApprovalTitle": { "message": "Confirmer l'utilisation de la clé SSH" }, + "agentForwardingWarningTitle": { + "message": "Avertissement : agent émetteur" + }, + "agentForwardingWarningText": { + "message": "Cette demande provient d’un appareil distant auquel vous êtes connecté" + }, "sshkeyApprovalMessageInfix": { "message": "demande l'accès à" }, + "sshkeyApprovalMessageSuffix": { + "message": "afin de" + }, + "sshActionLogin": { + "message": "s’authentifier sur un serveur" + }, + "sshActionSign": { + "message": "signer un message" + }, + "sshActionGitSign": { + "message": "signer un engagement Git" + }, "unknownApplication": { "message": "Une application" }, @@ -3524,21 +3584,24 @@ "message": "Changer le courriel du compte" }, "allowScreenshots": { - "message": "Allow screen capture" + "message": "Autoriser les captures d'écran" }, "allowScreenshotsDesc": { - "message": "Allow the Bitwarden desktop application to be captured in screenshots and viewed in remote desktop sessions. Disabling this will prevent access on some external displays." + "message": "Permettre à l'application de bureau Bitwarden d'être enregistrée dans des captures d'écran et affichée dans des sessions de bureau à distance. La désactivation de cette fonction empêchera l'accès à certains écrans externes." }, "confirmWindowStillVisibleTitle": { - "message": "Confirm window still visible" + "message": "Fenêtre de confirmation toujours visible" }, "confirmWindowStillVisibleContent": { "message": "Veuillez confirmer que la fenêtre est toujours visible." }, "updateBrowserOrDisableFingerprintDialogTitle": { - "message": "Extension update required" + "message": "Mise à jour de l'extension requise" }, "updateBrowserOrDisableFingerprintDialogMessage": { - "message": "The browser extension you are using is out of date. Please update it or disable browser integration fingerprint validation in the desktop app settings." + "message": "L’extension de navigateur que vous utilisez est obsolète. Veuillez la mettre à jour ou désactiver la validation de l'empreinte digitale par l'intégration du navigateur dans les paramètres de l'application de bureau." + }, + "changeAtRiskPassword": { + "message": "Changer le mot de passe à risque" } } diff --git a/apps/desktop/src/locales/gl/messages.json b/apps/desktop/src/locales/gl/messages.json index 1aa61a9b381..d7769ad902a 100644 --- a/apps/desktop/src/locales/gl/messages.json +++ b/apps/desktop/src/locales/gl/messages.json @@ -543,10 +543,6 @@ "message": "Include special characters", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "numWords": { "message": "Number of words" }, @@ -652,6 +648,15 @@ "logInToBitwarden": { "message": "Log in to Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "Enter the code sent to your email" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Enter the code from your authenticator app" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Press your YubiKey to authenticate" + }, "logInWithPasskey": { "message": "Log in with passkey" }, @@ -704,6 +709,15 @@ "masterPassHintLabel": { "message": "Master password hint" }, + "passwordStrengthScore": { + "message": "Password strength score $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "joinOrganization": { "message": "Join organization" }, @@ -816,6 +830,9 @@ "webauthnCancelOrTimeout": { "message": "The authentication was cancelled or took too long. Please try again." }, + "openInNewTab": { + "message": "Open in new tab" + }, "invalidVerificationCode": { "message": "Invalid verification code" }, @@ -846,12 +863,22 @@ "rememberMe": { "message": "Remember me" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Don't ask again on this device for 30 days" + }, "sendVerificationCodeEmailAgain": { "message": "Send verification code email again" }, "useAnotherTwoStepMethod": { "message": "Use another two-step login method" }, + "selectAnotherMethod": { + "message": "Select another method", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Use your recovery code" + }, "insertYubiKey": { "message": "Insert your YubiKey into your computer's USB port, then touch its button." }, @@ -885,7 +912,7 @@ "message": "Verify with Duo Security for your organization using the Duo Mobile app, SMS, phone call, or U2F security key.", "description": "'Duo Security' and 'Duo Mobile' are product names and should not be translated." }, - "verifyIdentity": { + "verifyYourIdentity": { "message": "Verify your Identity" }, "weDontRecognizeThisDevice": { @@ -918,6 +945,9 @@ "twoStepOptions": { "message": "Two-step login options" }, + "selectTwoStepLoginMethod": { + "message": "Select two-step login method" + }, "selfHostedEnvironment": { "message": "Self-hosted environment" }, @@ -2247,6 +2277,12 @@ "webAuthnAuthenticate": { "message": "Authenticate WebAuthn" }, + "readSecurityKey": { + "message": "Read security key" + }, + "awaitingSecurityKeyInteraction": { + "message": "Awaiting security key interaction..." + }, "hideEmail": { "message": "Hide my email address from recipients." }, @@ -3206,6 +3242,12 @@ "duoRequiredByOrgForAccount": { "message": "Duo two-step login is required for your account." }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Duo two-step login is required for your account. Follow the steps below to finish logging in." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Follow the steps below to finish logging in." + }, "launchDuo": { "message": "Launch Duo in Browser" }, @@ -3463,9 +3505,27 @@ "sshkeyApprovalTitle": { "message": "Confirm SSH key usage" }, + "agentForwardingWarningTitle": { + "message": "Warning: Agent Forwarding" + }, + "agentForwardingWarningText": { + "message": "This request comes from a remote device that you are logged into" + }, "sshkeyApprovalMessageInfix": { "message": "is requesting access to" }, + "sshkeyApprovalMessageSuffix": { + "message": "in order to" + }, + "sshActionLogin": { + "message": "authenticate to a server" + }, + "sshActionSign": { + "message": "sign a message" + }, + "sshActionGitSign": { + "message": "sign a git commit" + }, "unknownApplication": { "message": "An application" }, @@ -3540,5 +3600,8 @@ }, "updateBrowserOrDisableFingerprintDialogMessage": { "message": "The browser extension you are using is out of date. Please update it or disable browser integration fingerprint validation in the desktop app settings." + }, + "changeAtRiskPassword": { + "message": "Change at-risk password" } } diff --git a/apps/desktop/src/locales/he/messages.json b/apps/desktop/src/locales/he/messages.json index f28b18b5173..dd527d4ac31 100644 --- a/apps/desktop/src/locales/he/messages.json +++ b/apps/desktop/src/locales/he/messages.json @@ -543,10 +543,6 @@ "message": "כלול תווים מיוחדים", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "*&^%$#@!", - "description": "Label for the password generator special characters checkbox" - }, "numWords": { "message": "כמות מילים" }, @@ -575,7 +571,7 @@ "description": "deprecated. Use avoidAmbiguous instead." }, "avoidAmbiguous": { - "message": "הימנע מתווים דו-משמעיים", + "message": "הימנע מתווים דו־משמעיים", "description": "Label for the avoid ambiguous characters checkbox." }, "generatorPolicyInEffect": { @@ -650,7 +646,16 @@ "message": "התחבר" }, "logInToBitwarden": { - "message": "כניסה אל Bitwarden" + "message": "היכנס אל Bitwarden" + }, + "enterTheCodeSentToYourEmail": { + "message": "הזן את הקוד שנשלח לדוא\"ל שלך" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "הזן את הקוד מיישום המאמת שלך" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "לחץ על ה־YubiKey שלך כדי לאמת" }, "logInWithPasskey": { "message": "כניסה עם מפתח גישה" @@ -659,7 +664,7 @@ "message": "כניסה עם מכשיר" }, "useSingleSignOn": { - "message": "השתמש בהזדהות חד פעמית" + "message": "השתמש בכניסה יחידה" }, "submit": { "message": "שלח" @@ -704,6 +709,15 @@ "masterPassHintLabel": { "message": "רמז לסיסמה הראשית" }, + "passwordStrengthScore": { + "message": "ציון חוזק סיסמה $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "joinOrganization": { "message": "הצטרף לארגון" }, @@ -816,6 +830,9 @@ "webauthnCancelOrTimeout": { "message": "האימות בוטל או לקח זמן רב מדי. נא לנסות שוב." }, + "openInNewTab": { + "message": "פתח בכרטיסייה חדשה" + }, "invalidVerificationCode": { "message": "קוד אימות שגוי" }, @@ -846,12 +863,22 @@ "rememberMe": { "message": "זכור אותי" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "אל תשאל אותי שוב במכשיר זה למשך 30 יום" + }, "sendVerificationCodeEmailAgain": { "message": "שלח שוב קוד אימות לאימייל" }, "useAnotherTwoStepMethod": { "message": "השתמש בשיטה אחרת עבור כניסה דו שלבית" }, + "selectAnotherMethod": { + "message": "בחר שיטה אחרת", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "השתמש בקוד השחזור שלך" + }, "insertYubiKey": { "message": "הכנס את ה-YubiKey אל כניסת ה-USB במחשבך, ואז גע בכפתור שלו." }, @@ -872,7 +899,7 @@ "description": "'Bitwarden Authenticator' is a product name and should not be translated." }, "yubiKeyTitleV2": { - "message": "מפתח אבטחה OTP של YubiKey" + "message": "מפתח אבטחה OTP של Yubico" }, "yubiKeyDesc": { "message": "השתמש בYubiKey עבור גישה לחשבון שלך. עובד עם YubiKey בגירסאות 4, 4C, 4Nano, ומכשירי NEO." @@ -885,8 +912,8 @@ "message": "בצע אימות מול Duo Security עבור הארגון שלך באמצעות אפליקצית Duo לפלאפון, SMS, שיחת טלפון, או מפתח אבטחה U2F.", "description": "'Duo Security' and 'Duo Mobile' are product names and should not be translated." }, - "verifyIdentity": { - "message": "אמת את זהותך" + "verifyYourIdentity": { + "message": "Verify your Identity" }, "weDontRecognizeThisDevice": { "message": "אנחנו לא מזהים את המכשיר הזה. הזן את הקוד שנשלח לדוא\"ל שלך כדי לאמת את זהותך." @@ -918,6 +945,9 @@ "twoStepOptions": { "message": "אפשרויות כניסה דו שלבית" }, + "selectTwoStepLoginMethod": { + "message": "בחר שיטת כניסה דו־שלבית" + }, "selfHostedEnvironment": { "message": "סביבה על שרתים מקומיים" }, @@ -1258,7 +1288,7 @@ "message": "הצג תמיד ב-Dock" }, "alwaysShowDockDesc": { - "message": "הצג את הסמל של Bitwarden ב-Dock גם כשהיישום ממוזער לשורת התפריטים." + "message": "הצג את הסמל של Bitwarden ב־Dock גם כשהיישום ממוזער לשורת התפריטים." }, "confirmTrayTitle": { "message": "אשר הסתרת מגש" @@ -1371,7 +1401,7 @@ "message": "1 ג'יגה של מקום אחסון מוצפן עבור קבצים מצורפים." }, "premiumSignUpTwoStepOptions": { - "message": "אפשרויות כניסה דו-שלבית קנייניות כגון YubiKey ו־Duo." + "message": "אפשרויות כניסה דו־שלבית קנייניות כגון YubiKey ו־Duo." }, "premiumSignUpReports": { "message": "היגיינת סיסמאות, מצב בריאות החשבון, ודיווחים מעודכנים על פרצות חדשות בכדי לשמור על הכספת שלך בטוחה." @@ -1608,7 +1638,7 @@ "description": "ex. Date this password was updated" }, "exportFrom": { - "message": "ייצוא מ-" + "message": "ייצוא מ־" }, "exportVault": { "message": "יצוא כספת" @@ -1626,7 +1656,7 @@ "message": "סיסמה זו תשמש כדי לייצא ולייבא קובץ זה" }, "accountRestrictedOptionDescription": { - "message": "השתמש במפתח הצפנת החשבון שלך, הנגזר משם המשתמש שלך והסיסמה הראשית, כדי להצפין את הייצוא ולהגביל את הייבוא רק לחשבון Bitwarden הנוכחי." + "message": "השתמש במפתח הצפנת החשבון שלך, הנגזר משם המשתמש והסיסמה הראשית של חשבונך, כדי להצפין את הייצוא ולהגביל את הייבוא רק לחשבון Bitwarden הנוכחי." }, "passwordProtected": { "message": "מוגן סיסמה" @@ -1641,7 +1671,7 @@ "message": "מוגבל חשבון" }, "filePasswordAndConfirmFilePasswordDoNotMatch": { - "message": "\"סיסמת קובץ\" ו-\"אשר סיסמת קובץ\" אינם תואמים." + "message": "\"סיסמת קובץ\" ו\"אשר סיסמת קובץ\" אינם תואמים." }, "hCaptchaUrl": { "message": "כתובת אתר hCaptcha", @@ -2019,7 +2049,7 @@ "message": "למרבה הצער שילוב דפדפן נתמך רק בגרסת Mac App Store לעת עתה." }, "browserIntegrationWindowsStoreDesc": { - "message": "למרבה הצער שילוב דפדפן אינו נתמך כרגע בגרסת ה-Microsoft Store." + "message": "למרבה הצער שילוב דפדפן אינו נתמך כרגע בגרסת ה־Microsoft Store." }, "browserIntegrationLinuxDesc": { "message": "למרבה הצער שילוב דפדפן אינו נתמך כרגע בגרסת הלינוקס." @@ -2085,7 +2115,7 @@ "message": "מדיניות ארגון חסמה ייבוא פריטים אל תוך הכספת האישית שלך." }, "allSends": { - "message": "כל הסנדים", + "message": "כל הסֵנְדים", "description": "'Sends' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "sendTypeFile": { @@ -2095,11 +2125,11 @@ "message": "טקסט" }, "searchSends": { - "message": "חפש סנדים", + "message": "חפש סֵנְדים", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "editSend": { - "message": "ערוך סנד", + "message": "ערוך סֵנְד", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "myVault": { @@ -2112,14 +2142,14 @@ "message": "תאריך מחיקה" }, "deletionDateDesc": { - "message": "הסנד יימחק לצמיתות בתאריך ובשעה שצוינו.", + "message": "הסֵנְד יימחק לצמיתות בתאריך ובשעה שצוינו.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "expirationDate": { "message": "תאריך תפוגה" }, "expirationDateDesc": { - "message": "אם מוגדר, גישה לסנד זה תפוג בתאריך ובשעה שצוינו.", + "message": "אם מוגדר, גישה לסֵנְד זה תפוג בתאריך ובשעה שצוינו.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "maxAccessCount": { @@ -2127,57 +2157,57 @@ "description": "This text will be displayed after a Send has been accessed the maximum amount of times." }, "maxAccessCountDesc": { - "message": "אם מוגדר, משתמשים לא יוכלו עוד לגשת לסנד זה ברגע שמספר הגישות המרבי הושג.", + "message": "אם מוגדר, משתמשים לא יוכלו עוד לגשת לסֵנְד זה ברגע שמספר הגישות המרבי הושג.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "currentAccessCount": { "message": "מספר גישות נוכחי" }, "disableSend": { - "message": "השבת את סנד זה כך שאף אחד לא יוכל לגשת אליו.", + "message": "השבת את סֵנְד זה כך שאף אחד לא יוכל לגשת אליו.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "sendPasswordDesc": { - "message": "דרוש סיסמה באופן אופציונלי כדי שמשתמשים יוכלו לגשת אל סנד זה.", + "message": "דרוש סיסמה באופן אופציונלי כדי שמשתמשים יוכלו לגשת אל סֵנְד זה.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "sendNotesDesc": { - "message": "הערות פרטיות לגבי סנד זה.", + "message": "הערות פרטיות לגבי סֵנְד זה.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "sendLink": { - "message": "קישור סנד", + "message": "קישור סֵנְד", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "sendLinkLabel": { - "message": "קישור סנד", + "message": "קישור סֵנְד", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "textHiddenByDefault": { - "message": "כשניגשים לסנד, הסתר את הטקסט כברירת מחדל", + "message": "בעת גישה לסֵנְד, הסתר את הטקסט כברירת מחדל", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "createdSend": { - "message": "סנד נוסף", + "message": "סֵנְד נוסף", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "editedSend": { - "message": "סנד נשמר", + "message": "סֵנְד נשמר", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "deletedSend": { - "message": "סנד נמחק", + "message": "סֵנְד נמחק", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "newPassword": { "message": "סיסמה חדשה" }, "whatTypeOfSend": { - "message": "איזה סוג של סנד זה?", + "message": "איזה סוג של סֵנְד זה?", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "createSend": { - "message": "סנד חדש", + "message": "סֵנְד חדש", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "sendTextDesc": { @@ -2202,22 +2232,22 @@ "message": "מותאם אישית" }, "deleteSendConfirmation": { - "message": "האם אתה בטוח שברצונך למחוק סנד זה?", + "message": "האם אתה בטוח שברצונך למחוק סֵנְד זה?", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "copySendLinkToClipboard": { - "message": "העתק קישור סנד ללוח", + "message": "העתק קישור סֵנְד ללוח", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "copySendLinkOnSave": { - "message": "העתק את הקישור לשיתוף סנד זה ללוח ההעתקה שלי עם השמירה." + "message": "העתק את הקישור לשיתוף סֵנְד זה אל לוח ההעתקה שלי עם השמירה." }, "sendDisabled": { - "message": "סנד הוסר", + "message": "סֵנְד הוסר", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "sendDisabledWarning": { - "message": "בשל מדיניות ארגונית, אתה יכול למחוק רק סנד קיים.", + "message": "בשל מדיניות ארגונית, אתה יכול למחוק רק סֵנְד קיים.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "copyLink": { @@ -2247,11 +2277,17 @@ "webAuthnAuthenticate": { "message": "אמת WebAuthn" }, + "readSecurityKey": { + "message": "קרא מפתח אבטחה" + }, + "awaitingSecurityKeyInteraction": { + "message": "ממתין לאינטראקציה עם מפתח אבטחה..." + }, "hideEmail": { "message": "הסתר את כתובת הדוא\"ל שלי מנמענים." }, "sendOptionsPolicyInEffect": { - "message": "מדיניות ארגון אחת או יותר משפיעה על אפשרויות הסנד שלך." + "message": "מדיניות ארגון אחת או יותר משפיעה על אפשרויות הסֵנְד שלך." }, "emailVerificationRequired": { "message": "נדרש אימות דוא\"ל" @@ -2272,7 +2308,7 @@ "message": "פעולה זו מוגנת. כדי להמשיך, הזן מחדש את הסיסמה הראשית שלך כדי לאמת את זהותך." }, "updatedMasterPassword": { - "message": "הסיסמה הראשית עודכנה" + "message": "סיסמה ראשית עודכנה" }, "updateMasterPassword": { "message": "עדכון סיסמה ראשית" @@ -2329,7 +2365,7 @@ "message": "דקות" }, "vaultTimeoutPolicyInEffect1": { - "message": "$HOURS$ שעות ו-$MINUTES$ דקות לכל היותר.", + "message": "$HOURS$ שעות ו־$MINUTES$ דקות לכל היותר.", "placeholders": { "hours": { "content": "$1", @@ -2342,7 +2378,7 @@ } }, "vaultTimeoutPolicyWithActionInEffect": { - "message": "פוליסות הארגון שלך משפיעות על פסק הזמן לכספת שלך. פסק זמן מרבי המותר הוא $HOURS$ שעות ו-$MINUTES$ דקות. פעולת פסק הזמן לכספת שלך מוגדרת ל$ACTION$.", + "message": "פוליסות הארגון שלך משפיעות על פסק הזמן לכספת שלך. פסק זמן מרבי המותר הוא $HOURS$ שעות ו־$MINUTES$ דקות. פעולת פסק הזמן לכספת שלך מוגדרת ל$ACTION$.", "placeholders": { "hours": { "content": "$1", @@ -2395,7 +2431,7 @@ "message": "הסיסמה הראשית הוסרה" }, "convertOrganizationEncryptionDesc": { - "message": "$ORGANIZATION$ משתמשת ב־SSO עם שרת מפתחות באירוח עצמי. סיסמה ראשית לא דרושה יותר כדי להיכנס עבור חברים של ארגון זה.", + "message": "$ORGANIZATION$ משתמש/ת ב־SSO עם שרת מפתחות באירוח עצמי. סיסמה ראשית כבר לא נדרשת כדי להיכנס עבור חברים של ארגון זה.", "placeholders": { "organization": { "content": "$1", @@ -2413,7 +2449,7 @@ "message": "עזבת את הארגון." }, "ssoKeyConnectorError": { - "message": "שגיאת מחבר מפתח: וודא שמחבר המפתח זמין ופועל כראוי." + "message": "שגיאת Key Connector: וודא שה־Key Connector זמין ופועל כראוי." }, "lockAllVaults": { "message": "נעל את כל הכספות" @@ -2548,10 +2584,10 @@ "message": "השתמש ביכולות מיעון משנה של ספק הדוא\"ל שלך." }, "catchallEmail": { - "message": "דוא\"ל תופס-כל" + "message": "דוא\"ל תופס־כל" }, "catchallEmailDesc": { - "message": "השתמש בתיבת דואר תפוס-כל המוגדרת בדומיין שלך." + "message": "השתמש בתיבת דואר תפוס־כל המוגדרת בדומיין שלך." }, "useThisEmail": { "message": "השתמש בדוא\"ל זה" @@ -2722,7 +2758,7 @@ "description": "Part of a URL." }, "apiAccessToken": { - "message": "אסימון גישה ל־API" + "message": "אסימון גישת API" }, "apiKey": { "message": "מפתח API" @@ -2731,10 +2767,10 @@ "message": "נדרש מנוי פרימיום" }, "organizationIsDisabled": { - "message": "ארגון מושהה" + "message": "ארגון מושעה" }, "disabledOrganizationFilterError": { - "message": "לא ניתן לגשת לפריטים בארגון מושהה. פנה אל בעל הארגון שלך עבור סיוע." + "message": "לא ניתן לגשת לפריטים בארגון מושעה. פנה אל בעל הארגון שלך עבור סיוע." }, "neverLockWarning": { "message": "האם אתה בטוח שברצונך להשתמש באפשרות \"לעולם לא\"? הגדרת אפשרויות הנעילה שלך ל\"לעולם לא\" מאחסנת את מפתח ההצפנה של הכספת שלך במכשיר שלך. אם אתה משתמש באפשרות זו עליך לוודא שאתה שומר על המכשיר שלך מוגן כראוי." @@ -2746,7 +2782,7 @@ "message": "כניסה עם סיסמה ראשית" }, "loggingInAs": { - "message": "נכנס כ-" + "message": "נכנס כ־" }, "rememberEmail": { "message": "זכור דוא\"ל" @@ -2785,7 +2821,7 @@ "message": "בטל נעילת Bitwarden במכשיר שלך או ב" }, "notificationSentDeviceAnchor": { - "message": "יישום הרשת" + "message": "יישום רשת" }, "notificationSentDevicePart2": { "message": "וודא שביטוי טביעת האצבע תואם את זה שלמטה לפני שתאשר." @@ -3010,7 +3046,7 @@ "message": "אירוח עצמי" }, "accessDenied": { - "message": "גישה נדחתה. אין לך הרשאות כדי לצפות בדף זה." + "message": "גישה נדחתה. אין לך הרשאות כדי לצפות בעמוד זה." }, "accountSuccessfullyCreated": { "message": "החשבון נוצר בהצלחה!" @@ -3104,7 +3140,7 @@ "message": "קלט הוא לא כתובת דוא\"ל." }, "fieldsNeedAttention": { - "message": "$COUNT$ שדות למעלה צריכות את תשומת לבך.", + "message": "$COUNT$ שדות למעלה צריכים את תשומת לבך.", "placeholders": { "count": { "content": "$1", @@ -3158,7 +3194,7 @@ "message": "דומיין כינוי" }, "importData": { - "message": "ייבוא נתונים", + "message": "ייבא נתונים", "description": "Used for the desktop menu item and the header of the import dialog" }, "importError": { @@ -3206,6 +3242,12 @@ "duoRequiredByOrgForAccount": { "message": "נדרשת כניסה דו־שלבית של Duo עבור החשבון שלך." }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "נדרשת כניסה דו־שלבית של Duo עבור החשבון שלך. עקוב אחר השלבים למטה כדי לסיים להיכנס." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "עקוב אחר השלבים למטה כדי לסיים להיכנס." + }, "launchDuo": { "message": "פתח את Duo בדפדפן" }, @@ -3284,7 +3326,7 @@ "message": "נתוני כספת יוצאו" }, "multifactorAuthenticationCancelled": { - "message": "אימות רב-שלבי בוטל" + "message": "אימות רב־גורמי בוטל" }, "noLastPassDataFound": { "message": "לא נמצאו נתוני LastPass" @@ -3302,7 +3344,7 @@ "message": "PIN שגוי" }, "multifactorAuthenticationFailed": { - "message": "אימות רב-שלבי נכשל" + "message": "אימות רב־גורמי נכשל" }, "includeSharedFolders": { "message": "כלול תיקיות משותפות" @@ -3314,7 +3356,7 @@ "message": "מייבא את החשבון שלך..." }, "lastPassMFARequired": { - "message": "נדרש אימות רב-שלבי של LastPass" + "message": "נדרש אימות רב־גורמי של LastPass" }, "lastPassMFADesc": { "message": "הזן את קוד הגישה החד פעמי שלך מיישום האימות שלך" @@ -3422,10 +3464,10 @@ "message": "נתונים" }, "fileSends": { - "message": "סנדים של קובץ" + "message": "סֵנְדים של קובץ" }, "textSends": { - "message": "סנדים של טקסט" + "message": "סֵנְדים של טקסט" }, "ssoError": { "message": "לא נמצאו יציאות פנויות עבור כניסת ה־sso." @@ -3463,9 +3505,27 @@ "sshkeyApprovalTitle": { "message": "אשר שימוש במפתח SSH" }, + "agentForwardingWarningTitle": { + "message": "אזהרה: העברת סוכן" + }, + "agentForwardingWarningText": { + "message": "הבקשה הזאת באה ממכשיר מרוחק שאתה מחובר אליו" + }, "sshkeyApprovalMessageInfix": { "message": "מבקש גישה אל" }, + "sshkeyApprovalMessageSuffix": { + "message": "על מנת" + }, + "sshActionLogin": { + "message": "בצע אימות לשרת" + }, + "sshActionSign": { + "message": "חתימה על הודעה" + }, + "sshActionGitSign": { + "message": "חתימה על התחייבות Git" + }, "unknownApplication": { "message": "יישום" }, @@ -3491,13 +3551,13 @@ "message": "הודעה חשובה" }, "setupTwoStepLogin": { - "message": "הגדר כניסה דו-שלבית" + "message": "הגדר כניסה דו־שלבית" }, "newDeviceVerificationNoticeContentPage1": { "message": "Bitwarden ישלח קוד לדוא\"ל החשבון שלך כדי לאמת כניסות ממכשירים חדשים החל מפברואר 2025." }, "newDeviceVerificationNoticeContentPage2": { - "message": "אתה יכול להגדיר כניסה דו-שלבית כדרך חלופית להגן על החשבון שלך או לשנות את הדוא\"ל שלך לאחד שתוכל לגשת אליו." + "message": "אתה יכול להגדיר כניסה דו־שלבית כדרך חלופית להגן על החשבון שלך או לשנות את הדוא\"ל שלך לאחד שאתה יכול לגשת אליו." }, "remindMeLater": { "message": "הזכר לי מאוחר יותר" @@ -3518,7 +3578,7 @@ "message": "כן, אני יכול לגשת לדוא\"ל שלי באופן מהימן" }, "turnOnTwoStepLogin": { - "message": "הפעל כניסה דו-שלבית" + "message": "הפעל כניסה דו־שלבית" }, "changeAcctEmail": { "message": "שנה את דוא\"ל החשבון" @@ -3540,5 +3600,8 @@ }, "updateBrowserOrDisableFingerprintDialogMessage": { "message": "הרחבת הדפדפן בה אתה משתמש היא מיושנת. נא לעדכן אותה או להשבית אימות טביעת אצבע של שילוב דפדפן בהגדרות יישום שולחן העבודה." + }, + "changeAtRiskPassword": { + "message": "Change at-risk password" } } diff --git a/apps/desktop/src/locales/hi/messages.json b/apps/desktop/src/locales/hi/messages.json index 3265b5f530f..500eaaf942e 100644 --- a/apps/desktop/src/locales/hi/messages.json +++ b/apps/desktop/src/locales/hi/messages.json @@ -543,10 +543,6 @@ "message": "Include special characters", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "numWords": { "message": "Number of words" }, @@ -652,6 +648,15 @@ "logInToBitwarden": { "message": "Log in to Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "Enter the code sent to your email" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Enter the code from your authenticator app" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Press your YubiKey to authenticate" + }, "logInWithPasskey": { "message": "Log in with passkey" }, @@ -704,6 +709,15 @@ "masterPassHintLabel": { "message": "Master password hint" }, + "passwordStrengthScore": { + "message": "Password strength score $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "joinOrganization": { "message": "Join organization" }, @@ -816,6 +830,9 @@ "webauthnCancelOrTimeout": { "message": "The authentication was cancelled or took too long. Please try again." }, + "openInNewTab": { + "message": "Open in new tab" + }, "invalidVerificationCode": { "message": "Invalid verification code" }, @@ -846,12 +863,22 @@ "rememberMe": { "message": "Remember me" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Don't ask again on this device for 30 days" + }, "sendVerificationCodeEmailAgain": { "message": "Send verification code email again" }, "useAnotherTwoStepMethod": { "message": "Use another two-step login method" }, + "selectAnotherMethod": { + "message": "Select another method", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Use your recovery code" + }, "insertYubiKey": { "message": "Insert your YubiKey into your computer's USB port, then touch its button." }, @@ -885,7 +912,7 @@ "message": "Verify with Duo Security for your organization using the Duo Mobile app, SMS, phone call, or U2F security key.", "description": "'Duo Security' and 'Duo Mobile' are product names and should not be translated." }, - "verifyIdentity": { + "verifyYourIdentity": { "message": "Verify your Identity" }, "weDontRecognizeThisDevice": { @@ -918,6 +945,9 @@ "twoStepOptions": { "message": "Two-step login options" }, + "selectTwoStepLoginMethod": { + "message": "Select two-step login method" + }, "selfHostedEnvironment": { "message": "Self-hosted environment" }, @@ -2247,6 +2277,12 @@ "webAuthnAuthenticate": { "message": "Authenticate WebAuthn" }, + "readSecurityKey": { + "message": "Read security key" + }, + "awaitingSecurityKeyInteraction": { + "message": "Awaiting security key interaction..." + }, "hideEmail": { "message": "Hide my email address from recipients." }, @@ -3206,6 +3242,12 @@ "duoRequiredByOrgForAccount": { "message": "Duo two-step login is required for your account." }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Duo two-step login is required for your account. Follow the steps below to finish logging in." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Follow the steps below to finish logging in." + }, "launchDuo": { "message": "Launch Duo in Browser" }, @@ -3463,9 +3505,27 @@ "sshkeyApprovalTitle": { "message": "Confirm SSH key usage" }, + "agentForwardingWarningTitle": { + "message": "Warning: Agent Forwarding" + }, + "agentForwardingWarningText": { + "message": "This request comes from a remote device that you are logged into" + }, "sshkeyApprovalMessageInfix": { "message": "is requesting access to" }, + "sshkeyApprovalMessageSuffix": { + "message": "in order to" + }, + "sshActionLogin": { + "message": "authenticate to a server" + }, + "sshActionSign": { + "message": "sign a message" + }, + "sshActionGitSign": { + "message": "sign a git commit" + }, "unknownApplication": { "message": "An application" }, @@ -3540,5 +3600,8 @@ }, "updateBrowserOrDisableFingerprintDialogMessage": { "message": "The browser extension you are using is out of date. Please update it or disable browser integration fingerprint validation in the desktop app settings." + }, + "changeAtRiskPassword": { + "message": "Change at-risk password" } } diff --git a/apps/desktop/src/locales/hr/messages.json b/apps/desktop/src/locales/hr/messages.json index 18da306d929..f2f0b638afb 100644 --- a/apps/desktop/src/locales/hr/messages.json +++ b/apps/desktop/src/locales/hr/messages.json @@ -543,10 +543,6 @@ "message": "Uključi posebne znakove", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "! @ # $ % ^ & *", - "description": "Label for the password generator special characters checkbox" - }, "numWords": { "message": "Broj riječi" }, @@ -652,6 +648,15 @@ "logInToBitwarden": { "message": "Prijavi se u Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "Enter the code sent to your email" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Enter the code from your authenticator app" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Press your YubiKey to authenticate" + }, "logInWithPasskey": { "message": "Prijava pristupnim ključem" }, @@ -704,6 +709,15 @@ "masterPassHintLabel": { "message": "Podsjetnik glavne lozinke" }, + "passwordStrengthScore": { + "message": "Password strength score $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "joinOrganization": { "message": "Pridruži se organizaciji" }, @@ -816,6 +830,9 @@ "webauthnCancelOrTimeout": { "message": "Autentifikacija je otkazana ili je trajala predugo. Molimo pokušaj ponovno." }, + "openInNewTab": { + "message": "Open in new tab" + }, "invalidVerificationCode": { "message": "Nevažeći kôd za provjeru" }, @@ -846,12 +863,22 @@ "rememberMe": { "message": "Zapamti me" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Don't ask again on this device for 30 days" + }, "sendVerificationCodeEmailAgain": { "message": "Ponovno slanje kontrolnog koda e-poštom" }, "useAnotherTwoStepMethod": { "message": "Koristiti drugi način prijave dvostrukom autentifikacijom" }, + "selectAnotherMethod": { + "message": "Select another method", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Use your recovery code" + }, "insertYubiKey": { "message": "Umetni svoj YubiKey u USB priključak računala, a zatim dodirni njegovu tipku." }, @@ -885,8 +912,8 @@ "message": "Potvrdi s Duo Security za svoju organizaciju pomoću aplikacije Duo Mobile, SMS-om, telefonskim pozivom ili U2F sigurnosnim ključem.", "description": "'Duo Security' and 'Duo Mobile' are product names and should not be translated." }, - "verifyIdentity": { - "message": "Potvrdi svoj identitet" + "verifyYourIdentity": { + "message": "Verify your Identity" }, "weDontRecognizeThisDevice": { "message": "Ne prepoznajemo ovaj uređaj. Za potvrdu identiteta unesi kôd poslan e-poštom." @@ -918,6 +945,9 @@ "twoStepOptions": { "message": "Mogućnosti prijave dvostrukom autentifikacijom" }, + "selectTwoStepLoginMethod": { + "message": "Select two-step login method" + }, "selfHostedEnvironment": { "message": "Vlastito hosting okruženje" }, @@ -2247,6 +2277,12 @@ "webAuthnAuthenticate": { "message": "Ovjeri WebAuthn" }, + "readSecurityKey": { + "message": "Read security key" + }, + "awaitingSecurityKeyInteraction": { + "message": "Awaiting security key interaction..." + }, "hideEmail": { "message": "Sakrij moju adresu e-pošte od primatelja." }, @@ -3206,6 +3242,12 @@ "duoRequiredByOrgForAccount": { "message": "Za tvoj račun je potrebna Duo dvostruka autentifikacija." }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Duo two-step login is required for your account. Follow the steps below to finish logging in." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Follow the steps below to finish logging in." + }, "launchDuo": { "message": "Pokreni Duo u pregledniku" }, @@ -3463,9 +3505,27 @@ "sshkeyApprovalTitle": { "message": "Potvrdi korištenje SSH ključa" }, + "agentForwardingWarningTitle": { + "message": "Warning: Agent Forwarding" + }, + "agentForwardingWarningText": { + "message": "This request comes from a remote device that you are logged into" + }, "sshkeyApprovalMessageInfix": { "message": "traži pristup za" }, + "sshkeyApprovalMessageSuffix": { + "message": "in order to" + }, + "sshActionLogin": { + "message": "authenticate to a server" + }, + "sshActionSign": { + "message": "sign a message" + }, + "sshActionGitSign": { + "message": "sign a git commit" + }, "unknownApplication": { "message": "Aplikacija" }, @@ -3540,5 +3600,8 @@ }, "updateBrowserOrDisableFingerprintDialogMessage": { "message": "Proširenje preglednika koje koristitš zastarjelo. Ažuriraj ga ili onemogući provjeru otiska prsta u pregledniku u postavkama aplikacije za stolno računalo." + }, + "changeAtRiskPassword": { + "message": "Change at-risk password" } } diff --git a/apps/desktop/src/locales/hu/messages.json b/apps/desktop/src/locales/hu/messages.json index d57fe343cc6..e25f90f0f37 100644 --- a/apps/desktop/src/locales/hu/messages.json +++ b/apps/desktop/src/locales/hu/messages.json @@ -543,10 +543,6 @@ "message": "Speciális karakterek bevonása", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "numWords": { "message": "Szavak száma" }, @@ -652,6 +648,15 @@ "logInToBitwarden": { "message": "Bejelentkezés a Bitwardenbe" }, + "enterTheCodeSentToYourEmail": { + "message": "Adjuk meg az email címre elküldött kódot." + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Adjuk meg a hitelesítő alkalmazása által generált kódot." + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Nyomjuk meg a YubiKey-t a hitelesítéshez." + }, "logInWithPasskey": { "message": "Bejelentkezés hozzáférési kulccsal" }, @@ -704,6 +709,15 @@ "masterPassHintLabel": { "message": "Mesterjelszó emlékeztető" }, + "passwordStrengthScore": { + "message": "A jelszó erősségi pontszáma $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "joinOrganization": { "message": "Csatlakozás szervezethez" }, @@ -816,6 +830,9 @@ "webauthnCancelOrTimeout": { "message": "A hitelesítés megszakításra került vagy túl sokáig tartott. Próbáljuk újra." }, + "openInNewTab": { + "message": "Megnyitás új fülön" + }, "invalidVerificationCode": { "message": "Érvénytelen ellenőrző kód" }, @@ -846,12 +863,22 @@ "rememberMe": { "message": "Adatok megjegyzése" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Ne kérdezzen újra ezen az eszközön 30 napig" + }, "sendVerificationCodeEmailAgain": { "message": "Megerősítő kód ismételt elküldése emailben" }, "useAnotherTwoStepMethod": { "message": "Másik kétlépcsős bejelentkezési mód használata" }, + "selectAnotherMethod": { + "message": "Másik módszer választás", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Helyreállító kód használata" + }, "insertYubiKey": { "message": "A YubiKey beillesztése a számítógép USB portjába és a rajta levő gomb megnyomása." }, @@ -885,7 +912,7 @@ "message": "Ellenőrzés szervezeti Duo Security segítségével a Duo Mobile alkalmazás, SMS, telefonhívás vagy U2F biztonsági kulcs használatával.", "description": "'Duo Security' and 'Duo Mobile' are product names and should not be translated." }, - "verifyIdentity": { + "verifyYourIdentity": { "message": "Személyazonosság ellenőrzése" }, "weDontRecognizeThisDevice": { @@ -918,6 +945,9 @@ "twoStepOptions": { "message": "Kétlépcsős bejelentkezés opciók" }, + "selectTwoStepLoginMethod": { + "message": "Kétlépcsős bejelentkezési mód használata" + }, "selfHostedEnvironment": { "message": "Saját üzemeltetésű környezet" }, @@ -2247,6 +2277,12 @@ "webAuthnAuthenticate": { "message": "WebAutn hitelesítés" }, + "readSecurityKey": { + "message": "Biztonsági kulcs olvasása" + }, + "awaitingSecurityKeyInteraction": { + "message": "Várakozás a biztonsági kulcs interakciójára..." + }, "hideEmail": { "message": "Saját email cím elrejtése a címzettek elől." }, @@ -3206,6 +3242,12 @@ "duoRequiredByOrgForAccount": { "message": "A fiókhoz kétlépcsős DUO bejelentkezés szükséges." }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Duo kétlépcsős bejelentkezés szükséges a fiókhoz. Kövessük az alábbi lépéseket a bejelentkezés befejezéséhez." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Kövessük az alábbi lépéseket a bejelentkezés befejezéséhez." + }, "launchDuo": { "message": "A Duo elindítása a böngészőben" }, @@ -3463,9 +3505,27 @@ "sshkeyApprovalTitle": { "message": "SSH kulcs használat megerősítése" }, + "agentForwardingWarningTitle": { + "message": "Figyelmeztetés: Böngésző továbbítás" + }, + "agentForwardingWarningText": { + "message": "Ez a kérelem egy távoli eszközről érkezik, amelyre bejelentkeztünk" + }, "sshkeyApprovalMessageInfix": { "message": "hozzáférést kér:" }, + "sshkeyApprovalMessageSuffix": { + "message": "azért, hogy" + }, + "sshActionLogin": { + "message": "hitelesítsük magunkat a szerveren" + }, + "sshActionSign": { + "message": "aláírjunk egy üzenetet" + }, + "sshActionGitSign": { + "message": "aléírjunk egy git commit elemet" + }, "unknownApplication": { "message": "Egy alkalmazás" }, @@ -3540,5 +3600,8 @@ }, "updateBrowserOrDisableFingerprintDialogMessage": { "message": "Al használt böngésző bővítmény elavult. Frissítsük vagy tiltsuk le a böngésző integráció ujjlenyomat ellenőrzését az asztali alkalmazás beállításainál." + }, + "changeAtRiskPassword": { + "message": "Kockázatos jelszó megváltoztatása" } } diff --git a/apps/desktop/src/locales/id/messages.json b/apps/desktop/src/locales/id/messages.json index d40053aec28..914cc9d08aa 100644 --- a/apps/desktop/src/locales/id/messages.json +++ b/apps/desktop/src/locales/id/messages.json @@ -543,10 +543,6 @@ "message": "Include special characters", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "numWords": { "message": "Jumlah kata" }, @@ -652,6 +648,15 @@ "logInToBitwarden": { "message": "Log in to Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "Enter the code sent to your email" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Enter the code from your authenticator app" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Press your YubiKey to authenticate" + }, "logInWithPasskey": { "message": "Log in with passkey" }, @@ -704,6 +709,15 @@ "masterPassHintLabel": { "message": "Master password hint" }, + "passwordStrengthScore": { + "message": "Password strength score $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "joinOrganization": { "message": "Join organization" }, @@ -816,6 +830,9 @@ "webauthnCancelOrTimeout": { "message": "The authentication was cancelled or took too long. Please try again." }, + "openInNewTab": { + "message": "Open in new tab" + }, "invalidVerificationCode": { "message": "Kode verifikasi tidak valid" }, @@ -846,12 +863,22 @@ "rememberMe": { "message": "Ingat saya" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Don't ask again on this device for 30 days" + }, "sendVerificationCodeEmailAgain": { "message": "Kirim ulang email kode verifikasi" }, "useAnotherTwoStepMethod": { "message": "Gunakan metode masuk dua langkah lainnya" }, + "selectAnotherMethod": { + "message": "Select another method", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Use your recovery code" + }, "insertYubiKey": { "message": "Masukkan YubiKey Anda ke port USB komputer Anda, lalu sentuh tombol nya." }, @@ -885,7 +912,7 @@ "message": "Verifikasi dengan Duo Security untuk organisasi anda dengan menggunakan Aplikasi Duo Mobile, SMS, panggilan telepon atau kunci keamanan U2F.", "description": "'Duo Security' and 'Duo Mobile' are product names and should not be translated." }, - "verifyIdentity": { + "verifyYourIdentity": { "message": "Verify your Identity" }, "weDontRecognizeThisDevice": { @@ -918,6 +945,9 @@ "twoStepOptions": { "message": "Pilihan Info Masuk Dua Langkah" }, + "selectTwoStepLoginMethod": { + "message": "Select two-step login method" + }, "selfHostedEnvironment": { "message": "Lingkungan Hos-mandiri" }, @@ -2247,6 +2277,12 @@ "webAuthnAuthenticate": { "message": "Autentikasi dengan WebAuthn" }, + "readSecurityKey": { + "message": "Read security key" + }, + "awaitingSecurityKeyInteraction": { + "message": "Awaiting security key interaction..." + }, "hideEmail": { "message": "Sembunyikan alamat surel saya dari penerima." }, @@ -3206,6 +3242,12 @@ "duoRequiredByOrgForAccount": { "message": "Duo two-step login is required for your account." }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Duo two-step login is required for your account. Follow the steps below to finish logging in." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Follow the steps below to finish logging in." + }, "launchDuo": { "message": "Launch Duo in Browser" }, @@ -3463,9 +3505,27 @@ "sshkeyApprovalTitle": { "message": "Confirm SSH key usage" }, + "agentForwardingWarningTitle": { + "message": "Warning: Agent Forwarding" + }, + "agentForwardingWarningText": { + "message": "This request comes from a remote device that you are logged into" + }, "sshkeyApprovalMessageInfix": { "message": "is requesting access to" }, + "sshkeyApprovalMessageSuffix": { + "message": "in order to" + }, + "sshActionLogin": { + "message": "authenticate to a server" + }, + "sshActionSign": { + "message": "sign a message" + }, + "sshActionGitSign": { + "message": "sign a git commit" + }, "unknownApplication": { "message": "An application" }, @@ -3540,5 +3600,8 @@ }, "updateBrowserOrDisableFingerprintDialogMessage": { "message": "The browser extension you are using is out of date. Please update it or disable browser integration fingerprint validation in the desktop app settings." + }, + "changeAtRiskPassword": { + "message": "Change at-risk password" } } diff --git a/apps/desktop/src/locales/it/messages.json b/apps/desktop/src/locales/it/messages.json index ee324d47c89..5c6552d0005 100644 --- a/apps/desktop/src/locales/it/messages.json +++ b/apps/desktop/src/locales/it/messages.json @@ -543,10 +543,6 @@ "message": "Includi caratteri speciali", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "numWords": { "message": "Numero di parole" }, @@ -652,6 +648,15 @@ "logInToBitwarden": { "message": "Accedi a Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "Inserisci il codice inviato alla tua e-mail" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Inserisci il codice dalla tua app di autenticazione" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Premi la tua chiave Yubi per autenticare" + }, "logInWithPasskey": { "message": "Accedi con passkey" }, @@ -704,6 +709,15 @@ "masterPassHintLabel": { "message": "Suggerimento per la password principale" }, + "passwordStrengthScore": { + "message": "Valutazione complessità parola d'accesso $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "joinOrganization": { "message": "Unisciti all'organizzazione" }, @@ -816,6 +830,9 @@ "webauthnCancelOrTimeout": { "message": "L'autenticazione è stata annullata o ha richiesto troppo tempo. Per favore riprova." }, + "openInNewTab": { + "message": "Apri in una nuova scheda" + }, "invalidVerificationCode": { "message": "Codice di verifica non valido" }, @@ -846,12 +863,22 @@ "rememberMe": { "message": "Ricordami" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Non chiedere più su questo dispositivo per 30 giorni" + }, "sendVerificationCodeEmailAgain": { "message": "Invia email con codice di verifica di nuovo" }, "useAnotherTwoStepMethod": { "message": "Usa un altro metodo di verifica in due passaggi" }, + "selectAnotherMethod": { + "message": "Seleziona un altro metodo", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Usa il tuo codice di recupero" + }, "insertYubiKey": { "message": "Inserisci la tua YubiKey nella porta USB del computer e premi il suo pulsante." }, @@ -885,8 +912,8 @@ "message": "Verifica con Duo Security per la tua organizzazione usando l'app Duo Mobile, SMS, chiamata telefonica, o chiave di sicurezza U2F.", "description": "'Duo Security' and 'Duo Mobile' are product names and should not be translated." }, - "verifyIdentity": { - "message": "Verifica la tua identità" + "verifyYourIdentity": { + "message": "Verify your Identity" }, "weDontRecognizeThisDevice": { "message": "Non riconosciamo questo dispositivo. Inserisci il codice inviato alla tua e-mail per verificare la tua identità." @@ -918,6 +945,9 @@ "twoStepOptions": { "message": "Opzioni di verifica in due passaggi" }, + "selectTwoStepLoginMethod": { + "message": "Seleziona metodo di accesso in due passaggi" + }, "selfHostedEnvironment": { "message": "Ambiente self-hosted" }, @@ -2247,6 +2277,12 @@ "webAuthnAuthenticate": { "message": "Autenticazione WebAuthn" }, + "readSecurityKey": { + "message": "Leggi chiave di sicurezza" + }, + "awaitingSecurityKeyInteraction": { + "message": "In attesa di interazione con la chiave di sicurezza..." + }, "hideEmail": { "message": "Nascondi il mio indirizzo email dai destinatari." }, @@ -3206,6 +3242,12 @@ "duoRequiredByOrgForAccount": { "message": "Per il tuo account è richiesta la verifica in due passaggi Duo." }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Il login Duo in due passaggi è richiesto per il tuo account. Segui i passaggi qui sotto per completare l'accesso." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Segui i passaggi qui sotto per completare l'accesso." + }, "launchDuo": { "message": "Avvia Duo nel browser" }, @@ -3463,9 +3505,27 @@ "sshkeyApprovalTitle": { "message": "Conferma l'uso della chiave SSH" }, + "agentForwardingWarningTitle": { + "message": "Attenzione: inoltro agente" + }, + "agentForwardingWarningText": { + "message": "Questa richiesta proviene da un dispositivo remoto al quale si è connessi" + }, "sshkeyApprovalMessageInfix": { "message": "richiede l'accesso a" }, + "sshkeyApprovalMessageSuffix": { + "message": "al fine di" + }, + "sshActionLogin": { + "message": "autenticazione su un server" + }, + "sshActionSign": { + "message": "firmare un messaggio" + }, + "sshActionGitSign": { + "message": "firmare un commit git" + }, "unknownApplication": { "message": "Un'applicazione" }, @@ -3540,5 +3600,8 @@ }, "updateBrowserOrDisableFingerprintDialogMessage": { "message": "L'estensione del browser che stai usando non è aggiornata. Aggiornala o disabilita la convalida dell'impronta digitale per l'integrazione del browser nelle impostazioni dell'app desktop." + }, + "changeAtRiskPassword": { + "message": "Change at-risk password" } } diff --git a/apps/desktop/src/locales/ja/messages.json b/apps/desktop/src/locales/ja/messages.json index 241b72f95a8..b3df4daa81f 100644 --- a/apps/desktop/src/locales/ja/messages.json +++ b/apps/desktop/src/locales/ja/messages.json @@ -543,10 +543,6 @@ "message": "特殊記号を含める", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "numWords": { "message": "単語数" }, @@ -652,6 +648,15 @@ "logInToBitwarden": { "message": "Bitwarden にログイン" }, + "enterTheCodeSentToYourEmail": { + "message": "Enter the code sent to your email" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Enter the code from your authenticator app" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Press your YubiKey to authenticate" + }, "logInWithPasskey": { "message": "パスキーでログイン" }, @@ -704,6 +709,15 @@ "masterPassHintLabel": { "message": "マスターパスワードのヒント" }, + "passwordStrengthScore": { + "message": "Password strength score $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "joinOrganization": { "message": "組織に参加" }, @@ -816,6 +830,9 @@ "webauthnCancelOrTimeout": { "message": "認証がキャンセルされたか、時間がかかりすぎました。もう一度やり直してください。" }, + "openInNewTab": { + "message": "Open in new tab" + }, "invalidVerificationCode": { "message": "認証コードが間違っています" }, @@ -846,12 +863,22 @@ "rememberMe": { "message": "情報を保存する" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Don't ask again on this device for 30 days" + }, "sendVerificationCodeEmailAgain": { "message": "確認コードをメールで再送" }, "useAnotherTwoStepMethod": { "message": "他の2段階認証方法を使用" }, + "selectAnotherMethod": { + "message": "Select another method", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Use your recovery code" + }, "insertYubiKey": { "message": "YubiKey を USB ポートに挿入し、ボタンをタッチしてください。" }, @@ -885,7 +912,7 @@ "message": "組織の Duo Security を Duo Mobile アプリや SMS、電話、U2F セキュリティーキーを使用して認証します。", "description": "'Duo Security' and 'Duo Mobile' are product names and should not be translated." }, - "verifyIdentity": { + "verifyYourIdentity": { "message": "Verify your Identity" }, "weDontRecognizeThisDevice": { @@ -918,6 +945,9 @@ "twoStepOptions": { "message": "2段階認証オプション" }, + "selectTwoStepLoginMethod": { + "message": "Select two-step login method" + }, "selfHostedEnvironment": { "message": "セルフホスティング環境" }, @@ -2247,6 +2277,12 @@ "webAuthnAuthenticate": { "message": "WebAuthn の認証" }, + "readSecurityKey": { + "message": "Read security key" + }, + "awaitingSecurityKeyInteraction": { + "message": "Awaiting security key interaction..." + }, "hideEmail": { "message": "メールアドレスを受信者に表示しない" }, @@ -3206,6 +3242,12 @@ "duoRequiredByOrgForAccount": { "message": "アカウントには Duo 二段階認証が必要です。" }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Duo two-step login is required for your account. Follow the steps below to finish logging in." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Follow the steps below to finish logging in." + }, "launchDuo": { "message": "ブラウザで Duo を起動" }, @@ -3463,9 +3505,27 @@ "sshkeyApprovalTitle": { "message": "SSH 鍵の使用を確認します" }, + "agentForwardingWarningTitle": { + "message": "Warning: Agent Forwarding" + }, + "agentForwardingWarningText": { + "message": "This request comes from a remote device that you are logged into" + }, "sshkeyApprovalMessageInfix": { "message": "がアクセスを要求しています: " }, + "sshkeyApprovalMessageSuffix": { + "message": "in order to" + }, + "sshActionLogin": { + "message": "authenticate to a server" + }, + "sshActionSign": { + "message": "sign a message" + }, + "sshActionGitSign": { + "message": "sign a git commit" + }, "unknownApplication": { "message": "アプリ" }, @@ -3540,5 +3600,8 @@ }, "updateBrowserOrDisableFingerprintDialogMessage": { "message": "The browser extension you are using is out of date. Please update it or disable browser integration fingerprint validation in the desktop app settings." + }, + "changeAtRiskPassword": { + "message": "Change at-risk password" } } diff --git a/apps/desktop/src/locales/ka/messages.json b/apps/desktop/src/locales/ka/messages.json index 762cd87cd01..d3b0392df4d 100644 --- a/apps/desktop/src/locales/ka/messages.json +++ b/apps/desktop/src/locales/ka/messages.json @@ -543,10 +543,6 @@ "message": "Include special characters", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "numWords": { "message": "Number of words" }, @@ -652,6 +648,15 @@ "logInToBitwarden": { "message": "Log in to Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "Enter the code sent to your email" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Enter the code from your authenticator app" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Press your YubiKey to authenticate" + }, "logInWithPasskey": { "message": "Log in with passkey" }, @@ -704,6 +709,15 @@ "masterPassHintLabel": { "message": "Master password hint" }, + "passwordStrengthScore": { + "message": "Password strength score $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "joinOrganization": { "message": "Join organization" }, @@ -816,6 +830,9 @@ "webauthnCancelOrTimeout": { "message": "The authentication was cancelled or took too long. Please try again." }, + "openInNewTab": { + "message": "Open in new tab" + }, "invalidVerificationCode": { "message": "არასწორი გადამოწმების კოდი" }, @@ -846,12 +863,22 @@ "rememberMe": { "message": "დამიმახსოვრე" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Don't ask again on this device for 30 days" + }, "sendVerificationCodeEmailAgain": { "message": "Send verification code email again" }, "useAnotherTwoStepMethod": { "message": "Use another two-step login method" }, + "selectAnotherMethod": { + "message": "Select another method", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Use your recovery code" + }, "insertYubiKey": { "message": "Insert your YubiKey into your computer's USB port, then touch its button." }, @@ -885,7 +912,7 @@ "message": "Verify with Duo Security for your organization using the Duo Mobile app, SMS, phone call, or U2F security key.", "description": "'Duo Security' and 'Duo Mobile' are product names and should not be translated." }, - "verifyIdentity": { + "verifyYourIdentity": { "message": "Verify your Identity" }, "weDontRecognizeThisDevice": { @@ -918,6 +945,9 @@ "twoStepOptions": { "message": "Two-step login options" }, + "selectTwoStepLoginMethod": { + "message": "Select two-step login method" + }, "selfHostedEnvironment": { "message": "Self-hosted environment" }, @@ -2247,6 +2277,12 @@ "webAuthnAuthenticate": { "message": "Authenticate WebAuthn" }, + "readSecurityKey": { + "message": "Read security key" + }, + "awaitingSecurityKeyInteraction": { + "message": "Awaiting security key interaction..." + }, "hideEmail": { "message": "Hide my email address from recipients." }, @@ -3206,6 +3242,12 @@ "duoRequiredByOrgForAccount": { "message": "Duo two-step login is required for your account." }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Duo two-step login is required for your account. Follow the steps below to finish logging in." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Follow the steps below to finish logging in." + }, "launchDuo": { "message": "Launch Duo in Browser" }, @@ -3463,9 +3505,27 @@ "sshkeyApprovalTitle": { "message": "Confirm SSH key usage" }, + "agentForwardingWarningTitle": { + "message": "Warning: Agent Forwarding" + }, + "agentForwardingWarningText": { + "message": "This request comes from a remote device that you are logged into" + }, "sshkeyApprovalMessageInfix": { "message": "is requesting access to" }, + "sshkeyApprovalMessageSuffix": { + "message": "in order to" + }, + "sshActionLogin": { + "message": "authenticate to a server" + }, + "sshActionSign": { + "message": "sign a message" + }, + "sshActionGitSign": { + "message": "sign a git commit" + }, "unknownApplication": { "message": "An application" }, @@ -3540,5 +3600,8 @@ }, "updateBrowserOrDisableFingerprintDialogMessage": { "message": "The browser extension you are using is out of date. Please update it or disable browser integration fingerprint validation in the desktop app settings." + }, + "changeAtRiskPassword": { + "message": "Change at-risk password" } } diff --git a/apps/desktop/src/locales/km/messages.json b/apps/desktop/src/locales/km/messages.json index 1aa61a9b381..d7769ad902a 100644 --- a/apps/desktop/src/locales/km/messages.json +++ b/apps/desktop/src/locales/km/messages.json @@ -543,10 +543,6 @@ "message": "Include special characters", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "numWords": { "message": "Number of words" }, @@ -652,6 +648,15 @@ "logInToBitwarden": { "message": "Log in to Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "Enter the code sent to your email" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Enter the code from your authenticator app" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Press your YubiKey to authenticate" + }, "logInWithPasskey": { "message": "Log in with passkey" }, @@ -704,6 +709,15 @@ "masterPassHintLabel": { "message": "Master password hint" }, + "passwordStrengthScore": { + "message": "Password strength score $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "joinOrganization": { "message": "Join organization" }, @@ -816,6 +830,9 @@ "webauthnCancelOrTimeout": { "message": "The authentication was cancelled or took too long. Please try again." }, + "openInNewTab": { + "message": "Open in new tab" + }, "invalidVerificationCode": { "message": "Invalid verification code" }, @@ -846,12 +863,22 @@ "rememberMe": { "message": "Remember me" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Don't ask again on this device for 30 days" + }, "sendVerificationCodeEmailAgain": { "message": "Send verification code email again" }, "useAnotherTwoStepMethod": { "message": "Use another two-step login method" }, + "selectAnotherMethod": { + "message": "Select another method", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Use your recovery code" + }, "insertYubiKey": { "message": "Insert your YubiKey into your computer's USB port, then touch its button." }, @@ -885,7 +912,7 @@ "message": "Verify with Duo Security for your organization using the Duo Mobile app, SMS, phone call, or U2F security key.", "description": "'Duo Security' and 'Duo Mobile' are product names and should not be translated." }, - "verifyIdentity": { + "verifyYourIdentity": { "message": "Verify your Identity" }, "weDontRecognizeThisDevice": { @@ -918,6 +945,9 @@ "twoStepOptions": { "message": "Two-step login options" }, + "selectTwoStepLoginMethod": { + "message": "Select two-step login method" + }, "selfHostedEnvironment": { "message": "Self-hosted environment" }, @@ -2247,6 +2277,12 @@ "webAuthnAuthenticate": { "message": "Authenticate WebAuthn" }, + "readSecurityKey": { + "message": "Read security key" + }, + "awaitingSecurityKeyInteraction": { + "message": "Awaiting security key interaction..." + }, "hideEmail": { "message": "Hide my email address from recipients." }, @@ -3206,6 +3242,12 @@ "duoRequiredByOrgForAccount": { "message": "Duo two-step login is required for your account." }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Duo two-step login is required for your account. Follow the steps below to finish logging in." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Follow the steps below to finish logging in." + }, "launchDuo": { "message": "Launch Duo in Browser" }, @@ -3463,9 +3505,27 @@ "sshkeyApprovalTitle": { "message": "Confirm SSH key usage" }, + "agentForwardingWarningTitle": { + "message": "Warning: Agent Forwarding" + }, + "agentForwardingWarningText": { + "message": "This request comes from a remote device that you are logged into" + }, "sshkeyApprovalMessageInfix": { "message": "is requesting access to" }, + "sshkeyApprovalMessageSuffix": { + "message": "in order to" + }, + "sshActionLogin": { + "message": "authenticate to a server" + }, + "sshActionSign": { + "message": "sign a message" + }, + "sshActionGitSign": { + "message": "sign a git commit" + }, "unknownApplication": { "message": "An application" }, @@ -3540,5 +3600,8 @@ }, "updateBrowserOrDisableFingerprintDialogMessage": { "message": "The browser extension you are using is out of date. Please update it or disable browser integration fingerprint validation in the desktop app settings." + }, + "changeAtRiskPassword": { + "message": "Change at-risk password" } } diff --git a/apps/desktop/src/locales/kn/messages.json b/apps/desktop/src/locales/kn/messages.json index 69af0ab913f..ed2ccca2709 100644 --- a/apps/desktop/src/locales/kn/messages.json +++ b/apps/desktop/src/locales/kn/messages.json @@ -543,10 +543,6 @@ "message": "Include special characters", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "numWords": { "message": "ಪದಗಳ ಸಂಖ್ಯೆ" }, @@ -652,6 +648,15 @@ "logInToBitwarden": { "message": "Log in to Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "Enter the code sent to your email" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Enter the code from your authenticator app" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Press your YubiKey to authenticate" + }, "logInWithPasskey": { "message": "Log in with passkey" }, @@ -704,6 +709,15 @@ "masterPassHintLabel": { "message": "Master password hint" }, + "passwordStrengthScore": { + "message": "Password strength score $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "joinOrganization": { "message": "Join organization" }, @@ -816,6 +830,9 @@ "webauthnCancelOrTimeout": { "message": "The authentication was cancelled or took too long. Please try again." }, + "openInNewTab": { + "message": "Open in new tab" + }, "invalidVerificationCode": { "message": "Invalid verification code" }, @@ -846,12 +863,22 @@ "rememberMe": { "message": "ನನ್ನನ್ನು ನೆನಪಿನಲ್ಲಿ ಇಡು" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Don't ask again on this device for 30 days" + }, "sendVerificationCodeEmailAgain": { "message": "ಪರಿಶೀಲನೆ ಕೋಡ್ ಇಮೇಲ್ ಅನ್ನು ಮತ್ತೆ ಕಳುಹಿಸಿ" }, "useAnotherTwoStepMethod": { "message": "ಮತ್ತೊಂದು ಎರಡು-ಹಂತದ ಲಾಗಿನ್ ವಿಧಾನವನ್ನು ಬಳಸಿ" }, + "selectAnotherMethod": { + "message": "Select another method", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Use your recovery code" + }, "insertYubiKey": { "message": "ನಿಮ್ಮ ಯುಬಿಕಿಯನ್ನು ನಿಮ್ಮ ಕಂಪ್ಯೂಟರ್‌ನ ಯುಎಸ್‌ಬಿ ಪೋರ್ಟ್ಗೆ ಸೇರಿಸಿ, ನಂತರ ಅದರ ಗುಂಡಿಯನ್ನು ಸ್ಪರ್ಶಿಸಿ." }, @@ -885,7 +912,7 @@ "message": "ಡ್ಯುಯೊ ಮೊಬೈಲ್ ಅಪ್ಲಿಕೇಶನ್, ಎಸ್‌ಎಂಎಸ್, ಫೋನ್ ಕರೆ ಅಥವಾ ಯು 2 ಎಫ್ ಭದ್ರತಾ ಕೀಲಿಯನ್ನು ಬಳಸಿಕೊಂಡು ನಿಮ್ಮ ಸಂಸ್ಥೆಗಾಗಿ ಡ್ಯುಯೊ ಸೆಕ್ಯುರಿಟಿಯೊಂದಿಗೆ ಪರಿಶೀಲಿಸಿ.", "description": "'Duo Security' and 'Duo Mobile' are product names and should not be translated." }, - "verifyIdentity": { + "verifyYourIdentity": { "message": "Verify your Identity" }, "weDontRecognizeThisDevice": { @@ -918,6 +945,9 @@ "twoStepOptions": { "message": "ಎರಡು ಹಂತದ ಲಾಗಿನ್ ಆಯ್ಕೆಗಳು" }, + "selectTwoStepLoginMethod": { + "message": "Select two-step login method" + }, "selfHostedEnvironment": { "message": "ಸ್ವಯಂ ಆತಿಥೇಯ ಪರಿಸರ" }, @@ -2247,6 +2277,12 @@ "webAuthnAuthenticate": { "message": "WebAuthn ಅನ್ನು ಪ್ರಮಾಣಿಕರಿಸು" }, + "readSecurityKey": { + "message": "Read security key" + }, + "awaitingSecurityKeyInteraction": { + "message": "Awaiting security key interaction..." + }, "hideEmail": { "message": "ಸ್ವೀಕರಿಸುವವರಿಂದ ನನ್ನ ಇಮೇಲ್ ವಿಳಾಸವನ್ನು ಮರೆಮಾಡಿ." }, @@ -3206,6 +3242,12 @@ "duoRequiredByOrgForAccount": { "message": "Duo two-step login is required for your account." }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Duo two-step login is required for your account. Follow the steps below to finish logging in." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Follow the steps below to finish logging in." + }, "launchDuo": { "message": "Launch Duo in Browser" }, @@ -3463,9 +3505,27 @@ "sshkeyApprovalTitle": { "message": "Confirm SSH key usage" }, + "agentForwardingWarningTitle": { + "message": "Warning: Agent Forwarding" + }, + "agentForwardingWarningText": { + "message": "This request comes from a remote device that you are logged into" + }, "sshkeyApprovalMessageInfix": { "message": "is requesting access to" }, + "sshkeyApprovalMessageSuffix": { + "message": "in order to" + }, + "sshActionLogin": { + "message": "authenticate to a server" + }, + "sshActionSign": { + "message": "sign a message" + }, + "sshActionGitSign": { + "message": "sign a git commit" + }, "unknownApplication": { "message": "An application" }, @@ -3540,5 +3600,8 @@ }, "updateBrowserOrDisableFingerprintDialogMessage": { "message": "The browser extension you are using is out of date. Please update it or disable browser integration fingerprint validation in the desktop app settings." + }, + "changeAtRiskPassword": { + "message": "Change at-risk password" } } diff --git a/apps/desktop/src/locales/ko/messages.json b/apps/desktop/src/locales/ko/messages.json index ef9d69efacf..c462142e9e8 100644 --- a/apps/desktop/src/locales/ko/messages.json +++ b/apps/desktop/src/locales/ko/messages.json @@ -543,10 +543,6 @@ "message": "특수 문자 포함", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "numWords": { "message": "단어 수" }, @@ -652,6 +648,15 @@ "logInToBitwarden": { "message": "Bitwarden 로그인" }, + "enterTheCodeSentToYourEmail": { + "message": "Enter the code sent to your email" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Enter the code from your authenticator app" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Press your YubiKey to authenticate" + }, "logInWithPasskey": { "message": "패스키로 로그인" }, @@ -704,6 +709,15 @@ "masterPassHintLabel": { "message": "Master password hint" }, + "passwordStrengthScore": { + "message": "Password strength score $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "joinOrganization": { "message": "Join organization" }, @@ -816,6 +830,9 @@ "webauthnCancelOrTimeout": { "message": "The authentication was cancelled or took too long. Please try again." }, + "openInNewTab": { + "message": "Open in new tab" + }, "invalidVerificationCode": { "message": "유효하지 않은 확인 코드" }, @@ -846,12 +863,22 @@ "rememberMe": { "message": "기억하기" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Don't ask again on this device for 30 days" + }, "sendVerificationCodeEmailAgain": { "message": "인증 코드 이메일 다시 보내기" }, "useAnotherTwoStepMethod": { "message": "다른 2단계 인증 사용" }, + "selectAnotherMethod": { + "message": "Select another method", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Use your recovery code" + }, "insertYubiKey": { "message": "YubiKey를 컴퓨터의 USB 포트에 삽입하고 버튼을 누르세요." }, @@ -885,7 +912,7 @@ "message": "Duo Mobile 앱, SMS, 전화 통화를 사용한 조직용 Duo Security 또는 U2F 보안 키를 사용하여 인증하세요.", "description": "'Duo Security' and 'Duo Mobile' are product names and should not be translated." }, - "verifyIdentity": { + "verifyYourIdentity": { "message": "Verify your Identity" }, "weDontRecognizeThisDevice": { @@ -918,6 +945,9 @@ "twoStepOptions": { "message": "2단계 인증 옵션" }, + "selectTwoStepLoginMethod": { + "message": "Select two-step login method" + }, "selfHostedEnvironment": { "message": "자체 호스팅 환경" }, @@ -2247,6 +2277,12 @@ "webAuthnAuthenticate": { "message": "WebAuthn 인증" }, + "readSecurityKey": { + "message": "Read security key" + }, + "awaitingSecurityKeyInteraction": { + "message": "Awaiting security key interaction..." + }, "hideEmail": { "message": "받는 사람으로부터 나의 이메일 주소 숨기기" }, @@ -3206,6 +3242,12 @@ "duoRequiredByOrgForAccount": { "message": "Duo two-step login is required for your account." }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Duo two-step login is required for your account. Follow the steps below to finish logging in." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Follow the steps below to finish logging in." + }, "launchDuo": { "message": "Launch Duo in Browser" }, @@ -3463,9 +3505,27 @@ "sshkeyApprovalTitle": { "message": "Confirm SSH key usage" }, + "agentForwardingWarningTitle": { + "message": "Warning: Agent Forwarding" + }, + "agentForwardingWarningText": { + "message": "This request comes from a remote device that you are logged into" + }, "sshkeyApprovalMessageInfix": { "message": "is requesting access to" }, + "sshkeyApprovalMessageSuffix": { + "message": "in order to" + }, + "sshActionLogin": { + "message": "authenticate to a server" + }, + "sshActionSign": { + "message": "sign a message" + }, + "sshActionGitSign": { + "message": "sign a git commit" + }, "unknownApplication": { "message": "An application" }, @@ -3540,5 +3600,8 @@ }, "updateBrowserOrDisableFingerprintDialogMessage": { "message": "The browser extension you are using is out of date. Please update it or disable browser integration fingerprint validation in the desktop app settings." + }, + "changeAtRiskPassword": { + "message": "Change at-risk password" } } diff --git a/apps/desktop/src/locales/lt/messages.json b/apps/desktop/src/locales/lt/messages.json index 2b124880774..366e5e9e377 100644 --- a/apps/desktop/src/locales/lt/messages.json +++ b/apps/desktop/src/locales/lt/messages.json @@ -543,10 +543,6 @@ "message": "Include special characters", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "numWords": { "message": "Žodžių skaičius" }, @@ -652,6 +648,15 @@ "logInToBitwarden": { "message": "Log in to Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "Enter the code sent to your email" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Enter the code from your authenticator app" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Press your YubiKey to authenticate" + }, "logInWithPasskey": { "message": "Log in with passkey" }, @@ -704,6 +709,15 @@ "masterPassHintLabel": { "message": "Master password hint" }, + "passwordStrengthScore": { + "message": "Password strength score $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "joinOrganization": { "message": "Join organization" }, @@ -816,6 +830,9 @@ "webauthnCancelOrTimeout": { "message": "The authentication was cancelled or took too long. Please try again." }, + "openInNewTab": { + "message": "Open in new tab" + }, "invalidVerificationCode": { "message": "Neteisingas patvirtinimo kodas" }, @@ -846,12 +863,22 @@ "rememberMe": { "message": "Prisiminti mane" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Don't ask again on this device for 30 days" + }, "sendVerificationCodeEmailAgain": { "message": "Pakartotinai atsiųsti patvirtinimo kodą el. paštu" }, "useAnotherTwoStepMethod": { "message": "Naudoti kitą dviejų žingsnių prisijungimo metodą" }, + "selectAnotherMethod": { + "message": "Select another method", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Use your recovery code" + }, "insertYubiKey": { "message": "Įkiškite YubiKey į savo kompiuterio USB prievadą, tada palieskite jo mygtuką." }, @@ -885,7 +912,7 @@ "message": "Patikrinkite su Duo Security savo organizacijai naudodami Duo Mobile programą, SMS žinutę, telefono skambutį arba U2F saugumo raktą.", "description": "'Duo Security' and 'Duo Mobile' are product names and should not be translated." }, - "verifyIdentity": { + "verifyYourIdentity": { "message": "Verify your Identity" }, "weDontRecognizeThisDevice": { @@ -918,6 +945,9 @@ "twoStepOptions": { "message": "Dviejų žingsnių prisijungimo parinktys" }, + "selectTwoStepLoginMethod": { + "message": "Select two-step login method" + }, "selfHostedEnvironment": { "message": "Savarankiškai sukurta aplinka" }, @@ -2247,6 +2277,12 @@ "webAuthnAuthenticate": { "message": "Autentifikuoti WebAuthn" }, + "readSecurityKey": { + "message": "Read security key" + }, + "awaitingSecurityKeyInteraction": { + "message": "Awaiting security key interaction..." + }, "hideEmail": { "message": "Slėpti mano el. pašto adresą nuo gavėjų." }, @@ -3206,6 +3242,12 @@ "duoRequiredByOrgForAccount": { "message": "Duo two-step login is required for your account." }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Duo two-step login is required for your account. Follow the steps below to finish logging in." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Follow the steps below to finish logging in." + }, "launchDuo": { "message": "Launch Duo in Browser" }, @@ -3463,9 +3505,27 @@ "sshkeyApprovalTitle": { "message": "Confirm SSH key usage" }, + "agentForwardingWarningTitle": { + "message": "Warning: Agent Forwarding" + }, + "agentForwardingWarningText": { + "message": "This request comes from a remote device that you are logged into" + }, "sshkeyApprovalMessageInfix": { "message": "is requesting access to" }, + "sshkeyApprovalMessageSuffix": { + "message": "in order to" + }, + "sshActionLogin": { + "message": "authenticate to a server" + }, + "sshActionSign": { + "message": "sign a message" + }, + "sshActionGitSign": { + "message": "sign a git commit" + }, "unknownApplication": { "message": "An application" }, @@ -3540,5 +3600,8 @@ }, "updateBrowserOrDisableFingerprintDialogMessage": { "message": "The browser extension you are using is out of date. Please update it or disable browser integration fingerprint validation in the desktop app settings." + }, + "changeAtRiskPassword": { + "message": "Change at-risk password" } } diff --git a/apps/desktop/src/locales/lv/messages.json b/apps/desktop/src/locales/lv/messages.json index b51f0e523bb..73becbcd4bd 100644 --- a/apps/desktop/src/locales/lv/messages.json +++ b/apps/desktop/src/locales/lv/messages.json @@ -543,10 +543,6 @@ "message": "Iekļaut īpašās rakstzīmes", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "numWords": { "message": "Vārdu skaits" }, @@ -652,6 +648,15 @@ "logInToBitwarden": { "message": "Pieteikties Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "Jāievada e-pastā nosūtītais kods" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Jāievada kods no savas autentificētājlietotnes" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Jāpiespiež sava YubiKey ierīce, lai autentificētu" + }, "logInWithPasskey": { "message": "Pieteikties ar piekļuves atslēgu" }, @@ -704,6 +709,15 @@ "masterPassHintLabel": { "message": "Galvenās paroles norāde" }, + "passwordStrengthScore": { + "message": "Paroles stipruma novērtējums $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "joinOrganization": { "message": "Pievienoties apvienībai" }, @@ -816,6 +830,9 @@ "webauthnCancelOrTimeout": { "message": "Autentifikācija tika atcelta vai tā aizņēma pārāk daudz laika. Lūgums mēģināt vēlreiz." }, + "openInNewTab": { + "message": "Atvērt jaunā cilnē" + }, "invalidVerificationCode": { "message": "Nederīgs apstiprinājuma kods" }, @@ -846,12 +863,22 @@ "rememberMe": { "message": "Atcerēties mani" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Šajā ierīcē 30 dienas vairs nevaicāt" + }, "sendVerificationCodeEmailAgain": { "message": "Sūtīt apstiprinājuma koda e-pastu vēlreiz" }, "useAnotherTwoStepMethod": { "message": "Izmantot citu divpakāpju pieteikšanās veidu" }, + "selectAnotherMethod": { + "message": "Atlasīt citu veidu", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Izmantot savu atkopes kodu" + }, "insertYubiKey": { "message": "Ievieto savu YubiKey datora USB ligzdā un pieskaries tā pogai!" }, @@ -885,7 +912,7 @@ "message": "Apliecināšana ar savas apvienības Duo Security, izmantojot Duo Mobile lietotni, īsziņu, tālruņa zvanu vai U2F drošības atslēgu.", "description": "'Duo Security' and 'Duo Mobile' are product names and should not be translated." }, - "verifyIdentity": { + "verifyYourIdentity": { "message": "Apliecināt savu identitāti" }, "weDontRecognizeThisDevice": { @@ -918,6 +945,9 @@ "twoStepOptions": { "message": "Divpakāpju pieteikšanās iespējas" }, + "selectTwoStepLoginMethod": { + "message": "Atlasīt divpakāpju pieteikšanās veidu" + }, "selfHostedEnvironment": { "message": "Pašuzturēta vide" }, @@ -2247,6 +2277,12 @@ "webAuthnAuthenticate": { "message": "Autentificēt WebAuthn" }, + "readSecurityKey": { + "message": "Nolasīt drošības atslēgu" + }, + "awaitingSecurityKeyInteraction": { + "message": "Gaida mijiedarbību ar drošības atslēgu..." + }, "hideEmail": { "message": "Slēpt e-pasta adresi no saņēmējiem." }, @@ -3206,6 +3242,12 @@ "duoRequiredByOrgForAccount": { "message": "Kontam ir nepieciešama Duo divpakāpju pieteikšanās." }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Ir nepieciešama Duo divpakāpju pieteikšanās, lai pieteiktos savā kontā. Jāseko zemāk esošajām norādēm, lai pabeigtu pieteikšanos." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Jāseko zemāk esošajām norādēm, lai pabeigtu pieteikšanos." + }, "launchDuo": { "message": "Palaist Duo pārlūkā" }, @@ -3463,9 +3505,27 @@ "sshkeyApprovalTitle": { "message": "Apstiprināt SSH atslēgas lietojumu" }, + "agentForwardingWarningTitle": { + "message": "Brīdinājums: aģenta pārsūtīšana" + }, + "agentForwardingWarningText": { + "message": "Šis pieprasījums nāk no attālas ierīces, kurā esi pieteicies" + }, "sshkeyApprovalMessageInfix": { "message": "pieprasa piekļuvi" }, + "sshkeyApprovalMessageSuffix": { + "message": ", lai varētu" + }, + "sshActionLogin": { + "message": "autentificēt serverī" + }, + "sshActionSign": { + "message": "parakstīt ziņojumu" + }, + "sshActionGitSign": { + "message": "parakstīt git iesūtījumu" + }, "unknownApplication": { "message": "Lietotne" }, @@ -3540,5 +3600,8 @@ }, "updateBrowserOrDisableFingerprintDialogMessage": { "message": "Izmantotais pārlūka paplašinājums ir novecojis. Lūgums atjaunināt to vai atspējot pārlūka sasaistīšanas pirkstu nospieduma pārbaudi darbvirsmas lietotnes iestatījumos." + }, + "changeAtRiskPassword": { + "message": "Mainīt riskam pakļautu paroli" } } diff --git a/apps/desktop/src/locales/me/messages.json b/apps/desktop/src/locales/me/messages.json index 590d5a1b8ab..39e951cf562 100644 --- a/apps/desktop/src/locales/me/messages.json +++ b/apps/desktop/src/locales/me/messages.json @@ -543,10 +543,6 @@ "message": "Include special characters", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "numWords": { "message": "Broj riječi" }, @@ -652,6 +648,15 @@ "logInToBitwarden": { "message": "Log in to Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "Enter the code sent to your email" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Enter the code from your authenticator app" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Press your YubiKey to authenticate" + }, "logInWithPasskey": { "message": "Log in with passkey" }, @@ -704,6 +709,15 @@ "masterPassHintLabel": { "message": "Master password hint" }, + "passwordStrengthScore": { + "message": "Password strength score $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "joinOrganization": { "message": "Join organization" }, @@ -816,6 +830,9 @@ "webauthnCancelOrTimeout": { "message": "The authentication was cancelled or took too long. Please try again." }, + "openInNewTab": { + "message": "Open in new tab" + }, "invalidVerificationCode": { "message": "Invalid verification code" }, @@ -846,12 +863,22 @@ "rememberMe": { "message": "Zapamti me" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Don't ask again on this device for 30 days" + }, "sendVerificationCodeEmailAgain": { "message": "Pošalji ponovo verifikacioni kod na email" }, "useAnotherTwoStepMethod": { "message": "Koristi drugi metod prijave u dva koraka" }, + "selectAnotherMethod": { + "message": "Select another method", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Use your recovery code" + }, "insertYubiKey": { "message": "Priključi svoj YubiKey u USB port na kompjuteru i onda takni njegovo dugme." }, @@ -885,7 +912,7 @@ "message": "Potvrdite sa Duo Security za svoju organizaciju pomoću aplikacije Duo Mobile, SMS-a, telefonskog poziva ili U2F sigurnosnog ključa.", "description": "'Duo Security' and 'Duo Mobile' are product names and should not be translated." }, - "verifyIdentity": { + "verifyYourIdentity": { "message": "Verify your Identity" }, "weDontRecognizeThisDevice": { @@ -918,6 +945,9 @@ "twoStepOptions": { "message": "Opcije prijave u dva koraka" }, + "selectTwoStepLoginMethod": { + "message": "Select two-step login method" + }, "selfHostedEnvironment": { "message": "Okruženje lokalne instalacije (SELF HOST)" }, @@ -2247,6 +2277,12 @@ "webAuthnAuthenticate": { "message": "Authenticate WebAuthn" }, + "readSecurityKey": { + "message": "Read security key" + }, + "awaitingSecurityKeyInteraction": { + "message": "Awaiting security key interaction..." + }, "hideEmail": { "message": "Hide my email address from recipients." }, @@ -3206,6 +3242,12 @@ "duoRequiredByOrgForAccount": { "message": "Duo two-step login is required for your account." }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Duo two-step login is required for your account. Follow the steps below to finish logging in." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Follow the steps below to finish logging in." + }, "launchDuo": { "message": "Launch Duo in Browser" }, @@ -3463,9 +3505,27 @@ "sshkeyApprovalTitle": { "message": "Confirm SSH key usage" }, + "agentForwardingWarningTitle": { + "message": "Warning: Agent Forwarding" + }, + "agentForwardingWarningText": { + "message": "This request comes from a remote device that you are logged into" + }, "sshkeyApprovalMessageInfix": { "message": "is requesting access to" }, + "sshkeyApprovalMessageSuffix": { + "message": "in order to" + }, + "sshActionLogin": { + "message": "authenticate to a server" + }, + "sshActionSign": { + "message": "sign a message" + }, + "sshActionGitSign": { + "message": "sign a git commit" + }, "unknownApplication": { "message": "An application" }, @@ -3540,5 +3600,8 @@ }, "updateBrowserOrDisableFingerprintDialogMessage": { "message": "The browser extension you are using is out of date. Please update it or disable browser integration fingerprint validation in the desktop app settings." + }, + "changeAtRiskPassword": { + "message": "Change at-risk password" } } diff --git a/apps/desktop/src/locales/ml/messages.json b/apps/desktop/src/locales/ml/messages.json index ef2c81ea238..8bb7d62505e 100644 --- a/apps/desktop/src/locales/ml/messages.json +++ b/apps/desktop/src/locales/ml/messages.json @@ -543,10 +543,6 @@ "message": "Include special characters", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "numWords": { "message": "വാക്കുകളുടെ എണ്ണം" }, @@ -652,6 +648,15 @@ "logInToBitwarden": { "message": "Log in to Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "Enter the code sent to your email" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Enter the code from your authenticator app" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Press your YubiKey to authenticate" + }, "logInWithPasskey": { "message": "Log in with passkey" }, @@ -704,6 +709,15 @@ "masterPassHintLabel": { "message": "Master password hint" }, + "passwordStrengthScore": { + "message": "Password strength score $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "joinOrganization": { "message": "Join organization" }, @@ -816,6 +830,9 @@ "webauthnCancelOrTimeout": { "message": "The authentication was cancelled or took too long. Please try again." }, + "openInNewTab": { + "message": "Open in new tab" + }, "invalidVerificationCode": { "message": "Invalid verification code" }, @@ -846,12 +863,22 @@ "rememberMe": { "message": "എന്നെ ഓർക്കണം" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Don't ask again on this device for 30 days" + }, "sendVerificationCodeEmailAgain": { "message": "സ്ഥിരീകരണ കോഡ് ഇമെയിൽ വഴി വീണ്ടും അയയ്ക്കുക" }, "useAnotherTwoStepMethod": { "message": "മറ്റൊരു രണ്ട് ഘട്ട പ്രവേശന രീതി ഉപയോഗിക്കുക" }, + "selectAnotherMethod": { + "message": "Select another method", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Use your recovery code" + }, "insertYubiKey": { "message": "നിങ്ങളുടെ കമ്പ്യൂട്ടറിന്റെ യു‌എസ്‌ബി പോർട്ടിലേക്ക് YubiKey ഇടുക, തുടർന്ന് അതിന്റെ ബട്ടൺ അമർത്തുക." }, @@ -885,7 +912,7 @@ "message": "Duo Mobile, SMS, ഫോൺ കോൾ അല്ലെങ്കിൽ U2F സുരക്ഷാ കീ ഉപയോഗിച്ച് നിങ്ങളുടെ ഓർഗനൈസേഷനെ Duo Security ഉപയോഗിച്ച് പരിശോധിക്കുക.", "description": "'Duo Security' and 'Duo Mobile' are product names and should not be translated." }, - "verifyIdentity": { + "verifyYourIdentity": { "message": "Verify your Identity" }, "weDontRecognizeThisDevice": { @@ -918,6 +945,9 @@ "twoStepOptions": { "message": "രണ്ട്-ഘട്ട പ്രവേശനം ഓപ്ഷനുകൾ" }, + "selectTwoStepLoginMethod": { + "message": "Select two-step login method" + }, "selfHostedEnvironment": { "message": "സ്വയം ഹോസ്റ്റുചെയ്‌ത എൻവിയോണ്മെന്റ്" }, @@ -2247,6 +2277,12 @@ "webAuthnAuthenticate": { "message": "Authenticate WebAuthn" }, + "readSecurityKey": { + "message": "Read security key" + }, + "awaitingSecurityKeyInteraction": { + "message": "Awaiting security key interaction..." + }, "hideEmail": { "message": "Hide my email address from recipients." }, @@ -3206,6 +3242,12 @@ "duoRequiredByOrgForAccount": { "message": "Duo two-step login is required for your account." }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Duo two-step login is required for your account. Follow the steps below to finish logging in." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Follow the steps below to finish logging in." + }, "launchDuo": { "message": "Launch Duo in Browser" }, @@ -3463,9 +3505,27 @@ "sshkeyApprovalTitle": { "message": "Confirm SSH key usage" }, + "agentForwardingWarningTitle": { + "message": "Warning: Agent Forwarding" + }, + "agentForwardingWarningText": { + "message": "This request comes from a remote device that you are logged into" + }, "sshkeyApprovalMessageInfix": { "message": "is requesting access to" }, + "sshkeyApprovalMessageSuffix": { + "message": "in order to" + }, + "sshActionLogin": { + "message": "authenticate to a server" + }, + "sshActionSign": { + "message": "sign a message" + }, + "sshActionGitSign": { + "message": "sign a git commit" + }, "unknownApplication": { "message": "An application" }, @@ -3540,5 +3600,8 @@ }, "updateBrowserOrDisableFingerprintDialogMessage": { "message": "The browser extension you are using is out of date. Please update it or disable browser integration fingerprint validation in the desktop app settings." + }, + "changeAtRiskPassword": { + "message": "Change at-risk password" } } diff --git a/apps/desktop/src/locales/mr/messages.json b/apps/desktop/src/locales/mr/messages.json index 1aa61a9b381..d7769ad902a 100644 --- a/apps/desktop/src/locales/mr/messages.json +++ b/apps/desktop/src/locales/mr/messages.json @@ -543,10 +543,6 @@ "message": "Include special characters", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "numWords": { "message": "Number of words" }, @@ -652,6 +648,15 @@ "logInToBitwarden": { "message": "Log in to Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "Enter the code sent to your email" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Enter the code from your authenticator app" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Press your YubiKey to authenticate" + }, "logInWithPasskey": { "message": "Log in with passkey" }, @@ -704,6 +709,15 @@ "masterPassHintLabel": { "message": "Master password hint" }, + "passwordStrengthScore": { + "message": "Password strength score $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "joinOrganization": { "message": "Join organization" }, @@ -816,6 +830,9 @@ "webauthnCancelOrTimeout": { "message": "The authentication was cancelled or took too long. Please try again." }, + "openInNewTab": { + "message": "Open in new tab" + }, "invalidVerificationCode": { "message": "Invalid verification code" }, @@ -846,12 +863,22 @@ "rememberMe": { "message": "Remember me" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Don't ask again on this device for 30 days" + }, "sendVerificationCodeEmailAgain": { "message": "Send verification code email again" }, "useAnotherTwoStepMethod": { "message": "Use another two-step login method" }, + "selectAnotherMethod": { + "message": "Select another method", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Use your recovery code" + }, "insertYubiKey": { "message": "Insert your YubiKey into your computer's USB port, then touch its button." }, @@ -885,7 +912,7 @@ "message": "Verify with Duo Security for your organization using the Duo Mobile app, SMS, phone call, or U2F security key.", "description": "'Duo Security' and 'Duo Mobile' are product names and should not be translated." }, - "verifyIdentity": { + "verifyYourIdentity": { "message": "Verify your Identity" }, "weDontRecognizeThisDevice": { @@ -918,6 +945,9 @@ "twoStepOptions": { "message": "Two-step login options" }, + "selectTwoStepLoginMethod": { + "message": "Select two-step login method" + }, "selfHostedEnvironment": { "message": "Self-hosted environment" }, @@ -2247,6 +2277,12 @@ "webAuthnAuthenticate": { "message": "Authenticate WebAuthn" }, + "readSecurityKey": { + "message": "Read security key" + }, + "awaitingSecurityKeyInteraction": { + "message": "Awaiting security key interaction..." + }, "hideEmail": { "message": "Hide my email address from recipients." }, @@ -3206,6 +3242,12 @@ "duoRequiredByOrgForAccount": { "message": "Duo two-step login is required for your account." }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Duo two-step login is required for your account. Follow the steps below to finish logging in." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Follow the steps below to finish logging in." + }, "launchDuo": { "message": "Launch Duo in Browser" }, @@ -3463,9 +3505,27 @@ "sshkeyApprovalTitle": { "message": "Confirm SSH key usage" }, + "agentForwardingWarningTitle": { + "message": "Warning: Agent Forwarding" + }, + "agentForwardingWarningText": { + "message": "This request comes from a remote device that you are logged into" + }, "sshkeyApprovalMessageInfix": { "message": "is requesting access to" }, + "sshkeyApprovalMessageSuffix": { + "message": "in order to" + }, + "sshActionLogin": { + "message": "authenticate to a server" + }, + "sshActionSign": { + "message": "sign a message" + }, + "sshActionGitSign": { + "message": "sign a git commit" + }, "unknownApplication": { "message": "An application" }, @@ -3540,5 +3600,8 @@ }, "updateBrowserOrDisableFingerprintDialogMessage": { "message": "The browser extension you are using is out of date. Please update it or disable browser integration fingerprint validation in the desktop app settings." + }, + "changeAtRiskPassword": { + "message": "Change at-risk password" } } diff --git a/apps/desktop/src/locales/my/messages.json b/apps/desktop/src/locales/my/messages.json index a86ab9e5009..9e699a4f3f4 100644 --- a/apps/desktop/src/locales/my/messages.json +++ b/apps/desktop/src/locales/my/messages.json @@ -543,10 +543,6 @@ "message": "Include special characters", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "numWords": { "message": "Number of words" }, @@ -652,6 +648,15 @@ "logInToBitwarden": { "message": "Log in to Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "Enter the code sent to your email" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Enter the code from your authenticator app" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Press your YubiKey to authenticate" + }, "logInWithPasskey": { "message": "Log in with passkey" }, @@ -704,6 +709,15 @@ "masterPassHintLabel": { "message": "Master password hint" }, + "passwordStrengthScore": { + "message": "Password strength score $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "joinOrganization": { "message": "Join organization" }, @@ -816,6 +830,9 @@ "webauthnCancelOrTimeout": { "message": "The authentication was cancelled or took too long. Please try again." }, + "openInNewTab": { + "message": "Open in new tab" + }, "invalidVerificationCode": { "message": "Invalid verification code" }, @@ -846,12 +863,22 @@ "rememberMe": { "message": "Remember me" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Don't ask again on this device for 30 days" + }, "sendVerificationCodeEmailAgain": { "message": "Send verification code email again" }, "useAnotherTwoStepMethod": { "message": "Use another two-step login method" }, + "selectAnotherMethod": { + "message": "Select another method", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Use your recovery code" + }, "insertYubiKey": { "message": "Insert your YubiKey into your computer's USB port, then touch its button." }, @@ -885,7 +912,7 @@ "message": "Verify with Duo Security for your organization using the Duo Mobile app, SMS, phone call, or U2F security key.", "description": "'Duo Security' and 'Duo Mobile' are product names and should not be translated." }, - "verifyIdentity": { + "verifyYourIdentity": { "message": "Verify your Identity" }, "weDontRecognizeThisDevice": { @@ -918,6 +945,9 @@ "twoStepOptions": { "message": "Two-step login options" }, + "selectTwoStepLoginMethod": { + "message": "Select two-step login method" + }, "selfHostedEnvironment": { "message": "Self-hosted environment" }, @@ -2247,6 +2277,12 @@ "webAuthnAuthenticate": { "message": "Authenticate WebAuthn" }, + "readSecurityKey": { + "message": "Read security key" + }, + "awaitingSecurityKeyInteraction": { + "message": "Awaiting security key interaction..." + }, "hideEmail": { "message": "Hide my email address from recipients." }, @@ -3206,6 +3242,12 @@ "duoRequiredByOrgForAccount": { "message": "Duo two-step login is required for your account." }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Duo two-step login is required for your account. Follow the steps below to finish logging in." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Follow the steps below to finish logging in." + }, "launchDuo": { "message": "Launch Duo in Browser" }, @@ -3463,9 +3505,27 @@ "sshkeyApprovalTitle": { "message": "Confirm SSH key usage" }, + "agentForwardingWarningTitle": { + "message": "Warning: Agent Forwarding" + }, + "agentForwardingWarningText": { + "message": "This request comes from a remote device that you are logged into" + }, "sshkeyApprovalMessageInfix": { "message": "is requesting access to" }, + "sshkeyApprovalMessageSuffix": { + "message": "in order to" + }, + "sshActionLogin": { + "message": "authenticate to a server" + }, + "sshActionSign": { + "message": "sign a message" + }, + "sshActionGitSign": { + "message": "sign a git commit" + }, "unknownApplication": { "message": "An application" }, @@ -3540,5 +3600,8 @@ }, "updateBrowserOrDisableFingerprintDialogMessage": { "message": "The browser extension you are using is out of date. Please update it or disable browser integration fingerprint validation in the desktop app settings." + }, + "changeAtRiskPassword": { + "message": "Change at-risk password" } } diff --git a/apps/desktop/src/locales/nb/messages.json b/apps/desktop/src/locales/nb/messages.json index c4ab8794dcf..25c95179e3d 100644 --- a/apps/desktop/src/locales/nb/messages.json +++ b/apps/desktop/src/locales/nb/messages.json @@ -543,10 +543,6 @@ "message": "Inkluder spesialtegn", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "numWords": { "message": "Antall ord" }, @@ -652,6 +648,15 @@ "logInToBitwarden": { "message": "Logg inn på Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "Enter the code sent to your email" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Enter the code from your authenticator app" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Press your YubiKey to authenticate" + }, "logInWithPasskey": { "message": "Logg inn med passnøkkel" }, @@ -704,6 +709,15 @@ "masterPassHintLabel": { "message": "Hint til hovedpassord" }, + "passwordStrengthScore": { + "message": "Password strength score $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "joinOrganization": { "message": "Bli med i organisasjon" }, @@ -816,6 +830,9 @@ "webauthnCancelOrTimeout": { "message": "Autentiseringen ble avbrutt eller tok for lang tid. Prøv igjen." }, + "openInNewTab": { + "message": "Open in new tab" + }, "invalidVerificationCode": { "message": "Ugyldig verifiseringskode" }, @@ -846,12 +863,22 @@ "rememberMe": { "message": "Husk på meg" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Don't ask again on this device for 30 days" + }, "sendVerificationCodeEmailAgain": { "message": "Send E-posten med verifiseringskoden på nytt" }, "useAnotherTwoStepMethod": { "message": "Bruk en annen 2-trinnsinnloggingsmetode" }, + "selectAnotherMethod": { + "message": "Select another method", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Use your recovery code" + }, "insertYubiKey": { "message": "Sett inn din YubiKey i din datamaskins USB-uttak, og så trykk på dens knapp." }, @@ -885,7 +912,7 @@ "message": "Verifiser med Duo Security for din organisasjon gjennom Duo Mobile-appen, SMS, telefonsamtale, eller en U2F-sikkerhetsnøkkel.", "description": "'Duo Security' and 'Duo Mobile' are product names and should not be translated." }, - "verifyIdentity": { + "verifyYourIdentity": { "message": "Verify your Identity" }, "weDontRecognizeThisDevice": { @@ -918,6 +945,9 @@ "twoStepOptions": { "message": "Totrinns innloggingsalternativer" }, + "selectTwoStepLoginMethod": { + "message": "Select two-step login method" + }, "selfHostedEnvironment": { "message": "Selvbetjent miljø" }, @@ -2247,6 +2277,12 @@ "webAuthnAuthenticate": { "message": "Autentiser WebAuthn" }, + "readSecurityKey": { + "message": "Read security key" + }, + "awaitingSecurityKeyInteraction": { + "message": "Awaiting security key interaction..." + }, "hideEmail": { "message": "Skjul min e-postadresse fra mottakere." }, @@ -3206,6 +3242,12 @@ "duoRequiredByOrgForAccount": { "message": "Duo two-step login is required for your account." }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Duo two-step login is required for your account. Follow the steps below to finish logging in." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Follow the steps below to finish logging in." + }, "launchDuo": { "message": "Launch Duo in Browser" }, @@ -3463,9 +3505,27 @@ "sshkeyApprovalTitle": { "message": "Confirm SSH key usage" }, + "agentForwardingWarningTitle": { + "message": "Warning: Agent Forwarding" + }, + "agentForwardingWarningText": { + "message": "This request comes from a remote device that you are logged into" + }, "sshkeyApprovalMessageInfix": { "message": "is requesting access to" }, + "sshkeyApprovalMessageSuffix": { + "message": "in order to" + }, + "sshActionLogin": { + "message": "authenticate to a server" + }, + "sshActionSign": { + "message": "sign a message" + }, + "sshActionGitSign": { + "message": "sign a git commit" + }, "unknownApplication": { "message": "Et program" }, @@ -3540,5 +3600,8 @@ }, "updateBrowserOrDisableFingerprintDialogMessage": { "message": "The browser extension you are using is out of date. Please update it or disable browser integration fingerprint validation in the desktop app settings." + }, + "changeAtRiskPassword": { + "message": "Change at-risk password" } } diff --git a/apps/desktop/src/locales/ne/messages.json b/apps/desktop/src/locales/ne/messages.json index 90e4967f7a3..4a68ba4dbcc 100644 --- a/apps/desktop/src/locales/ne/messages.json +++ b/apps/desktop/src/locales/ne/messages.json @@ -543,10 +543,6 @@ "message": "Include special characters", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "numWords": { "message": "शब्द संख्या" }, @@ -652,6 +648,15 @@ "logInToBitwarden": { "message": "Log in to Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "Enter the code sent to your email" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Enter the code from your authenticator app" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Press your YubiKey to authenticate" + }, "logInWithPasskey": { "message": "Log in with passkey" }, @@ -704,6 +709,15 @@ "masterPassHintLabel": { "message": "Master password hint" }, + "passwordStrengthScore": { + "message": "Password strength score $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "joinOrganization": { "message": "Join organization" }, @@ -816,6 +830,9 @@ "webauthnCancelOrTimeout": { "message": "The authentication was cancelled or took too long. Please try again." }, + "openInNewTab": { + "message": "Open in new tab" + }, "invalidVerificationCode": { "message": "Invalid verification code" }, @@ -846,12 +863,22 @@ "rememberMe": { "message": "Remember me" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Don't ask again on this device for 30 days" + }, "sendVerificationCodeEmailAgain": { "message": "Send verification code email again" }, "useAnotherTwoStepMethod": { "message": "Use another two-step login method" }, + "selectAnotherMethod": { + "message": "Select another method", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Use your recovery code" + }, "insertYubiKey": { "message": "Insert your YubiKey into your computer's USB port, then touch its button." }, @@ -885,7 +912,7 @@ "message": "Verify with Duo Security for your organization using the Duo Mobile app, SMS, phone call, or U2F security key.", "description": "'Duo Security' and 'Duo Mobile' are product names and should not be translated." }, - "verifyIdentity": { + "verifyYourIdentity": { "message": "Verify your Identity" }, "weDontRecognizeThisDevice": { @@ -918,6 +945,9 @@ "twoStepOptions": { "message": "Two-step login options" }, + "selectTwoStepLoginMethod": { + "message": "Select two-step login method" + }, "selfHostedEnvironment": { "message": "Self-hosted environment" }, @@ -2247,6 +2277,12 @@ "webAuthnAuthenticate": { "message": "Authenticate WebAuthn" }, + "readSecurityKey": { + "message": "Read security key" + }, + "awaitingSecurityKeyInteraction": { + "message": "Awaiting security key interaction..." + }, "hideEmail": { "message": "Hide my email address from recipients." }, @@ -3206,6 +3242,12 @@ "duoRequiredByOrgForAccount": { "message": "Duo two-step login is required for your account." }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Duo two-step login is required for your account. Follow the steps below to finish logging in." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Follow the steps below to finish logging in." + }, "launchDuo": { "message": "Launch Duo in Browser" }, @@ -3463,9 +3505,27 @@ "sshkeyApprovalTitle": { "message": "Confirm SSH key usage" }, + "agentForwardingWarningTitle": { + "message": "Warning: Agent Forwarding" + }, + "agentForwardingWarningText": { + "message": "This request comes from a remote device that you are logged into" + }, "sshkeyApprovalMessageInfix": { "message": "is requesting access to" }, + "sshkeyApprovalMessageSuffix": { + "message": "in order to" + }, + "sshActionLogin": { + "message": "authenticate to a server" + }, + "sshActionSign": { + "message": "sign a message" + }, + "sshActionGitSign": { + "message": "sign a git commit" + }, "unknownApplication": { "message": "An application" }, @@ -3540,5 +3600,8 @@ }, "updateBrowserOrDisableFingerprintDialogMessage": { "message": "The browser extension you are using is out of date. Please update it or disable browser integration fingerprint validation in the desktop app settings." + }, + "changeAtRiskPassword": { + "message": "Change at-risk password" } } diff --git a/apps/desktop/src/locales/nl/messages.json b/apps/desktop/src/locales/nl/messages.json index 5093a5d0d8b..a8e15f8693a 100644 --- a/apps/desktop/src/locales/nl/messages.json +++ b/apps/desktop/src/locales/nl/messages.json @@ -543,10 +543,6 @@ "message": "Speciale tekens toevoegen", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "numWords": { "message": "Aantal woorden" }, @@ -652,6 +648,15 @@ "logInToBitwarden": { "message": "Inloggen op Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "Voer de code in die naar je e-mailadres is verstuurd" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Voer de code uit je authenticatie-app in" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Druk op je YubiKey om te verifiëren" + }, "logInWithPasskey": { "message": "Inloggen met passkey" }, @@ -704,6 +709,15 @@ "masterPassHintLabel": { "message": "Hoofdwachtwoordhint" }, + "passwordStrengthScore": { + "message": "Score wachtwoordsterkte $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "joinOrganization": { "message": "Join organisatie" }, @@ -816,6 +830,9 @@ "webauthnCancelOrTimeout": { "message": "De authenticatie werd geannuleerd of duurde te lang. Probeer het opnieuw." }, + "openInNewTab": { + "message": "Openen in nieuwe tab" + }, "invalidVerificationCode": { "message": "Ongeldige verificatiecode" }, @@ -846,12 +863,22 @@ "rememberMe": { "message": "Mijn gegevens onthouden" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "30 dagen niet meer vragen op dit apparaat" + }, "sendVerificationCodeEmailAgain": { "message": "E-mail met verificatiecode opnieuw versturen" }, "useAnotherTwoStepMethod": { "message": "Gebruik een andere methode voor tweestapsaanmelding" }, + "selectAnotherMethod": { + "message": "Kies een andere methode", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Gebruik je herstelcode" + }, "insertYubiKey": { "message": "Plaats je YubiKey in de USB-poort van je computer en druk op de knop." }, @@ -885,7 +912,7 @@ "message": "Verificatie met Duo Security middels de Duo Mobile-app, sms, spraakoproep of een U2F-beveiligingssleutel.", "description": "'Duo Security' and 'Duo Mobile' are product names and should not be translated." }, - "verifyIdentity": { + "verifyYourIdentity": { "message": "Verifieer je identiteit" }, "weDontRecognizeThisDevice": { @@ -918,6 +945,9 @@ "twoStepOptions": { "message": "Opties voor tweestapsaanmelding" }, + "selectTwoStepLoginMethod": { + "message": "Kies methode voor tweestapsaanmelding" + }, "selfHostedEnvironment": { "message": "Zelfgehoste omgeving" }, @@ -2247,6 +2277,12 @@ "webAuthnAuthenticate": { "message": "Verifieer WebAuthn" }, + "readSecurityKey": { + "message": "Beveiligingssleutel lezen" + }, + "awaitingSecurityKeyInteraction": { + "message": "Wacht op interactie met beveiligingssleutel..." + }, "hideEmail": { "message": "Verberg mijn e-mailadres voor ontvangers." }, @@ -3206,6 +3242,12 @@ "duoRequiredByOrgForAccount": { "message": "Jouw account vereist Duo-tweestapsaanmelding." }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Jouw account vereist Duo-tweestapsaanmelding. Volg de onderstaande stappen om het inloggen te voltooien." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Volg de onderstaande stappen om in te loggen." + }, "launchDuo": { "message": "Start Duo in browser" }, @@ -3463,9 +3505,27 @@ "sshkeyApprovalTitle": { "message": "Gebruik SSH-sleutel bevestigen" }, + "agentForwardingWarningTitle": { + "message": "Waarschuwing: Agent doorsturen" + }, + "agentForwardingWarningText": { + "message": "Dit verzoek komt van een extern apparaat waarop je bent ingelogd" + }, "sshkeyApprovalMessageInfix": { "message": "vraagt toegang tot" }, + "sshkeyApprovalMessageSuffix": { + "message": "om te" + }, + "sshActionLogin": { + "message": "autenticeer naar een server" + }, + "sshActionSign": { + "message": "een bericht te ondertekenen" + }, + "sshActionGitSign": { + "message": "een git-commit te ondertekenen" + }, "unknownApplication": { "message": "Een applicatie" }, @@ -3540,5 +3600,8 @@ }, "updateBrowserOrDisableFingerprintDialogMessage": { "message": "De browserextensie die je gebruikt is verouderd. Werk deze bij of schakel de browserintegratie vingerafdrukvalidatie uit in de desktop-app-instellingen." + }, + "changeAtRiskPassword": { + "message": "Risicovol wachtwoord wijzigen" } } diff --git a/apps/desktop/src/locales/nn/messages.json b/apps/desktop/src/locales/nn/messages.json index ac06feb9a12..b8acae9bee8 100644 --- a/apps/desktop/src/locales/nn/messages.json +++ b/apps/desktop/src/locales/nn/messages.json @@ -543,10 +543,6 @@ "message": "Include special characters", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "numWords": { "message": "Antall ord" }, @@ -652,6 +648,15 @@ "logInToBitwarden": { "message": "Log in to Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "Enter the code sent to your email" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Enter the code from your authenticator app" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Press your YubiKey to authenticate" + }, "logInWithPasskey": { "message": "Log in with passkey" }, @@ -704,6 +709,15 @@ "masterPassHintLabel": { "message": "Master password hint" }, + "passwordStrengthScore": { + "message": "Password strength score $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "joinOrganization": { "message": "Join organization" }, @@ -816,6 +830,9 @@ "webauthnCancelOrTimeout": { "message": "The authentication was cancelled or took too long. Please try again." }, + "openInNewTab": { + "message": "Open in new tab" + }, "invalidVerificationCode": { "message": "Ugyldig stadfestingskode" }, @@ -846,12 +863,22 @@ "rememberMe": { "message": "Husk meg" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Don't ask again on this device for 30 days" + }, "sendVerificationCodeEmailAgain": { "message": "Send e-post om stadfestingskode på nytt" }, "useAnotherTwoStepMethod": { "message": "Use another two-step login method" }, + "selectAnotherMethod": { + "message": "Select another method", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Use your recovery code" + }, "insertYubiKey": { "message": "Insert your YubiKey into your computer's USB port, then touch its button." }, @@ -885,7 +912,7 @@ "message": "Verify with Duo Security for your organization using the Duo Mobile app, SMS, phone call, or U2F security key.", "description": "'Duo Security' and 'Duo Mobile' are product names and should not be translated." }, - "verifyIdentity": { + "verifyYourIdentity": { "message": "Verify your Identity" }, "weDontRecognizeThisDevice": { @@ -918,6 +945,9 @@ "twoStepOptions": { "message": "Two-step login options" }, + "selectTwoStepLoginMethod": { + "message": "Select two-step login method" + }, "selfHostedEnvironment": { "message": "Self-hosted environment" }, @@ -2247,6 +2277,12 @@ "webAuthnAuthenticate": { "message": "Authenticate WebAuthn" }, + "readSecurityKey": { + "message": "Read security key" + }, + "awaitingSecurityKeyInteraction": { + "message": "Awaiting security key interaction..." + }, "hideEmail": { "message": "Hide my email address from recipients." }, @@ -3206,6 +3242,12 @@ "duoRequiredByOrgForAccount": { "message": "Duo two-step login is required for your account." }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Duo two-step login is required for your account. Follow the steps below to finish logging in." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Follow the steps below to finish logging in." + }, "launchDuo": { "message": "Launch Duo in Browser" }, @@ -3463,9 +3505,27 @@ "sshkeyApprovalTitle": { "message": "Confirm SSH key usage" }, + "agentForwardingWarningTitle": { + "message": "Warning: Agent Forwarding" + }, + "agentForwardingWarningText": { + "message": "This request comes from a remote device that you are logged into" + }, "sshkeyApprovalMessageInfix": { "message": "is requesting access to" }, + "sshkeyApprovalMessageSuffix": { + "message": "in order to" + }, + "sshActionLogin": { + "message": "authenticate to a server" + }, + "sshActionSign": { + "message": "sign a message" + }, + "sshActionGitSign": { + "message": "sign a git commit" + }, "unknownApplication": { "message": "An application" }, @@ -3540,5 +3600,8 @@ }, "updateBrowserOrDisableFingerprintDialogMessage": { "message": "The browser extension you are using is out of date. Please update it or disable browser integration fingerprint validation in the desktop app settings." + }, + "changeAtRiskPassword": { + "message": "Change at-risk password" } } diff --git a/apps/desktop/src/locales/or/messages.json b/apps/desktop/src/locales/or/messages.json index c18b4939e19..53c2971b389 100644 --- a/apps/desktop/src/locales/or/messages.json +++ b/apps/desktop/src/locales/or/messages.json @@ -543,10 +543,6 @@ "message": "Include special characters", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "numWords": { "message": "Number of words" }, @@ -652,6 +648,15 @@ "logInToBitwarden": { "message": "Log in to Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "Enter the code sent to your email" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Enter the code from your authenticator app" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Press your YubiKey to authenticate" + }, "logInWithPasskey": { "message": "Log in with passkey" }, @@ -704,6 +709,15 @@ "masterPassHintLabel": { "message": "Master password hint" }, + "passwordStrengthScore": { + "message": "Password strength score $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "joinOrganization": { "message": "Join organization" }, @@ -816,6 +830,9 @@ "webauthnCancelOrTimeout": { "message": "The authentication was cancelled or took too long. Please try again." }, + "openInNewTab": { + "message": "Open in new tab" + }, "invalidVerificationCode": { "message": "Invalid verification code" }, @@ -846,12 +863,22 @@ "rememberMe": { "message": "Remember me" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Don't ask again on this device for 30 days" + }, "sendVerificationCodeEmailAgain": { "message": "Send verification code email again" }, "useAnotherTwoStepMethod": { "message": "Use another two-step login method" }, + "selectAnotherMethod": { + "message": "Select another method", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Use your recovery code" + }, "insertYubiKey": { "message": "Insert your YubiKey into your computer's USB port, then touch its button." }, @@ -885,7 +912,7 @@ "message": "Verify with Duo Security for your organization using the Duo Mobile app, SMS, phone call, or U2F security key.", "description": "'Duo Security' and 'Duo Mobile' are product names and should not be translated." }, - "verifyIdentity": { + "verifyYourIdentity": { "message": "Verify your Identity" }, "weDontRecognizeThisDevice": { @@ -918,6 +945,9 @@ "twoStepOptions": { "message": "Two-step login options" }, + "selectTwoStepLoginMethod": { + "message": "Select two-step login method" + }, "selfHostedEnvironment": { "message": "Self-hosted environment" }, @@ -2247,6 +2277,12 @@ "webAuthnAuthenticate": { "message": "Authenticate WebAuthn" }, + "readSecurityKey": { + "message": "Read security key" + }, + "awaitingSecurityKeyInteraction": { + "message": "Awaiting security key interaction..." + }, "hideEmail": { "message": "Hide my email address from recipients." }, @@ -3206,6 +3242,12 @@ "duoRequiredByOrgForAccount": { "message": "Duo two-step login is required for your account." }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Duo two-step login is required for your account. Follow the steps below to finish logging in." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Follow the steps below to finish logging in." + }, "launchDuo": { "message": "Launch Duo in Browser" }, @@ -3463,9 +3505,27 @@ "sshkeyApprovalTitle": { "message": "Confirm SSH key usage" }, + "agentForwardingWarningTitle": { + "message": "Warning: Agent Forwarding" + }, + "agentForwardingWarningText": { + "message": "This request comes from a remote device that you are logged into" + }, "sshkeyApprovalMessageInfix": { "message": "is requesting access to" }, + "sshkeyApprovalMessageSuffix": { + "message": "in order to" + }, + "sshActionLogin": { + "message": "authenticate to a server" + }, + "sshActionSign": { + "message": "sign a message" + }, + "sshActionGitSign": { + "message": "sign a git commit" + }, "unknownApplication": { "message": "An application" }, @@ -3540,5 +3600,8 @@ }, "updateBrowserOrDisableFingerprintDialogMessage": { "message": "The browser extension you are using is out of date. Please update it or disable browser integration fingerprint validation in the desktop app settings." + }, + "changeAtRiskPassword": { + "message": "Change at-risk password" } } diff --git a/apps/desktop/src/locales/pl/messages.json b/apps/desktop/src/locales/pl/messages.json index 417592e6f88..c3d81e23cf5 100644 --- a/apps/desktop/src/locales/pl/messages.json +++ b/apps/desktop/src/locales/pl/messages.json @@ -543,10 +543,6 @@ "message": "Uwzględnij znaki specjalne", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "numWords": { "message": "Liczba słów" }, @@ -652,6 +648,15 @@ "logInToBitwarden": { "message": "Zaloguj do Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "Wpisz kod wysłany na Twój adres e-mail" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Wpisz kod z aplikacji uwierzytelniającej" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Naciśnij YubiKey aby uwierzytelnić" + }, "logInWithPasskey": { "message": "Zaloguj się używając klucza dostępu" }, @@ -704,6 +709,15 @@ "masterPassHintLabel": { "message": "Podpowiedź do hasła głównego" }, + "passwordStrengthScore": { + "message": "Siła hasła: $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "joinOrganization": { "message": "Dołącz do organizacji" }, @@ -816,6 +830,9 @@ "webauthnCancelOrTimeout": { "message": "Uwierzytelnianie zostało anulowane lub trwało zbyt długo. Spróbuj ponownie." }, + "openInNewTab": { + "message": "Otwórz w nowej karcie" + }, "invalidVerificationCode": { "message": "Kod weryfikacyjny jest nieprawidłowy" }, @@ -846,12 +863,22 @@ "rememberMe": { "message": "Zapamiętaj mnie" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Nie pytaj ponownie na tym urządzeniu przez 30 dni" + }, "sendVerificationCodeEmailAgain": { "message": "Wyślij ponownie wiadomość z kodem weryfikacyjnym" }, "useAnotherTwoStepMethod": { "message": "Użyj innej metody logowania dwustopniowego" }, + "selectAnotherMethod": { + "message": "Wybierz inną metodę", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Użyj kodu odzyskiwania" + }, "insertYubiKey": { "message": "Włóż klucz YubiKey do portu USB komputera, a następnie dotknij jego przycisku." }, @@ -885,8 +912,8 @@ "message": "Weryfikacja dostępu do Twojej organizacji z użyciem Duo Security poprzez aplikację Duo Mobile, SMS, połączenie telefoniczne lub klucz bezpieczeństwa U2F.", "description": "'Duo Security' and 'Duo Mobile' are product names and should not be translated." }, - "verifyIdentity": { - "message": "Zweryfikuj swoją tożsamość" + "verifyYourIdentity": { + "message": "Verify your Identity" }, "weDontRecognizeThisDevice": { "message": "Nie rozpoznajemy tego urządzenia. Wpisz kod wysłany na Twój e-mail, aby zweryfikować tożsamość." @@ -918,6 +945,9 @@ "twoStepOptions": { "message": "Opcje logowania dwustopniowego" }, + "selectTwoStepLoginMethod": { + "message": "Wybierz metodę logowania dwustopniowego" + }, "selfHostedEnvironment": { "message": "Samodzielnie hostowane środowisko" }, @@ -1776,7 +1806,7 @@ "message": "Wymagaj hasła lub PIN przy starcie aplikacji" }, "requirePasswordWithoutPinOnStart": { - "message": "Require password on app start" + "message": "Wymagaj hasła przy starcie aplikacji" }, "recommendedForSecurity": { "message": "Zalecane dla bezpieczeństwa." @@ -2247,6 +2277,12 @@ "webAuthnAuthenticate": { "message": "Uwierzytelnianie WebAuthn" }, + "readSecurityKey": { + "message": "Odczytaj klucz bezpieczeństwa" + }, + "awaitingSecurityKeyInteraction": { + "message": "Oczekiwanie na interakcję z kluczem bezpieczeństwa..." + }, "hideEmail": { "message": "Ukryj mój adres e-mail przed odbiorcami." }, @@ -2644,7 +2680,7 @@ } }, "forwaderInvalidOperation": { - "message": "$SERVICENAME$ refused your request. Please contact your service provider for assistance.", + "message": "$SERVICENAME$ odrzucił Twoje żądanie. Skontaktuj się z dostawcą usług w celu uzyskania pomocy.", "description": "Displayed when the user is forbidden from using the API by the forwarding service.", "placeholders": { "servicename": { @@ -2654,7 +2690,7 @@ } }, "forwaderInvalidOperationWithMessage": { - "message": "$SERVICENAME$ refused your request: $ERRORMESSAGE$", + "message": "$SERVICENAME$ odrzucił Twoje żądanie: $ERRORMESSAGE$", "description": "Displayed when the user is forbidden from using the API by the forwarding service with an error message.", "placeholders": { "servicename": { @@ -3206,6 +3242,12 @@ "duoRequiredByOrgForAccount": { "message": "Dwustopniowe logowanie Duo jest wymagane dla Twojego konta." }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Logowanie dwustopniowe Duo jest wymagane dla twojego konta. Wykonaj poniższe kroki, by dokończyć logowanie" + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Wykonaj poniższe kroki, by dokończyć logowanie" + }, "launchDuo": { "message": "Uruchom Duo w przeglądarce" }, @@ -3463,9 +3505,27 @@ "sshkeyApprovalTitle": { "message": "Potwierdź użycie klucza SSH" }, + "agentForwardingWarningTitle": { + "message": "Warning: Agent Forwarding" + }, + "agentForwardingWarningText": { + "message": "This request comes from a remote device that you are logged into" + }, "sshkeyApprovalMessageInfix": { "message": "wnioskuje o dostęp do" }, + "sshkeyApprovalMessageSuffix": { + "message": "in order to" + }, + "sshActionLogin": { + "message": "authenticate to a server" + }, + "sshActionSign": { + "message": "sign a message" + }, + "sshActionGitSign": { + "message": "sign a git commit" + }, "unknownApplication": { "message": "Aplikacja" }, @@ -3540,5 +3600,8 @@ }, "updateBrowserOrDisableFingerprintDialogMessage": { "message": "Rozszerzenie przeglądarki, którego używasz, jest nieaktualne. Zaktualizuj je lub wyłącz weryfikację odcisku palca integracji przeglądarki w ustawieniach aplikacji desktopowej." + }, + "changeAtRiskPassword": { + "message": "Change at-risk password" } } diff --git a/apps/desktop/src/locales/pt_BR/messages.json b/apps/desktop/src/locales/pt_BR/messages.json index 693970ff708..20bf5e2e9ff 100644 --- a/apps/desktop/src/locales/pt_BR/messages.json +++ b/apps/desktop/src/locales/pt_BR/messages.json @@ -543,10 +543,6 @@ "message": "Incluir caracteres especiais", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "numWords": { "message": "Número de palavras" }, @@ -652,6 +648,15 @@ "logInToBitwarden": { "message": "Inicie a sessão no Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "Enter the code sent to your email" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Enter the code from your authenticator app" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Press your YubiKey to authenticate" + }, "logInWithPasskey": { "message": "Iniciar sessão com a chave de acesso" }, @@ -704,6 +709,15 @@ "masterPassHintLabel": { "message": "Dica da senha mestra" }, + "passwordStrengthScore": { + "message": "Password strength score $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "joinOrganization": { "message": "Juntar-se à organização" }, @@ -816,6 +830,9 @@ "webauthnCancelOrTimeout": { "message": "A autenticação foi cancelada ou demorou muito. Por favor tente novamente." }, + "openInNewTab": { + "message": "Open in new tab" + }, "invalidVerificationCode": { "message": "Código de verificação inválido" }, @@ -846,12 +863,22 @@ "rememberMe": { "message": "Lembrar de mim" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Don't ask again on this device for 30 days" + }, "sendVerificationCodeEmailAgain": { "message": "Enviar código de verificação para o e-mail novamente" }, "useAnotherTwoStepMethod": { "message": "Utilizar outro método de verificação em duas etapas" }, + "selectAnotherMethod": { + "message": "Select another method", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Use your recovery code" + }, "insertYubiKey": { "message": "Introduza a sua YubiKey na porta USB do seu computador, e depois toque no botão da mesma." }, @@ -885,7 +912,7 @@ "message": "Verifique com o Duo Security utilizando o aplicativo Duo Mobile, SMS, chamada telefônica, ou chave de segurança U2F.", "description": "'Duo Security' and 'Duo Mobile' are product names and should not be translated." }, - "verifyIdentity": { + "verifyYourIdentity": { "message": "Verify your Identity" }, "weDontRecognizeThisDevice": { @@ -918,6 +945,9 @@ "twoStepOptions": { "message": "Opções de Login em Duas Etapas" }, + "selectTwoStepLoginMethod": { + "message": "Select two-step login method" + }, "selfHostedEnvironment": { "message": "Ambiente auto-hospedado" }, @@ -2247,6 +2277,12 @@ "webAuthnAuthenticate": { "message": "Autenticar WebAuthn" }, + "readSecurityKey": { + "message": "Read security key" + }, + "awaitingSecurityKeyInteraction": { + "message": "Awaiting security key interaction..." + }, "hideEmail": { "message": "Ocultar meu endereço de e-mail dos destinatários." }, @@ -3206,6 +3242,12 @@ "duoRequiredByOrgForAccount": { "message": "A autenticação em duas etapas do Duo é necessária para sua conta." }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Duo two-step login is required for your account. Follow the steps below to finish logging in." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Follow the steps below to finish logging in." + }, "launchDuo": { "message": "Iniciar o Duo no navegador" }, @@ -3463,9 +3505,27 @@ "sshkeyApprovalTitle": { "message": "Confirmar uso da chave SSH" }, + "agentForwardingWarningTitle": { + "message": "Warning: Agent Forwarding" + }, + "agentForwardingWarningText": { + "message": "This request comes from a remote device that you are logged into" + }, "sshkeyApprovalMessageInfix": { "message": "está solicitando acesso para" }, + "sshkeyApprovalMessageSuffix": { + "message": "in order to" + }, + "sshActionLogin": { + "message": "authenticate to a server" + }, + "sshActionSign": { + "message": "sign a message" + }, + "sshActionGitSign": { + "message": "sign a git commit" + }, "unknownApplication": { "message": "Uma aplicação" }, @@ -3540,5 +3600,8 @@ }, "updateBrowserOrDisableFingerprintDialogMessage": { "message": "The browser extension you are using is out of date. Please update it or disable browser integration fingerprint validation in the desktop app settings." + }, + "changeAtRiskPassword": { + "message": "Change at-risk password" } } diff --git a/apps/desktop/src/locales/pt_PT/messages.json b/apps/desktop/src/locales/pt_PT/messages.json index 914a1d8e78f..798598423db 100644 --- a/apps/desktop/src/locales/pt_PT/messages.json +++ b/apps/desktop/src/locales/pt_PT/messages.json @@ -543,10 +543,6 @@ "message": "Incluir carateres especiais", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "numWords": { "message": "Número de palavras" }, @@ -652,6 +648,15 @@ "logInToBitwarden": { "message": "Iniciar sessão no Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "Introduza o código enviado para o seu e-mail" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Introduza o código da sua app de autenticação" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Prima a sua YubiKey para se autenticar" + }, "logInWithPasskey": { "message": "Iniciar sessão com a chave de acesso" }, @@ -704,6 +709,15 @@ "masterPassHintLabel": { "message": "Dica da palavra-passe mestra" }, + "passwordStrengthScore": { + "message": "Pontuação da força da palavra-passe: $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "joinOrganization": { "message": "Aderir à organização" }, @@ -816,6 +830,9 @@ "webauthnCancelOrTimeout": { "message": "A autenticação foi cancelada ou demorou demasiado tempo. Por favor, tente novamente." }, + "openInNewTab": { + "message": "Abrir num novo separador" + }, "invalidVerificationCode": { "message": "Código de verificação inválido" }, @@ -846,12 +863,22 @@ "rememberMe": { "message": "Memorizar" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Não voltar a perguntar neste dispositivo durante 30 dias" + }, "sendVerificationCodeEmailAgain": { "message": "Enviar e-mail com o código de verificação novamente" }, "useAnotherTwoStepMethod": { "message": "Utilizar outro método de verificação de dois passos" }, + "selectAnotherMethod": { + "message": "Selecionar outro método", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Utilize o seu código de recuperação" + }, "insertYubiKey": { "message": "Introduza a sua YubiKey na porta USB do seu computador, depois toque no botão da mesma." }, @@ -885,7 +912,7 @@ "message": "Proteja a sua organização com a Duo Security utilizando a aplicação Duo Mobile, SMS, chamada telefónica ou uma chave de segurança U2F.", "description": "'Duo Security' and 'Duo Mobile' are product names and should not be translated." }, - "verifyIdentity": { + "verifyYourIdentity": { "message": "Verifique a sua identidade" }, "weDontRecognizeThisDevice": { @@ -918,6 +945,9 @@ "twoStepOptions": { "message": "Opções de verificação de dois passos" }, + "selectTwoStepLoginMethod": { + "message": "Selecionar método de verificação de dois passos" + }, "selfHostedEnvironment": { "message": "Ambiente auto-hospedado" }, @@ -1764,19 +1794,19 @@ "message": "desbloquear o cofre" }, "autoPromptWindowsHello": { - "message": "Pedir o Windows Hello ao iniciar a aplicação" + "message": "Pedir o Windows Hello ao iniciar a app" }, "autoPromptPolkit": { "message": "Pedir a autenticação do sistema no arranque" }, "autoPromptTouchId": { - "message": "Pedir o Touch ID ao iniciar a aplicação" + "message": "Pedir o Touch ID ao iniciar a app" }, "requirePasswordOnStart": { - "message": "Exigir palavra-passe ou PIN ao iniciar a aplicação" + "message": "Exigir palavra-passe ou PIN ao iniciar a app" }, "requirePasswordWithoutPinOnStart": { - "message": "Require password on app start" + "message": "Exigir palavra-passe ao iniciar a app" }, "recommendedForSecurity": { "message": "Recomendado por segurança." @@ -2247,6 +2277,12 @@ "webAuthnAuthenticate": { "message": "Autenticar o WebAuthn" }, + "readSecurityKey": { + "message": "Ler chave de segurança" + }, + "awaitingSecurityKeyInteraction": { + "message": "A aguardar interação da chave de segurança..." + }, "hideEmail": { "message": "Ocultar o meu endereço de e-mail dos destinatários." }, @@ -3206,6 +3242,12 @@ "duoRequiredByOrgForAccount": { "message": "A verificação de dois passos Duo é necessária para a sua conta." }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "A verificação de dois passos do Duo é necessária para a sua conta. Siga os passos abaixo para concluir o início de sessão." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Siga os passos abaixo para concluir o início de sessão." + }, "launchDuo": { "message": "Iniciar o Duo no navegador" }, @@ -3463,9 +3505,27 @@ "sshkeyApprovalTitle": { "message": "Confirmar a utilização da chave SSH" }, + "agentForwardingWarningTitle": { + "message": "Aviso: Reencaminhamento de agentes" + }, + "agentForwardingWarningText": { + "message": "Este pedido provém de um dispositivo remoto no qual tem sessão iniciada" + }, "sshkeyApprovalMessageInfix": { "message": "está a pedir acesso a" }, + "sshkeyApprovalMessageSuffix": { + "message": "para" + }, + "sshActionLogin": { + "message": "se autenticar num servidor" + }, + "sshActionSign": { + "message": "assinar uma mensagem" + }, + "sshActionGitSign": { + "message": "assinar um commit no git" + }, "unknownApplication": { "message": "Uma aplicação" }, @@ -3540,5 +3600,8 @@ }, "updateBrowserOrDisableFingerprintDialogMessage": { "message": "A extensão do navegador que está a utilizar está desatualizada. Atualize-a ou desative a validação de impressões digitais da integração do navegador nas definições da aplicação para computador." + }, + "changeAtRiskPassword": { + "message": "Alterar palavra-passe em risco" } } diff --git a/apps/desktop/src/locales/ro/messages.json b/apps/desktop/src/locales/ro/messages.json index 807de4a101c..55c9d96d884 100644 --- a/apps/desktop/src/locales/ro/messages.json +++ b/apps/desktop/src/locales/ro/messages.json @@ -543,10 +543,6 @@ "message": "Include special characters", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "numWords": { "message": "Număr de cuvinte" }, @@ -652,6 +648,15 @@ "logInToBitwarden": { "message": "Log in to Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "Enter the code sent to your email" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Enter the code from your authenticator app" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Press your YubiKey to authenticate" + }, "logInWithPasskey": { "message": "Log in with passkey" }, @@ -704,6 +709,15 @@ "masterPassHintLabel": { "message": "Master password hint" }, + "passwordStrengthScore": { + "message": "Password strength score $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "joinOrganization": { "message": "Join organization" }, @@ -816,6 +830,9 @@ "webauthnCancelOrTimeout": { "message": "The authentication was cancelled or took too long. Please try again." }, + "openInNewTab": { + "message": "Open in new tab" + }, "invalidVerificationCode": { "message": "Cod de verificare nevalid" }, @@ -846,12 +863,22 @@ "rememberMe": { "message": "Memorare autentificare" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Don't ask again on this device for 30 days" + }, "sendVerificationCodeEmailAgain": { "message": "Retrimitere e-mail cu codul de verificare" }, "useAnotherTwoStepMethod": { "message": "Utilizare de metodă diferită de autentificare în două etape" }, + "selectAnotherMethod": { + "message": "Select another method", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Use your recovery code" + }, "insertYubiKey": { "message": "Introduceți YubiKey în portul USB al calculatorului apoi atingeți butonul acestuia." }, @@ -885,7 +912,7 @@ "message": "Verificați cu Duo Security pentru organizația dvs. utilizând aplicația Duo Mobile, SMS, apel telefonic sau cheia de securitate U2F.", "description": "'Duo Security' and 'Duo Mobile' are product names and should not be translated." }, - "verifyIdentity": { + "verifyYourIdentity": { "message": "Verify your Identity" }, "weDontRecognizeThisDevice": { @@ -918,6 +945,9 @@ "twoStepOptions": { "message": "Opțiuni de autentificare în două etape" }, + "selectTwoStepLoginMethod": { + "message": "Select two-step login method" + }, "selfHostedEnvironment": { "message": "Mediul găzduit local" }, @@ -2247,6 +2277,12 @@ "webAuthnAuthenticate": { "message": "Autentificare WebAuthn" }, + "readSecurityKey": { + "message": "Read security key" + }, + "awaitingSecurityKeyInteraction": { + "message": "Awaiting security key interaction..." + }, "hideEmail": { "message": "Ascundeți adresa mea de e-mail de la destinatari." }, @@ -3206,6 +3242,12 @@ "duoRequiredByOrgForAccount": { "message": "Duo two-step login is required for your account." }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Duo two-step login is required for your account. Follow the steps below to finish logging in." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Follow the steps below to finish logging in." + }, "launchDuo": { "message": "Launch Duo in Browser" }, @@ -3463,9 +3505,27 @@ "sshkeyApprovalTitle": { "message": "Confirm SSH key usage" }, + "agentForwardingWarningTitle": { + "message": "Warning: Agent Forwarding" + }, + "agentForwardingWarningText": { + "message": "This request comes from a remote device that you are logged into" + }, "sshkeyApprovalMessageInfix": { "message": "is requesting access to" }, + "sshkeyApprovalMessageSuffix": { + "message": "in order to" + }, + "sshActionLogin": { + "message": "authenticate to a server" + }, + "sshActionSign": { + "message": "sign a message" + }, + "sshActionGitSign": { + "message": "sign a git commit" + }, "unknownApplication": { "message": "An application" }, @@ -3540,5 +3600,8 @@ }, "updateBrowserOrDisableFingerprintDialogMessage": { "message": "The browser extension you are using is out of date. Please update it or disable browser integration fingerprint validation in the desktop app settings." + }, + "changeAtRiskPassword": { + "message": "Change at-risk password" } } diff --git a/apps/desktop/src/locales/ru/messages.json b/apps/desktop/src/locales/ru/messages.json index 9fb24b00c7c..2c91e40e363 100644 --- a/apps/desktop/src/locales/ru/messages.json +++ b/apps/desktop/src/locales/ru/messages.json @@ -543,10 +543,6 @@ "message": "Включить специальные символы", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "numWords": { "message": "Количество слов" }, @@ -652,6 +648,15 @@ "logInToBitwarden": { "message": "Войти в Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "Введите код, отправленный на ваш email" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Введите код из приложения-аутентификатора" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Нажмите на YubiKey для аутентификации" + }, "logInWithPasskey": { "message": "Войти с passkey" }, @@ -704,6 +709,15 @@ "masterPassHintLabel": { "message": "Подсказка к мастер-паролю" }, + "passwordStrengthScore": { + "message": "Оценка надежности пароля $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "joinOrganization": { "message": "Присоединиться к организации" }, @@ -816,6 +830,9 @@ "webauthnCancelOrTimeout": { "message": "Аутентификация была отменена или заняла слишком много времени. Пожалуйста, попробуйте еще раз." }, + "openInNewTab": { + "message": "Открыть в новой вкладке" + }, "invalidVerificationCode": { "message": "Неверный код подтверждения" }, @@ -846,12 +863,22 @@ "rememberMe": { "message": "Запомнить меня" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Не спрашивать на этом устройстве в течение 30 дней" + }, "sendVerificationCodeEmailAgain": { "message": "Отправить код подтверждения еще раз" }, "useAnotherTwoStepMethod": { "message": "Использовать другой метод двухэтапной аутентификации" }, + "selectAnotherMethod": { + "message": "Выбрать другой способ", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Использовать код восстановления" + }, "insertYubiKey": { "message": "Вставьте свой YubiKey в USB-порт компьютера и нажмите его кнопку." }, @@ -885,7 +912,7 @@ "message": "Подтвердите с помощью Duo Security для вашей организации, используя приложение Duo Mobile, SMS, телефонный звонок или ключ безопасности U2F.", "description": "'Duo Security' and 'Duo Mobile' are product names and should not be translated." }, - "verifyIdentity": { + "verifyYourIdentity": { "message": "Подтвердите вашу личность" }, "weDontRecognizeThisDevice": { @@ -918,6 +945,9 @@ "twoStepOptions": { "message": "Настройки двухэтапной аутентификации" }, + "selectTwoStepLoginMethod": { + "message": "Выбрать другой метод двухэтапной аутентификации" + }, "selfHostedEnvironment": { "message": "Окружение пользовательского хостинга" }, @@ -2247,6 +2277,12 @@ "webAuthnAuthenticate": { "message": "Аутентификация WebAutn" }, + "readSecurityKey": { + "message": "Считать ключ безопасности" + }, + "awaitingSecurityKeyInteraction": { + "message": "Ожидание взаимодействия с ключом безопасности..." + }, "hideEmail": { "message": "Скрыть мой адрес email от получателей." }, @@ -3206,6 +3242,12 @@ "duoRequiredByOrgForAccount": { "message": "Для вашего аккаунта требуется двухэтапная аутентификация Duo." }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Duo two-step login is required for your account. Follow the steps below to finish logging in." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Следуйте указаниям ниже, чтобы завершить авторизацию." + }, "launchDuo": { "message": "Запустить Duo в браузере" }, @@ -3463,9 +3505,27 @@ "sshkeyApprovalTitle": { "message": "Подтвердить использование ключа SSH" }, + "agentForwardingWarningTitle": { + "message": "Предупреждение: Переадресация агента" + }, + "agentForwardingWarningText": { + "message": "Этот запрос поступает с удаленного устройства, на которое вы вошли" + }, "sshkeyApprovalMessageInfix": { "message": "запрашивает доступ к" }, + "sshkeyApprovalMessageSuffix": { + "message": "чтобы" + }, + "sshActionLogin": { + "message": "авторизоваться на сервере" + }, + "sshActionSign": { + "message": "sign a message" + }, + "sshActionGitSign": { + "message": "sign a git commit" + }, "unknownApplication": { "message": "Приложение" }, @@ -3540,5 +3600,8 @@ }, "updateBrowserOrDisableFingerprintDialogMessage": { "message": "Используемое вами расширение браузера устарело. Пожалуйста, обновите его или отключите проверку интеграции браузера с помощью отпечатка пальца в настройках приложения для компьютера." + }, + "changeAtRiskPassword": { + "message": "Изменить пароль, находящийся под угрозой" } } diff --git a/apps/desktop/src/locales/si/messages.json b/apps/desktop/src/locales/si/messages.json index 3e77077ddee..d1aed3d65f0 100644 --- a/apps/desktop/src/locales/si/messages.json +++ b/apps/desktop/src/locales/si/messages.json @@ -543,10 +543,6 @@ "message": "Include special characters", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "numWords": { "message": "Number of words" }, @@ -652,6 +648,15 @@ "logInToBitwarden": { "message": "Log in to Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "Enter the code sent to your email" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Enter the code from your authenticator app" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Press your YubiKey to authenticate" + }, "logInWithPasskey": { "message": "Log in with passkey" }, @@ -704,6 +709,15 @@ "masterPassHintLabel": { "message": "Master password hint" }, + "passwordStrengthScore": { + "message": "Password strength score $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "joinOrganization": { "message": "Join organization" }, @@ -816,6 +830,9 @@ "webauthnCancelOrTimeout": { "message": "The authentication was cancelled or took too long. Please try again." }, + "openInNewTab": { + "message": "Open in new tab" + }, "invalidVerificationCode": { "message": "Invalid verification code" }, @@ -846,12 +863,22 @@ "rememberMe": { "message": "Remember me" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Don't ask again on this device for 30 days" + }, "sendVerificationCodeEmailAgain": { "message": "Send verification code email again" }, "useAnotherTwoStepMethod": { "message": "Use another two-step login method" }, + "selectAnotherMethod": { + "message": "Select another method", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Use your recovery code" + }, "insertYubiKey": { "message": "Insert your YubiKey into your computer's USB port, then touch its button." }, @@ -885,7 +912,7 @@ "message": "Verify with Duo Security for your organization using the Duo Mobile app, SMS, phone call, or U2F security key.", "description": "'Duo Security' and 'Duo Mobile' are product names and should not be translated." }, - "verifyIdentity": { + "verifyYourIdentity": { "message": "Verify your Identity" }, "weDontRecognizeThisDevice": { @@ -918,6 +945,9 @@ "twoStepOptions": { "message": "Two-step login options" }, + "selectTwoStepLoginMethod": { + "message": "Select two-step login method" + }, "selfHostedEnvironment": { "message": "Self-hosted environment" }, @@ -2247,6 +2277,12 @@ "webAuthnAuthenticate": { "message": "Authenticate WebAuthn" }, + "readSecurityKey": { + "message": "Read security key" + }, + "awaitingSecurityKeyInteraction": { + "message": "Awaiting security key interaction..." + }, "hideEmail": { "message": "Hide my email address from recipients." }, @@ -3206,6 +3242,12 @@ "duoRequiredByOrgForAccount": { "message": "Duo two-step login is required for your account." }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Duo two-step login is required for your account. Follow the steps below to finish logging in." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Follow the steps below to finish logging in." + }, "launchDuo": { "message": "Launch Duo in Browser" }, @@ -3463,9 +3505,27 @@ "sshkeyApprovalTitle": { "message": "Confirm SSH key usage" }, + "agentForwardingWarningTitle": { + "message": "Warning: Agent Forwarding" + }, + "agentForwardingWarningText": { + "message": "This request comes from a remote device that you are logged into" + }, "sshkeyApprovalMessageInfix": { "message": "is requesting access to" }, + "sshkeyApprovalMessageSuffix": { + "message": "in order to" + }, + "sshActionLogin": { + "message": "authenticate to a server" + }, + "sshActionSign": { + "message": "sign a message" + }, + "sshActionGitSign": { + "message": "sign a git commit" + }, "unknownApplication": { "message": "An application" }, @@ -3540,5 +3600,8 @@ }, "updateBrowserOrDisableFingerprintDialogMessage": { "message": "The browser extension you are using is out of date. Please update it or disable browser integration fingerprint validation in the desktop app settings." + }, + "changeAtRiskPassword": { + "message": "Change at-risk password" } } diff --git a/apps/desktop/src/locales/sk/messages.json b/apps/desktop/src/locales/sk/messages.json index 65a718b1a23..ee8736b7ef2 100644 --- a/apps/desktop/src/locales/sk/messages.json +++ b/apps/desktop/src/locales/sk/messages.json @@ -543,10 +543,6 @@ "message": "Zahrnúť špeciálne znaky", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "numWords": { "message": "Počet slov" }, @@ -652,6 +648,15 @@ "logInToBitwarden": { "message": "Prihlásenie do Bitwardenu" }, + "enterTheCodeSentToYourEmail": { + "message": "Zadajte kód zaslaný na váš e-mail" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Zadajte kód z overovacej aplikácie" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Stlačte YubiKey na overenie" + }, "logInWithPasskey": { "message": "Prihlásiť sa s prístupovým kľúčom" }, @@ -704,6 +709,15 @@ "masterPassHintLabel": { "message": "Nápoveď k hlavnému heslu" }, + "passwordStrengthScore": { + "message": "Sila hesla $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "joinOrganization": { "message": "Pripojte sa k organizácii" }, @@ -816,6 +830,9 @@ "webauthnCancelOrTimeout": { "message": "Overenie bolo zrušené alebo trvalo príliš dlho. Skúste to znova." }, + "openInNewTab": { + "message": "Otvoriť v novej karte" + }, "invalidVerificationCode": { "message": "Neplatný verifikačný kód" }, @@ -846,12 +863,22 @@ "rememberMe": { "message": "Zapamätaj si ma" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Nepýtať sa znova na tomto zariadení 30 dní" + }, "sendVerificationCodeEmailAgain": { "message": "Znovu zaslať overovací kód e-mailom" }, "useAnotherTwoStepMethod": { "message": "Použiť inú dvojstupňovú metódu prihlásenia" }, + "selectAnotherMethod": { + "message": "Vyberte iný spôsob", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Použiť obnovovací kód" + }, "insertYubiKey": { "message": "Vložte váš YubiKey do USB portu počítača a stlačte jeho tlačidlo." }, @@ -885,7 +912,7 @@ "message": "Overiť sa prostredníctvom Duo Security vašej organizácie použitím Duo Mobile aplikácie, SMS, telefonátu alebo U2F bezpečnostným kľúčom.", "description": "'Duo Security' and 'Duo Mobile' are product names and should not be translated." }, - "verifyIdentity": { + "verifyYourIdentity": { "message": "Overte svoju totožnosť" }, "weDontRecognizeThisDevice": { @@ -918,6 +945,9 @@ "twoStepOptions": { "message": "Možnosti dvojstupňového prihlásenia" }, + "selectTwoStepLoginMethod": { + "message": "Vyberte metódu dvojstupňového prihlásenia" + }, "selfHostedEnvironment": { "message": "Prevádzkované vo vlastnom prostredí" }, @@ -2247,6 +2277,12 @@ "webAuthnAuthenticate": { "message": "Overiť cez WebAuthn" }, + "readSecurityKey": { + "message": "Prečítať bezpečnostný kľúč" + }, + "awaitingSecurityKeyInteraction": { + "message": "Čaká sa na interakciu s bezpečnostným kľúčom..." + }, "hideEmail": { "message": "Skryť moju e-mailovú adresu pred príjemcami." }, @@ -3206,6 +3242,12 @@ "duoRequiredByOrgForAccount": { "message": "Pre váš účet je potrebné dvojstupňové prihlásenie Duo." }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Pre váš účet sa vyžaduje dvojstupňové prihlásenie Duo. Na dokončenie prihlásenia postupujte podľa pokynov." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Na dokončenie prihlásenia postupujte podľa pokynov." + }, "launchDuo": { "message": "Spustiť Duo v prehliadači" }, @@ -3463,9 +3505,27 @@ "sshkeyApprovalTitle": { "message": "Potvrdiť použitie kľúča SSH" }, + "agentForwardingWarningTitle": { + "message": "Upozornenie: Presmerovanie agenta" + }, + "agentForwardingWarningText": { + "message": "Táto požiadavka prichádza zo vzdialeného zariadenia, do ktorého ste prihlásení" + }, "sshkeyApprovalMessageInfix": { "message": "žiada o prístup k" }, + "sshkeyApprovalMessageSuffix": { + "message": "in order to" + }, + "sshActionLogin": { + "message": "authenticate to a server" + }, + "sshActionSign": { + "message": "podpísať správu" + }, + "sshActionGitSign": { + "message": "podpísať git commit" + }, "unknownApplication": { "message": "Aplikácia" }, @@ -3540,5 +3600,8 @@ }, "updateBrowserOrDisableFingerprintDialogMessage": { "message": "Rozšírenie prehliadača, ktoré používate, je zastarané. Aktualizujte ho alebo zakážte overenie odtlačkov integrácie prehliadača v nastaveniach desktopovej aplikácie." + }, + "changeAtRiskPassword": { + "message": "Zmeniť rizikové heslá" } } diff --git a/apps/desktop/src/locales/sl/messages.json b/apps/desktop/src/locales/sl/messages.json index e74cf0392fc..b3685c8a463 100644 --- a/apps/desktop/src/locales/sl/messages.json +++ b/apps/desktop/src/locales/sl/messages.json @@ -543,10 +543,6 @@ "message": "Include special characters", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "numWords": { "message": "Število besed" }, @@ -652,6 +648,15 @@ "logInToBitwarden": { "message": "Log in to Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "Enter the code sent to your email" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Enter the code from your authenticator app" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Press your YubiKey to authenticate" + }, "logInWithPasskey": { "message": "Log in with passkey" }, @@ -704,6 +709,15 @@ "masterPassHintLabel": { "message": "Master password hint" }, + "passwordStrengthScore": { + "message": "Password strength score $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "joinOrganization": { "message": "Join organization" }, @@ -816,6 +830,9 @@ "webauthnCancelOrTimeout": { "message": "The authentication was cancelled or took too long. Please try again." }, + "openInNewTab": { + "message": "Open in new tab" + }, "invalidVerificationCode": { "message": "Neveljavna verifikacijska koda" }, @@ -846,12 +863,22 @@ "rememberMe": { "message": "Zapomni si me" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Don't ask again on this device for 30 days" + }, "sendVerificationCodeEmailAgain": { "message": "Ponovno pošlji verifikacijsko kodo" }, "useAnotherTwoStepMethod": { "message": "Use another two-step login method" }, + "selectAnotherMethod": { + "message": "Select another method", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Use your recovery code" + }, "insertYubiKey": { "message": "Insert your YubiKey into your computer's USB port, then touch its button." }, @@ -885,7 +912,7 @@ "message": "Verify with Duo Security for your organization using the Duo Mobile app, SMS, phone call, or U2F security key.", "description": "'Duo Security' and 'Duo Mobile' are product names and should not be translated." }, - "verifyIdentity": { + "verifyYourIdentity": { "message": "Verify your Identity" }, "weDontRecognizeThisDevice": { @@ -918,6 +945,9 @@ "twoStepOptions": { "message": "Two-step login options" }, + "selectTwoStepLoginMethod": { + "message": "Select two-step login method" + }, "selfHostedEnvironment": { "message": "Okolje z lastnim gostovanjem" }, @@ -2247,6 +2277,12 @@ "webAuthnAuthenticate": { "message": "Authenticate WebAuthn" }, + "readSecurityKey": { + "message": "Read security key" + }, + "awaitingSecurityKeyInteraction": { + "message": "Awaiting security key interaction..." + }, "hideEmail": { "message": "Hide my email address from recipients." }, @@ -3206,6 +3242,12 @@ "duoRequiredByOrgForAccount": { "message": "Duo two-step login is required for your account." }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Duo two-step login is required for your account. Follow the steps below to finish logging in." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Follow the steps below to finish logging in." + }, "launchDuo": { "message": "Launch Duo in Browser" }, @@ -3463,9 +3505,27 @@ "sshkeyApprovalTitle": { "message": "Confirm SSH key usage" }, + "agentForwardingWarningTitle": { + "message": "Warning: Agent Forwarding" + }, + "agentForwardingWarningText": { + "message": "This request comes from a remote device that you are logged into" + }, "sshkeyApprovalMessageInfix": { "message": "is requesting access to" }, + "sshkeyApprovalMessageSuffix": { + "message": "in order to" + }, + "sshActionLogin": { + "message": "authenticate to a server" + }, + "sshActionSign": { + "message": "sign a message" + }, + "sshActionGitSign": { + "message": "sign a git commit" + }, "unknownApplication": { "message": "An application" }, @@ -3540,5 +3600,8 @@ }, "updateBrowserOrDisableFingerprintDialogMessage": { "message": "The browser extension you are using is out of date. Please update it or disable browser integration fingerprint validation in the desktop app settings." + }, + "changeAtRiskPassword": { + "message": "Change at-risk password" } } diff --git a/apps/desktop/src/locales/sr/messages.json b/apps/desktop/src/locales/sr/messages.json index b7a66174e9d..7e95d0d87b8 100644 --- a/apps/desktop/src/locales/sr/messages.json +++ b/apps/desktop/src/locales/sr/messages.json @@ -543,10 +543,6 @@ "message": "Укључити специјална слова", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "numWords": { "message": "Број речи" }, @@ -652,6 +648,15 @@ "logInToBitwarden": { "message": "Пријавите се на Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "Унесите кôд послат на ваш имејл" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Унесите кôд из апликације за аутентификацију" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Стисните Ваш YubiKey за аутентификацију" + }, "logInWithPasskey": { "message": "Пријавите се са приступним кључем" }, @@ -704,6 +709,15 @@ "masterPassHintLabel": { "message": "Савет главне лозинке" }, + "passwordStrengthScore": { + "message": "Снага лозинкe $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "joinOrganization": { "message": "Придружи Организацију" }, @@ -816,6 +830,9 @@ "webauthnCancelOrTimeout": { "message": "Аутентификација је отказана или је трајала предуго. Молим вас, покушајте поново." }, + "openInNewTab": { + "message": "Отвори у новом језичку" + }, "invalidVerificationCode": { "message": "Неисправан верификациони код" }, @@ -846,12 +863,22 @@ "rememberMe": { "message": "Запамти ме" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Не питајте поново на овом уређају 30 дана" + }, "sendVerificationCodeEmailAgain": { "message": "Поново послати верификациони код на имејл" }, "useAnotherTwoStepMethod": { "message": "Користите другу методу пријављивања у два корака" }, + "selectAnotherMethod": { + "message": "Изаберите другу методу", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Употребите шифру за опоравак" + }, "insertYubiKey": { "message": "Убаците свој YubiKey у УСБ порт рачунара, а затим додирните његово дугме." }, @@ -885,7 +912,7 @@ "message": "Провери са Duo Security за вашу организацију користећи Duo Mobile апликацију, СМС, телефонски позив, или U2F кључ.", "description": "'Duo Security' and 'Duo Mobile' are product names and should not be translated." }, - "verifyIdentity": { + "verifyYourIdentity": { "message": "Потврдите идентитет" }, "weDontRecognizeThisDevice": { @@ -918,6 +945,9 @@ "twoStepOptions": { "message": "Опције дво-коракне пријаве" }, + "selectTwoStepLoginMethod": { + "message": "Одабрати методу пријављивања у два корака" + }, "selfHostedEnvironment": { "message": "Самостално окружење" }, @@ -1776,7 +1806,7 @@ "message": "Захтевај лозинку или ПИН при покретању" }, "requirePasswordWithoutPinOnStart": { - "message": "Require password on app start" + "message": "Захтевај лозинку при покретању" }, "recommendedForSecurity": { "message": "Препоручује се за сигурност." @@ -2247,6 +2277,12 @@ "webAuthnAuthenticate": { "message": "WebAutn аутентификација" }, + "readSecurityKey": { + "message": "Читај сигурносни кључ" + }, + "awaitingSecurityKeyInteraction": { + "message": "Чека се интеракција сигурносног кључа..." + }, "hideEmail": { "message": "Сакриј моју е-адресу од примаоца." }, @@ -2554,7 +2590,7 @@ "message": "Користите подешено catch-all пријемно сандуче вашег домена." }, "useThisEmail": { - "message": "Use this email" + "message": "Користи овај имејл" }, "random": { "message": "Случајно" @@ -2644,7 +2680,7 @@ } }, "forwaderInvalidOperation": { - "message": "$SERVICENAME$ refused your request. Please contact your service provider for assistance.", + "message": "$SERVICENAME$ одбио ваш захтев. Обратите се свом провајдеру сервиса за помоћ.", "description": "Displayed when the user is forbidden from using the API by the forwarding service.", "placeholders": { "servicename": { @@ -2654,7 +2690,7 @@ } }, "forwaderInvalidOperationWithMessage": { - "message": "$SERVICENAME$ refused your request: $ERRORMESSAGE$", + "message": "$SERVICENAME$ одбио ваш захтев: $ERRORMESSAGE$", "description": "Displayed when the user is forbidden from using the API by the forwarding service with an error message.", "placeholders": { "servicename": { @@ -2773,7 +2809,7 @@ "message": "Пријава је покренута" }, "logInRequestSent": { - "message": "Request sent" + "message": "Захтев је послат" }, "notificationSentDevice": { "message": "Обавештење је послато на ваш уређај." @@ -2782,13 +2818,13 @@ "message": "Обавештење је послато на ваш уређај" }, "notificationSentDevicePart1": { - "message": "Unlock Bitwarden on your device or on the " + "message": "Откључај Bitwarden на твом уређају или на " }, "notificationSentDeviceAnchor": { - "message": "web app" + "message": "веб апликација" }, "notificationSentDevicePart2": { - "message": "Make sure the Fingerprint phrase matches the one below before approving." + "message": "Потврдите да се фраза отиска поклапа са овом испод пре одобравања." }, "needAnotherOptionV1": { "message": "Треба Вам друга опција?" @@ -2819,10 +2855,10 @@ "description": "'Character count' describes a feature that displays a number next to each character of the password." }, "areYouTryingToAccessYourAccount": { - "message": "Are you trying to access your account?" + "message": "Да ли покушавате да приступите вашем налогу?" }, "accessAttemptBy": { - "message": "Access attempt by $EMAIL$", + "message": "Покушај приступа са $EMAIL$", "placeholders": { "email": { "content": "$1", @@ -2840,10 +2876,10 @@ "message": "Време" }, "confirmAccess": { - "message": "Confirm access" + "message": "Потврдите приступ" }, "denyAccess": { - "message": "Deny access" + "message": "Одбити приступ" }, "logInConfirmedForEmailOnDevice": { "message": "Пријава потврђена за $EMAIL$ на $DEVICE$", @@ -2880,7 +2916,7 @@ "message": "Овај захтев више не важи." }, "confirmAccessAttempt": { - "message": "Confirm access attempt for $EMAIL$", + "message": "Потврдити приступ за $EMAIL$", "placeholders": { "email": { "content": "$1", @@ -2892,7 +2928,7 @@ "message": "Захтев пријаве" }, "accountAccessRequested": { - "message": "Account access requested" + "message": "Приступ рачуна је затражен" }, "creatingAccountOn": { "message": "Креирај налог на" @@ -3206,6 +3242,12 @@ "duoRequiredByOrgForAccount": { "message": "Duo пријава у два корака је потребна за ваш налог." }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "За ваш налог је потребан два корака. Следите наведене кораке да бисте завршили пријављивање." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Следите наведене кораке да бисте завршили пријављивање." + }, "launchDuo": { "message": "Покренути Duo у претраживачу" }, @@ -3463,9 +3505,27 @@ "sshkeyApprovalTitle": { "message": "Потврдите употребу SSH кључа" }, + "agentForwardingWarningTitle": { + "message": "Упозорење: Прослеђивање агента" + }, + "agentForwardingWarningText": { + "message": "Овај захтев долази са удаљеног уређаја на којим сте пријављени" + }, "sshkeyApprovalMessageInfix": { "message": "тражи приступ" }, + "sshkeyApprovalMessageSuffix": { + "message": "да бисте" + }, + "sshActionLogin": { + "message": "се аутентификали на серверу" + }, + "sshActionSign": { + "message": "потписати поруку" + }, + "sshActionGitSign": { + "message": "потписати „git commit“" + }, "unknownApplication": { "message": "Апликација" }, @@ -3524,21 +3584,24 @@ "message": "Променити имејл налога" }, "allowScreenshots": { - "message": "Allow screen capture" + "message": "Дозволи снимање екрана" }, "allowScreenshotsDesc": { - "message": "Allow the Bitwarden desktop application to be captured in screenshots and viewed in remote desktop sessions. Disabling this will prevent access on some external displays." + "message": "Дозволите да Bitwarden апликација прихвата скриншот и преглед у удаљених радних површина. Онемогућавање то ће спречити приступ неким спољним дисплејима." }, "confirmWindowStillVisibleTitle": { - "message": "Confirm window still visible" + "message": "Потврдите да је прозор и даље видљив" }, "confirmWindowStillVisibleContent": { - "message": "Please confirm that the window is still visible." + "message": "Потврдите да је прозор и даље видљив." }, "updateBrowserOrDisableFingerprintDialogTitle": { "message": "Неопходна надоградња додатка" }, "updateBrowserOrDisableFingerprintDialogMessage": { "message": "Додатак који користите је застарело. Молимо ажурирајте га или онемогућите валидацију отисача претраживача Интеграција на поставки апликација за компјутер." + }, + "changeAtRiskPassword": { + "message": "Променити ризичну лозинку" } } diff --git a/apps/desktop/src/locales/sv/messages.json b/apps/desktop/src/locales/sv/messages.json index 0f7a9000481..0cee0315db5 100644 --- a/apps/desktop/src/locales/sv/messages.json +++ b/apps/desktop/src/locales/sv/messages.json @@ -543,10 +543,6 @@ "message": "Inkludera specialtecken", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "numWords": { "message": "Antal ord" }, @@ -652,6 +648,15 @@ "logInToBitwarden": { "message": "Logga in på Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "Enter the code sent to your email" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Enter the code from your authenticator app" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Press your YubiKey to authenticate" + }, "logInWithPasskey": { "message": "Logga in med nyckel" }, @@ -704,6 +709,15 @@ "masterPassHintLabel": { "message": "Huvudlösenordsledtråd" }, + "passwordStrengthScore": { + "message": "Password strength score $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "joinOrganization": { "message": "Join organization" }, @@ -816,6 +830,9 @@ "webauthnCancelOrTimeout": { "message": "The authentication was cancelled or took too long. Please try again." }, + "openInNewTab": { + "message": "Open in new tab" + }, "invalidVerificationCode": { "message": "Ogiltig verifieringskod" }, @@ -846,12 +863,22 @@ "rememberMe": { "message": "Kom ihåg mig" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Don't ask again on this device for 30 days" + }, "sendVerificationCodeEmailAgain": { "message": "Skicka e-postmeddelandet med verifieringskoden igen" }, "useAnotherTwoStepMethod": { "message": "Använd en annan metod för tvåstegsverifiering" }, + "selectAnotherMethod": { + "message": "Select another method", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Use your recovery code" + }, "insertYubiKey": { "message": "Anslut din YubiKey till datorns USB-port och tryck sedan på dess knapp." }, @@ -885,7 +912,7 @@ "message": "Verifiera med Duo Security för din organisation genom att använda Duo Mobile-appen, SMS, telefonsamtal eller en U2F-säkerhetsnyckel.", "description": "'Duo Security' and 'Duo Mobile' are product names and should not be translated." }, - "verifyIdentity": { + "verifyYourIdentity": { "message": "Verify your Identity" }, "weDontRecognizeThisDevice": { @@ -918,6 +945,9 @@ "twoStepOptions": { "message": "Alternativ för tvåstegsverifiering" }, + "selectTwoStepLoginMethod": { + "message": "Select two-step login method" + }, "selfHostedEnvironment": { "message": "Egen-hostad miljö" }, @@ -2247,6 +2277,12 @@ "webAuthnAuthenticate": { "message": "Autentisera WebAuthn" }, + "readSecurityKey": { + "message": "Read security key" + }, + "awaitingSecurityKeyInteraction": { + "message": "Awaiting security key interaction..." + }, "hideEmail": { "message": "Dölj min e-postadress för mottagare." }, @@ -3206,6 +3242,12 @@ "duoRequiredByOrgForAccount": { "message": "Duo tvåstegsverifiering krävs för ditt konto." }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Duo two-step login is required for your account. Follow the steps below to finish logging in." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Follow the steps below to finish logging in." + }, "launchDuo": { "message": "Starta Duo i webbläsaren" }, @@ -3463,9 +3505,27 @@ "sshkeyApprovalTitle": { "message": "Confirm SSH key usage" }, + "agentForwardingWarningTitle": { + "message": "Warning: Agent Forwarding" + }, + "agentForwardingWarningText": { + "message": "This request comes from a remote device that you are logged into" + }, "sshkeyApprovalMessageInfix": { "message": "begär tillgång till" }, + "sshkeyApprovalMessageSuffix": { + "message": "in order to" + }, + "sshActionLogin": { + "message": "authenticate to a server" + }, + "sshActionSign": { + "message": "sign a message" + }, + "sshActionGitSign": { + "message": "sign a git commit" + }, "unknownApplication": { "message": "En applikation" }, @@ -3540,5 +3600,8 @@ }, "updateBrowserOrDisableFingerprintDialogMessage": { "message": "The browser extension you are using is out of date. Please update it or disable browser integration fingerprint validation in the desktop app settings." + }, + "changeAtRiskPassword": { + "message": "Change at-risk password" } } diff --git a/apps/desktop/src/locales/te/messages.json b/apps/desktop/src/locales/te/messages.json index 1aa61a9b381..d7769ad902a 100644 --- a/apps/desktop/src/locales/te/messages.json +++ b/apps/desktop/src/locales/te/messages.json @@ -543,10 +543,6 @@ "message": "Include special characters", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "numWords": { "message": "Number of words" }, @@ -652,6 +648,15 @@ "logInToBitwarden": { "message": "Log in to Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "Enter the code sent to your email" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Enter the code from your authenticator app" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Press your YubiKey to authenticate" + }, "logInWithPasskey": { "message": "Log in with passkey" }, @@ -704,6 +709,15 @@ "masterPassHintLabel": { "message": "Master password hint" }, + "passwordStrengthScore": { + "message": "Password strength score $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "joinOrganization": { "message": "Join organization" }, @@ -816,6 +830,9 @@ "webauthnCancelOrTimeout": { "message": "The authentication was cancelled or took too long. Please try again." }, + "openInNewTab": { + "message": "Open in new tab" + }, "invalidVerificationCode": { "message": "Invalid verification code" }, @@ -846,12 +863,22 @@ "rememberMe": { "message": "Remember me" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Don't ask again on this device for 30 days" + }, "sendVerificationCodeEmailAgain": { "message": "Send verification code email again" }, "useAnotherTwoStepMethod": { "message": "Use another two-step login method" }, + "selectAnotherMethod": { + "message": "Select another method", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Use your recovery code" + }, "insertYubiKey": { "message": "Insert your YubiKey into your computer's USB port, then touch its button." }, @@ -885,7 +912,7 @@ "message": "Verify with Duo Security for your organization using the Duo Mobile app, SMS, phone call, or U2F security key.", "description": "'Duo Security' and 'Duo Mobile' are product names and should not be translated." }, - "verifyIdentity": { + "verifyYourIdentity": { "message": "Verify your Identity" }, "weDontRecognizeThisDevice": { @@ -918,6 +945,9 @@ "twoStepOptions": { "message": "Two-step login options" }, + "selectTwoStepLoginMethod": { + "message": "Select two-step login method" + }, "selfHostedEnvironment": { "message": "Self-hosted environment" }, @@ -2247,6 +2277,12 @@ "webAuthnAuthenticate": { "message": "Authenticate WebAuthn" }, + "readSecurityKey": { + "message": "Read security key" + }, + "awaitingSecurityKeyInteraction": { + "message": "Awaiting security key interaction..." + }, "hideEmail": { "message": "Hide my email address from recipients." }, @@ -3206,6 +3242,12 @@ "duoRequiredByOrgForAccount": { "message": "Duo two-step login is required for your account." }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Duo two-step login is required for your account. Follow the steps below to finish logging in." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Follow the steps below to finish logging in." + }, "launchDuo": { "message": "Launch Duo in Browser" }, @@ -3463,9 +3505,27 @@ "sshkeyApprovalTitle": { "message": "Confirm SSH key usage" }, + "agentForwardingWarningTitle": { + "message": "Warning: Agent Forwarding" + }, + "agentForwardingWarningText": { + "message": "This request comes from a remote device that you are logged into" + }, "sshkeyApprovalMessageInfix": { "message": "is requesting access to" }, + "sshkeyApprovalMessageSuffix": { + "message": "in order to" + }, + "sshActionLogin": { + "message": "authenticate to a server" + }, + "sshActionSign": { + "message": "sign a message" + }, + "sshActionGitSign": { + "message": "sign a git commit" + }, "unknownApplication": { "message": "An application" }, @@ -3540,5 +3600,8 @@ }, "updateBrowserOrDisableFingerprintDialogMessage": { "message": "The browser extension you are using is out of date. Please update it or disable browser integration fingerprint validation in the desktop app settings." + }, + "changeAtRiskPassword": { + "message": "Change at-risk password" } } diff --git a/apps/desktop/src/locales/th/messages.json b/apps/desktop/src/locales/th/messages.json index ad1592f3247..0c0dee38bad 100644 --- a/apps/desktop/src/locales/th/messages.json +++ b/apps/desktop/src/locales/th/messages.json @@ -543,10 +543,6 @@ "message": "Include special characters", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "numWords": { "message": "Number of Words" }, @@ -652,6 +648,15 @@ "logInToBitwarden": { "message": "Log in to Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "Enter the code sent to your email" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Enter the code from your authenticator app" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Press your YubiKey to authenticate" + }, "logInWithPasskey": { "message": "Log in with passkey" }, @@ -704,6 +709,15 @@ "masterPassHintLabel": { "message": "Master password hint" }, + "passwordStrengthScore": { + "message": "Password strength score $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "joinOrganization": { "message": "Join organization" }, @@ -816,6 +830,9 @@ "webauthnCancelOrTimeout": { "message": "The authentication was cancelled or took too long. Please try again." }, + "openInNewTab": { + "message": "Open in new tab" + }, "invalidVerificationCode": { "message": "รหัสการตรวจสอบสิทธิ์ไม่ถูกต้อง" }, @@ -846,12 +863,22 @@ "rememberMe": { "message": "จดจำการเข้าระบบของฉัน" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Don't ask again on this device for 30 days" + }, "sendVerificationCodeEmailAgain": { "message": "ส่งอีเมล์ยืนยันรหัสอีกครั้ง" }, "useAnotherTwoStepMethod": { "message": "ใช้วิธีลงชื่อเข้าใช้แบบสองขั้นตอนวิธีอื่น" }, + "selectAnotherMethod": { + "message": "Select another method", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Use your recovery code" + }, "insertYubiKey": { "message": "เสียบ YubiKey ของคุณเข้ากับพอร์ต USB ของคอมพิวเตอร์ จากนั้นแตะปุ่ม" }, @@ -885,7 +912,7 @@ "message": "Verify with Duo Security for your organization using the Duo Mobile app, SMS, phone call, or U2F security key.", "description": "'Duo Security' and 'Duo Mobile' are product names and should not be translated." }, - "verifyIdentity": { + "verifyYourIdentity": { "message": "Verify your Identity" }, "weDontRecognizeThisDevice": { @@ -918,6 +945,9 @@ "twoStepOptions": { "message": "ตัวเลือกการเข้าสู่ระบบแบบสองขั้นตอน" }, + "selectTwoStepLoginMethod": { + "message": "Select two-step login method" + }, "selfHostedEnvironment": { "message": "Self-hosted Environment" }, @@ -2247,6 +2277,12 @@ "webAuthnAuthenticate": { "message": "Authenticate WebAuthn" }, + "readSecurityKey": { + "message": "Read security key" + }, + "awaitingSecurityKeyInteraction": { + "message": "Awaiting security key interaction..." + }, "hideEmail": { "message": "Hide my email address from recipients." }, @@ -3206,6 +3242,12 @@ "duoRequiredByOrgForAccount": { "message": "Duo two-step login is required for your account." }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Duo two-step login is required for your account. Follow the steps below to finish logging in." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Follow the steps below to finish logging in." + }, "launchDuo": { "message": "Launch Duo in Browser" }, @@ -3463,9 +3505,27 @@ "sshkeyApprovalTitle": { "message": "Confirm SSH key usage" }, + "agentForwardingWarningTitle": { + "message": "Warning: Agent Forwarding" + }, + "agentForwardingWarningText": { + "message": "This request comes from a remote device that you are logged into" + }, "sshkeyApprovalMessageInfix": { "message": "is requesting access to" }, + "sshkeyApprovalMessageSuffix": { + "message": "in order to" + }, + "sshActionLogin": { + "message": "authenticate to a server" + }, + "sshActionSign": { + "message": "sign a message" + }, + "sshActionGitSign": { + "message": "sign a git commit" + }, "unknownApplication": { "message": "An application" }, @@ -3540,5 +3600,8 @@ }, "updateBrowserOrDisableFingerprintDialogMessage": { "message": "The browser extension you are using is out of date. Please update it or disable browser integration fingerprint validation in the desktop app settings." + }, + "changeAtRiskPassword": { + "message": "Change at-risk password" } } diff --git a/apps/desktop/src/locales/tr/messages.json b/apps/desktop/src/locales/tr/messages.json index 354bbfa823b..aa7d2b35a25 100644 --- a/apps/desktop/src/locales/tr/messages.json +++ b/apps/desktop/src/locales/tr/messages.json @@ -543,10 +543,6 @@ "message": "Özel karakterleri dahil et", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "numWords": { "message": "Kelime sayısı" }, @@ -652,6 +648,15 @@ "logInToBitwarden": { "message": "Bitwarden'a giriş yapın" }, + "enterTheCodeSentToYourEmail": { + "message": "E-posta adresinize gönderilen kodu girin" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Kimlik doğrulama uygulamanızdaki kodu girin" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Press your YubiKey to authenticate" + }, "logInWithPasskey": { "message": "Geçiş anahtarıyla giriş yap" }, @@ -704,6 +709,15 @@ "masterPassHintLabel": { "message": "Ana parola ipucu" }, + "passwordStrengthScore": { + "message": "Password strength score $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "joinOrganization": { "message": "Kuruluşa katıl" }, @@ -816,6 +830,9 @@ "webauthnCancelOrTimeout": { "message": "Kimlik doğrulama iptal edildi ve çok uzun sürdü. Lütfen yeniden deneyin." }, + "openInNewTab": { + "message": "Yeni sekmede aç" + }, "invalidVerificationCode": { "message": "Geçersiz doğrulama kodu" }, @@ -846,12 +863,22 @@ "rememberMe": { "message": "Beni hatırla" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Don't ask again on this device for 30 days" + }, "sendVerificationCodeEmailAgain": { "message": "Doğrulama kodunu yeniden e-postala" }, "useAnotherTwoStepMethod": { "message": "Başka bir iki aşamalı giriş yöntemini kullan" }, + "selectAnotherMethod": { + "message": "Select another method", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Use your recovery code" + }, "insertYubiKey": { "message": "YubiKey'i bilgisayarınızın USB portuna takın, ardından düğmesine dokunun." }, @@ -885,7 +912,7 @@ "message": "Kuruluşunuzun Duo Security doğrulaması için Duo Mobile uygulaması, SMS, telefon görüşmesi veya U2F güvenlik anahtarını kullanın.", "description": "'Duo Security' and 'Duo Mobile' are product names and should not be translated." }, - "verifyIdentity": { + "verifyYourIdentity": { "message": "Kimliğinizi doğrulayın" }, "weDontRecognizeThisDevice": { @@ -918,6 +945,9 @@ "twoStepOptions": { "message": "İki aşamalı giriş seçenekleri" }, + "selectTwoStepLoginMethod": { + "message": "Select two-step login method" + }, "selfHostedEnvironment": { "message": "Şirket içinde barındırılan ortam" }, @@ -2247,6 +2277,12 @@ "webAuthnAuthenticate": { "message": "WebAuthn ile doğrula" }, + "readSecurityKey": { + "message": "Read security key" + }, + "awaitingSecurityKeyInteraction": { + "message": "Awaiting security key interaction..." + }, "hideEmail": { "message": "E-posta adresimi alıcılardan gizle." }, @@ -3206,6 +3242,12 @@ "duoRequiredByOrgForAccount": { "message": "Hesabınız için Duo iki adımlı giriş gereklidir." }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Duo two-step login is required for your account. Follow the steps below to finish logging in." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Follow the steps below to finish logging in." + }, "launchDuo": { "message": "Duo'yu tarayıcıda aç" }, @@ -3463,9 +3505,27 @@ "sshkeyApprovalTitle": { "message": "Confirm SSH key usage" }, + "agentForwardingWarningTitle": { + "message": "Warning: Agent Forwarding" + }, + "agentForwardingWarningText": { + "message": "This request comes from a remote device that you are logged into" + }, "sshkeyApprovalMessageInfix": { "message": "is requesting access to" }, + "sshkeyApprovalMessageSuffix": { + "message": "in order to" + }, + "sshActionLogin": { + "message": "authenticate to a server" + }, + "sshActionSign": { + "message": "sign a message" + }, + "sshActionGitSign": { + "message": "sign a git commit" + }, "unknownApplication": { "message": "An application" }, @@ -3540,5 +3600,8 @@ }, "updateBrowserOrDisableFingerprintDialogMessage": { "message": "Kullandığınız tarayı uzantısı eskimiş. Lütfen uzantıyı güncelleyin veya masaüstü uygulamasının ayarlarından parmak izi doğrulaması için tarayıcı entegrasyonunu kapatın." + }, + "changeAtRiskPassword": { + "message": "Change at-risk password" } } diff --git a/apps/desktop/src/locales/uk/messages.json b/apps/desktop/src/locales/uk/messages.json index e07c875914d..474f445346b 100644 --- a/apps/desktop/src/locales/uk/messages.json +++ b/apps/desktop/src/locales/uk/messages.json @@ -543,10 +543,6 @@ "message": "Спеціальні символи", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "numWords": { "message": "Кількість слів" }, @@ -652,6 +648,15 @@ "logInToBitwarden": { "message": "Увійти в Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "Введіть код, надісланий вам електронною поштою" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Введіть код з програми автентифікації" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Натисніть свій YubiKey для автентифікації" + }, "logInWithPasskey": { "message": "Увійти з ключем доступу" }, @@ -704,6 +709,15 @@ "masterPassHintLabel": { "message": "Підказка для головного пароля" }, + "passwordStrengthScore": { + "message": "Рейтинг надійності пароля $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "joinOrganization": { "message": "Приєднатися до організації" }, @@ -816,6 +830,9 @@ "webauthnCancelOrTimeout": { "message": "Автентифікацію було скасовано або вона тривала надто довго. Повторіть спробу." }, + "openInNewTab": { + "message": "Відкрити в новій вкладці" + }, "invalidVerificationCode": { "message": "Недійсний код підтвердження" }, @@ -846,12 +863,22 @@ "rememberMe": { "message": "Запам'ятати мене" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Більше не запитувати на цьому пристрої протягом 30 днів" + }, "sendVerificationCodeEmailAgain": { "message": "Надіслати код підтвердження ще раз" }, "useAnotherTwoStepMethod": { "message": "Інший спосіб двоетапної перевірки" }, + "selectAnotherMethod": { + "message": "Обрати інший спосіб", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Використати код відновлення" + }, "insertYubiKey": { "message": "Вставте свій YubiKey в USB порт комп'ютера, потім торкніться цієї кнопки." }, @@ -885,7 +912,7 @@ "message": "Авторизуйтесь за допомогою Duo Security для вашої організації з використанням програми Duo Mobile, SMS, телефонного виклику, або ключа безпеки U2F.", "description": "'Duo Security' and 'Duo Mobile' are product names and should not be translated." }, - "verifyIdentity": { + "verifyYourIdentity": { "message": "Підтвердьте свою особу" }, "weDontRecognizeThisDevice": { @@ -918,6 +945,9 @@ "twoStepOptions": { "message": "Налаштування двоетапної перевірки" }, + "selectTwoStepLoginMethod": { + "message": "Виберіть спосіб двоетапної перевірки" + }, "selfHostedEnvironment": { "message": "Середовище власного хостингу" }, @@ -1237,7 +1267,7 @@ "message": "Завжди показувати піктограму в системному лотку." }, "startToTray": { - "message": "Запускати в згорнутому вигляді" + "message": "Запускати в системному лотку" }, "startToTrayDesc": { "message": "Під час першого запуску програми показувати лише піктограму в системному лотку." @@ -1776,7 +1806,7 @@ "message": "Вимагати пароль чи PIN під час запуску" }, "requirePasswordWithoutPinOnStart": { - "message": "Require password on app start" + "message": "Вимагати пароль під час запуску" }, "recommendedForSecurity": { "message": "Рекомендовано для безпеки." @@ -2247,6 +2277,12 @@ "webAuthnAuthenticate": { "message": "Автентифікація WebAuthn" }, + "readSecurityKey": { + "message": "Зчитати ключ безпеки" + }, + "awaitingSecurityKeyInteraction": { + "message": "Очікується взаємодія з ключем безпеки..." + }, "hideEmail": { "message": "Приховувати мою адресу електронної пошти від отримувачів." }, @@ -3206,6 +3242,12 @@ "duoRequiredByOrgForAccount": { "message": "Для вашого облікового запису необхідна двоетапна перевірка з Duo." }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Для вашого облікового запису необхідно пройти двоетапну перевірку з Duo. Виконайте наведені нижче кроки, щоб завершити вхід." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Виконайте наведені нижче кроки, щоб завершити вхід." + }, "launchDuo": { "message": "Запустити Duo в браузері" }, @@ -3463,9 +3505,27 @@ "sshkeyApprovalTitle": { "message": "Підтвердження використання ключа SSH" }, + "agentForwardingWarningTitle": { + "message": "Попередження: переспрямування агента" + }, + "agentForwardingWarningText": { + "message": "Цей запит здійснюється з віддаленого пристрою, до якого ви ввійшли" + }, "sshkeyApprovalMessageInfix": { "message": "запитує доступ до" }, + "sshkeyApprovalMessageSuffix": { + "message": "щоб" + }, + "sshActionLogin": { + "message": "пройти автентифікацію на сервері" + }, + "sshActionSign": { + "message": "підписати повідомлення" + }, + "sshActionGitSign": { + "message": "підписати git коміт" + }, "unknownApplication": { "message": "Програма" }, @@ -3540,5 +3600,8 @@ }, "updateBrowserOrDisableFingerprintDialogMessage": { "message": "Ви використовуєте застарілу версію розширення браузера. Оновіть його або вимкніть перевірку цифрового відбитка інтеграції з браузером у налаштуваннях комп'ютерної програми." + }, + "changeAtRiskPassword": { + "message": "Змінити ризикований пароль" } } diff --git a/apps/desktop/src/locales/vi/messages.json b/apps/desktop/src/locales/vi/messages.json index 96e12ee40da..472a0e29f22 100644 --- a/apps/desktop/src/locales/vi/messages.json +++ b/apps/desktop/src/locales/vi/messages.json @@ -543,10 +543,6 @@ "message": "Include special characters", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "numWords": { "message": "Số lượng chữ" }, @@ -652,6 +648,15 @@ "logInToBitwarden": { "message": "Log in to Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "Enter the code sent to your email" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Enter the code from your authenticator app" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Press your YubiKey to authenticate" + }, "logInWithPasskey": { "message": "Log in with passkey" }, @@ -704,6 +709,15 @@ "masterPassHintLabel": { "message": "Gợi ý mật khẩu chính" }, + "passwordStrengthScore": { + "message": "Password strength score $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "joinOrganization": { "message": "Tham gia tổ chức" }, @@ -816,6 +830,9 @@ "webauthnCancelOrTimeout": { "message": "Quá trình xác thực đã bị hủy hoặc mất quá nhiều thời gian. Vui lòng thử lại." }, + "openInNewTab": { + "message": "Open in new tab" + }, "invalidVerificationCode": { "message": "Mã xác minh không đúng" }, @@ -846,12 +863,22 @@ "rememberMe": { "message": "Ghi nhớ đăng nhập" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Don't ask again on this device for 30 days" + }, "sendVerificationCodeEmailAgain": { "message": "Gửi lại email chứa mã xác minh" }, "useAnotherTwoStepMethod": { "message": "Sử dụng phương pháp xác minh hai lớp khác" }, + "selectAnotherMethod": { + "message": "Select another method", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Use your recovery code" + }, "insertYubiKey": { "message": "Cắm YubiKey vào cổng USB trên máy tính bạn và bấm nút trên Yubikey." }, @@ -885,7 +912,7 @@ "message": "Xác minh với Duo Security cho tổ chức của bạn sử dụng ứng dụng Duo Mobile, SMS, cuộc gọi điện thoại, hoặc khoá bảo mật U2F.", "description": "'Duo Security' and 'Duo Mobile' are product names and should not be translated." }, - "verifyIdentity": { + "verifyYourIdentity": { "message": "Verify your Identity" }, "weDontRecognizeThisDevice": { @@ -918,6 +945,9 @@ "twoStepOptions": { "message": "Tùy chọn xác minh hai bước" }, + "selectTwoStepLoginMethod": { + "message": "Select two-step login method" + }, "selfHostedEnvironment": { "message": "Môi trường tự lưu trữ" }, @@ -2247,6 +2277,12 @@ "webAuthnAuthenticate": { "message": "Xác thực WebAuthn" }, + "readSecurityKey": { + "message": "Read security key" + }, + "awaitingSecurityKeyInteraction": { + "message": "Awaiting security key interaction..." + }, "hideEmail": { "message": "Ẩn địa chỉ email của tôi khỏi người nhận." }, @@ -3206,6 +3242,12 @@ "duoRequiredByOrgForAccount": { "message": "Tài khoản của bạn yêu cầu xác minh hai bước với Duo." }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Duo two-step login is required for your account. Follow the steps below to finish logging in." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Follow the steps below to finish logging in." + }, "launchDuo": { "message": "Khởi chạy Duo trong trình duyệt" }, @@ -3463,9 +3505,27 @@ "sshkeyApprovalTitle": { "message": "Confirm SSH key usage" }, + "agentForwardingWarningTitle": { + "message": "Warning: Agent Forwarding" + }, + "agentForwardingWarningText": { + "message": "This request comes from a remote device that you are logged into" + }, "sshkeyApprovalMessageInfix": { "message": "is requesting access to" }, + "sshkeyApprovalMessageSuffix": { + "message": "in order to" + }, + "sshActionLogin": { + "message": "authenticate to a server" + }, + "sshActionSign": { + "message": "sign a message" + }, + "sshActionGitSign": { + "message": "sign a git commit" + }, "unknownApplication": { "message": "An application" }, @@ -3540,5 +3600,8 @@ }, "updateBrowserOrDisableFingerprintDialogMessage": { "message": "The browser extension you are using is out of date. Please update it or disable browser integration fingerprint validation in the desktop app settings." + }, + "changeAtRiskPassword": { + "message": "Change at-risk password" } } diff --git a/apps/desktop/src/locales/zh_CN/messages.json b/apps/desktop/src/locales/zh_CN/messages.json index fd1697e06b4..a28d08b0ff8 100644 --- a/apps/desktop/src/locales/zh_CN/messages.json +++ b/apps/desktop/src/locales/zh_CN/messages.json @@ -459,7 +459,7 @@ "message": "确定要覆盖当前用户名吗?" }, "noneFolder": { - "message": "无文件夹", + "message": "默认文件夹", "description": "This is the folder for uncategorized items" }, "addFolder": { @@ -543,10 +543,6 @@ "message": "包含特殊字符", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "numWords": { "message": "单词数" }, @@ -652,6 +648,15 @@ "logInToBitwarden": { "message": "登录到 Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "输入发送到您的电子邮箱的代码" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "输入来自您的验证器 App 的代码" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "按下 YubiKey 以验证身份" + }, "logInWithPasskey": { "message": "使用通行密钥登录" }, @@ -704,6 +709,15 @@ "masterPassHintLabel": { "message": "主密码提示" }, + "passwordStrengthScore": { + "message": "密码强度评分 $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "joinOrganization": { "message": "加入组织" }, @@ -816,6 +830,9 @@ "webauthnCancelOrTimeout": { "message": "身份验证被取消或耗时过长。请重试。" }, + "openInNewTab": { + "message": "在新标签页中打开" + }, "invalidVerificationCode": { "message": "无效的验证码" }, @@ -846,17 +863,27 @@ "rememberMe": { "message": "记住我" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "30 天内在此设备上不再询问" + }, "sendVerificationCodeEmailAgain": { "message": "再次发送验证码电子邮件" }, "useAnotherTwoStepMethod": { "message": "使用其他两步登录方式" }, + "selectAnotherMethod": { + "message": "选择其他方式", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "使用您的恢复代码" + }, "insertYubiKey": { "message": "将您的 YubiKey 插入计算机的 USB 端口,然后触摸其按钮。" }, "insertU2f": { - "message": "将您的安全钥匙插入计算机的 USB 端口。如果它有按钮,请触摸它。" + "message": "将您的安全密钥插入计算机的 USB 端口。如果它有按钮,请触摸它。" }, "recoveryCodeDesc": { "message": "无法访问您所有的双重身份提供程序吗?请使用您的恢复代码来关闭您账户中所有的双重身份提供程序。" @@ -872,7 +899,7 @@ "description": "'Bitwarden Authenticator' is a product name and should not be translated." }, "yubiKeyTitleV2": { - "message": "Yubico OTP 安全钥匙" + "message": "Yubico OTP 安全密钥" }, "yubiKeyDesc": { "message": "使用 YubiKey 来访问您的账户。支持 YubiKey 4、4 Nano、4C 以及 NEO 设备。" @@ -882,10 +909,10 @@ "description": "'Duo Security' and 'Duo Mobile' are product names and should not be translated." }, "duoOrganizationDesc": { - "message": "为您的组织使用 Duo Security 的 Duo 移动 App、短信、电话或 U2F 安全钥匙来进行验证。", + "message": "为您的组织使用 Duo Security 的 Duo 移动 App、短信、电话或 U2F 安全密钥来进行验证。", "description": "'Duo Security' and 'Duo Mobile' are product names and should not be translated." }, - "verifyIdentity": { + "verifyYourIdentity": { "message": "验证您的身份" }, "weDontRecognizeThisDevice": { @@ -898,7 +925,7 @@ "message": "FIDO2 WebAuthn" }, "webAuthnDesc": { - "message": "使用任何 WebAuthn 兼容的安全钥匙访问您的帐户。" + "message": "使用任何 WebAuthn 兼容的安全密钥访问您的帐户。" }, "emailTitle": { "message": "电子邮箱" @@ -913,11 +940,14 @@ "message": "此账户已设置两步登录,但此设备不支持任何已配置的两步登录提供程序。" }, "noTwoStepProviders2": { - "message": "请添加能更好支持跨设备使用的其他提供程序(例如验证器 App)。" + "message": "请添加其他跨设备支持更好的提供程序(例如验证器 App)。" }, "twoStepOptions": { "message": "两步登录选项" }, + "selectTwoStepLoginMethod": { + "message": "选择两步登录方式" + }, "selfHostedEnvironment": { "message": "自托管环境" }, @@ -1127,7 +1157,7 @@ "message": "无效的主密码" }, "twoStepLoginConfirmation": { - "message": "两步登录要求您从其他设备(例如安全钥匙、验证器 App、短信、电话或者电子邮件)来验证您的登录,这能使您的账户更加安全。两步登录需要在 bitwarden.com 网页版密码库中设置。现在访问此网站吗?" + "message": "两步登录要求您从其他设备(例如安全密钥、验证器 App、短信、电话或者电子邮件)来验证您的登录,这能使您的账户更加安全。两步登录需要在 bitwarden.com 网页版密码库中设置。现在访问此网站吗?" }, "twoStepLogin": { "message": "两步登录" @@ -1398,7 +1428,7 @@ "message": "感谢您支持 Bitwarden。" }, "premiumPrice": { - "message": "全部仅需 $PRICE$ /年!", + "message": "所有功能仅需 $PRICE$ /年!", "placeholders": { "price": { "content": "$1", @@ -1542,7 +1572,7 @@ "message": "没有在已知的数据泄露中发现此密码,它暂时比较安全。" }, "baseDomain": { - "message": "基础域", + "message": "基础域名", "description": "Domain name. Ex. website.com" }, "domainName": { @@ -1585,7 +1615,7 @@ "message": "退出" }, "showHide": { - "message": "显示/隐藏", + "message": "显示 / 隐藏", "description": "Text for a button that toggles the visibility of the window. Shows the window when it is hidden or hides the window if it is currently open." }, "hideToTray": { @@ -1721,7 +1751,7 @@ "message": "脆弱的主密码" }, "weakMasterPasswordDesc": { - "message": "您选择的主密码较弱。您应该使用强密码(或密码短语)来正确保护您的 Bitwarden 账户。仍要使用此主密码吗?" + "message": "您选择的主密码较弱。您应该使用强密码(或密码短语)来正确保护您的 Bitwarden 账户。确定要使用这个主密码吗?" }, "pin": { "message": "PIN 码", @@ -1764,19 +1794,19 @@ "message": "解锁您的密码库" }, "autoPromptWindowsHello": { - "message": "应用程序启动时要求使用 Windows Hello" + "message": "应用程序启动时提示 Windows Hello" }, "autoPromptPolkit": { - "message": "启动时请求系统身份验证" + "message": "启动时提示系统身份验证" }, "autoPromptTouchId": { - "message": "应用程序启动时要求使用触控 ID" + "message": "应用程序启动时提示触控 ID" }, "requirePasswordOnStart": { - "message": "应用程序启动时要求输入密码或 PIN 码" + "message": "应用程序启动时要求密码或 PIN 码" }, "requirePasswordWithoutPinOnStart": { - "message": "应用程序启动时需要密码" + "message": "应用程序启动时要求密码" }, "recommendedForSecurity": { "message": "安全起见,推荐设置。" @@ -2158,7 +2188,7 @@ "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "createdSend": { - "message": "Send 已创建", + "message": "Send 已添加", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "editedSend": { @@ -2177,7 +2207,7 @@ "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "createSend": { - "message": "创建 Send", + "message": "新增 Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "sendTextDesc": { @@ -2247,6 +2277,12 @@ "webAuthnAuthenticate": { "message": "验证 WebAuthn" }, + "readSecurityKey": { + "message": "读取安全密钥" + }, + "awaitingSecurityKeyInteraction": { + "message": "等待安全密钥交互……" + }, "hideEmail": { "message": "对接收者隐藏我的电子邮箱地址。" }, @@ -2287,7 +2323,7 @@ "message": "您的组织禁用了信任设备加密。要访问您的密码库,请设置一个主密码。" }, "tryAgain": { - "message": "请重试" + "message": "重试" }, "verificationRequiredForActionSetPinToContinue": { "message": "此操作需要验证。设置一个 PIN 码以继续。" @@ -3206,6 +3242,12 @@ "duoRequiredByOrgForAccount": { "message": "您的账户要求使用 Duo 两步登录。" }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "您的账户要求使用 Duo 两步登录。请按照以下步骤完成登录。" + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "按照以下步骤完成登录。" + }, "launchDuo": { "message": "在浏览器中启动 Duo" }, @@ -3463,9 +3505,27 @@ "sshkeyApprovalTitle": { "message": "确认 SSH 密钥的使用" }, + "agentForwardingWarningTitle": { + "message": "警告:代理转发" + }, + "agentForwardingWarningText": { + "message": "此请求来自您登录的某台远程设备" + }, "sshkeyApprovalMessageInfix": { "message": "正在请求访问" }, + "sshkeyApprovalMessageSuffix": { + "message": "为了" + }, + "sshActionLogin": { + "message": "向服务器验证身份" + }, + "sshActionSign": { + "message": "签署一条消息" + }, + "sshActionGitSign": { + "message": "签名一个 Git 提交" + }, "unknownApplication": { "message": "某个应用程序" }, @@ -3540,5 +3600,8 @@ }, "updateBrowserOrDisableFingerprintDialogMessage": { "message": "您正在使用的浏览器扩展已过时。请更新它或在桌面 App 的设置中禁用浏览器集成指纹验证。" + }, + "changeAtRiskPassword": { + "message": "更改有风险的密码" } } diff --git a/apps/desktop/src/locales/zh_TW/messages.json b/apps/desktop/src/locales/zh_TW/messages.json index 9f64b0fd8cf..f1819efdf7e 100644 --- a/apps/desktop/src/locales/zh_TW/messages.json +++ b/apps/desktop/src/locales/zh_TW/messages.json @@ -543,10 +543,6 @@ "message": "包含特殊字元", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "numWords": { "message": "單字數" }, @@ -652,6 +648,15 @@ "logInToBitwarden": { "message": "登入 Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "Enter the code sent to your email" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Enter the code from your authenticator app" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Press your YubiKey to authenticate" + }, "logInWithPasskey": { "message": "以通行密鑰 (passkey) 登入" }, @@ -704,6 +709,15 @@ "masterPassHintLabel": { "message": "主密碼提示" }, + "passwordStrengthScore": { + "message": "Password strength score $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "joinOrganization": { "message": "加入組織" }, @@ -816,6 +830,9 @@ "webauthnCancelOrTimeout": { "message": "驗證已被取消或時間過長。請再試一次。" }, + "openInNewTab": { + "message": "Open in new tab" + }, "invalidVerificationCode": { "message": "無效的驗證碼" }, @@ -846,12 +863,22 @@ "rememberMe": { "message": "記住我" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Don't ask again on this device for 30 days" + }, "sendVerificationCodeEmailAgain": { "message": "再次傳送​​包含驗證碼的電子郵件" }, "useAnotherTwoStepMethod": { "message": "使用另一種兩步驟登入方式" }, + "selectAnotherMethod": { + "message": "Select another method", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Use your recovery code" + }, "insertYubiKey": { "message": "將您的 YubiKey 插入電腦的 USB 連接埠,然後按一下它的按鈕。" }, @@ -885,7 +912,7 @@ "message": "爲您的組織使用 Duo Security 的 Duo Mobile 程式、SMS、致電或 U2F 安全鑰匙進行驗證。", "description": "'Duo Security' and 'Duo Mobile' are product names and should not be translated." }, - "verifyIdentity": { + "verifyYourIdentity": { "message": "Verify your Identity" }, "weDontRecognizeThisDevice": { @@ -918,6 +945,9 @@ "twoStepOptions": { "message": "兩步驟登入選項" }, + "selectTwoStepLoginMethod": { + "message": "Select two-step login method" + }, "selfHostedEnvironment": { "message": "自我裝載環境" }, @@ -2247,6 +2277,12 @@ "webAuthnAuthenticate": { "message": "驗證 WebAuthn" }, + "readSecurityKey": { + "message": "Read security key" + }, + "awaitingSecurityKeyInteraction": { + "message": "Awaiting security key interaction..." + }, "hideEmail": { "message": "對收件人隱藏我的電子郵件位址。" }, @@ -3206,6 +3242,12 @@ "duoRequiredByOrgForAccount": { "message": "您的帳號要求使用 Duo 兩步驟驗證登入。" }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Duo two-step login is required for your account. Follow the steps below to finish logging in." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Follow the steps below to finish logging in." + }, "launchDuo": { "message": "使用瀏覽器啟動 Duo" }, @@ -3463,9 +3505,27 @@ "sshkeyApprovalTitle": { "message": "確認 SSH 密鑰使用" }, + "agentForwardingWarningTitle": { + "message": "Warning: Agent Forwarding" + }, + "agentForwardingWarningText": { + "message": "This request comes from a remote device that you are logged into" + }, "sshkeyApprovalMessageInfix": { "message": "正在請求存取權限到" }, + "sshkeyApprovalMessageSuffix": { + "message": "in order to" + }, + "sshActionLogin": { + "message": "authenticate to a server" + }, + "sshActionSign": { + "message": "sign a message" + }, + "sshActionGitSign": { + "message": "sign a git commit" + }, "unknownApplication": { "message": "應用程式" }, @@ -3540,5 +3600,8 @@ }, "updateBrowserOrDisableFingerprintDialogMessage": { "message": "The browser extension you are using is out of date. Please update it or disable browser integration fingerprint validation in the desktop app settings." + }, + "changeAtRiskPassword": { + "message": "Change at-risk password" } } diff --git a/apps/desktop/src/main.ts b/apps/desktop/src/main.ts index c6e074ead91..4e167f30ec8 100644 --- a/apps/desktop/src/main.ts +++ b/apps/desktop/src/main.ts @@ -1,5 +1,7 @@ // FIXME: Update this file to be type safe and remove this and next line // @ts-strict-ignore +import "core-js/proposals/explicit-resource-management"; + import * as path from "path"; import { app } from "electron"; @@ -28,6 +30,7 @@ import { MemoryStorageService as MemoryStorageServiceForStateProviders } from "@ import { DefaultBiometricStateService } from "@bitwarden/key-management"; /* eslint-enable import/no-restricted-paths */ +import { MainSshAgentService } from "./autofill/main/main-ssh-agent.service"; import { DesktopAutofillSettingsService } from "./autofill/services/desktop-autofill-settings.service"; import { DesktopBiometricsService } from "./key-management/biometrics/desktop.biometrics.service"; import { MainBiometricsIPCListener } from "./key-management/biometrics/main-biometrics-ipc.listener"; @@ -43,7 +46,6 @@ import { NativeAutofillMain } from "./platform/main/autofill/native-autofill.mai import { ClipboardMain } from "./platform/main/clipboard.main"; import { DesktopCredentialStorageListener } from "./platform/main/desktop-credential-storage-listener"; import { MainCryptoFunctionService } from "./platform/main/main-crypto-function.service"; -import { MainSshAgentService } from "./platform/main/main-ssh-agent.service"; import { VersionMain } from "./platform/main/version.main"; import { DesktopSettingsService } from "./platform/services/desktop-settings.service"; import { ElectronLogMainService } from "./platform/services/electron-log.main.service"; diff --git a/apps/desktop/src/main/window.main.ts b/apps/desktop/src/main/window.main.ts index e05ce100675..17f74b78d4c 100644 --- a/apps/desktop/src/main/window.main.ts +++ b/apps/desktop/src/main/window.main.ts @@ -9,6 +9,7 @@ import { firstValueFrom } from "rxjs"; import { LogService } from "@bitwarden/common/platform/abstractions/log.service"; import { AbstractStorageService } from "@bitwarden/common/platform/abstractions/storage.service"; +import { ThemeTypes, Theme } from "@bitwarden/common/platform/enums"; import { processisolations } from "@bitwarden/desktop-napi"; import { BiometricStateService } from "@bitwarden/key-management"; @@ -91,7 +92,6 @@ export class WindowMain { app.quit(); return; } else { - // eslint-disable-next-line app.on("second-instance", (event, argv, workingDirectory) => { // Someone tried to run a second instance, we should focus our window. if (this.win != null) { @@ -298,11 +298,15 @@ export class WindowMain { } // Retrieve the background color - // Resolves background color missmatch when starting the application. + // Resolves background color mismatch when starting the application. async getBackgroundColor(): Promise { let theme = await this.storageService.get("global_theming_selection"); - if (theme == null || theme === "system") { + if ( + theme == null || + !Object.values(ThemeTypes).includes(theme as Theme) || + theme === "system" + ) { theme = nativeTheme.shouldUseDarkColors ? "dark" : "light"; } @@ -311,8 +315,6 @@ export class WindowMain { return "#ededed"; case "dark": return "#15181e"; - case "nord": - return "#3b4252"; } } diff --git a/apps/desktop/src/package-lock.json b/apps/desktop/src/package-lock.json index bd54446f4e4..effbb27ad23 100644 --- a/apps/desktop/src/package-lock.json +++ b/apps/desktop/src/package-lock.json @@ -1,12 +1,12 @@ { "name": "@bitwarden/desktop", - "version": "2025.2.2", + "version": "2025.3.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@bitwarden/desktop", - "version": "2025.2.2", + "version": "2025.2.1", "license": "GPL-3.0", "dependencies": { "@bitwarden/desktop-napi": "file:../desktop_native/napi" diff --git a/apps/desktop/src/package.json b/apps/desktop/src/package.json index 3c504913522..713d9074f8c 100644 --- a/apps/desktop/src/package.json +++ b/apps/desktop/src/package.json @@ -2,7 +2,7 @@ "name": "@bitwarden/desktop", "productName": "Bitwarden", "description": "A secure and free password manager for all of your devices.", - "version": "2025.2.2", + "version": "2025.3.0", "author": "Bitwarden Inc. (https://bitwarden.com)", "homepage": "https://bitwarden.com", "license": "GPL-3.0", diff --git a/apps/desktop/src/platform/components/approve-ssh-request.html b/apps/desktop/src/platform/components/approve-ssh-request.html index eac451a1fbe..952e3344e9c 100644 --- a/apps/desktop/src/platform/components/approve-ssh-request.html +++ b/apps/desktop/src/platform/components/approve-ssh-request.html @@ -2,8 +2,17 @@
{{ "sshkeyApprovalTitle" | i18n }}
+ + {{ 'agentForwardingWarningText' | i18n }} + + {{params.applicationName}} {{ "sshkeyApprovalMessageInfix" | i18n }} - {{params.cipherName}}. + {{params.cipherName}} + {{ "sshkeyApprovalMessageSuffix" | i18n }} {{ params.action | i18n }}
-
-
- {{ "verificationCodeTotp" | i18n }} - {{ totpCodeFormatted }} -
- -
- + {{ totpInfo.totpCodeFormatted }} +
+ +
+ +
- + +
{{ "verificationCodeTotp" | i18n }} diff --git a/apps/desktop/tailwind.config.js b/apps/desktop/tailwind.config.js index 50e5799bc61..5b4cab027ba 100644 --- a/apps/desktop/tailwind.config.js +++ b/apps/desktop/tailwind.config.js @@ -1,4 +1,4 @@ -/* eslint-disable no-undef, @typescript-eslint/no-require-imports */ +/* eslint-disable @typescript-eslint/no-require-imports */ const config = require("../../libs/components/tailwind.config.base"); config.content = [ diff --git a/apps/desktop/test.setup.ts b/apps/desktop/test.setup.ts index 224262ec83e..5c248668a6d 100644 --- a/apps/desktop/test.setup.ts +++ b/apps/desktop/test.setup.ts @@ -1,4 +1,4 @@ -import "jest-preset-angular/setup-jest"; +import "@bitwarden/ui-common/setup-jest"; Object.defineProperty(window, "CSS", { value: null }); Object.defineProperty(window, "getComputedStyle", { diff --git a/apps/desktop/tsconfig.json b/apps/desktop/tsconfig.json index 05253fc47d7..78b3512405e 100644 --- a/apps/desktop/tsconfig.json +++ b/apps/desktop/tsconfig.json @@ -31,6 +31,7 @@ "@bitwarden/send-ui": ["../../libs/tools/send/send-ui/src"], "@bitwarden/tools-card": ["../../libs/tools/card/src"], "@bitwarden/ui-common": ["../../libs/ui/common/src"], + "@bitwarden/ui-common/setup-jest": ["../../libs/ui/common/src/setup-jest"], "@bitwarden/vault-export-core": [ "../../libs/tools/export/vault-export/vault-export-core/src" ], diff --git a/apps/web/package.json b/apps/web/package.json index 3c5e243b47e..25890cf4b6e 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -1,6 +1,6 @@ { "name": "@bitwarden/web-vault", - "version": "2025.2.2", + "version": "2025.3.0", "scripts": { "build:oss": "cross-env NODE_OPTIONS=\"--max-old-space-size=8192\" webpack", "build:bit": "cross-env NODE_OPTIONS=\"--max-old-space-size=8192\" webpack -c ../../bitwarden_license/bit-web/webpack.config.js", diff --git a/apps/web/postcss.config.js b/apps/web/postcss.config.js index 05e2b04124f..5657df3afcf 100644 --- a/apps/web/postcss.config.js +++ b/apps/web/postcss.config.js @@ -1,4 +1,4 @@ -/* eslint-disable @typescript-eslint/no-require-imports, no-undef */ +/* eslint-disable @typescript-eslint/no-require-imports */ module.exports = { plugins: [ require("postcss-import"), diff --git a/apps/web/src/app/admin-console/common/base.people.component.ts b/apps/web/src/app/admin-console/common/base.people.component.ts deleted file mode 100644 index 07ae67ac33b..00000000000 --- a/apps/web/src/app/admin-console/common/base.people.component.ts +++ /dev/null @@ -1,425 +0,0 @@ -// FIXME: Update this file to be type safe and remove this and next line -// @ts-strict-ignore -import { Directive, ViewChild, ViewContainerRef } from "@angular/core"; -import { FormControl } from "@angular/forms"; -import { firstValueFrom, concatMap, map, lastValueFrom, startWith, debounceTime } from "rxjs"; - -import { SearchPipe } from "@bitwarden/angular/pipes/search.pipe"; -import { UserNamePipe } from "@bitwarden/angular/pipes/user-name.pipe"; -import { ApiService } from "@bitwarden/common/abstractions/api.service"; -import { SearchService } from "@bitwarden/common/abstractions/search.service"; -import { OrganizationManagementPreferencesService } from "@bitwarden/common/admin-console/abstractions/organization-management-preferences/organization-management-preferences.service"; -import { - OrganizationUserStatusType, - OrganizationUserType, - ProviderUserStatusType, - ProviderUserType, -} from "@bitwarden/common/admin-console/enums"; -import { ProviderUserUserDetailsResponse } from "@bitwarden/common/admin-console/models/response/provider/provider-user.response"; -import { ListResponse } from "@bitwarden/common/models/response/list.response"; -import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; -import { LogService } from "@bitwarden/common/platform/abstractions/log.service"; -import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service"; -import { ValidationService } from "@bitwarden/common/platform/abstractions/validation.service"; -import { Utils } from "@bitwarden/common/platform/misc/utils"; -import { DialogService, ToastService } from "@bitwarden/components"; -import { KeyService } from "@bitwarden/key-management"; - -import { OrganizationUserView } from "../organizations/core/views/organization-user.view"; -import { UserConfirmComponent } from "../organizations/manage/user-confirm.component"; - -type StatusType = OrganizationUserStatusType | ProviderUserStatusType; - -const MaxCheckedCount = 500; - -@Directive() -export abstract class BasePeopleComponent< - UserType extends ProviderUserUserDetailsResponse | OrganizationUserView, -> { - @ViewChild("confirmTemplate", { read: ViewContainerRef, static: true }) - confirmModalRef: ViewContainerRef; - - get allCount() { - return this.activeUsers != null ? this.activeUsers.length : 0; - } - - get invitedCount() { - return this.statusMap.has(this.userStatusType.Invited) - ? this.statusMap.get(this.userStatusType.Invited).length - : 0; - } - - get acceptedCount() { - return this.statusMap.has(this.userStatusType.Accepted) - ? this.statusMap.get(this.userStatusType.Accepted).length - : 0; - } - - get confirmedCount() { - return this.statusMap.has(this.userStatusType.Confirmed) - ? this.statusMap.get(this.userStatusType.Confirmed).length - : 0; - } - - get revokedCount() { - return this.statusMap.has(this.userStatusType.Revoked) - ? this.statusMap.get(this.userStatusType.Revoked).length - : 0; - } - - get showConfirmUsers(): boolean { - return ( - this.activeUsers != null && - this.statusMap != null && - this.activeUsers.length > 1 && - this.confirmedCount > 0 && - this.confirmedCount < 3 && - this.acceptedCount > 0 - ); - } - - get showBulkConfirmUsers(): boolean { - return this.acceptedCount > 0; - } - - abstract userType: typeof OrganizationUserType | typeof ProviderUserType; - abstract userStatusType: typeof OrganizationUserStatusType | typeof ProviderUserStatusType; - - loading = true; - statusMap = new Map(); - status: StatusType; - users: UserType[] = []; - pagedUsers: UserType[] = []; - actionPromise: Promise; - - protected allUsers: UserType[] = []; - protected activeUsers: UserType[] = []; - - protected didScroll = false; - protected pageSize = 100; - - protected searchControl = new FormControl("", { nonNullable: true }); - protected isSearching$ = this.searchControl.valueChanges.pipe( - debounceTime(500), - concatMap((searchText) => this.searchService.isSearchable(searchText)), - startWith(false), - ); - protected isPaging$ = this.isSearching$.pipe( - map((isSearching) => { - if (isSearching && this.didScroll) { - this.resetPaging(); - } - return !isSearching && this.users && this.users.length > this.pageSize; - }), - ); - - private pagedUsersCount = 0; - - constructor( - protected apiService: ApiService, - private searchService: SearchService, - protected i18nService: I18nService, - protected platformUtilsService: PlatformUtilsService, - protected keyService: KeyService, - protected validationService: ValidationService, - private logService: LogService, - private searchPipe: SearchPipe, - protected userNamePipe: UserNamePipe, - protected dialogService: DialogService, - protected organizationManagementPreferencesService: OrganizationManagementPreferencesService, - protected toastService: ToastService, - ) {} - - abstract edit(user: UserType): void; - abstract getUsers(): Promise | UserType[]>; - abstract deleteUser(id: string): Promise; - abstract revokeUser(id: string): Promise; - abstract restoreUser(id: string): Promise; - abstract reinviteUser(id: string): Promise; - abstract confirmUser(user: UserType, publicKey: Uint8Array): Promise; - - async load() { - const response = await this.getUsers(); - this.statusMap.clear(); - this.activeUsers = []; - for (const status of Utils.iterateEnum(this.userStatusType)) { - this.statusMap.set(status, []); - } - - if (response instanceof ListResponse) { - this.allUsers = response.data != null && response.data.length > 0 ? response.data : []; - } else if (Array.isArray(response)) { - this.allUsers = response; - } - - this.allUsers.sort( - Utils.getSortFunction( - this.i18nService, - "email", - ), - ); - this.allUsers.forEach((u) => { - if (!this.statusMap.has(u.status)) { - this.statusMap.set(u.status, [u]); - } else { - this.statusMap.get(u.status).push(u); - } - if (u.status !== this.userStatusType.Revoked) { - this.activeUsers.push(u); - } - }); - this.filter(this.status); - this.loading = false; - } - - filter(status: StatusType) { - this.status = status; - if (this.status != null) { - this.users = this.statusMap.get(this.status); - } else { - this.users = this.activeUsers; - } - // Reset checkbox selecton - this.selectAll(false); - this.resetPaging(); - } - - loadMore() { - if (!this.users || this.users.length <= this.pageSize) { - return; - } - const pagedLength = this.pagedUsers.length; - let pagedSize = this.pageSize; - if (pagedLength === 0 && this.pagedUsersCount > this.pageSize) { - pagedSize = this.pagedUsersCount; - } - if (this.users.length > pagedLength) { - this.pagedUsers = this.pagedUsers.concat( - this.users.slice(pagedLength, pagedLength + pagedSize), - ); - } - this.pagedUsersCount = this.pagedUsers.length; - this.didScroll = this.pagedUsers.length > this.pageSize; - } - - checkUser(user: UserType, select?: boolean) { - (user as any).checked = select == null ? !(user as any).checked : select; - } - - selectAll(select: boolean) { - if (select) { - this.selectAll(false); - } - - const filteredUsers = this.searchPipe.transform( - this.users, - this.searchControl.value, - "name", - "email", - "id", - ); - - const selectCount = - select && filteredUsers.length > MaxCheckedCount ? MaxCheckedCount : filteredUsers.length; - for (let i = 0; i < selectCount; i++) { - this.checkUser(filteredUsers[i], select); - } - } - - resetPaging() { - this.pagedUsers = []; - this.loadMore(); - } - - invite() { - this.edit(null); - } - - protected async removeUserConfirmationDialog(user: UserType) { - return this.dialogService.openSimpleDialog({ - title: this.userNamePipe.transform(user), - content: { key: "removeUserConfirmation" }, - type: "warning", - }); - } - - async remove(user: UserType) { - const confirmed = await this.removeUserConfirmationDialog(user); - if (!confirmed) { - return false; - } - - this.actionPromise = this.deleteUser(user.id); - try { - await this.actionPromise; - this.toastService.showToast({ - variant: "success", - title: null, - message: this.i18nService.t("removedUserId", this.userNamePipe.transform(user)), - }); - this.removeUser(user); - } catch (e) { - this.validationService.showError(e); - } - this.actionPromise = null; - } - - protected async revokeUserConfirmationDialog(user: UserType) { - return this.dialogService.openSimpleDialog({ - title: { key: "revokeAccess", placeholders: [this.userNamePipe.transform(user)] }, - content: this.revokeWarningMessage(), - acceptButtonText: { key: "revokeAccess" }, - type: "warning", - }); - } - - async revoke(user: UserType) { - const confirmed = await this.revokeUserConfirmationDialog(user); - - if (!confirmed) { - return false; - } - - this.actionPromise = this.revokeUser(user.id); - try { - await this.actionPromise; - this.toastService.showToast({ - variant: "success", - title: null, - message: this.i18nService.t("revokedUserId", this.userNamePipe.transform(user)), - }); - await this.load(); - } catch (e) { - this.validationService.showError(e); - } - this.actionPromise = null; - } - - async restore(user: UserType) { - this.actionPromise = this.restoreUser(user.id); - try { - await this.actionPromise; - this.toastService.showToast({ - variant: "success", - title: null, - message: this.i18nService.t("restoredUserId", this.userNamePipe.transform(user)), - }); - await this.load(); - } catch (e) { - this.validationService.showError(e); - } - this.actionPromise = null; - } - - async reinvite(user: UserType) { - if (this.actionPromise != null) { - return; - } - - this.actionPromise = this.reinviteUser(user.id); - try { - await this.actionPromise; - this.toastService.showToast({ - variant: "success", - title: null, - message: this.i18nService.t("hasBeenReinvited", this.userNamePipe.transform(user)), - }); - } catch (e) { - this.validationService.showError(e); - } - this.actionPromise = null; - } - - async confirm(user: UserType) { - function updateUser(self: BasePeopleComponent) { - user.status = self.userStatusType.Confirmed; - const mapIndex = self.statusMap.get(self.userStatusType.Accepted).indexOf(user); - if (mapIndex > -1) { - self.statusMap.get(self.userStatusType.Accepted).splice(mapIndex, 1); - self.statusMap.get(self.userStatusType.Confirmed).push(user); - } - } - - const confirmUser = async (publicKey: Uint8Array) => { - try { - this.actionPromise = this.confirmUser(user, publicKey); - await this.actionPromise; - updateUser(this); - this.toastService.showToast({ - variant: "success", - title: null, - message: this.i18nService.t("hasBeenConfirmed", this.userNamePipe.transform(user)), - }); - } catch (e) { - this.validationService.showError(e); - throw e; - } finally { - this.actionPromise = null; - } - }; - - if (this.actionPromise != null) { - return; - } - - try { - const publicKeyResponse = await this.apiService.getUserPublicKey(user.userId); - const publicKey = Utils.fromB64ToArray(publicKeyResponse.publicKey); - - const autoConfirm = await firstValueFrom( - this.organizationManagementPreferencesService.autoConfirmFingerPrints.state$, - ); - if (autoConfirm == null || !autoConfirm) { - const dialogRef = UserConfirmComponent.open(this.dialogService, { - data: { - name: this.userNamePipe.transform(user), - userId: user != null ? user.userId : null, - publicKey: publicKey, - confirmUser: () => confirmUser(publicKey), - }, - }); - await lastValueFrom(dialogRef.closed); - - return; - } - - try { - const fingerprint = await this.keyService.getFingerprint(user.userId, publicKey); - this.logService.info(`User's fingerprint: ${fingerprint.join("-")}`); - } catch (e) { - this.logService.error(e); - } - await confirmUser(publicKey); - } catch (e) { - this.logService.error(`Handled exception: ${e}`); - } - } - - protected revokeWarningMessage(): string { - return this.i18nService.t("revokeUserConfirmation"); - } - - protected getCheckedUsers() { - return this.users.filter((u) => (u as any).checked); - } - - protected removeUser(user: UserType) { - let index = this.users.indexOf(user); - if (index > -1) { - this.users.splice(index, 1); - this.resetPaging(); - } - - index = this.allUsers.indexOf(user); - if (index > -1) { - this.allUsers.splice(index, 1); - } - - if (this.statusMap.has(user.status)) { - index = this.statusMap.get(user.status).indexOf(user); - if (index > -1) { - this.statusMap.get(user.status).splice(index, 1); - } - } - } -} diff --git a/apps/web/src/app/vault/org-vault/bulk-collections-dialog/bulk-collections-dialog.component.html b/apps/web/src/app/admin-console/organizations/collections/bulk-collections-dialog/bulk-collections-dialog.component.html similarity index 100% rename from apps/web/src/app/vault/org-vault/bulk-collections-dialog/bulk-collections-dialog.component.html rename to apps/web/src/app/admin-console/organizations/collections/bulk-collections-dialog/bulk-collections-dialog.component.html diff --git a/apps/web/src/app/vault/org-vault/bulk-collections-dialog/bulk-collections-dialog.component.ts b/apps/web/src/app/admin-console/organizations/collections/bulk-collections-dialog/bulk-collections-dialog.component.ts similarity index 95% rename from apps/web/src/app/vault/org-vault/bulk-collections-dialog/bulk-collections-dialog.component.ts rename to apps/web/src/app/admin-console/organizations/collections/bulk-collections-dialog/bulk-collections-dialog.component.ts index 4058c1151fb..dc08b32ce36 100644 --- a/apps/web/src/app/vault/org-vault/bulk-collections-dialog/bulk-collections-dialog.component.ts +++ b/apps/web/src/app/admin-console/organizations/collections/bulk-collections-dialog/bulk-collections-dialog.component.ts @@ -20,7 +20,8 @@ import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.servic import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service"; import { DialogService, ToastService } from "@bitwarden/components"; -import { GroupApiService, GroupView } from "../../../admin-console/organizations/core"; +import { SharedModule } from "../../../../shared"; +import { GroupApiService, GroupView } from "../../core"; import { AccessItemType, AccessItemValue, @@ -30,8 +31,7 @@ import { mapGroupToAccessItemView, mapUserToAccessItemView, PermissionMode, -} from "../../../admin-console/organizations/shared/components/access-selector"; -import { SharedModule } from "../../../shared"; +} from "../../shared/components/access-selector"; export interface BulkCollectionsDialogParams { organizationId: string; diff --git a/apps/web/src/app/vault/org-vault/bulk-collections-dialog/index.ts b/apps/web/src/app/admin-console/organizations/collections/bulk-collections-dialog/index.ts similarity index 100% rename from apps/web/src/app/vault/org-vault/bulk-collections-dialog/index.ts rename to apps/web/src/app/admin-console/organizations/collections/bulk-collections-dialog/index.ts diff --git a/apps/web/src/app/vault/org-vault/collection-access-restricted.component.ts b/apps/web/src/app/admin-console/organizations/collections/collection-access-restricted.component.ts similarity index 96% rename from apps/web/src/app/vault/org-vault/collection-access-restricted.component.ts rename to apps/web/src/app/admin-console/organizations/collections/collection-access-restricted.component.ts index 1e4280626fe..15ba10a0d59 100644 --- a/apps/web/src/app/vault/org-vault/collection-access-restricted.component.ts +++ b/apps/web/src/app/admin-console/organizations/collections/collection-access-restricted.component.ts @@ -2,8 +2,8 @@ import { Component, EventEmitter, Input, Output } from "@angular/core"; import { ButtonModule, NoItemsModule, svgIcon } from "@bitwarden/components"; -import { SharedModule } from "../../shared"; -import { CollectionDialogTabType } from "../components/collection-dialog"; +import { SharedModule } from "../../../shared"; +import { CollectionDialogTabType } from "../shared/components/collection-dialog"; const icon = svgIcon` diff --git a/apps/web/src/app/vault/org-vault/collection-badge/collection-badge.module.ts b/apps/web/src/app/admin-console/organizations/collections/collection-badge/collection-badge.module.ts similarity index 67% rename from apps/web/src/app/vault/org-vault/collection-badge/collection-badge.module.ts rename to apps/web/src/app/admin-console/organizations/collections/collection-badge/collection-badge.module.ts index 44c27e57c8d..56919ef79fb 100644 --- a/apps/web/src/app/vault/org-vault/collection-badge/collection-badge.module.ts +++ b/apps/web/src/app/admin-console/organizations/collections/collection-badge/collection-badge.module.ts @@ -1,7 +1,7 @@ import { NgModule } from "@angular/core"; -import { SharedModule } from "../../../shared/shared.module"; -import { PipesModule } from "../../individual-vault/pipes/pipes.module"; +import { SharedModule } from "../../../../shared/shared.module"; +import { PipesModule } from "../../../../vault/individual-vault/pipes/pipes.module"; import { CollectionNameBadgeComponent } from "./collection-name.badge.component"; diff --git a/apps/web/src/app/vault/org-vault/collection-badge/collection-name-badge.component.html b/apps/web/src/app/admin-console/organizations/collections/collection-badge/collection-name-badge.component.html similarity index 100% rename from apps/web/src/app/vault/org-vault/collection-badge/collection-name-badge.component.html rename to apps/web/src/app/admin-console/organizations/collections/collection-badge/collection-name-badge.component.html diff --git a/apps/web/src/app/vault/org-vault/collection-badge/collection-name.badge.component.ts b/apps/web/src/app/admin-console/organizations/collections/collection-badge/collection-name.badge.component.ts similarity index 100% rename from apps/web/src/app/vault/org-vault/collection-badge/collection-name.badge.component.ts rename to apps/web/src/app/admin-console/organizations/collections/collection-badge/collection-name.badge.component.ts diff --git a/apps/web/src/app/vault/org-vault/group-badge/group-badge.module.ts b/apps/web/src/app/admin-console/organizations/collections/group-badge/group-badge.module.ts similarity index 65% rename from apps/web/src/app/vault/org-vault/group-badge/group-badge.module.ts rename to apps/web/src/app/admin-console/organizations/collections/group-badge/group-badge.module.ts index 26ce689ed86..a209631bb23 100644 --- a/apps/web/src/app/vault/org-vault/group-badge/group-badge.module.ts +++ b/apps/web/src/app/admin-console/organizations/collections/group-badge/group-badge.module.ts @@ -1,7 +1,7 @@ import { NgModule } from "@angular/core"; -import { SharedModule } from "../../../shared/shared.module"; -import { PipesModule } from "../../individual-vault/pipes/pipes.module"; +import { SharedModule } from "../../../../shared/shared.module"; +import { PipesModule } from "../../../../vault/individual-vault/pipes/pipes.module"; import { GroupNameBadgeComponent } from "./group-name-badge.component"; diff --git a/apps/web/src/app/vault/org-vault/group-badge/group-name-badge.component.html b/apps/web/src/app/admin-console/organizations/collections/group-badge/group-name-badge.component.html similarity index 100% rename from apps/web/src/app/vault/org-vault/group-badge/group-name-badge.component.html rename to apps/web/src/app/admin-console/organizations/collections/group-badge/group-name-badge.component.html diff --git a/apps/web/src/app/vault/org-vault/group-badge/group-name-badge.component.ts b/apps/web/src/app/admin-console/organizations/collections/group-badge/group-name-badge.component.ts similarity index 92% rename from apps/web/src/app/vault/org-vault/group-badge/group-name-badge.component.ts rename to apps/web/src/app/admin-console/organizations/collections/group-badge/group-name-badge.component.ts index 4ed145a732f..8e5f261bc26 100644 --- a/apps/web/src/app/vault/org-vault/group-badge/group-name-badge.component.ts +++ b/apps/web/src/app/admin-console/organizations/collections/group-badge/group-name-badge.component.ts @@ -5,7 +5,7 @@ import { Component, Input, OnChanges } from "@angular/core"; import { SelectionReadOnlyRequest } from "@bitwarden/common/admin-console/models/request/selection-read-only.request"; import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; -import { GroupView } from "../../../admin-console/organizations/core"; +import { GroupView } from "../../core"; @Component({ selector: "app-group-badge", diff --git a/apps/web/src/app/vault/org-vault/vault-filter/vault-filter.component.ts b/apps/web/src/app/admin-console/organizations/collections/vault-filter/vault-filter.component.ts similarity index 89% rename from apps/web/src/app/vault/org-vault/vault-filter/vault-filter.component.ts rename to apps/web/src/app/admin-console/organizations/collections/vault-filter/vault-filter.component.ts index 7e08af7c7f7..73973e7ffde 100644 --- a/apps/web/src/app/vault/org-vault/vault-filter/vault-filter.component.ts +++ b/apps/web/src/app/admin-console/organizations/collections/vault-filter/vault-filter.component.ts @@ -12,18 +12,19 @@ import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/pl import { TreeNode } from "@bitwarden/common/vault/models/domain/tree-node"; import { DialogService, ToastService } from "@bitwarden/components"; -import { VaultFilterComponent as BaseVaultFilterComponent } from "../../individual-vault/vault-filter/components/vault-filter.component"; //../../vault/vault-filter/components/vault-filter.component"; -import { VaultFilterService } from "../../individual-vault/vault-filter/services/abstractions/vault-filter.service"; +import { VaultFilterComponent as BaseVaultFilterComponent } from "../../../../vault/individual-vault/vault-filter/components/vault-filter.component"; +import { VaultFilterService } from "../../../../vault/individual-vault/vault-filter/services/abstractions/vault-filter.service"; import { VaultFilterList, VaultFilterSection, VaultFilterType, -} from "../../individual-vault/vault-filter/shared/models/vault-filter-section.type"; -import { CollectionFilter } from "../../individual-vault/vault-filter/shared/models/vault-filter.type"; +} from "../../../../vault/individual-vault/vault-filter/shared/models/vault-filter-section.type"; +import { CollectionFilter } from "../../../../vault/individual-vault/vault-filter/shared/models/vault-filter.type"; @Component({ selector: "app-organization-vault-filter", - templateUrl: "../../individual-vault/vault-filter/components/vault-filter.component.html", + templateUrl: + "../../../../vault/individual-vault/vault-filter/components/vault-filter.component.html", }) export class VaultFilterComponent extends BaseVaultFilterComponent diff --git a/apps/web/src/app/vault/org-vault/vault-filter/vault-filter.module.ts b/apps/web/src/app/admin-console/organizations/collections/vault-filter/vault-filter.module.ts similarity index 72% rename from apps/web/src/app/vault/org-vault/vault-filter/vault-filter.module.ts rename to apps/web/src/app/admin-console/organizations/collections/vault-filter/vault-filter.module.ts index 13a69796441..a0dba839b22 100644 --- a/apps/web/src/app/vault/org-vault/vault-filter/vault-filter.module.ts +++ b/apps/web/src/app/admin-console/organizations/collections/vault-filter/vault-filter.module.ts @@ -2,8 +2,8 @@ import { NgModule } from "@angular/core"; import { SearchModule } from "@bitwarden/components"; -import { VaultFilterService as VaultFilterServiceAbstraction } from "../../individual-vault/vault-filter/services/abstractions/vault-filter.service"; -import { VaultFilterSharedModule } from "../../individual-vault/vault-filter/shared/vault-filter-shared.module"; +import { VaultFilterService as VaultFilterServiceAbstraction } from "../../../../vault/individual-vault/vault-filter/services/abstractions/vault-filter.service"; +import { VaultFilterSharedModule } from "../../../../vault/individual-vault/vault-filter/shared/vault-filter-shared.module"; import { VaultFilterComponent } from "./vault-filter.component"; import { VaultFilterService } from "./vault-filter.service"; diff --git a/apps/web/src/app/vault/org-vault/vault-filter/vault-filter.service.ts b/apps/web/src/app/admin-console/organizations/collections/vault-filter/vault-filter.service.ts similarity index 91% rename from apps/web/src/app/vault/org-vault/vault-filter/vault-filter.service.ts rename to apps/web/src/app/admin-console/organizations/collections/vault-filter/vault-filter.service.ts index e2d713649f5..f4b6f41fab6 100644 --- a/apps/web/src/app/vault/org-vault/vault-filter/vault-filter.service.ts +++ b/apps/web/src/app/admin-console/organizations/collections/vault-filter/vault-filter.service.ts @@ -11,8 +11,8 @@ import { CipherService } from "@bitwarden/common/vault/abstractions/cipher.servi import { FolderService } from "@bitwarden/common/vault/abstractions/folder/folder.service.abstraction"; import { TreeNode } from "@bitwarden/common/vault/models/domain/tree-node"; -import { VaultFilterService as BaseVaultFilterService } from "../../individual-vault/vault-filter/services/vault-filter.service"; -import { CollectionFilter } from "../../individual-vault/vault-filter/shared/models/vault-filter.type"; +import { VaultFilterService as BaseVaultFilterService } from "../../../../vault/individual-vault/vault-filter/services/vault-filter.service"; +import { CollectionFilter } from "../../../../vault/individual-vault/vault-filter/shared/models/vault-filter.type"; @Injectable() export class VaultFilterService extends BaseVaultFilterService implements OnDestroy { diff --git a/apps/web/src/app/vault/org-vault/vault-header/vault-header.component.html b/apps/web/src/app/admin-console/organizations/collections/vault-header/vault-header.component.html similarity index 100% rename from apps/web/src/app/vault/org-vault/vault-header/vault-header.component.html rename to apps/web/src/app/admin-console/organizations/collections/vault-header/vault-header.component.html diff --git a/apps/web/src/app/vault/org-vault/vault-header/vault-header.component.ts b/apps/web/src/app/admin-console/organizations/collections/vault-header/vault-header.component.ts similarity index 92% rename from apps/web/src/app/vault/org-vault/vault-header/vault-header.component.ts rename to apps/web/src/app/admin-console/organizations/collections/vault-header/vault-header.component.ts index e3c99231a86..7efb79ebdb6 100644 --- a/apps/web/src/app/vault/org-vault/vault-header/vault-header.component.ts +++ b/apps/web/src/app/admin-console/organizations/collections/vault-header/vault-header.component.ts @@ -1,7 +1,9 @@ // FIXME: Update this file to be type safe and remove this and next line // @ts-strict-ignore +// FIXME: rename output bindings and then remove this line +/* eslint-disable @angular-eslint/no-output-on-prefix */ import { CommonModule } from "@angular/common"; -import { Component, EventEmitter, Input, OnInit, Output } from "@angular/core"; +import { Component, EventEmitter, Input, Output } from "@angular/core"; import { Router } from "@angular/router"; import { firstValueFrom } from "rxjs"; @@ -13,7 +15,6 @@ import { import { JslibModule } from "@bitwarden/angular/jslib.module"; import { Organization } from "@bitwarden/common/admin-console/models/domain/organization"; import { ProductTierType } from "@bitwarden/common/billing/enums"; -import { ConfigService } from "@bitwarden/common/platform/abstractions/config/config.service"; import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; import { CipherType } from "@bitwarden/common/vault/enums"; import { TreeNode } from "@bitwarden/common/vault/models/domain/tree-node"; @@ -25,13 +26,13 @@ import { SimpleDialogOptions, } from "@bitwarden/components"; -import { HeaderModule } from "../../../layouts/header/header.module"; -import { SharedModule } from "../../../shared"; -import { CollectionDialogTabType } from "../../components/collection-dialog"; +import { HeaderModule } from "../../../../layouts/header/header.module"; +import { SharedModule } from "../../../../shared"; import { All, RoutedVaultFilterModel, -} from "../../individual-vault/vault-filter/shared/models/routed-vault-filter.model"; +} from "../../../../vault/individual-vault/vault-filter/shared/models/routed-vault-filter.model"; +import { CollectionDialogTabType } from "../../shared/components/collection-dialog"; @Component({ standalone: true, @@ -47,7 +48,7 @@ import { JslibModule, ], }) -export class VaultHeaderComponent implements OnInit { +export class VaultHeaderComponent { protected All = All; protected Unassigned = Unassigned; @@ -97,11 +98,8 @@ export class VaultHeaderComponent implements OnInit { private dialogService: DialogService, private collectionAdminService: CollectionAdminService, private router: Router, - private configService: ConfigService, ) {} - async ngOnInit() {} - get title() { const headerType = this.i18nService.t("collections").toLowerCase(); diff --git a/apps/web/src/app/vault/org-vault/vault-routing.module.ts b/apps/web/src/app/admin-console/organizations/collections/vault-routing.module.ts similarity index 84% rename from apps/web/src/app/vault/org-vault/vault-routing.module.ts rename to apps/web/src/app/admin-console/organizations/collections/vault-routing.module.ts index 4c2ed048bd1..960ddf4397f 100644 --- a/apps/web/src/app/vault/org-vault/vault-routing.module.ts +++ b/apps/web/src/app/admin-console/organizations/collections/vault-routing.module.ts @@ -3,7 +3,7 @@ import { RouterModule, Routes } from "@angular/router"; import { canAccessVaultTab } from "@bitwarden/common/admin-console/abstractions/organization/organization.service.abstraction"; -import { organizationPermissionsGuard } from "../../admin-console/organizations/guards/org-permissions.guard"; +import { organizationPermissionsGuard } from "../guards/org-permissions.guard"; import { VaultComponent } from "./vault.component"; const routes: Routes = [ diff --git a/apps/web/src/app/vault/org-vault/vault.component.html b/apps/web/src/app/admin-console/organizations/collections/vault.component.html similarity index 100% rename from apps/web/src/app/vault/org-vault/vault.component.html rename to apps/web/src/app/admin-console/organizations/collections/vault.component.html diff --git a/apps/web/src/app/vault/org-vault/vault.component.ts b/apps/web/src/app/admin-console/organizations/collections/vault.component.ts similarity index 94% rename from apps/web/src/app/vault/org-vault/vault.component.ts rename to apps/web/src/app/admin-console/organizations/collections/vault.component.ts index f14a8fcf5ee..7fb170c3806 100644 --- a/apps/web/src/app/vault/org-vault/vault.component.ts +++ b/apps/web/src/app/admin-console/organizations/collections/vault.component.ts @@ -76,55 +76,55 @@ import { PasswordRepromptService, } from "@bitwarden/vault"; -import { GroupApiService, GroupView } from "../../admin-console/organizations/core"; -import { openEntityEventsDialog } from "../../admin-console/organizations/manage/entity-events.component"; import { ResellerWarning, ResellerWarningService, -} from "../../billing/services/reseller-warning.service"; -import { TrialFlowService } from "../../billing/services/trial-flow.service"; -import { FreeTrial } from "../../billing/types/free-trial"; -import { SharedModule } from "../../shared"; -import { VaultFilterService } from "../../vault/individual-vault/vault-filter/services/abstractions/vault-filter.service"; -import { VaultFilter } from "../../vault/individual-vault/vault-filter/shared/models/vault-filter.model"; -import { AssignCollectionsWebComponent } from "../components/assign-collections"; -import { - CollectionDialogAction, - CollectionDialogTabType, - openCollectionDialog, -} from "../components/collection-dialog"; +} from "../../../billing/services/reseller-warning.service"; +import { TrialFlowService } from "../../../billing/services/trial-flow.service"; +import { FreeTrial } from "../../../billing/types/free-trial"; +import { SharedModule } from "../../../shared"; +import { AssignCollectionsWebComponent } from "../../../vault/components/assign-collections"; import { VaultItemDialogComponent, VaultItemDialogMode, VaultItemDialogResult, -} from "../components/vault-item-dialog/vault-item-dialog.component"; -import { VaultItemEvent } from "../components/vault-items/vault-item-event"; -import { VaultItemsModule } from "../components/vault-items/vault-items.module"; +} from "../../../vault/components/vault-item-dialog/vault-item-dialog.component"; +import { VaultItemEvent } from "../../../vault/components/vault-items/vault-item-event"; +import { VaultItemsModule } from "../../../vault/components/vault-items/vault-items.module"; import { AttachmentDialogResult, AttachmentsV2Component, -} from "../individual-vault/attachments-v2.component"; +} from "../../../vault/individual-vault/attachments-v2.component"; import { BulkDeleteDialogResult, openBulkDeleteDialog, -} from "../individual-vault/bulk-action-dialogs/bulk-delete-dialog/bulk-delete-dialog.component"; -import { RoutedVaultFilterBridgeService } from "../individual-vault/vault-filter/services/routed-vault-filter-bridge.service"; -import { RoutedVaultFilterService } from "../individual-vault/vault-filter/services/routed-vault-filter.service"; -import { createFilterFunction } from "../individual-vault/vault-filter/shared/models/filter-function"; +} from "../../../vault/individual-vault/bulk-action-dialogs/bulk-delete-dialog/bulk-delete-dialog.component"; +import { VaultFilterService } from "../../../vault/individual-vault/vault-filter/services/abstractions/vault-filter.service"; +import { RoutedVaultFilterBridgeService } from "../../../vault/individual-vault/vault-filter/services/routed-vault-filter-bridge.service"; +import { RoutedVaultFilterService } from "../../../vault/individual-vault/vault-filter/services/routed-vault-filter.service"; +import { createFilterFunction } from "../../../vault/individual-vault/vault-filter/shared/models/filter-function"; import { All, RoutedVaultFilterModel, -} from "../individual-vault/vault-filter/shared/models/routed-vault-filter.model"; -import { VaultHeaderComponent } from "../org-vault/vault-header/vault-header.component"; -import { getNestedCollectionTree } from "../utils/collection-utils"; +} from "../../../vault/individual-vault/vault-filter/shared/models/routed-vault-filter.model"; +import { VaultFilter } from "../../../vault/individual-vault/vault-filter/shared/models/vault-filter.model"; +import { AdminConsoleCipherFormConfigService } from "../../../vault/org-vault/services/admin-console-cipher-form-config.service"; +import { getNestedCollectionTree } from "../../../vault/utils/collection-utils"; +import { GroupApiService, GroupView } from "../core"; +import { openEntityEventsDialog } from "../manage/entity-events.component"; +import { + CollectionDialogAction, + CollectionDialogTabType, + openCollectionDialog, +} from "../shared/components/collection-dialog"; import { BulkCollectionsDialogComponent, BulkCollectionsDialogResult, } from "./bulk-collections-dialog"; import { CollectionAccessRestrictedComponent } from "./collection-access-restricted.component"; -import { AdminConsoleCipherFormConfigService } from "./services/admin-console-cipher-form-config.service"; import { VaultFilterModule } from "./vault-filter/vault-filter.module"; +import { VaultHeaderComponent } from "./vault-header/vault-header.component"; const BroadcasterSubscriptionId = "OrgVaultComponent"; const SearchTextDebounceInterval = 200; @@ -178,6 +178,7 @@ export class VaultComponent implements OnInit, OnDestroy { protected freeTrial$: Observable; protected resellerWarning$: Observable; protected prevCipherId: string | null = null; + protected userId: UserId; /** * A list of collections that the user can assign items to and edit those items within. * @protected @@ -258,6 +259,8 @@ export class VaultComponent implements OnInit, OnDestroy { ) {} async ngOnInit() { + this.userId = await firstValueFrom(getUserId(this.accountService.activeAccount$)); + this.resellerManagedOrgAlert = await this.configService.getFeatureFlag( FeatureFlag.ResellerManagedOrgAlert, ); @@ -401,7 +404,7 @@ export class VaultComponent implements OnInit, OnDestroy { ciphers = await this.cipherService.getManyFromApiForOrganization(organization.id); } - await this.searchService.indexCiphers(ciphers, organization.id); + await this.searchService.indexCiphers(this.userId, ciphers, organization.id); return ciphers; }), shareReplay({ refCount: true, bufferSize: 1 }), @@ -445,7 +448,7 @@ export class VaultComponent implements OnInit, OnDestroy { collectionsToReturn = selectedCollection?.children.map((c) => c.node) ?? []; } - if (await this.searchService.isSearchable(searchText)) { + if (await this.searchService.isSearchable(this.userId, searchText)) { collectionsToReturn = this.searchPipe.transform( collectionsToReturn, searchText, @@ -519,8 +522,13 @@ export class VaultComponent implements OnInit, OnDestroy { const filterFunction = createFilterFunction(filter); - if (await this.searchService.isSearchable(searchText)) { - return await this.searchService.searchCiphers(searchText, [filterFunction], ciphers); + if (await this.searchService.isSearchable(this.userId, searchText)) { + return await this.searchService.searchCiphers( + this.userId, + searchText, + [filterFunction], + ciphers, + ); } return ciphers.filter(filterFunction); @@ -1169,7 +1177,8 @@ export class VaultComponent implements OnInit, OnDestroy { typeI18nKey = "password"; } else if (field === "totp") { aType = "TOTP"; - value = await this.totpService.getCode(cipher.login.totp); + const totpResponse = await firstValueFrom(this.totpService.getCode$(cipher.login.totp)); + value = totpResponse?.code; typeI18nKey = "verificationCodeTotp"; } else { this.toastService.showToast({ diff --git a/apps/web/src/app/vault/org-vault/vault.module.ts b/apps/web/src/app/admin-console/organizations/collections/vault.module.ts similarity index 54% rename from apps/web/src/app/vault/org-vault/vault.module.ts rename to apps/web/src/app/admin-console/organizations/collections/vault.module.ts index db8d2256f52..3f2eccdd514 100644 --- a/apps/web/src/app/vault/org-vault/vault.module.ts +++ b/apps/web/src/app/admin-console/organizations/collections/vault.module.ts @@ -1,10 +1,10 @@ import { NgModule } from "@angular/core"; -import { LooseComponentsModule } from "../../shared/loose-components.module"; -import { SharedModule } from "../../shared/shared.module"; -import { OrganizationBadgeModule } from "../../vault/individual-vault/organization-badge/organization-badge.module"; -import { CollectionDialogModule } from "../components/collection-dialog"; -import { ViewComponent } from "../individual-vault/view.component"; +import { LooseComponentsModule } from "../../../shared/loose-components.module"; +import { SharedModule } from "../../../shared/shared.module"; +import { OrganizationBadgeModule } from "../../../vault/individual-vault/organization-badge/organization-badge.module"; +import { ViewComponent } from "../../../vault/individual-vault/view.component"; +import { CollectionDialogComponent } from "../shared/components/collection-dialog"; import { CollectionBadgeModule } from "./collection-badge/collection-badge.module"; import { GroupBadgeModule } from "./group-badge/group-badge.module"; @@ -19,7 +19,7 @@ import { VaultComponent } from "./vault.component"; GroupBadgeModule, CollectionBadgeModule, OrganizationBadgeModule, - CollectionDialogModule, + CollectionDialogComponent, VaultComponent, ViewComponent, ], diff --git a/apps/web/src/app/admin-console/organizations/layouts/organization-layout.component.html b/apps/web/src/app/admin-console/organizations/layouts/organization-layout.component.html index ae0972a6828..c515722fbef 100644 --- a/apps/web/src/app/admin-console/organizations/layouts/organization-layout.component.html +++ b/apps/web/src/app/admin-console/organizations/layouts/organization-layout.component.html @@ -40,7 +40,10 @@ ; showAccountDeprovisioningBanner$: Observable; + protected isBreadcrumbEventLogsEnabled$: Observable; constructor( private route: ActivatedRoute, @@ -78,6 +79,9 @@ export class OrganizationLayoutComponent implements OnInit { ) {} async ngOnInit() { + this.isBreadcrumbEventLogsEnabled$ = this.configService.getFeatureFlag$( + FeatureFlag.PM12276_BreadcrumbEventLogs, + ); document.body.classList.remove("layout_frontend"); this.organization$ = this.route.params.pipe( diff --git a/apps/web/src/app/admin-console/organizations/manage/events.component.html b/apps/web/src/app/admin-console/organizations/manage/events.component.html index 654020ec263..4a48ae1ead7 100644 --- a/apps/web/src/app/admin-console/organizations/manage/events.component.html +++ b/apps/web/src/app/admin-console/organizations/manage/events.component.html @@ -1,5 +1,9 @@ - - +@let usePlaceHolderEvents = !organization?.useEvents && (isBreadcrumbEventLogsEnabled$ | async); + + + {{ "upgrade" | i18n }} + +
@@ -31,6 +35,7 @@ bitFormButton buttonType="primary" [bitAction]="refreshEvents" + [disabled]="usePlaceHolderEvents" > {{ "update" | i18n }} @@ -42,7 +47,7 @@ bitButton bitFormButton [bitAction]="exportEvents" - [disabled]="dirtyDates" + [disabled]="dirtyDates || usePlaceHolderEvents" > {{ "export" | i18n }} @@ -50,6 +55,13 @@
+ + {{ "upgradeEventLogMessage" | i18n }} + {{ "loading" | i18n }} -

{{ "noEventsInList" | i18n }}

- + @let displayedEvents = organization?.useEvents ? events : placeholderEvents; + +

{{ "noEventsInList" | i18n }}

+ {{ "timestamp" | i18n }} @@ -70,8 +84,10 @@ - - {{ e.date | date: "medium" }} + + + {{ i > 4 && usePlaceHolderEvents ? "******" : (e.date | date: "medium") }} + {{ e.appName }} @@ -92,3 +108,26 @@ {{ "loadMore" | i18n }}
+ + +
+
+ + +

+ {{ "limitedEventLogs" | i18n: ProductTierType[organization?.productTierType] }} +

+

+ {{ "upgradeForFullEvents" | i18n }} +

+ + +
+
+
diff --git a/apps/web/src/app/admin-console/organizations/manage/events.component.ts b/apps/web/src/app/admin-console/organizations/manage/events.component.ts index c6969f5b55e..737a38ee2ab 100644 --- a/apps/web/src/app/admin-console/organizations/manage/events.component.ts +++ b/apps/web/src/app/admin-console/organizations/manage/events.component.ts @@ -2,11 +2,12 @@ // @ts-strict-ignore import { Component, OnDestroy, OnInit } from "@angular/core"; import { ActivatedRoute, Router } from "@angular/router"; -import { concatMap, firstValueFrom, Subject, takeUntil } from "rxjs"; +import { concatMap, firstValueFrom, lastValueFrom, Subject, takeUntil } from "rxjs"; import { OrganizationUserApiService } from "@bitwarden/admin-console/common"; import { UserNamePipe } from "@bitwarden/angular/pipes/user-name.pipe"; import { ApiService } from "@bitwarden/common/abstractions/api.service"; +import { OrganizationApiServiceAbstraction } from "@bitwarden/common/admin-console/abstractions/organization/organization-api.service.abstraction"; import { getOrganizationById, OrganizationService, @@ -15,18 +16,29 @@ import { ProviderService } from "@bitwarden/common/admin-console/abstractions/pr import { Organization } from "@bitwarden/common/admin-console/models/domain/organization"; import { AccountService } from "@bitwarden/common/auth/abstractions/account.service"; import { getUserId } from "@bitwarden/common/auth/services/account.service"; +import { ProductTierType } from "@bitwarden/common/billing/enums"; +import { OrganizationSubscriptionResponse } from "@bitwarden/common/billing/models/response/organization-subscription.response"; import { EventSystemUser } from "@bitwarden/common/enums"; +import { FeatureFlag } from "@bitwarden/common/enums/feature-flag.enum"; import { EventResponse } from "@bitwarden/common/models/response/event.response"; +import { EventView } from "@bitwarden/common/models/view/event.view"; +import { ConfigService } from "@bitwarden/common/platform/abstractions/config/config.service"; import { FileDownloadService } from "@bitwarden/common/platform/abstractions/file-download/file-download.service"; import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; import { LogService } from "@bitwarden/common/platform/abstractions/log.service"; import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service"; -import { ToastService } from "@bitwarden/components"; +import { DialogService, ToastService } from "@bitwarden/components"; +import { + ChangePlanDialogResultType, + openChangePlanDialog, +} from "../../../billing/organizations/change-plan-dialog.component"; import { EventService } from "../../../core"; import { EventExportService } from "../../../tools/event-export"; import { BaseEventsComponent } from "../../common/base.events.component"; +import { placeholderEvents } from "./placeholder-events"; + const EVENT_SYSTEM_USER_TO_TRANSLATION: Record = { [EventSystemUser.SCIM]: null, // SCIM acronym not able to be translated so just display SCIM [EventSystemUser.DomainVerification]: "domainVerification", @@ -41,10 +53,19 @@ export class EventsComponent extends BaseEventsComponent implements OnInit, OnDe exportFileName = "org-events"; organizationId: string; organization: Organization; + organizationSubscription: OrganizationSubscriptionResponse; + + placeholderEvents = placeholderEvents as EventView[]; private orgUsersUserIdMap = new Map(); private destroy$ = new Subject(); + readonly ProductTierType = ProductTierType; + + protected isBreadcrumbEventLogsEnabled$ = this.configService.getFeatureFlag$( + FeatureFlag.PM12276_BreadcrumbEventLogs, + ); + constructor( private apiService: ApiService, private route: ActivatedRoute, @@ -57,10 +78,13 @@ export class EventsComponent extends BaseEventsComponent implements OnInit, OnDe private userNamePipe: UserNamePipe, private organizationService: OrganizationService, private organizationUserApiService: OrganizationUserApiService, + private organizationApiService: OrganizationApiServiceAbstraction, private providerService: ProviderService, fileDownloadService: FileDownloadService, toastService: ToastService, private accountService: AccountService, + private dialogService: DialogService, + private configService: ConfigService, ) { super( eventService, @@ -84,10 +108,16 @@ export class EventsComponent extends BaseEventsComponent implements OnInit, OnDe .organizations$(userId) .pipe(getOrganizationById(this.organizationId)), ); - if (this.organization == null || !this.organization.useEvents) { - await this.router.navigate(["/organizations", this.organizationId]); - return; + + if (!this.organization.useEvents) { + this.eventsForm.get("start").disable(); + this.eventsForm.get("end").disable(); + + this.organizationSubscription = await this.organizationApiService.getSubscription( + this.organizationId, + ); } + await this.load(); }), takeUntil(this.destroy$), @@ -126,7 +156,6 @@ export class EventsComponent extends BaseEventsComponent implements OnInit, OnDe this.logService.warning(e); } } - await this.refreshEvents(); this.loaded = true; } @@ -186,6 +215,23 @@ export class EventsComponent extends BaseEventsComponent implements OnInit, OnDe return id?.substring(0, 8); } + async changePlan() { + const reference = openChangePlanDialog(this.dialogService, { + data: { + organizationId: this.organizationId, + subscription: this.organizationSubscription, + productTierType: this.organization.productTierType, + }, + }); + + const result = await lastValueFrom(reference.closed); + + if (result === ChangePlanDialogResultType.Closed) { + return; + } + await this.load(); + } + ngOnDestroy() { this.destroy$.next(); this.destroy$.complete(); diff --git a/apps/web/src/app/admin-console/organizations/manage/placeholder-events.ts b/apps/web/src/app/admin-console/organizations/manage/placeholder-events.ts new file mode 100644 index 00000000000..3b13ee060bf --- /dev/null +++ b/apps/web/src/app/admin-console/organizations/manage/placeholder-events.ts @@ -0,0 +1,63 @@ +function getRandomDateTime() { + const now = new Date(); + const past24Hours = new Date(now.getTime() - 24 * 60 * 60 * 1000); + const randomTime = + past24Hours.getTime() + Math.random() * (now.getTime() - past24Hours.getTime()); + const randomDate = new Date(randomTime); + + return randomDate.toLocaleString("en-US", { + month: "short", + day: "numeric", + year: "numeric", + hour: "2-digit", + minute: "2-digit", + second: "2-digit", + hour12: true, + }); +} + +const asteriskPlaceholders = new Array(6).fill({ + appName: "***", + userName: "**********", + userEmail: "**********", + message: "**********", +}); + +export const placeholderEvents = [ + { + date: getRandomDateTime(), + appName: "Extension - Firefox", + userName: "Alice", + userEmail: "alice@email.com", + message: "Logged in", + }, + { + date: getRandomDateTime(), + appName: "Mobile - iOS", + userName: "Bob", + message: `Viewed item 000000`, + }, + { + date: getRandomDateTime(), + appName: "Desktop - Linux", + userName: "Carlos", + userEmail: "carlos@email.com", + message: "Login attempt failed with incorrect password", + }, + { + date: getRandomDateTime(), + appName: "Web vault - Chrome", + userName: "Ivan", + userEmail: "ivan@email.com", + message: `Confirmed user 000000`, + }, + { + date: getRandomDateTime(), + appName: "Mobile - Android", + userName: "Franz", + userEmail: "franz@email.com", + message: `Sent item 000000 to trash`, + }, +] + .sort((a, b) => new Date(a.date).getTime() - new Date(b.date).getTime()) + .concat(asteriskPlaceholders); diff --git a/apps/web/src/app/admin-console/organizations/members/components/member-dialog/member-dialog.component.html b/apps/web/src/app/admin-console/organizations/members/components/member-dialog/member-dialog.component.html index bef479c231b..44c9d8319cb 100644 --- a/apps/web/src/app/admin-console/organizations/members/components/member-dialog/member-dialog.component.html +++ b/apps/web/src/app/admin-console/organizations/members/components/member-dialog/member-dialog.component.html @@ -245,7 +245,7 @@ > {{ "cancel" | i18n }} -
+
+ > + {{ "remove" | i18n }} + + > + {{ "delete" | i18n }} +
diff --git a/apps/web/src/app/admin-console/organizations/members/members.component.ts b/apps/web/src/app/admin-console/organizations/members/members.component.ts index df4517942f7..0bfdde8fc97 100644 --- a/apps/web/src/app/admin-console/organizations/members/members.component.ts +++ b/apps/web/src/app/admin-console/organizations/members/members.component.ts @@ -663,9 +663,6 @@ export class MembersComponent extends BaseMembersComponent this.organization.id, filteredUsers.map((user) => user.id), ); - // 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 - // Bulk Status component open const dialogRef = BulkStatusComponent.open(this.dialogService, { data: { diff --git a/apps/web/src/app/admin-console/organizations/organization-routing.module.ts b/apps/web/src/app/admin-console/organizations/organization-routing.module.ts index 71be67af810..e5c68b73546 100644 --- a/apps/web/src/app/admin-console/organizations/organization-routing.module.ts +++ b/apps/web/src/app/admin-console/organizations/organization-routing.module.ts @@ -14,14 +14,14 @@ import { } from "@bitwarden/common/admin-console/abstractions/organization/organization.service.abstraction"; import { Organization } from "@bitwarden/common/admin-console/models/domain/organization"; -import { organizationPermissionsGuard } from "../../admin-console/organizations/guards/org-permissions.guard"; -import { organizationRedirectGuard } from "../../admin-console/organizations/guards/org-redirect.guard"; -import { OrganizationLayoutComponent } from "../../admin-console/organizations/layouts/organization-layout.component"; import { deepLinkGuard } from "../../auth/guards/deep-link.guard"; -import { VaultModule } from "../../vault/org-vault/vault.module"; +import { VaultModule } from "./collections/vault.module"; import { isEnterpriseOrgGuard } from "./guards/is-enterprise-org.guard"; +import { organizationPermissionsGuard } from "./guards/org-permissions.guard"; +import { organizationRedirectGuard } from "./guards/org-redirect.guard"; import { AdminConsoleIntegrationsComponent } from "./integrations/integrations.component"; +import { OrganizationLayoutComponent } from "./layouts/organization-layout.component"; import { GroupsComponent } from "./manage/groups.component"; const routes: Routes = [ diff --git a/apps/web/src/app/admin-console/organizations/policies/password-generator.component.html b/apps/web/src/app/admin-console/organizations/policies/password-generator.component.html index fcf03d27acc..1300acee471 100644 --- a/apps/web/src/app/admin-console/organizations/policies/password-generator.component.html +++ b/apps/web/src/app/admin-console/organizations/policies/password-generator.component.html @@ -68,7 +68,11 @@ - {{ "specialCharactersLabel" | i18n }} + + {{ "!@#$%^&*" }}
diff --git a/apps/web/src/app/admin-console/organizations/policies/policies.component.html b/apps/web/src/app/admin-console/organizations/policies/policies.component.html index 8f1e925034f..24021bb765f 100644 --- a/apps/web/src/app/admin-console/organizations/policies/policies.component.html +++ b/apps/web/src/app/admin-console/organizations/policies/policies.component.html @@ -12,7 +12,7 @@ - + {{ "on" | i18n diff --git a/apps/web/src/app/admin-console/organizations/policies/policies.component.ts b/apps/web/src/app/admin-console/organizations/policies/policies.component.ts index 3354c7c5e11..52cb4da107a 100644 --- a/apps/web/src/app/admin-console/organizations/policies/policies.component.ts +++ b/apps/web/src/app/admin-console/organizations/policies/policies.component.ts @@ -25,7 +25,6 @@ import { PolicyEditComponent, PolicyEditDialogResult } from "./policy-edit.compo selector: "app-org-policies", templateUrl: "policies.component.html", }) -// eslint-disable-next-line rxjs-angular/prefer-takeuntil export class PoliciesComponent implements OnInit { @ViewChild("editTemplate", { read: ViewContainerRef, static: true }) editModalRef: ViewContainerRef; diff --git a/apps/web/src/app/admin-console/organizations/reporting/organization-reporting-routing.module.ts b/apps/web/src/app/admin-console/organizations/reporting/organization-reporting-routing.module.ts index 2de5b83c40a..635053dd1e2 100644 --- a/apps/web/src/app/admin-console/organizations/reporting/organization-reporting-routing.module.ts +++ b/apps/web/src/app/admin-console/organizations/reporting/organization-reporting-routing.module.ts @@ -1,12 +1,14 @@ // FIXME: Update this file to be type safe and remove this and next line // @ts-strict-ignore -import { NgModule } from "@angular/core"; -import { RouterModule, Routes } from "@angular/router"; +import { inject, NgModule } from "@angular/core"; +import { CanMatchFn, RouterModule, Routes } from "@angular/router"; +import { map } from "rxjs"; import { canAccessReportingTab } from "@bitwarden/common/admin-console/abstractions/organization/organization.service.abstraction"; import { Organization } from "@bitwarden/common/admin-console/models/domain/organization"; +import { FeatureFlag } from "@bitwarden/common/enums/feature-flag.enum"; +import { ConfigService } from "@bitwarden/common/platform/abstractions/config/config.service"; -/* eslint no-restricted-imports: "off" -- Normally prohibited by Tools Team eslint rules but required here */ import { ExposedPasswordsReportComponent } from "../../../tools/reports/pages/organizations/exposed-passwords-report.component"; import { InactiveTwoFactorReportComponent } from "../../../tools/reports/pages/organizations/inactive-two-factor-report.component"; import { ReusedPasswordsReportComponent } from "../../../tools/reports/pages/organizations/reused-passwords-report.component"; @@ -20,6 +22,11 @@ import { EventsComponent } from "../manage/events.component"; import { ReportsHomeComponent } from "./reports-home.component"; +const breadcrumbEventLogsPermission$: CanMatchFn = () => + inject(ConfigService) + .getFeatureFlag$(FeatureFlag.PM12276_BreadcrumbEventLogs) + .pipe(map((breadcrumbEventLogs) => breadcrumbEventLogs === true)); + const routes: Routes = [ { path: "", @@ -81,6 +88,20 @@ const routes: Routes = [ }, ], }, + // Event routing is temporarily duplicated + { + path: "events", + component: EventsComponent, + canMatch: [breadcrumbEventLogsPermission$], // if this matches, the flag is ON + canActivate: [ + organizationPermissionsGuard( + (org) => (org.canAccessEventLogs && org.useEvents) || org.isOwner, + ), + ], + data: { + titleId: "eventLogs", + }, + }, { path: "events", component: EventsComponent, diff --git a/apps/web/src/app/admin-console/organizations/settings/two-factor-setup.component.ts b/apps/web/src/app/admin-console/organizations/settings/two-factor-setup.component.ts index 323e5326a1c..7099b90baa8 100644 --- a/apps/web/src/app/admin-console/organizations/settings/two-factor-setup.component.ts +++ b/apps/web/src/app/admin-console/organizations/settings/two-factor-setup.component.ts @@ -31,7 +31,6 @@ import { TwoFactorVerifyComponent } from "../../../auth/settings/two-factor/two- selector: "app-two-factor-setup", templateUrl: "../../../auth/settings/two-factor/two-factor-setup.component.html", }) -// eslint-disable-next-line rxjs-angular/prefer-takeuntil export class TwoFactorSetupComponent extends BaseTwoFactorSetupComponent implements OnInit { tabbedHeader = false; constructor( diff --git a/apps/web/src/app/vault/components/collection-dialog/collection-dialog.component.html b/apps/web/src/app/admin-console/organizations/shared/components/collection-dialog/collection-dialog.component.html similarity index 100% rename from apps/web/src/app/vault/components/collection-dialog/collection-dialog.component.html rename to apps/web/src/app/admin-console/organizations/shared/components/collection-dialog/collection-dialog.component.html diff --git a/apps/web/src/app/vault/components/collection-dialog/collection-dialog.component.ts b/apps/web/src/app/admin-console/organizations/shared/components/collection-dialog/collection-dialog.component.ts similarity index 96% rename from apps/web/src/app/vault/components/collection-dialog/collection-dialog.component.ts rename to apps/web/src/app/admin-console/organizations/shared/components/collection-dialog/collection-dialog.component.ts index a035202516a..2dd1c1bc5b8 100644 --- a/apps/web/src/app/vault/components/collection-dialog/collection-dialog.component.ts +++ b/apps/web/src/app/admin-console/organizations/shared/components/collection-dialog/collection-dialog.component.ts @@ -35,10 +35,11 @@ import { getUserId } from "@bitwarden/common/auth/services/account.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 { BitValidators, DialogService, ToastService } from "@bitwarden/components"; +import { SelectModule, BitValidators, DialogService, ToastService } from "@bitwarden/components"; -import { GroupApiService, GroupView } from "../../../admin-console/organizations/core"; -import { PermissionMode } from "../../../admin-console/organizations/shared/components/access-selector/access-selector.component"; +import { SharedModule } from "../../../../../shared"; +import { GroupApiService, GroupView } from "../../../core"; +import { PermissionMode } from "../access-selector/access-selector.component"; import { AccessItemType, AccessItemValue, @@ -46,7 +47,8 @@ import { CollectionPermission, convertToPermission, convertToSelectionView, -} from "../../../admin-console/organizations/shared/components/access-selector/access-selector.models"; +} from "../access-selector/access-selector.models"; +import { AccessSelectorModule } from "../access-selector/access-selector.module"; export enum CollectionDialogTabType { Info = 0, @@ -80,6 +82,8 @@ export enum CollectionDialogAction { @Component({ templateUrl: "collection-dialog.component.html", + standalone: true, + imports: [SharedModule, AccessSelectorModule, SelectModule], }) export class CollectionDialogComponent implements OnInit, OnDestroy { private destroy$ = new Subject(); @@ -289,7 +293,6 @@ export class CollectionDialogComponent implements OnInit, OnDestroy { if (this.tabIndex === CollectionDialogTabType.Access && !accessTabError) { this.toastService.showToast({ variant: "error", - title: null, message: this.i18nService.t( "fieldOnTabRequiresAttention", this.i18nService.t("collectionInfo"), @@ -298,7 +301,6 @@ export class CollectionDialogComponent implements OnInit, OnDestroy { } else if (this.tabIndex === CollectionDialogTabType.Info && accessTabError) { this.toastService.showToast({ variant: "error", - title: null, message: this.i18nService.t("fieldOnTabRequiresAttention", this.i18nService.t("access")), }); } @@ -327,7 +329,6 @@ export class CollectionDialogComponent implements OnInit, OnDestroy { this.toastService.showToast({ variant: "success", - title: null, message: this.i18nService.t( this.editMode ? "editedCollectionId" : "createdCollectionId", collectionView.name, @@ -357,7 +358,6 @@ export class CollectionDialogComponent implements OnInit, OnDestroy { this.toastService.showToast({ variant: "success", - title: null, message: this.i18nService.t("deletedCollectionId", this.collection?.name), }); @@ -493,10 +493,7 @@ function mapUserToAccessItemView( */ export function openCollectionDialog( dialogService: DialogService, - config: DialogConfig, + config: DialogConfig>, ) { - return dialogService.open( - CollectionDialogComponent, - config, - ); + return dialogService.open(CollectionDialogComponent, config); } diff --git a/apps/web/src/app/vault/components/collection-dialog/index.ts b/apps/web/src/app/admin-console/organizations/shared/components/collection-dialog/index.ts similarity index 51% rename from apps/web/src/app/vault/components/collection-dialog/index.ts rename to apps/web/src/app/admin-console/organizations/shared/components/collection-dialog/index.ts index 4d4c463eb6c..d7365f5f2b1 100644 --- a/apps/web/src/app/vault/components/collection-dialog/index.ts +++ b/apps/web/src/app/admin-console/organizations/shared/components/collection-dialog/index.ts @@ -1,2 +1 @@ export * from "./collection-dialog.component"; -export * from "./collection-dialog.module"; diff --git a/apps/web/src/app/admin-console/organizations/shared/components/integrations/integration-card/integration-card.component.ts b/apps/web/src/app/admin-console/organizations/shared/components/integrations/integration-card/integration-card.component.ts index 681b93413e8..3943ceb22ed 100644 --- a/apps/web/src/app/admin-console/organizations/shared/components/integrations/integration-card/integration-card.component.ts +++ b/apps/web/src/app/admin-console/organizations/shared/components/integrations/integration-card/integration-card.component.ts @@ -61,11 +61,10 @@ export class IntegrationCardComponent implements AfterViewInit, OnDestroy { if (theme === ThemeType.System) { // When the user's preference is the system theme, // use the system theme to determine the image - const prefersDarkMode = - systemTheme === ThemeType.Dark || systemTheme === ThemeType.SolarizedDark; + const prefersDarkMode = systemTheme === ThemeType.Dark; this.imageEle.nativeElement.src = prefersDarkMode ? this.imageDarkMode : this.image; - } else if (theme === ThemeType.Dark || theme === ThemeType.SolarizedDark) { + } else if (theme === ThemeType.Dark) { // When the user's preference is dark mode, use the dark mode image this.imageEle.nativeElement.src = this.imageDarkMode; } else { diff --git a/apps/web/src/app/app.component.ts b/apps/web/src/app/app.component.ts index fe92cdcd3af..9d2afb22688 100644 --- a/apps/web/src/app/app.component.ts +++ b/apps/web/src/app/app.component.ts @@ -10,7 +10,6 @@ import { CollectionService } from "@bitwarden/admin-console/common"; import { ApiService } from "@bitwarden/common/abstractions/api.service"; import { EventUploadService } from "@bitwarden/common/abstractions/event/event-upload.service"; import { SearchService } from "@bitwarden/common/abstractions/search.service"; -import { VaultTimeoutService } from "@bitwarden/common/abstractions/vault-timeout/vault-timeout.service"; import { InternalOrganizationServiceAbstraction } from "@bitwarden/common/admin-console/abstractions/organization/organization.service.abstraction"; import { InternalPolicyService } from "@bitwarden/common/admin-console/abstractions/policy/policy.service.abstraction"; import { AccountService } from "@bitwarden/common/auth/abstractions/account.service"; @@ -19,6 +18,7 @@ import { KeyConnectorService } from "@bitwarden/common/auth/abstractions/key-con import { AuthenticationStatus } from "@bitwarden/common/auth/enums/authentication-status"; import { getUserId } from "@bitwarden/common/auth/services/account.service"; import { ProcessReloadServiceAbstraction } from "@bitwarden/common/key-management/abstractions/process-reload.service"; +import { VaultTimeoutService } from "@bitwarden/common/key-management/vault-timeout"; import { AppIdService } from "@bitwarden/common/platform/abstractions/app-id.service"; import { BroadcasterService } from "@bitwarden/common/platform/abstractions/broadcaster.service"; import { ConfigService } from "@bitwarden/common/platform/abstractions/config/config.service"; @@ -173,8 +173,6 @@ export class AppComponent implements OnDestroy, OnInit { type: "success", }); if (premiumConfirmed) { - // 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 await this.router.navigate(["settings/subscription/premium"]); } break; @@ -309,7 +307,7 @@ export class AppComponent implements OnDestroy, OnInit { await this.stateEventRunnerService.handleEvent("logout", userId); - await this.searchService.clearIndex(); + await this.searchService.clearIndex(userId); this.authService.logOut(async () => { await this.stateService.clean({ userId: userId }); await this.accountService.clean(userId); @@ -359,12 +357,8 @@ export class AppComponent implements OnDestroy, OnInit { private idleStateChanged() { if (this.isIdle) { - // 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 this.notificationsService.disconnectFromInactivity(); } else { - // 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 this.notificationsService.reconnectFromActivity(); } } diff --git a/apps/web/src/app/auth/login/login-v1.component.ts b/apps/web/src/app/auth/login/login-v1.component.ts index a3099d991d9..247aee4828c 100644 --- a/apps/web/src/app/auth/login/login-v1.component.ts +++ b/apps/web/src/app/auth/login/login-v1.component.ts @@ -40,7 +40,6 @@ import { OrganizationInvite } from "../organization-invite/organization-invite"; selector: "app-login", templateUrl: "login-v1.component.html", }) -// eslint-disable-next-line rxjs-angular/prefer-takeuntil export class LoginComponentV1 extends BaseLoginComponent implements OnInit { showResetPasswordAutoEnrollWarning = false; enforcedPasswordPolicyOptions: MasterPasswordPolicyOptions; diff --git a/apps/web/src/app/auth/recover-two-factor.component.spec.ts b/apps/web/src/app/auth/recover-two-factor.component.spec.ts index e9e75dca50e..40182dee017 100644 --- a/apps/web/src/app/auth/recover-two-factor.component.spec.ts +++ b/apps/web/src/app/auth/recover-two-factor.component.spec.ts @@ -70,6 +70,8 @@ describe("RecoverTwoFactorComponent", () => { }, ], imports: [I18nPipe], + // FIXME(PM-18598): Replace unknownElements and unknownProperties with actual imports + errorOnUnknownElements: false, }); fixture = TestBed.createComponent(RecoverTwoFactorComponent); diff --git a/apps/web/src/app/auth/settings/emergency-access/emergency-access.component.ts b/apps/web/src/app/auth/settings/emergency-access/emergency-access.component.ts index 83bdfffbe4f..dc464c18059 100644 --- a/apps/web/src/app/auth/settings/emergency-access/emergency-access.component.ts +++ b/apps/web/src/app/auth/settings/emergency-access/emergency-access.component.ts @@ -43,7 +43,6 @@ import { selector: "emergency-access", templateUrl: "emergency-access.component.html", }) -// eslint-disable-next-line rxjs-angular/prefer-takeuntil export class EmergencyAccessComponent implements OnInit { @ViewChild("addEdit", { read: ViewContainerRef, static: true }) addEditModalRef: ViewContainerRef; @ViewChild("takeoverTemplate", { read: ViewContainerRef, static: true }) diff --git a/apps/web/src/app/auth/settings/emergency-access/takeover/emergency-access-takeover.component.ts b/apps/web/src/app/auth/settings/emergency-access/takeover/emergency-access-takeover.component.ts index 5747386cf84..5ac7d66d33b 100644 --- a/apps/web/src/app/auth/settings/emergency-access/takeover/emergency-access-takeover.component.ts +++ b/apps/web/src/app/auth/settings/emergency-access/takeover/emergency-access-takeover.component.ts @@ -33,7 +33,6 @@ type EmergencyAccessTakeoverDialogData = { selector: "emergency-access-takeover", templateUrl: "emergency-access-takeover.component.html", }) -// eslint-disable-next-line rxjs-angular/prefer-takeuntil export class EmergencyAccessTakeoverComponent extends ChangePasswordComponent implements OnInit, OnDestroy @@ -86,7 +85,6 @@ export class EmergencyAccessTakeoverComponent .subscribe((enforcedPolicyOptions) => (this.enforcedPolicyOptions = enforcedPolicyOptions)); } - // eslint-disable-next-line rxjs-angular/prefer-takeuntil ngOnDestroy(): void { super.ngOnDestroy(); } diff --git a/apps/web/src/app/auth/settings/emergency-access/view/emergency-access-view.component.ts b/apps/web/src/app/auth/settings/emergency-access/view/emergency-access-view.component.ts index dc283c99315..1e3d0cf705f 100644 --- a/apps/web/src/app/auth/settings/emergency-access/view/emergency-access-view.component.ts +++ b/apps/web/src/app/auth/settings/emergency-access/view/emergency-access-view.component.ts @@ -18,7 +18,6 @@ import { EmergencyViewDialogComponent } from "./emergency-view-dialog.component" templateUrl: "emergency-access-view.component.html", providers: [{ provide: CipherFormConfigService, useClass: DefaultCipherFormConfigService }], }) -// eslint-disable-next-line rxjs-angular/prefer-takeuntil export class EmergencyAccessViewComponent implements OnInit { @ViewChild("attachments", { read: ViewContainerRef, static: true }) attachmentsModalRef: ViewContainerRef; diff --git a/apps/web/src/app/auth/settings/emergency-access/view/emergency-view-dialog.component.spec.ts b/apps/web/src/app/auth/settings/emergency-access/view/emergency-view-dialog.component.spec.ts index c5114c0be6a..0021d938f82 100644 --- a/apps/web/src/app/auth/settings/emergency-access/view/emergency-view-dialog.component.spec.ts +++ b/apps/web/src/app/auth/settings/emergency-access/view/emergency-view-dialog.component.spec.ts @@ -7,7 +7,9 @@ import { mock } from "jest-mock-extended"; import { CollectionService } from "@bitwarden/admin-console/common"; import { OrganizationService } from "@bitwarden/common/admin-console/abstractions/organization/organization.service.abstraction"; import { AccountService } from "@bitwarden/common/auth/abstractions/account.service"; +import { ConfigService } from "@bitwarden/common/platform/abstractions/config/config.service"; import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; +import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service"; import { Utils } from "@bitwarden/common/platform/misc/utils"; import { FakeAccountService, mockAccountServiceWith } from "@bitwarden/common/spec"; import { UserId } from "@bitwarden/common/types/guid"; @@ -15,6 +17,7 @@ import { FolderService } from "@bitwarden/common/vault/abstractions/folder/folde import { CipherType } from "@bitwarden/common/vault/enums"; import { CipherView } from "@bitwarden/common/vault/models/view/cipher.view"; import { DialogService } from "@bitwarden/components"; +import { ChangeLoginPasswordService, TaskService } from "@bitwarden/vault"; import { EmergencyViewDialogComponent } from "./emergency-view-dialog.component"; @@ -52,7 +55,34 @@ describe("EmergencyViewDialogComponent", () => { { provide: DIALOG_DATA, useValue: { cipher: mockCipher } }, { provide: AccountService, useValue: accountService }, ], - }).compileComponents(); + }) + .overrideComponent(EmergencyViewDialogComponent, { + remove: { + providers: [ + { provide: PlatformUtilsService, useValue: PlatformUtilsService }, + { + provide: ChangeLoginPasswordService, + useValue: ChangeLoginPasswordService, + }, + { provide: ConfigService, useValue: ConfigService }, + ], + }, + add: { + providers: [ + { + provide: TaskService, + useValue: mock(), + }, + { provide: PlatformUtilsService, useValue: mock() }, + { + provide: ChangeLoginPasswordService, + useValue: mock(), + }, + { provide: ConfigService, useValue: mock() }, + ], + }, + }) + .compileComponents(); fixture = TestBed.createComponent(EmergencyViewDialogComponent); component = fixture.componentInstance; diff --git a/apps/web/src/app/auth/settings/emergency-access/view/emergency-view-dialog.component.ts b/apps/web/src/app/auth/settings/emergency-access/view/emergency-view-dialog.component.ts index 68423c50d88..0ca892b40bf 100644 --- a/apps/web/src/app/auth/settings/emergency-access/view/emergency-view-dialog.component.ts +++ b/apps/web/src/app/auth/settings/emergency-access/view/emergency-view-dialog.component.ts @@ -9,7 +9,7 @@ import { ViewPasswordHistoryService } from "@bitwarden/common/vault/abstractions import { CipherType } from "@bitwarden/common/vault/enums"; import { CipherView } from "@bitwarden/common/vault/models/view/cipher.view"; import { ButtonModule, DialogModule, DialogService } from "@bitwarden/components"; -import { CipherViewComponent } from "@bitwarden/vault"; +import { CipherViewComponent, DefaultTaskService, TaskService } from "@bitwarden/vault"; import { WebViewPasswordHistoryService } from "../../../../vault/services/web-view-password-history.service"; @@ -33,6 +33,7 @@ class PremiumUpgradePromptNoop implements PremiumUpgradePromptService { providers: [ { provide: ViewPasswordHistoryService, useClass: WebViewPasswordHistoryService }, { provide: PremiumUpgradePromptService, useClass: PremiumUpgradePromptNoop }, + { provide: TaskService, useClass: DefaultTaskService }, ], }) export class EmergencyViewDialogComponent { diff --git a/apps/web/src/app/auth/settings/security/device-management.component.html b/apps/web/src/app/auth/settings/security/device-management.component.html index c38283cfd80..587703c7389 100644 --- a/apps/web/src/app/auth/settings/security/device-management.component.html +++ b/apps/web/src/app/auth/settings/security/device-management.component.html @@ -40,7 +40,8 @@ > {{ col.title }} - + + diff --git a/apps/web/src/app/auth/settings/security/device-management.component.spec.ts b/apps/web/src/app/auth/settings/security/device-management.component.spec.ts new file mode 100644 index 00000000000..84c1dfcb63b --- /dev/null +++ b/apps/web/src/app/auth/settings/security/device-management.component.spec.ts @@ -0,0 +1,181 @@ +import { ComponentFixture, TestBed } from "@angular/core/testing"; +import { RouterTestingModule } from "@angular/router/testing"; +import { of, Subject } from "rxjs"; + +import { AuthRequestApiService } from "@bitwarden/auth/common"; +import { DevicesServiceAbstraction } from "@bitwarden/common/auth/abstractions/devices/devices.service.abstraction"; +import { DeviceView } from "@bitwarden/common/auth/abstractions/devices/views/device.view"; +import { DeviceType } from "@bitwarden/common/enums"; +import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; +import { ValidationService } from "@bitwarden/common/platform/abstractions/validation.service"; +import { MessageListener } from "@bitwarden/common/platform/messaging"; +import { DialogService, ToastService, TableModule, PopoverModule } from "@bitwarden/components"; + +import { SharedModule } from "../../../shared"; +import { VaultBannersService } from "../../../vault/individual-vault/vault-banners/services/vault-banners.service"; + +import { DeviceManagementComponent } from "./device-management.component"; + +class MockResizeObserver { + observe = jest.fn(); + unobserve = jest.fn(); + disconnect = jest.fn(); +} + +global.ResizeObserver = MockResizeObserver; + +interface Message { + command: string; + notificationId?: string; +} + +describe("DeviceManagementComponent", () => { + let fixture: ComponentFixture; + let messageSubject: Subject; + let mockDevices: DeviceView[]; + let vaultBannersService: VaultBannersService; + + const mockDeviceResponse = { + id: "test-id", + requestDeviceType: "test-type", + requestDeviceTypeValue: DeviceType.Android, + requestDeviceIdentifier: "test-identifier", + requestIpAddress: "127.0.0.1", + creationDate: new Date().toISOString(), + responseDate: null, + key: "test-key", + masterPasswordHash: null, + publicKey: "test-public-key", + requestApproved: false, + origin: "test-origin", + }; + + beforeEach(async () => { + messageSubject = new Subject(); + mockDevices = []; + + await TestBed.configureTestingModule({ + imports: [ + RouterTestingModule, + SharedModule, + TableModule, + PopoverModule, + DeviceManagementComponent, + ], + providers: [ + { + provide: DevicesServiceAbstraction, + useValue: { + getDevices$: jest.fn().mockReturnValue(mockDevices), + getCurrentDevice$: jest.fn().mockReturnValue(of(null)), + getDeviceByIdentifier$: jest.fn().mockReturnValue(of(null)), + updateTrustedDeviceKeys: jest.fn(), + }, + }, + { + provide: AuthRequestApiService, + useValue: { + getAuthRequest: jest.fn().mockResolvedValue(mockDeviceResponse), + }, + }, + { + provide: MessageListener, + useValue: { + allMessages$: messageSubject.asObservable(), + }, + }, + { + provide: DialogService, + useValue: { + openSimpleDialog: jest.fn(), + }, + }, + { + provide: ToastService, + useValue: { + success: jest.fn(), + error: jest.fn(), + }, + }, + { + provide: VaultBannersService, + useValue: { + shouldShowPendingAuthRequestBanner: jest.fn(), + }, + }, + { + provide: I18nService, + useValue: { + t: jest.fn((key: string) => key), + }, + }, + { + provide: ValidationService, + useValue: { + showError: jest.fn(), + }, + }, + ], + }).compileComponents(); + + fixture = TestBed.createComponent(DeviceManagementComponent); + + vaultBannersService = TestBed.inject(VaultBannersService); + }); + + describe("message listener", () => { + beforeEach(() => { + jest.spyOn(vaultBannersService, "shouldShowPendingAuthRequestBanner").mockResolvedValue(true); + }); + + it("ignores other message types", async () => { + const initialDataLength = (fixture.componentInstance as any).dataSource.data.length; + const message: Message = { command: "other", notificationId: "test-id" }; + messageSubject.next(message); + await fixture.whenStable(); + + expect((fixture.componentInstance as any).dataSource.data.length).toBe(initialDataLength); + }); + + it("adds device to table when auth request message received", async () => { + const initialDataLength = (fixture.componentInstance as any).dataSource.data.length; + const message: Message = { + command: "openLoginApproval", + notificationId: "test-id", + }; + + messageSubject.next(message); + fixture.detectChanges(); + await fixture.whenStable(); + + const dataSource = (fixture.componentInstance as any).dataSource; + expect(dataSource.data.length).toBe(initialDataLength + 1); + + const addedDevice = dataSource.data[0]; + expect(addedDevice).toEqual({ + id: "", + type: mockDeviceResponse.requestDeviceTypeValue, + displayName: expect.any(String), + loginStatus: "requestPending", + firstLogin: expect.any(Date), + trusted: false, + devicePendingAuthRequest: { + id: mockDeviceResponse.id, + creationDate: mockDeviceResponse.creationDate, + }, + hasPendingAuthRequest: true, + identifier: mockDeviceResponse.requestDeviceIdentifier, + }); + }); + + it("stops listening when component is destroyed", async () => { + fixture.destroy(); + const message: Message = { + command: "openLoginApproval", + notificationId: "test-id", + }; + messageSubject.next(message); + expect((fixture.componentInstance as any).dataSource.data.length).toBe(0); + }); + }); +}); diff --git a/apps/web/src/app/auth/settings/security/device-management.component.ts b/apps/web/src/app/auth/settings/security/device-management.component.ts index e22122ad9ae..97107cc0c0b 100644 --- a/apps/web/src/app/auth/settings/security/device-management.component.ts +++ b/apps/web/src/app/auth/settings/security/device-management.component.ts @@ -1,9 +1,10 @@ import { CommonModule } from "@angular/common"; -import { Component } from "@angular/core"; +import { Component, DestroyRef } from "@angular/core"; import { takeUntilDestroyed } from "@angular/core/rxjs-interop"; -import { combineLatest, firstValueFrom } from "rxjs"; +import { firstValueFrom } from "rxjs"; import { LoginApprovalComponent } from "@bitwarden/auth/angular"; +import { AuthRequestApiService } from "@bitwarden/auth/common"; import { DevicesServiceAbstraction } from "@bitwarden/common/auth/abstractions/devices/devices.service.abstraction"; import { DevicePendingAuthRequest, @@ -13,6 +14,7 @@ import { DeviceView } from "@bitwarden/common/auth/abstractions/devices/views/de import { DeviceType, DeviceTypeMetadata } from "@bitwarden/common/enums"; import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; import { ValidationService } from "@bitwarden/common/platform/abstractions/validation.service"; +import { MessageListener } from "@bitwarden/common/platform/messaging"; import { DialogService, ToastService, @@ -23,6 +25,9 @@ import { import { SharedModule } from "../../../shared"; +/** + * Interface representing a row in the device management table + */ interface DeviceTableData { id: string; type: DeviceType; @@ -32,6 +37,7 @@ interface DeviceTableData { trusted: boolean; devicePendingAuthRequest: DevicePendingAuthRequest | null; hasPendingAuthRequest: boolean; + identifier: string; } /** @@ -44,7 +50,6 @@ interface DeviceTableData { imports: [CommonModule, SharedModule, TableModule, PopoverModule], }) export class DeviceManagementComponent { - protected readonly tableId = "device-management-table"; protected dataSource = new TableDataSource(); protected currentDevice: DeviceView | undefined; protected loading = true; @@ -56,32 +61,146 @@ export class DeviceManagementComponent { private dialogService: DialogService, private toastService: ToastService, private validationService: ValidationService, + private messageListener: MessageListener, + private authRequestApiService: AuthRequestApiService, + private destroyRef: DestroyRef, ) { - combineLatest([this.devicesService.getCurrentDevice$(), this.devicesService.getDevices$()]) - .pipe(takeUntilDestroyed()) - .subscribe({ - next: ([currentDevice, devices]: [DeviceResponse, Array]) => { - this.currentDevice = new DeviceView(currentDevice); + void this.initializeDevices(); + } - this.dataSource.data = devices.map((device: DeviceView): DeviceTableData => { - return { - id: device.id, - type: device.type, - displayName: this.getHumanReadableDeviceType(device.type), - loginStatus: this.getLoginStatus(device), - firstLogin: new Date(device.creationDate), - trusted: device.response.isTrusted, - devicePendingAuthRequest: device.response.devicePendingAuthRequest, - hasPendingAuthRequest: this.hasPendingAuthRequest(device.response), - }; - }); + /** + * Initialize the devices list and set up the message listener + */ + private async initializeDevices(): Promise { + try { + await this.loadDevices(); - this.loading = false; - }, - error: () => { - this.loading = false; - }, - }); + this.messageListener.allMessages$ + .pipe(takeUntilDestroyed(this.destroyRef)) + .subscribe((message) => { + if (message.command !== "openLoginApproval") { + return; + } + // Handle inserting a new device when an auth request is received + this.upsertDeviceWithPendingAuthRequest( + message as { command: string; notificationId: string }, + ).catch((error) => this.validationService.showError(error)); + }); + } catch (error) { + this.validationService.showError(error); + } + } + + /** + * Handle inserting a new device when an auth request is received + * @param message - The auth request message + */ + private async upsertDeviceWithPendingAuthRequest(message: { + command: string; + notificationId: string; + }): Promise { + const requestId = message.notificationId; + if (!requestId) { + return; + } + + const authRequestResponse = await this.authRequestApiService.getAuthRequest(requestId); + if (!authRequestResponse) { + return; + } + + // Add new device to the table + const upsertDevice: DeviceTableData = { + id: "", + type: authRequestResponse.requestDeviceTypeValue, + displayName: this.getHumanReadableDeviceType(authRequestResponse.requestDeviceTypeValue), + loginStatus: this.i18nService.t("requestPending"), + firstLogin: new Date(authRequestResponse.creationDate), + trusted: false, + devicePendingAuthRequest: { + id: authRequestResponse.id, + creationDate: authRequestResponse.creationDate, + }, + hasPendingAuthRequest: true, + identifier: authRequestResponse.requestDeviceIdentifier, + }; + + // If the device already exists in the DB, update the device id and first login date + if (authRequestResponse.requestDeviceIdentifier) { + const existingDevice = await firstValueFrom( + this.devicesService.getDeviceByIdentifier$(authRequestResponse.requestDeviceIdentifier), + ); + + if (existingDevice?.id && existingDevice.creationDate) { + upsertDevice.id = existingDevice.id; + upsertDevice.firstLogin = new Date(existingDevice.creationDate); + } + } + + const existingDeviceIndex = this.dataSource.data.findIndex( + (device) => device.identifier === upsertDevice.identifier, + ); + + if (existingDeviceIndex >= 0) { + // Update existing device + this.dataSource.data[existingDeviceIndex] = upsertDevice; + this.dataSource.data = [...this.dataSource.data]; + } else { + // Add new device + this.dataSource.data = [upsertDevice, ...this.dataSource.data]; + } + } + + /** + * Load current device and all devices + */ + private async loadDevices(): Promise { + try { + const currentDevice = await firstValueFrom(this.devicesService.getCurrentDevice$()); + const devices = await firstValueFrom(this.devicesService.getDevices$()); + + if (!currentDevice || !devices) { + this.loading = false; + return; + } + + this.currentDevice = new DeviceView(currentDevice); + this.updateDeviceTable(devices); + } catch (error) { + this.validationService.showError(error); + } finally { + this.loading = false; + } + } + + /** + * Updates the device table with the latest device data + * @param devices - Array of device views to display in the table + */ + private updateDeviceTable(devices: Array): void { + this.dataSource.data = devices + .map((device: DeviceView): DeviceTableData | null => { + if (!device.id || !device.type || !device.creationDate) { + this.validationService.showError(new Error("Invalid device data")); + return null; + } + + const hasPendingRequest = device.response + ? this.hasPendingAuthRequest(device.response) + : false; + return { + id: device.id, + type: device.type, + displayName: this.getHumanReadableDeviceType(device.type), + loginStatus: this.getLoginStatus(device), + firstLogin: new Date(device.creationDate), + trusted: device.response?.isTrusted ?? false, + devicePendingAuthRequest: device.response?.devicePendingAuthRequest ?? null, + hasPendingAuthRequest: hasPendingRequest, + identifier: device.identifier ?? "", + }; + }) + .filter((device): device is DeviceTableData => device !== null); } /** @@ -140,7 +259,7 @@ export class DeviceManagementComponent { return this.i18nService.t("currentSession"); } - if (device.response.devicePendingAuthRequest?.creationDate) { + if (device?.response?.devicePendingAuthRequest?.creationDate) { return this.i18nService.t("requestPending"); } diff --git a/apps/web/src/app/auth/settings/two-factor/two-factor-recovery.component.html b/apps/web/src/app/auth/settings/two-factor/two-factor-recovery.component.html index 98676509078..413432e5a02 100644 --- a/apps/web/src/app/auth/settings/two-factor/two-factor-recovery.component.html +++ b/apps/web/src/app/auth/settings/two-factor/two-factor-recovery.component.html @@ -1,8 +1,8 @@ - - - {{ "twoStepLogin" | i18n }} - {{ "recoveryCodeTitle" | i18n }} - +

{{ "twoFactorRecoveryYourCode" | i18n }}:

diff --git a/apps/web/src/app/auth/settings/two-factor/two-factor-setup-authenticator.component.html b/apps/web/src/app/auth/settings/two-factor/two-factor-setup-authenticator.component.html index c9214d59caa..a31d4c33458 100644 --- a/apps/web/src/app/auth/settings/two-factor/two-factor-setup-authenticator.component.html +++ b/apps/web/src/app/auth/settings/two-factor/two-factor-setup-authenticator.component.html @@ -1,9 +1,9 @@
- - - {{ "twoStepLogin" | i18n }} - {{ "authenticatorAppTitle" | i18n }} - + diff --git a/apps/web/src/app/auth/settings/two-factor/two-factor-setup-duo.component.html b/apps/web/src/app/auth/settings/two-factor/two-factor-setup-duo.component.html index f20bd4f5f70..3a62ec91a8e 100644 --- a/apps/web/src/app/auth/settings/two-factor/two-factor-setup-duo.component.html +++ b/apps/web/src/app/auth/settings/two-factor/two-factor-setup-duo.component.html @@ -1,9 +1,5 @@ - - - {{ "twoStepLogin" | i18n }} - Duo - + diff --git a/apps/web/src/app/auth/settings/two-factor/two-factor-setup-email.component.html b/apps/web/src/app/auth/settings/two-factor/two-factor-setup-email.component.html index f79a3bc7b0a..5861d1fba4f 100644 --- a/apps/web/src/app/auth/settings/two-factor/two-factor-setup-email.component.html +++ b/apps/web/src/app/auth/settings/two-factor/two-factor-setup-email.component.html @@ -1,9 +1,5 @@ - - - {{ "twoStepLogin" | i18n }} - {{ "emailTitle" | i18n }} - + diff --git a/apps/web/src/app/auth/settings/two-factor/two-factor-setup-webauthn.component.html b/apps/web/src/app/auth/settings/two-factor/two-factor-setup-webauthn.component.html index c9e2e111481..4d505161631 100644 --- a/apps/web/src/app/auth/settings/two-factor/two-factor-setup-webauthn.component.html +++ b/apps/web/src/app/auth/settings/two-factor/two-factor-setup-webauthn.component.html @@ -1,9 +1,9 @@ - - - {{ "twoStepLogin" | i18n }} - {{ "webAuthnTitle" | i18n }} - + {{ "readKey" | i18n }} - + - + {{ "twoFactorU2fWaiting" | i18n }}... diff --git a/apps/web/src/app/auth/settings/two-factor/two-factor-setup-yubikey.component.html b/apps/web/src/app/auth/settings/two-factor/two-factor-setup-yubikey.component.html index 098669d7522..112982b4971 100644 --- a/apps/web/src/app/auth/settings/two-factor/two-factor-setup-yubikey.component.html +++ b/apps/web/src/app/auth/settings/two-factor/two-factor-setup-yubikey.component.html @@ -1,9 +1,5 @@ - - - {{ "twoStepLogin" | i18n }} - YubiKey - + - - - {{ "twoStepLogin" | i18n }} - {{ dialogTitle }} - + diff --git a/apps/web/src/app/billing/individual/user-subscription.component.html b/apps/web/src/app/billing/individual/user-subscription.component.html index 1c1382cd816..e801237467a 100644 --- a/apps/web/src/app/billing/individual/user-subscription.component.html +++ b/apps/web/src/app/billing/individual/user-subscription.component.html @@ -27,7 +27,7 @@ #reinstateBtn (click)="reinstate()" [appApiAction]="reinstatePromise" - [disabled]="$any(reinstateBtn).loading" + [disabled]="$any(reinstateBtn).loading()" > {{ "reinstateSubscription" | i18n }} @@ -109,7 +109,7 @@ class="tw-ml-auto" (click)="cancelSubscription()" [appApiAction]="cancelPromise" - [disabled]="$any(cancelBtn).loading" + [disabled]="$any(cancelBtn).loading()" *ngIf="subscription && !subscription.cancelled && !subscriptionMarkedForCancel" > {{ "cancelSubscription" | i18n }} diff --git a/apps/web/src/app/billing/organizations/change-plan-dialog.component.html b/apps/web/src/app/billing/organizations/change-plan-dialog.component.html index ca1b9245c0b..64a694cdef0 100644 --- a/apps/web/src/app/billing/organizations/change-plan-dialog.component.html +++ b/apps/web/src/app/billing/organizations/change-plan-dialog.component.html @@ -55,7 +55,7 @@ class="tw-grid tw-grid-flow-col tw-gap-4 tw-mb-4" [class]="'tw-grid-cols-' + selectableProducts.length" > -
-
+

{{ paymentSource?.description }} - + {{ "changePaymentMethod" | i18n }} @@ -382,8 +381,8 @@

-
- +
+

{{ "passwordManager" | i18n }}

@@ -550,7 +549,7 @@

- +

{{ "passwordManager" | i18n }}

@@ -706,8 +705,8 @@
-
- +
+

{{ "secretsManager" | i18n }} @@ -826,7 +825,7 @@

- +

{{ "secretsManager" | i18n }} @@ -930,9 +929,9 @@

- +

-
- +
+

@@ -963,8 +962,8 @@

-
- +
+

diff --git a/apps/web/src/app/billing/organizations/organization-plans.component.html b/apps/web/src/app/billing/organizations/organization-plans.component.html index 263ef12ebea..3b765927c3c 100644 --- a/apps/web/src/app/billing/organizations/organization-plans.component.html +++ b/apps/web/src/app/billing/organizations/organization-plans.component.html @@ -216,7 +216,7 @@ formControlName="additionalSeats" placeholder="{{ 'userSeatsDesc' | i18n }}" /> - {{ "userSeatsAdditionalDesc" | i18n diff --git a/apps/web/src/app/billing/organizations/organization-subscription-cloud.component.html b/apps/web/src/app/billing/organizations/organization-subscription-cloud.component.html index 1d8a7846d9d..385d9b8ae1a 100644 --- a/apps/web/src/app/billing/organizations/organization-subscription-cloud.component.html +++ b/apps/web/src/app/billing/organizations/organization-subscription-cloud.component.html @@ -1,61 +1,13 @@ - + {{ "loading" | i18n }} - - - {{ "subscriptionCanceled" | i18n }} - -

{{ "subscriptionPendingCanceled" | i18n }}

- - - -
-
{{ "billingPlan" | i18n }}
-
{{ sub.plan.name }}
- -
{{ "status" | i18n }}
-
- {{ - isSponsoredSubscription ? "sponsored" : subscription.status || "-" - }} - {{ - "pendingCancellation" | i18n - }} -
-
- {{ "subscriptionExpiration" | i18n }} -
-
- {{ nextInvoice ? (sub.subscription.periodEndDate | date: "mediumDate") : "-" }} -
-
-
- diff --git a/apps/web/src/app/billing/organizations/organization-subscription-cloud.component.ts b/apps/web/src/app/billing/organizations/organization-subscription-cloud.component.ts index 50c755af63b..f20d447b093 100644 --- a/apps/web/src/app/billing/organizations/organization-subscription-cloud.component.ts +++ b/apps/web/src/app/billing/organizations/organization-subscription-cloud.component.ts @@ -2,7 +2,7 @@ // @ts-strict-ignore import { Component, OnDestroy, OnInit } from "@angular/core"; import { ActivatedRoute } from "@angular/router"; -import { firstValueFrom, lastValueFrom, Observable, Subject } from "rxjs"; +import { firstValueFrom, lastValueFrom, Subject } from "rxjs"; import { OrganizationUserApiService } from "@bitwarden/admin-console/common"; import { ApiService } from "@bitwarden/common/abstractions/api.service"; @@ -22,7 +22,6 @@ import { BillingApiServiceAbstraction } from "@bitwarden/common/billing/abstract import { PlanType, ProductTierType } from "@bitwarden/common/billing/enums"; import { OrganizationSubscriptionResponse } from "@bitwarden/common/billing/models/response/organization-subscription.response"; import { BillingSubscriptionItemResponse } from "@bitwarden/common/billing/models/response/subscription.response"; -import { FeatureFlag } from "@bitwarden/common/enums/feature-flag.enum"; import { ConfigService } from "@bitwarden/common/platform/abstractions/config/config.service"; import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; import { LogService } from "@bitwarden/common/platform/abstractions/log.service"; @@ -60,7 +59,6 @@ export class OrganizationSubscriptionCloudComponent implements OnInit, OnDestroy showSecretsManagerSubscribe = false; loading = true; locale: string; - showUpdatedSubscriptionStatusSection$: Observable; preSelectedProductTier: ProductTierType = ProductTierType.Free; showSubscription = true; showSelfHost = false; @@ -72,8 +70,6 @@ export class OrganizationSubscriptionCloudComponent implements OnInit, OnDestroy private destroy$ = new Subject(); - private seatsRemainingMessage: string; - constructor( private apiService: ApiService, private i18nService: I18nService, @@ -96,10 +92,6 @@ export class OrganizationSubscriptionCloudComponent implements OnInit, OnDestroy ]; await this.load(); - this.showUpdatedSubscriptionStatusSection$ = this.configService.getFeatureFlag$( - FeatureFlag.AC1795_UpdatedSubscriptionStatusSection, - ); - if ( this.route.snapshot.queryParams[OrganizationSubscriptionCloudComponent.QUERY_PARAM_UPGRADE] ) { diff --git a/apps/web/src/app/billing/organizations/organization-subscription-selfhost.component.html b/apps/web/src/app/billing/organizations/organization-subscription-selfhost.component.html index acbb8863c70..471912f83ab 100644 --- a/apps/web/src/app/billing/organizations/organization-subscription-selfhost.component.html +++ b/apps/web/src/app/billing/organizations/organization-subscription-selfhost.component.html @@ -2,7 +2,7 @@ - + {{ "loading" | i18n }} @@ -66,7 +66,7 @@ -

+

{{ "licenseAndBillingManagement" | i18n }}

{ - if (account?.id) { - return this.organizationService.canManageSponsorships$(account?.id); - } else { - return of(); - } - }), - ); - organizations$ = this.accountService.activeAccount$.pipe( switchMap((account) => { if (account?.id) { @@ -57,22 +45,21 @@ export class FreeFamiliesPolicyService { private getFreeFamiliesVisibility$(): Observable { return combineLatest([ this.checkEnterpriseOrganizationsAndFetchPolicy(), - this.canManageSponsorships$, + this.organizations$, ]).pipe( - map(([orgStatus, canManageSponsorships]) => - this.shouldShowFreeFamilyLink(orgStatus, canManageSponsorships), - ), + map(([orgStatus, organizations]) => this.shouldShowFreeFamilyLink(orgStatus, organizations)), ); } private shouldShowFreeFamilyLink( orgStatus: EnterpriseOrgStatus | null, - canManageSponsorships: boolean, + organizations: Organization[], ): boolean { if (!orgStatus) { return false; } const { belongToOneEnterpriseOrgs, isFreeFamilyPolicyEnabled } = orgStatus; + const canManageSponsorships = organizations.filter((org) => org.canManageSponsorships); return canManageSponsorships && !(belongToOneEnterpriseOrgs && isFreeFamilyPolicyEnabled); } diff --git a/apps/web/src/app/billing/settings/sponsored-families.component.html b/apps/web/src/app/billing/settings/sponsored-families.component.html index a712a8456d6..12e942aaf18 100644 --- a/apps/web/src/app/billing/settings/sponsored-families.component.html +++ b/apps/web/src/app/billing/settings/sponsored-families.component.html @@ -2,7 +2,7 @@ - + {{ "loading" | i18n }} diff --git a/apps/web/src/app/billing/shared/payment-method.component.ts b/apps/web/src/app/billing/shared/payment-method.component.ts index dc031ade42f..113a0eab6ca 100644 --- a/apps/web/src/app/billing/shared/payment-method.component.ts +++ b/apps/web/src/app/billing/shared/payment-method.component.ts @@ -36,7 +36,6 @@ import { @Component({ templateUrl: "payment-method.component.html", }) -// eslint-disable-next-line rxjs-angular/prefer-takeuntil export class PaymentMethodComponent implements OnInit, OnDestroy { loading = false; firstLoaded = false; diff --git a/apps/web/src/app/billing/shared/tax-info.component.ts b/apps/web/src/app/billing/shared/tax-info.component.ts index a987ed8d489..74e2ab35cb9 100644 --- a/apps/web/src/app/billing/shared/tax-info.component.ts +++ b/apps/web/src/app/billing/shared/tax-info.component.ts @@ -24,7 +24,6 @@ import { SharedModule } from "../../shared"; standalone: true, imports: [SharedModule], }) -// eslint-disable-next-line rxjs-angular/prefer-takeuntil export class TaxInfoComponent implements OnInit, OnDestroy { private destroy$ = new Subject(); @@ -91,7 +90,7 @@ export class TaxInfoComponent implements OnInit, OnDestroy { async ngOnInit() { // Provider setup - // eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe + // eslint-disable-next-line rxjs-angular/prefer-takeuntil this.route.queryParams.subscribe((params) => { this.providerId = params.providerId; }); diff --git a/apps/web/src/app/core/core.module.ts b/apps/web/src/app/core/core.module.ts index 56f79661b97..2cb1a4ee923 100644 --- a/apps/web/src/app/core/core.module.ts +++ b/apps/web/src/app/core/core.module.ts @@ -55,8 +55,11 @@ import { SsoLoginServiceAbstraction } from "@bitwarden/common/auth/abstractions/ import { ClientType } from "@bitwarden/common/enums"; import { ProcessReloadServiceAbstraction } from "@bitwarden/common/key-management/abstractions/process-reload.service"; import { EncryptService } from "@bitwarden/common/key-management/crypto/abstractions/encrypt.service"; +import { + VaultTimeout, + VaultTimeoutStringType, +} from "@bitwarden/common/key-management/vault-timeout"; import { AppIdService } from "@bitwarden/common/platform/abstractions/app-id.service"; -import { ConfigService } from "@bitwarden/common/platform/abstractions/config/config.service"; import { CryptoFunctionService } from "@bitwarden/common/platform/abstractions/crypto-function.service"; import { EnvironmentService, @@ -70,7 +73,7 @@ import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/pl import { SdkClientFactory } from "@bitwarden/common/platform/abstractions/sdk/sdk-client-factory"; import { SdkLoadService } from "@bitwarden/common/platform/abstractions/sdk/sdk-load.service"; import { AbstractStorageService } from "@bitwarden/common/platform/abstractions/storage.service"; -import { ThemeType } from "@bitwarden/common/platform/enums"; +import { ThemeTypes } from "@bitwarden/common/platform/enums"; // eslint-disable-next-line no-restricted-imports -- Needed for DI import { UnsupportedWebPushConnectionService, @@ -78,7 +81,6 @@ import { } from "@bitwarden/common/platform/notifications/internal"; import { AppIdService as DefaultAppIdService } from "@bitwarden/common/platform/services/app-id.service"; import { MemoryStorageService } from "@bitwarden/common/platform/services/memory-storage.service"; -// eslint-disable-next-line import/no-restricted-paths -- Implementation for memory storage import { MigrationBuilderService } from "@bitwarden/common/platform/services/migration-builder.service"; import { MigrationRunner } from "@bitwarden/common/platform/services/migration-runner"; import { DefaultSdkClientFactory } from "@bitwarden/common/platform/services/sdk/default-sdk-client-factory"; @@ -94,7 +96,6 @@ import { DefaultThemeStateService, ThemeStateService, } from "@bitwarden/common/platform/theming/theme-state.service"; -import { VaultTimeout, VaultTimeoutStringType } from "@bitwarden/common/types/vault-timeout.type"; import { PasswordGenerationServiceAbstraction } from "@bitwarden/generator-legacy"; import { KdfConfigService, @@ -233,10 +234,10 @@ const safeProviders: SafeProvider[] = [ }), safeProvider({ provide: ThemeStateService, - useFactory: (globalStateProvider: GlobalStateProvider, configService: ConfigService) => + useFactory: (globalStateProvider: GlobalStateProvider) => // Web chooses to have Light as the default theme - new DefaultThemeStateService(globalStateProvider, configService, ThemeType.Light), - deps: [GlobalStateProvider, ConfigService], + new DefaultThemeStateService(globalStateProvider, ThemeTypes.Light), + deps: [GlobalStateProvider], }), safeProvider({ provide: CLIENT_TYPE, diff --git a/apps/web/src/app/core/init.service.ts b/apps/web/src/app/core/init.service.ts index 3623d9b0d2f..1990ce1e1ce 100644 --- a/apps/web/src/app/core/init.service.ts +++ b/apps/web/src/app/core/init.service.ts @@ -8,6 +8,7 @@ import { EventUploadService as EventUploadServiceAbstraction } from "@bitwarden/ import { AccountService } from "@bitwarden/common/auth/abstractions/account.service"; import { TwoFactorService as TwoFactorServiceAbstraction } from "@bitwarden/common/auth/abstractions/two-factor.service"; import { EncryptService } from "@bitwarden/common/key-management/crypto/abstractions/encrypt.service"; +import { DefaultVaultTimeoutService } from "@bitwarden/common/key-management/vault-timeout"; import { I18nService as I18nServiceAbstraction } from "@bitwarden/common/platform/abstractions/i18n.service"; import { SdkLoadService } from "@bitwarden/common/platform/abstractions/sdk/sdk-load.service"; import { StateService as StateServiceAbstraction } from "@bitwarden/common/platform/abstractions/state.service"; @@ -15,7 +16,6 @@ import { NotificationsService } from "@bitwarden/common/platform/notifications"; import { ContainerService } from "@bitwarden/common/platform/services/container.service"; import { UserAutoUnlockKeyService } from "@bitwarden/common/platform/services/user-auto-unlock-key.service"; import { EventUploadService } from "@bitwarden/common/services/event/event-upload.service"; -import { VaultTimeoutService } from "@bitwarden/common/services/vault-timeout/vault-timeout.service"; import { KeyService as KeyServiceAbstraction } from "@bitwarden/key-management"; import { VersionService } from "../platform/version.service"; @@ -25,7 +25,7 @@ export class InitService { constructor( @Inject(WINDOW) private win: Window, private notificationsService: NotificationsService, - private vaultTimeoutService: VaultTimeoutService, + private vaultTimeoutService: DefaultVaultTimeoutService, private i18nService: I18nServiceAbstraction, private eventUploadService: EventUploadServiceAbstraction, private twoFactorService: TwoFactorServiceAbstraction, @@ -42,7 +42,7 @@ export class InitService { init() { return async () => { - await this.sdkLoadService.load(); + await this.sdkLoadService.loadAndInit(); await this.stateService.init(); const activeAccount = await firstValueFrom(this.accountService.activeAccount$); diff --git a/apps/web/src/app/layouts/header/web-header.component.ts b/apps/web/src/app/layouts/header/web-header.component.ts index 2f0c9d4772b..e17d059160f 100644 --- a/apps/web/src/app/layouts/header/web-header.component.ts +++ b/apps/web/src/app/layouts/header/web-header.component.ts @@ -5,9 +5,11 @@ import { ActivatedRoute } from "@angular/router"; import { map, Observable } from "rxjs"; import { User } from "@bitwarden/angular/pipes/user-name.pipe"; -import { VaultTimeoutSettingsService } from "@bitwarden/common/abstractions/vault-timeout/vault-timeout-settings.service"; import { AccountService } from "@bitwarden/common/auth/abstractions/account.service"; -import { VaultTimeoutAction } from "@bitwarden/common/enums/vault-timeout-action.enum"; +import { + VaultTimeoutAction, + VaultTimeoutSettingsService, +} from "@bitwarden/common/key-management/vault-timeout"; import { MessagingService } from "@bitwarden/common/platform/abstractions/messaging.service"; import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service"; import { UserId } from "@bitwarden/common/types/guid"; diff --git a/apps/web/src/app/layouts/header/web-header.stories.ts b/apps/web/src/app/layouts/header/web-header.stories.ts index 80e98ba7a57..571e78aab59 100644 --- a/apps/web/src/app/layouts/header/web-header.stories.ts +++ b/apps/web/src/app/layouts/header/web-header.stories.ts @@ -11,9 +11,11 @@ import { import { BehaviorSubject, combineLatest, map, of } from "rxjs"; import { JslibModule } from "@bitwarden/angular/jslib.module"; -import { VaultTimeoutSettingsService } from "@bitwarden/common/abstractions/vault-timeout/vault-timeout-settings.service"; import { AccountService } from "@bitwarden/common/auth/abstractions/account.service"; -import { VaultTimeoutAction } from "@bitwarden/common/enums/vault-timeout-action.enum"; +import { + VaultTimeoutAction, + VaultTimeoutSettingsService, +} from "@bitwarden/common/key-management/vault-timeout"; import { MessagingService } from "@bitwarden/common/platform/abstractions/messaging.service"; import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service"; import { StateService } from "@bitwarden/common/platform/abstractions/state.service"; diff --git a/apps/web/src/app/oss-routing.module.ts b/apps/web/src/app/oss-routing.module.ts index 81057426500..adb38ef43f0 100644 --- a/apps/web/src/app/oss-routing.module.ts +++ b/apps/web/src/app/oss-routing.module.ts @@ -11,7 +11,6 @@ import { unauthGuardFn, activeAuthGuard, } from "@bitwarden/angular/auth/guards"; -import { canAccessFeature } from "@bitwarden/angular/platform/guard/feature-flag.guard"; import { NewDeviceVerificationNoticeGuard } from "@bitwarden/angular/vault/guards"; import { AnonLayoutWrapperComponent, @@ -42,7 +41,6 @@ import { NewDeviceVerificationComponent, DeviceVerificationIcon, } from "@bitwarden/auth/angular"; -import { FeatureFlag } from "@bitwarden/common/enums/feature-flag.enum"; import { LockComponent } from "@bitwarden/key-management-ui"; import { NewDeviceVerificationNoticePageOneComponent, @@ -524,7 +522,7 @@ const routes: Routes = [ ], data: { pageTitle: { - key: "verifyIdentity", + key: "verifyYourIdentity", }, } satisfies RouteDataProperties & AnonLayoutWrapperData, }, @@ -544,8 +542,9 @@ const routes: Routes = [ ], data: { pageTitle: { - key: "verifyIdentity", + key: "verifyYourIdentity", }, + titleAreaMaxWidth: "md", } satisfies RouteDataProperties & AnonLayoutWrapperData, }, ), @@ -611,11 +610,7 @@ const routes: Routes = [ }, { path: "device-verification", - canActivate: [ - canAccessFeature(FeatureFlag.NewDeviceVerification), - unauthGuardFn(), - activeAuthGuard(), - ], + canActivate: [unauthGuardFn(), activeAuthGuard()], children: [ { path: "", @@ -625,7 +620,7 @@ const routes: Routes = [ data: { pageIcon: DeviceVerificationIcon, pageTitle: { - key: "verifyIdentity", + key: "verifyYourIdentity", }, pageSubtitle: { key: "weDontRecognizeThisDevice", diff --git a/apps/web/src/app/platform/web-sdk-load.service.ts b/apps/web/src/app/platform/web-sdk-load.service.ts index cae3399b81e..8be3d20b0a7 100644 --- a/apps/web/src/app/platform/web-sdk-load.service.ts +++ b/apps/web/src/app/platform/web-sdk-load.service.ts @@ -18,7 +18,7 @@ const supported = (() => { return false; })(); -export class WebSdkLoadService implements SdkLoadService { +export class WebSdkLoadService extends SdkLoadService { async load(): Promise { let module: any; if (supported) { diff --git a/apps/web/src/app/settings/preferences.component.ts b/apps/web/src/app/settings/preferences.component.ts index 09dc7a3287b..a90f1d18afd 100644 --- a/apps/web/src/app/settings/preferences.component.ts +++ b/apps/web/src/app/settings/preferences.component.ts @@ -4,22 +4,22 @@ import { Component, OnDestroy, OnInit } from "@angular/core"; import { FormBuilder } from "@angular/forms"; import { concatMap, filter, firstValueFrom, map, Observable, Subject, takeUntil, tap } from "rxjs"; -import { VaultTimeoutSettingsService } from "@bitwarden/common/abstractions/vault-timeout/vault-timeout-settings.service"; import { PolicyService } from "@bitwarden/common/admin-console/abstractions/policy/policy.service.abstraction"; import { PolicyType } from "@bitwarden/common/admin-console/enums"; import { AccountService } from "@bitwarden/common/auth/abstractions/account.service"; import { DomainSettingsService } from "@bitwarden/common/autofill/services/domain-settings.service"; -import { VaultTimeoutAction } from "@bitwarden/common/enums/vault-timeout-action.enum"; -import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; -import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service"; -import { ThemeType } from "@bitwarden/common/platform/enums"; -import { Utils } from "@bitwarden/common/platform/misc/utils"; -import { ThemeStateService } from "@bitwarden/common/platform/theming/theme-state.service"; import { VaultTimeout, + VaultTimeoutAction, VaultTimeoutOption, + VaultTimeoutSettingsService, VaultTimeoutStringType, -} from "@bitwarden/common/types/vault-timeout.type"; +} from "@bitwarden/common/key-management/vault-timeout"; +import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; +import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service"; +import { Theme, ThemeTypes } from "@bitwarden/common/platform/enums"; +import { Utils } from "@bitwarden/common/platform/misc/utils"; +import { ThemeStateService } from "@bitwarden/common/platform/theming/theme-state.service"; import { DialogService } from "@bitwarden/components"; @Component({ @@ -47,7 +47,7 @@ export class PreferencesComponent implements OnInit, OnDestroy { vaultTimeout: [null as VaultTimeout | null], vaultTimeoutAction: [VaultTimeoutAction.Lock], enableFavicons: true, - theme: [ThemeType.Light], + theme: [ThemeTypes.Light as Theme], locale: [null as string | null], }); @@ -90,9 +90,9 @@ export class PreferencesComponent implements OnInit, OnDestroy { localeOptions.splice(0, 0, { name: i18nService.t("default"), value: null }); this.localeOptions = localeOptions; this.themeOptions = [ - { name: i18nService.t("themeLight"), value: ThemeType.Light }, - { name: i18nService.t("themeDark"), value: ThemeType.Dark }, - { name: i18nService.t("themeSystem"), value: ThemeType.System }, + { name: i18nService.t("themeLight"), value: ThemeTypes.Light }, + { name: i18nService.t("themeDark"), value: ThemeTypes.Dark }, + { name: i18nService.t("themeSystem"), value: ThemeTypes.System }, ]; } diff --git a/apps/web/src/app/shared/loose-components.module.ts b/apps/web/src/app/shared/loose-components.module.ts index bec54cf2c54..d57cc6bc1b4 100644 --- a/apps/web/src/app/shared/loose-components.module.ts +++ b/apps/web/src/app/shared/loose-components.module.ts @@ -67,7 +67,6 @@ import { ReusedPasswordsReportComponent as OrgReusedPasswordsReportComponent } f import { UnsecuredWebsitesReportComponent as OrgUnsecuredWebsitesReportComponent } from "../tools/reports/pages/organizations/unsecured-websites-report.component"; import { WeakPasswordsReportComponent as OrgWeakPasswordsReportComponent } from "../tools/reports/pages/organizations/weak-passwords-report.component"; /* eslint no-restricted-imports: "error" */ -import { AddEditComponent as SendAddEditComponent } from "../tools/send/add-edit.component"; import { PremiumBadgeComponent } from "../vault/components/premium-badge.component"; import { AddEditCustomFieldsComponent } from "../vault/individual-vault/add-edit-custom-fields.component"; import { AddEditComponent } from "../vault/individual-vault/add-edit.component"; @@ -148,7 +147,6 @@ import { SharedModule } from "./shared.module"; SecurityComponent, SecurityKeysComponent, SelectableAvatarComponent, - SendAddEditComponent, SetPasswordComponent, SponsoredFamiliesComponent, SponsoringOrgRowComponent, @@ -212,7 +210,6 @@ import { SharedModule } from "./shared.module"; SecurityComponent, SecurityKeysComponent, SelectableAvatarComponent, - SendAddEditComponent, SetPasswordComponent, SponsoredFamiliesComponent, SponsoringOrgRowComponent, diff --git a/apps/web/src/app/tools/reports/pages/breach-report.component.spec.ts b/apps/web/src/app/tools/reports/pages/breach-report.component.spec.ts index 1574389a1a0..9af15749a91 100644 --- a/apps/web/src/app/tools/reports/pages/breach-report.component.spec.ts +++ b/apps/web/src/app/tools/reports/pages/breach-report.component.spec.ts @@ -1,6 +1,5 @@ // FIXME: Update this file to be type safe and remove this and next line // @ts-strict-ignore -// eslint-disable-next-line no-restricted-imports import { ComponentFixture, TestBed } from "@angular/core/testing"; import { ReactiveFormsModule } from "@angular/forms"; import { mock, MockProxy } from "jest-mock-extended"; @@ -66,6 +65,9 @@ describe("BreachReportComponent", () => { useValue: mock(), }, ], + // FIXME(PM-18598): Replace unknownElements and unknownProperties with actual imports + errorOnUnknownElements: false, + errorOnUnknownProperties: false, }).compileComponents(); }); diff --git a/apps/web/src/app/tools/reports/pages/exposed-passwords-report.component.spec.ts b/apps/web/src/app/tools/reports/pages/exposed-passwords-report.component.spec.ts index 23bee585219..052e3bc7cfe 100644 --- a/apps/web/src/app/tools/reports/pages/exposed-passwords-report.component.spec.ts +++ b/apps/web/src/app/tools/reports/pages/exposed-passwords-report.component.spec.ts @@ -1,4 +1,3 @@ -// eslint-disable-next-line no-restricted-imports import { ComponentFixture, TestBed } from "@angular/core/testing"; import { mock, MockProxy } from "jest-mock-extended"; import { of } from "rxjs"; @@ -84,6 +83,9 @@ describe("ExposedPasswordsReportComponent", () => { }, ], schemas: [], + // FIXME(PM-18598): Replace unknownElements and unknownProperties with actual imports + errorOnUnknownElements: false, + errorOnUnknownProperties: false, }).compileComponents(); }); diff --git a/apps/web/src/app/tools/reports/pages/inactive-two-factor-report.component.html b/apps/web/src/app/tools/reports/pages/inactive-two-factor-report.component.html index 52bbb1c5e6d..e667a65235b 100644 --- a/apps/web/src/app/tools/reports/pages/inactive-two-factor-report.component.html +++ b/apps/web/src/app/tools/reports/pages/inactive-two-factor-report.component.html @@ -47,14 +47,19 @@ - {{ r.name }} + + {{ r.name }} + + + {{ r.name }} + { }, ], schemas: [], + // FIXME(PM-18598): Replace unknownElements and unknownProperties with actual imports + errorOnUnknownElements: false, }).compileComponents(); }); diff --git a/apps/web/src/app/tools/reports/pages/inactive-two-factor-report.component.ts b/apps/web/src/app/tools/reports/pages/inactive-two-factor-report.component.ts index 819be73b8be..5265326128e 100644 --- a/apps/web/src/app/tools/reports/pages/inactive-two-factor-report.component.ts +++ b/apps/web/src/app/tools/reports/pages/inactive-two-factor-report.component.ts @@ -130,4 +130,15 @@ export class InactiveTwoFactorReportComponent extends CipherReportComponent impl this.services.set(serviceData.domain, serviceData.documentation); } } + + /** + * Provides a way to determine if someone with permissions to run an organizational report is also able to view/edit ciphers within the results + * Default to true for indivduals running reports on their own vault. + * @param c CipherView + * @returns boolean + */ + protected canManageCipher(c: CipherView): boolean { + // this will only ever be false from the org view; + return true; + } } diff --git a/apps/web/src/app/tools/reports/pages/organizations/exposed-passwords-report.component.ts b/apps/web/src/app/tools/reports/pages/organizations/exposed-passwords-report.component.ts index 4f523dbf7ba..4f0988082b4 100644 --- a/apps/web/src/app/tools/reports/pages/organizations/exposed-passwords-report.component.ts +++ b/apps/web/src/app/tools/reports/pages/organizations/exposed-passwords-report.component.ts @@ -19,7 +19,6 @@ import { CipherView } from "@bitwarden/common/vault/models/view/cipher.view"; import { DialogService } from "@bitwarden/components"; import { PasswordRepromptService, CipherFormConfigService } from "@bitwarden/vault"; -// eslint-disable-next-line no-restricted-imports import { RoutedVaultFilterBridgeService } from "../../../../vault/individual-vault/vault-filter/services/routed-vault-filter-bridge.service"; import { RoutedVaultFilterService } from "../../../../vault/individual-vault/vault-filter/services/routed-vault-filter.service"; import { AdminConsoleCipherFormConfigService } from "../../../../vault/org-vault/services/admin-console-cipher-form-config.service"; @@ -38,7 +37,6 @@ import { ExposedPasswordsReportComponent as BaseExposedPasswordsReportComponent RoutedVaultFilterBridgeService, ], }) -// eslint-disable-next-line rxjs-angular/prefer-takeuntil export class ExposedPasswordsReportComponent extends BaseExposedPasswordsReportComponent implements OnInit @@ -91,6 +89,9 @@ export class ExposedPasswordsReportComponent } canManageCipher(c: CipherView): boolean { + if (c.collectionIds.length === 0) { + return true; + } return this.manageableCiphers.some((x) => x.id === c.id); } } diff --git a/apps/web/src/app/tools/reports/pages/organizations/inactive-two-factor-report.component.ts b/apps/web/src/app/tools/reports/pages/organizations/inactive-two-factor-report.component.ts index 8a2fc333c64..6dc202de0b3 100644 --- a/apps/web/src/app/tools/reports/pages/organizations/inactive-two-factor-report.component.ts +++ b/apps/web/src/app/tools/reports/pages/organizations/inactive-two-factor-report.component.ts @@ -13,11 +13,11 @@ import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.servic import { LogService } from "@bitwarden/common/platform/abstractions/log.service"; import { CipherService } from "@bitwarden/common/vault/abstractions/cipher.service"; import { SyncService } from "@bitwarden/common/vault/abstractions/sync/sync.service.abstraction"; +import { Cipher } from "@bitwarden/common/vault/models/domain/cipher"; import { CipherView } from "@bitwarden/common/vault/models/view/cipher.view"; import { DialogService } from "@bitwarden/components"; import { CipherFormConfigService, PasswordRepromptService } from "@bitwarden/vault"; -// eslint-disable-next-line no-restricted-imports import { RoutedVaultFilterBridgeService } from "../../../../vault/individual-vault/vault-filter/services/routed-vault-filter-bridge.service"; import { RoutedVaultFilterService } from "../../../../vault/individual-vault/vault-filter/services/routed-vault-filter.service"; import { AdminConsoleCipherFormConfigService } from "../../../../vault/org-vault/services/admin-console-cipher-form-config.service"; @@ -36,11 +36,13 @@ import { InactiveTwoFactorReportComponent as BaseInactiveTwoFactorReportComponen RoutedVaultFilterBridgeService, ], }) -// eslint-disable-next-line rxjs-angular/prefer-takeuntil export class InactiveTwoFactorReportComponent extends BaseInactiveTwoFactorReportComponent implements OnInit { + // Contains a list of ciphers, the user running the report, can manage + private manageableCiphers: Cipher[]; + constructor( cipherService: CipherService, dialogService: DialogService, @@ -80,6 +82,7 @@ export class InactiveTwoFactorReportComponent .organizations$(userId) .pipe(getOrganizationById(params.organizationId)), ); + this.manageableCiphers = await this.cipherService.getAll(userId); await super.ngOnInit(); }); } @@ -87,4 +90,11 @@ export class InactiveTwoFactorReportComponent getAllCiphers(): Promise { return this.cipherService.getAllFromApiForOrganization(this.organization.id); } + + protected canManageCipher(c: CipherView): boolean { + if (c.collectionIds.length === 0) { + return true; + } + return this.manageableCiphers.some((x) => x.id === c.id); + } } diff --git a/apps/web/src/app/tools/reports/pages/organizations/reused-passwords-report.component.ts b/apps/web/src/app/tools/reports/pages/organizations/reused-passwords-report.component.ts index 1e2f5225d59..4e37f53ba61 100644 --- a/apps/web/src/app/tools/reports/pages/organizations/reused-passwords-report.component.ts +++ b/apps/web/src/app/tools/reports/pages/organizations/reused-passwords-report.component.ts @@ -18,7 +18,6 @@ import { CipherView } from "@bitwarden/common/vault/models/view/cipher.view"; import { DialogService } from "@bitwarden/components"; import { CipherFormConfigService, PasswordRepromptService } from "@bitwarden/vault"; -// eslint-disable-next-line no-restricted-imports import { RoutedVaultFilterBridgeService } from "../../../../vault/individual-vault/vault-filter/services/routed-vault-filter-bridge.service"; import { RoutedVaultFilterService } from "../../../../vault/individual-vault/vault-filter/services/routed-vault-filter.service"; import { AdminConsoleCipherFormConfigService } from "../../../../vault/org-vault/services/admin-console-cipher-form-config.service"; @@ -37,7 +36,6 @@ import { ReusedPasswordsReportComponent as BaseReusedPasswordsReportComponent } RoutedVaultFilterBridgeService, ], }) -// eslint-disable-next-line rxjs-angular/prefer-takeuntil export class ReusedPasswordsReportComponent extends BaseReusedPasswordsReportComponent implements OnInit @@ -89,6 +87,9 @@ export class ReusedPasswordsReportComponent } canManageCipher(c: CipherView): boolean { + if (c.collectionIds.length === 0) { + return true; + } return this.manageableCiphers.some((x) => x.id === c.id); } } diff --git a/apps/web/src/app/tools/reports/pages/organizations/unsecured-websites-report.component.ts b/apps/web/src/app/tools/reports/pages/organizations/unsecured-websites-report.component.ts index 156f3331d32..25e1314fceb 100644 --- a/apps/web/src/app/tools/reports/pages/organizations/unsecured-websites-report.component.ts +++ b/apps/web/src/app/tools/reports/pages/organizations/unsecured-websites-report.component.ts @@ -13,11 +13,11 @@ import { AccountService } from "@bitwarden/common/auth/abstractions/account.serv import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; import { CipherService } from "@bitwarden/common/vault/abstractions/cipher.service"; import { SyncService } from "@bitwarden/common/vault/abstractions/sync/sync.service.abstraction"; +import { Cipher } from "@bitwarden/common/vault/models/domain/cipher"; import { CipherView } from "@bitwarden/common/vault/models/view/cipher.view"; import { DialogService } from "@bitwarden/components"; import { CipherFormConfigService, PasswordRepromptService } from "@bitwarden/vault"; -// eslint-disable-next-line no-restricted-imports import { RoutedVaultFilterBridgeService } from "../../../../vault/individual-vault/vault-filter/services/routed-vault-filter-bridge.service"; import { RoutedVaultFilterService } from "../../../../vault/individual-vault/vault-filter/services/routed-vault-filter.service"; import { AdminConsoleCipherFormConfigService } from "../../../../vault/org-vault/services/admin-console-cipher-form-config.service"; @@ -36,11 +36,13 @@ import { UnsecuredWebsitesReportComponent as BaseUnsecuredWebsitesReportComponen RoutedVaultFilterBridgeService, ], }) -// eslint-disable-next-line rxjs-angular/prefer-takeuntil export class UnsecuredWebsitesReportComponent extends BaseUnsecuredWebsitesReportComponent implements OnInit { + // Contains a list of ciphers, the user running the report, can manage + private manageableCiphers: Cipher[]; + constructor( cipherService: CipherService, dialogService: DialogService, @@ -80,6 +82,7 @@ export class UnsecuredWebsitesReportComponent .organizations$(userId) .pipe(getOrganizationById(params.organizationId)), ); + this.manageableCiphers = await this.cipherService.getAll(userId); await super.ngOnInit(); }); } @@ -87,4 +90,11 @@ export class UnsecuredWebsitesReportComponent getAllCiphers(): Promise { return this.cipherService.getAllFromApiForOrganization(this.organization.id); } + + protected canManageCipher(c: CipherView): boolean { + if (c.collectionIds.length === 0) { + return true; + } + return this.manageableCiphers.some((x) => x.id === c.id); + } } diff --git a/apps/web/src/app/tools/reports/pages/organizations/weak-passwords-report.component.ts b/apps/web/src/app/tools/reports/pages/organizations/weak-passwords-report.component.ts index 82abc8561fb..ef9bd97008e 100644 --- a/apps/web/src/app/tools/reports/pages/organizations/weak-passwords-report.component.ts +++ b/apps/web/src/app/tools/reports/pages/organizations/weak-passwords-report.component.ts @@ -19,7 +19,6 @@ import { CipherView } from "@bitwarden/common/vault/models/view/cipher.view"; import { DialogService } from "@bitwarden/components"; import { CipherFormConfigService, PasswordRepromptService } from "@bitwarden/vault"; -// eslint-disable-next-line no-restricted-imports import { RoutedVaultFilterBridgeService } from "../../../../vault/individual-vault/vault-filter/services/routed-vault-filter-bridge.service"; import { RoutedVaultFilterService } from "../../../../vault/individual-vault/vault-filter/services/routed-vault-filter.service"; import { AdminConsoleCipherFormConfigService } from "../../../../vault/org-vault/services/admin-console-cipher-form-config.service"; @@ -38,7 +37,6 @@ import { WeakPasswordsReportComponent as BaseWeakPasswordsReportComponent } from RoutedVaultFilterBridgeService, ], }) -// eslint-disable-next-line rxjs-angular/prefer-takeuntil export class WeakPasswordsReportComponent extends BaseWeakPasswordsReportComponent implements OnInit @@ -93,6 +91,9 @@ export class WeakPasswordsReportComponent } canManageCipher(c: CipherView): boolean { + if (c.collectionIds.length === 0) { + return true; + } return this.manageableCiphers.some((x) => x.id === c.id); } } diff --git a/apps/web/src/app/tools/reports/pages/reused-passwords-report.component.spec.ts b/apps/web/src/app/tools/reports/pages/reused-passwords-report.component.spec.ts index cd0e21dda9b..5933d2ce293 100644 --- a/apps/web/src/app/tools/reports/pages/reused-passwords-report.component.spec.ts +++ b/apps/web/src/app/tools/reports/pages/reused-passwords-report.component.spec.ts @@ -1,4 +1,3 @@ -// eslint-disable-next-line no-restricted-imports import { ComponentFixture, TestBed } from "@angular/core/testing"; import { MockProxy, mock } from "jest-mock-extended"; import { of } from "rxjs"; @@ -77,6 +76,8 @@ describe("ReusedPasswordsReportComponent", () => { }, ], schemas: [], + // FIXME(PM-18598): Replace unknownElements and unknownProperties with actual imports + errorOnUnknownElements: false, }).compileComponents(); }); diff --git a/apps/web/src/app/tools/reports/pages/unsecured-websites-report.component.html b/apps/web/src/app/tools/reports/pages/unsecured-websites-report.component.html index 9293915363e..6632413a79e 100644 --- a/apps/web/src/app/tools/reports/pages/unsecured-websites-report.component.html +++ b/apps/web/src/app/tools/reports/pages/unsecured-websites-report.component.html @@ -47,15 +47,19 @@ - - {{ r.name }} - + + {{ r.name }} + + + {{ r.name }} + { }, ], schemas: [], + // FIXME(PM-18598): Replace unknownElements and unknownProperties with actual imports + errorOnUnknownElements: false, }).compileComponents(); }); diff --git a/apps/web/src/app/tools/reports/pages/unsecured-websites-report.component.ts b/apps/web/src/app/tools/reports/pages/unsecured-websites-report.component.ts index 11df326766b..02d4117c684 100644 --- a/apps/web/src/app/tools/reports/pages/unsecured-websites-report.component.ts +++ b/apps/web/src/app/tools/reports/pages/unsecured-websites-report.component.ts @@ -1,6 +1,6 @@ import { Component, OnInit } from "@angular/core"; -import { CollectionService, Collection } from "@bitwarden/admin-console/common"; +import { CollectionService } from "@bitwarden/admin-console/common"; import { OrganizationService } from "@bitwarden/common/admin-console/abstractions/organization/organization.service.abstraction"; import { AccountService } from "@bitwarden/common/auth/abstractions/account.service"; import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; @@ -53,17 +53,10 @@ export class UnsecuredWebsitesReportComponent extends CipherReportComponent impl async setCiphers() { const allCiphers = await this.getAllCiphers(); - const allCollections = await this.collectionService.getAll(); this.filterStatus = [0]; const unsecuredCiphers = allCiphers.filter((c) => { - const containsUnsecured = this.cipherContainsUnsecured(c); - if (containsUnsecured === false) { - return false; - } - - const canView = this.canView(c, allCollections); - return canView; + return this.cipherContainsUnsecured(c); }); this.filterCiphersByOrg(unsecuredCiphers); @@ -74,7 +67,12 @@ export class UnsecuredWebsitesReportComponent extends CipherReportComponent impl * @param cipher Current cipher with unsecured uri */ private cipherContainsUnsecured(cipher: CipherView): boolean { - if (cipher.type !== CipherType.Login || !cipher.login.hasUris || cipher.isDeleted) { + if ( + cipher.type !== CipherType.Login || + !cipher.login.hasUris || + cipher.isDeleted || + (!this.organization && !cipher.edit) + ) { return false; } @@ -85,19 +83,13 @@ export class UnsecuredWebsitesReportComponent extends CipherReportComponent impl } /** - * If the user does not have readonly set or it's false they have the ability to edit - * @param cipher Current cipher with unsecured uri - * @param allCollections The collections for the user + * Provides a way to determine if someone with permissions to run an organizational report is also able to view/edit ciphers within the results + * Default to true for indivduals running reports on their own vault. + * @param c CipherView + * @returns boolean */ - private canView(cipher: CipherView, allCollections: Collection[]): boolean { - if (!cipher.organizationId) { - return true; - } - - return ( - allCollections.filter( - (item) => cipher.collectionIds.indexOf(item.id) > -1 && !(item.readOnly ?? false), - ).length > 0 - ); + protected canManageCipher(c: CipherView): boolean { + // this will only ever be false from the org view; + return true; } } diff --git a/apps/web/src/app/tools/reports/pages/weak-passwords-report.component.spec.ts b/apps/web/src/app/tools/reports/pages/weak-passwords-report.component.spec.ts index 739deee286a..d78dc7e3ceb 100644 --- a/apps/web/src/app/tools/reports/pages/weak-passwords-report.component.spec.ts +++ b/apps/web/src/app/tools/reports/pages/weak-passwords-report.component.spec.ts @@ -1,4 +1,3 @@ -// eslint-disable-next-line no-restricted-imports import { ComponentFixture, TestBed } from "@angular/core/testing"; import { mock, MockProxy } from "jest-mock-extended"; import { of } from "rxjs"; @@ -85,6 +84,8 @@ describe("WeakPasswordsReportComponent", () => { }, ], schemas: [], + // FIXME(PM-18598): Replace unknownElements and unknownProperties with actual imports + errorOnUnknownElements: false, }).compileComponents(); }); diff --git a/apps/web/src/app/tools/send/add-edit.component.html b/apps/web/src/app/tools/send/add-edit.component.html deleted file mode 100644 index 7eade18a7c6..00000000000 --- a/apps/web/src/app/tools/send/add-edit.component.html +++ /dev/null @@ -1,286 +0,0 @@ - - - - {{ title }} - - - - {{ "sendDisabledWarning" | i18n }} - - - {{ "sendOptionsPolicyInEffect" | i18n }} -
    -
  • {{ "sendDisableHideEmailInEffect" | i18n }}
  • -
-
- - {{ "name" | i18n }} - - {{ "sendNameDesc" | i18n }} - -
- - {{ "whatTypeOfSend" | i18n }} - - - - {{ o.name }} - - - - -
- - - - {{ "sendTypeText" | i18n }} - - {{ "sendTextDesc" | i18n }} - - - - {{ "textHiddenByDefault" | i18n }} - - - - -
-
- {{ "file" | i18n }} -

- {{ send.file.fileName }} ({{ send.file.sizeName }}) -

-
- - {{ "file" | i18n }} -
- - {{ selectedFile?.name ?? ("noFileChosen" | i18n) }} -
- - {{ "sendFileDesc" | i18n }} {{ "maxFileSize" | i18n }} -
-
-
-

{{ "share" | i18n }}

- - - {{ "sendLinkLabel" | i18n }} - - - - - - {{ "copySendLinkOnSave" | i18n }} - -
-

- -

-
-
-
-
- - {{ "deletionDate" | i18n }} - - - - - - - {{ "deletionDateDesc" | i18n }} - -
-
- - {{ "deletionDate" | i18n }} - - {{ "deletionDateDesc" | i18n }} - -
-
- - - {{ "expirationDate" | i18n }} - - - - - - - - {{ "expirationDateDesc" | i18n }} - -
-
- - - {{ "expirationDate" | i18n }} - - - - - {{ "expirationDateDesc" | i18n }} - -
-
-
- - {{ "maxAccessCount" | i18n }} - - {{ "maxAccessCountDesc" | i18n }} - - - {{ "currentAccessCount" | i18n }} - - -
-
- - {{ "password" | i18n }} - {{ "newPassword" | i18n }} - - - - {{ "sendPasswordDesc" | i18n }} - -
- - {{ "notes" | i18n }} - - {{ "sendNotesDesc" | i18n }} - - - - - {{ "hideEmail" | i18n }} - - - - - {{ "disableThisSend" | i18n }} - -
-
- - - - - - -
- diff --git a/apps/web/src/app/tools/send/add-edit.component.ts b/apps/web/src/app/tools/send/add-edit.component.ts deleted file mode 100644 index 4ce126a33bc..00000000000 --- a/apps/web/src/app/tools/send/add-edit.component.ts +++ /dev/null @@ -1,102 +0,0 @@ -// FIXME: Update this file to be type safe and remove this and next line -// @ts-strict-ignore -import { DIALOG_DATA, DialogRef } from "@angular/cdk/dialog"; -import { DatePipe } from "@angular/common"; -import { Component, Inject } from "@angular/core"; -import { FormBuilder } from "@angular/forms"; - -import { AddEditComponent as BaseAddEditComponent } from "@bitwarden/angular/tools/send/add-edit.component"; -import { PolicyService } from "@bitwarden/common/admin-console/abstractions/policy/policy.service.abstraction"; -import { AccountService } from "@bitwarden/common/auth/abstractions/account.service"; -import { BillingAccountProfileStateService } from "@bitwarden/common/billing/abstractions/account/billing-account-profile-state.service"; -import { EnvironmentService } from "@bitwarden/common/platform/abstractions/environment.service"; -import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; -import { LogService } from "@bitwarden/common/platform/abstractions/log.service"; -import { MessagingService } from "@bitwarden/common/platform/abstractions/messaging.service"; -import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service"; -import { StateService } from "@bitwarden/common/platform/abstractions/state.service"; -import { SendApiService } from "@bitwarden/common/tools/send/services/send-api.service.abstraction"; -import { SendService } from "@bitwarden/common/tools/send/services/send.service.abstraction"; -import { DialogService, ToastService } from "@bitwarden/components"; - -@Component({ - selector: "app-send-add-edit", - templateUrl: "add-edit.component.html", -}) -export class AddEditComponent extends BaseAddEditComponent { - override componentName = "app-send-add-edit"; - protected selectedFile: File; - - constructor( - i18nService: I18nService, - platformUtilsService: PlatformUtilsService, - environmentService: EnvironmentService, - datePipe: DatePipe, - sendService: SendService, - stateService: StateService, - messagingService: MessagingService, - policyService: PolicyService, - logService: LogService, - sendApiService: SendApiService, - dialogService: DialogService, - formBuilder: FormBuilder, - billingAccountProfileStateService: BillingAccountProfileStateService, - protected dialogRef: DialogRef, - @Inject(DIALOG_DATA) params: { sendId: string }, - accountService: AccountService, - toastService: ToastService, - ) { - super( - i18nService, - platformUtilsService, - environmentService, - datePipe, - sendService, - messagingService, - policyService, - logService, - stateService, - sendApiService, - dialogService, - formBuilder, - billingAccountProfileStateService, - accountService, - toastService, - ); - - this.sendId = params.sendId; - } - - async copyLinkToClipboard(link: string): Promise { - // Copy function on web depends on the modal being open or not. Since this event occurs during a transition - // of the modal closing we need to add a small delay to make sure state of the DOM is consistent. - return new Promise((resolve) => { - window.setTimeout(() => resolve(super.copyLinkToClipboard(link)), 500); - }); - } - - protected setSelectedFile(event: Event) { - const fileInputEl = event.target; - const file = fileInputEl.files.length > 0 ? fileInputEl.files[0] : null; - this.selectedFile = file; - } - - submitAndClose = async () => { - this.formGroup.markAllAsTouched(); - if (this.formGroup.invalid) { - return; - } - - const success = await this.submit(); - if (success) { - this.dialogRef.close(); - } - }; - - deleteAndClose = async () => { - const success = await this.delete(); - if (success) { - this.dialogRef.close(); - } - }; -} diff --git a/apps/web/src/app/tools/send/new-send/new-send-dropdown.component.html b/apps/web/src/app/tools/send/new-send/new-send-dropdown.component.html new file mode 100644 index 00000000000..34e28be1084 --- /dev/null +++ b/apps/web/src/app/tools/send/new-send/new-send-dropdown.component.html @@ -0,0 +1,23 @@ + + + + + {{ "sendTypeText" | i18n }} + + + + {{ "sendTypeFile" | i18n }} + + + diff --git a/apps/web/src/app/tools/send/new-send/new-send-dropdown.component.ts b/apps/web/src/app/tools/send/new-send/new-send-dropdown.component.ts new file mode 100644 index 00000000000..8cd052aa016 --- /dev/null +++ b/apps/web/src/app/tools/send/new-send/new-send-dropdown.component.ts @@ -0,0 +1,63 @@ +import { CommonModule } from "@angular/common"; +import { Component, Input } from "@angular/core"; +import { Router } from "@angular/router"; +import { firstValueFrom, Observable, of, switchMap } from "rxjs"; + +import { JslibModule } from "@bitwarden/angular/jslib.module"; +import { AccountService } from "@bitwarden/common/auth/abstractions/account.service"; +import { BillingAccountProfileStateService } from "@bitwarden/common/billing/abstractions"; +import { SendType } from "@bitwarden/common/tools/send/enums/send-type"; +import { BadgeModule, ButtonModule, DialogService, MenuModule } from "@bitwarden/components"; +import { DefaultSendFormConfigService, SendAddEditDialogComponent } from "@bitwarden/send-ui"; + +@Component({ + selector: "tools-new-send-dropdown", + templateUrl: "new-send-dropdown.component.html", + standalone: true, + imports: [JslibModule, CommonModule, ButtonModule, MenuModule, BadgeModule], + providers: [DefaultSendFormConfigService], +}) +/** + * A dropdown component that allows the user to create a new Send of a specific type. + */ +export class NewSendDropdownComponent { + /** If true, the plus icon will be hidden */ + @Input() hideIcon: boolean = false; + + /** SendType provided for the markup to pass back the selected type of Send */ + protected sendType = SendType; + + /** Indicates whether the user can access premium features. */ + protected canAccessPremium$: Observable; + + constructor( + private router: Router, + private billingAccountProfileStateService: BillingAccountProfileStateService, + private accountService: AccountService, + private dialogService: DialogService, + private addEditFormConfigService: DefaultSendFormConfigService, + ) { + this.canAccessPremium$ = this.accountService.activeAccount$.pipe( + switchMap((account) => + account + ? this.billingAccountProfileStateService.hasPremiumFromAnySource$(account.id) + : of(false), + ), + ); + } + + /** + * Opens the SendAddEditComponent for a new Send with the provided type. + * If has user does not have premium access and the type is File, the user will be redirected to the premium settings page. + * @param type The type of Send to create. + */ + async createSend(type: SendType) { + if (!(await firstValueFrom(this.canAccessPremium$)) && type === SendType.File) { + return await this.router.navigate(["settings/subscription/premium"]); + } + + const formConfig = await this.addEditFormConfigService.buildConfig("add", undefined, type); + + await SendAddEditDialogComponent.open(this.dialogService, { formConfig }); + } +} diff --git a/apps/web/src/app/tools/send/send-access/access.component.ts b/apps/web/src/app/tools/send/send-access/access.component.ts index a2922914ba5..6bed32e97d5 100644 --- a/apps/web/src/app/tools/send/send-access/access.component.ts +++ b/apps/web/src/app/tools/send/send-access/access.component.ts @@ -39,7 +39,6 @@ import { SendAccessTextComponent } from "./send-access-text.component"; NoItemsModule, ], }) -// eslint-disable-next-line rxjs-angular/prefer-takeuntil export class AccessComponent implements OnInit { protected send: SendAccessView; protected sendType = SendType; diff --git a/apps/web/src/app/tools/send/send.component.html b/apps/web/src/app/tools/send/send.component.html index 7aab50b33e5..6f690459bb0 100644 --- a/apps/web/src/app/tools/send/send.component.html +++ b/apps/web/src/app/tools/send/send.component.html @@ -11,11 +11,7 @@
- - + @@ -198,10 +194,11 @@ {{ "sendsNoItemsTitle" | i18n }} {{ "sendsNoItemsMessage" | i18n }} - +
diff --git a/apps/web/src/app/tools/send/send.component.ts b/apps/web/src/app/tools/send/send.component.ts index 1268e4bfb50..d88517f53e5 100644 --- a/apps/web/src/app/tools/send/send.component.ts +++ b/apps/web/src/app/tools/send/send.component.ts @@ -1,11 +1,13 @@ // FIXME: Update this file to be type safe and remove this and next line // @ts-strict-ignore -import { Component, NgZone, ViewChild, OnInit, OnDestroy, ViewContainerRef } from "@angular/core"; +import { DialogRef } from "@angular/cdk/dialog"; +import { Component, NgZone, OnInit, OnDestroy } from "@angular/core"; import { lastValueFrom } from "rxjs"; import { SendComponent as BaseSendComponent } from "@bitwarden/angular/tools/send/send.component"; import { SearchService } from "@bitwarden/common/abstractions/search.service"; import { PolicyService } from "@bitwarden/common/admin-console/abstractions/policy/policy.service.abstraction"; +import { AccountService } from "@bitwarden/common/auth/abstractions/account.service"; import { BroadcasterService } from "@bitwarden/common/platform/abstractions/broadcaster.service"; import { EnvironmentService } from "@bitwarden/common/platform/abstractions/environment.service"; import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; @@ -14,6 +16,7 @@ import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/pl import { SendView } from "@bitwarden/common/tools/send/models/view/send.view"; import { SendApiService } from "@bitwarden/common/tools/send/services/send-api.service.abstraction"; import { SendService } from "@bitwarden/common/tools/send/services/send.service.abstraction"; +import { SendId } from "@bitwarden/common/types/guid"; import { DialogService, NoItemsModule, @@ -21,24 +24,30 @@ import { TableDataSource, ToastService, } from "@bitwarden/components"; -import { NoSendsIcon } from "@bitwarden/send-ui"; +import { + DefaultSendFormConfigService, + NoSendsIcon, + SendFormConfig, + SendAddEditDialogComponent, + SendItemDialogResult, +} from "@bitwarden/send-ui"; import { HeaderModule } from "../../layouts/header/header.module"; import { SharedModule } from "../../shared"; -import { AddEditComponent } from "./add-edit.component"; +import { NewSendDropdownComponent } from "./new-send/new-send-dropdown.component"; const BroadcasterSubscriptionId = "SendComponent"; @Component({ selector: "app-send", standalone: true, - imports: [SharedModule, SearchModule, NoItemsModule, HeaderModule], + imports: [SharedModule, SearchModule, NoItemsModule, HeaderModule, NewSendDropdownComponent], templateUrl: "send.component.html", + providers: [DefaultSendFormConfigService], }) export class SendComponent extends BaseSendComponent implements OnInit, OnDestroy { - @ViewChild("sendAddEdit", { read: ViewContainerRef, static: true }) - sendAddEditModalRef: ViewContainerRef; + private sendItemDialogRef?: DialogRef | undefined; noItemIcon = NoSendsIcon; override set filteredSends(filteredSends: SendView[]) { @@ -65,6 +74,8 @@ export class SendComponent extends BaseSendComponent implements OnInit, OnDestro sendApiService: SendApiService, dialogService: DialogService, toastService: ToastService, + private addEditFormConfigService: DefaultSendFormConfigService, + accountService: AccountService, ) { super( sendService, @@ -78,6 +89,7 @@ export class SendComponent extends BaseSendComponent implements OnInit, OnDestro sendApiService, dialogService, toastService, + accountService, ); } @@ -111,17 +123,41 @@ export class SendComponent extends BaseSendComponent implements OnInit, OnDestro return; } - await this.editSend(null); + const config = await this.addEditFormConfigService.buildConfig("add", null, 0); + + await this.openSendItemDialog(config); } async editSend(send: SendView) { - const dialog = this.dialogService.open(AddEditComponent, { - data: { - sendId: send == null ? null : send.id, - }, + const config = await this.addEditFormConfigService.buildConfig( + send == null ? "add" : "edit", + send == null ? null : (send.id as SendId), + send.type, + ); + + await this.openSendItemDialog(config); + } + + /** + * Opens the send item dialog. + * @param formConfig The form configuration. + * */ + async openSendItemDialog(formConfig: SendFormConfig) { + // Prevent multiple dialogs from being opened. + if (this.sendItemDialogRef) { + return; + } + + this.sendItemDialogRef = SendAddEditDialogComponent.open(this.dialogService, { + formConfig, }); - await lastValueFrom(dialog.closed); - await this.load(); + const result = await lastValueFrom(this.sendItemDialogRef.closed); + this.sendItemDialogRef = undefined; + + // If the dialog was closed by deleting the cipher, refresh the vault. + if (result === SendItemDialogResult.Deleted || result === SendItemDialogResult.Saved) { + await this.load(); + } } } diff --git a/apps/web/src/app/vault/components/browser-extension-prompt/browser-extension-prompt.component.spec.ts b/apps/web/src/app/vault/components/browser-extension-prompt/browser-extension-prompt.component.spec.ts index 40dbc0d442e..0bea6c186eb 100644 --- a/apps/web/src/app/vault/components/browser-extension-prompt/browser-extension-prompt.component.spec.ts +++ b/apps/web/src/app/vault/components/browser-extension-prompt/browser-extension-prompt.component.spec.ts @@ -13,12 +13,27 @@ import { BrowserExtensionPromptComponent } from "./browser-extension-prompt.comp describe("BrowserExtensionPromptComponent", () => { let fixture: ComponentFixture; - + let component: BrowserExtensionPromptComponent; const start = jest.fn(); const pageState$ = new BehaviorSubject(BrowserPromptState.Loading); + const setAttribute = jest.fn(); + const getAttribute = jest.fn().mockReturnValue("width=1010"); beforeEach(async () => { start.mockClear(); + setAttribute.mockClear(); + getAttribute.mockClear(); + + // Store original querySelector + const originalQuerySelector = document.querySelector.bind(document); + + // Mock querySelector while preserving the document context + jest.spyOn(document, "querySelector").mockImplementation(function (selector) { + if (selector === 'meta[name="viewport"]') { + return { setAttribute, getAttribute } as unknown as HTMLMetaElement; + } + return originalQuerySelector.call(document, selector); + }); await TestBed.configureTestingModule({ providers: [ @@ -34,9 +49,14 @@ describe("BrowserExtensionPromptComponent", () => { }).compileComponents(); fixture = TestBed.createComponent(BrowserExtensionPromptComponent); + component = fixture.componentInstance; fixture.detectChanges(); }); + afterEach(() => { + jest.restoreAllMocks(); + }); + it("calls start on initialization", () => { expect(start).toHaveBeenCalledTimes(1); }); @@ -87,6 +107,33 @@ describe("BrowserExtensionPromptComponent", () => { const mobileText = fixture.debugElement.query(By.css("p")).nativeElement; expect(mobileText.textContent.trim()).toBe("reopenLinkOnDesktop"); }); + + it("sets min-width on the body", () => { + expect(document.body.style.minWidth).toBe("auto"); + }); + + it("stores viewport content", () => { + expect(getAttribute).toHaveBeenCalledWith("content"); + expect(component["viewportContent"]).toBe("width=1010"); + }); + + it("sets viewport meta tag to be mobile friendly", () => { + expect(setAttribute).toHaveBeenCalledWith("content", "width=device-width, initial-scale=1.0"); + }); + + describe("on destroy", () => { + beforeEach(() => { + fixture.destroy(); + }); + + it("resets body min-width", () => { + expect(document.body.style.minWidth).toBe(""); + }); + + it("resets viewport meta tag", () => { + expect(setAttribute).toHaveBeenCalledWith("content", "width=1010"); + }); + }); }); describe("manual error state", () => { diff --git a/apps/web/src/app/vault/components/browser-extension-prompt/browser-extension-prompt.component.ts b/apps/web/src/app/vault/components/browser-extension-prompt/browser-extension-prompt.component.ts index 640a1b0d771..4d3a5fa07dd 100644 --- a/apps/web/src/app/vault/components/browser-extension-prompt/browser-extension-prompt.component.ts +++ b/apps/web/src/app/vault/components/browser-extension-prompt/browser-extension-prompt.component.ts @@ -1,5 +1,5 @@ -import { CommonModule } from "@angular/common"; -import { Component, OnInit } from "@angular/core"; +import { CommonModule, DOCUMENT } from "@angular/common"; +import { Component, Inject, OnDestroy, OnInit } from "@angular/core"; import { ButtonComponent, IconModule } from "@bitwarden/components"; import { I18nPipe } from "@bitwarden/ui-common"; @@ -16,7 +16,7 @@ import { standalone: true, imports: [CommonModule, I18nPipe, ButtonComponent, IconModule], }) -export class BrowserExtensionPromptComponent implements OnInit { +export class BrowserExtensionPromptComponent implements OnInit, OnDestroy { /** Current state of the prompt page */ protected pageState$ = this.browserExtensionPromptService.pageState$; @@ -25,10 +25,39 @@ export class BrowserExtensionPromptComponent implements OnInit { protected BitwardenIcon = VaultIcons.BitwardenIcon; - constructor(private browserExtensionPromptService: BrowserExtensionPromptService) {} + /** Content of the meta[name="viewport"] element */ + private viewportContent: string | null = null; + + constructor( + private browserExtensionPromptService: BrowserExtensionPromptService, + @Inject(DOCUMENT) private document: Document, + ) {} ngOnInit(): void { this.browserExtensionPromptService.start(); + + // It is not be uncommon for users to hit this page from a mobile device. + // There are global styles and the viewport meta tag that set a min-width + // for the page which cause it to render poorly. Remove them here. + // https://github.com/bitwarden/clients/blob/main/apps/web/src/scss/base.scss#L6 + this.document.body.style.minWidth = "auto"; + + const viewportMeta = this.document.querySelector('meta[name="viewport"]'); + + // Save the current viewport content to reset it when the component is destroyed + this.viewportContent = viewportMeta?.getAttribute("content") ?? null; + viewportMeta?.setAttribute("content", "width=device-width, initial-scale=1.0"); + } + + ngOnDestroy(): void { + // Reset the body min-width when the component is destroyed + this.document.body.style.minWidth = ""; + + if (this.viewportContent !== null) { + this.document + .querySelector('meta[name="viewport"]') + ?.setAttribute("content", this.viewportContent); + } } openExtension(): void { diff --git a/apps/web/src/app/vault/components/collection-dialog/collection-dialog.module.ts b/apps/web/src/app/vault/components/collection-dialog/collection-dialog.module.ts deleted file mode 100644 index a8f284fb485..00000000000 --- a/apps/web/src/app/vault/components/collection-dialog/collection-dialog.module.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { NgModule } from "@angular/core"; - -import { SelectModule } from "@bitwarden/components"; - -import { AccessSelectorModule } from "../../../admin-console/organizations/shared/components/access-selector/access-selector.module"; -import { SharedModule } from "../../../shared"; - -import { CollectionDialogComponent } from "./collection-dialog.component"; -@NgModule({ - imports: [SharedModule, AccessSelectorModule, SelectModule], - declarations: [CollectionDialogComponent], - exports: [CollectionDialogComponent], -}) -export class CollectionDialogModule {} diff --git a/apps/web/src/app/vault/components/vault-item-dialog/vault-item-dialog.component.ts b/apps/web/src/app/vault/components/vault-item-dialog/vault-item-dialog.component.ts index 59275eb4e7c..881903e79e5 100644 --- a/apps/web/src/app/vault/components/vault-item-dialog/vault-item-dialog.component.ts +++ b/apps/web/src/app/vault/components/vault-item-dialog/vault-item-dialog.component.ts @@ -36,6 +36,7 @@ import { ToastService, } from "@bitwarden/components"; import { + ChangeLoginPasswordService, CipherAttachmentsComponent, CipherFormComponent, CipherFormConfig, @@ -43,6 +44,9 @@ import { CipherFormModule, CipherViewComponent, DecryptionFailureDialogComponent, + DefaultChangeLoginPasswordService, + DefaultTaskService, + TaskService, } from "@bitwarden/vault"; import { SharedModule } from "../../../shared/shared.module"; @@ -136,6 +140,8 @@ export enum VaultItemDialogResult { { provide: ViewPasswordHistoryService, useClass: WebViewPasswordHistoryService }, { provide: CipherFormGenerationService, useClass: WebCipherFormGenerationService }, RoutedVaultFilterService, + { provide: TaskService, useClass: DefaultTaskService }, + { provide: ChangeLoginPasswordService, useClass: DefaultChangeLoginPasswordService }, ], }) export class VaultItemDialogComponent implements OnInit, OnDestroy { diff --git a/apps/web/src/app/vault/components/vault-items/vault-items.module.ts b/apps/web/src/app/vault/components/vault-items/vault-items.module.ts index ac0d0fb1947..5a0a98a84b2 100644 --- a/apps/web/src/app/vault/components/vault-items/vault-items.module.ts +++ b/apps/web/src/app/vault/components/vault-items/vault-items.module.ts @@ -5,11 +5,11 @@ import { RouterModule } from "@angular/router"; import { TableModule } from "@bitwarden/components"; +import { CollectionBadgeModule } from "../../../admin-console/organizations/collections/collection-badge/collection-badge.module"; +import { GroupBadgeModule } from "../../../admin-console/organizations/collections/group-badge/group-badge.module"; import { SharedModule } from "../../../shared/shared.module"; import { OrganizationBadgeModule } from "../../individual-vault/organization-badge/organization-badge.module"; import { PipesModule } from "../../individual-vault/pipes/pipes.module"; -import { CollectionBadgeModule } from "../../org-vault/collection-badge/collection-badge.module"; -import { GroupBadgeModule } from "../../org-vault/group-badge/group-badge.module"; import { VaultCipherRowComponent } from "./vault-cipher-row.component"; import { VaultCollectionRowComponent } from "./vault-collection-row.component"; diff --git a/apps/web/src/app/vault/components/web-generator-dialog/web-generator-dialog.component.html b/apps/web/src/app/vault/components/web-generator-dialog/web-generator-dialog.component.html index 0c6beae5d51..b62eb8515be 100644 --- a/apps/web/src/app/vault/components/web-generator-dialog/web-generator-dialog.component.html +++ b/apps/web/src/app/vault/components/web-generator-dialog/web-generator-dialog.component.html @@ -1,12 +1,13 @@ - {{ title }} + {{ titleKey | i18n }} @@ -17,8 +18,9 @@ buttonType="primary" (click)="selectValue()" data-testid="select-button" + [disabled]="!(buttonLabel && generatedValue)" > - {{ selectButtonText }} + {{ buttonLabel }} diff --git a/apps/web/src/app/vault/components/web-generator-dialog/web-generator-dialog.component.spec.ts b/apps/web/src/app/vault/components/web-generator-dialog/web-generator-dialog.component.spec.ts index 41f2c7d8348..11a97a1f343 100644 --- a/apps/web/src/app/vault/components/web-generator-dialog/web-generator-dialog.component.spec.ts +++ b/apps/web/src/app/vault/components/web-generator-dialog/web-generator-dialog.component.spec.ts @@ -1,19 +1,19 @@ -// FIXME: Update this file to be type safe and remove this and next line -// @ts-strict-ignore -import { DialogRef, DIALOG_DATA } from "@angular/cdk/dialog"; -import { Component, EventEmitter, Input, Output } from "@angular/core"; +import { DIALOG_DATA, DialogRef } from "@angular/cdk/dialog"; +import { Component, Input, Output, EventEmitter } from "@angular/core"; import { ComponentFixture, TestBed } from "@angular/core/testing"; +import { By } from "@angular/platform-browser"; import { NoopAnimationsModule } from "@angular/platform-browser/animations"; import { mock, MockProxy } from "jest-mock-extended"; import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service"; +import { AlgorithmInfo } from "@bitwarden/generator-core"; import { CipherFormGeneratorComponent } from "@bitwarden/vault"; import { WebVaultGeneratorDialogAction, WebVaultGeneratorDialogComponent, - WebVaultGeneratorDialogParams, + WebVaultGeneratorDialogResult, } from "./web-generator-dialog.component"; @Component({ @@ -22,7 +22,8 @@ import { standalone: true, }) class MockCipherFormGenerator { - @Input() type: "password" | "username"; + @Input() type: "password" | "username" = "password"; + @Output() algorithmSelected: EventEmitter = new EventEmitter(); @Input() uri?: string; @Output() valueGenerated = new EventEmitter(); } @@ -30,35 +31,20 @@ class MockCipherFormGenerator { describe("WebVaultGeneratorDialogComponent", () => { let component: WebVaultGeneratorDialogComponent; let fixture: ComponentFixture; - - let dialogRef: MockProxy>; + let dialogRef: MockProxy>; let mockI18nService: MockProxy; beforeEach(async () => { - dialogRef = mock>(); + dialogRef = mock>(); mockI18nService = mock(); - const mockDialogData: WebVaultGeneratorDialogParams = { type: "password" }; - await TestBed.configureTestingModule({ imports: [NoopAnimationsModule, WebVaultGeneratorDialogComponent], providers: [ - { - provide: DialogRef, - useValue: dialogRef, - }, - { - provide: DIALOG_DATA, - useValue: mockDialogData, - }, - { - provide: I18nService, - useValue: mockI18nService, - }, - { - provide: PlatformUtilsService, - useValue: mock(), - }, + { provide: DialogRef, useValue: dialogRef }, + { provide: DIALOG_DATA, useValue: { type: "password" } }, + { provide: I18nService, useValue: mockI18nService }, + { provide: PlatformUtilsService, useValue: mock() }, ], }) .overrideComponent(WebVaultGeneratorDialogComponent, { @@ -72,38 +58,73 @@ describe("WebVaultGeneratorDialogComponent", () => { fixture.detectChanges(); }); - it("initializes without errors", () => { - fixture.detectChanges(); + it("should create", () => { expect(component).toBeTruthy(); }); - it("closes the dialog with 'canceled' result when close is called", () => { - const closeSpy = jest.spyOn(dialogRef, "close"); + it("should enable button when value and algorithm are selected", () => { + const generator = fixture.debugElement.query( + By.css("vault-cipher-form-generator"), + ).componentInstance; - (component as any).close(); + generator.algorithmSelected.emit({ useGeneratedValue: "Use Password" } as any); + generator.valueGenerated.emit("test-password"); + fixture.detectChanges(); - expect(closeSpy).toHaveBeenCalledWith({ + const button = fixture.debugElement.query( + By.css("[data-testid='select-button']"), + ).nativeElement; + expect(button.disabled).toBe(false); + }); + + it("should disable the button if no value has been generated", () => { + const generator = fixture.debugElement.query( + By.css("vault-cipher-form-generator"), + ).componentInstance; + + generator.algorithmSelected.emit({ useGeneratedValue: "Use Password" } as any); + fixture.detectChanges(); + + const button = fixture.debugElement.query( + By.css("[data-testid='select-button']"), + ).nativeElement; + expect(button.disabled).toBe(true); + }); + + it("should disable the button if no algorithm is selected", () => { + const generator = fixture.debugElement.query( + By.css("vault-cipher-form-generator"), + ).componentInstance; + + generator.valueGenerated.emit("test-password"); + fixture.detectChanges(); + + const button = fixture.debugElement.query( + By.css("[data-testid='select-button']"), + ).nativeElement; + expect(button.disabled).toBe(true); + }); + + it("should close with selected value when confirmed", () => { + const generator = fixture.debugElement.query( + By.css("vault-cipher-form-generator"), + ).componentInstance; + generator.algorithmSelected.emit({ useGeneratedValue: "Use Password" } as any); + generator.valueGenerated.emit("test-password"); + fixture.detectChanges(); + + fixture.debugElement.query(By.css("[data-testid='select-button']")).nativeElement.click(); + + expect(dialogRef.close).toHaveBeenCalledWith({ + action: WebVaultGeneratorDialogAction.Selected, + generatedValue: "test-password", + }); + }); + + it("should close with canceled action when dismissed", () => { + component["close"](); + expect(dialogRef.close).toHaveBeenCalledWith({ action: WebVaultGeneratorDialogAction.Canceled, }); }); - - it("closes the dialog with 'selected' result when selectValue is called", () => { - const closeSpy = jest.spyOn(dialogRef, "close"); - const generatedValue = "generated-value"; - component.onValueGenerated(generatedValue); - - (component as any).selectValue(); - - expect(closeSpy).toHaveBeenCalledWith({ - action: WebVaultGeneratorDialogAction.Selected, - generatedValue: generatedValue, - }); - }); - - it("updates generatedValue when onValueGenerated is called", () => { - const generatedValue = "new-generated-value"; - component.onValueGenerated(generatedValue); - - expect((component as any).generatedValue).toBe(generatedValue); - }); }); diff --git a/apps/web/src/app/vault/components/web-generator-dialog/web-generator-dialog.component.ts b/apps/web/src/app/vault/components/web-generator-dialog/web-generator-dialog.component.ts index a87bcb85804..b0e5514ce21 100644 --- a/apps/web/src/app/vault/components/web-generator-dialog/web-generator-dialog.component.ts +++ b/apps/web/src/app/vault/components/web-generator-dialog/web-generator-dialog.component.ts @@ -6,6 +6,8 @@ import { Component, Inject } from "@angular/core"; import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; import { ButtonModule, DialogModule, DialogService } from "@bitwarden/components"; +import { AlgorithmInfo } from "@bitwarden/generator-core"; +import { I18nPipe } from "@bitwarden/ui-common"; import { CipherFormGeneratorComponent } from "@bitwarden/vault"; export interface WebVaultGeneratorDialogParams { @@ -27,13 +29,11 @@ export enum WebVaultGeneratorDialogAction { selector: "web-vault-generator-dialog", templateUrl: "./web-generator-dialog.component.html", standalone: true, - imports: [CommonModule, CipherFormGeneratorComponent, ButtonModule, DialogModule], + imports: [CommonModule, CipherFormGeneratorComponent, ButtonModule, DialogModule, I18nPipe], }) export class WebVaultGeneratorDialogComponent { - protected title = this.i18nService.t(this.isPassword ? "passwordGenerator" : "usernameGenerator"); - protected selectButtonText = this.i18nService.t( - this.isPassword ? "useThisPassword" : "useThisUsername", - ); + protected titleKey = this.isPassword ? "passwordGenerator" : "usernameGenerator"; + protected buttonLabel: string | undefined; /** * Whether the dialog is generating a password/passphrase. If false, it is generating a username. @@ -80,6 +80,16 @@ export class WebVaultGeneratorDialogComponent { this.generatedValue = value; } + onAlgorithmSelected = (selected?: AlgorithmInfo) => { + if (selected) { + this.buttonLabel = selected.useGeneratedValue; + } else { + // default to email + this.buttonLabel = this.i18nService.t("useThisEmail"); + } + this.generatedValue = undefined; + }; + /** * Opens the vault generator dialog. */ diff --git a/apps/web/src/app/vault/individual-vault/add-edit.component.ts b/apps/web/src/app/vault/individual-vault/add-edit.component.ts index a794687c45b..3df2b9a83c9 100644 --- a/apps/web/src/app/vault/individual-vault/add-edit.component.ts +++ b/apps/web/src/app/vault/individual-vault/add-edit.component.ts @@ -135,12 +135,15 @@ export class AddEditComponent extends BaseAddEditComponent implements OnInit, On if (this.showTotp()) { await this.totpUpdateCode(); - const interval = this.totpService.getTimeInterval(this.cipher.login.totp); - await this.totpTick(interval); - - this.totpInterval = window.setInterval(async () => { + const totpResponse = await firstValueFrom(this.totpService.getCode$(this.cipher.login.totp)); + if (totpResponse) { + const interval = totpResponse.period; await this.totpTick(interval); - }, 1000); + + this.totpInterval = window.setInterval(async () => { + await this.totpTick(interval); + }, 1000); + } } this.cardIsExpired = isCardExpired(this.cipher.card); @@ -273,7 +276,8 @@ export class AddEditComponent extends BaseAddEditComponent implements OnInit, On return; } - this.totpCode = await this.totpService.getCode(this.cipher.login.totp); + const totpResponse = await firstValueFrom(this.totpService.getCode$(this.cipher.login.totp)); + this.totpCode = totpResponse?.code; if (this.totpCode != null) { if (this.totpCode.length > 4) { const half = Math.floor(this.totpCode.length / 2); diff --git a/apps/web/src/app/vault/individual-vault/vault-banners/services/vault-banners.service.spec.ts b/apps/web/src/app/vault/individual-vault/vault-banners/services/vault-banners.service.spec.ts index 88fae02275f..4ce65b9f771 100644 --- a/apps/web/src/app/vault/individual-vault/vault-banners/services/vault-banners.service.spec.ts +++ b/apps/web/src/app/vault/individual-vault/vault-banners/services/vault-banners.service.spec.ts @@ -6,7 +6,11 @@ import { UserDecryptionOptionsServiceAbstraction, } from "@bitwarden/auth/common"; import { AccountInfo, AccountService } from "@bitwarden/common/auth/abstractions/account.service"; +import { DevicesServiceAbstraction } from "@bitwarden/common/auth/abstractions/devices/devices.service.abstraction"; +import { DeviceResponse } from "@bitwarden/common/auth/abstractions/devices/responses/device.response"; +import { DeviceView } from "@bitwarden/common/auth/abstractions/devices/views/device.view"; import { BillingAccountProfileStateService } from "@bitwarden/common/billing/abstractions/account/billing-account-profile-state.service"; +import { DeviceType } from "@bitwarden/common/enums"; import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service"; import { Utils } from "@bitwarden/common/platform/misc/utils"; import { StateProvider } from "@bitwarden/common/platform/state"; @@ -36,6 +40,7 @@ describe("VaultBannersService", () => { const accounts$ = new BehaviorSubject>({ [userId]: { email: "test@bitwarden.com", emailVerified: true, name: "name" } as AccountInfo, }); + const devices$ = new BehaviorSubject([]); beforeEach(() => { lastSync$.next(new Date("2024-05-14")); @@ -79,6 +84,10 @@ describe("VaultBannersService", () => { userDecryptionOptionsById$: () => userDecryptionOptions$, }, }, + { + provide: DevicesServiceAbstraction, + useValue: { getDevices$: () => devices$ }, + }, ], }); }); @@ -274,4 +283,63 @@ describe("VaultBannersService", () => { expect(await service.shouldShowVerifyEmailBanner(userId)).toBe(false); }); }); + + describe("PendingAuthRequest", () => { + const now = new Date(); + let deviceResponse: DeviceResponse; + + beforeEach(() => { + deviceResponse = new DeviceResponse({ + Id: "device1", + UserId: userId, + Name: "Test Device", + Identifier: "test-device", + Type: DeviceType.Android, + CreationDate: now.toISOString(), + RevisionDate: now.toISOString(), + IsTrusted: false, + }); + // Reset devices list, single user state, and active user state before each test + devices$.next([]); + fakeStateProvider.singleUser.states.clear(); + fakeStateProvider.activeUser.states.clear(); + }); + + it("shows pending auth request banner when there is a pending request", async () => { + deviceResponse.devicePendingAuthRequest = { + id: "123", + creationDate: now.toISOString(), + }; + devices$.next([new DeviceView(deviceResponse)]); + + service = TestBed.inject(VaultBannersService); + + expect(await service.shouldShowPendingAuthRequestBanner(userId)).toBe(true); + }); + + it("does not show pending auth request banner when there are no pending requests", async () => { + deviceResponse.devicePendingAuthRequest = null; + devices$.next([new DeviceView(deviceResponse)]); + + service = TestBed.inject(VaultBannersService); + + expect(await service.shouldShowPendingAuthRequestBanner(userId)).toBe(false); + }); + + it("dismisses pending auth request banner", async () => { + deviceResponse.devicePendingAuthRequest = { + id: "123", + creationDate: now.toISOString(), + }; + devices$.next([new DeviceView(deviceResponse)]); + + service = TestBed.inject(VaultBannersService); + + expect(await service.shouldShowPendingAuthRequestBanner(userId)).toBe(true); + + await service.dismissBanner(userId, VisibleVaultBanner.PendingAuthRequest); + + expect(await service.shouldShowPendingAuthRequestBanner(userId)).toBe(false); + }); + }); }); diff --git a/apps/web/src/app/vault/individual-vault/vault-banners/services/vault-banners.service.ts b/apps/web/src/app/vault/individual-vault/vault-banners/services/vault-banners.service.ts index 475cfc2df22..1fa5ae1ad8b 100644 --- a/apps/web/src/app/vault/individual-vault/vault-banners/services/vault-banners.service.ts +++ b/apps/web/src/app/vault/individual-vault/vault-banners/services/vault-banners.service.ts @@ -3,6 +3,7 @@ import { Observable, combineLatest, firstValueFrom, map, filter, mergeMap, take import { UserDecryptionOptionsServiceAbstraction } from "@bitwarden/auth/common"; import { AccountService } from "@bitwarden/common/auth/abstractions/account.service"; +import { DevicesServiceAbstraction } from "@bitwarden/common/auth/abstractions/devices/devices.service.abstraction"; import { BillingAccountProfileStateService } from "@bitwarden/common/billing/abstractions/account/billing-account-profile-state.service"; import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service"; import { @@ -21,6 +22,7 @@ export enum VisibleVaultBanner { OutdatedBrowser = "outdated-browser", Premium = "premium", VerifyEmail = "verify-email", + PendingAuthRequest = "pending-auth-request", } type PremiumBannerReprompt = { @@ -60,8 +62,23 @@ export class VaultBannersService { private kdfConfigService: KdfConfigService, private syncService: SyncService, private userDecryptionOptionsService: UserDecryptionOptionsServiceAbstraction, + private devicesService: DevicesServiceAbstraction, ) {} + /** Returns true when the pending auth request banner should be shown */ + async shouldShowPendingAuthRequestBanner(userId: UserId): Promise { + const devices = await firstValueFrom(this.devicesService.getDevices$()); + const hasPendingRequest = devices.some( + (device) => device.response?.devicePendingAuthRequest != null, + ); + + const alreadyDismissed = (await this.getBannerDismissedState(userId)).includes( + VisibleVaultBanner.PendingAuthRequest, + ); + + return hasPendingRequest && !alreadyDismissed; + } + shouldShowPremiumBanner$(userId: UserId): Observable { const premiumBannerState = this.premiumBannerState(userId); const premiumSources$ = combineLatest([ diff --git a/apps/web/src/app/vault/individual-vault/vault-banners/vault-banners.component.html b/apps/web/src/app/vault/individual-vault/vault-banners/vault-banners.component.html index 29909e26716..e97f1579f57 100644 --- a/apps/web/src/app/vault/individual-vault/vault-banners/vault-banners.component.html +++ b/apps/web/src/app/vault/individual-vault/vault-banners/vault-banners.component.html @@ -50,6 +50,20 @@ + + {{ "youHaveAPendingLoginRequest" | i18n }} + + {{ "reviewLoginRequest" | i18n }} + + + { let component: VaultBannersComponent; let fixture: ComponentFixture; + let messageSubject: Subject<{ command: string }>; const premiumBanner$ = new BehaviorSubject(false); + const pendingAuthRequest$ = new BehaviorSubject(false); const mockUserId = Utils.newGuid() as UserId; const bannerService = mock({ - shouldShowPremiumBanner$: jest.fn((userId$: Observable) => premiumBanner$), + shouldShowPremiumBanner$: jest.fn((userId: UserId) => premiumBanner$), shouldShowUpdateBrowserBanner: jest.fn(), shouldShowVerifyEmailBanner: jest.fn(), shouldShowLowKDFBanner: jest.fn(), + shouldShowPendingAuthRequestBanner: jest.fn((userId: UserId) => + Promise.resolve(pendingAuthRequest$.value), + ), dismissBanner: jest.fn(), }); const accountService: FakeAccountService = mockAccountServiceWith(mockUserId); beforeEach(async () => { + messageSubject = new Subject<{ command: string }>(); bannerService.shouldShowUpdateBrowserBanner.mockResolvedValue(false); bannerService.shouldShowVerifyEmailBanner.mockResolvedValue(false); bannerService.shouldShowLowKDFBanner.mockResolvedValue(false); - + pendingAuthRequest$.next(false); premiumBanner$.next(false); await TestBed.configureTestingModule({ @@ -74,6 +81,12 @@ describe("VaultBannersComponent", () => { provide: AccountService, useValue: accountService, }, + { + provide: MessageListener, + useValue: mock({ + allMessages$: messageSubject.asObservable(), + }), + }, ], }) .overrideProvider(VaultBannersService, { useValue: bannerService }) @@ -153,5 +166,76 @@ describe("VaultBannersComponent", () => { }); }); }); + + describe("PendingAuthRequest", () => { + beforeEach(async () => { + pendingAuthRequest$.next(true); + await component.ngOnInit(); + fixture.detectChanges(); + }); + + it("shows pending auth request banner", async () => { + expect(component.visibleBanners).toEqual([VisibleVaultBanner.PendingAuthRequest]); + }); + + it("dismisses pending auth request banner", async () => { + const dismissButton = fixture.debugElement.nativeElement.querySelector( + 'button[biticonbutton="bwi-close"]', + ); + + pendingAuthRequest$.next(false); + dismissButton.click(); + fixture.detectChanges(); + + expect(bannerService.dismissBanner).toHaveBeenCalledWith( + mockUserId, + VisibleVaultBanner.PendingAuthRequest, + ); + + // Wait for async operations to complete + await fixture.whenStable(); + await component.determineVisibleBanners(); + fixture.detectChanges(); + + expect(component.visibleBanners).toEqual([]); + }); + }); + }); + + describe("message listener", () => { + beforeEach(async () => { + bannerService.shouldShowPendingAuthRequestBanner.mockResolvedValue(true); + messageSubject.next({ command: "openLoginApproval" }); + fixture.detectChanges(); + }); + + it("adds pending auth request banner when openLoginApproval message is received", async () => { + await component.ngOnInit(); + messageSubject.next({ command: "openLoginApproval" }); + fixture.detectChanges(); + + expect(component.visibleBanners).toContain(VisibleVaultBanner.PendingAuthRequest); + }); + + it("does not add duplicate pending auth request banner", async () => { + await component.ngOnInit(); + messageSubject.next({ command: "openLoginApproval" }); + messageSubject.next({ command: "openLoginApproval" }); + fixture.detectChanges(); + + const bannerCount = component.visibleBanners.filter( + (b) => b === VisibleVaultBanner.PendingAuthRequest, + ).length; + expect(bannerCount).toBe(1); + }); + + it("ignores other message types", async () => { + bannerService.shouldShowPendingAuthRequestBanner.mockResolvedValue(false); + await component.ngOnInit(); + messageSubject.next({ command: "someOtherCommand" }); + fixture.detectChanges(); + + expect(component.visibleBanners).not.toContain(VisibleVaultBanner.PendingAuthRequest); + }); }); }); diff --git a/apps/web/src/app/vault/individual-vault/vault-banners/vault-banners.component.ts b/apps/web/src/app/vault/individual-vault/vault-banners/vault-banners.component.ts index 5a0c0a535b4..5f5fc1e218d 100644 --- a/apps/web/src/app/vault/individual-vault/vault-banners/vault-banners.component.ts +++ b/apps/web/src/app/vault/individual-vault/vault-banners/vault-banners.component.ts @@ -1,11 +1,12 @@ -// FIXME: Update this file to be type safe and remove this and next line -// @ts-strict-ignore import { Component, Input, OnInit } from "@angular/core"; +import { takeUntilDestroyed } from "@angular/core/rxjs-interop"; import { Router } from "@angular/router"; -import { firstValueFrom, map, Observable, switchMap } from "rxjs"; +import { firstValueFrom, map, Observable, switchMap, filter } from "rxjs"; import { AccountService } from "@bitwarden/common/auth/abstractions/account.service"; import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; +import { MessageListener } from "@bitwarden/common/platform/messaging"; +import { UserId } from "@bitwarden/common/types/guid"; import { BannerModule } from "@bitwarden/components"; import { VerifyEmailComponent } from "../../../auth/settings/verify-email.component"; @@ -34,10 +35,24 @@ export class VaultBannersComponent implements OnInit { private router: Router, private i18nService: I18nService, private accountService: AccountService, + private messageListener: MessageListener, ) { this.premiumBannerVisible$ = this.activeUserId$.pipe( + filter((userId): userId is UserId => userId != null), switchMap((userId) => this.vaultBannerService.shouldShowPremiumBanner$(userId)), ); + + // Listen for auth request messages and show banner immediately + this.messageListener.allMessages$ + .pipe( + filter((message: { command: string }) => message.command === "openLoginApproval"), + takeUntilDestroyed(), + ) + .subscribe(() => { + if (!this.visibleBanners.includes(VisibleVaultBanner.PendingAuthRequest)) { + this.visibleBanners = [...this.visibleBanners, VisibleVaultBanner.PendingAuthRequest]; + } + }); } async ngOnInit(): Promise { @@ -46,8 +61,10 @@ export class VaultBannersComponent implements OnInit { async dismissBanner(banner: VisibleVaultBanner): Promise { const activeUserId = await firstValueFrom(this.activeUserId$); + if (!activeUserId) { + return; + } await this.vaultBannerService.dismissBanner(activeUserId, banner); - await this.determineVisibleBanners(); } @@ -63,19 +80,26 @@ export class VaultBannersComponent implements OnInit { } /** Determine which banners should be present */ - private async determineVisibleBanners(): Promise { + async determineVisibleBanners(): Promise { const activeUserId = await firstValueFrom(this.activeUserId$); + if (!activeUserId) { + return; + } + const showBrowserOutdated = await this.vaultBannerService.shouldShowUpdateBrowserBanner(activeUserId); const showVerifyEmail = await this.vaultBannerService.shouldShowVerifyEmailBanner(activeUserId); const showLowKdf = await this.vaultBannerService.shouldShowLowKDFBanner(activeUserId); + const showPendingAuthRequest = + await this.vaultBannerService.shouldShowPendingAuthRequestBanner(activeUserId); this.visibleBanners = [ showBrowserOutdated ? VisibleVaultBanner.OutdatedBrowser : null, showVerifyEmail ? VisibleVaultBanner.VerifyEmail : null, showLowKdf ? VisibleVaultBanner.KDFSettings : null, - ].filter(Boolean); // remove all falsy values, i.e. null + showPendingAuthRequest ? VisibleVaultBanner.PendingAuthRequest : null, + ].filter((banner): banner is VisibleVaultBanner => banner !== null); // ensures the filtered array contains only VisibleVaultBanner values } freeTrialMessage(organization: FreeTrial) { diff --git a/apps/web/src/app/vault/individual-vault/vault-header/vault-header.component.ts b/apps/web/src/app/vault/individual-vault/vault-header/vault-header.component.ts index 63af397e726..000feeaf337 100644 --- a/apps/web/src/app/vault/individual-vault/vault-header/vault-header.component.ts +++ b/apps/web/src/app/vault/individual-vault/vault-header/vault-header.component.ts @@ -18,9 +18,9 @@ import { CipherType } from "@bitwarden/common/vault/enums"; import { TreeNode } from "@bitwarden/common/vault/models/domain/tree-node"; import { BreadcrumbsModule, MenuModule } from "@bitwarden/components"; +import { CollectionDialogTabType } from "../../../admin-console/organizations/shared/components/collection-dialog"; import { HeaderModule } from "../../../layouts/header/header.module"; import { SharedModule } from "../../../shared"; -import { CollectionDialogTabType } from "../../components/collection-dialog"; import { PipesModule } from "../pipes/pipes.module"; import { All, diff --git a/apps/web/src/app/vault/individual-vault/vault.component.ts b/apps/web/src/app/vault/individual-vault/vault.component.ts index 51c00ca18b8..9983567a4d1 100644 --- a/apps/web/src/app/vault/individual-vault/vault.component.ts +++ b/apps/web/src/app/vault/individual-vault/vault.component.ts @@ -75,15 +75,15 @@ import { PasswordRepromptService, } from "@bitwarden/vault"; -import { TrialFlowService } from "../../billing/services/trial-flow.service"; -import { FreeTrial } from "../../billing/types/free-trial"; -import { SharedModule } from "../../shared/shared.module"; -import { AssignCollectionsWebComponent } from "../components/assign-collections"; import { CollectionDialogAction, CollectionDialogTabType, openCollectionDialog, -} from "../components/collection-dialog"; +} from "../../admin-console/organizations/shared/components/collection-dialog"; +import { TrialFlowService } from "../../billing/services/trial-flow.service"; +import { FreeTrial } from "../../billing/types/free-trial"; +import { SharedModule } from "../../shared/shared.module"; +import { AssignCollectionsWebComponent } from "../components/assign-collections"; import { VaultItemDialogComponent, VaultItemDialogMode, @@ -348,8 +348,13 @@ export class VaultComponent implements OnInit, OnDestroy { // Append any failed to decrypt ciphers to the top of the cipher list const allCiphers = [...failedCiphers, ...ciphers]; - if (await this.searchService.isSearchable(searchText)) { - return await this.searchService.searchCiphers(searchText, [filterFunction], allCiphers); + if (await this.searchService.isSearchable(activeUserId, searchText)) { + return await this.searchService.searchCiphers( + activeUserId, + searchText, + [filterFunction], + allCiphers, + ); } return allCiphers.filter(filterFunction); @@ -378,7 +383,7 @@ export class VaultComponent implements OnInit, OnDestroy { collectionsToReturn = selectedCollection?.children.map((c) => c.node) ?? []; } - if (await this.searchService.isSearchable(searchText)) { + if (await this.searchService.isSearchable(activeUserId, searchText)) { collectionsToReturn = this.searchPipe.transform( collectionsToReturn, searchText, @@ -1141,7 +1146,8 @@ export class VaultComponent implements OnInit, OnDestroy { typeI18nKey = "password"; } else if (field === "totp") { aType = "TOTP"; - value = await this.totpService.getCode(cipher.login.totp); + const totpResponse = await firstValueFrom(this.totpService.getCode$(cipher.login.totp)); + value = totpResponse.code; typeI18nKey = "verificationCodeTotp"; } else { this.toastService.showToast({ diff --git a/apps/web/src/app/vault/individual-vault/vault.module.ts b/apps/web/src/app/vault/individual-vault/vault.module.ts index 712b86a9803..6b3674fa540 100644 --- a/apps/web/src/app/vault/individual-vault/vault.module.ts +++ b/apps/web/src/app/vault/individual-vault/vault.module.ts @@ -1,9 +1,9 @@ import { NgModule } from "@angular/core"; +import { CollectionBadgeModule } from "../../admin-console/organizations/collections/collection-badge/collection-badge.module"; +import { GroupBadgeModule } from "../../admin-console/organizations/collections/group-badge/group-badge.module"; +import { CollectionDialogComponent } from "../../admin-console/organizations/shared/components/collection-dialog"; import { LooseComponentsModule, SharedModule } from "../../shared"; -import { CollectionDialogModule } from "../components/collection-dialog"; -import { CollectionBadgeModule } from "../org-vault/collection-badge/collection-badge.module"; -import { GroupBadgeModule } from "../org-vault/group-badge/group-badge.module"; import { BulkDialogsModule } from "./bulk-action-dialogs/bulk-dialogs.module"; import { OrganizationBadgeModule } from "./organization-badge/organization-badge.module"; @@ -22,7 +22,7 @@ import { ViewComponent } from "./view.component"; SharedModule, LooseComponentsModule, BulkDialogsModule, - CollectionDialogModule, + CollectionDialogComponent, VaultComponent, ViewComponent, ], diff --git a/apps/web/src/app/vault/individual-vault/view.component.spec.ts b/apps/web/src/app/vault/individual-vault/view.component.spec.ts index 9bea7f14eb5..d1117258124 100644 --- a/apps/web/src/app/vault/individual-vault/view.component.spec.ts +++ b/apps/web/src/app/vault/individual-vault/view.component.spec.ts @@ -12,6 +12,7 @@ import { ConfigService } from "@bitwarden/common/platform/abstractions/config/co import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; import { LogService } from "@bitwarden/common/platform/abstractions/log.service"; import { MessagingService } from "@bitwarden/common/platform/abstractions/messaging.service"; +import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service"; import { Utils } from "@bitwarden/common/platform/misc/utils"; import { FakeAccountService, mockAccountServiceWith } from "@bitwarden/common/spec"; import { UserId } from "@bitwarden/common/types/guid"; @@ -21,6 +22,7 @@ import { CipherView } from "@bitwarden/common/vault/models/view/cipher.view"; import { CipherAuthorizationService } from "@bitwarden/common/vault/services/cipher-authorization.service"; import { DialogService, ToastService } from "@bitwarden/components"; import { KeyService } from "@bitwarden/key-management"; +import { ChangeLoginPasswordService, DefaultTaskService, TaskService } from "@bitwarden/vault"; import { ViewCipherDialogParams, ViewCipherDialogResult, ViewComponent } from "./view.component"; @@ -82,7 +84,33 @@ describe("ViewComponent", () => { }, }, ], - }).compileComponents(); + }) + .overrideComponent(ViewComponent, { + remove: { + providers: [ + { provide: TaskService, useClass: DefaultTaskService }, + { provide: PlatformUtilsService, useValue: PlatformUtilsService }, + { + provide: ChangeLoginPasswordService, + useValue: ChangeLoginPasswordService, + }, + ], + }, + add: { + providers: [ + { + provide: TaskService, + useValue: mock(), + }, + { provide: PlatformUtilsService, useValue: mock() }, + { + provide: ChangeLoginPasswordService, + useValue: mock(), + }, + ], + }, + }) + .compileComponents(); fixture = TestBed.createComponent(ViewComponent); component = fixture.componentInstance; diff --git a/apps/web/src/app/vault/individual-vault/view.component.ts b/apps/web/src/app/vault/individual-vault/view.component.ts index baae6f28bf1..7a2cf3bb2f4 100644 --- a/apps/web/src/app/vault/individual-vault/view.component.ts +++ b/apps/web/src/app/vault/individual-vault/view.component.ts @@ -26,7 +26,7 @@ import { DialogService, ToastService, } from "@bitwarden/components"; -import { CipherViewComponent } from "@bitwarden/vault"; +import { CipherViewComponent, DefaultTaskService, TaskService } from "@bitwarden/vault"; import { SharedModule } from "../../shared/shared.module"; import { WebVaultPremiumUpgradePromptService } from "../services/web-premium-upgrade-prompt.service"; @@ -74,6 +74,7 @@ export interface ViewCipherDialogCloseResult { providers: [ { provide: ViewPasswordHistoryService, useClass: WebViewPasswordHistoryService }, { provide: PremiumUpgradePromptService, useClass: WebVaultPremiumUpgradePromptService }, + { provide: TaskService, useClass: DefaultTaskService }, ], }) export class ViewComponent implements OnInit { diff --git a/apps/web/src/connectors/webauthn-fallback.ts b/apps/web/src/connectors/webauthn-fallback.ts index 5410b89dcfa..3561f922e03 100644 --- a/apps/web/src/connectors/webauthn-fallback.ts +++ b/apps/web/src/connectors/webauthn-fallback.ts @@ -82,8 +82,8 @@ document.addEventListener("DOMContentLoaded", async () => { const titleForSmallerScreens = document.getElementById("title-smaller-screens"); const titleForLargerScreens = document.getElementById("title-larger-screens"); - titleForSmallerScreens.innerText = localeService.t("verifyIdentity"); - titleForLargerScreens.innerText = localeService.t("verifyIdentity"); + titleForSmallerScreens.innerText = localeService.t("verifyYourIdentity"); + titleForLargerScreens.innerText = localeService.t("verifyYourIdentity"); const subtitle = document.getElementById("subtitle"); subtitle.innerText = localeService.t("followTheStepsBelowToFinishLoggingIn"); diff --git a/apps/web/src/locales/af/messages.json b/apps/web/src/locales/af/messages.json index 5c058d2ad6e..a33d058430c 100644 --- a/apps/web/src/locales/af/messages.json +++ b/apps/web/src/locales/af/messages.json @@ -5,6 +5,9 @@ "criticalApplications": { "message": "Critical applications" }, + "noCriticalAppsAtRisk": { + "message": "No critical applications at risk" + }, "accessIntelligence": { "message": "Access Intelligence" }, @@ -198,6 +201,9 @@ "notes": { "message": "Notas" }, + "privateNote": { + "message": "Private note" + }, "note": { "message": "Note" }, @@ -1026,6 +1032,9 @@ "no": { "message": "Nee" }, + "location": { + "message": "Location" + }, "loginOrCreateNewAccount": { "message": "Teken aan of skep ’n nuwe rekening vir toegang tot u beveiligde kluis." }, @@ -1161,13 +1170,22 @@ "logInToBitwarden": { "message": "Log in to Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "Enter the code sent to your email" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Enter the code from your authenticator app" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Press your YubiKey to authenticate" + }, "authenticationTimeout": { "message": "Authentication timeout" }, "authenticationSessionTimedOut": { "message": "The authentication session timed out. Please restart the login process." }, - "verifyIdentity": { + "verifyYourIdentity": { "message": "Verify your Identity" }, "weDontRecognizeThisDevice": { @@ -1443,12 +1461,22 @@ "rememberMe": { "message": "Onthou my" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Don't ask again on this device for 30 days" + }, "sendVerificationCodeEmailAgain": { "message": "Stuur weer e-pos met bevestigingskode" }, "useAnotherTwoStepMethod": { "message": "Gebruik ’n ander tweestapaantekenmetode" }, + "selectAnotherMethod": { + "message": "Select another method", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Use your recovery code" + }, "insertYubiKey": { "message": "Plaas u YubiKey in u rekenaar se USB-poort en druk dan op sy knop." }, @@ -1467,6 +1495,9 @@ "twoStepOptions": { "message": "Opsies vir tweestapaantekening" }, + "selectTwoStepLoginMethod": { + "message": "Select two-step login method" + }, "recoveryCodeDesc": { "message": "Het u toegang tot al u tweestapaanbieders verloor? Gebruik dan u terugstelkode om alle tweestapaanbieders op u rekening te deaktiveer." }, @@ -1509,6 +1540,9 @@ "webAuthnMigrated": { "message": "(Gemigreer van FIDO)" }, + "openInNewTab": { + "message": "Open in new tab" + }, "emailTitle": { "message": "E-pos" }, @@ -2224,6 +2258,9 @@ "revokeAccess": { "message": "Revoke access" }, + "revoke": { + "message": "Revoke" + }, "twoStepLoginProviderEnabled": { "message": "Hierdie tweestapaantekenaanbieder is vir u rekening geaktiveer." }, @@ -4081,6 +4118,12 @@ "updateBrowserDesc": { "message": "U gebruik ’n onondersteunde webblaaier. Die webkluis werk dalk nie soos normaal nie." }, + "youHaveAPendingLoginRequest": { + "message": "You have a pending login request from another device." + }, + "reviewLoginRequest": { + "message": "Review login request" + }, "freeTrialEndPromptCount": { "message": "Your free trial ends in $COUNT$ days.", "placeholders": { @@ -4758,6 +4801,15 @@ "masterPassPolicyDesc": { "message": "Stel minimum vereistes vir hoofwagwoordsterkte." }, + "passwordStrengthScore": { + "message": "Password strength score $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "twoStepLoginPolicyTitle": { "message": "Require two-step login" }, @@ -5038,12 +5090,40 @@ "requireSsoExemption": { "message": "Organisasie-eienaars en -administrateurs is vrygestel van die afdwing van hierdie beleid." }, + "limitSendViews": { + "message": "Limit views" + }, + "limitSendViewsHint": { + "message": "No one can view this Send after the limit is reached.", + "description": "Displayed under the limit views field on Send" + }, + "limitSendViewsCount": { + "message": "$ACCESSCOUNT$ views left", + "description": "Displayed under the limit views field on Send", + "placeholders": { + "accessCount": { + "content": "$1", + "example": "2" + } + } + }, + "sendDetails": { + "message": "Send details", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendTypeTextToShare": { + "message": "Text to share" + }, "sendTypeFile": { "message": "Lêer" }, "sendTypeText": { "message": "Teks" }, + "sendPasswordDescV3": { + "message": "Add an optional password for recipients to access this Send.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "createSend": { "message": "Skep nuwe Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -5068,19 +5148,15 @@ "message": "Skrap Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, - "deleteSendConfirmation": { - "message": "Is u seker u wil hierdie Send skrap?", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "whatTypeOfSend": { - "message": "Welke tipe Send is dit?", + "deleteSendPermanentConfirmation": { + "message": "Are you sure you want to permanently delete this Send?", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "deletionDate": { "message": "Skrapdatum" }, - "deletionDateDesc": { - "message": "Die Send sal outomaties op die aangewese datum en tyd geskrap word.", + "deletionDateDescV2": { + "message": "The Send will be permanently deleted on this date.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "expirationDate": { @@ -5093,21 +5169,6 @@ "maxAccessCount": { "message": "Maksimum toegangsaantal" }, - "maxAccessCountDesc": { - "message": "Indien ingestel het gebruikers ne meer toegang tot hierdie Send sodra die maksimum aantal toegang bereik is.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "currentAccessCount": { - "message": "Huidige toegangsaantal" - }, - "sendPasswordDesc": { - "message": "Vereis opsioneel ’n wagwoord vir gebruikers om toegang tot hierdie Send te verkry.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendNotesDesc": { - "message": "Privaat notas oor hierdie Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "disabled": { "message": "Gedeaktiveer" }, @@ -5134,13 +5195,6 @@ "removePasswordConfirmation": { "message": "Is u seker u wil die wagwoord verwyder?" }, - "hideEmail": { - "message": "Versteek my e-posadres vir ontvangers." - }, - "disableThisSend": { - "message": "Deaktiveer hierdie Send sodat niemand toegang daartoe het nie.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "allSends": { "message": "Alle Sends" }, @@ -5151,6 +5205,9 @@ "pendingDeletion": { "message": "Word geskrap" }, + "hideTextByDefault": { + "message": "Hide text by default" + }, "expired": { "message": "Verstreke" }, @@ -5372,13 +5429,6 @@ "message": "Always show member’s email address with recipients when creating or editing a Send.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, - "sendOptionsPolicyInEffect": { - "message": "The following organization policies are currently in effect:" - }, - "sendDisableHideEmailInEffect": { - "message": "Users are not allowed to hide their email address from recipients when creating or editing a Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "modifiedPolicyId": { "message": "Gewysigde beleid $ID$.", "placeholders": { @@ -5478,27 +5528,6 @@ "personalOwnershipCheckboxDesc": { "message": "Deaktiveer persoonlike eienaarskap vir organisasiegebruikers" }, - "textHiddenByDefault": { - "message": "Versteek die teks be verstek wanneer die Send gebruik word", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendNameDesc": { - "message": "’n Vriendelike naam om hierdie Send te beskryf.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendTextDesc": { - "message": "Die teks wat u wil verstuur." - }, - "sendFileDesc": { - "message": "Die lêer wat u wil verstuur." - }, - "copySendLinkOnSave": { - "message": "Kopieer die skakel om hierdie Send te deel tydens bewaar na my knipbord." - }, - "sendLinkLabel": { - "message": "Send-skakel", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "send": { "message": "Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -5647,12 +5676,21 @@ "dateParsingError": { "message": "There was an error saving your deletion and expiration dates." }, + "hideYourEmail": { + "message": "Hide your email address from viewers." + }, "webAuthnFallbackMsg": { "message": "Klik op onderstaande knop om u 2FA te verifieer." }, "webAuthnAuthenticate": { "message": "Waarmerk WebAuthn" }, + "readSecurityKey": { + "message": "Read security key" + }, + "awaitingSecurityKeyInteraction": { + "message": "Awaiting security key interaction..." + }, "webAuthnNotSupported": { "message": "WebAuthn word nie in hierdie blaaier ondersteun nie." }, @@ -7199,6 +7237,12 @@ "duoRequiredByOrgForAccount": { "message": "Duo two-step login is required for your account." }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Duo two-step login is required for your account. Follow the steps below to finish logging in." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Follow the steps below to finish logging in." + }, "launchDuo": { "message": "Launch Duo" }, @@ -9793,9 +9837,15 @@ "learnMoreAboutApi": { "message": "Learn more about Bitwarden's API" }, + "fileSend": { + "message": "File Send" + }, "fileSends": { "message": "File Sends" }, + "textSend": { + "message": "Text Send" + }, "textSends": { "message": "Text Sends" }, @@ -10029,10 +10079,6 @@ "message": "Include special characters", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "addAttachment": { "message": "Add attachment" }, @@ -10432,10 +10478,31 @@ "assignedExceedsAvailable": { "message": "Assigned seats exceed available seats." }, + "changeAtRiskPassword": { + "message": "Change at-risk password" + }, "removeUnlockWithPinPolicyTitle": { "message": "Remove Unlock with PIN" }, "removeUnlockWithPinPolicyDesc": { "message": "Do not allow members to unlock their account with a PIN." + }, + "limitedEventLogs": { + "message": "$PRODUCT_TYPE$ plans do not have access to real event logs", + "placeholders": { + "product_type": { + "content": "$1", + "example": "Teams" + } + } + }, + "upgradeForFullEvents": { + "message": "Get full access to organization event logs by upgrading to a Teams or Enterprise plan." + }, + "upgradeEventLogTitle": { + "message": "Upgrade for real event log data" + }, + "upgradeEventLogMessage": { + "message": "These events are examples only and do not reflect real events within your Bitwarden organization." } } diff --git a/apps/web/src/locales/ar/messages.json b/apps/web/src/locales/ar/messages.json index c42d23205d9..508d9f4438a 100644 --- a/apps/web/src/locales/ar/messages.json +++ b/apps/web/src/locales/ar/messages.json @@ -5,6 +5,9 @@ "criticalApplications": { "message": "Critical applications" }, + "noCriticalAppsAtRisk": { + "message": "No critical applications at risk" + }, "accessIntelligence": { "message": "Access Intelligence" }, @@ -198,6 +201,9 @@ "notes": { "message": "ملاحظات" }, + "privateNote": { + "message": "Private note" + }, "note": { "message": "ملاحظة" }, @@ -1026,6 +1032,9 @@ "no": { "message": "لا" }, + "location": { + "message": "Location" + }, "loginOrCreateNewAccount": { "message": "قم بتسجيل الدخول أو أنشئ حساباً جديداً لتتمكن من الوصول إلى خزانتك السرية." }, @@ -1161,14 +1170,23 @@ "logInToBitwarden": { "message": "تسجيل الدخول إلى بيتواردن" }, + "enterTheCodeSentToYourEmail": { + "message": "Enter the code sent to your email" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Enter the code from your authenticator app" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Press your YubiKey to authenticate" + }, "authenticationTimeout": { "message": "مهلة المصادقة" }, "authenticationSessionTimedOut": { "message": "The authentication session timed out. Please restart the login process." }, - "verifyIdentity": { - "message": "قم بتأكيد هويتك" + "verifyYourIdentity": { + "message": "Verify your Identity" }, "weDontRecognizeThisDevice": { "message": "We don't recognize this device. Enter the code sent to your email to verify your identity." @@ -1443,12 +1461,22 @@ "rememberMe": { "message": "تذكرني" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Don't ask again on this device for 30 days" + }, "sendVerificationCodeEmailAgain": { "message": "إرسال رمز التحقق إلى البريد الإلكتروني مرة أخرى" }, "useAnotherTwoStepMethod": { "message": "استخدام طريقة أخرى لتسجيل الدخول بخطوتين" }, + "selectAnotherMethod": { + "message": "Select another method", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Use your recovery code" + }, "insertYubiKey": { "message": "Insert your YubiKey into your computer's USB port, then touch its button." }, @@ -1467,6 +1495,9 @@ "twoStepOptions": { "message": "خيارات تسجيل الدخول بخطوتين" }, + "selectTwoStepLoginMethod": { + "message": "Select two-step login method" + }, "recoveryCodeDesc": { "message": "Lost access to all of your two-step login providers? Use your recovery code to turn off all two-step login providers from your account." }, @@ -1509,6 +1540,9 @@ "webAuthnMigrated": { "message": "(Migrated from FIDO)" }, + "openInNewTab": { + "message": "Open in new tab" + }, "emailTitle": { "message": "البريد الإلكتروني" }, @@ -2224,6 +2258,9 @@ "revokeAccess": { "message": "إلغاء الوصول" }, + "revoke": { + "message": "Revoke" + }, "twoStepLoginProviderEnabled": { "message": "This two-step login provider is active on your account." }, @@ -4081,6 +4118,12 @@ "updateBrowserDesc": { "message": "You are using an unsupported web browser. The web vault may not function properly." }, + "youHaveAPendingLoginRequest": { + "message": "You have a pending login request from another device." + }, + "reviewLoginRequest": { + "message": "Review login request" + }, "freeTrialEndPromptCount": { "message": "Your free trial ends in $COUNT$ days.", "placeholders": { @@ -4758,6 +4801,15 @@ "masterPassPolicyDesc": { "message": "Set requirements for master password strength." }, + "passwordStrengthScore": { + "message": "Password strength score $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "twoStepLoginPolicyTitle": { "message": "Require two-step login" }, @@ -5038,12 +5090,40 @@ "requireSsoExemption": { "message": "Organization owners and admins are exempt from this policy's enforcement." }, + "limitSendViews": { + "message": "Limit views" + }, + "limitSendViewsHint": { + "message": "No one can view this Send after the limit is reached.", + "description": "Displayed under the limit views field on Send" + }, + "limitSendViewsCount": { + "message": "$ACCESSCOUNT$ views left", + "description": "Displayed under the limit views field on Send", + "placeholders": { + "accessCount": { + "content": "$1", + "example": "2" + } + } + }, + "sendDetails": { + "message": "Send details", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendTypeTextToShare": { + "message": "Text to share" + }, "sendTypeFile": { "message": "ملف" }, "sendTypeText": { "message": "نص" }, + "sendPasswordDescV3": { + "message": "Add an optional password for recipients to access this Send.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "createSend": { "message": "إرسال جديد", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -5068,19 +5148,15 @@ "message": "Delete Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, - "deleteSendConfirmation": { - "message": "Are you sure you want to delete this Send?", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "whatTypeOfSend": { - "message": "What type of Send is this?", + "deleteSendPermanentConfirmation": { + "message": "Are you sure you want to permanently delete this Send?", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "deletionDate": { "message": "Deletion date" }, - "deletionDateDesc": { - "message": "The Send will be permanently deleted on the specified date and time.", + "deletionDateDescV2": { + "message": "The Send will be permanently deleted on this date.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "expirationDate": { @@ -5093,21 +5169,6 @@ "maxAccessCount": { "message": "Maximum access count" }, - "maxAccessCountDesc": { - "message": "If set, users will no longer be able to access this Send once the maximum access count is reached.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "currentAccessCount": { - "message": "Current access count" - }, - "sendPasswordDesc": { - "message": "Optionally require a password for users to access this Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendNotesDesc": { - "message": "Private notes about this Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "disabled": { "message": "Disabled" }, @@ -5134,13 +5195,6 @@ "removePasswordConfirmation": { "message": "Are you sure you want to remove the password?" }, - "hideEmail": { - "message": "Hide my email address from recipients." - }, - "disableThisSend": { - "message": "Deactivate this Send so that no one can access it.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "allSends": { "message": "All Sends" }, @@ -5151,6 +5205,9 @@ "pendingDeletion": { "message": "Pending deletion" }, + "hideTextByDefault": { + "message": "Hide text by default" + }, "expired": { "message": "Expired" }, @@ -5372,13 +5429,6 @@ "message": "Always show member’s email address with recipients when creating or editing a Send.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, - "sendOptionsPolicyInEffect": { - "message": "The following organization policies are currently in effect:" - }, - "sendDisableHideEmailInEffect": { - "message": "Users are not allowed to hide their email address from recipients when creating or editing a Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "modifiedPolicyId": { "message": "Modified policy $ID$.", "placeholders": { @@ -5478,27 +5528,6 @@ "personalOwnershipCheckboxDesc": { "message": "Remove individual ownership for organization users" }, - "textHiddenByDefault": { - "message": "When accessing the Send, hide the text by default", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendNameDesc": { - "message": "A friendly name to describe this Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendTextDesc": { - "message": "The text you want to Send." - }, - "sendFileDesc": { - "message": "The file you want to Send." - }, - "copySendLinkOnSave": { - "message": "Copy the link to share this Send to my clipboard upon save." - }, - "sendLinkLabel": { - "message": "Send link", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "send": { "message": "Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -5647,12 +5676,21 @@ "dateParsingError": { "message": "There was an error saving your deletion and expiration dates." }, + "hideYourEmail": { + "message": "Hide your email address from viewers." + }, "webAuthnFallbackMsg": { "message": "To verify your 2FA please click the button below." }, "webAuthnAuthenticate": { "message": "Authenticate WebAuthn" }, + "readSecurityKey": { + "message": "Read security key" + }, + "awaitingSecurityKeyInteraction": { + "message": "Awaiting security key interaction..." + }, "webAuthnNotSupported": { "message": "WebAuthn is not supported in this browser." }, @@ -7199,6 +7237,12 @@ "duoRequiredByOrgForAccount": { "message": "Duo two-step login is required for your account." }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Duo two-step login is required for your account. Follow the steps below to finish logging in." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Follow the steps below to finish logging in." + }, "launchDuo": { "message": "Launch Duo" }, @@ -9793,9 +9837,15 @@ "learnMoreAboutApi": { "message": "Learn more about Bitwarden's API" }, + "fileSend": { + "message": "File Send" + }, "fileSends": { "message": "File Sends" }, + "textSend": { + "message": "Text Send" + }, "textSends": { "message": "Text Sends" }, @@ -10029,10 +10079,6 @@ "message": "Include special characters", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "addAttachment": { "message": "Add attachment" }, @@ -10432,10 +10478,31 @@ "assignedExceedsAvailable": { "message": "Assigned seats exceed available seats." }, + "changeAtRiskPassword": { + "message": "Change at-risk password" + }, "removeUnlockWithPinPolicyTitle": { "message": "Remove Unlock with PIN" }, "removeUnlockWithPinPolicyDesc": { "message": "Do not allow members to unlock their account with a PIN." + }, + "limitedEventLogs": { + "message": "$PRODUCT_TYPE$ plans do not have access to real event logs", + "placeholders": { + "product_type": { + "content": "$1", + "example": "Teams" + } + } + }, + "upgradeForFullEvents": { + "message": "Get full access to organization event logs by upgrading to a Teams or Enterprise plan." + }, + "upgradeEventLogTitle": { + "message": "Upgrade for real event log data" + }, + "upgradeEventLogMessage": { + "message": "These events are examples only and do not reflect real events within your Bitwarden organization." } } diff --git a/apps/web/src/locales/az/messages.json b/apps/web/src/locales/az/messages.json index f586d92a136..9fb288eaac3 100644 --- a/apps/web/src/locales/az/messages.json +++ b/apps/web/src/locales/az/messages.json @@ -5,6 +5,9 @@ "criticalApplications": { "message": "Kritik tətbiqlər" }, + "noCriticalAppsAtRisk": { + "message": "Risk altında heç bir kritik tətbiq yoxdur" + }, "accessIntelligence": { "message": "Müraciət Kəşfiyyatı" }, @@ -198,6 +201,9 @@ "notes": { "message": "Notlar" }, + "privateNote": { + "message": "Şəxsi not" + }, "note": { "message": "Not" }, @@ -1026,6 +1032,9 @@ "no": { "message": "Xeyr" }, + "location": { + "message": "Yerləşmə" + }, "loginOrCreateNewAccount": { "message": "Güvənli seyfinizə müraciət etmək üçün giriş edin və ya yeni bir hesab yaradın." }, @@ -1161,13 +1170,22 @@ "logInToBitwarden": { "message": "Bitwarden-ə giriş edin" }, + "enterTheCodeSentToYourEmail": { + "message": "E-poçtunuza göndərilən kodu daxil edin" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Kimlik doğrulayıcı tətbiqinizdəki kodu daxil edin" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Kimliyi doğrulamaq üçün YubiKey-inizə basın" + }, "authenticationTimeout": { "message": "Kimlik doğrulama vaxtı bitdi" }, "authenticationSessionTimedOut": { "message": "Kimlik doğrulama seansının vaxtı bitdi. Lütfən giriş prosesini yenidən başladın." }, - "verifyIdentity": { + "verifyYourIdentity": { "message": "Kimliyinizi doğrulayın" }, "weDontRecognizeThisDevice": { @@ -1443,12 +1461,22 @@ "rememberMe": { "message": "Məni xatırla" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Bu cihazda 30 gün ərzində soruşulmasın" + }, "sendVerificationCodeEmailAgain": { "message": "Doğrulama kodu olan e-poçtu yenidən göndər" }, "useAnotherTwoStepMethod": { "message": "Başqa bir iki addımlı giriş üsulu istifadə edin" }, + "selectAnotherMethod": { + "message": "Başqa üsul seçin", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Geri qaytarma kodunuzu istifadə edin" + }, "insertYubiKey": { "message": "\"YubiKey\"i kompüterinizin USB portuna taxın, daha sonra düyməsinə toxunun." }, @@ -1467,6 +1495,9 @@ "twoStepOptions": { "message": "İki addımlı giriş seçimləri" }, + "selectTwoStepLoginMethod": { + "message": "İki addımlı giriş üsulunu seçin" + }, "recoveryCodeDesc": { "message": "İki addımlı giriş provayderlərinə müraciəti itirmisiniz? Hesabınızdakı bütün iki addımlı giriş provayderlərini söndürmək üçün geri qaytarma kodunuzu istifadə edin." }, @@ -1509,6 +1540,9 @@ "webAuthnMigrated": { "message": "(FIDO-dan köçürüldü)" }, + "openInNewTab": { + "message": "Yeni vərəqdə aç" + }, "emailTitle": { "message": "E-poçt" }, @@ -2224,6 +2258,9 @@ "revokeAccess": { "message": "Müraciəti ləğv et" }, + "revoke": { + "message": "Geri al" + }, "twoStepLoginProviderEnabled": { "message": "Bu iki addımlı giriş provayderi hesabınızda fəallaşdırılıb." }, @@ -4081,6 +4118,12 @@ "updateBrowserDesc": { "message": "Dəstəklənməyən bir veb brauzer istifadə edirsiniz. Veb seyf düzgün işləməyə bilər." }, + "youHaveAPendingLoginRequest": { + "message": "Başqa bir cihazdan gözləyən bir giriş tələbiniz var." + }, + "reviewLoginRequest": { + "message": "Giriş tələbini incələ" + }, "freeTrialEndPromptCount": { "message": "Ödənişsiz sınaq müddətiniz $COUNT$ günə bitir.", "placeholders": { @@ -4758,6 +4801,15 @@ "masterPassPolicyDesc": { "message": "Ana parol gücü üçün tələbləri ayarla." }, + "passwordStrengthScore": { + "message": "Parolun güc xalı: $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "twoStepLoginPolicyTitle": { "message": "İki addımlı girişi tələb et" }, @@ -5038,12 +5090,40 @@ "requireSsoExemption": { "message": "Təşkilat sahibləri və administratorlar, bu siyasətin tətbiq edilməsindən azaddırlar." }, + "limitSendViews": { + "message": "Baxışları limitlə" + }, + "limitSendViewsHint": { + "message": "Limitə çatdıqdan sonra bu Send-ə heç kim baxa bilməz.", + "description": "Displayed under the limit views field on Send" + }, + "limitSendViewsCount": { + "message": "$ACCESSCOUNT$ baxış qaldı", + "description": "Displayed under the limit views field on Send", + "placeholders": { + "accessCount": { + "content": "$1", + "example": "2" + } + } + }, + "sendDetails": { + "message": "Send detalları", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendTypeTextToShare": { + "message": "Paylaşılacaq mətn" + }, "sendTypeFile": { "message": "Fayl" }, "sendTypeText": { "message": "Mətn" }, + "sendPasswordDescV3": { + "message": "Alıcıların bu \"Send\"ə müraciət etməsi üçün ixtiyari bir parol əlavə edin.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "createSend": { "message": "Yeni \"Send\" yarat", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -5068,19 +5148,15 @@ "message": "\"Send\"i sil", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, - "deleteSendConfirmation": { - "message": "Bu \"Send\"i silmək istədiyinizə əminsiniz?", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "whatTypeOfSend": { - "message": "\"Send\"in növü nədir?", + "deleteSendPermanentConfirmation": { + "message": "Bu Send-i həmişəlik silmək istədiyinizə əminsiniz?", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "deletionDate": { "message": "Silinmə tarixi" }, - "deletionDateDesc": { - "message": "\"Send\" göstərilən tarix və saatda birdəfəlik silinəcək.", + "deletionDateDescV2": { + "message": "Send, bu tarixdə həmişəlik silinəcək.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "expirationDate": { @@ -5093,21 +5169,6 @@ "maxAccessCount": { "message": "Maksimal müraciət sayı" }, - "maxAccessCountDesc": { - "message": "Əgər ayarlanıbsa, istifadəçilər maksimal müraciət sayına çatdıqdan sonra bu \"Send\"ə müraciət edə bilməyəcək.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "currentAccessCount": { - "message": "Hazırkı müraciət sayı" - }, - "sendPasswordDesc": { - "message": "İstəyinizə görə istifadəçilərdən bu \"Send\"ə müraciət edərkən parol tələb edə bilərsiniz.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendNotesDesc": { - "message": "Bu \"Send\" ilə bağlı gizli qeydlər.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "disabled": { "message": "Sıradan çıxarıldı" }, @@ -5134,13 +5195,6 @@ "removePasswordConfirmation": { "message": "Parolu çıxartmaq istədiyinizə əminsiniz?" }, - "hideEmail": { - "message": "E-poçt ünvanımı alıcılardan gizlət." - }, - "disableThisSend": { - "message": "Heç kimin müraciət edə bilməməsi üçün bu \"Send\"i sıradan çıxart.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "allSends": { "message": "Bütün \"Send\"lər" }, @@ -5151,6 +5205,9 @@ "pendingDeletion": { "message": "Silinməsi gözlənilir" }, + "hideTextByDefault": { + "message": "Mətni ilkin olaraq gizlət" + }, "expired": { "message": "Müddəti bitib" }, @@ -5372,13 +5429,6 @@ "message": "\"Send\" yaradarkən və ya ona düzəliş edərkən istifadəçilərin e-poçt ünvanlarını alıcılardan gizlətməsinə icazə verməyin.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, - "sendOptionsPolicyInEffect": { - "message": "Aşağıdakı təşkilat siyasətləri hal-hazırda qüvvədədir:" - }, - "sendDisableHideEmailInEffect": { - "message": "\"Send\" yaradarkən və ya ona düzəliş edərkən istifadəçilərin e-poçt ünvanlarını alıcılardan gizlətməsinə icazə verilmir.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "modifiedPolicyId": { "message": "$ID$ siyasətinə düzəliş edildi.", "placeholders": { @@ -5478,27 +5528,6 @@ "personalOwnershipCheckboxDesc": { "message": "Təşkilat istifadəçiləri üçün fərdi sahibliyi sıradan çıxart" }, - "textHiddenByDefault": { - "message": "\"Send\"ə müraciət edəndə ilkin olaraq mətni gizlədin", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendNameDesc": { - "message": "Bu \"Send\"i açıqlayan bir ad.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendTextDesc": { - "message": "Göndərmək istədiyiniz mətn." - }, - "sendFileDesc": { - "message": "Göndərmək istədiyiniz fayl." - }, - "copySendLinkOnSave": { - "message": "Saxladıqdan sonra bu \"Send\"in paylaşma keçidini lövhəmə kopyala." - }, - "sendLinkLabel": { - "message": "\"Send\" keçidi", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "send": { "message": "Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -5647,12 +5676,21 @@ "dateParsingError": { "message": "Silinmə və son istifadə tarixlərini saxlayarkən xəta baş verdi." }, + "hideYourEmail": { + "message": "E-poçt ünvanınız baxanlardan gizlədilsin." + }, "webAuthnFallbackMsg": { "message": "2FA-nı doğrulamaq üçün lütfən aşağıdakı düyməyə klikləyin." }, "webAuthnAuthenticate": { "message": "WebAuthn kimlik doğrulama" }, + "readSecurityKey": { + "message": "Güvənlik açarını oxu" + }, + "awaitingSecurityKeyInteraction": { + "message": "Güvənlik açarı ilə əlaqə gözlənilir..." + }, "webAuthnNotSupported": { "message": "WebAuthn bu brauzerdə dəstəklənmir." }, @@ -7199,6 +7237,12 @@ "duoRequiredByOrgForAccount": { "message": "Hesabınız üçün DUO iki addımlı giriş tələb olunur." }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Hesabınız üçün Duo iki addımlı giriş tələb olunur. Giriş prosesini tamamlamaq üçün aşağıdakı addımları izləyin." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Giriş prosesini tamamlamaq üçün aşağıdakı addımları izləyin." + }, "launchDuo": { "message": "DUO-nu başlat" }, @@ -9793,9 +9837,15 @@ "learnMoreAboutApi": { "message": "Bitwarden-nin API-si haqqında daha ətraflı" }, + "fileSend": { + "message": "Fayl \"Send\"i" + }, "fileSends": { "message": "Fayl \"Send\"ləri" }, + "textSend": { + "message": "Mətn \"Send\"i" + }, "textSends": { "message": "Mətn \"Send\"ləri" }, @@ -10029,10 +10079,6 @@ "message": "Xüsusi xarakterləri daxil et", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "addAttachment": { "message": "Qoşma əlavə et" }, @@ -10432,10 +10478,31 @@ "assignedExceedsAvailable": { "message": "Təyin edilmiş yer sayı, boş yer sayından çoxdur." }, + "changeAtRiskPassword": { + "message": "Riskli parolları dəyişdir" + }, "removeUnlockWithPinPolicyTitle": { "message": "Kilidi PIN ilə açmanı ləğv et" }, "removeUnlockWithPinPolicyDesc": { "message": "Üzvlərin öz hesablarının kilidini PIN ilə açmasına icazə verilməsin." + }, + "limitedEventLogs": { + "message": "$PRODUCT_TYPE$ planında real event log-larına müraciət yoxdur", + "placeholders": { + "product_type": { + "content": "$1", + "example": "Teams" + } + } + }, + "upgradeForFullEvents": { + "message": "Teams və ya Enterprise planına yüksəldərək təşkilatın event log-larına tam müraciət əldə edin." + }, + "upgradeEventLogTitle": { + "message": "Real event log dataları üçün yüksəlt" + }, + "upgradeEventLogMessage": { + "message": "Bu event-lər sadəcə nümunədir və Bitwarden təşkilatınızdakı real event-ləri əks etdirmir." } } diff --git a/apps/web/src/locales/be/messages.json b/apps/web/src/locales/be/messages.json index 84b9ce7a599..bf26e1e3a9e 100644 --- a/apps/web/src/locales/be/messages.json +++ b/apps/web/src/locales/be/messages.json @@ -5,6 +5,9 @@ "criticalApplications": { "message": "Крытычныя праграмы" }, + "noCriticalAppsAtRisk": { + "message": "No critical applications at risk" + }, "accessIntelligence": { "message": "Кіраванне доступам" }, @@ -198,6 +201,9 @@ "notes": { "message": "Нататкі" }, + "privateNote": { + "message": "Private note" + }, "note": { "message": "Нататка" }, @@ -1026,6 +1032,9 @@ "no": { "message": "Не" }, + "location": { + "message": "Location" + }, "loginOrCreateNewAccount": { "message": "Увайдзіце або стварыце новы ўліковы запіс для доступу да бяспечнага сховішча." }, @@ -1161,13 +1170,22 @@ "logInToBitwarden": { "message": "Log in to Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "Enter the code sent to your email" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Enter the code from your authenticator app" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Press your YubiKey to authenticate" + }, "authenticationTimeout": { "message": "Authentication timeout" }, "authenticationSessionTimedOut": { "message": "The authentication session timed out. Please restart the login process." }, - "verifyIdentity": { + "verifyYourIdentity": { "message": "Verify your Identity" }, "weDontRecognizeThisDevice": { @@ -1443,12 +1461,22 @@ "rememberMe": { "message": "Запомніць мяне" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Don't ask again on this device for 30 days" + }, "sendVerificationCodeEmailAgain": { "message": "Адправіць праверачны код яшчэ раз" }, "useAnotherTwoStepMethod": { "message": "Выкарыстоўваць іншы метад двухэтапнага ўваходу" }, + "selectAnotherMethod": { + "message": "Select another method", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Use your recovery code" + }, "insertYubiKey": { "message": "Устаўце свой YubiKey у порт USB камп'ютара, а потым націсніце на кнопку." }, @@ -1467,6 +1495,9 @@ "twoStepOptions": { "message": "Параметры двухэтапнага ўваходу" }, + "selectTwoStepLoginMethod": { + "message": "Select two-step login method" + }, "recoveryCodeDesc": { "message": "Згубілі доступ да ўсіх варыянтаў доступу пастаўшчыкоў двухэтапнай аўтэнтыфікацыі? Скарыстайцеся кодам аднаўлення, каб адключыць праверку пастаўшчыкоў двухэтапнай аўтэнтыфікацыі для вашага ўліковага запісу." }, @@ -1509,6 +1540,9 @@ "webAuthnMigrated": { "message": "(Перанесена з FIDO)" }, + "openInNewTab": { + "message": "Open in new tab" + }, "emailTitle": { "message": "Электронная пошта" }, @@ -2224,6 +2258,9 @@ "revokeAccess": { "message": "Адклікаць доступ" }, + "revoke": { + "message": "Revoke" + }, "twoStepLoginProviderEnabled": { "message": "Гэты пастаўшчык двухэтапнага ўваходу ўключаны для вашага ўліковага запісу." }, @@ -4081,6 +4118,12 @@ "updateBrowserDesc": { "message": "Ваш браўзер не падтрымліваецца. Вэб-сховішча можа працаваць няправільна." }, + "youHaveAPendingLoginRequest": { + "message": "You have a pending login request from another device." + }, + "reviewLoginRequest": { + "message": "Review login request" + }, "freeTrialEndPromptCount": { "message": "Your free trial ends in $COUNT$ days.", "placeholders": { @@ -4758,6 +4801,15 @@ "masterPassPolicyDesc": { "message": "Прызначце мінімальныя патрабаванні да надзейнасці асноўнага пароля." }, + "passwordStrengthScore": { + "message": "Password strength score $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "twoStepLoginPolicyTitle": { "message": "Патрабуецца двухэтапны ўваход" }, @@ -5038,12 +5090,40 @@ "requireSsoExemption": { "message": "На ўладальнікаў арганізацыі і адміністратараў гэта палітыка не аказвае ўплыву." }, + "limitSendViews": { + "message": "Limit views" + }, + "limitSendViewsHint": { + "message": "No one can view this Send after the limit is reached.", + "description": "Displayed under the limit views field on Send" + }, + "limitSendViewsCount": { + "message": "$ACCESSCOUNT$ views left", + "description": "Displayed under the limit views field on Send", + "placeholders": { + "accessCount": { + "content": "$1", + "example": "2" + } + } + }, + "sendDetails": { + "message": "Send details", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendTypeTextToShare": { + "message": "Text to share" + }, "sendTypeFile": { "message": "Файл" }, "sendTypeText": { "message": "Тэкст" }, + "sendPasswordDescV3": { + "message": "Add an optional password for recipients to access this Send.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "createSend": { "message": "Стварыць новы Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -5068,19 +5148,15 @@ "message": "Выдаліць Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, - "deleteSendConfirmation": { - "message": "Вы сапраўды хочаце выдаліць гэты Send?", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "whatTypeOfSend": { - "message": "Які гэта тып Send'a?", + "deleteSendPermanentConfirmation": { + "message": "Are you sure you want to permanently delete this Send?", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "deletionDate": { "message": "Дата выдалення" }, - "deletionDateDesc": { - "message": "Send будзе незваротна выдалены ў азначаныя дату і час.", + "deletionDateDescV2": { + "message": "The Send will be permanently deleted on this date.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "expirationDate": { @@ -5093,21 +5169,6 @@ "maxAccessCount": { "message": "Максімальная колькасць доступаў" }, - "maxAccessCountDesc": { - "message": "Калі прызначана, то карыстальнікі больш не змогуць атрымаць доступ да гэтага Send пасля таго, як будзе дасягнута максімальная колькасць зваротаў.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "currentAccessCount": { - "message": "Бягучая колькасць доступаў" - }, - "sendPasswordDesc": { - "message": "Па магчымасці запытваць у карыстальнікаў пароль для доступу да гэтага Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendNotesDesc": { - "message": "Прыватныя нататкі пра гэты Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "disabled": { "message": "Адключана" }, @@ -5134,13 +5195,6 @@ "removePasswordConfirmation": { "message": "Вы сапраўды хочаце выдаліць пароль?" }, - "hideEmail": { - "message": "Схаваць мой адрас электроннай пошты ад атрымальнікаў." - }, - "disableThisSend": { - "message": "Адключыць гэты Send, каб ніхто не змог атрымаць да яго доступ.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "allSends": { "message": "Усе Send'ы" }, @@ -5151,6 +5205,9 @@ "pendingDeletion": { "message": "Чакаецца выдаленне" }, + "hideTextByDefault": { + "message": "Hide text by default" + }, "expired": { "message": "Пратэрмінавана" }, @@ -5372,13 +5429,6 @@ "message": "Заўсёды паказваць атрымальнікам адрас электроннай пошты ўдзельніка пры стварэнні або рэдагаванні Send'a.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, - "sendOptionsPolicyInEffect": { - "message": "Зараз дзейнічаюць наступныя палітыкі арганізацыі:" - }, - "sendDisableHideEmailInEffect": { - "message": "Карыстальнікам не дазваляецца хаваць свой адрас электроннай пошты ад атрымальнікаў пры стварэнні або рэдагаванні Send'a.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "modifiedPolicyId": { "message": "Змяненне палітыкі $ID$.", "placeholders": { @@ -5478,27 +5528,6 @@ "personalOwnershipCheckboxDesc": { "message": "Адключыць асабістую ўласнасць для карыстальнікаў арганізацыі" }, - "textHiddenByDefault": { - "message": "Пры доступе да Send прадвызначана хаваць тэкст", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendNameDesc": { - "message": "Зразумелая назва для апісання гэтага Send'a.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendTextDesc": { - "message": "Тэкст, які вы хочаце адправіць." - }, - "sendFileDesc": { - "message": "Файл, які вы хочаце адправіць." - }, - "copySendLinkOnSave": { - "message": "Скапіяваць спасылку ў буфер абмену пасля захавання, каб абагуліць гэты Send." - }, - "sendLinkLabel": { - "message": "Спасылка на Send", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "send": { "message": "Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -5647,12 +5676,21 @@ "dateParsingError": { "message": "Адбылася памылка пры захаванні дат выдалення і завяршэння тэрміну дзеяння." }, + "hideYourEmail": { + "message": "Hide your email address from viewers." + }, "webAuthnFallbackMsg": { "message": "Для праверкі вашага 2ФА, націсніце кнопку ніжэй." }, "webAuthnAuthenticate": { "message": "Аўтэнтыфікатар WebAuthn" }, + "readSecurityKey": { + "message": "Read security key" + }, + "awaitingSecurityKeyInteraction": { + "message": "Awaiting security key interaction..." + }, "webAuthnNotSupported": { "message": "WebAuthn не падтрымліваецца ў гэтым браўзеры." }, @@ -7199,6 +7237,12 @@ "duoRequiredByOrgForAccount": { "message": "Duo two-step login is required for your account." }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Duo two-step login is required for your account. Follow the steps below to finish logging in." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Follow the steps below to finish logging in." + }, "launchDuo": { "message": "Launch Duo" }, @@ -9793,9 +9837,15 @@ "learnMoreAboutApi": { "message": "Learn more about Bitwarden's API" }, + "fileSend": { + "message": "File Send" + }, "fileSends": { "message": "File Sends" }, + "textSend": { + "message": "Text Send" + }, "textSends": { "message": "Text Sends" }, @@ -10029,10 +10079,6 @@ "message": "Include special characters", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "addAttachment": { "message": "Add attachment" }, @@ -10432,10 +10478,31 @@ "assignedExceedsAvailable": { "message": "Assigned seats exceed available seats." }, + "changeAtRiskPassword": { + "message": "Change at-risk password" + }, "removeUnlockWithPinPolicyTitle": { "message": "Remove Unlock with PIN" }, "removeUnlockWithPinPolicyDesc": { "message": "Do not allow members to unlock their account with a PIN." + }, + "limitedEventLogs": { + "message": "$PRODUCT_TYPE$ plans do not have access to real event logs", + "placeholders": { + "product_type": { + "content": "$1", + "example": "Teams" + } + } + }, + "upgradeForFullEvents": { + "message": "Get full access to organization event logs by upgrading to a Teams or Enterprise plan." + }, + "upgradeEventLogTitle": { + "message": "Upgrade for real event log data" + }, + "upgradeEventLogMessage": { + "message": "These events are examples only and do not reflect real events within your Bitwarden organization." } } diff --git a/apps/web/src/locales/bg/messages.json b/apps/web/src/locales/bg/messages.json index 059652e0daa..4be07320d38 100644 --- a/apps/web/src/locales/bg/messages.json +++ b/apps/web/src/locales/bg/messages.json @@ -5,6 +5,9 @@ "criticalApplications": { "message": "Важни приложения" }, + "noCriticalAppsAtRisk": { + "message": "Няма важни приложения в риск" + }, "accessIntelligence": { "message": "Access Intelligence" }, @@ -198,6 +201,9 @@ "notes": { "message": "Бележки" }, + "privateNote": { + "message": "Лична бележка" + }, "note": { "message": "Бележка" }, @@ -1026,6 +1032,9 @@ "no": { "message": "Не" }, + "location": { + "message": "Местоположение" + }, "loginOrCreateNewAccount": { "message": "Впишете се или създайте нов абонамент, за да достъпите защитен трезор." }, @@ -1161,13 +1170,22 @@ "logInToBitwarden": { "message": "Впишете се в Битуорден" }, + "enterTheCodeSentToYourEmail": { + "message": "Въведете кода изпратен на е-пощата Ви" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Въведете кода от Вашето приложение за удостоверяване" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Натиснете бутона на своя YubiKey за удостоверяване" + }, "authenticationTimeout": { "message": "Време на давност за удостоверяването" }, "authenticationSessionTimedOut": { "message": "Сесията за удостоверяване е изтекла. Моля, започнете отначало процеса по вписване." }, - "verifyIdentity": { + "verifyYourIdentity": { "message": "Потвърдете самоличността си" }, "weDontRecognizeThisDevice": { @@ -1443,12 +1461,22 @@ "rememberMe": { "message": "Запомняне" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Не ме питайте отново на това устройство за 30 дни" + }, "sendVerificationCodeEmailAgain": { "message": "Повторно изпращане на писмото за потвърждение" }, "useAnotherTwoStepMethod": { "message": "Използвайте друг начин на двустепенно удостоверяване" }, + "selectAnotherMethod": { + "message": "Изберете друг метод", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Използване на код за възстановяване" + }, "insertYubiKey": { "message": "Поставете устройството на YubiKey в USB порт на компютъра и натиснете бутона на устройството." }, @@ -1467,6 +1495,9 @@ "twoStepOptions": { "message": "Настройки на двустепенното удостоверяване" }, + "selectTwoStepLoginMethod": { + "message": "Изберете начин за двустепенно удостоверяване" + }, "recoveryCodeDesc": { "message": "Ако сте загубили достъп до двустепенното удостоверяване, може да използвате код за възстановяване, за да изключите двустепенното удостоверяване в абонамента си." }, @@ -1509,6 +1540,9 @@ "webAuthnMigrated": { "message": "(Мигрирано от FIDO)" }, + "openInNewTab": { + "message": "Отваряне в нов раздел" + }, "emailTitle": { "message": "Електронна поща" }, @@ -2224,6 +2258,9 @@ "revokeAccess": { "message": "Отнемане на достъпа" }, + "revoke": { + "message": "Отнемане" + }, "twoStepLoginProviderEnabled": { "message": "Този доставчик на двустепенно удостоверяване е включен за абонамента ви." }, @@ -4081,6 +4118,12 @@ "updateBrowserDesc": { "message": "Ползвате неподдържан браузър. Трезорът по уеб може да не сработи правилно." }, + "youHaveAPendingLoginRequest": { + "message": "Имате чакаща заявка за вписване от друго устройство." + }, + "reviewLoginRequest": { + "message": "Преглед на заявката за вписване" + }, "freeTrialEndPromptCount": { "message": "Вашият безплатен пробен период приключва след $COUNT$ дни.", "placeholders": { @@ -4758,6 +4801,15 @@ "masterPassPolicyDesc": { "message": "Задаване на минимална сила на главната парола." }, + "passwordStrengthScore": { + "message": "Оценка на сложността на паролата: $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "twoStepLoginPolicyTitle": { "message": "Изискване на двустепенно удостоверяване" }, @@ -5038,12 +5090,40 @@ "requireSsoExemption": { "message": "Тази политика не се прилага към собствениците и администраторите на организацията." }, + "limitSendViews": { + "message": "Ограничаване на преглежданията" + }, + "limitSendViewsHint": { + "message": "Никой няма да може да преглежда това Изпращане след достигане на ограничението.", + "description": "Displayed under the limit views field on Send" + }, + "limitSendViewsCount": { + "message": "Остават $ACCESSCOUNT$ преглеждания", + "description": "Displayed under the limit views field on Send", + "placeholders": { + "accessCount": { + "content": "$1", + "example": "2" + } + } + }, + "sendDetails": { + "message": "Подробности за Изпращането", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendTypeTextToShare": { + "message": "Текст за споделяне" + }, "sendTypeFile": { "message": "Файл" }, "sendTypeText": { "message": "Текст" }, + "sendPasswordDescV3": { + "message": "Добавете незадължителна парола, с която получателите да имат достъп до това Изпращане.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "createSend": { "message": "Създаване на изпращане", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -5068,19 +5148,15 @@ "message": "Изтриване на изпращане", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, - "deleteSendConfirmation": { - "message": "Сигурни ли сте, че искате да изтриете това изпращане?", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "whatTypeOfSend": { - "message": "Вид на изпратеното", + "deleteSendPermanentConfirmation": { + "message": "Наистина ли искате да изтриете завинаги това Изпращане?", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "deletionDate": { "message": "Дата на изтриване" }, - "deletionDateDesc": { - "message": "Изпращането ще бъде окончателно изтрито на зададената дата и време.", + "deletionDateDescV2": { + "message": "Изпращането ще бъде окончателно изтрито на тази дата.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "expirationDate": { @@ -5093,21 +5169,6 @@ "maxAccessCount": { "message": "Максимален брой достъпвания" }, - "maxAccessCountDesc": { - "message": "При задаване — това изпращане ще се изключи след определен брой достъпвания.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "currentAccessCount": { - "message": "Текущ брой на достъпванията" - }, - "sendPasswordDesc": { - "message": "Изискване на парола за достъп до това изпращане.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendNotesDesc": { - "message": "Скрити бележки за това изпращане.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "disabled": { "message": "Изключено" }, @@ -5134,13 +5195,6 @@ "removePasswordConfirmation": { "message": "Сигурни ли сте, че искате да премахнете паролата?" }, - "hideEmail": { - "message": "Скриване на е-пощата ми от получателите." - }, - "disableThisSend": { - "message": "Пълно спиране на това изпращане — никой няма да има достъп.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "allSends": { "message": "Всички изпращания" }, @@ -5151,6 +5205,9 @@ "pendingDeletion": { "message": "Предстои изтриване" }, + "hideTextByDefault": { + "message": "Скриване на текста по подразбиране" + }, "expired": { "message": "Изтекъл" }, @@ -5372,13 +5429,6 @@ "message": "Потребителите да не могат да скриват адреса на е-пощата си от получателите, когато създават или редактират изпращания.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, - "sendOptionsPolicyInEffect": { - "message": "В момента са в сила следните политики на организацията:" - }, - "sendDisableHideEmailInEffect": { - "message": "Потребителите не могат да скриват адреса на е-пощата си от получателите, когато създават или редактират изпращания.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "modifiedPolicyId": { "message": "Редактирана политика № $ID$.", "placeholders": { @@ -5478,27 +5528,6 @@ "personalOwnershipCheckboxDesc": { "message": "Изключване на индивидуалното притежание за потребителите в организацията" }, - "textHiddenByDefault": { - "message": "При достъп до изпращането стандартно текстът да се скрива", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendNameDesc": { - "message": "Описателно име за това изпращане.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendTextDesc": { - "message": "Текст за изпращане." - }, - "sendFileDesc": { - "message": "Файл за изпращане." - }, - "copySendLinkOnSave": { - "message": "Копиране на връзката към изпращането при запазването му за лесно споделяне." - }, - "sendLinkLabel": { - "message": "Изпращане на връзката", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "send": { "message": "Изпращане", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -5647,12 +5676,21 @@ "dateParsingError": { "message": "Грешка при запазване на датата на валидност и изтриване." }, + "hideYourEmail": { + "message": "Скриване на Вашата е-поща от получателите." + }, "webAuthnFallbackMsg": { "message": "За да потвърдите двустепенното удостоверяване, натиснете бутона по-долу." }, "webAuthnAuthenticate": { "message": "Идентификация WebAuthn" }, + "readSecurityKey": { + "message": "Прочитане на ключа за сигурност" + }, + "awaitingSecurityKeyInteraction": { + "message": "Изчакване на действие с ключ за сигурност…" + }, "webAuthnNotSupported": { "message": "Този браузър не поддържа WebAuthn." }, @@ -7199,6 +7237,12 @@ "duoRequiredByOrgForAccount": { "message": "Вашата регистрация изисква двустепенно удостоверяване чрез DUO." }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Вашият акаунт изисква вписване чрез двустепенно удостоверяване с Duo. Следвайте стъпките по-долу, за да завършите вписването." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Следвайте стъпките по-долу, за да завършите вписването." + }, "launchDuo": { "message": "Стартиране на DUO" }, @@ -9793,9 +9837,15 @@ "learnMoreAboutApi": { "message": "Научете повече относно ППИ на Биуорден" }, + "fileSend": { + "message": "Файлово изпращане" + }, "fileSends": { "message": "Файлови изпращания" }, + "textSend": { + "message": "Текстово изпращане" + }, "textSends": { "message": "Текстови изпращания" }, @@ -10029,10 +10079,6 @@ "message": "Включване на специални знаци", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "addAttachment": { "message": "Добавяне на прикачен файл" }, @@ -10432,10 +10478,31 @@ "assignedExceedsAvailable": { "message": "Назначените места превишават наличния брой." }, + "changeAtRiskPassword": { + "message": "Промяна на парола в риск" + }, "removeUnlockWithPinPolicyTitle": { "message": "Премахване на отключването чрез ПИН" }, "removeUnlockWithPinPolicyDesc": { "message": "Забраняване на членовете да отключват акаунтите си с ПИН." + }, + "limitedEventLogs": { + "message": "Плановете от тип „$PRODUCT_TYPE$“ нямат достъп до истинските журнали на събитията", + "placeholders": { + "product_type": { + "content": "$1", + "example": "Teams" + } + } + }, + "upgradeForFullEvents": { + "message": "Получете пълен достъп до журналите на събитията за организациите като надградите до Екипния план или този за Големи организации." + }, + "upgradeEventLogTitle": { + "message": "Надградете за достъп до истинските журнали на събитията" + }, + "upgradeEventLogMessage": { + "message": "Тези събития са само за пример и не отразяват истинските събития във Вашата организация." } } diff --git a/apps/web/src/locales/bn/messages.json b/apps/web/src/locales/bn/messages.json index afc52f85e8e..5dfc013fa5d 100644 --- a/apps/web/src/locales/bn/messages.json +++ b/apps/web/src/locales/bn/messages.json @@ -5,6 +5,9 @@ "criticalApplications": { "message": "Critical applications" }, + "noCriticalAppsAtRisk": { + "message": "No critical applications at risk" + }, "accessIntelligence": { "message": "Access Intelligence" }, @@ -198,6 +201,9 @@ "notes": { "message": "মন্তব্য" }, + "privateNote": { + "message": "Private note" + }, "note": { "message": "Note" }, @@ -1026,6 +1032,9 @@ "no": { "message": "No" }, + "location": { + "message": "Location" + }, "loginOrCreateNewAccount": { "message": "আপনার সুরক্ষিত ভল্টে প্রবেশ করতে লগ ইন করুন অথবা একটি নতুন অ্যাকাউন্ট তৈরি করুন।" }, @@ -1161,13 +1170,22 @@ "logInToBitwarden": { "message": "Log in to Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "Enter the code sent to your email" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Enter the code from your authenticator app" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Press your YubiKey to authenticate" + }, "authenticationTimeout": { "message": "Authentication timeout" }, "authenticationSessionTimedOut": { "message": "The authentication session timed out. Please restart the login process." }, - "verifyIdentity": { + "verifyYourIdentity": { "message": "Verify your Identity" }, "weDontRecognizeThisDevice": { @@ -1443,12 +1461,22 @@ "rememberMe": { "message": "আমাকে মনে রাখবেন" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Don't ask again on this device for 30 days" + }, "sendVerificationCodeEmailAgain": { "message": "আবার যাচাইকরণ কোড ইমেইলে প্রেরণ করুন" }, "useAnotherTwoStepMethod": { "message": "অন্য দ্বি-পদক্ষেপ প্রবেশ পদ্ধতি ব্যবহার করুন" }, + "selectAnotherMethod": { + "message": "Select another method", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Use your recovery code" + }, "insertYubiKey": { "message": "আপনার কম্পিউটারের ইউএসবি পোর্টে আপনার YubiKey ঢোকান, তারপরে তার বোতামটি স্পর্শ করুন।" }, @@ -1467,6 +1495,9 @@ "twoStepOptions": { "message": "দ্বি-পদক্ষেপ লগইন বিকল্প" }, + "selectTwoStepLoginMethod": { + "message": "Select two-step login method" + }, "recoveryCodeDesc": { "message": "আপনার সমস্ত দ্বি-গুণক সরবরাহকারীদের অ্যাক্সেস হারিয়েছেন? আপনার অ্যাকাউন্ট থেকে সমস্ত দ্বি-গুণক সরবরাহকারীদের অক্ষম করতে আপনার পুনরুদ্ধার কোডটি ব্যবহার করুন।" }, @@ -1509,6 +1540,9 @@ "webAuthnMigrated": { "message": "(Migrated from FIDO)" }, + "openInNewTab": { + "message": "Open in new tab" + }, "emailTitle": { "message": "Email" }, @@ -2224,6 +2258,9 @@ "revokeAccess": { "message": "Revoke access" }, + "revoke": { + "message": "Revoke" + }, "twoStepLoginProviderEnabled": { "message": "This two-step login provider is active on your account." }, @@ -4081,6 +4118,12 @@ "updateBrowserDesc": { "message": "You are using an unsupported web browser. The web vault may not function properly." }, + "youHaveAPendingLoginRequest": { + "message": "You have a pending login request from another device." + }, + "reviewLoginRequest": { + "message": "Review login request" + }, "freeTrialEndPromptCount": { "message": "Your free trial ends in $COUNT$ days.", "placeholders": { @@ -4758,6 +4801,15 @@ "masterPassPolicyDesc": { "message": "Set requirements for master password strength." }, + "passwordStrengthScore": { + "message": "Password strength score $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "twoStepLoginPolicyTitle": { "message": "Require two-step login" }, @@ -5038,12 +5090,40 @@ "requireSsoExemption": { "message": "Organization owners and admins are exempt from this policy's enforcement." }, + "limitSendViews": { + "message": "Limit views" + }, + "limitSendViewsHint": { + "message": "No one can view this Send after the limit is reached.", + "description": "Displayed under the limit views field on Send" + }, + "limitSendViewsCount": { + "message": "$ACCESSCOUNT$ views left", + "description": "Displayed under the limit views field on Send", + "placeholders": { + "accessCount": { + "content": "$1", + "example": "2" + } + } + }, + "sendDetails": { + "message": "Send details", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendTypeTextToShare": { + "message": "Text to share" + }, "sendTypeFile": { "message": "ফাইল" }, "sendTypeText": { "message": "পাঠ্য" }, + "sendPasswordDescV3": { + "message": "Add an optional password for recipients to access this Send.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "createSend": { "message": "New Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -5068,19 +5148,15 @@ "message": "Delete Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, - "deleteSendConfirmation": { - "message": "Are you sure you want to delete this Send?", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "whatTypeOfSend": { - "message": "What type of Send is this?", + "deleteSendPermanentConfirmation": { + "message": "Are you sure you want to permanently delete this Send?", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "deletionDate": { "message": "Deletion date" }, - "deletionDateDesc": { - "message": "The Send will be permanently deleted on the specified date and time.", + "deletionDateDescV2": { + "message": "The Send will be permanently deleted on this date.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "expirationDate": { @@ -5093,21 +5169,6 @@ "maxAccessCount": { "message": "Maximum access count" }, - "maxAccessCountDesc": { - "message": "If set, users will no longer be able to access this Send once the maximum access count is reached.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "currentAccessCount": { - "message": "Current access count" - }, - "sendPasswordDesc": { - "message": "Optionally require a password for users to access this Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendNotesDesc": { - "message": "Private notes about this Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "disabled": { "message": "Disabled" }, @@ -5134,13 +5195,6 @@ "removePasswordConfirmation": { "message": "Are you sure you want to remove the password?" }, - "hideEmail": { - "message": "Hide my email address from recipients." - }, - "disableThisSend": { - "message": "Deactivate this Send so that no one can access it.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "allSends": { "message": "All Sends" }, @@ -5151,6 +5205,9 @@ "pendingDeletion": { "message": "Pending deletion" }, + "hideTextByDefault": { + "message": "Hide text by default" + }, "expired": { "message": "Expired" }, @@ -5372,13 +5429,6 @@ "message": "Always show member’s email address with recipients when creating or editing a Send.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, - "sendOptionsPolicyInEffect": { - "message": "The following organization policies are currently in effect:" - }, - "sendDisableHideEmailInEffect": { - "message": "Users are not allowed to hide their email address from recipients when creating or editing a Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "modifiedPolicyId": { "message": "Modified policy $ID$.", "placeholders": { @@ -5478,27 +5528,6 @@ "personalOwnershipCheckboxDesc": { "message": "Remove individual ownership for organization users" }, - "textHiddenByDefault": { - "message": "When accessing the Send, hide the text by default", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendNameDesc": { - "message": "A friendly name to describe this Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendTextDesc": { - "message": "The text you want to Send." - }, - "sendFileDesc": { - "message": "The file you want to Send." - }, - "copySendLinkOnSave": { - "message": "Copy the link to share this Send to my clipboard upon save." - }, - "sendLinkLabel": { - "message": "Send link", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "send": { "message": "Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -5647,12 +5676,21 @@ "dateParsingError": { "message": "There was an error saving your deletion and expiration dates." }, + "hideYourEmail": { + "message": "Hide your email address from viewers." + }, "webAuthnFallbackMsg": { "message": "To verify your 2FA please click the button below." }, "webAuthnAuthenticate": { "message": "Authenticate WebAuthn" }, + "readSecurityKey": { + "message": "Read security key" + }, + "awaitingSecurityKeyInteraction": { + "message": "Awaiting security key interaction..." + }, "webAuthnNotSupported": { "message": "WebAuthn is not supported in this browser." }, @@ -7199,6 +7237,12 @@ "duoRequiredByOrgForAccount": { "message": "Duo two-step login is required for your account." }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Duo two-step login is required for your account. Follow the steps below to finish logging in." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Follow the steps below to finish logging in." + }, "launchDuo": { "message": "Launch Duo" }, @@ -9793,9 +9837,15 @@ "learnMoreAboutApi": { "message": "Learn more about Bitwarden's API" }, + "fileSend": { + "message": "File Send" + }, "fileSends": { "message": "File Sends" }, + "textSend": { + "message": "Text Send" + }, "textSends": { "message": "Text Sends" }, @@ -10029,10 +10079,6 @@ "message": "Include special characters", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "addAttachment": { "message": "Add attachment" }, @@ -10432,10 +10478,31 @@ "assignedExceedsAvailable": { "message": "Assigned seats exceed available seats." }, + "changeAtRiskPassword": { + "message": "Change at-risk password" + }, "removeUnlockWithPinPolicyTitle": { "message": "Remove Unlock with PIN" }, "removeUnlockWithPinPolicyDesc": { "message": "Do not allow members to unlock their account with a PIN." + }, + "limitedEventLogs": { + "message": "$PRODUCT_TYPE$ plans do not have access to real event logs", + "placeholders": { + "product_type": { + "content": "$1", + "example": "Teams" + } + } + }, + "upgradeForFullEvents": { + "message": "Get full access to organization event logs by upgrading to a Teams or Enterprise plan." + }, + "upgradeEventLogTitle": { + "message": "Upgrade for real event log data" + }, + "upgradeEventLogMessage": { + "message": "These events are examples only and do not reflect real events within your Bitwarden organization." } } diff --git a/apps/web/src/locales/bs/messages.json b/apps/web/src/locales/bs/messages.json index 22943f0be44..66185d736ef 100644 --- a/apps/web/src/locales/bs/messages.json +++ b/apps/web/src/locales/bs/messages.json @@ -5,6 +5,9 @@ "criticalApplications": { "message": "Critical applications" }, + "noCriticalAppsAtRisk": { + "message": "No critical applications at risk" + }, "accessIntelligence": { "message": "Access Intelligence" }, @@ -198,6 +201,9 @@ "notes": { "message": "Bilješke" }, + "privateNote": { + "message": "Private note" + }, "note": { "message": "Note" }, @@ -1026,6 +1032,9 @@ "no": { "message": "Ne" }, + "location": { + "message": "Location" + }, "loginOrCreateNewAccount": { "message": "Log in or create a new account to access your secure vault." }, @@ -1161,13 +1170,22 @@ "logInToBitwarden": { "message": "Log in to Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "Enter the code sent to your email" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Enter the code from your authenticator app" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Press your YubiKey to authenticate" + }, "authenticationTimeout": { "message": "Authentication timeout" }, "authenticationSessionTimedOut": { "message": "The authentication session timed out. Please restart the login process." }, - "verifyIdentity": { + "verifyYourIdentity": { "message": "Verify your Identity" }, "weDontRecognizeThisDevice": { @@ -1443,12 +1461,22 @@ "rememberMe": { "message": "Zapamti me" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Don't ask again on this device for 30 days" + }, "sendVerificationCodeEmailAgain": { "message": "Ponovno slanje kontrolnog koda imejlom" }, "useAnotherTwoStepMethod": { "message": "Koristiti drugi način prijave u dva koraka" }, + "selectAnotherMethod": { + "message": "Select another method", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Use your recovery code" + }, "insertYubiKey": { "message": "Povežite Vaš YubiKey preko USB porta na vašem računaru, pa pritisnite dugme na njemu." }, @@ -1467,6 +1495,9 @@ "twoStepOptions": { "message": "Mogućnosti prijave u dva koraka" }, + "selectTwoStepLoginMethod": { + "message": "Select two-step login method" + }, "recoveryCodeDesc": { "message": "Izgubljen je pristup uređaju za dvostruku autentifikaciju? Koristite svoj kôd za oporavak za onemogućavanje svih pružatelja usluga dvostruke autentifikacije na tvojem računu." }, @@ -1509,6 +1540,9 @@ "webAuthnMigrated": { "message": "(Migrated from FIDO)" }, + "openInNewTab": { + "message": "Open in new tab" + }, "emailTitle": { "message": "Email" }, @@ -2224,6 +2258,9 @@ "revokeAccess": { "message": "Revoke access" }, + "revoke": { + "message": "Revoke" + }, "twoStepLoginProviderEnabled": { "message": "This two-step login provider is active on your account." }, @@ -4081,6 +4118,12 @@ "updateBrowserDesc": { "message": "You are using an unsupported web browser. The web vault may not function properly." }, + "youHaveAPendingLoginRequest": { + "message": "You have a pending login request from another device." + }, + "reviewLoginRequest": { + "message": "Review login request" + }, "freeTrialEndPromptCount": { "message": "Your free trial ends in $COUNT$ days.", "placeholders": { @@ -4758,6 +4801,15 @@ "masterPassPolicyDesc": { "message": "Set requirements for master password strength." }, + "passwordStrengthScore": { + "message": "Password strength score $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "twoStepLoginPolicyTitle": { "message": "Require two-step login" }, @@ -5038,12 +5090,40 @@ "requireSsoExemption": { "message": "Organization owners and admins are exempt from this policy's enforcement." }, + "limitSendViews": { + "message": "Limit views" + }, + "limitSendViewsHint": { + "message": "No one can view this Send after the limit is reached.", + "description": "Displayed under the limit views field on Send" + }, + "limitSendViewsCount": { + "message": "$ACCESSCOUNT$ views left", + "description": "Displayed under the limit views field on Send", + "placeholders": { + "accessCount": { + "content": "$1", + "example": "2" + } + } + }, + "sendDetails": { + "message": "Send details", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendTypeTextToShare": { + "message": "Text to share" + }, "sendTypeFile": { "message": "File" }, "sendTypeText": { "message": "Text" }, + "sendPasswordDescV3": { + "message": "Add an optional password for recipients to access this Send.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "createSend": { "message": "New Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -5068,19 +5148,15 @@ "message": "Delete Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, - "deleteSendConfirmation": { - "message": "Are you sure you want to delete this Send?", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "whatTypeOfSend": { - "message": "What type of Send is this?", + "deleteSendPermanentConfirmation": { + "message": "Are you sure you want to permanently delete this Send?", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "deletionDate": { "message": "Deletion date" }, - "deletionDateDesc": { - "message": "The Send will be permanently deleted on the specified date and time.", + "deletionDateDescV2": { + "message": "The Send will be permanently deleted on this date.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "expirationDate": { @@ -5093,21 +5169,6 @@ "maxAccessCount": { "message": "Maximum access count" }, - "maxAccessCountDesc": { - "message": "If set, users will no longer be able to access this Send once the maximum access count is reached.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "currentAccessCount": { - "message": "Current access count" - }, - "sendPasswordDesc": { - "message": "Optionally require a password for users to access this Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendNotesDesc": { - "message": "Private notes about this Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "disabled": { "message": "Disabled" }, @@ -5134,13 +5195,6 @@ "removePasswordConfirmation": { "message": "Are you sure you want to remove the password?" }, - "hideEmail": { - "message": "Hide my email address from recipients." - }, - "disableThisSend": { - "message": "Deactivate this Send so that no one can access it.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "allSends": { "message": "All Sends" }, @@ -5151,6 +5205,9 @@ "pendingDeletion": { "message": "Pending deletion" }, + "hideTextByDefault": { + "message": "Hide text by default" + }, "expired": { "message": "Expired" }, @@ -5372,13 +5429,6 @@ "message": "Always show member’s email address with recipients when creating or editing a Send.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, - "sendOptionsPolicyInEffect": { - "message": "The following organization policies are currently in effect:" - }, - "sendDisableHideEmailInEffect": { - "message": "Users are not allowed to hide their email address from recipients when creating or editing a Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "modifiedPolicyId": { "message": "Modified policy $ID$.", "placeholders": { @@ -5478,27 +5528,6 @@ "personalOwnershipCheckboxDesc": { "message": "Remove individual ownership for organization users" }, - "textHiddenByDefault": { - "message": "When accessing the Send, hide the text by default", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendNameDesc": { - "message": "A friendly name to describe this Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendTextDesc": { - "message": "The text you want to Send." - }, - "sendFileDesc": { - "message": "The file you want to Send." - }, - "copySendLinkOnSave": { - "message": "Copy the link to share this Send to my clipboard upon save." - }, - "sendLinkLabel": { - "message": "Send link", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "send": { "message": "Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -5647,12 +5676,21 @@ "dateParsingError": { "message": "There was an error saving your deletion and expiration dates." }, + "hideYourEmail": { + "message": "Hide your email address from viewers." + }, "webAuthnFallbackMsg": { "message": "To verify your 2FA please click the button below." }, "webAuthnAuthenticate": { "message": "Authenticate WebAuthn" }, + "readSecurityKey": { + "message": "Read security key" + }, + "awaitingSecurityKeyInteraction": { + "message": "Awaiting security key interaction..." + }, "webAuthnNotSupported": { "message": "WebAuthn is not supported in this browser." }, @@ -7199,6 +7237,12 @@ "duoRequiredByOrgForAccount": { "message": "Duo two-step login is required for your account." }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Duo two-step login is required for your account. Follow the steps below to finish logging in." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Follow the steps below to finish logging in." + }, "launchDuo": { "message": "Launch Duo" }, @@ -9793,9 +9837,15 @@ "learnMoreAboutApi": { "message": "Learn more about Bitwarden's API" }, + "fileSend": { + "message": "File Send" + }, "fileSends": { "message": "File Sends" }, + "textSend": { + "message": "Text Send" + }, "textSends": { "message": "Text Sends" }, @@ -10029,10 +10079,6 @@ "message": "Include special characters", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "addAttachment": { "message": "Add attachment" }, @@ -10432,10 +10478,31 @@ "assignedExceedsAvailable": { "message": "Assigned seats exceed available seats." }, + "changeAtRiskPassword": { + "message": "Change at-risk password" + }, "removeUnlockWithPinPolicyTitle": { "message": "Remove Unlock with PIN" }, "removeUnlockWithPinPolicyDesc": { "message": "Do not allow members to unlock their account with a PIN." + }, + "limitedEventLogs": { + "message": "$PRODUCT_TYPE$ plans do not have access to real event logs", + "placeholders": { + "product_type": { + "content": "$1", + "example": "Teams" + } + } + }, + "upgradeForFullEvents": { + "message": "Get full access to organization event logs by upgrading to a Teams or Enterprise plan." + }, + "upgradeEventLogTitle": { + "message": "Upgrade for real event log data" + }, + "upgradeEventLogMessage": { + "message": "These events are examples only and do not reflect real events within your Bitwarden organization." } } diff --git a/apps/web/src/locales/ca/messages.json b/apps/web/src/locales/ca/messages.json index ccf66c932ed..6dc3398481b 100644 --- a/apps/web/src/locales/ca/messages.json +++ b/apps/web/src/locales/ca/messages.json @@ -5,6 +5,9 @@ "criticalApplications": { "message": "Aplicacions crítiques" }, + "noCriticalAppsAtRisk": { + "message": "No critical applications at risk" + }, "accessIntelligence": { "message": "Intel·ligència d'accés" }, @@ -198,6 +201,9 @@ "notes": { "message": "Notes" }, + "privateNote": { + "message": "Private note" + }, "note": { "message": "Nota" }, @@ -1026,6 +1032,9 @@ "no": { "message": "No" }, + "location": { + "message": "Location" + }, "loginOrCreateNewAccount": { "message": "Inicieu sessió o creeu un compte nou per accedir a la caixa forta." }, @@ -1161,14 +1170,23 @@ "logInToBitwarden": { "message": "Inicia sessió a Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "Enter the code sent to your email" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Enter the code from your authenticator app" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Press your YubiKey to authenticate" + }, "authenticationTimeout": { "message": "Temps d'espera d'autenticació" }, "authenticationSessionTimedOut": { "message": "La sessió d'autenticació s'ha esgotat. Reinicieu el procés d'inici de sessió." }, - "verifyIdentity": { - "message": "Verificació de la vostra identitat" + "verifyYourIdentity": { + "message": "Verify your Identity" }, "weDontRecognizeThisDevice": { "message": "No reconeixem aquest dispositiu. Introduïu el codi que us hem enviat al correu electrònic per verificar la identitat." @@ -1443,12 +1461,22 @@ "rememberMe": { "message": "Recorda'm" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Don't ask again on this device for 30 days" + }, "sendVerificationCodeEmailAgain": { "message": "Envia el codi de verificació altra vegada" }, "useAnotherTwoStepMethod": { "message": "Utilitzeu un altre mètode d'inici de sessió en dues passes" }, + "selectAnotherMethod": { + "message": "Select another method", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Use your recovery code" + }, "insertYubiKey": { "message": "Introduïu el vostre YubiKey al port USB de l'ordinador i, a continuació, premeu el seu botó." }, @@ -1467,6 +1495,9 @@ "twoStepOptions": { "message": "Opcions d'inici de sessió en dos passos" }, + "selectTwoStepLoginMethod": { + "message": "Select two-step login method" + }, "recoveryCodeDesc": { "message": "Heu perdut l'accés a tots els vostres proveïdors de dos factors? Utilitzeu el vostre codi de recuperació per desactivar tots els proveïdors de dos factors del vostre compte." }, @@ -1509,6 +1540,9 @@ "webAuthnMigrated": { "message": "(Migrat de FIDO)" }, + "openInNewTab": { + "message": "Open in new tab" + }, "emailTitle": { "message": "Correu electrònic" }, @@ -2224,6 +2258,9 @@ "revokeAccess": { "message": "Revoca l'accés" }, + "revoke": { + "message": "Revoke" + }, "twoStepLoginProviderEnabled": { "message": "Aquest proveïdor d'inici de sessió en dos passos està habilitat al vostre compte." }, @@ -4081,6 +4118,12 @@ "updateBrowserDesc": { "message": "Esteu utilitzant un navegador web no compatible. La caixa forta web pot no funcionar correctament." }, + "youHaveAPendingLoginRequest": { + "message": "You have a pending login request from another device." + }, + "reviewLoginRequest": { + "message": "Review login request" + }, "freeTrialEndPromptCount": { "message": "Your free trial ends in $COUNT$ days.", "placeholders": { @@ -4758,6 +4801,15 @@ "masterPassPolicyDesc": { "message": "Estableix els requisits mínims per al nivell de seguretat de la contrasenya principal." }, + "passwordStrengthScore": { + "message": "Password strength score $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "twoStepLoginPolicyTitle": { "message": "Cal iniciar sessió en dos passos" }, @@ -5038,12 +5090,40 @@ "requireSsoExemption": { "message": "Els propietaris i administradors d’organitzacions estan exempts de fer complir aquesta política." }, + "limitSendViews": { + "message": "Limit views" + }, + "limitSendViewsHint": { + "message": "No one can view this Send after the limit is reached.", + "description": "Displayed under the limit views field on Send" + }, + "limitSendViewsCount": { + "message": "$ACCESSCOUNT$ views left", + "description": "Displayed under the limit views field on Send", + "placeholders": { + "accessCount": { + "content": "$1", + "example": "2" + } + } + }, + "sendDetails": { + "message": "Send details", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendTypeTextToShare": { + "message": "Text to share" + }, "sendTypeFile": { "message": "Fitxer" }, "sendTypeText": { "message": "Text" }, + "sendPasswordDescV3": { + "message": "Add an optional password for recipients to access this Send.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "createSend": { "message": "Nou Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -5068,19 +5148,15 @@ "message": "Suprimeix el Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, - "deleteSendConfirmation": { - "message": "Esteu segur que voleu suprimir aquest Send?", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "whatTypeOfSend": { - "message": "Quin tipus de Send és aquest?", + "deleteSendPermanentConfirmation": { + "message": "Are you sure you want to permanently delete this Send?", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "deletionDate": { "message": "Data de supressió" }, - "deletionDateDesc": { - "message": "L'enviament se suprimirà permanentment a la data i hora especificades.", + "deletionDateDescV2": { + "message": "The Send will be permanently deleted on this date.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "expirationDate": { @@ -5093,21 +5169,6 @@ "maxAccessCount": { "message": "Recompte màxim d'accés" }, - "maxAccessCountDesc": { - "message": "Si s’estableix, els usuaris ja no podran accedir a aquest Send una vegada s’assolisca el nombre màxim d’accessos.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "currentAccessCount": { - "message": "Recompte d’accés actual" - }, - "sendPasswordDesc": { - "message": "Opcionalment, necessiteu una contrasenya perquè els usuaris accedisquen a aquest enviament.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendNotesDesc": { - "message": "Notes privades sobre aquest enviament.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "disabled": { "message": "Inhabilitat" }, @@ -5134,13 +5195,6 @@ "removePasswordConfirmation": { "message": "Esteu segur que voleu suprimir la contrasenya?" }, - "hideEmail": { - "message": "Amagueu la meua adreça de correu electrònic als destinataris." - }, - "disableThisSend": { - "message": "Desactiveu aquest enviament perquè ningú no hi puga accedir.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "allSends": { "message": "Tots els Send" }, @@ -5151,6 +5205,9 @@ "pendingDeletion": { "message": "Pendent de supressió" }, + "hideTextByDefault": { + "message": "Hide text by default" + }, "expired": { "message": "Caducat" }, @@ -5372,13 +5429,6 @@ "message": "Mostra sempre l'adreça de correu electrònic del membre amb els destinataris quan creeu o editeu un Send.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, - "sendOptionsPolicyInEffect": { - "message": "Actualment estan en vigor les polítiques organitzatives següents:" - }, - "sendDisableHideEmailInEffect": { - "message": "No es permet als usuaris amagar la seua adreça de correu electrònic dels destinataris en crear o editar un Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "modifiedPolicyId": { "message": "Política modificada $ID$.", "placeholders": { @@ -5478,27 +5528,6 @@ "personalOwnershipCheckboxDesc": { "message": "Desactiva la propietat personal per als usuaris de l'organització" }, - "textHiddenByDefault": { - "message": "Quan accediu a Enviar, amaga el text per defecte", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendNameDesc": { - "message": "Un nom apropiat per descriure aquest Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendTextDesc": { - "message": "El text que voleu pel Send." - }, - "sendFileDesc": { - "message": "El fitxer que voleu pel Send." - }, - "copySendLinkOnSave": { - "message": "Copie l'enllaç per compartir aquest Send al meu porta-retalls després de guardar-lo." - }, - "sendLinkLabel": { - "message": "Enllaç Send", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "send": { "message": "Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -5647,12 +5676,21 @@ "dateParsingError": { "message": "S'ha produït un error en guardar les dates de supressió i caducitat." }, + "hideYourEmail": { + "message": "Hide your email address from viewers." + }, "webAuthnFallbackMsg": { "message": "Per verificar el vostre 2FA, feu clic al botó següent." }, "webAuthnAuthenticate": { "message": "Autenticar WebAuthn" }, + "readSecurityKey": { + "message": "Read security key" + }, + "awaitingSecurityKeyInteraction": { + "message": "Awaiting security key interaction..." + }, "webAuthnNotSupported": { "message": "WebAuthn no és compatible amb aquest navegador." }, @@ -7199,6 +7237,12 @@ "duoRequiredByOrgForAccount": { "message": "Es requereix l'inici de sessió en dos passos de DUO al vostre compte." }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Duo two-step login is required for your account. Follow the steps below to finish logging in." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Follow the steps below to finish logging in." + }, "launchDuo": { "message": "Inicia DUO" }, @@ -9793,9 +9837,15 @@ "learnMoreAboutApi": { "message": "Learn more about Bitwarden's API" }, + "fileSend": { + "message": "File Send" + }, "fileSends": { "message": "File Sends" }, + "textSend": { + "message": "Text Send" + }, "textSends": { "message": "Text Sends" }, @@ -10029,10 +10079,6 @@ "message": "Include special characters", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "addAttachment": { "message": "Add attachment" }, @@ -10432,10 +10478,31 @@ "assignedExceedsAvailable": { "message": "Assigned seats exceed available seats." }, + "changeAtRiskPassword": { + "message": "Change at-risk password" + }, "removeUnlockWithPinPolicyTitle": { "message": "Remove Unlock with PIN" }, "removeUnlockWithPinPolicyDesc": { "message": "Do not allow members to unlock their account with a PIN." + }, + "limitedEventLogs": { + "message": "$PRODUCT_TYPE$ plans do not have access to real event logs", + "placeholders": { + "product_type": { + "content": "$1", + "example": "Teams" + } + } + }, + "upgradeForFullEvents": { + "message": "Get full access to organization event logs by upgrading to a Teams or Enterprise plan." + }, + "upgradeEventLogTitle": { + "message": "Upgrade for real event log data" + }, + "upgradeEventLogMessage": { + "message": "These events are examples only and do not reflect real events within your Bitwarden organization." } } diff --git a/apps/web/src/locales/cs/messages.json b/apps/web/src/locales/cs/messages.json index e805e9e4d21..096579fb9ae 100644 --- a/apps/web/src/locales/cs/messages.json +++ b/apps/web/src/locales/cs/messages.json @@ -5,6 +5,9 @@ "criticalApplications": { "message": "Kritické aplikace" }, + "noCriticalAppsAtRisk": { + "message": "Žádné ohrožené kritické aplikace" + }, "accessIntelligence": { "message": "Přístup k inteligenci" }, @@ -198,6 +201,9 @@ "notes": { "message": "Poznámka" }, + "privateNote": { + "message": "Soukromá poznámka" + }, "note": { "message": "Poznámka" }, @@ -1026,6 +1032,9 @@ "no": { "message": "Ne" }, + "location": { + "message": "Umístění" + }, "loginOrCreateNewAccount": { "message": "Pro přístup do Vašeho bezpečného trezoru se přihlaste nebo si vytvořte nový účet." }, @@ -1161,13 +1170,22 @@ "logInToBitwarden": { "message": "Přihlásit se do Bitwardenu" }, + "enterTheCodeSentToYourEmail": { + "message": "Zadejte kód odeslaný na Váš e-mail" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Zadejte kód z Vaší ověřovací aplikace" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Stiskněte svůj YubiKey pro ověření" + }, "authenticationTimeout": { "message": "Časový limit ověření" }, "authenticationSessionTimedOut": { "message": "Vypršel časový limit relace ověřování. Restartujte proces přihlášení." }, - "verifyIdentity": { + "verifyYourIdentity": { "message": "Ověřte svou totožnost" }, "weDontRecognizeThisDevice": { @@ -1443,12 +1461,22 @@ "rememberMe": { "message": "Zapamatovat mě" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Neptat se na tomto zařízení 30 dnů" + }, "sendVerificationCodeEmailAgain": { "message": "Znovu zaslat ověřovací kód na e-mail" }, "useAnotherTwoStepMethod": { "message": "Použít jinou metodu dvoufázového přihlášení" }, + "selectAnotherMethod": { + "message": "Vybrat jinou metodu", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Použít obnovovací kód" + }, "insertYubiKey": { "message": "Vložte YubiKey do USB portu Vašeho počítače a stiskněte jeho tlačítko." }, @@ -1467,6 +1495,9 @@ "twoStepOptions": { "message": "Volby dvoufázového přihlášení" }, + "selectTwoStepLoginMethod": { + "message": "Vyberte metodu dvoufázového přihlášení" + }, "recoveryCodeDesc": { "message": "Ztratili jste přístup ke všem nastaveným poskytovatelům dvoufázového přihlášení? Použijte obnovovací kód pro vypnutí dvoufázového přihlášení." }, @@ -1509,6 +1540,9 @@ "webAuthnMigrated": { "message": "(Migrováno z FIDO)" }, + "openInNewTab": { + "message": "Otevřít v nové kartě" + }, "emailTitle": { "message": "E-mail" }, @@ -2224,6 +2258,9 @@ "revokeAccess": { "message": "Zrušit přístup" }, + "revoke": { + "message": "Odvolat" + }, "twoStepLoginProviderEnabled": { "message": "Tento poskytovatel dvoufázového přihlášení je ve Vašem účtu aktivní." }, @@ -4081,6 +4118,12 @@ "updateBrowserDesc": { "message": "Používáte nepodporovaný webový prohlížeč. Webový trezor nemusí pracovat správně." }, + "youHaveAPendingLoginRequest": { + "message": "Máte čekající žádost o přihlášení z jiného zařízení." + }, + "reviewLoginRequest": { + "message": "Podívat se na žádost o přihlášení" + }, "freeTrialEndPromptCount": { "message": "Vaše zkušební doba končí za $COUNT$ dnů.", "placeholders": { @@ -4758,6 +4801,15 @@ "masterPassPolicyDesc": { "message": "Nastavte minimální požadavky pro sílu hlavního hesla." }, + "passwordStrengthScore": { + "message": "Skóre síly hesla: $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "twoStepLoginPolicyTitle": { "message": "Požadovat dvoufázové přihlášení" }, @@ -5038,12 +5090,40 @@ "requireSsoExemption": { "message": "Majitelé a administrátoři organizací jsou od prosazování těchto zásad osvobozeni." }, + "limitSendViews": { + "message": "Omezit zobrazení" + }, + "limitSendViewsHint": { + "message": "Po dosažení limitu nebude nikdo moci zobrazit tento Send.", + "description": "Displayed under the limit views field on Send" + }, + "limitSendViewsCount": { + "message": "Zbývá $ACCESSCOUNT$ zobrazení", + "description": "Displayed under the limit views field on Send", + "placeholders": { + "accessCount": { + "content": "$1", + "example": "2" + } + } + }, + "sendDetails": { + "message": "Podrobnosti Send", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendTypeTextToShare": { + "message": "Text ke sdílení" + }, "sendTypeFile": { "message": "Soubor" }, "sendTypeText": { "message": "Text" }, + "sendPasswordDescV3": { + "message": "Přidá volitelné heslo pro příjemce pro přístup k tomuto Send.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "createSend": { "message": "Nový Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -5068,19 +5148,15 @@ "message": "Smazat Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, - "deleteSendConfirmation": { - "message": "Opravdu chcete smazat tento Send?", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "whatTypeOfSend": { - "message": "Jakého typu je tento Send?", + "deleteSendPermanentConfirmation": { + "message": "Opravdu chcete tento Send trvale smazat?", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "deletionDate": { "message": "Datum smazání" }, - "deletionDateDesc": { - "message": "Tento Send bude trvale smazán v určený datum a čas.", + "deletionDateDescV2": { + "message": "Tento Send bude trvale smazán v určené datum.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "expirationDate": { @@ -5093,21 +5169,6 @@ "maxAccessCount": { "message": "Maximální počet přístupů" }, - "maxAccessCountDesc": { - "message": "Je-li nastaveno, uživatelé již nebudou mít přístup k tomuto Send, jakmile bude dosaženo maximálního počtu přístupů.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "currentAccessCount": { - "message": "Aktuální počet přístupů" - }, - "sendPasswordDesc": { - "message": "Volitelně vyžadovat heslo pro přístup k tomuto Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendNotesDesc": { - "message": "Soukromé poznámky o tomto Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "disabled": { "message": "Zakázáno" }, @@ -5134,13 +5195,6 @@ "removePasswordConfirmation": { "message": "Opravdu chcete odebrat heslo?" }, - "hideEmail": { - "message": "Skrýt moji e-mailovou adresu před příjemci" - }, - "disableThisSend": { - "message": "Deaktivovat tento Send, takže k němu nebude moci nikdo přistoupit", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "allSends": { "message": "Všechny Sends" }, @@ -5151,6 +5205,9 @@ "pendingDeletion": { "message": "Čekání na smazání" }, + "hideTextByDefault": { + "message": "Ve výchozím nastavení skrýt text" + }, "expired": { "message": "Vypršela platnost" }, @@ -5372,13 +5429,6 @@ "message": "Při vytváření nebo úpravách Send vždy zobrazí e-mailovou adresu člena s příjemci.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, - "sendOptionsPolicyInEffect": { - "message": "Aktuálně platí následující zásady organizace:" - }, - "sendDisableHideEmailInEffect": { - "message": "Uživatelé nesmí při vytváření nebo úpravách Send skrýt svou e-mailovou adresu před příjemci.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "modifiedPolicyId": { "message": "Byly změněny zásady $ID$.", "placeholders": { @@ -5478,27 +5528,6 @@ "personalOwnershipCheckboxDesc": { "message": "Odebere osobní vlastnictví pro uživatele organizace" }, - "textHiddenByDefault": { - "message": "Při přístupu k Send skrýt text ve výchozím nastavení", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendNameDesc": { - "message": "Přátelský název pro popis tohoto Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendTextDesc": { - "message": "Text, který chcete odeslat." - }, - "sendFileDesc": { - "message": "Soubor, který chcete odeslat." - }, - "copySendLinkOnSave": { - "message": "Kopírovat odkaz pro sdílení tohoto Send do mé schránky při uložení" - }, - "sendLinkLabel": { - "message": "Odkaz tohoto Send", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "send": { "message": "Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -5647,12 +5676,21 @@ "dateParsingError": { "message": "Došlo k chybě při ukládání datumů smazání a vypršení platnosti." }, + "hideYourEmail": { + "message": "Skryje Vaši e-mailovou adresu před zobrazením." + }, "webAuthnFallbackMsg": { "message": "Pro ověření dvoufaktorového ověření klepněte na tlačítko níže." }, "webAuthnAuthenticate": { "message": "Ověřit WebAuthn" }, + "readSecurityKey": { + "message": "Přečíst bezpečnostní klíč" + }, + "awaitingSecurityKeyInteraction": { + "message": "Čeká se na interakci s bezpečnostním klíčem..." + }, "webAuthnNotSupported": { "message": "WebAuthn není v tomto prohlížeči podporován." }, @@ -7199,6 +7237,12 @@ "duoRequiredByOrgForAccount": { "message": "Pro Váš účet je vyžadováno dvoufázové přihlášení Duo." }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Pro Váš účet je nutné dvoufázové přihlášení. Pro dokončení přihlášení postupujte podle následujících kroků." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Postupujte podle kroků níže pro dokončení přihlášení." + }, "launchDuo": { "message": "Spustit Duo" }, @@ -9793,9 +9837,15 @@ "learnMoreAboutApi": { "message": "Další informace o API Bitwardenu" }, + "fileSend": { + "message": "Send souboru" + }, "fileSends": { "message": "Sends se soubory" }, + "textSend": { + "message": "Send textu" + }, "textSends": { "message": "Sends s texty" }, @@ -10029,10 +10079,6 @@ "message": "Zahrnout speciální znaky", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "addAttachment": { "message": "Přidat přílohu" }, @@ -10432,10 +10478,31 @@ "assignedExceedsAvailable": { "message": "Přiřazení uživatelé překračují dostupné uživatele." }, + "changeAtRiskPassword": { + "message": "Změnit ohrožené heslo" + }, "removeUnlockWithPinPolicyTitle": { "message": "Odebrat odemknutí pomocí PIN" }, "removeUnlockWithPinPolicyDesc": { "message": "Nepovolí členům odemknout svůj účet pomocí PIN." + }, + "limitedEventLogs": { + "message": "Plány $PRODUCT_TYPE$ nemají přístup k protokolům reálných událostí", + "placeholders": { + "product_type": { + "content": "$1", + "example": "Teams" + } + } + }, + "upgradeForFullEvents": { + "message": "Získejte plný přístup k protokolům událostí organizace aktualizací do týmů nebo plánu Enterprise." + }, + "upgradeEventLogTitle": { + "message": "Aktualizovat pro reálná data protokolu událostí" + }, + "upgradeEventLogMessage": { + "message": "Tyto události jsou jen příklady a neodrážejí skutečné události v rámci Vaší organizace Bitwarden." } } diff --git a/apps/web/src/locales/cy/messages.json b/apps/web/src/locales/cy/messages.json index 0aa20a9e625..bbd655a6a7c 100644 --- a/apps/web/src/locales/cy/messages.json +++ b/apps/web/src/locales/cy/messages.json @@ -5,6 +5,9 @@ "criticalApplications": { "message": "Critical applications" }, + "noCriticalAppsAtRisk": { + "message": "No critical applications at risk" + }, "accessIntelligence": { "message": "Access Intelligence" }, @@ -198,6 +201,9 @@ "notes": { "message": "Nodiadau" }, + "privateNote": { + "message": "Private note" + }, "note": { "message": "Note" }, @@ -1026,6 +1032,9 @@ "no": { "message": "No" }, + "location": { + "message": "Location" + }, "loginOrCreateNewAccount": { "message": "Log in or create a new account to access your secure vault." }, @@ -1161,13 +1170,22 @@ "logInToBitwarden": { "message": "Log in to Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "Enter the code sent to your email" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Enter the code from your authenticator app" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Press your YubiKey to authenticate" + }, "authenticationTimeout": { "message": "Authentication timeout" }, "authenticationSessionTimedOut": { "message": "The authentication session timed out. Please restart the login process." }, - "verifyIdentity": { + "verifyYourIdentity": { "message": "Verify your Identity" }, "weDontRecognizeThisDevice": { @@ -1443,12 +1461,22 @@ "rememberMe": { "message": "Remember me" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Don't ask again on this device for 30 days" + }, "sendVerificationCodeEmailAgain": { "message": "Send verification code email again" }, "useAnotherTwoStepMethod": { "message": "Use another two-step login method" }, + "selectAnotherMethod": { + "message": "Select another method", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Use your recovery code" + }, "insertYubiKey": { "message": "Insert your YubiKey into your computer's USB port, then touch its button." }, @@ -1467,6 +1495,9 @@ "twoStepOptions": { "message": "Two-step login options" }, + "selectTwoStepLoginMethod": { + "message": "Select two-step login method" + }, "recoveryCodeDesc": { "message": "Lost access to all of your two-step login providers? Use your recovery code to turn off all two-step login providers from your account." }, @@ -1509,6 +1540,9 @@ "webAuthnMigrated": { "message": "(Migrated from FIDO)" }, + "openInNewTab": { + "message": "Open in new tab" + }, "emailTitle": { "message": "Email" }, @@ -2224,6 +2258,9 @@ "revokeAccess": { "message": "Revoke access" }, + "revoke": { + "message": "Revoke" + }, "twoStepLoginProviderEnabled": { "message": "This two-step login provider is active on your account." }, @@ -4081,6 +4118,12 @@ "updateBrowserDesc": { "message": "You are using an unsupported web browser. The web vault may not function properly." }, + "youHaveAPendingLoginRequest": { + "message": "You have a pending login request from another device." + }, + "reviewLoginRequest": { + "message": "Review login request" + }, "freeTrialEndPromptCount": { "message": "Your free trial ends in $COUNT$ days.", "placeholders": { @@ -4758,6 +4801,15 @@ "masterPassPolicyDesc": { "message": "Set requirements for master password strength." }, + "passwordStrengthScore": { + "message": "Password strength score $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "twoStepLoginPolicyTitle": { "message": "Require two-step login" }, @@ -5038,12 +5090,40 @@ "requireSsoExemption": { "message": "Organization owners and admins are exempt from this policy's enforcement." }, + "limitSendViews": { + "message": "Limit views" + }, + "limitSendViewsHint": { + "message": "No one can view this Send after the limit is reached.", + "description": "Displayed under the limit views field on Send" + }, + "limitSendViewsCount": { + "message": "$ACCESSCOUNT$ views left", + "description": "Displayed under the limit views field on Send", + "placeholders": { + "accessCount": { + "content": "$1", + "example": "2" + } + } + }, + "sendDetails": { + "message": "Send details", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendTypeTextToShare": { + "message": "Text to share" + }, "sendTypeFile": { "message": "File" }, "sendTypeText": { "message": "Text" }, + "sendPasswordDescV3": { + "message": "Add an optional password for recipients to access this Send.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "createSend": { "message": "New Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -5068,19 +5148,15 @@ "message": "Delete Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, - "deleteSendConfirmation": { - "message": "Are you sure you want to delete this Send?", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "whatTypeOfSend": { - "message": "What type of Send is this?", + "deleteSendPermanentConfirmation": { + "message": "Are you sure you want to permanently delete this Send?", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "deletionDate": { "message": "Deletion date" }, - "deletionDateDesc": { - "message": "The Send will be permanently deleted on the specified date and time.", + "deletionDateDescV2": { + "message": "The Send will be permanently deleted on this date.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "expirationDate": { @@ -5093,21 +5169,6 @@ "maxAccessCount": { "message": "Maximum access count" }, - "maxAccessCountDesc": { - "message": "If set, users will no longer be able to access this Send once the maximum access count is reached.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "currentAccessCount": { - "message": "Current access count" - }, - "sendPasswordDesc": { - "message": "Optionally require a password for users to access this Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendNotesDesc": { - "message": "Private notes about this Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "disabled": { "message": "Disabled" }, @@ -5134,13 +5195,6 @@ "removePasswordConfirmation": { "message": "Are you sure you want to remove the password?" }, - "hideEmail": { - "message": "Hide my email address from recipients." - }, - "disableThisSend": { - "message": "Deactivate this Send so that no one can access it.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "allSends": { "message": "All Sends" }, @@ -5151,6 +5205,9 @@ "pendingDeletion": { "message": "Pending deletion" }, + "hideTextByDefault": { + "message": "Hide text by default" + }, "expired": { "message": "Expired" }, @@ -5372,13 +5429,6 @@ "message": "Always show member’s email address with recipients when creating or editing a Send.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, - "sendOptionsPolicyInEffect": { - "message": "The following organization policies are currently in effect:" - }, - "sendDisableHideEmailInEffect": { - "message": "Users are not allowed to hide their email address from recipients when creating or editing a Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "modifiedPolicyId": { "message": "Modified policy $ID$.", "placeholders": { @@ -5478,27 +5528,6 @@ "personalOwnershipCheckboxDesc": { "message": "Remove individual ownership for organization users" }, - "textHiddenByDefault": { - "message": "When accessing the Send, hide the text by default", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendNameDesc": { - "message": "A friendly name to describe this Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendTextDesc": { - "message": "The text you want to Send." - }, - "sendFileDesc": { - "message": "The file you want to Send." - }, - "copySendLinkOnSave": { - "message": "Copy the link to share this Send to my clipboard upon save." - }, - "sendLinkLabel": { - "message": "Send link", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "send": { "message": "Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -5647,12 +5676,21 @@ "dateParsingError": { "message": "There was an error saving your deletion and expiration dates." }, + "hideYourEmail": { + "message": "Hide your email address from viewers." + }, "webAuthnFallbackMsg": { "message": "To verify your 2FA please click the button below." }, "webAuthnAuthenticate": { "message": "Authenticate WebAuthn" }, + "readSecurityKey": { + "message": "Read security key" + }, + "awaitingSecurityKeyInteraction": { + "message": "Awaiting security key interaction..." + }, "webAuthnNotSupported": { "message": "WebAuthn is not supported in this browser." }, @@ -7199,6 +7237,12 @@ "duoRequiredByOrgForAccount": { "message": "Duo two-step login is required for your account." }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Duo two-step login is required for your account. Follow the steps below to finish logging in." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Follow the steps below to finish logging in." + }, "launchDuo": { "message": "Launch Duo" }, @@ -9793,9 +9837,15 @@ "learnMoreAboutApi": { "message": "Learn more about Bitwarden's API" }, + "fileSend": { + "message": "File Send" + }, "fileSends": { "message": "File Sends" }, + "textSend": { + "message": "Text Send" + }, "textSends": { "message": "Text Sends" }, @@ -10029,10 +10079,6 @@ "message": "Include special characters", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "addAttachment": { "message": "Add attachment" }, @@ -10432,10 +10478,31 @@ "assignedExceedsAvailable": { "message": "Assigned seats exceed available seats." }, + "changeAtRiskPassword": { + "message": "Change at-risk password" + }, "removeUnlockWithPinPolicyTitle": { "message": "Remove Unlock with PIN" }, "removeUnlockWithPinPolicyDesc": { "message": "Do not allow members to unlock their account with a PIN." + }, + "limitedEventLogs": { + "message": "$PRODUCT_TYPE$ plans do not have access to real event logs", + "placeholders": { + "product_type": { + "content": "$1", + "example": "Teams" + } + } + }, + "upgradeForFullEvents": { + "message": "Get full access to organization event logs by upgrading to a Teams or Enterprise plan." + }, + "upgradeEventLogTitle": { + "message": "Upgrade for real event log data" + }, + "upgradeEventLogMessage": { + "message": "These events are examples only and do not reflect real events within your Bitwarden organization." } } diff --git a/apps/web/src/locales/da/messages.json b/apps/web/src/locales/da/messages.json index 0d7b28211ce..62a2ea57508 100644 --- a/apps/web/src/locales/da/messages.json +++ b/apps/web/src/locales/da/messages.json @@ -5,6 +5,9 @@ "criticalApplications": { "message": "Kritiske apps" }, + "noCriticalAppsAtRisk": { + "message": "No critical applications at risk" + }, "accessIntelligence": { "message": "Adgangsefterretning" }, @@ -198,6 +201,9 @@ "notes": { "message": "Notater" }, + "privateNote": { + "message": "Private note" + }, "note": { "message": "Notat" }, @@ -1026,6 +1032,9 @@ "no": { "message": "Nej" }, + "location": { + "message": "Location" + }, "loginOrCreateNewAccount": { "message": "Log ind eller opret en ny konto for at tilgå din sikre boks." }, @@ -1161,14 +1170,23 @@ "logInToBitwarden": { "message": "Log ind på Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "Enter the code sent to your email" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Enter the code from your authenticator app" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Press your YubiKey to authenticate" + }, "authenticationTimeout": { "message": "Godkendelsestimeout" }, "authenticationSessionTimedOut": { "message": "Godkendelsessessionen fik timeout. Genstart loginprocessen." }, - "verifyIdentity": { - "message": "Bekræft din identitet" + "verifyYourIdentity": { + "message": "Verify your Identity" }, "weDontRecognizeThisDevice": { "message": "Denne enhed er ikke genkendt. Angiv koden i den tilsendte e-mail for at bekræfte identiteten." @@ -1443,12 +1461,22 @@ "rememberMe": { "message": "Husk mig" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Don't ask again on this device for 30 days" + }, "sendVerificationCodeEmailAgain": { "message": "Send bekræftelseskode-email igen" }, "useAnotherTwoStepMethod": { "message": "Brug en anden totrins-login metode" }, + "selectAnotherMethod": { + "message": "Select another method", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Use your recovery code" + }, "insertYubiKey": { "message": "Indsæt din YubiKey i computerens USB-port og tryk på dens knap." }, @@ -1467,6 +1495,9 @@ "twoStepOptions": { "message": "Totrins-login indstillinger" }, + "selectTwoStepLoginMethod": { + "message": "Select two-step login method" + }, "recoveryCodeDesc": { "message": "Mistet adgang til alle totrinsudbyderene? Brug din genoprettelseskode til at deaktivere dem alle på kontoen." }, @@ -1509,6 +1540,9 @@ "webAuthnMigrated": { "message": "(Migreret fra FIDO)" }, + "openInNewTab": { + "message": "Open in new tab" + }, "emailTitle": { "message": "E-mail" }, @@ -2224,6 +2258,9 @@ "revokeAccess": { "message": "Ophæv adgang" }, + "revoke": { + "message": "Revoke" + }, "twoStepLoginProviderEnabled": { "message": "Denne totrins-loginudbyder er aktiveret på kontoen." }, @@ -4081,6 +4118,12 @@ "updateBrowserDesc": { "message": "Du bruger en ikke-understøttet webbrowser. Web-boksen fungerer muligvis ikke korrekt." }, + "youHaveAPendingLoginRequest": { + "message": "You have a pending login request from another device." + }, + "reviewLoginRequest": { + "message": "Review login request" + }, "freeTrialEndPromptCount": { "message": "Den gratis prøveperiode slutter om $COUNT$ dage.", "placeholders": { @@ -4758,6 +4801,15 @@ "masterPassPolicyDesc": { "message": "Angiv krav til styrken af hovedadgangskode." }, + "passwordStrengthScore": { + "message": "Password strength score $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "twoStepLoginPolicyTitle": { "message": "Kræv totrins-login" }, @@ -5038,12 +5090,40 @@ "requireSsoExemption": { "message": "Denne politik håndhæves ikke for organisationsejere og -admins." }, + "limitSendViews": { + "message": "Limit views" + }, + "limitSendViewsHint": { + "message": "No one can view this Send after the limit is reached.", + "description": "Displayed under the limit views field on Send" + }, + "limitSendViewsCount": { + "message": "$ACCESSCOUNT$ views left", + "description": "Displayed under the limit views field on Send", + "placeholders": { + "accessCount": { + "content": "$1", + "example": "2" + } + } + }, + "sendDetails": { + "message": "Send details", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendTypeTextToShare": { + "message": "Text to share" + }, "sendTypeFile": { "message": "Fil" }, "sendTypeText": { "message": "Tekst" }, + "sendPasswordDescV3": { + "message": "Add an optional password for recipients to access this Send.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "createSend": { "message": "Ny Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -5068,19 +5148,15 @@ "message": "Slet Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, - "deleteSendConfirmation": { - "message": "Sikker på, at denne Send skal slettes?", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "whatTypeOfSend": { - "message": "Hvilken type Send er denne?", + "deleteSendPermanentConfirmation": { + "message": "Are you sure you want to permanently delete this Send?", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "deletionDate": { "message": "Sletningsdato" }, - "deletionDateDesc": { - "message": "Denne Send slettes permanent på den angivne dato og tidspunkt.", + "deletionDateDescV2": { + "message": "The Send will be permanently deleted on this date.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "expirationDate": { @@ -5093,21 +5169,6 @@ "maxAccessCount": { "message": "Maksimalt adgangsantal" }, - "maxAccessCountDesc": { - "message": "Hvis opsat, vil brugere ikke længere kunne tilgå denne Send, når det maksimale adgangsantal er nået.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "currentAccessCount": { - "message": "Aktuelt adgangsantal" - }, - "sendPasswordDesc": { - "message": "Valgfrit brugeradgangskodekrav for tilgang til denne Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendNotesDesc": { - "message": "Fortrolige notater om denne Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "disabled": { "message": "Deaktiveret" }, @@ -5134,13 +5195,6 @@ "removePasswordConfirmation": { "message": "Sikker på, at adgangskoden skal fjernes?" }, - "hideEmail": { - "message": "Skjul min e-mailadresse for modtagere." - }, - "disableThisSend": { - "message": "Deaktivér denne Send så ingen kan tilgå den.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "allSends": { "message": "Alle Send" }, @@ -5151,6 +5205,9 @@ "pendingDeletion": { "message": "Afventer sletning" }, + "hideTextByDefault": { + "message": "Hide text by default" + }, "expired": { "message": "Udløbet" }, @@ -5372,13 +5429,6 @@ "message": "Vis altid medlemmets e-mailadresse med modtagere, når Sends oprettes eller redigeres.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, - "sendOptionsPolicyInEffect": { - "message": "Følgende organisationspolitikker er i øjeblikket gældende:" - }, - "sendDisableHideEmailInEffect": { - "message": "Brugere har ikke lov til at skjule deres e-mailadresser for modtagere, når en Send oprettes eller redigeres.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "modifiedPolicyId": { "message": "Redigerede politik $ID$.", "placeholders": { @@ -5478,27 +5528,6 @@ "personalOwnershipCheckboxDesc": { "message": "Fjern personligt ejerskab for organisationsbrugere" }, - "textHiddenByDefault": { - "message": "Når Send tilgås, skjul som standard teksten", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendNameDesc": { - "message": "Et logisk navn til at beskrive denne Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendTextDesc": { - "message": "Teksten, du vil sende." - }, - "sendFileDesc": { - "message": "Filen, du vil sende." - }, - "copySendLinkOnSave": { - "message": "Kopiér linket for at dele denne Send til udklipsholden ved gem." - }, - "sendLinkLabel": { - "message": "Send link", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "send": { "message": "Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -5647,12 +5676,21 @@ "dateParsingError": { "message": "En fejl opstod under forsøget på at gemme sletnings- og udløbsdatoer." }, + "hideYourEmail": { + "message": "Hide your email address from viewers." + }, "webAuthnFallbackMsg": { "message": "Klik på knappen nedenfor for at bekræfte din 2FA." }, "webAuthnAuthenticate": { "message": "Godkend WebAuthn" }, + "readSecurityKey": { + "message": "Read security key" + }, + "awaitingSecurityKeyInteraction": { + "message": "Awaiting security key interaction..." + }, "webAuthnNotSupported": { "message": "Denne browser understøtter ikke WebAuthn." }, @@ -7199,6 +7237,12 @@ "duoRequiredByOrgForAccount": { "message": "Duo totrinsindlogning kræves for kontoen." }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Duo two-step login is required for your account. Follow the steps below to finish logging in." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Follow the steps below to finish logging in." + }, "launchDuo": { "message": "Start Duo" }, @@ -9793,9 +9837,15 @@ "learnMoreAboutApi": { "message": "Læs mere om Bitwardens API" }, + "fileSend": { + "message": "File Send" + }, "fileSends": { "message": "Fil-Sends" }, + "textSend": { + "message": "Text Send" + }, "textSends": { "message": "Tekst-Sends" }, @@ -10029,10 +10079,6 @@ "message": "Inkludér specialtegn", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "addAttachment": { "message": "Tilføj vedhæftning" }, @@ -10432,10 +10478,31 @@ "assignedExceedsAvailable": { "message": "Assigned seats exceed available seats." }, + "changeAtRiskPassword": { + "message": "Change at-risk password" + }, "removeUnlockWithPinPolicyTitle": { "message": "Remove Unlock with PIN" }, "removeUnlockWithPinPolicyDesc": { "message": "Do not allow members to unlock their account with a PIN." + }, + "limitedEventLogs": { + "message": "$PRODUCT_TYPE$ plans do not have access to real event logs", + "placeholders": { + "product_type": { + "content": "$1", + "example": "Teams" + } + } + }, + "upgradeForFullEvents": { + "message": "Get full access to organization event logs by upgrading to a Teams or Enterprise plan." + }, + "upgradeEventLogTitle": { + "message": "Upgrade for real event log data" + }, + "upgradeEventLogMessage": { + "message": "These events are examples only and do not reflect real events within your Bitwarden organization." } } diff --git a/apps/web/src/locales/de/messages.json b/apps/web/src/locales/de/messages.json index 9fef604190b..de651d54ef1 100644 --- a/apps/web/src/locales/de/messages.json +++ b/apps/web/src/locales/de/messages.json @@ -5,6 +5,9 @@ "criticalApplications": { "message": "Kritische Anwendungen" }, + "noCriticalAppsAtRisk": { + "message": "Keine kritischen Anwendungen gefährdet" + }, "accessIntelligence": { "message": "Zugriff auf Informationen" }, @@ -198,6 +201,9 @@ "notes": { "message": "Notizen" }, + "privateNote": { + "message": "Private Notiz" + }, "note": { "message": "Notiz" }, @@ -1026,6 +1032,9 @@ "no": { "message": "Nein" }, + "location": { + "message": "Standort" + }, "loginOrCreateNewAccount": { "message": "Sie müssen sich anmelden oder ein neues Konto erstellen, um auf den Tresor zugreifen zu können." }, @@ -1161,13 +1170,22 @@ "logInToBitwarden": { "message": "Bei Bitwarden anmelden" }, + "enterTheCodeSentToYourEmail": { + "message": "Gib den an deine E-Mail-Adresse gesendeten Code ein" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Gib den Code aus deiner Authenticator-App ein" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Drücke zum Authentifizieren auf deinen YubiKey" + }, "authenticationTimeout": { "message": "Authentifizierungs-Timeout" }, "authenticationSessionTimedOut": { "message": "Die Authentifizierungssitzung ist abgelaufen. Bitte starte den Anmeldeprozess neu." }, - "verifyIdentity": { + "verifyYourIdentity": { "message": "Verifiziere deine Identität" }, "weDontRecognizeThisDevice": { @@ -1443,12 +1461,22 @@ "rememberMe": { "message": "Angemeldet bleiben" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Für 30 Tage auf diesem Gerät nicht mehr fragen" + }, "sendVerificationCodeEmailAgain": { "message": "E-Mail mit Bestätigungscode erneut versenden" }, "useAnotherTwoStepMethod": { "message": "Verwenden sie eine andere Zwei-Faktor-Anmelde-Methode" }, + "selectAnotherMethod": { + "message": "Wähle eine andere Methode", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Verwende deinen Wiederherstellungscode" + }, "insertYubiKey": { "message": "Stecken Sie Ihren YubiKey in einen USB-Port Ihres Computers und berühren Sie dessen Knopf." }, @@ -1467,6 +1495,9 @@ "twoStepOptions": { "message": "Optionen für Zwei-Faktor-Authentifizierung" }, + "selectTwoStepLoginMethod": { + "message": "Zwei-Faktor-Authentifizierungsmethode auswählen" + }, "recoveryCodeDesc": { "message": "Zugang zu allen Zwei-Faktor-Anbietern verloren? Benutze deinen Wiederherstellungscode, um alle Zwei-Faktor-Anbieter in deinem Konto zu deaktivieren." }, @@ -1509,6 +1540,9 @@ "webAuthnMigrated": { "message": "(Von FIDO migriert)" }, + "openInNewTab": { + "message": "In neuem Tab öffnen" + }, "emailTitle": { "message": "E-Mail" }, @@ -2224,6 +2258,9 @@ "revokeAccess": { "message": "Zugriff widerrufen" }, + "revoke": { + "message": "Widerrufen" + }, "twoStepLoginProviderEnabled": { "message": "Dieser Zwei-Faktor-Authentifizierungsanbieter ist für dein Konto aktiviert." }, @@ -4081,6 +4118,12 @@ "updateBrowserDesc": { "message": "Du verwendest einen nicht unterstützten Webbrowser. Der Web-Tresor funktioniert möglicherweise nicht richtig." }, + "youHaveAPendingLoginRequest": { + "message": "Du hast eine ausstehende Anmeldeanfrage von einem anderen Gerät." + }, + "reviewLoginRequest": { + "message": "Anmeldeanfrage überprüfen" + }, "freeTrialEndPromptCount": { "message": "Deine kostenlose Testversion endet in $COUNT$ Tagen.", "placeholders": { @@ -4758,6 +4801,15 @@ "masterPassPolicyDesc": { "message": "Mindestanforderungen für die Stärke des Master-Passworts festlegen." }, + "passwordStrengthScore": { + "message": "Bewertung der Passwortstärke $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "twoStepLoginPolicyTitle": { "message": "Zwei-Faktor-Authentifizierung verlangen" }, @@ -5038,12 +5090,40 @@ "requireSsoExemption": { "message": "Organisationseigentümer und Administratoren sind von der Durchsetzung dieser Richtlinie ausgenommen." }, + "limitSendViews": { + "message": "Ansichten begrenzen" + }, + "limitSendViewsHint": { + "message": "Nach Erreichen des Limits kann niemand mehr dieses Send sehen.", + "description": "Displayed under the limit views field on Send" + }, + "limitSendViewsCount": { + "message": "$ACCESSCOUNT$ Ansichten übrig", + "description": "Displayed under the limit views field on Send", + "placeholders": { + "accessCount": { + "content": "$1", + "example": "2" + } + } + }, + "sendDetails": { + "message": "Send-Details", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendTypeTextToShare": { + "message": "Zu teilender Text" + }, "sendTypeFile": { "message": "Datei" }, "sendTypeText": { "message": "Text" }, + "sendPasswordDescV3": { + "message": "Füge ein optionales Passwort hinzu, mit dem Empfänger auf dieses Send zugreifen können.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "createSend": { "message": "Neues Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -5068,19 +5148,15 @@ "message": "Send löschen", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, - "deleteSendConfirmation": { - "message": "Bist du sicher, dass du dieses Send löschen möchtest?", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "whatTypeOfSend": { - "message": "Welche Art von Send ist das?", + "deleteSendPermanentConfirmation": { + "message": "Bist du sicher, dass du dieses Send dauerhaft löschen möchtest?", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "deletionDate": { "message": "Löschdatum" }, - "deletionDateDesc": { - "message": "Das Send wird am angegebenen Datum zur angegebenen Uhrzeit dauerhaft gelöscht.", + "deletionDateDescV2": { + "message": "Das Send wird an diesem Datum dauerhaft gelöscht.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "expirationDate": { @@ -5093,21 +5169,6 @@ "maxAccessCount": { "message": "Maximale Zugriffsanzahl" }, - "maxAccessCountDesc": { - "message": "Falls aktiviert, können Benutzer nicht mehr auf dieses Send zugreifen, sobald die maximale Zugriffsanzahl erreicht ist.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "currentAccessCount": { - "message": "Aktuelle Zugriffsanzahl" - }, - "sendPasswordDesc": { - "message": "Optional ein Passwort verlangen, damit Benutzer auf dieses Send zugreifen können.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendNotesDesc": { - "message": "Private Notizen zu diesem Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "disabled": { "message": "Deaktiviert" }, @@ -5134,13 +5195,6 @@ "removePasswordConfirmation": { "message": "Bist du sicher, dass du das Passwort entfernen möchtest?" }, - "hideEmail": { - "message": "Meine E-Mail-Adresse vor den Empfängern ausblenden." - }, - "disableThisSend": { - "message": "Dieses Send deaktivieren, damit niemand darauf zugreifen kann.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "allSends": { "message": "Alle Sends" }, @@ -5151,6 +5205,9 @@ "pendingDeletion": { "message": "Ausstehende Löschung" }, + "hideTextByDefault": { + "message": "Text standardmäßig ausblenden" + }, "expired": { "message": "Abgelaufen" }, @@ -5372,13 +5429,6 @@ "message": "Benutzern nicht gestatten, ihre E-Mail-Adresse vor Empfängern zu verstecken, wenn sie ein Send erstellen oder bearbeiten.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, - "sendOptionsPolicyInEffect": { - "message": "Die folgenden Organisationsrichtlinien sind derzeit gültig:" - }, - "sendDisableHideEmailInEffect": { - "message": "Benutzer dürfen ihre E-Mail-Adresse beim Erstellen oder Bearbeiten eines Sends nicht vor den Empfängern verstecken.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "modifiedPolicyId": { "message": "Richtlinie $ID$ geändert.", "placeholders": { @@ -5478,27 +5528,6 @@ "personalOwnershipCheckboxDesc": { "message": "Persönliches Eigentum für Organisationsbenutzer deaktivieren" }, - "textHiddenByDefault": { - "message": "Beim Zugriff auf dieses Send den Text standardmäßig ausblenden", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendNameDesc": { - "message": "Ein eigener Name, um dieses Send zu beschreiben.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendTextDesc": { - "message": "Der Text, den du versenden möchtest." - }, - "sendFileDesc": { - "message": "Die Datei, die du versenden möchtest." - }, - "copySendLinkOnSave": { - "message": "Den Link zum Teilen dieses Sends beim Speichern in meine Zwischenablage kopieren." - }, - "sendLinkLabel": { - "message": "Send-Link", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "send": { "message": "Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -5647,12 +5676,21 @@ "dateParsingError": { "message": "Es gab einen Fehler beim Speichern deiner Lösch- und Verfallsdaten." }, + "hideYourEmail": { + "message": "Verberge deine E-Mail-Adresse vor Betrachtern." + }, "webAuthnFallbackMsg": { "message": "Um deine 2FA zu verifizieren, klicke bitte unten auf den Button." }, "webAuthnAuthenticate": { "message": "WebAuthn authentifizieren" }, + "readSecurityKey": { + "message": "Sicherheitsschlüssel auslesen" + }, + "awaitingSecurityKeyInteraction": { + "message": "Warte auf Sicherheitsschlüssel-Interaktion..." + }, "webAuthnNotSupported": { "message": "WebAuthn wird in diesem Browser nicht unterstützt." }, @@ -7199,6 +7237,12 @@ "duoRequiredByOrgForAccount": { "message": "Für dein Konto ist die DUO Zwei-Faktor-Authentifizierung erforderlich." }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Die Duo-Zwei-Faktor-Authentifizierung ist für dein Konto erforderlich. Folge den Schritten unten, um die Anmeldung abzuschließen." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Folge den Schritten unten, um die Anmeldung abzuschließen." + }, "launchDuo": { "message": "DUO starten" }, @@ -9793,9 +9837,15 @@ "learnMoreAboutApi": { "message": "Erfahre mehr über die API von Bitwarden" }, + "fileSend": { + "message": "Datei-Send" + }, "fileSends": { "message": "Datei-Sends" }, + "textSend": { + "message": "Text-Send" + }, "textSends": { "message": "Text-Sends" }, @@ -10029,10 +10079,6 @@ "message": "Sonderzeichen einschließen", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "addAttachment": { "message": "Anhang hinzufügen" }, @@ -10432,10 +10478,31 @@ "assignedExceedsAvailable": { "message": "Die zugewiesenen Plätze überschreiten die verfügbaren Plätze." }, + "changeAtRiskPassword": { + "message": "Gefährdetes Passwort ändern" + }, "removeUnlockWithPinPolicyTitle": { - "message": "Remove Unlock with PIN" + "message": "Entsperren mit PIN entfernen" }, "removeUnlockWithPinPolicyDesc": { - "message": "Do not allow members to unlock their account with a PIN." + "message": "Mitgliedern nicht erlauben, ihr Konto mit einer PIN zu entsperren." + }, + "limitedEventLogs": { + "message": "$PRODUCT_TYPE$-Abos haben keinen Zugriff auf echte Ereignisprotokolle", + "placeholders": { + "product_type": { + "content": "$1", + "example": "Teams" + } + } + }, + "upgradeForFullEvents": { + "message": "Erhalte vollen Zugriff auf Ereignisprotokolle von Organisationen durch ein Upgrade auf ein Teams- oder Enterprise-Abo." + }, + "upgradeEventLogTitle": { + "message": "Upgrade für echte Ereignisprotokolldaten" + }, + "upgradeEventLogMessage": { + "message": "Diese Ereignisse sind nur Beispiele und spiegeln keine realen Ereignisse in deiner Bitwarden-Organisation wider." } } diff --git a/apps/web/src/locales/el/messages.json b/apps/web/src/locales/el/messages.json index 6fc22e74103..2a5d2537a56 100644 --- a/apps/web/src/locales/el/messages.json +++ b/apps/web/src/locales/el/messages.json @@ -5,6 +5,9 @@ "criticalApplications": { "message": "Κρίσιμες εφαρμογές" }, + "noCriticalAppsAtRisk": { + "message": "No critical applications at risk" + }, "accessIntelligence": { "message": "Πληροφορίες Πρόσβασης" }, @@ -198,6 +201,9 @@ "notes": { "message": "Σημειώσεις" }, + "privateNote": { + "message": "Private note" + }, "note": { "message": "Σημείωση" }, @@ -474,7 +480,7 @@ "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums" }, "deleteFolderPermanently": { - "message": "Are you sure you want to permanently delete this folder?" + "message": "Είστε σίγουροι ότι θέλετε να διαγράψετε μόνιμα αυτόν το φάκελο;" }, "baseDomain": { "message": "Βασικός τομέας", @@ -1026,6 +1032,9 @@ "no": { "message": "Όχι" }, + "location": { + "message": "Location" + }, "loginOrCreateNewAccount": { "message": "Συνδεθείτε ή δημιουργήστε νέο λογαριασμό για να αποκτήσετε πρόσβαση στο vault σας." }, @@ -1161,14 +1170,23 @@ "logInToBitwarden": { "message": "Log in to Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "Enter the code sent to your email" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Enter the code from your authenticator app" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Press your YubiKey to authenticate" + }, "authenticationTimeout": { "message": "Authentication timeout" }, "authenticationSessionTimedOut": { "message": "The authentication session timed out. Please restart the login process." }, - "verifyIdentity": { - "message": "Επαληθεύστε την ταυτότητά σας" + "verifyYourIdentity": { + "message": "Verify your Identity" }, "weDontRecognizeThisDevice": { "message": "We don't recognize this device. Enter the code sent to your email to verify your identity." @@ -1443,12 +1461,22 @@ "rememberMe": { "message": "Να με θυμάσαι" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Don't ask again on this device for 30 days" + }, "sendVerificationCodeEmailAgain": { "message": "Αποστολή email κωδικού επαλήθευσης ξανά" }, "useAnotherTwoStepMethod": { "message": "Χρήση άλλης μεθόδου δύο παραγόντων" }, + "selectAnotherMethod": { + "message": "Select another method", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Use your recovery code" + }, "insertYubiKey": { "message": "Τοποθετήστε το YubiKey στη θύρα USB του υπολογιστή σας και έπειτα πατήστε το κουμπί του." }, @@ -1467,6 +1495,9 @@ "twoStepOptions": { "message": "Επιλογές σύνδεσης δύο παραγόντων" }, + "selectTwoStepLoginMethod": { + "message": "Select two-step login method" + }, "recoveryCodeDesc": { "message": "Έχετε χάσει την πρόσβαση σε όλους τους παρόχους δύο παραγόντων; Χρησιμοποιήστε τον κωδικό ανάκτησης για να απενεργοποιήσετε όλους τους παρόχους δύο παραγόντων από το λογαριασμό σας." }, @@ -1509,6 +1540,9 @@ "webAuthnMigrated": { "message": "(Μετεγκατάσταση από το FIDO)" }, + "openInNewTab": { + "message": "Open in new tab" + }, "emailTitle": { "message": "Email" }, @@ -2224,6 +2258,9 @@ "revokeAccess": { "message": "Ανάκληση πρόσβασης" }, + "revoke": { + "message": "Revoke" + }, "twoStepLoginProviderEnabled": { "message": "Ο πάροχος σύνδεσης δύο βημάτων του λογαριασμού σας, είναι ενεργοποιημένος." }, @@ -4081,6 +4118,12 @@ "updateBrowserDesc": { "message": "Χρησιμοποιείτε ένα μη υποστηριζόμενο browser. Το web vault ενδέχεται να μην λειτουργεί σωστά." }, + "youHaveAPendingLoginRequest": { + "message": "You have a pending login request from another device." + }, + "reviewLoginRequest": { + "message": "Review login request" + }, "freeTrialEndPromptCount": { "message": "Your free trial ends in $COUNT$ days.", "placeholders": { @@ -4758,6 +4801,15 @@ "masterPassPolicyDesc": { "message": "Ορίστε ελάχιστες απαιτήσεις, για ισχύ του κύριου κωδικού." }, + "passwordStrengthScore": { + "message": "Password strength score $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "twoStepLoginPolicyTitle": { "message": "Απαίτηση για σύνδεση δύο βημάτων" }, @@ -5038,12 +5090,40 @@ "requireSsoExemption": { "message": "Οι κάτοχοι και οι διαχειριστές του οργανισμού εξαιρούνται από την εφαρμογή αυτής της πολιτικής." }, + "limitSendViews": { + "message": "Limit views" + }, + "limitSendViewsHint": { + "message": "No one can view this Send after the limit is reached.", + "description": "Displayed under the limit views field on Send" + }, + "limitSendViewsCount": { + "message": "$ACCESSCOUNT$ views left", + "description": "Displayed under the limit views field on Send", + "placeholders": { + "accessCount": { + "content": "$1", + "example": "2" + } + } + }, + "sendDetails": { + "message": "Send details", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendTypeTextToShare": { + "message": "Text to share" + }, "sendTypeFile": { "message": "Αρχείο" }, "sendTypeText": { "message": "Κείμενο" }, + "sendPasswordDescV3": { + "message": "Add an optional password for recipients to access this Send.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "createSend": { "message": "Δημιουργία Νέου Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -5068,19 +5148,15 @@ "message": "Διαγραφή Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, - "deleteSendConfirmation": { - "message": "Είστε βέβαιοι ότι θέλετε να διαγράψετε το Send;", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "whatTypeOfSend": { - "message": "Τι είδους Send είναι αυτό;", + "deleteSendPermanentConfirmation": { + "message": "Are you sure you want to permanently delete this Send?", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "deletionDate": { "message": "Ημερομηνία διαγραφής" }, - "deletionDateDesc": { - "message": "Το Send θα διαγραφεί οριστικά την καθορισμένη ημερομηνία και ώρα.", + "deletionDateDescV2": { + "message": "The Send will be permanently deleted on this date.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "expirationDate": { @@ -5093,21 +5169,6 @@ "maxAccessCount": { "message": "Μέγιστος Αριθμός Πρόσβασης" }, - "maxAccessCountDesc": { - "message": "Εάν οριστεί, οι χρήστες δεν θα μπορούν πλέον να έχουν πρόσβαση σε αυτό το send μόλις επιτευχθεί ο μέγιστος αριθμός πρόσβασης.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "currentAccessCount": { - "message": "Τρέχων Αριθμός Πρόσβασης" - }, - "sendPasswordDesc": { - "message": "Προαιρετικά απαιτείται κωδικός πρόσβασης για τους χρήστες για να έχουν πρόσβαση σε αυτό το Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendNotesDesc": { - "message": "Ιδιωτικές σημειώσεις σχετικά με αυτό το Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "disabled": { "message": "Απενεργοποιημένο" }, @@ -5134,13 +5195,6 @@ "removePasswordConfirmation": { "message": "Είστε βέβαιοι ότι θέλετε να καταργήσετε τον κωδικό πρόσβασης;" }, - "hideEmail": { - "message": "Απόκρυψη της διεύθυνσης email μου από τους παραλήπτες." - }, - "disableThisSend": { - "message": "Απενεργοποιήστε αυτό το Send έτσι ώστε κανείς να μην μπορεί να έχει πρόσβαση σε αυτό.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "allSends": { "message": "Όλα τα Sends" }, @@ -5151,6 +5205,9 @@ "pendingDeletion": { "message": "Εκκρεμεί διαγραφή" }, + "hideTextByDefault": { + "message": "Hide text by default" + }, "expired": { "message": "Έληξε" }, @@ -5372,13 +5429,6 @@ "message": "Μην επιτρέπετε στους χρήστες να αποκρύψουν τη διεύθυνση email τους από τους παραλήπτες κατά τη δημιουργία ή την επεξεργασία ενός send.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, - "sendOptionsPolicyInEffect": { - "message": "Οι ακόλουθες οργανωτικές πολιτικές εφαρμόζονται επί του παρόντος:" - }, - "sendDisableHideEmailInEffect": { - "message": "Οι χρήστες δεν επιτρέπεται να αποκρύψουν τη διεύθυνση email τους από τους παραλήπτες κατά τη δημιουργία ή την επεξεργασία ενός send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "modifiedPolicyId": { "message": "Τροποποιημένη πολιτική $ID$.", "placeholders": { @@ -5478,27 +5528,6 @@ "personalOwnershipCheckboxDesc": { "message": "Απενεργοποίηση προσωπικής ιδιοκτησίας για χρήστες οργανισμού" }, - "textHiddenByDefault": { - "message": "Κατά την πρόσβαση στην αποστολή, απόκρυψη του κειμένου από προεπιλογή", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendNameDesc": { - "message": "Ένα φιλικό όνομα για την περιγραφή αυτού του Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendTextDesc": { - "message": "Το κείμενο που θέλετε να στείλετε." - }, - "sendFileDesc": { - "message": "Το αρχείο που θέλετε να στείλετε." - }, - "copySendLinkOnSave": { - "message": "Αντιγράψτε το σύνδεσμο, για να μοιραστείτε αυτό το Send στο πρόχειρο μου, κατά την αποθήκευση." - }, - "sendLinkLabel": { - "message": "Σύνδεσμος Send", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "send": { "message": "Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -5647,12 +5676,21 @@ "dateParsingError": { "message": "Παρουσιάστηκε σφάλμα κατά την αποθήκευση των ημερομηνιών διαγραφής και λήξης." }, + "hideYourEmail": { + "message": "Hide your email address from viewers." + }, "webAuthnFallbackMsg": { "message": "Για να επαληθεύσετε τον 2FA σας παρακαλώ κάντε κλικ στο παρακάτω κουμπί." }, "webAuthnAuthenticate": { "message": "Ταυτοποίηση WebAutn" }, + "readSecurityKey": { + "message": "Read security key" + }, + "awaitingSecurityKeyInteraction": { + "message": "Awaiting security key interaction..." + }, "webAuthnNotSupported": { "message": "Το WebAuthn δεν υποστηρίζεται σε αυτό το πρόγραμμα περιήγησης." }, @@ -7199,6 +7237,12 @@ "duoRequiredByOrgForAccount": { "message": "Duo two-step login is required for your account." }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Duo two-step login is required for your account. Follow the steps below to finish logging in." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Follow the steps below to finish logging in." + }, "launchDuo": { "message": "Εκκίνηση Duo" }, @@ -9793,9 +9837,15 @@ "learnMoreAboutApi": { "message": "Μάθετε περισσότερα για το API του Bitwarden" }, + "fileSend": { + "message": "File Send" + }, "fileSends": { "message": "Send αρχείων" }, + "textSend": { + "message": "Text Send" + }, "textSends": { "message": "Send κειμένων" }, @@ -10029,10 +10079,6 @@ "message": "Include special characters", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "addAttachment": { "message": "Προσθήκη συνημμένου" }, @@ -10432,10 +10478,31 @@ "assignedExceedsAvailable": { "message": "Assigned seats exceed available seats." }, + "changeAtRiskPassword": { + "message": "Change at-risk password" + }, "removeUnlockWithPinPolicyTitle": { "message": "Remove Unlock with PIN" }, "removeUnlockWithPinPolicyDesc": { "message": "Do not allow members to unlock their account with a PIN." + }, + "limitedEventLogs": { + "message": "$PRODUCT_TYPE$ plans do not have access to real event logs", + "placeholders": { + "product_type": { + "content": "$1", + "example": "Teams" + } + } + }, + "upgradeForFullEvents": { + "message": "Get full access to organization event logs by upgrading to a Teams or Enterprise plan." + }, + "upgradeEventLogTitle": { + "message": "Upgrade for real event log data" + }, + "upgradeEventLogMessage": { + "message": "These events are examples only and do not reflect real events within your Bitwarden organization." } } diff --git a/apps/web/src/locales/en/messages.json b/apps/web/src/locales/en/messages.json index b6fb8279a72..229cca65ae5 100644 --- a/apps/web/src/locales/en/messages.json +++ b/apps/web/src/locales/en/messages.json @@ -5,6 +5,9 @@ "criticalApplications": { "message": "Critical applications" }, + "noCriticalAppsAtRisk":{ + "message": "No critical applications at risk" + }, "accessIntelligence": { "message": "Access Intelligence" }, @@ -219,6 +222,9 @@ "notes": { "message": "Notes" }, + "privateNote": { + "message": "Private note" + }, "note": { "message": "Note" }, @@ -1047,6 +1053,9 @@ "no": { "message": "No" }, + "location": { + "message": "Location" + }, "loginOrCreateNewAccount": { "message": "Log in or create a new account to access your secure vault." }, @@ -1197,7 +1206,7 @@ "authenticationSessionTimedOut": { "message": "The authentication session timed out. Please restart the login process." }, - "verifyIdentity": { + "verifyYourIdentity": { "message": "Verify your Identity" }, "weDontRecognizeThisDevice": { @@ -1488,7 +1497,7 @@ }, "useYourRecoveryCode": { "message": "Use your recovery code" - }, + }, "insertYubiKey": { "message": "Insert your YubiKey into your computer's USB port, then touch its button." }, @@ -2270,6 +2279,9 @@ "revokeAccess": { "message": "Revoke access" }, + "revoke": { + "message": "Revoke" + }, "twoStepLoginProviderEnabled": { "message": "This two-step login provider is active on your account." }, @@ -4127,6 +4139,12 @@ "updateBrowserDesc": { "message": "You are using an unsupported web browser. The web vault may not function properly." }, + "youHaveAPendingLoginRequest": { + "message": "You have a pending login request from another device." + }, + "reviewLoginRequest": { + "message": "Review login request" + }, "freeTrialEndPromptCount": { "message": "Your free trial ends in $COUNT$ days.", "placeholders": { @@ -5093,12 +5111,40 @@ "requireSsoExemption": { "message": "Organization owners and admins are exempt from this policy's enforcement." }, + "limitSendViews": { + "message": "Limit views" + }, + "limitSendViewsHint": { + "message": "No one can view this Send after the limit is reached.", + "description": "Displayed under the limit views field on Send" + }, + "limitSendViewsCount": { + "message": "$ACCESSCOUNT$ views left", + "description": "Displayed under the limit views field on Send", + "placeholders": { + "accessCount": { + "content": "$1", + "example": "2" + } + } + }, + "sendDetails": { + "message": "Send details", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendTypeTextToShare": { + "message": "Text to share" + }, "sendTypeFile": { "message": "File" }, "sendTypeText": { "message": "Text" }, + "sendPasswordDescV3": { + "message": "Add an optional password for recipients to access this Send.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "createSend": { "message": "New Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -5123,19 +5169,15 @@ "message": "Delete Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, - "deleteSendConfirmation": { - "message": "Are you sure you want to delete this Send?", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "whatTypeOfSend": { - "message": "What type of Send is this?", + "deleteSendPermanentConfirmation": { + "message": "Are you sure you want to permanently delete this Send?", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "deletionDate": { "message": "Deletion date" }, - "deletionDateDesc": { - "message": "The Send will be permanently deleted on the specified date and time.", + "deletionDateDescV2": { + "message": "The Send will be permanently deleted on this date.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "expirationDate": { @@ -5148,21 +5190,6 @@ "maxAccessCount": { "message": "Maximum access count" }, - "maxAccessCountDesc": { - "message": "If set, users will no longer be able to access this Send once the maximum access count is reached.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "currentAccessCount": { - "message": "Current access count" - }, - "sendPasswordDesc": { - "message": "Optionally require a password for users to access this Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendNotesDesc": { - "message": "Private notes about this Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "disabled": { "message": "Disabled" }, @@ -5189,13 +5216,6 @@ "removePasswordConfirmation": { "message": "Are you sure you want to remove the password?" }, - "hideEmail": { - "message": "Hide my email address from recipients." - }, - "disableThisSend": { - "message": "Deactivate this Send so that no one can access it.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "allSends": { "message": "All Sends" }, @@ -5206,6 +5226,9 @@ "pendingDeletion": { "message": "Pending deletion" }, + "hideTextByDefault": { + "message": "Hide text by default" + }, "expired": { "message": "Expired" }, @@ -5427,13 +5450,6 @@ "message": "Always show member’s email address with recipients when creating or editing a Send.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, - "sendOptionsPolicyInEffect": { - "message": "The following organization policies are currently in effect:" - }, - "sendDisableHideEmailInEffect": { - "message": "Users are not allowed to hide their email address from recipients when creating or editing a Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "modifiedPolicyId": { "message": "Modified policy $ID$.", "placeholders": { @@ -5533,27 +5549,6 @@ "personalOwnershipCheckboxDesc": { "message": "Remove individual ownership for organization users" }, - "textHiddenByDefault": { - "message": "When accessing the Send, hide the text by default", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendNameDesc": { - "message": "A friendly name to describe this Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendTextDesc": { - "message": "The text you want to Send." - }, - "sendFileDesc": { - "message": "The file you want to Send." - }, - "copySendLinkOnSave": { - "message": "Copy the link to share this Send to my clipboard upon save." - }, - "sendLinkLabel": { - "message": "Send link", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "send": { "message": "Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -5702,6 +5697,9 @@ "dateParsingError": { "message": "There was an error saving your deletion and expiration dates." }, + "hideYourEmail": { + "message": "Hide your email address from viewers." + }, "webAuthnFallbackMsg": { "message": "To verify your 2FA please click the button below." }, @@ -9863,9 +9861,15 @@ "learnMoreAboutApi": { "message": "Learn more about Bitwarden's API" }, + "fileSend": { + "message": "File Send" + }, "fileSends": { "message": "File Sends" }, + "textSend": { + "message": "Text Send" + }, "textSends": { "message": "Text Sends" }, @@ -10099,10 +10103,6 @@ "message": "Include special characters", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "addAttachment": { "message": "Add attachment" }, @@ -10502,10 +10502,31 @@ "assignedExceedsAvailable": { "message": "Assigned seats exceed available seats." }, + "changeAtRiskPassword": { + "message": "Change at-risk password" + }, "removeUnlockWithPinPolicyTitle": { "message": "Remove Unlock with PIN" }, "removeUnlockWithPinPolicyDesc": { "message": "Do not allow members to unlock their account with a PIN." + }, + "limitedEventLogs": { + "message": "$PRODUCT_TYPE$ plans do not have access to real event logs", + "placeholders": { + "product_type": { + "content": "$1", + "example": "Teams" + } + } + }, + "upgradeForFullEvents": { + "message": "Get full access to organization event logs by upgrading to a Teams or Enterprise plan." + }, + "upgradeEventLogTitle" : { + "message" : "Upgrade for real event log data" + }, + "upgradeEventLogMessage":{ + "message" : "These events are examples only and do not reflect real events within your Bitwarden organization." } } diff --git a/apps/web/src/locales/en_GB/messages.json b/apps/web/src/locales/en_GB/messages.json index ee68658c048..b3af62f35eb 100644 --- a/apps/web/src/locales/en_GB/messages.json +++ b/apps/web/src/locales/en_GB/messages.json @@ -5,6 +5,9 @@ "criticalApplications": { "message": "Critical applications" }, + "noCriticalAppsAtRisk": { + "message": "No critical applications at risk" + }, "accessIntelligence": { "message": "Access Intelligence" }, @@ -198,6 +201,9 @@ "notes": { "message": "Notes" }, + "privateNote": { + "message": "Private note" + }, "note": { "message": "Note" }, @@ -1026,6 +1032,9 @@ "no": { "message": "No" }, + "location": { + "message": "Location" + }, "loginOrCreateNewAccount": { "message": "Log in or create a new account to access your secure vault." }, @@ -1161,13 +1170,22 @@ "logInToBitwarden": { "message": "Log in to Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "Enter the code sent to your email" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Enter the code from your authenticator app" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Press your YubiKey to authenticate" + }, "authenticationTimeout": { "message": "Authentication timeout" }, "authenticationSessionTimedOut": { "message": "The authentication session timed out. Please restart the login process." }, - "verifyIdentity": { + "verifyYourIdentity": { "message": "Verify your Identity" }, "weDontRecognizeThisDevice": { @@ -1443,12 +1461,22 @@ "rememberMe": { "message": "Remember me" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Don't ask again on this device for 30 days" + }, "sendVerificationCodeEmailAgain": { "message": "Send verification code email again" }, "useAnotherTwoStepMethod": { "message": "Use another two-step login method" }, + "selectAnotherMethod": { + "message": "Select another method", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Use your recovery code" + }, "insertYubiKey": { "message": "Insert your YubiKey into your computer's USB port, then touch its button." }, @@ -1467,6 +1495,9 @@ "twoStepOptions": { "message": "Two-step login options" }, + "selectTwoStepLoginMethod": { + "message": "Select two-step login method" + }, "recoveryCodeDesc": { "message": "Lost access to all of your two-step login providers? Use your recovery code to turn off all two-step login providers from your account." }, @@ -1509,6 +1540,9 @@ "webAuthnMigrated": { "message": "(Migrated from FIDO)" }, + "openInNewTab": { + "message": "Open in new tab" + }, "emailTitle": { "message": "Email" }, @@ -2224,6 +2258,9 @@ "revokeAccess": { "message": "Revoke access" }, + "revoke": { + "message": "Revoke" + }, "twoStepLoginProviderEnabled": { "message": "This two-step login provider is active on your account." }, @@ -4081,6 +4118,12 @@ "updateBrowserDesc": { "message": "You are using an unsupported web browser. The web vault may not function properly." }, + "youHaveAPendingLoginRequest": { + "message": "You have a pending login request from another device." + }, + "reviewLoginRequest": { + "message": "Review login request" + }, "freeTrialEndPromptCount": { "message": "Your free trial ends in $COUNT$ days.", "placeholders": { @@ -4758,6 +4801,15 @@ "masterPassPolicyDesc": { "message": "Set requirements for master password strength." }, + "passwordStrengthScore": { + "message": "Password strength score $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "twoStepLoginPolicyTitle": { "message": "Require two-step login" }, @@ -5038,12 +5090,40 @@ "requireSsoExemption": { "message": "Organisation owners and admins are exempt from this policy's enforcement." }, + "limitSendViews": { + "message": "Limit views" + }, + "limitSendViewsHint": { + "message": "No one can view this Send after the limit is reached.", + "description": "Displayed under the limit views field on Send" + }, + "limitSendViewsCount": { + "message": "$ACCESSCOUNT$ views left", + "description": "Displayed under the limit views field on Send", + "placeholders": { + "accessCount": { + "content": "$1", + "example": "2" + } + } + }, + "sendDetails": { + "message": "Send details", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendTypeTextToShare": { + "message": "Text to share" + }, "sendTypeFile": { "message": "File" }, "sendTypeText": { "message": "Text" }, + "sendPasswordDescV3": { + "message": "Add an optional password for recipients to access this Send.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "createSend": { "message": "New Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -5068,19 +5148,15 @@ "message": "Delete send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, - "deleteSendConfirmation": { - "message": "Are you sure you want to delete this send?", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "whatTypeOfSend": { - "message": "What type of send is this?", + "deleteSendPermanentConfirmation": { + "message": "Are you sure you want to permanently delete this Send?", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "deletionDate": { "message": "Deletion date" }, - "deletionDateDesc": { - "message": "The Send will be permanently deleted on the specified date and time.", + "deletionDateDescV2": { + "message": "The Send will be permanently deleted on this date.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "expirationDate": { @@ -5093,21 +5169,6 @@ "maxAccessCount": { "message": "Maximum access count" }, - "maxAccessCountDesc": { - "message": "If set, users will no longer be able to access this Send once the maximum access count is reached.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "currentAccessCount": { - "message": "Current access count" - }, - "sendPasswordDesc": { - "message": "Optionally require a password for users to access this Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendNotesDesc": { - "message": "Private notes about this Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "disabled": { "message": "Disabled" }, @@ -5134,13 +5195,6 @@ "removePasswordConfirmation": { "message": "Are you sure you want to remove the password?" }, - "hideEmail": { - "message": "Hide my email address from recipients." - }, - "disableThisSend": { - "message": "Deactivate this Send so that no one can access it.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "allSends": { "message": "All sends" }, @@ -5151,6 +5205,9 @@ "pendingDeletion": { "message": "Pending deletion" }, + "hideTextByDefault": { + "message": "Hide text by default" + }, "expired": { "message": "Expired" }, @@ -5372,13 +5429,6 @@ "message": "Always show member’s email address with recipients when creating or editing a Send.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, - "sendOptionsPolicyInEffect": { - "message": "The following organisation policies are currently in effect:" - }, - "sendDisableHideEmailInEffect": { - "message": "Users are not allowed to hide their email address from recipients when creating or editing a Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "modifiedPolicyId": { "message": "Modified policy $ID$.", "placeholders": { @@ -5478,27 +5528,6 @@ "personalOwnershipCheckboxDesc": { "message": "Remove individual ownership for organisation users" }, - "textHiddenByDefault": { - "message": "When accessing the Send, hide the text by default", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendNameDesc": { - "message": "A friendly name to describe this Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendTextDesc": { - "message": "The text you want to Send." - }, - "sendFileDesc": { - "message": "The file you want to Send." - }, - "copySendLinkOnSave": { - "message": "Copy the link to share this Send to my clipboard upon save." - }, - "sendLinkLabel": { - "message": "Send link", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "send": { "message": "Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -5647,12 +5676,21 @@ "dateParsingError": { "message": "There was an error saving your deletion and expiration dates." }, + "hideYourEmail": { + "message": "Hide your email address from viewers." + }, "webAuthnFallbackMsg": { "message": "To verify your 2FA please click the button below." }, "webAuthnAuthenticate": { "message": "Authenticate WebAuthn" }, + "readSecurityKey": { + "message": "Read security key" + }, + "awaitingSecurityKeyInteraction": { + "message": "Awaiting security key interaction..." + }, "webAuthnNotSupported": { "message": "WebAuthn is not supported in this browser." }, @@ -7199,6 +7237,12 @@ "duoRequiredByOrgForAccount": { "message": "Duo two-step login is required for your account." }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Duo two-step login is required for your account. Follow the steps below to finish logging in." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Follow the steps below to finish logging in." + }, "launchDuo": { "message": "Launch Duo" }, @@ -9793,9 +9837,15 @@ "learnMoreAboutApi": { "message": "Learn more about Bitwarden's API" }, + "fileSend": { + "message": "File Send" + }, "fileSends": { "message": "File Sends" }, + "textSend": { + "message": "Text Send" + }, "textSends": { "message": "Text Sends" }, @@ -10029,10 +10079,6 @@ "message": "Include special characters", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "addAttachment": { "message": "Add attachment" }, @@ -10432,10 +10478,31 @@ "assignedExceedsAvailable": { "message": "Assigned seats exceed available seats." }, + "changeAtRiskPassword": { + "message": "Change at-risk password" + }, "removeUnlockWithPinPolicyTitle": { "message": "Remove Unlock with PIN" }, "removeUnlockWithPinPolicyDesc": { "message": "Do not allow members to unlock their account with a PIN." + }, + "limitedEventLogs": { + "message": "$PRODUCT_TYPE$ plans do not have access to real event logs", + "placeholders": { + "product_type": { + "content": "$1", + "example": "Teams" + } + } + }, + "upgradeForFullEvents": { + "message": "Get full access to organisation event logs by upgrading to a Teams or Enterprise plan." + }, + "upgradeEventLogTitle": { + "message": "Upgrade for real event log data" + }, + "upgradeEventLogMessage": { + "message": "These events are examples only and do not reflect real events within your Bitwarden organisation." } } diff --git a/apps/web/src/locales/en_IN/messages.json b/apps/web/src/locales/en_IN/messages.json index 81585d785af..6a84d1c9906 100644 --- a/apps/web/src/locales/en_IN/messages.json +++ b/apps/web/src/locales/en_IN/messages.json @@ -5,6 +5,9 @@ "criticalApplications": { "message": "Critical applications" }, + "noCriticalAppsAtRisk": { + "message": "No critical applications at risk" + }, "accessIntelligence": { "message": "Access Intelligence" }, @@ -198,6 +201,9 @@ "notes": { "message": "Notes" }, + "privateNote": { + "message": "Private note" + }, "note": { "message": "Note" }, @@ -1026,6 +1032,9 @@ "no": { "message": "No" }, + "location": { + "message": "Location" + }, "loginOrCreateNewAccount": { "message": "Log in or create a new account to access your secure vault." }, @@ -1161,13 +1170,22 @@ "logInToBitwarden": { "message": "Log in to Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "Enter the code sent to your email" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Enter the code from your authenticator app" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Press your YubiKey to authenticate" + }, "authenticationTimeout": { "message": "Authentication timeout" }, "authenticationSessionTimedOut": { "message": "The authentication session timed out. Please restart the login process." }, - "verifyIdentity": { + "verifyYourIdentity": { "message": "Verify your Identity" }, "weDontRecognizeThisDevice": { @@ -1443,12 +1461,22 @@ "rememberMe": { "message": "Remember me" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Don't ask again on this device for 30 days" + }, "sendVerificationCodeEmailAgain": { "message": "Send verification code email again" }, "useAnotherTwoStepMethod": { "message": "Use another two-step login method" }, + "selectAnotherMethod": { + "message": "Select another method", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Use your recovery code" + }, "insertYubiKey": { "message": "Insert your YubiKey into your computer's USB port, then touch its button." }, @@ -1467,6 +1495,9 @@ "twoStepOptions": { "message": "Two-step login options" }, + "selectTwoStepLoginMethod": { + "message": "Select two-step login method" + }, "recoveryCodeDesc": { "message": "Lost access to all of your two-factor providers? Use your recovery code to disable all two-factor providers from your account." }, @@ -1509,6 +1540,9 @@ "webAuthnMigrated": { "message": "(Migrated from FIDO)" }, + "openInNewTab": { + "message": "Open in new tab" + }, "emailTitle": { "message": "Email" }, @@ -2224,6 +2258,9 @@ "revokeAccess": { "message": "Revoke access" }, + "revoke": { + "message": "Revoke" + }, "twoStepLoginProviderEnabled": { "message": "This two-step login provider is enabled on your account." }, @@ -4081,6 +4118,12 @@ "updateBrowserDesc": { "message": "You are using an unsupported web browser. The web vault may not function properly." }, + "youHaveAPendingLoginRequest": { + "message": "You have a pending login request from another device." + }, + "reviewLoginRequest": { + "message": "Review login request" + }, "freeTrialEndPromptCount": { "message": "Your free trial ends in $COUNT$ days.", "placeholders": { @@ -4758,6 +4801,15 @@ "masterPassPolicyDesc": { "message": "Set minimum requirements for master password strength." }, + "passwordStrengthScore": { + "message": "Password strength score $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "twoStepLoginPolicyTitle": { "message": "Require two-step login" }, @@ -5038,12 +5090,40 @@ "requireSsoExemption": { "message": "Organization Owners and Administrators are exempt from this policy's enforcement." }, + "limitSendViews": { + "message": "Limit views" + }, + "limitSendViewsHint": { + "message": "No one can view this Send after the limit is reached.", + "description": "Displayed under the limit views field on Send" + }, + "limitSendViewsCount": { + "message": "$ACCESSCOUNT$ views left", + "description": "Displayed under the limit views field on Send", + "placeholders": { + "accessCount": { + "content": "$1", + "example": "2" + } + } + }, + "sendDetails": { + "message": "Send details", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendTypeTextToShare": { + "message": "Text to share" + }, "sendTypeFile": { "message": "File" }, "sendTypeText": { "message": "Text" }, + "sendPasswordDescV3": { + "message": "Add an optional password for recipients to access this Send.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "createSend": { "message": "Create New Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -5068,19 +5148,15 @@ "message": "Delete Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, - "deleteSendConfirmation": { - "message": "Are you sure you want to delete this Send?", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "whatTypeOfSend": { - "message": "What type of Send is this?", + "deleteSendPermanentConfirmation": { + "message": "Are you sure you want to permanently delete this Send?", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "deletionDate": { "message": "Deletion Date" }, - "deletionDateDesc": { - "message": "The Send will be permanently deleted on the specified date and time.", + "deletionDateDescV2": { + "message": "The Send will be permanently deleted on this date.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "expirationDate": { @@ -5093,21 +5169,6 @@ "maxAccessCount": { "message": "Maximum Access Count" }, - "maxAccessCountDesc": { - "message": "If set, users will no longer be able to access this send once the maximum access count is reached.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "currentAccessCount": { - "message": "Current Access Count" - }, - "sendPasswordDesc": { - "message": "Optionally require a password for users to access this Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendNotesDesc": { - "message": "Private notes about this Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "disabled": { "message": "Disabled" }, @@ -5134,13 +5195,6 @@ "removePasswordConfirmation": { "message": "Are you sure you want to remove the password?" }, - "hideEmail": { - "message": "Hide my email address from recipients." - }, - "disableThisSend": { - "message": "Disable this Send so that no one can access it.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "allSends": { "message": "All Sends" }, @@ -5151,6 +5205,9 @@ "pendingDeletion": { "message": "Pending deletion" }, + "hideTextByDefault": { + "message": "Hide text by default" + }, "expired": { "message": "Expired" }, @@ -5372,13 +5429,6 @@ "message": "Do not allow users to hide their email address from recipients when creating or editing a Send.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, - "sendOptionsPolicyInEffect": { - "message": "The following organisation policies are currently in effect:" - }, - "sendDisableHideEmailInEffect": { - "message": "Users are not allowed to hide their email address from recipients when creating or editing a Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "modifiedPolicyId": { "message": "Modified policy $ID$.", "placeholders": { @@ -5478,27 +5528,6 @@ "personalOwnershipCheckboxDesc": { "message": "Disable personal ownership for organization users" }, - "textHiddenByDefault": { - "message": "When accessing the Send, hide the text by default", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendNameDesc": { - "message": "A friendly name to describe this Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendTextDesc": { - "message": "The text you want to send." - }, - "sendFileDesc": { - "message": "The file you want to send." - }, - "copySendLinkOnSave": { - "message": "Copy the link to share this Send to my clipboard upon save." - }, - "sendLinkLabel": { - "message": "Send link", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "send": { "message": "Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -5647,12 +5676,21 @@ "dateParsingError": { "message": "There was an error saving your deletion and expiration dates." }, + "hideYourEmail": { + "message": "Hide your email address from viewers." + }, "webAuthnFallbackMsg": { "message": "To verify your 2FA please click the button below." }, "webAuthnAuthenticate": { "message": "Authenticate WebAuthn" }, + "readSecurityKey": { + "message": "Read security key" + }, + "awaitingSecurityKeyInteraction": { + "message": "Awaiting security key interaction..." + }, "webAuthnNotSupported": { "message": "WebAuthn is not supported in this browser." }, @@ -7199,6 +7237,12 @@ "duoRequiredByOrgForAccount": { "message": "Duo two-step login is required for your account." }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Duo two-step login is required for your account. Follow the steps below to finish logging in." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Follow the steps below to finish logging in." + }, "launchDuo": { "message": "Launch Duo" }, @@ -9793,9 +9837,15 @@ "learnMoreAboutApi": { "message": "Learn more about Bitwarden's API" }, + "fileSend": { + "message": "File Send" + }, "fileSends": { "message": "File Sends" }, + "textSend": { + "message": "Text Send" + }, "textSends": { "message": "Text Sends" }, @@ -10029,10 +10079,6 @@ "message": "Include special characters", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "addAttachment": { "message": "Add attachment" }, @@ -10432,10 +10478,31 @@ "assignedExceedsAvailable": { "message": "Assigned seats exceed available seats." }, + "changeAtRiskPassword": { + "message": "Change at-risk password" + }, "removeUnlockWithPinPolicyTitle": { "message": "Remove Unlock with PIN" }, "removeUnlockWithPinPolicyDesc": { "message": "Do not allow members to unlock their account with a PIN." + }, + "limitedEventLogs": { + "message": "$PRODUCT_TYPE$ plans do not have access to real event logs", + "placeholders": { + "product_type": { + "content": "$1", + "example": "Teams" + } + } + }, + "upgradeForFullEvents": { + "message": "Get full access to organisation event logs by upgrading to a Teams or Enterprise plan." + }, + "upgradeEventLogTitle": { + "message": "Upgrade for real event log data" + }, + "upgradeEventLogMessage": { + "message": "These events are examples only and do not reflect real events within your Bitwarden organisation." } } diff --git a/apps/web/src/locales/eo/messages.json b/apps/web/src/locales/eo/messages.json index 4cc9202b2cd..04329b08550 100644 --- a/apps/web/src/locales/eo/messages.json +++ b/apps/web/src/locales/eo/messages.json @@ -5,6 +5,9 @@ "criticalApplications": { "message": "Critical applications" }, + "noCriticalAppsAtRisk": { + "message": "No critical applications at risk" + }, "accessIntelligence": { "message": "Access Intelligence" }, @@ -198,6 +201,9 @@ "notes": { "message": "Notoj" }, + "privateNote": { + "message": "Private note" + }, "note": { "message": "Note" }, @@ -1026,6 +1032,9 @@ "no": { "message": "Ne" }, + "location": { + "message": "Location" + }, "loginOrCreateNewAccount": { "message": "Ensalutu aŭ kreu novan konton por aliri vian sekuran trezorejon." }, @@ -1161,13 +1170,22 @@ "logInToBitwarden": { "message": "Ensaluti en Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "Enter the code sent to your email" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Enter the code from your authenticator app" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Press your YubiKey to authenticate" + }, "authenticationTimeout": { "message": "Authentication timeout" }, "authenticationSessionTimedOut": { "message": "The authentication session timed out. Please restart the login process." }, - "verifyIdentity": { + "verifyYourIdentity": { "message": "Verify your Identity" }, "weDontRecognizeThisDevice": { @@ -1443,12 +1461,22 @@ "rememberMe": { "message": "Memoru min" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Don't ask again on this device for 30 days" + }, "sendVerificationCodeEmailAgain": { "message": "Sendu retpoŝtan kontrol-kodon denove" }, "useAnotherTwoStepMethod": { "message": "Uzu alian metodon de identigo en du-ŝtupa saluto" }, + "selectAnotherMethod": { + "message": "Select another method", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Use your recovery code" + }, "insertYubiKey": { "message": "Enmetu vian YubiKey en la USB-havenon de via komputilo, tiam tuŝu ĝian butonon." }, @@ -1467,6 +1495,9 @@ "twoStepOptions": { "message": "Elektebloj de la du-ŝtupa saluto" }, + "selectTwoStepLoginMethod": { + "message": "Select two-step login method" + }, "recoveryCodeDesc": { "message": "Ĉu vi perdis aliron al ĉiuj viaj du-faktoraj provizantoj? Uzu vian reakiran kodon por malŝalti ĉiujn du-faktorajn provizantojn de via konto." }, @@ -1509,6 +1540,9 @@ "webAuthnMigrated": { "message": "(Migrated from FIDO)" }, + "openInNewTab": { + "message": "Open in new tab" + }, "emailTitle": { "message": "Retpoŝto" }, @@ -2224,6 +2258,9 @@ "revokeAccess": { "message": "Revoke access" }, + "revoke": { + "message": "Revoke" + }, "twoStepLoginProviderEnabled": { "message": "Ĉi tiu du-ŝtupa ensaluta provizanto estas ebligita en via konto." }, @@ -4081,6 +4118,12 @@ "updateBrowserDesc": { "message": "Vi uzas nesubtenatan tTT-legilon. La ttt-volbo eble ne funkcias ĝuste." }, + "youHaveAPendingLoginRequest": { + "message": "You have a pending login request from another device." + }, + "reviewLoginRequest": { + "message": "Review login request" + }, "freeTrialEndPromptCount": { "message": "Your free trial ends in $COUNT$ days.", "placeholders": { @@ -4758,6 +4801,15 @@ "masterPassPolicyDesc": { "message": "Agordi minimumajn postulojn por majstra pasvorta forto." }, + "passwordStrengthScore": { + "message": "Password strength score $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "twoStepLoginPolicyTitle": { "message": "Devigu dufazan ensaluton" }, @@ -5038,12 +5090,40 @@ "requireSsoExemption": { "message": "Organizaj Posedantoj kaj Administrantoj estas esceptitaj de la apliko de ĉi tiu politiko." }, + "limitSendViews": { + "message": "Limit views" + }, + "limitSendViewsHint": { + "message": "No one can view this Send after the limit is reached.", + "description": "Displayed under the limit views field on Send" + }, + "limitSendViewsCount": { + "message": "$ACCESSCOUNT$ views left", + "description": "Displayed under the limit views field on Send", + "placeholders": { + "accessCount": { + "content": "$1", + "example": "2" + } + } + }, + "sendDetails": { + "message": "Send details", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendTypeTextToShare": { + "message": "Text to share" + }, "sendTypeFile": { "message": "Dosiero" }, "sendTypeText": { "message": "Teksto" }, + "sendPasswordDescV3": { + "message": "Add an optional password for recipients to access this Send.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "createSend": { "message": "Krei novan sendon", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -5068,19 +5148,15 @@ "message": "Forigi Sendu", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, - "deleteSendConfirmation": { - "message": "Ĉu vi certe volas forigi ĉi tiun Sendon?", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "whatTypeOfSend": { - "message": "Kia Sendo estas ĉi tio?", + "deleteSendPermanentConfirmation": { + "message": "Are you sure you want to permanently delete this Send?", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "deletionDate": { "message": "Dato de Forigo" }, - "deletionDateDesc": { - "message": "La Sendo estos definitive forigita en la specifaj dato kaj horo.", + "deletionDateDescV2": { + "message": "The Send will be permanently deleted on this date.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "expirationDate": { @@ -5093,21 +5169,6 @@ "maxAccessCount": { "message": "Maksimuma Aliro-Kalkulo" }, - "maxAccessCountDesc": { - "message": "Se agordite, uzantoj ne plu povos aliri ĉi tiun sendon post kiam la maksimuma alira kalkulo estos atingita.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "currentAccessCount": { - "message": "Nuna Alira Kalkulo" - }, - "sendPasswordDesc": { - "message": "Laŭvole postulas pasvorton por uzantoj aliri ĉi tiun Sendon.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendNotesDesc": { - "message": "Privataj notoj pri ĉi tiu Sendo.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "disabled": { "message": "Neebligita" }, @@ -5134,13 +5195,6 @@ "removePasswordConfirmation": { "message": "Ĉu vi certe volas forigi la pasvorton?" }, - "hideEmail": { - "message": "Hide my email address from recipients." - }, - "disableThisSend": { - "message": "Malŝalti ĉi tiun Sendon por ke neniu povu aliri ĝin.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "allSends": { "message": "Ĉiuj Sendoj" }, @@ -5151,6 +5205,9 @@ "pendingDeletion": { "message": "Atendanta forigo" }, + "hideTextByDefault": { + "message": "Hide text by default" + }, "expired": { "message": "Eksvalidiĝis" }, @@ -5372,13 +5429,6 @@ "message": "Always show member’s email address with recipients when creating or editing a Send.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, - "sendOptionsPolicyInEffect": { - "message": "The following organization policies are currently in effect:" - }, - "sendDisableHideEmailInEffect": { - "message": "Users are not allowed to hide their email address from recipients when creating or editing a Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "modifiedPolicyId": { "message": "Modified policy $ID$.", "placeholders": { @@ -5478,27 +5528,6 @@ "personalOwnershipCheckboxDesc": { "message": "Malebligi personan posedon por organizaj uzantoj" }, - "textHiddenByDefault": { - "message": "Alirante la Sendon, kaŝu la tekston defaŭlte", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendNameDesc": { - "message": "Amika nomo por priskribi ĉi tiun Sendon.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendTextDesc": { - "message": "La teksto, kiun vi volas sendi." - }, - "sendFileDesc": { - "message": "La dosiero, kiun vi volas sendi." - }, - "copySendLinkOnSave": { - "message": "Kopiu la ligon por dividi ĉi tion Sendu al mia tondujo post konservado." - }, - "sendLinkLabel": { - "message": "Sendi ligon", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "send": { "message": "Sendi", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -5647,12 +5676,21 @@ "dateParsingError": { "message": "Estis eraro konservante viajn forigajn kaj eksvalidajn datojn." }, + "hideYourEmail": { + "message": "Hide your email address from viewers." + }, "webAuthnFallbackMsg": { "message": "To verify your 2FA please click the button below." }, "webAuthnAuthenticate": { "message": "Authenticate WebAuthn" }, + "readSecurityKey": { + "message": "Read security key" + }, + "awaitingSecurityKeyInteraction": { + "message": "Awaiting security key interaction..." + }, "webAuthnNotSupported": { "message": "WebAuthn is not supported in this browser." }, @@ -7199,6 +7237,12 @@ "duoRequiredByOrgForAccount": { "message": "Duo two-step login is required for your account." }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Duo two-step login is required for your account. Follow the steps below to finish logging in." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Follow the steps below to finish logging in." + }, "launchDuo": { "message": "Launch Duo" }, @@ -9793,9 +9837,15 @@ "learnMoreAboutApi": { "message": "Learn more about Bitwarden's API" }, + "fileSend": { + "message": "File Send" + }, "fileSends": { "message": "File Sends" }, + "textSend": { + "message": "Text Send" + }, "textSends": { "message": "Text Sends" }, @@ -10029,10 +10079,6 @@ "message": "Include special characters", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "addAttachment": { "message": "Add attachment" }, @@ -10432,10 +10478,31 @@ "assignedExceedsAvailable": { "message": "Assigned seats exceed available seats." }, + "changeAtRiskPassword": { + "message": "Change at-risk password" + }, "removeUnlockWithPinPolicyTitle": { "message": "Remove Unlock with PIN" }, "removeUnlockWithPinPolicyDesc": { "message": "Do not allow members to unlock their account with a PIN." + }, + "limitedEventLogs": { + "message": "$PRODUCT_TYPE$ plans do not have access to real event logs", + "placeholders": { + "product_type": { + "content": "$1", + "example": "Teams" + } + } + }, + "upgradeForFullEvents": { + "message": "Get full access to organization event logs by upgrading to a Teams or Enterprise plan." + }, + "upgradeEventLogTitle": { + "message": "Upgrade for real event log data" + }, + "upgradeEventLogMessage": { + "message": "These events are examples only and do not reflect real events within your Bitwarden organization." } } diff --git a/apps/web/src/locales/es/messages.json b/apps/web/src/locales/es/messages.json index 4a74b101c78..985caba147b 100644 --- a/apps/web/src/locales/es/messages.json +++ b/apps/web/src/locales/es/messages.json @@ -5,6 +5,9 @@ "criticalApplications": { "message": "Aplicaciones críticas" }, + "noCriticalAppsAtRisk": { + "message": "No critical applications at risk" + }, "accessIntelligence": { "message": "Inteligencia de Acceso" }, @@ -198,6 +201,9 @@ "notes": { "message": "Notas" }, + "privateNote": { + "message": "Private note" + }, "note": { "message": "Nota" }, @@ -1026,6 +1032,9 @@ "no": { "message": "No" }, + "location": { + "message": "Location" + }, "loginOrCreateNewAccount": { "message": "Identifícate o crea una nueva cuenta para acceder a tu caja fuerte." }, @@ -1161,14 +1170,23 @@ "logInToBitwarden": { "message": "Log in to Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "Enter the code sent to your email" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Enter the code from your authenticator app" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Press your YubiKey to authenticate" + }, "authenticationTimeout": { "message": "Authentication timeout" }, "authenticationSessionTimedOut": { "message": "The authentication session timed out. Please restart the login process." }, - "verifyIdentity": { - "message": "Verifica tu identidad" + "verifyYourIdentity": { + "message": "Verify your Identity" }, "weDontRecognizeThisDevice": { "message": "We don't recognize this device. Enter the code sent to your email to verify your identity." @@ -1443,12 +1461,22 @@ "rememberMe": { "message": "Recordarme" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Don't ask again on this device for 30 days" + }, "sendVerificationCodeEmailAgain": { "message": "Reenviar código de verificación por correo electrónico" }, "useAnotherTwoStepMethod": { "message": "Utilizar otro método de autenticación en dos pasos" }, + "selectAnotherMethod": { + "message": "Select another method", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Use your recovery code" + }, "insertYubiKey": { "message": "Inserta tu YubiKey en el puerto USB de tu equipo y posteriormente pulsa su botón." }, @@ -1467,6 +1495,9 @@ "twoStepOptions": { "message": "Opciones de la autenticación en dos pasos" }, + "selectTwoStepLoginMethod": { + "message": "Select two-step login method" + }, "recoveryCodeDesc": { "message": "¿Has perdido el acceso a todos tus métodos de autenticación en dos pasos? Utiliza tu código de recuperación para deshabilitar todos los métodos de autenticación en dos pasos de tu cuenta." }, @@ -1509,6 +1540,9 @@ "webAuthnMigrated": { "message": "(Migrado desde FIDO)" }, + "openInNewTab": { + "message": "Open in new tab" + }, "emailTitle": { "message": "Correo electrónico" }, @@ -2224,6 +2258,9 @@ "revokeAccess": { "message": "Revocar el acceso" }, + "revoke": { + "message": "Revoke" + }, "twoStepLoginProviderEnabled": { "message": "Este proveedor de autenticación en dos pasos está habilitado para tu cuenta." }, @@ -4081,6 +4118,12 @@ "updateBrowserDesc": { "message": "Está utilizando un navegador web no compatible. Es posible que la caja fuerte web no funcione correctamente." }, + "youHaveAPendingLoginRequest": { + "message": "You have a pending login request from another device." + }, + "reviewLoginRequest": { + "message": "Review login request" + }, "freeTrialEndPromptCount": { "message": "Your free trial ends in $COUNT$ days.", "placeholders": { @@ -4758,6 +4801,15 @@ "masterPassPolicyDesc": { "message": "Establecer requisitos mínimos para la fortaleza de la contraseña maestra." }, + "passwordStrengthScore": { + "message": "Password strength score $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "twoStepLoginPolicyTitle": { "message": "Requiere inicio de sesión en dos pasos" }, @@ -5038,12 +5090,40 @@ "requireSsoExemption": { "message": "Los propietarios y administradores de la organización están exentos de la aplicación de esta política." }, + "limitSendViews": { + "message": "Limit views" + }, + "limitSendViewsHint": { + "message": "No one can view this Send after the limit is reached.", + "description": "Displayed under the limit views field on Send" + }, + "limitSendViewsCount": { + "message": "$ACCESSCOUNT$ views left", + "description": "Displayed under the limit views field on Send", + "placeholders": { + "accessCount": { + "content": "$1", + "example": "2" + } + } + }, + "sendDetails": { + "message": "Send details", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendTypeTextToShare": { + "message": "Text to share" + }, "sendTypeFile": { "message": "Archivo" }, "sendTypeText": { "message": "Texto" }, + "sendPasswordDescV3": { + "message": "Add an optional password for recipients to access this Send.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "createSend": { "message": "Crear nuevo Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -5068,19 +5148,15 @@ "message": "Eliminar Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, - "deleteSendConfirmation": { - "message": "¿Estás seguro de eliminar este Send?", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "whatTypeOfSend": { - "message": "¿Qué tipo de Send es este?", + "deleteSendPermanentConfirmation": { + "message": "Are you sure you want to permanently delete this Send?", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "deletionDate": { "message": "Fecha de eliminación" }, - "deletionDateDesc": { - "message": "El envío se eliminará permanentemente en la fecha y hora especificadas.", + "deletionDateDescV2": { + "message": "The Send will be permanently deleted on this date.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "expirationDate": { @@ -5093,21 +5169,6 @@ "maxAccessCount": { "message": "Número máximo de accesos" }, - "maxAccessCountDesc": { - "message": "Si se establece, los usuarios ya no podrán acceder a este envío una vez que se alcance el número máximo de accesos.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "currentAccessCount": { - "message": "Número de accesos actuales" - }, - "sendPasswordDesc": { - "message": "Opcionalmente se requiere una contraseña para que los usuarios accedan a este Envío.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendNotesDesc": { - "message": "Notas privadas sobre este Envío.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "disabled": { "message": "Deshabilitado" }, @@ -5134,13 +5195,6 @@ "removePasswordConfirmation": { "message": "¿Está seguro que desea eliminar la contraseña?" }, - "hideEmail": { - "message": "Ocultar mi dirección de correo electrónico a los destinatarios." - }, - "disableThisSend": { - "message": "Deshabilita este envío para que nadie pueda acceder a él.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "allSends": { "message": "Todos los Sends" }, @@ -5151,6 +5205,9 @@ "pendingDeletion": { "message": "Borrado pendiente" }, + "hideTextByDefault": { + "message": "Hide text by default" + }, "expired": { "message": "Caducado" }, @@ -5372,13 +5429,6 @@ "message": "No permitir a los usuarios ocultar su dirección de correo electrónico a los destinatarios al crear o editar un Send.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, - "sendOptionsPolicyInEffect": { - "message": "Las siguientes políticas de organización están actualmente en vigor:" - }, - "sendDisableHideEmailInEffect": { - "message": "Los usuarios no pueden ocultar su dirección de correo electrónico a los destinatarios al crear o editar un Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "modifiedPolicyId": { "message": "Política modificada $ID$.", "placeholders": { @@ -5478,27 +5528,6 @@ "personalOwnershipCheckboxDesc": { "message": "Desactivar la propiedad personal para los usuarios de la organización" }, - "textHiddenByDefault": { - "message": "Al acceder al Enviar, oculta el texto por defecto", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendNameDesc": { - "message": "Un nombre amigable para describir este Envío.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendTextDesc": { - "message": "El texto que desea enviar." - }, - "sendFileDesc": { - "message": "El archivo que desea enviar." - }, - "copySendLinkOnSave": { - "message": "Copia el enlace para compartir este envío a mi portapapeles al guardar." - }, - "sendLinkLabel": { - "message": "Enviar enlace", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "send": { "message": "Enviar", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -5647,12 +5676,21 @@ "dateParsingError": { "message": "Hubo un error al guardar las fechas de eliminación y caducidad." }, + "hideYourEmail": { + "message": "Hide your email address from viewers." + }, "webAuthnFallbackMsg": { "message": "Para verificar su 2FA por favor haga clic en el botón de abajo." }, "webAuthnAuthenticate": { "message": "Autenticar WebAuthn" }, + "readSecurityKey": { + "message": "Read security key" + }, + "awaitingSecurityKeyInteraction": { + "message": "Awaiting security key interaction..." + }, "webAuthnNotSupported": { "message": "WebAuthn no es compatible con este navegador." }, @@ -7199,6 +7237,12 @@ "duoRequiredByOrgForAccount": { "message": "Duo two-step login is required for your account." }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Duo two-step login is required for your account. Follow the steps below to finish logging in." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Follow the steps below to finish logging in." + }, "launchDuo": { "message": "Iniciar Duo" }, @@ -9793,9 +9837,15 @@ "learnMoreAboutApi": { "message": "Learn more about Bitwarden's API" }, + "fileSend": { + "message": "File Send" + }, "fileSends": { "message": "File Sends" }, + "textSend": { + "message": "Text Send" + }, "textSends": { "message": "Text Sends" }, @@ -10029,10 +10079,6 @@ "message": "Include special characters", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "addAttachment": { "message": "Add attachment" }, @@ -10432,10 +10478,31 @@ "assignedExceedsAvailable": { "message": "Assigned seats exceed available seats." }, + "changeAtRiskPassword": { + "message": "Change at-risk password" + }, "removeUnlockWithPinPolicyTitle": { "message": "Remove Unlock with PIN" }, "removeUnlockWithPinPolicyDesc": { "message": "Do not allow members to unlock their account with a PIN." + }, + "limitedEventLogs": { + "message": "$PRODUCT_TYPE$ plans do not have access to real event logs", + "placeholders": { + "product_type": { + "content": "$1", + "example": "Teams" + } + } + }, + "upgradeForFullEvents": { + "message": "Get full access to organization event logs by upgrading to a Teams or Enterprise plan." + }, + "upgradeEventLogTitle": { + "message": "Upgrade for real event log data" + }, + "upgradeEventLogMessage": { + "message": "These events are examples only and do not reflect real events within your Bitwarden organization." } } diff --git a/apps/web/src/locales/et/messages.json b/apps/web/src/locales/et/messages.json index 9a8d3d18281..741af41d14c 100644 --- a/apps/web/src/locales/et/messages.json +++ b/apps/web/src/locales/et/messages.json @@ -5,6 +5,9 @@ "criticalApplications": { "message": "Critical applications" }, + "noCriticalAppsAtRisk": { + "message": "No critical applications at risk" + }, "accessIntelligence": { "message": "Access Intelligence" }, @@ -198,6 +201,9 @@ "notes": { "message": "Märkmed" }, + "privateNote": { + "message": "Private note" + }, "note": { "message": "Märge" }, @@ -1026,6 +1032,9 @@ "no": { "message": "Ei" }, + "location": { + "message": "Location" + }, "loginOrCreateNewAccount": { "message": "Logi sisse või loo uus konto." }, @@ -1161,14 +1170,23 @@ "logInToBitwarden": { "message": "Log in to Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "Enter the code sent to your email" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Enter the code from your authenticator app" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Press your YubiKey to authenticate" + }, "authenticationTimeout": { "message": "Authentication timeout" }, "authenticationSessionTimedOut": { "message": "The authentication session timed out. Please restart the login process." }, - "verifyIdentity": { - "message": "Kinnitage oma Identiteet" + "verifyYourIdentity": { + "message": "Verify your Identity" }, "weDontRecognizeThisDevice": { "message": "We don't recognize this device. Enter the code sent to your email to verify your identity." @@ -1443,12 +1461,22 @@ "rememberMe": { "message": "Jäta mind meelde" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Don't ask again on this device for 30 days" + }, "sendVerificationCodeEmailAgain": { "message": "Saada e-postile uus kinnituskood" }, "useAnotherTwoStepMethod": { "message": "Kasuta teist kaheastmelist sisselogimise meetodit" }, + "selectAnotherMethod": { + "message": "Select another method", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Use your recovery code" + }, "insertYubiKey": { "message": "Sisesta oma YubiKey arvuti USB porti ja kliki sellele nupule." }, @@ -1467,6 +1495,9 @@ "twoStepOptions": { "message": "Kaheastmelise sisselogimise valikud" }, + "selectTwoStepLoginMethod": { + "message": "Select two-step login method" + }, "recoveryCodeDesc": { "message": "Sul ei ole ligipääsu ühelegi kaheastmelise kinnitamise teenusele? Kasuta taastamise koodi, et kaheastmeline kinnitamine oma kontol välja lülitada." }, @@ -1509,6 +1540,9 @@ "webAuthnMigrated": { "message": "(pärineb FIDO'lt)" }, + "openInNewTab": { + "message": "Open in new tab" + }, "emailTitle": { "message": "E-post" }, @@ -2224,6 +2258,9 @@ "revokeAccess": { "message": "Tühistada ligipääsu luba" }, + "revoke": { + "message": "Revoke" + }, "twoStepLoginProviderEnabled": { "message": "See kaheastmelise kinnitamise teenus on sinu kontol sisse lülitatud." }, @@ -4081,6 +4118,12 @@ "updateBrowserDesc": { "message": "Kasutad brauserit, mida ei toetata. Veebihoidla ei pruugi hästi töötada." }, + "youHaveAPendingLoginRequest": { + "message": "You have a pending login request from another device." + }, + "reviewLoginRequest": { + "message": "Review login request" + }, "freeTrialEndPromptCount": { "message": "Your free trial ends in $COUNT$ days.", "placeholders": { @@ -4758,6 +4801,15 @@ "masterPassPolicyDesc": { "message": "Määra minimaalsed ülemparooli tugevuse tingimused." }, + "passwordStrengthScore": { + "message": "Password strength score $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "twoStepLoginPolicyTitle": { "message": "Nõua kahe-astmelist sisselogimist" }, @@ -5038,12 +5090,40 @@ "requireSsoExemption": { "message": "Selle poliitika rakendamine ei puuduta Omanikke ega Administraatoreid." }, + "limitSendViews": { + "message": "Limit views" + }, + "limitSendViewsHint": { + "message": "No one can view this Send after the limit is reached.", + "description": "Displayed under the limit views field on Send" + }, + "limitSendViewsCount": { + "message": "$ACCESSCOUNT$ views left", + "description": "Displayed under the limit views field on Send", + "placeholders": { + "accessCount": { + "content": "$1", + "example": "2" + } + } + }, + "sendDetails": { + "message": "Send details", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendTypeTextToShare": { + "message": "Text to share" + }, "sendTypeFile": { "message": "Fail" }, "sendTypeText": { "message": "Tekst" }, + "sendPasswordDescV3": { + "message": "Add an optional password for recipients to access this Send.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "createSend": { "message": "Loo uus Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -5068,19 +5148,15 @@ "message": "Kustuta Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, - "deleteSendConfirmation": { - "message": "Soovid tõesti selle Sendi kustutada?", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "whatTypeOfSend": { - "message": "Mis tüüpi Send see on?", + "deleteSendPermanentConfirmation": { + "message": "Are you sure you want to permanently delete this Send?", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "deletionDate": { "message": "Kustutamise kuupäev" }, - "deletionDateDesc": { - "message": "Send kustutatakse määratud kuupäeval ja kellaajal jäädavalt.", + "deletionDateDescV2": { + "message": "The Send will be permanently deleted on this date.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "expirationDate": { @@ -5093,21 +5169,6 @@ "maxAccessCount": { "message": "Maksimaalne ligipääsude arv" }, - "maxAccessCountDesc": { - "message": "Selle valimisel ei saa kasutajad pärast maksimaalse ligipääsude arvu saavutamist sellele Sendile enam ligi.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "currentAccessCount": { - "message": "Hetkeline ligipääsude arv" - }, - "sendPasswordDesc": { - "message": "Soovi korral nõua parooli, millega Sendile ligi pääseb.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendNotesDesc": { - "message": "Privaatne märkus selle Sendi kohta.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "disabled": { "message": "Keelatud" }, @@ -5134,13 +5195,6 @@ "removePasswordConfirmation": { "message": "Soovid kindlasti selle parooli eemaldada?" }, - "hideEmail": { - "message": "Ära näita saajatele minu e-posti aadressi." - }, - "disableThisSend": { - "message": "Keela see Send, et keegi ei pääseks sellele ligi.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "allSends": { "message": "Kõik Sendid" }, @@ -5151,6 +5205,9 @@ "pendingDeletion": { "message": "Kustutamise ootel" }, + "hideTextByDefault": { + "message": "Hide text by default" + }, "expired": { "message": "Aegunud" }, @@ -5372,13 +5429,6 @@ "message": "Ära luba kasutajatel Sendi loomisel või muutmisel oma e-posti aadressi saajate eest peita.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, - "sendOptionsPolicyInEffect": { - "message": "Hetkel on kehtivad järgmised organisatsiooni poliitikad:" - }, - "sendDisableHideEmailInEffect": { - "message": "Kasutajatel pole lubatud Sendi loomisel või muutmisel oma e-posti aadressi saajate eest peita.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "modifiedPolicyId": { "message": "Muutis poliitikat $ID$.", "placeholders": { @@ -5478,27 +5528,6 @@ "personalOwnershipCheckboxDesc": { "message": "Keela organisatsiooni liikmetel paroolide salvestamine isiklikku Hoidlasse" }, - "textHiddenByDefault": { - "message": "Sendi avamisel peida tekst automaatselt", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendNameDesc": { - "message": "Sisesta Sendi nimi (kohustuslik).", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendTextDesc": { - "message": "Tekst, mida soovid saata." - }, - "sendFileDesc": { - "message": "Fail, mida soovid saata." - }, - "copySendLinkOnSave": { - "message": "Salvestamisel kopeeri Sendi jagamise link lõikepuhvrisse." - }, - "sendLinkLabel": { - "message": "Sendi link", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "send": { "message": "Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -5647,12 +5676,21 @@ "dateParsingError": { "message": "Kustutamis- ja aegumiskuupäevade salvestamisel ilmnes tõrge." }, + "hideYourEmail": { + "message": "Hide your email address from viewers." + }, "webAuthnFallbackMsg": { "message": "2FA kinnitamiseks kliki alloleval nupul." }, "webAuthnAuthenticate": { "message": "WebAuthn kinnitamine" }, + "readSecurityKey": { + "message": "Read security key" + }, + "awaitingSecurityKeyInteraction": { + "message": "Awaiting security key interaction..." + }, "webAuthnNotSupported": { "message": "Sinu brauser ei toeta WebAuthn'i." }, @@ -7199,6 +7237,12 @@ "duoRequiredByOrgForAccount": { "message": "Duo two-step login is required for your account." }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Duo two-step login is required for your account. Follow the steps below to finish logging in." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Follow the steps below to finish logging in." + }, "launchDuo": { "message": "Launch Duo" }, @@ -9793,9 +9837,15 @@ "learnMoreAboutApi": { "message": "Learn more about Bitwarden's API" }, + "fileSend": { + "message": "File Send" + }, "fileSends": { "message": "File Sends" }, + "textSend": { + "message": "Text Send" + }, "textSends": { "message": "Text Sends" }, @@ -10029,10 +10079,6 @@ "message": "Include special characters", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "addAttachment": { "message": "Add attachment" }, @@ -10432,10 +10478,31 @@ "assignedExceedsAvailable": { "message": "Assigned seats exceed available seats." }, + "changeAtRiskPassword": { + "message": "Change at-risk password" + }, "removeUnlockWithPinPolicyTitle": { "message": "Remove Unlock with PIN" }, "removeUnlockWithPinPolicyDesc": { "message": "Do not allow members to unlock their account with a PIN." + }, + "limitedEventLogs": { + "message": "$PRODUCT_TYPE$ plans do not have access to real event logs", + "placeholders": { + "product_type": { + "content": "$1", + "example": "Teams" + } + } + }, + "upgradeForFullEvents": { + "message": "Get full access to organization event logs by upgrading to a Teams or Enterprise plan." + }, + "upgradeEventLogTitle": { + "message": "Upgrade for real event log data" + }, + "upgradeEventLogMessage": { + "message": "These events are examples only and do not reflect real events within your Bitwarden organization." } } diff --git a/apps/web/src/locales/eu/messages.json b/apps/web/src/locales/eu/messages.json index 2efe0c0f629..7455c0ca652 100644 --- a/apps/web/src/locales/eu/messages.json +++ b/apps/web/src/locales/eu/messages.json @@ -5,6 +5,9 @@ "criticalApplications": { "message": "Critical applications" }, + "noCriticalAppsAtRisk": { + "message": "No critical applications at risk" + }, "accessIntelligence": { "message": "Access Intelligence" }, @@ -198,6 +201,9 @@ "notes": { "message": "Oharrak" }, + "privateNote": { + "message": "Private note" + }, "note": { "message": "Note" }, @@ -1026,6 +1032,9 @@ "no": { "message": "Ez" }, + "location": { + "message": "Location" + }, "loginOrCreateNewAccount": { "message": "Saioa hasi edo sortu kontu berri bat zure kutxa gotorrera sartzeko." }, @@ -1161,13 +1170,22 @@ "logInToBitwarden": { "message": "Log in to Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "Enter the code sent to your email" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Enter the code from your authenticator app" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Press your YubiKey to authenticate" + }, "authenticationTimeout": { "message": "Authentication timeout" }, "authenticationSessionTimedOut": { "message": "The authentication session timed out. Please restart the login process." }, - "verifyIdentity": { + "verifyYourIdentity": { "message": "Verify your Identity" }, "weDontRecognizeThisDevice": { @@ -1443,12 +1461,22 @@ "rememberMe": { "message": "Gogora nazazu" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Don't ask again on this device for 30 days" + }, "sendVerificationCodeEmailAgain": { "message": "Berbidali email bidezko egiaztatze-kodea" }, "useAnotherTwoStepMethod": { "message": "Erabili bi urratseko saio hasierarako beste modu bat" }, + "selectAnotherMethod": { + "message": "Select another method", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Use your recovery code" + }, "insertYubiKey": { "message": "Sartu zure YubiKey-a ordenagailuko USB atakan, ondoren, sakatu bere botoia." }, @@ -1467,6 +1495,9 @@ "twoStepOptions": { "message": "Bi urratseko saio hasieraren aukerak" }, + "selectTwoStepLoginMethod": { + "message": "Select two-step login method" + }, "recoveryCodeDesc": { "message": "Bi urratseko egiaztatzeko modu guztietarako sarbidea galdu duzu? Erabili zure berreskuratze-kodea zure kontuko bi urratseko egiaztatze hornitzaile guztiak desaktibatzeko." }, @@ -1509,6 +1540,9 @@ "webAuthnMigrated": { "message": "(FIDO-tik migratua)" }, + "openInNewTab": { + "message": "Open in new tab" + }, "emailTitle": { "message": "Emaila" }, @@ -2224,6 +2258,9 @@ "revokeAccess": { "message": "Sarbidea ezeztatu" }, + "revoke": { + "message": "Revoke" + }, "twoStepLoginProviderEnabled": { "message": "Zure kontuan gaituta dago bi urratseko saio hasieraren hornitzaile hori." }, @@ -4081,6 +4118,12 @@ "updateBrowserDesc": { "message": "Euskarririk gabeko web nabigatzailea erabiltzen ari zara. Baliteke webguneko kutxa gotorrak behar bezala ez funtzionatzea." }, + "youHaveAPendingLoginRequest": { + "message": "You have a pending login request from another device." + }, + "reviewLoginRequest": { + "message": "Review login request" + }, "freeTrialEndPromptCount": { "message": "Your free trial ends in $COUNT$ days.", "placeholders": { @@ -4758,6 +4801,15 @@ "masterPassPolicyDesc": { "message": "Ezarri pasahitz nagusiaren gutxieneko baldintzak." }, + "passwordStrengthScore": { + "message": "Password strength score $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "twoStepLoginPolicyTitle": { "message": "Bi urratseko saio hasiera beharrezkoa da" }, @@ -5038,12 +5090,40 @@ "requireSsoExemption": { "message": "Erakundearen jabeak eta administratzaileak politika horretatik salbuetsita daude." }, + "limitSendViews": { + "message": "Limit views" + }, + "limitSendViewsHint": { + "message": "No one can view this Send after the limit is reached.", + "description": "Displayed under the limit views field on Send" + }, + "limitSendViewsCount": { + "message": "$ACCESSCOUNT$ views left", + "description": "Displayed under the limit views field on Send", + "placeholders": { + "accessCount": { + "content": "$1", + "example": "2" + } + } + }, + "sendDetails": { + "message": "Send details", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendTypeTextToShare": { + "message": "Text to share" + }, "sendTypeFile": { "message": "Fitxategia" }, "sendTypeText": { "message": "Testua" }, + "sendPasswordDescV3": { + "message": "Add an optional password for recipients to access this Send.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "createSend": { "message": "Sortu Send berria", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -5068,19 +5148,15 @@ "message": "Ezabatu Send-a", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, - "deleteSendConfirmation": { - "message": "Ziur al zaude Send hau ezabatu nahi duzula?", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "whatTypeOfSend": { - "message": "Zein Send mota da hau?", + "deleteSendPermanentConfirmation": { + "message": "Are you sure you want to permanently delete this Send?", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "deletionDate": { "message": "Ezabatze data" }, - "deletionDateDesc": { - "message": "Send-a betiko ezabatuko da zehaztutako datan eta orduan.", + "deletionDateDescV2": { + "message": "The Send will be permanently deleted on this date.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "expirationDate": { @@ -5093,21 +5169,6 @@ "maxAccessCount": { "message": "Sarbide kopuru maximoa" }, - "maxAccessCountDesc": { - "message": "Hala ezartzen bada, erabiltzaileak ezin izango dira Send honetara sartu gehienezko sarbide kopurura iritsi ondoren.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "currentAccessCount": { - "message": "Uneko sarbide kopurua" - }, - "sendPasswordDesc": { - "message": "Nahi izanez gero, pasahitza eskatu erabiltzaileak bidalketa honetara sar daitezen.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendNotesDesc": { - "message": "Send honi buruzko ohar pribatuak.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "disabled": { "message": "Desgaitua" }, @@ -5134,13 +5195,6 @@ "removePasswordConfirmation": { "message": "Ziur al zaude pasahitz hau ezabatu nahi duzula?" }, - "hideEmail": { - "message": "Ezkutatu nire emaila hartzaileei." - }, - "disableThisSend": { - "message": "Desgaitu Send hau inor sar ez dadin.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "allSends": { "message": "Send guztiak" }, @@ -5151,6 +5205,9 @@ "pendingDeletion": { "message": "Ezabatzea egiteke" }, + "hideTextByDefault": { + "message": "Hide text by default" + }, "expired": { "message": "Iraungita" }, @@ -5372,13 +5429,6 @@ "message": "Send bat sortzean edo editatzean, erakutsi beti kidearen emaila hartzaileari.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, - "sendOptionsPolicyInEffect": { - "message": "Une honetan, erakunderako politika hauek aplikatzen dira:" - }, - "sendDisableHideEmailInEffect": { - "message": "Erabiltzaileek ezin diete hartzaileei beren emaila ezkutatu Send bat sortu edo editatzen dutenean.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "modifiedPolicyId": { "message": "$ID$ politika aldatua.", "placeholders": { @@ -5478,27 +5528,6 @@ "personalOwnershipCheckboxDesc": { "message": "Erakundearen erabiltzaileentzako jabetza pertsonala desgaitzea" }, - "textHiddenByDefault": { - "message": "Send-era sartzean, ezkutatu testua modu lehenetsian", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendNameDesc": { - "message": "Send hau deskribatzeko izena.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendTextDesc": { - "message": "Bidali nahi duzun testua." - }, - "sendFileDesc": { - "message": "Bidali nahi duzun fitxategia." - }, - "copySendLinkOnSave": { - "message": "Gordetzean kopiatu Send honen esteka arbelean, ondoren partekatzeko." - }, - "sendLinkLabel": { - "message": "Send esteka", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "send": { "message": "Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -5647,12 +5676,21 @@ "dateParsingError": { "message": "Akatsa gertatu da ezabatze eta iraungitze datak gordetzean." }, + "hideYourEmail": { + "message": "Hide your email address from viewers." + }, "webAuthnFallbackMsg": { "message": "Zure 2FA egiaztatzeko, klikatu beheko botoian." }, "webAuthnAuthenticate": { "message": "WebAuthn autentifikatu" }, + "readSecurityKey": { + "message": "Read security key" + }, + "awaitingSecurityKeyInteraction": { + "message": "Awaiting security key interaction..." + }, "webAuthnNotSupported": { "message": "WebAuthn ez da bateragarria nabigatzaile honetan." }, @@ -7199,6 +7237,12 @@ "duoRequiredByOrgForAccount": { "message": "Duo two-step login is required for your account." }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Duo two-step login is required for your account. Follow the steps below to finish logging in." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Follow the steps below to finish logging in." + }, "launchDuo": { "message": "Launch Duo" }, @@ -9793,9 +9837,15 @@ "learnMoreAboutApi": { "message": "Learn more about Bitwarden's API" }, + "fileSend": { + "message": "File Send" + }, "fileSends": { "message": "File Sends" }, + "textSend": { + "message": "Text Send" + }, "textSends": { "message": "Text Sends" }, @@ -10029,10 +10079,6 @@ "message": "Include special characters", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "addAttachment": { "message": "Add attachment" }, @@ -10432,10 +10478,31 @@ "assignedExceedsAvailable": { "message": "Assigned seats exceed available seats." }, + "changeAtRiskPassword": { + "message": "Change at-risk password" + }, "removeUnlockWithPinPolicyTitle": { "message": "Remove Unlock with PIN" }, "removeUnlockWithPinPolicyDesc": { "message": "Do not allow members to unlock their account with a PIN." + }, + "limitedEventLogs": { + "message": "$PRODUCT_TYPE$ plans do not have access to real event logs", + "placeholders": { + "product_type": { + "content": "$1", + "example": "Teams" + } + } + }, + "upgradeForFullEvents": { + "message": "Get full access to organization event logs by upgrading to a Teams or Enterprise plan." + }, + "upgradeEventLogTitle": { + "message": "Upgrade for real event log data" + }, + "upgradeEventLogMessage": { + "message": "These events are examples only and do not reflect real events within your Bitwarden organization." } } diff --git a/apps/web/src/locales/fa/messages.json b/apps/web/src/locales/fa/messages.json index 3aa355fccb0..f8427a42c32 100644 --- a/apps/web/src/locales/fa/messages.json +++ b/apps/web/src/locales/fa/messages.json @@ -5,6 +5,9 @@ "criticalApplications": { "message": "Critical applications" }, + "noCriticalAppsAtRisk": { + "message": "No critical applications at risk" + }, "accessIntelligence": { "message": "Access Intelligence" }, @@ -198,6 +201,9 @@ "notes": { "message": "یادداشت‌ها" }, + "privateNote": { + "message": "Private note" + }, "note": { "message": "Note" }, @@ -1026,6 +1032,9 @@ "no": { "message": "خیر" }, + "location": { + "message": "Location" + }, "loginOrCreateNewAccount": { "message": "وارد شوید یا یک حساب کاربری بسازید تا به گاوصندوق امن‌تان دسترسی یابید." }, @@ -1161,13 +1170,22 @@ "logInToBitwarden": { "message": "Log in to Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "Enter the code sent to your email" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Enter the code from your authenticator app" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Press your YubiKey to authenticate" + }, "authenticationTimeout": { "message": "Authentication timeout" }, "authenticationSessionTimedOut": { "message": "The authentication session timed out. Please restart the login process." }, - "verifyIdentity": { + "verifyYourIdentity": { "message": "Verify your Identity" }, "weDontRecognizeThisDevice": { @@ -1443,12 +1461,22 @@ "rememberMe": { "message": "مرا به خاطر بسپار" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Don't ask again on this device for 30 days" + }, "sendVerificationCodeEmailAgain": { "message": "ارسال دوباره ایمیل کد تأیید" }, "useAnotherTwoStepMethod": { "message": "استفاده از روش ورود دو مرحله‌ای دیگر" }, + "selectAnotherMethod": { + "message": "Select another method", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Use your recovery code" + }, "insertYubiKey": { "message": "YubiKey خود را وارد پورت USB رایانه کنید، بعد دکمه آن را بفشارید." }, @@ -1467,6 +1495,9 @@ "twoStepOptions": { "message": "گزینه‌های ورود دو مرحله‌ای" }, + "selectTwoStepLoginMethod": { + "message": "Select two-step login method" + }, "recoveryCodeDesc": { "message": "دسترسی به تمامی ارائه‌دهندگان دو مرحله‌ای را از دست داده‌اید؟ از کد بازیابی خود برای غیرفعال‌سازی ارائه‌دهندگان دو مرحله‌ای از حسابتان استفاده کنید." }, @@ -1509,6 +1540,9 @@ "webAuthnMigrated": { "message": "(مهاجرت از FIDO)" }, + "openInNewTab": { + "message": "Open in new tab" + }, "emailTitle": { "message": "ایمیل" }, @@ -2224,6 +2258,9 @@ "revokeAccess": { "message": "لغو دسترسی" }, + "revoke": { + "message": "Revoke" + }, "twoStepLoginProviderEnabled": { "message": "این ارائه دهنده ورود به سیستم دو مرحله ای در حساب شما فعال است." }, @@ -4081,6 +4118,12 @@ "updateBrowserDesc": { "message": "شما از یک مرورگر وب پشتیبانی نشده استفاده می‌کنید. گاوصندوق وب ممکن است به درستی کار نکند." }, + "youHaveAPendingLoginRequest": { + "message": "You have a pending login request from another device." + }, + "reviewLoginRequest": { + "message": "Review login request" + }, "freeTrialEndPromptCount": { "message": "Your free trial ends in $COUNT$ days.", "placeholders": { @@ -4758,6 +4801,15 @@ "masterPassPolicyDesc": { "message": "الزامات را برای قدرت کلمه عبور اصلی تنظیم کنید." }, + "passwordStrengthScore": { + "message": "Password strength score $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "twoStepLoginPolicyTitle": { "message": "فعال کردن ورود دو مرحله ای الزامیست" }, @@ -5038,12 +5090,40 @@ "requireSsoExemption": { "message": "مالکان و سرپرستان سازمان از اجرای این سیاست مستثنی هستند." }, + "limitSendViews": { + "message": "Limit views" + }, + "limitSendViewsHint": { + "message": "No one can view this Send after the limit is reached.", + "description": "Displayed under the limit views field on Send" + }, + "limitSendViewsCount": { + "message": "$ACCESSCOUNT$ views left", + "description": "Displayed under the limit views field on Send", + "placeholders": { + "accessCount": { + "content": "$1", + "example": "2" + } + } + }, + "sendDetails": { + "message": "Send details", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendTypeTextToShare": { + "message": "Text to share" + }, "sendTypeFile": { "message": "پرونده" }, "sendTypeText": { "message": "متن" }, + "sendPasswordDescV3": { + "message": "Add an optional password for recipients to access this Send.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "createSend": { "message": "ارسال جدید", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -5068,19 +5148,15 @@ "message": "حذف ارسال", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, - "deleteSendConfirmation": { - "message": "آیا مطمئن هستید که می‌خواهید این ارسال را حذف کنید؟", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "whatTypeOfSend": { - "message": "این چه نوع ارسالی است؟", + "deleteSendPermanentConfirmation": { + "message": "Are you sure you want to permanently delete this Send?", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "deletionDate": { "message": "تاریخ حذف" }, - "deletionDateDesc": { - "message": "ارسال در تاریخ و ساعت مشخص شده برای همیشه حذف خواهد شد.", + "deletionDateDescV2": { + "message": "The Send will be permanently deleted on this date.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "expirationDate": { @@ -5093,21 +5169,6 @@ "maxAccessCount": { "message": "تعداد دسترسی حداکثر" }, - "maxAccessCountDesc": { - "message": "در صورت تنظیم، با رسیدن به حداکثر تعداد دسترسی، کاربران دیگر نمی‌توانند به این ارسال دسترسی پیدا کنند.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "currentAccessCount": { - "message": "تعداد دسترسی فعلی" - }, - "sendPasswordDesc": { - "message": "به صورت اختیاری برای دسترسی کاربران به این ارسال به یک کلمه عبور نیاز دارید.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendNotesDesc": { - "message": "یادداشت های خصوصی در مورد این ارسال.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "disabled": { "message": "غیرفعال شد" }, @@ -5134,13 +5195,6 @@ "removePasswordConfirmation": { "message": "مطمئنید که می‌خواهید کلمه عبور حذف شود؟" }, - "hideEmail": { - "message": "نشانی ایمیلم را از گیرندگان مخفی کن." - }, - "disableThisSend": { - "message": "این ارسال را غیرفعال کنید تا کسی نتواند به آن دسترسی پیدا کند.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "allSends": { "message": "همه ارسال ها" }, @@ -5151,6 +5205,9 @@ "pendingDeletion": { "message": "در انتظار حذف" }, + "hideTextByDefault": { + "message": "Hide text by default" + }, "expired": { "message": "منقضی شده" }, @@ -5372,13 +5429,6 @@ "message": "هنگام ایجاد یا ویرایش ارسال، همیشه نشانی ایمیل اعضا را به گیرندگان نشان بده.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, - "sendOptionsPolicyInEffect": { - "message": "سیاست‌های سازمان زیر در حال حاضر در حال اجرا هستند:" - }, - "sendDisableHideEmailInEffect": { - "message": "کاربران مجاز به مخفی کردن نشانی ایمیل خود در هنگام ایجاد یا ویرایش ارسال از گیرندگان نیستند.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "modifiedPolicyId": { "message": "سیاست تغییر یافته $ID$.", "placeholders": { @@ -5478,27 +5528,6 @@ "personalOwnershipCheckboxDesc": { "message": "حذف مالکیت فردی برای کاربران سازمان" }, - "textHiddenByDefault": { - "message": "هنگام دسترسی به ارسال، متن را به طور پیش فرض پنهان کن", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendNameDesc": { - "message": "یک نام دوستانه برای توصیف این ارسال.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendTextDesc": { - "message": "متنی که می‌خواهید ارسال کنید." - }, - "sendFileDesc": { - "message": "پرونده ای که می‌خواهید ارسال کنید." - }, - "copySendLinkOnSave": { - "message": "این پیوند را برای به اشتراک گذاری ارسال بعد از ارسال کپی کن." - }, - "sendLinkLabel": { - "message": "ارسال پیوند", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "send": { "message": "ارسال", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -5647,12 +5676,21 @@ "dateParsingError": { "message": "هنگام ذخیره حذف و تاریخ انقضاء شما خطایی روی داد." }, + "hideYourEmail": { + "message": "Hide your email address from viewers." + }, "webAuthnFallbackMsg": { "message": "برای تأیید 2FA خود لطفاً روی دکمه زیر کلیک کنید." }, "webAuthnAuthenticate": { "message": "تأیید اعتبار در WebAuthn" }, + "readSecurityKey": { + "message": "Read security key" + }, + "awaitingSecurityKeyInteraction": { + "message": "Awaiting security key interaction..." + }, "webAuthnNotSupported": { "message": "WebAuthn در این مرورگر پشتیبانی نمی‌شود." }, @@ -7199,6 +7237,12 @@ "duoRequiredByOrgForAccount": { "message": "Duo two-step login is required for your account." }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Duo two-step login is required for your account. Follow the steps below to finish logging in." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Follow the steps below to finish logging in." + }, "launchDuo": { "message": "Launch Duo" }, @@ -9793,9 +9837,15 @@ "learnMoreAboutApi": { "message": "Learn more about Bitwarden's API" }, + "fileSend": { + "message": "File Send" + }, "fileSends": { "message": "File Sends" }, + "textSend": { + "message": "Text Send" + }, "textSends": { "message": "Text Sends" }, @@ -10029,10 +10079,6 @@ "message": "Include special characters", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "addAttachment": { "message": "Add attachment" }, @@ -10432,10 +10478,31 @@ "assignedExceedsAvailable": { "message": "Assigned seats exceed available seats." }, + "changeAtRiskPassword": { + "message": "Change at-risk password" + }, "removeUnlockWithPinPolicyTitle": { "message": "Remove Unlock with PIN" }, "removeUnlockWithPinPolicyDesc": { "message": "Do not allow members to unlock their account with a PIN." + }, + "limitedEventLogs": { + "message": "$PRODUCT_TYPE$ plans do not have access to real event logs", + "placeholders": { + "product_type": { + "content": "$1", + "example": "Teams" + } + } + }, + "upgradeForFullEvents": { + "message": "Get full access to organization event logs by upgrading to a Teams or Enterprise plan." + }, + "upgradeEventLogTitle": { + "message": "Upgrade for real event log data" + }, + "upgradeEventLogMessage": { + "message": "These events are examples only and do not reflect real events within your Bitwarden organization." } } diff --git a/apps/web/src/locales/fi/messages.json b/apps/web/src/locales/fi/messages.json index 7ed6320a08e..280226f0c6c 100644 --- a/apps/web/src/locales/fi/messages.json +++ b/apps/web/src/locales/fi/messages.json @@ -5,6 +5,9 @@ "criticalApplications": { "message": "Kriittiset sovellukset" }, + "noCriticalAppsAtRisk": { + "message": "No critical applications at risk" + }, "accessIntelligence": { "message": "Access Intelligence" }, @@ -198,6 +201,9 @@ "notes": { "message": "Merkinnät" }, + "privateNote": { + "message": "Private note" + }, "note": { "message": "Muistiinpano" }, @@ -1026,6 +1032,9 @@ "no": { "message": "Ei" }, + "location": { + "message": "Location" + }, "loginOrCreateNewAccount": { "message": "Käytä salattua holviasi kirjautumalla sisään tai luo uusi tili." }, @@ -1161,14 +1170,23 @@ "logInToBitwarden": { "message": "Kirjaudu Bitwardeniin" }, + "enterTheCodeSentToYourEmail": { + "message": "Enter the code sent to your email" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Enter the code from your authenticator app" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Tunnistaudu painamalla YubiKeytäsi" + }, "authenticationTimeout": { "message": "Todennuksen aikakatkaisu" }, "authenticationSessionTimedOut": { "message": "Todennusistunto aikakatkaistiin. Ole hyvä ja aloita kirjautumisprosessi uudelleen." }, - "verifyIdentity": { - "message": "Vahvista henkilöllisyytesi" + "verifyYourIdentity": { + "message": "Verify your Identity" }, "weDontRecognizeThisDevice": { "message": "We don't recognize this device. Enter the code sent to your email to verify your identity." @@ -1443,12 +1461,22 @@ "rememberMe": { "message": "Muista minut" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Don't ask again on this device for 30 days" + }, "sendVerificationCodeEmailAgain": { "message": "Lähetä todennuskoodi sähköpostitse uudelleen" }, "useAnotherTwoStepMethod": { "message": "Käytä vaihtoehtoista todennustapaa" }, + "selectAnotherMethod": { + "message": "Select another method", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Use your recovery code" + }, "insertYubiKey": { "message": "Kytke YubiKey-todennuslaitteesi tietokoneen USB-porttiin ja paina sen painiketta." }, @@ -1467,6 +1495,9 @@ "twoStepOptions": { "message": "Kaksivaiheisen kirjautumisen asetukset" }, + "selectTwoStepLoginMethod": { + "message": "Select two-step login method" + }, "recoveryCodeDesc": { "message": "Etkö voi käyttää kaksivaiheisen kirjautumisen todentajiasi? Poista kaikki määritetyt todentajat käytöstä palautuskoodillasi." }, @@ -1509,6 +1540,9 @@ "webAuthnMigrated": { "message": "(siirretty FIDO:sta)" }, + "openInNewTab": { + "message": "Open in new tab" + }, "emailTitle": { "message": "Sähköposti" }, @@ -2224,6 +2258,9 @@ "revokeAccess": { "message": "Mitätöi käyttöoikeudet" }, + "revoke": { + "message": "Revoke" + }, "twoStepLoginProviderEnabled": { "message": "Tämä kaksivaiheisen kirjautumisen todentaja on määritetty tilillesi." }, @@ -4081,6 +4118,12 @@ "updateBrowserDesc": { "message": "Käytät selainta, jota ei tueta. Verkkoholvi ei välttämättä toimi oikein." }, + "youHaveAPendingLoginRequest": { + "message": "You have a pending login request from another device." + }, + "reviewLoginRequest": { + "message": "Review login request" + }, "freeTrialEndPromptCount": { "message": "Ilmainen kokeilujakso päättyy $COUNT$ päivän kuluttua.", "placeholders": { @@ -4758,6 +4801,15 @@ "masterPassPolicyDesc": { "message": "Aseta pääsalasanan vahvuusvaatimukset." }, + "passwordStrengthScore": { + "message": "Password strength score $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "twoStepLoginPolicyTitle": { "message": "Vaadi kaksivaiheinen kirjautuminen" }, @@ -5038,12 +5090,40 @@ "requireSsoExemption": { "message": "Organisaation omistajat ja ylläpitäjät on vapautettu tämän käytännön piiristä." }, + "limitSendViews": { + "message": "Limit views" + }, + "limitSendViewsHint": { + "message": "No one can view this Send after the limit is reached.", + "description": "Displayed under the limit views field on Send" + }, + "limitSendViewsCount": { + "message": "$ACCESSCOUNT$ views left", + "description": "Displayed under the limit views field on Send", + "placeholders": { + "accessCount": { + "content": "$1", + "example": "2" + } + } + }, + "sendDetails": { + "message": "Send details", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendTypeTextToShare": { + "message": "Text to share" + }, "sendTypeFile": { "message": "Tiedosto" }, "sendTypeText": { "message": "Teksti" }, + "sendPasswordDescV3": { + "message": "Add an optional password for recipients to access this Send.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "createSend": { "message": "Uusi Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -5068,19 +5148,15 @@ "message": "Poista Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, - "deleteSendConfirmation": { - "message": "Haluatko varmasti poistaa Sendin?", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "whatTypeOfSend": { - "message": "Minkä tyyppinen Send tämä on?", + "deleteSendPermanentConfirmation": { + "message": "Are you sure you want to permanently delete this Send?", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "deletionDate": { "message": "Poistoajankohta" }, - "deletionDateDesc": { - "message": "Send poistuu pysyvästi määritettynä ajankohtana.", + "deletionDateDescV2": { + "message": "The Send will be permanently deleted on this date.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "expirationDate": { @@ -5093,21 +5169,6 @@ "maxAccessCount": { "message": "Käyttökertojen enimmäismäärä" }, - "maxAccessCountDesc": { - "message": "Jos määritetty, käyttäjät eivät voi avata Sendiä käyttökertojen enimmäismäärän täytyttyä.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "currentAccessCount": { - "message": "Käyttökertojen nykyinen määrä" - }, - "sendPasswordDesc": { - "message": "Halutessasi, vaadi käyttäjiä syöttämään salasana Sendin avaamiseksi.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendNotesDesc": { - "message": "Yksityisiä merkintöjä tästä Sendistä.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "disabled": { "message": "Poistettu käytöstä" }, @@ -5134,13 +5195,6 @@ "removePasswordConfirmation": { "message": "Haluatko varmasti poistaa salasanan?" }, - "hideEmail": { - "message": "Piilota sähköpostiosoitteeni vastaanottajilta." - }, - "disableThisSend": { - "message": "Poista Send käytöstä, jottei kukaan voi avata sitä.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "allSends": { "message": "Kaikki Sendit" }, @@ -5151,6 +5205,9 @@ "pendingDeletion": { "message": "Odottaa poistoa" }, + "hideTextByDefault": { + "message": "Hide text by default" + }, "expired": { "message": "Erääntynyt" }, @@ -5372,13 +5429,6 @@ "message": "Näytä jäsenen sähköpostiosoite aina vastaanottajien ohessa, kun Send luodaan tai sitä muokataan.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, - "sendOptionsPolicyInEffect": { - "message": "Seuraavat organisaatiokäytännöt ovat aktiivisia:" - }, - "sendDisableHideEmailInEffect": { - "message": "Käyttäjiltä on estetty sähköpostiosoitteen piilotus kun he luovat tai muokkaavat Sendiä.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "modifiedPolicyId": { "message": "Muokkasi käytäntöä \"$ID$\".", "placeholders": { @@ -5478,27 +5528,6 @@ "personalOwnershipCheckboxDesc": { "message": "Poista yksityisen omistajuuden valinta käytöstä organisaation käyttäjiltä" }, - "textHiddenByDefault": { - "message": "Piilota teksti oletuksena kun Send avataan", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendNameDesc": { - "message": "Kuvaava nimi Sendille.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendTextDesc": { - "message": "Teksti, jonka haluat lähettää." - }, - "sendFileDesc": { - "message": "Tiedosto, jonka haluat lähettää." - }, - "copySendLinkOnSave": { - "message": "Kopioi Sendin linkki leikepöydälle tallennettaessa." - }, - "sendLinkLabel": { - "message": "Send-linkki", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "send": { "message": "Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -5647,12 +5676,21 @@ "dateParsingError": { "message": "Tapahtui virhe tallennettaessa poisto- ja erääntymisajankohtia." }, + "hideYourEmail": { + "message": "Hide your email address from viewers." + }, "webAuthnFallbackMsg": { "message": "Vahvista kaksivaiheinen kirjautuminen (2FA) alla olevalla painikeella." }, "webAuthnAuthenticate": { "message": "WebAuthn-todennus" }, + "readSecurityKey": { + "message": "Read security key" + }, + "awaitingSecurityKeyInteraction": { + "message": "Awaiting security key interaction..." + }, "webAuthnNotSupported": { "message": "WebAuthn-todennusta ei tueta tässä selaimessa." }, @@ -7199,6 +7237,12 @@ "duoRequiredByOrgForAccount": { "message": "Tilillesi kirjautuminen vaatii Duo-vahvistuksen." }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Duo two-step login is required for your account. Follow the steps below to finish logging in." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Follow the steps below to finish logging in." + }, "launchDuo": { "message": "Avaa Duo" }, @@ -9793,9 +9837,15 @@ "learnMoreAboutApi": { "message": "Lisätietoja Bitwardenin API:sta" }, + "fileSend": { + "message": "File Send" + }, "fileSends": { "message": "Tiedosto-Sendit" }, + "textSend": { + "message": "Text Send" + }, "textSends": { "message": "Teksti-Sendit" }, @@ -10029,10 +10079,6 @@ "message": "Sisällytä erikoismerkkejä", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "addAttachment": { "message": "Lisää liite" }, @@ -10432,10 +10478,31 @@ "assignedExceedsAvailable": { "message": "Assigned seats exceed available seats." }, + "changeAtRiskPassword": { + "message": "Change at-risk password" + }, "removeUnlockWithPinPolicyTitle": { "message": "Remove Unlock with PIN" }, "removeUnlockWithPinPolicyDesc": { "message": "Do not allow members to unlock their account with a PIN." + }, + "limitedEventLogs": { + "message": "$PRODUCT_TYPE$ plans do not have access to real event logs", + "placeholders": { + "product_type": { + "content": "$1", + "example": "Teams" + } + } + }, + "upgradeForFullEvents": { + "message": "Get full access to organization event logs by upgrading to a Teams or Enterprise plan." + }, + "upgradeEventLogTitle": { + "message": "Upgrade for real event log data" + }, + "upgradeEventLogMessage": { + "message": "These events are examples only and do not reflect real events within your Bitwarden organization." } } diff --git a/apps/web/src/locales/fil/messages.json b/apps/web/src/locales/fil/messages.json index b9de65f5eb2..a07c2421d0e 100644 --- a/apps/web/src/locales/fil/messages.json +++ b/apps/web/src/locales/fil/messages.json @@ -5,6 +5,9 @@ "criticalApplications": { "message": "Critical applications" }, + "noCriticalAppsAtRisk": { + "message": "No critical applications at risk" + }, "accessIntelligence": { "message": "Access Intelligence" }, @@ -198,6 +201,9 @@ "notes": { "message": "Mga Tala" }, + "privateNote": { + "message": "Private note" + }, "note": { "message": "Note" }, @@ -1026,6 +1032,9 @@ "no": { "message": "Hindi" }, + "location": { + "message": "Location" + }, "loginOrCreateNewAccount": { "message": "Mag-log in o gumawa ng bagong account para ma-access ang secure vault mo." }, @@ -1161,13 +1170,22 @@ "logInToBitwarden": { "message": "Log in to Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "Enter the code sent to your email" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Enter the code from your authenticator app" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Press your YubiKey to authenticate" + }, "authenticationTimeout": { "message": "Authentication timeout" }, "authenticationSessionTimedOut": { "message": "The authentication session timed out. Please restart the login process." }, - "verifyIdentity": { + "verifyYourIdentity": { "message": "Verify your Identity" }, "weDontRecognizeThisDevice": { @@ -1443,12 +1461,22 @@ "rememberMe": { "message": "Tandaan ako" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Don't ask again on this device for 30 days" + }, "sendVerificationCodeEmailAgain": { "message": "Ipadala ulit ang email na naglalaman ng code pamberipika" }, "useAnotherTwoStepMethod": { "message": "Gumamit ng ibang paraan sa dalawang-hakbang na pag-log in" }, + "selectAnotherMethod": { + "message": "Select another method", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Use your recovery code" + }, "insertYubiKey": { "message": "Ipasok ang YubiKey mo sa USB port ng iyong computer, tapos pindutin ang buton nito." }, @@ -1467,6 +1495,9 @@ "twoStepOptions": { "message": "Mga opsyon para sa dalawang-hakbang na pag-log in" }, + "selectTwoStepLoginMethod": { + "message": "Select two-step login method" + }, "recoveryCodeDesc": { "message": "Nawalan ng access sa lahat ng provider mo ng dalawang-hakbang na pag-log in? Gamitin ang code pang-recover mo para patayin ang lahat ng mga provider ng dalawang-hakbang na pag-log in sa account mo." }, @@ -1509,6 +1540,9 @@ "webAuthnMigrated": { "message": "(Inilipat mula sa FIDO)" }, + "openInNewTab": { + "message": "Open in new tab" + }, "emailTitle": { "message": "Email" }, @@ -2224,6 +2258,9 @@ "revokeAccess": { "message": "Tanggalin ang access" }, + "revoke": { + "message": "Revoke" + }, "twoStepLoginProviderEnabled": { "message": "Aktibo ang provider na ito ng dalawang-hakbang na pag-log in sa account mo." }, @@ -4081,6 +4118,12 @@ "updateBrowserDesc": { "message": "Gumagamit ka ng isang hindi suportado na web browser. Ang web vault ay maaaring hindi gumana nang maayos." }, + "youHaveAPendingLoginRequest": { + "message": "You have a pending login request from another device." + }, + "reviewLoginRequest": { + "message": "Review login request" + }, "freeTrialEndPromptCount": { "message": "Your free trial ends in $COUNT$ days.", "placeholders": { @@ -4758,6 +4801,15 @@ "masterPassPolicyDesc": { "message": "Magtakda ng mga kinakailangan para sa lakas ng master password." }, + "passwordStrengthScore": { + "message": "Password strength score $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "twoStepLoginPolicyTitle": { "message": "Kailangan ng dalawang-hakbang na pag-login" }, @@ -5038,12 +5090,40 @@ "requireSsoExemption": { "message": "Ang mga may ari ng organisasyon at mga admin ay exempted mula sa pagpapatupad ng patakaran na ito." }, + "limitSendViews": { + "message": "Limit views" + }, + "limitSendViewsHint": { + "message": "No one can view this Send after the limit is reached.", + "description": "Displayed under the limit views field on Send" + }, + "limitSendViewsCount": { + "message": "$ACCESSCOUNT$ views left", + "description": "Displayed under the limit views field on Send", + "placeholders": { + "accessCount": { + "content": "$1", + "example": "2" + } + } + }, + "sendDetails": { + "message": "Send details", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendTypeTextToShare": { + "message": "Text to share" + }, "sendTypeFile": { "message": "Mag-file" }, "sendTypeText": { "message": "Teksto" }, + "sendPasswordDescV3": { + "message": "Add an optional password for recipients to access this Send.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "createSend": { "message": "Bagong Ipadala", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -5068,19 +5148,15 @@ "message": "I-delete ang Ipadala", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, - "deleteSendConfirmation": { - "message": "Sigurado ka bang gusto mo na i-delete ang Ipadala na ito?", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "whatTypeOfSend": { - "message": "Anong type ng Send ito", + "deleteSendPermanentConfirmation": { + "message": "Are you sure you want to permanently delete this Send?", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "deletionDate": { "message": "Petsa ng Pagtanggal" }, - "deletionDateDesc": { - "message": "Ang Ipadala ay tatanggalin nang permanente sa tinukoy na petsa at oras.", + "deletionDateDescV2": { + "message": "The Send will be permanently deleted on this date.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "expirationDate": { @@ -5093,21 +5169,6 @@ "maxAccessCount": { "message": "Maximum na bilang ng access" }, - "maxAccessCountDesc": { - "message": "Kung nakatakda, ang mga user ay hindi na maaaring ma-access ang Send na ito pagkatapos makarating sa maximum access count.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "currentAccessCount": { - "message": "Kasalukuyang access count" - }, - "sendPasswordDesc": { - "message": "Maipapayo na mag-require ng password para sa mga user na ma-access ang Send na ito.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendNotesDesc": { - "message": "Pribadong mga tala tungkol sa Send na ito.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "disabled": { "message": "Ipadala nai-delete" }, @@ -5134,13 +5195,6 @@ "removePasswordConfirmation": { "message": "Sigurado ka bang gusto mo na tanggalin ang password?" }, - "hideEmail": { - "message": "Itago ang aking email address mula sa mga tatanggap." - }, - "disableThisSend": { - "message": "Deactivate ang Send na ito para walang maka access dito.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "allSends": { "message": "Lahat ng Mga Padala" }, @@ -5151,6 +5205,9 @@ "pendingDeletion": { "message": "Nakabinbing pagbura" }, + "hideTextByDefault": { + "message": "Hide text by default" + }, "expired": { "message": "Paso na" }, @@ -5372,13 +5429,6 @@ "message": "Laging ipakita ang email address ng miyembro sa mga tatanggap kapag lumilikha o nag edit ng isang Ipadala.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, - "sendOptionsPolicyInEffect": { - "message": "Isang o higit pang mga patakaran ng organisasyon ay nakaapekto sa iyong mga pagpipilian sa Pagpadala." - }, - "sendDisableHideEmailInEffect": { - "message": "Hindi pinapayagan ang mga gumagamit na itago ang kanilang email address mula sa mga tatanggap kapag lumilikha o nag edit ng isang Ipadala.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "modifiedPolicyId": { "message": "Binagong patakaran $ID$.", "placeholders": { @@ -5478,27 +5528,6 @@ "personalOwnershipCheckboxDesc": { "message": "Alisin ang indibidwal na pagmamay ari para sa mga gumagamit ng organisasyon" }, - "textHiddenByDefault": { - "message": "Kapag na access ang Ipadala, itago ang teksto sa pamamagitan ng default", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendNameDesc": { - "message": "Isang friendly name upang ilarawan ang Ipadala na ito.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendTextDesc": { - "message": "Ang teksto na nais mong ipadala." - }, - "sendFileDesc": { - "message": "Ang file na gusto mong ipadala." - }, - "copySendLinkOnSave": { - "message": "Kopyahin ang link upang ibahagi ito Ipadala sa aking clipboard sa save." - }, - "sendLinkLabel": { - "message": "Magpadala ng link", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "send": { "message": "Ipadala", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -5647,12 +5676,21 @@ "dateParsingError": { "message": "Nagkaroon ng error sa pag-save ng iyong mga petsa ng pagbura at pagpaso." }, + "hideYourEmail": { + "message": "Hide your email address from viewers." + }, "webAuthnFallbackMsg": { "message": "Upang i verify ang iyong 2FA mangyaring i click ang pindutan sa ibaba." }, "webAuthnAuthenticate": { "message": "I-authenticate ang WebAuthn" }, + "readSecurityKey": { + "message": "Read security key" + }, + "awaitingSecurityKeyInteraction": { + "message": "Awaiting security key interaction..." + }, "webAuthnNotSupported": { "message": "Hindi suportado ang WebAuthn sa browser na ito." }, @@ -7199,6 +7237,12 @@ "duoRequiredByOrgForAccount": { "message": "Duo two-step login is required for your account." }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Duo two-step login is required for your account. Follow the steps below to finish logging in." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Follow the steps below to finish logging in." + }, "launchDuo": { "message": "Launch Duo" }, @@ -9793,9 +9837,15 @@ "learnMoreAboutApi": { "message": "Learn more about Bitwarden's API" }, + "fileSend": { + "message": "File Send" + }, "fileSends": { "message": "File Sends" }, + "textSend": { + "message": "Text Send" + }, "textSends": { "message": "Text Sends" }, @@ -10029,10 +10079,6 @@ "message": "Include special characters", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "addAttachment": { "message": "Add attachment" }, @@ -10432,10 +10478,31 @@ "assignedExceedsAvailable": { "message": "Assigned seats exceed available seats." }, + "changeAtRiskPassword": { + "message": "Change at-risk password" + }, "removeUnlockWithPinPolicyTitle": { "message": "Remove Unlock with PIN" }, "removeUnlockWithPinPolicyDesc": { "message": "Do not allow members to unlock their account with a PIN." + }, + "limitedEventLogs": { + "message": "$PRODUCT_TYPE$ plans do not have access to real event logs", + "placeholders": { + "product_type": { + "content": "$1", + "example": "Teams" + } + } + }, + "upgradeForFullEvents": { + "message": "Get full access to organization event logs by upgrading to a Teams or Enterprise plan." + }, + "upgradeEventLogTitle": { + "message": "Upgrade for real event log data" + }, + "upgradeEventLogMessage": { + "message": "These events are examples only and do not reflect real events within your Bitwarden organization." } } diff --git a/apps/web/src/locales/fr/messages.json b/apps/web/src/locales/fr/messages.json index 087e71ab674..fe1fd4bf238 100644 --- a/apps/web/src/locales/fr/messages.json +++ b/apps/web/src/locales/fr/messages.json @@ -5,6 +5,9 @@ "criticalApplications": { "message": "Applications critiques" }, + "noCriticalAppsAtRisk": { + "message": "Aucune application critique à risques" + }, "accessIntelligence": { "message": "Accéder à Intelligence" }, @@ -198,6 +201,9 @@ "notes": { "message": "Notes" }, + "privateNote": { + "message": "Note privée" + }, "note": { "message": "Note" }, @@ -1026,6 +1032,9 @@ "no": { "message": "Non" }, + "location": { + "message": "Localisation" + }, "loginOrCreateNewAccount": { "message": "Connectez-vous ou créez un nouveau compte pour accéder à votre coffre sécurisé." }, @@ -1161,14 +1170,23 @@ "logInToBitwarden": { "message": "Se connecter à Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "Entrez le code envoyé à votre adresse courriel" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Entrez le code de votre application d'authentification" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Appuyez sur votre YubiKey pour vous authentifier" + }, "authenticationTimeout": { "message": "Délai d'authentification dépassé" }, "authenticationSessionTimedOut": { "message": "La session d'authentification a expiré. Veuillez redémarrer le processus de connexion." }, - "verifyIdentity": { - "message": "Vérifiez votre Identité" + "verifyYourIdentity": { + "message": "Vérifiez votre identité" }, "weDontRecognizeThisDevice": { "message": "Nous ne reconnaissons pas cet appareil. Entrez le code envoyé à votre courriel pour vérifier votre identité." @@ -1443,12 +1461,22 @@ "rememberMe": { "message": "Se souvenir de moi" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Ne plus demander sur cet appareil pendant 30 jours" + }, "sendVerificationCodeEmailAgain": { "message": "Envoyer à nouveau le courriel de code de vérification" }, "useAnotherTwoStepMethod": { "message": "Utiliser une autre méthode d'authentification à deux facteurs" }, + "selectAnotherMethod": { + "message": "Sélectionnez une autre méthode", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Utilisez votre code de récupération" + }, "insertYubiKey": { "message": "Insérez votre YubiKey dans le port USB de votre ordinateur puis appuyez sur son bouton." }, @@ -1459,7 +1487,7 @@ "message": "Identifiant non disponible" }, "noTwoStepProviders": { - "message": "Ce compte dispose d'une authentification à deux facteurs de configurée, cependant, aucun des fournisseurs à deux facteurs configurés n'est pris en charge par ce navigateur web." + "message": "Ce compte dispose d'une configuration d'authentification à deux facteurs, cependant, aucun des fournisseurs d'authentification à deux facteurs configurés n'est pris en charge par ce navigateur web." }, "noTwoStepProviders2": { "message": "Merci d'utiliser un navigateur web compatible (comme Chrome) et/ou d'ajouter des services additionnels d'identification en deux étapes qui sont mieux supportés par les navigateurs web (comme par exemple une application d'authentification)." @@ -1467,6 +1495,9 @@ "twoStepOptions": { "message": "Options d'authentification à deux facteurs" }, + "selectTwoStepLoginMethod": { + "message": "Sélectionnez la méthode d'authentification à deux facteurs" + }, "recoveryCodeDesc": { "message": "Vous avez perdu l'accès à tous vos fournisseurs d'authentification à deux facteurs ? Utilisez votre code de récupération pour désactiver tous les fournisseurs d'authentification à deux facteurs de votre compte." }, @@ -1509,6 +1540,9 @@ "webAuthnMigrated": { "message": "(Migré depuis FIDO)" }, + "openInNewTab": { + "message": "Ouvrir dans un nouvel onglet" + }, "emailTitle": { "message": "Courriel" }, @@ -1732,7 +1766,7 @@ "message": "Inclure un Chiffre" }, "generatorPolicyInEffect": { - "message": "Les exigences de la politique de sécurité de l'entreprise ont été appliquées aux options de votre générateur.", + "message": "Les exigences de la politique de sécurité Entreprise ont été appliquées aux options de votre générateur.", "description": "Indicates that a policy limits the credential generator screen." }, "passwordHistory": { @@ -2224,6 +2258,9 @@ "revokeAccess": { "message": "Révoquer l'Accès" }, + "revoke": { + "message": "Révoquer" + }, "twoStepLoginProviderEnabled": { "message": "Ce fournisseur d'authentification à deux facteurs est actif sur votre compte." }, @@ -3099,7 +3136,7 @@ "message": "Pour les entreprises et autres équipes." }, "planNameTeamsStarter": { - "message": "Teams Starter" + "message": "Équipes Essentiel" }, "planNameEnterprise": { "message": "Entreprise" @@ -4081,6 +4118,12 @@ "updateBrowserDesc": { "message": "Vous utilisez un navigateur non supporté. Le coffre web pourrait ne pas fonctionner correctement." }, + "youHaveAPendingLoginRequest": { + "message": "Vous avez une demande de connexion en attente depuis un autre appareil." + }, + "reviewLoginRequest": { + "message": "Examiner la demande de connexion" + }, "freeTrialEndPromptCount": { "message": "Votre essai gratuit se termine dans $COUNT$ jours.", "placeholders": { @@ -4176,7 +4219,7 @@ "message": "Si vous ne pouvez pas accéder à votre compte par les méthodes normales d'authentification à deux facteurs, vous pouvez utiliser votre code de récupération d'authentification à deux facteurs pour désactiver tous les fournisseurs à deux facteurs sur votre compte." }, "logInBelowUsingYourSingleUseRecoveryCode": { - "message": "Connectez-vous ci-dessous en utilisant votre code de récupération à usage unique. Cela désactivera tous les fournisseurs en deux étapes de votre compte." + "message": "Connectez-vous ci-dessous en utilisant votre code de récupération à usage unique. Cela désactivera tous les fournisseurs d'authentification à deux facteurs de votre compte." }, "recoverAccountTwoStep": { "message": "Récupérer l'authentification à deux facteurs" @@ -4758,6 +4801,15 @@ "masterPassPolicyDesc": { "message": "Définir les exigences de robustesse du mot de passe principal." }, + "passwordStrengthScore": { + "message": "Score de force du mot de passe $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "twoStepLoginPolicyTitle": { "message": "Exiger une authentification à deux facteurs" }, @@ -4942,7 +4994,7 @@ "message": "Pour vous connecter avec votre fournisseur de SSO, entrez l'identifiant SSO de votre organisation pour commencer. Vous devrez peut-être entrer cet identifiant SSO lorsque vous vous connecterez à partir d'un nouvel appareil." }, "enterpriseSingleSignOn": { - "message": "Portail de connexion unique d'entreprise (Single Sign-On)" + "message": "Portail de connexion unique Entreprise" }, "ssoHandOff": { "message": "Vous pouvez maintenant fermer cet onglet et continuer dans l'extension." @@ -4960,7 +5012,7 @@ "message": "Toutes les fonctionnalités pour les équipes, plus :" }, "includeAllTeamsStarterFeatures": { - "message": "Toutes les fonctionnalités de Teams Starter, plus :" + "message": "Toutes les fonctionnalités d'Équipes Essentiel, plus :" }, "chooseMonthlyOrAnnualBilling": { "message": "Choisissez la facturation mensuelle ou annuelle" @@ -5024,13 +5076,13 @@ "message": "Authentification par Connexion Unique (Single Sign-On)" }, "requireSsoPolicyDesc": { - "message": "Exiger que les utilisateurs se connectent avec la méthode du portail de connexion unique d'entreprise." + "message": "Exiger que les membres se connectent avec la méthode du portail de connexion unique Entreprise." }, "prerequisite": { "message": "Prérequis" }, "requireSsoPolicyReq": { - "message": "La politique d'entreprise \"Organisation Unique\" doit être activée avant d'activer cette politique." + "message": "La politique d'organisation unique Entreprise doit être activée avant d'activer cette politique." }, "requireSsoPolicyReqError": { "message": "La politique \"Organisation Unique\" n'est pas activée." @@ -5038,12 +5090,40 @@ "requireSsoExemption": { "message": "Les propriétaires et les administrateurs de l'organisation sont exonérés de l'application de cette politique." }, + "limitSendViews": { + "message": "Limiter le nombre d'affichages" + }, + "limitSendViewsHint": { + "message": "Personne ne peut afficher ce Send une fois la limite atteinte.", + "description": "Displayed under the limit views field on Send" + }, + "limitSendViewsCount": { + "message": "$ACCESSCOUNT$ affichages restants", + "description": "Displayed under the limit views field on Send", + "placeholders": { + "accessCount": { + "content": "$1", + "example": "2" + } + } + }, + "sendDetails": { + "message": "Détails du Send", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendTypeTextToShare": { + "message": "Texte à partager" + }, "sendTypeFile": { "message": "Fichier" }, "sendTypeText": { "message": "Texte" }, + "sendPasswordDescV3": { + "message": "Ajouter un mot de passe facultatif pour que les destinataires puissent accéder à ce Send.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "createSend": { "message": "Nouveau Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -5068,19 +5148,15 @@ "message": "Supprimer le Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, - "deleteSendConfirmation": { - "message": "Êtes-vous sûr de vouloir supprimer ce Send ?", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "whatTypeOfSend": { - "message": "De quel type de Send s'agit-il ?", + "deleteSendPermanentConfirmation": { + "message": "Êtes-vous sûr de vouloir supprimer définitivement ce Send ?", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "deletionDate": { "message": "Date de suppression" }, - "deletionDateDesc": { - "message": "Le Send sera définitivement supprimé à la date et heure spécifiées.", + "deletionDateDescV2": { + "message": "Le Send sera définitivement supprimé à cette date.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "expirationDate": { @@ -5093,21 +5169,6 @@ "maxAccessCount": { "message": "Nombre maximum d'accès" }, - "maxAccessCountDesc": { - "message": "Si défini, les utilisateurs ne seront plus en mesure d'accéder à ce Send une fois que le nombre maximum d'accès sera atteint.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "currentAccessCount": { - "message": "Nombre d'accès actuel" - }, - "sendPasswordDesc": { - "message": "Vous pouvez, si vous le souhaitez, exiger un mot de passe pour accéder à ce Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendNotesDesc": { - "message": "Notes privées à propos de ce Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "disabled": { "message": "Désactivé" }, @@ -5134,13 +5195,6 @@ "removePasswordConfirmation": { "message": "Êtes-vous sûr de vouloir supprimer le mot de passe ?" }, - "hideEmail": { - "message": "Masquer mon adresse électronique aux destinataires." - }, - "disableThisSend": { - "message": "Désactiver ce Send pour que personne ne puisse y accéder.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "allSends": { "message": "Tous les Sends" }, @@ -5151,6 +5205,9 @@ "pendingDeletion": { "message": "En attente de suppression" }, + "hideTextByDefault": { + "message": "Masquer le texte par défaut" + }, "expired": { "message": "Expiré" }, @@ -5337,7 +5394,7 @@ "message": "Les propriétaires et les administrateurs de l'organisation sont exonérés de l'application de cette politique." }, "personalOwnershipSubmitError": { - "message": "En raison d'une politique d'entreprise, il vous est interdit d'enregistrer des éléments dans votre coffre personnel. Sélectionnez une organisation dans l'option Propriété et choisissez parmi les collections disponibles." + "message": "En raison d'une politique de sécurité Entreprise, il vous est interdit d'enregistrer des éléments dans votre coffre personnel. Sélectionnez une organisation dans l'option Propriété et choisissez parmi les collections disponibles." }, "disableSend": { "message": "Supprimer le Send" @@ -5354,7 +5411,7 @@ "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "sendDisabledWarning": { - "message": "En raison d'une politique d'entreprise, vous ne pouvez que supprimer un Send existant.", + "message": "En raison d'une politique de sécurité Entreprise, vous ne pouvez que supprimer un Send existant.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "sendOptions": { @@ -5372,13 +5429,6 @@ "message": "Toujours afficher l'adresse électronique du membre avec les destinataires lors de la création ou de l'édition d'un Send.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, - "sendOptionsPolicyInEffect": { - "message": "Les politiques de sécurité de l'organisation suivantes sont actuellement en vigueur :" - }, - "sendDisableHideEmailInEffect": { - "message": "Les utilisateurs ne sont pas autorisés à masquer leur adresse électronique aux destinataires lors de la création ou de l'édition d'un Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "modifiedPolicyId": { "message": "Politique $ID$ modifiée.", "placeholders": { @@ -5478,27 +5528,6 @@ "personalOwnershipCheckboxDesc": { "message": "Supprimer la propriété individuelle des utilisateurs de l'organisation" }, - "textHiddenByDefault": { - "message": "Lors de l'accès à ce Send, masquer le texte par défaut", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendNameDesc": { - "message": "Un nom convivial pour décrire ce Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendTextDesc": { - "message": "Le texte que vous voulez envoyer." - }, - "sendFileDesc": { - "message": "Le fichier que vous voulez envoyer." - }, - "copySendLinkOnSave": { - "message": "Copier le lien de ce Send dans mon presse-papiers lors de l'enregistrement." - }, - "sendLinkLabel": { - "message": "Lien du Send", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "send": { "message": "Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -5647,12 +5676,21 @@ "dateParsingError": { "message": "Une erreur s'est produite lors de l'enregistrement de vos dates de suppression et d'expiration." }, + "hideYourEmail": { + "message": "Masquer mon adresse courriel aux destinataires." + }, "webAuthnFallbackMsg": { "message": "Pour vérifier votre 2FA, veuillez cliquer sur le bouton ci-dessous." }, "webAuthnAuthenticate": { "message": "Authentifier WebAuthn" }, + "readSecurityKey": { + "message": "Lire la clé de sécurité" + }, + "awaitingSecurityKeyInteraction": { + "message": "En attente de l'interaction de la clé de sécurité..." + }, "webAuthnNotSupported": { "message": "WebAuthn n'est pas pris en charge dans ce navigateur." }, @@ -5756,7 +5794,7 @@ "message": "Les comptes existants avec les mots de passe principaux exigeront que les membres s'inscrivent d'eux-mêmes avant que les administrateurs puissent récupérer leurs comptes. L'inscription automatique activera la récupération du compte pour les nouveaux membres." }, "accountRecoverySingleOrgRequirementDesc": { - "message": "La politique Entreprise d'organisation unique doit être activée avant d'activer cette politique." + "message": "La politique de sécurité d'organisation unique Entreprise doit être activée avant d'activer cette politique de sécurité." }, "resetPasswordPolicyAutoEnroll": { "message": "Inscription automatique" @@ -6310,7 +6348,7 @@ "message": "Il vous a été offert un plan organisation Bitwarden \"Families\" gratuit. Pour continuer, vous devez vous connecter au compte qui a reçu l'offre." }, "sponsoredFamiliesAcceptFailed": { - "message": "Impossible d'accepter l'offre. Veuillez renvoyer le courriel de l'offre depuis votre compte d'entreprise et réessayer." + "message": "Impossible d'accepter l'offre. Veuillez renvoyer le courriel de l'offre depuis votre compte Entreprise et réessayer." }, "sponsoredFamiliesAcceptFailedShort": { "message": "Impossible d'accepter l'offre. $DESCRIPTION$", @@ -7199,6 +7237,12 @@ "duoRequiredByOrgForAccount": { "message": "L'authentification à double facteur DUO est requise pour votre compte." }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "L'authentification à deux facteurs est requise pour votre compte. Suivez les étapes ci-dessous pour terminer la connexion." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Suivez les étapes ci-dessous pour terminer de vous connecter." + }, "launchDuo": { "message": "Lancer DUO" }, @@ -7970,7 +8014,7 @@ } }, "teamsStarterPlanInvLimitReachedManageBilling": { - "message": "Les abonnements Teams Starter peuvent compter jusqu'à $SEATCOUNT$ membres. Passez à une offre payante pour inviter plus de membres.", + "message": "Les abonnements Équipes Essentiel peuvent compter jusqu'à $SEATCOUNT$ membres. Mettez à niveau vers une offre payante pour inviter plus de membres.", "placeholders": { "seatcount": { "content": "$1", @@ -7979,7 +8023,7 @@ } }, "teamsStarterPlanInvLimitReachedNoManageBilling": { - "message": "Les abonnements Teams Starter peuvent compter jusqu'à $SEATCOUNT$ membres. Contacter le propriétaire de votre organisation pour améliorer votre abonnements et inviter plus de membres.", + "message": "Les abonnements Équipes Essentiel peuvent compter jusqu'à $SEATCOUNT$ membres. Contacter le propriétaire de votre organisation pour mettre à niveau votre abonnements et inviter plus de membres.", "placeholders": { "seatcount": { "content": "$1", @@ -9793,9 +9837,15 @@ "learnMoreAboutApi": { "message": "En savoir plus sur l'API de Bitwarden" }, + "fileSend": { + "message": "Send d'un fichier" + }, "fileSends": { "message": "Déposer des Sends" }, + "textSend": { + "message": "Send d'un texte" + }, "textSends": { "message": "Texter des Sends" }, @@ -10029,10 +10079,6 @@ "message": "Inclure des caractères spéciaux", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "addAttachment": { "message": "Ajouter une pièce jointe" }, @@ -10432,10 +10478,31 @@ "assignedExceedsAvailable": { "message": "Les places assignées dépassent les places disponibles." }, + "changeAtRiskPassword": { + "message": "Changer le mot de passe à risque" + }, "removeUnlockWithPinPolicyTitle": { "message": "Supprimer Déverrouiller avec un NIP" }, "removeUnlockWithPinPolicyDesc": { "message": "Ne pas autoriser les membres à déverrouiller leur compte avec un NIP." + }, + "limitedEventLogs": { + "message": "Les plans $PRODUCT_TYPE$ n'ont pas accès aux journaux d'événements réels", + "placeholders": { + "product_type": { + "content": "$1", + "example": "Teams" + } + } + }, + "upgradeForFullEvents": { + "message": "Obtenez un accès complet aux journaux d'événements de l'organisation en mettant à niveau vers un plan Équipes ou Entreprise." + }, + "upgradeEventLogTitle": { + "message": "Mettez à niveau pour les données du journal des événements réels" + }, + "upgradeEventLogMessage": { + "message": "Ces événements sont des exemples et ne reflètent pas les événements réels au sein de votre organisation Bitwarden." } } diff --git a/apps/web/src/locales/gl/messages.json b/apps/web/src/locales/gl/messages.json index 1b3a777413c..c6aae437a90 100644 --- a/apps/web/src/locales/gl/messages.json +++ b/apps/web/src/locales/gl/messages.json @@ -5,6 +5,9 @@ "criticalApplications": { "message": "Critical applications" }, + "noCriticalAppsAtRisk": { + "message": "No critical applications at risk" + }, "accessIntelligence": { "message": "Access Intelligence" }, @@ -198,6 +201,9 @@ "notes": { "message": "Notas" }, + "privateNote": { + "message": "Private note" + }, "note": { "message": "Nota" }, @@ -1026,6 +1032,9 @@ "no": { "message": "Non" }, + "location": { + "message": "Location" + }, "loginOrCreateNewAccount": { "message": "Rexístrate ou crea unha nova conta para acceder ó teu baúl." }, @@ -1161,13 +1170,22 @@ "logInToBitwarden": { "message": "Log in to Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "Enter the code sent to your email" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Enter the code from your authenticator app" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Press your YubiKey to authenticate" + }, "authenticationTimeout": { "message": "Authentication timeout" }, "authenticationSessionTimedOut": { "message": "The authentication session timed out. Please restart the login process." }, - "verifyIdentity": { + "verifyYourIdentity": { "message": "Verify your Identity" }, "weDontRecognizeThisDevice": { @@ -1443,12 +1461,22 @@ "rememberMe": { "message": "Remember me" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Don't ask again on this device for 30 days" + }, "sendVerificationCodeEmailAgain": { "message": "Send verification code email again" }, "useAnotherTwoStepMethod": { "message": "Use another two-step login method" }, + "selectAnotherMethod": { + "message": "Select another method", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Use your recovery code" + }, "insertYubiKey": { "message": "Insert your YubiKey into your computer's USB port, then touch its button." }, @@ -1467,6 +1495,9 @@ "twoStepOptions": { "message": "Two-step login options" }, + "selectTwoStepLoginMethod": { + "message": "Select two-step login method" + }, "recoveryCodeDesc": { "message": "Lost access to all of your two-step login providers? Use your recovery code to turn off all two-step login providers from your account." }, @@ -1509,6 +1540,9 @@ "webAuthnMigrated": { "message": "(Migrated from FIDO)" }, + "openInNewTab": { + "message": "Open in new tab" + }, "emailTitle": { "message": "Email" }, @@ -2224,6 +2258,9 @@ "revokeAccess": { "message": "Revoke access" }, + "revoke": { + "message": "Revoke" + }, "twoStepLoginProviderEnabled": { "message": "This two-step login provider is active on your account." }, @@ -4081,6 +4118,12 @@ "updateBrowserDesc": { "message": "You are using an unsupported web browser. The web vault may not function properly." }, + "youHaveAPendingLoginRequest": { + "message": "You have a pending login request from another device." + }, + "reviewLoginRequest": { + "message": "Review login request" + }, "freeTrialEndPromptCount": { "message": "Your free trial ends in $COUNT$ days.", "placeholders": { @@ -4758,6 +4801,15 @@ "masterPassPolicyDesc": { "message": "Set requirements for master password strength." }, + "passwordStrengthScore": { + "message": "Password strength score $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "twoStepLoginPolicyTitle": { "message": "Require two-step login" }, @@ -5038,12 +5090,40 @@ "requireSsoExemption": { "message": "Organization owners and admins are exempt from this policy's enforcement." }, + "limitSendViews": { + "message": "Limit views" + }, + "limitSendViewsHint": { + "message": "No one can view this Send after the limit is reached.", + "description": "Displayed under the limit views field on Send" + }, + "limitSendViewsCount": { + "message": "$ACCESSCOUNT$ views left", + "description": "Displayed under the limit views field on Send", + "placeholders": { + "accessCount": { + "content": "$1", + "example": "2" + } + } + }, + "sendDetails": { + "message": "Send details", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendTypeTextToShare": { + "message": "Text to share" + }, "sendTypeFile": { "message": "File" }, "sendTypeText": { "message": "Text" }, + "sendPasswordDescV3": { + "message": "Add an optional password for recipients to access this Send.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "createSend": { "message": "New Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -5068,19 +5148,15 @@ "message": "Delete Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, - "deleteSendConfirmation": { - "message": "Are you sure you want to delete this Send?", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "whatTypeOfSend": { - "message": "What type of Send is this?", + "deleteSendPermanentConfirmation": { + "message": "Are you sure you want to permanently delete this Send?", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "deletionDate": { "message": "Deletion date" }, - "deletionDateDesc": { - "message": "The Send will be permanently deleted on the specified date and time.", + "deletionDateDescV2": { + "message": "The Send will be permanently deleted on this date.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "expirationDate": { @@ -5093,21 +5169,6 @@ "maxAccessCount": { "message": "Maximum access count" }, - "maxAccessCountDesc": { - "message": "If set, users will no longer be able to access this Send once the maximum access count is reached.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "currentAccessCount": { - "message": "Current access count" - }, - "sendPasswordDesc": { - "message": "Optionally require a password for users to access this Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendNotesDesc": { - "message": "Private notes about this Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "disabled": { "message": "Disabled" }, @@ -5134,13 +5195,6 @@ "removePasswordConfirmation": { "message": "Are you sure you want to remove the password?" }, - "hideEmail": { - "message": "Hide my email address from recipients." - }, - "disableThisSend": { - "message": "Deactivate this Send so that no one can access it.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "allSends": { "message": "All Sends" }, @@ -5151,6 +5205,9 @@ "pendingDeletion": { "message": "Pending deletion" }, + "hideTextByDefault": { + "message": "Hide text by default" + }, "expired": { "message": "Expired" }, @@ -5372,13 +5429,6 @@ "message": "Always show member’s email address with recipients when creating or editing a Send.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, - "sendOptionsPolicyInEffect": { - "message": "The following organization policies are currently in effect:" - }, - "sendDisableHideEmailInEffect": { - "message": "Users are not allowed to hide their email address from recipients when creating or editing a Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "modifiedPolicyId": { "message": "Modified policy $ID$.", "placeholders": { @@ -5478,27 +5528,6 @@ "personalOwnershipCheckboxDesc": { "message": "Remove individual ownership for organization users" }, - "textHiddenByDefault": { - "message": "When accessing the Send, hide the text by default", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendNameDesc": { - "message": "A friendly name to describe this Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendTextDesc": { - "message": "The text you want to Send." - }, - "sendFileDesc": { - "message": "The file you want to Send." - }, - "copySendLinkOnSave": { - "message": "Copy the link to share this Send to my clipboard upon save." - }, - "sendLinkLabel": { - "message": "Send link", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "send": { "message": "Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -5647,12 +5676,21 @@ "dateParsingError": { "message": "There was an error saving your deletion and expiration dates." }, + "hideYourEmail": { + "message": "Hide your email address from viewers." + }, "webAuthnFallbackMsg": { "message": "To verify your 2FA please click the button below." }, "webAuthnAuthenticate": { "message": "Authenticate WebAuthn" }, + "readSecurityKey": { + "message": "Read security key" + }, + "awaitingSecurityKeyInteraction": { + "message": "Awaiting security key interaction..." + }, "webAuthnNotSupported": { "message": "WebAuthn is not supported in this browser." }, @@ -7199,6 +7237,12 @@ "duoRequiredByOrgForAccount": { "message": "Duo two-step login is required for your account." }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Duo two-step login is required for your account. Follow the steps below to finish logging in." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Follow the steps below to finish logging in." + }, "launchDuo": { "message": "Launch Duo" }, @@ -9793,9 +9837,15 @@ "learnMoreAboutApi": { "message": "Learn more about Bitwarden's API" }, + "fileSend": { + "message": "File Send" + }, "fileSends": { "message": "File Sends" }, + "textSend": { + "message": "Text Send" + }, "textSends": { "message": "Text Sends" }, @@ -10029,10 +10079,6 @@ "message": "Include special characters", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "addAttachment": { "message": "Add attachment" }, @@ -10432,10 +10478,31 @@ "assignedExceedsAvailable": { "message": "Assigned seats exceed available seats." }, + "changeAtRiskPassword": { + "message": "Change at-risk password" + }, "removeUnlockWithPinPolicyTitle": { "message": "Remove Unlock with PIN" }, "removeUnlockWithPinPolicyDesc": { "message": "Do not allow members to unlock their account with a PIN." + }, + "limitedEventLogs": { + "message": "$PRODUCT_TYPE$ plans do not have access to real event logs", + "placeholders": { + "product_type": { + "content": "$1", + "example": "Teams" + } + } + }, + "upgradeForFullEvents": { + "message": "Get full access to organization event logs by upgrading to a Teams or Enterprise plan." + }, + "upgradeEventLogTitle": { + "message": "Upgrade for real event log data" + }, + "upgradeEventLogMessage": { + "message": "These events are examples only and do not reflect real events within your Bitwarden organization." } } diff --git a/apps/web/src/locales/he/messages.json b/apps/web/src/locales/he/messages.json index 239df6791c0..8c0f3335129 100644 --- a/apps/web/src/locales/he/messages.json +++ b/apps/web/src/locales/he/messages.json @@ -1,24 +1,27 @@ { "allApplications": { - "message": "All applications" + "message": "כל היישומים" }, "criticalApplications": { - "message": "Critical applications" + "message": "יישומים קריטיים" + }, + "noCriticalAppsAtRisk": { + "message": "אין יישומים קריטיים בסיכון" }, "accessIntelligence": { - "message": "Access Intelligence" + "message": "גישה למודיעין" }, "riskInsights": { - "message": "Risk Insights" + "message": "תובנות סיכון" }, "passwordRisk": { - "message": "Password Risk" + "message": "סיכון סיסמה" }, "reviewAtRiskPasswords": { - "message": "Review at-risk passwords (weak, exposed, or reused) across applications. Select your most critical applications to prioritize security actions for your users to address at-risk passwords." + "message": "סקור סיסמאות בסיכון (חלשות, חשופות, או משומשות) בין יישומים. בחר את היישומים הכי קריטיים שלך על מנת לתעדף פעולות אבטחה עבור המשתמשים שלך כדי לטפל בסיסמאות בסיכון." }, "dataLastUpdated": { - "message": "Data last updated: $DATE$", + "message": "הנתונים עודכנו לאחרונה: $DATE$", "placeholders": { "date": { "content": "$1", @@ -27,19 +30,19 @@ } }, "notifiedMembers": { - "message": "Notified members" + "message": "חברים שהודיעו להם" }, "revokeMembers": { - "message": "Revoke members" + "message": "בטל חברים" }, "restoreMembers": { - "message": "Restore members" + "message": "שחזר חברים" }, "cannotRestoreAccessError": { - "message": "Cannot restore organization access" + "message": "לא ניתן לשחזר גישת ארגון" }, "allApplicationsWithCount": { - "message": "All applications ($COUNT$)", + "message": "כל היישומים ($COUNT$)", "placeholders": { "count": { "content": "$1", @@ -48,10 +51,10 @@ } }, "createNewLoginItem": { - "message": "Create new login item" + "message": "צור פריט כניסה חדש" }, "criticalApplicationsWithCount": { - "message": "Critical applications ($COUNT$)", + "message": "יישומים קריטיים ($COUNT$)", "placeholders": { "count": { "content": "$1", @@ -60,7 +63,7 @@ } }, "notifiedMembersWithCount": { - "message": "Notified members ($COUNT$)", + "message": "חברים שהודיעו להם ($COUNT$)", "placeholders": { "count": { "content": "$1", @@ -69,7 +72,7 @@ } }, "noAppsInOrgTitle": { - "message": "No applications found in $ORG NAME$", + "message": "לא נמצאו יישומים אצל $ORG NAME$", "placeholders": { "org name": { "content": "$1", @@ -78,43 +81,43 @@ } }, "noAppsInOrgDescription": { - "message": "As users save logins, applications appear here, showing any at-risk passwords. Mark critical apps and notify users to update passwords." + "message": "ככל שמשתמשים שומרים כניסות, יישומים מופיעים כאן, ומוצגות כל הסיסמאות בסיכון. סמן יישומים קריטיים והודע למשתמשים לעדכן סיסמאות." }, "noCriticalAppsTitle": { - "message": "You haven't marked any applications as a Critical" + "message": "לא סימנת אף יישום כקריטי" }, "noCriticalAppsDescription": { - "message": "Select your most critical applications to discover at-risk passwords, and notify users to change those passwords." + "message": "בחר את היישומים הכי קריטיים שלך כדי לגלות סיסמאות בסיכון, ולהודיע למשתמשים לשנות את הסיסמאות הללו." }, "markCriticalApps": { - "message": "Mark critical apps" + "message": "סמן יישומים קריטיים" }, "markAppAsCritical": { - "message": "Mark app as critical" + "message": "סמן יישום כקריטי" }, "appsMarkedAsCritical": { - "message": "Apps marked as critical" + "message": "יישומים המסומנים כקריטיים" }, "application": { - "message": "Application" + "message": "יישום" }, "atRiskPasswords": { - "message": "At-risk passwords" + "message": "סיסמאות בסיכון" }, "requestPasswordChange": { - "message": "Request password change" + "message": "בקש שינוי סיסמה" }, "totalPasswords": { - "message": "Total passwords" + "message": "סה\"כ סיסמאות" }, "searchApps": { - "message": "Search applications" + "message": "חפש יישומים" }, "atRiskMembers": { - "message": "At-risk members" + "message": "חברים בסיכון" }, "atRiskMembersWithCount": { - "message": "At-risk members ($COUNT$)", + "message": "חברים בסיכון ($COUNT$)", "placeholders": { "count": { "content": "$1", @@ -123,7 +126,7 @@ } }, "atRiskApplicationsWithCount": { - "message": "At-risk applications ($COUNT$)", + "message": "יישומים בסיכון ($COUNT$)", "placeholders": { "count": { "content": "$1", @@ -132,13 +135,13 @@ } }, "atRiskMembersDescription": { - "message": "These members are logging into applications with weak, exposed, or reused passwords." + "message": "חברים אלה נכנסו אל יישומים עם סיסמאות חלשות, חשופות, או משומשות." }, "atRiskApplicationsDescription": { - "message": "These applications have weak, exposed, or reused passwords." + "message": "ליישומים האלה יש סיסמאות חלשות, חשופות, או משומשות." }, "atRiskMembersDescriptionWithApp": { - "message": "These members are logging into $APPNAME$ with weak, exposed, or reused passwords.", + "message": "החברים האלה נכנסו אל $APPNAME$ עם סיסמאות חלשות, חשופות, או משומשות.", "placeholders": { "appname": { "content": "$1", @@ -147,19 +150,19 @@ } }, "totalMembers": { - "message": "Total members" + "message": "סה\"כ חברים" }, "atRiskApplications": { - "message": "At-risk applications" + "message": "יישומים בסיכון" }, "totalApplications": { - "message": "Total applications" + "message": "סה\"כ יישומים" }, "unmarkAsCriticalApp": { - "message": "Unmark as critical app" + "message": "בטל סימון כיישום קריטי" }, "criticalApplicationSuccessfullyUnmarked": { - "message": "Critical application successfully unmarked" + "message": "בוטל סימון יישום קריטי בהצלחה" }, "whatTypeOfItem": { "message": "מאיזה סוג פריט זה?" @@ -198,8 +201,11 @@ "notes": { "message": "הערות" }, + "privateNote": { + "message": "Private note" + }, "note": { - "message": "Note" + "message": "הערה" }, "customFields": { "message": "שדות מותאמים אישית" @@ -208,22 +214,22 @@ "message": "שם בעל הכרטיס" }, "loginCredentials": { - "message": "Login credentials" + "message": "אישורי כניסה" }, "personalDetails": { - "message": "Personal details" + "message": "פרטים אישיים" }, "identification": { - "message": "Identification" + "message": "הזדהות" }, "contactInfo": { - "message": "Contact info" + "message": "פרטי קשר" }, "cardDetails": { - "message": "Card details" + "message": "פרטי כרטיס" }, "cardBrandDetails": { - "message": "$BRAND$ details", + "message": "פרטי $BRAND$", "placeholders": { "brand": { "content": "$1", @@ -232,19 +238,19 @@ } }, "itemHistory": { - "message": "Item history" + "message": "היסטוריית פריט" }, "authenticatorKey": { - "message": "Authenticator key" + "message": "מפתח מאמת" }, "autofillOptions": { - "message": "Autofill options" + "message": "אפשרויות מילוי אוטומטי" }, "websiteUri": { - "message": "Website (URI)" + "message": "אתר אינטרנט (URI)" }, "websiteUriCount": { - "message": "Website (URI) $COUNT$", + "message": "אתר אינטרנט (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": { @@ -254,16 +260,16 @@ } }, "websiteAdded": { - "message": "Website added" + "message": "אתר האינטרנט נוסף" }, "addWebsite": { - "message": "Add website" + "message": "הוסף אתר אינטרנט" }, "deleteWebsite": { - "message": "Delete website" + "message": "מחק אתר אינטרנט" }, "defaultLabel": { - "message": "Default ($VALUE$)", + "message": "ברירת מחדל ($VALUE$)", "description": "A label that indicates the default value for a field with the current default value in parentheses.", "placeholders": { "value": { @@ -273,7 +279,7 @@ } }, "showMatchDetection": { - "message": "Show match detection $WEBSITE$", + "message": "הצג זיהוי התאמה $WEBSITE$", "placeholders": { "website": { "content": "$1", @@ -282,7 +288,7 @@ } }, "hideMatchDetection": { - "message": "Hide match detection $WEBSITE$", + "message": "הסתר זיהוי התאמה $WEBSITE$", "placeholders": { "website": { "content": "$1", @@ -291,7 +297,7 @@ } }, "autoFillOnPageLoad": { - "message": "Autofill on page load?" + "message": "למלא אוטומטית בעת טעינת עמוד?" }, "number": { "message": "מספר" @@ -306,7 +312,7 @@ "message": "קוד האבטחה (CVV)" }, "securityCodeSlashCVV": { - "message": "Security code / CVV" + "message": "קוד אבטחה / CVV" }, "identityName": { "message": "שם הזהות" @@ -378,16 +384,16 @@ "message": "העלמה" }, "mx": { - "message": "Mx" + "message": "מיקס" }, "dr": { "message": "דוקטור" }, "cardExpiredTitle": { - "message": "Expired card" + "message": "כרטיס פג תוקף" }, "cardExpiredMessage": { - "message": "If you've renewed it, update the card's information" + "message": "אם חידשת אותו, עדכן את פרטי הכרטיס" }, "expirationMonth": { "message": "תוקף אשראי - חודש" @@ -399,16 +405,16 @@ "message": "מפתח מאמת (TOTP)" }, "totpHelperTitle": { - "message": "Make 2-step verification seamless" + "message": "הפוך את האימות הדו־שלבי לחלק" }, "totpHelper": { - "message": "Bitwarden can store and fill 2-step verification codes. Copy and paste the key into this field." + "message": "Bitwarden יכול לאחסון ולמלא קודים של אימות דו־שלבי. העתק והדבק את המפתח לשדה זה." }, "totpHelperWithCapture": { - "message": "Bitwarden can store and fill 2-step verification codes. Select the camera icon to take a screenshot of this website's authenticator QR code, or copy and paste the key into this field." + "message": "Bitwarden יכול לאחסון ולמלא קודים של אימות דו־שלבי. בחר את סמל המצלמה כדי לצלם את הקוד QR המאמת של אתר זה, או העתק והדבק את המפתח לתוך שדה זה." }, "learnMoreAboutAuthenticators": { - "message": "Learn more about authenticators" + "message": "למד עוד על מאמתים" }, "folder": { "message": "תיקייה" @@ -432,17 +438,17 @@ "message": "אמת או שקר" }, "cfTypeCheckbox": { - "message": "Checkbox" + "message": "תיבת סימון" }, "cfTypeLinked": { "message": "מקושר", "description": "This describes a field that is 'linked' (related) to another field." }, "fieldType": { - "message": "Field type" + "message": "סוג שדה" }, "fieldLabel": { - "message": "Field label" + "message": "תווית שדה" }, "remove": { "message": "הסר" @@ -455,7 +461,7 @@ "description": "This is the folder for uncategorized items" }, "selfOwnershipLabel": { - "message": "You", + "message": "את/ה", "description": "Used as a label to indicate that the user is the owner of an item." }, "addFolder": { @@ -465,16 +471,16 @@ "message": "ערוך תיקייה" }, "newFolder": { - "message": "New folder" + "message": "תיקייה חדשה" }, "folderName": { - "message": "Folder name" + "message": "שם תיקייה" }, "folderHintText": { - "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums" + "message": "צור תיקייה מקוננת על ידי הוספת שם תיקיית האב ואחריו “/”. דוגמה: חברתי/פורומים" }, "deleteFolderPermanently": { - "message": "Are you sure you want to permanently delete this folder?" + "message": "האם אתה בטוח שברצונך למחוק תיקייה זו לצמיתות?" }, "baseDomain": { "message": "שם בסיס הדומיין", @@ -520,7 +526,7 @@ "message": "צור סיסמה" }, "generatePassphrase": { - "message": "Generate passphrase" + "message": "צור ביטוי סיסמה" }, "checkPassword": { "message": "בדוק אם הסיסמה נחשפה." @@ -571,35 +577,35 @@ "message": "חפש מועדפים" }, "searchLogin": { - "message": "Search logins", + "message": "חפש כניסות", "description": "Search Login type" }, "searchCard": { - "message": "Search cards", + "message": "חפש כרטיסים", "description": "Search Card type" }, "searchIdentity": { - "message": "Search identities", + "message": "חפש זהויות", "description": "Search Identity type" }, "searchSecureNote": { - "message": "Search secure notes", + "message": "חפש הערות מאובטחות", "description": "Search Secure Note type" }, "searchVault": { "message": "חפש כספת" }, "searchMyVault": { - "message": "Search my vault" + "message": "חפש בכספת שלי" }, "searchOrganization": { - "message": "Search organization" + "message": "חפש בארגון" }, "searchMembers": { - "message": "Search members" + "message": "חפש חברים" }, "searchGroups": { - "message": "Search groups" + "message": "חפש קבוצות" }, "allItems": { "message": "כל הפריטים" @@ -623,7 +629,7 @@ "message": "פתק מאובטח" }, "typeSshKey": { - "message": "SSH key" + "message": "מפתח SSH" }, "typeLoginPlural": { "message": "התחברויות" @@ -656,7 +662,7 @@ "message": "שם מלא" }, "address": { - "message": "Address" + "message": "כתובת" }, "address1": { "message": "כתובת 1" @@ -689,7 +695,7 @@ "message": "בחר" }, "newItem": { - "message": "New item" + "message": "פריט חדש" }, "addItem": { "message": "הוסף פריט" @@ -701,7 +707,7 @@ "message": "הצג פריט" }, "newItemHeader": { - "message": "New $TYPE$", + "message": "$TYPE$ חדש", "placeholders": { "type": { "content": "$1", @@ -710,7 +716,7 @@ } }, "editItemHeader": { - "message": "Edit $TYPE$", + "message": "ערוך $TYPE$", "placeholders": { "type": { "content": "$1", @@ -719,7 +725,7 @@ } }, "viewItemType": { - "message": "View $ITEMTYPE$", + "message": "הצג $ITEMTYPE$", "placeholders": { "itemtype": { "content": "$1", @@ -728,17 +734,17 @@ } }, "new": { - "message": "New", + "message": "חדש", "description": "for adding new items" }, "item": { - "message": "Item" + "message": "פריט" }, "itemDetails": { - "message": "Item details" + "message": "פרטי הפריט" }, "itemName": { - "message": "Item name" + "message": "שם הפריט" }, "ex": { "message": "לדוגמא", @@ -764,7 +770,7 @@ } }, "copySuccessful": { - "message": "Copy Successful" + "message": "העתקה מוצלחת" }, "copyValue": { "message": "העתק ערך", @@ -775,11 +781,11 @@ "description": "Copy password to clipboard" }, "copyPassphrase": { - "message": "Copy passphrase", + "message": "העתק ביטוי סיסמה", "description": "Copy passphrase to clipboard" }, "passwordCopied": { - "message": "Password copied" + "message": "הסיסמה הועתקה" }, "copyUsername": { "message": "העתק שם משתמש", @@ -798,7 +804,7 @@ "description": "Copy URI to clipboard" }, "copyCustomField": { - "message": "Copy $FIELD$", + "message": "העתק $FIELD$", "placeholders": { "field": { "content": "$1", @@ -807,55 +813,55 @@ } }, "copyWebsite": { - "message": "Copy website" + "message": "העתק אתר אינטרנט" }, "copyNotes": { - "message": "Copy notes" + "message": "העתק הערות" }, "copyAddress": { - "message": "Copy address" + "message": "העתק כתובת" }, "copyPhone": { - "message": "Copy phone" + "message": "העתק טלפון" }, "copyEmail": { - "message": "Copy email" + "message": "העתק דוא\"ל" }, "copyCompany": { - "message": "Copy company" + "message": "העתק חברה" }, "copySSN": { - "message": "Copy Social Security number" + "message": "העתק מספר תעודת זהות" }, "copyPassportNumber": { - "message": "Copy passport number" + "message": "העתק מספר דרכון" }, "copyLicenseNumber": { - "message": "Copy license number" + "message": "העתק מספר רישיון" }, "copyName": { - "message": "Copy name" + "message": "העתק שם" }, "me": { - "message": "Me" + "message": "אני" }, "myVault": { "message": "הכספת שלי" }, "allVaults": { - "message": "All vaults" + "message": "כל הכספות" }, "vault": { "message": "כספת" }, "vaults": { - "message": "Vaults" + "message": "כספות" }, "vaultItems": { - "message": "Vault items" + "message": "פריטי כספת" }, "filter": { - "message": "Filter" + "message": "מסנן" }, "moveSelectedToOrg": { "message": "העבר בחירה לארגון" @@ -925,7 +931,7 @@ } }, "itemsMovedToOrg": { - "message": "Items moved to $ORGNAME$", + "message": "פריטים הועברו אל $ORGNAME$", "placeholders": { "orgname": { "content": "$1", @@ -934,7 +940,7 @@ } }, "itemMovedToOrg": { - "message": "Item moved to $ORGNAME$", + "message": "פריט הועבר אל $ORGNAME$", "placeholders": { "orgname": { "content": "$1", @@ -979,37 +985,37 @@ "message": "תיקיה שנמחקה" }, "editInfo": { - "message": "Edit info" + "message": "ערוך מידע" }, "access": { - "message": "Access" + "message": "גישה" }, "accessLevel": { - "message": "Access level" + "message": "רמת גישה" }, "accessing": { - "message": "Accessing" + "message": "ניגש אל" }, "loggedOut": { "message": "בוצעה יציאה" }, "loggedOutDesc": { - "message": "You have been logged out of your account." + "message": "יצאת מהחשבון שלך." }, "loginExpired": { "message": "תוקף החיבור שלך הסתיים." }, "restartRegistration": { - "message": "Restart registration" + "message": "התחל הרשמה מחדש" }, "expiredLink": { - "message": "Expired link" + "message": "קישור פג תוקף" }, "pleaseRestartRegistrationOrTryLoggingIn": { - "message": "Please restart registration or try logging in." + "message": "נא להתחיל הרשמה מחדש או לנסות להיכנס." }, "youMayAlreadyHaveAnAccount": { - "message": "You may already have an account" + "message": "ייתכן שכבר יש לך חשבון" }, "logOutConfirmation": { "message": "האם אתה בטוח שברצונך להתנתק?" @@ -1026,95 +1032,98 @@ "no": { "message": "לא" }, + "location": { + "message": "Location" + }, "loginOrCreateNewAccount": { "message": "צור חשבון חדש או התחבר כדי לגשת לכספת המאובטחת שלך." }, "loginWithDevice": { - "message": "Log in with device" + "message": "כניסה עם מכשיר" }, "loginWithDeviceEnabledNote": { - "message": "Log in with device must be set up in the settings of the Bitwarden app. Need another option?" + "message": "כניסה עם מכשיר צריכה להיות מוגדרת בהגדרות של היישום Bitwarden. צריך אפשרות אחרת?" }, "needAnotherOptionV1": { - "message": "Need another option?" + "message": "צריך אפשרות אחרת?" }, "loginWithMasterPassword": { - "message": "Log in with master password" + "message": "כניסה עם סיסמה ראשית" }, "readingPasskeyLoading": { - "message": "Reading passkey..." + "message": "קורא מפתח גישה..." }, "readingPasskeyLoadingInfo": { - "message": "Keep this window open and follow prompts from your browser." + "message": "השאר חלון זה פתוח ועקוב אחר ההנחיות מהדפדפן שלך." }, "useADifferentLogInMethod": { - "message": "Use a different log in method" + "message": "השתמש בשיטת כניסה אחרת" }, "logInWithPasskey": { - "message": "Log in with passkey" + "message": "כניסה עם מפתח גישה" }, "useSingleSignOn": { - "message": "Use single sign-on" + "message": "השתמש בכניסה יחידה" }, "welcomeBack": { - "message": "Welcome back" + "message": "ברוך שובך" }, "invalidPasskeyPleaseTryAgain": { - "message": "Invalid Passkey. Please try again." + "message": "מפתח גישה לא חוקי. נא לנסות שוב." }, "twoFactorForPasskeysNotSupportedOnClientUpdateToLogIn": { - "message": "2FA for passkeys is not supported. Update the app to log in." + "message": "אימות דו־גורמי (2FA) עבור מפתחות גישה אינו נתמך. עדכן את היישום כדי להיכנס." }, "loginWithPasskeyInfo": { - "message": "Use a generated passkey that will automatically log you in without a password. Biometrics, like facial recognition or fingerprint, or another FIDO2 security method will verify your identity." + "message": "השתמש במפתח גישה שנוצר אשר יכניס אותך באופן אוטומטי ללא סיסמה. זיהוי ביומטרי, כמו זיהוי פנים או טביעת אצבע, או שיטת אבטחה מסוג FIDO2 אחרת יאמתו את זהותך." }, "newPasskey": { - "message": "New passkey" + "message": "מפתח גישה חדש" }, "learnMoreAboutPasswordless": { - "message": "Learn more about passwordless" + "message": "למד עוד על ללא סיסמה" }, "creatingPasskeyLoading": { - "message": "Creating passkey..." + "message": "יוצר מפתח גישה..." }, "creatingPasskeyLoadingInfo": { - "message": "Keep this window open and follow prompts from your browser." + "message": "השאר חלון זה פתוח ועקוב אחר ההנחיות מהדפדפן שלך." }, "errorCreatingPasskey": { - "message": "Error creating passkey" + "message": "שגיאה ביצירת מפתח גישה" }, "errorCreatingPasskeyInfo": { - "message": "There was a problem creating your passkey." + "message": "הייתה בעיה ביצירת מפתח הגישה שלך." }, "passkeySuccessfullyCreated": { - "message": "Passkey successfully created!" + "message": "מפתח גישה נוצר בהצלחה!" }, "customPasskeyNameInfo": { - "message": "Name your passkey to help you identify it." + "message": "תן שם למפתח הגישה שלך כדי לעזור לך לזהות אותו." }, "useForVaultEncryption": { - "message": "Use for vault encryption" + "message": "השתמש עבור הצפנת כספת" }, "useForVaultEncryptionInfo": { - "message": "Log in and unlock on supported devices without your master password. Follow the prompts from your browser to finalize setup." + "message": "היכנס ובטל נעילה במכשירים נתמכים ללא הסיסמה הראשית שלך. עקוב אחר ההנחיות מהדפדפן שלך כדי לסיים את ההגדרה." }, "useForVaultEncryptionErrorReadingPasskey": { - "message": "Error reading passkey. Try again or uncheck this option." + "message": "שגיאה בקריאת מפתח גישה. נסה שוב או בטל את הסימון של אפשרות זו." }, "encryptionNotSupported": { - "message": "Encryption not supported" + "message": "הצפנה לא נתמכת" }, "enablePasskeyEncryption": { - "message": "Set up encryption" + "message": "הגדר הצפנה" }, "usedForEncryption": { - "message": "Used for encryption" + "message": "משמש עבור הצפנה" }, "loginWithPasskeyEnabled": { - "message": "Log in with passkey turned on" + "message": "כניסה עם מפתח גישה מופעלת" }, "passkeySaved": { - "message": "$NAME$ saved", + "message": "$NAME$ נשמר", "placeholders": { "name": { "content": "$1", @@ -1123,70 +1132,79 @@ } }, "passkeyRemoved": { - "message": "Passkey removed" + "message": "מפתח גישה הוסר" }, "removePasskey": { - "message": "Remove passkey" + "message": "הסר מפתח גישה" }, "removePasskeyInfo": { - "message": "If all passkeys are removed, you will be unable to log into new devices without your master password." + "message": "אם כל מפתחות הגישה מוסרים, לא תוכל להיכנס למכשירים חדשים ללא הסיסמה הראשית שלך." }, "passkeyLimitReachedInfo": { - "message": "Passkey limit reached. Remove a passkey to add another." + "message": "הגעת למגבלת מפתחות גישה. הסר מפתח גישה כדי להוסיף אחד נוסף." }, "tryAgain": { - "message": "Try again" + "message": "נסה שוב" }, "createAccount": { "message": "צור חשבון" }, "newToBitwarden": { - "message": "New to Bitwarden?" + "message": "חדש ב־Bitwarden?" }, "setAStrongPassword": { - "message": "Set a strong password" + "message": "הגדר סיסמה חזקה" }, "finishCreatingYourAccountBySettingAPassword": { - "message": "Finish creating your account by setting a password" + "message": "סיים ליצור את החשבון שלך על ידי הגדרת סיסמה" }, "newAroundHere": { - "message": "New around here?" + "message": "חדש כאן?" }, "startTrial": { - "message": "Start trial" + "message": "התחל ניסיון" }, "logIn": { "message": "התחבר" }, "logInToBitwarden": { - "message": "Log in to Bitwarden" + "message": "היכנס אל Bitwarden" + }, + "enterTheCodeSentToYourEmail": { + "message": "הזן את הקוד שנשלח לדוא\"ל שלך" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "הזן את הקוד מיישום המאמת שלך" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "לחץ על ה־YubiKey שלך כדי לאמת" }, "authenticationTimeout": { - "message": "Authentication timeout" + "message": "פסק זמן לאימות" }, "authenticationSessionTimedOut": { - "message": "The authentication session timed out. Please restart the login process." + "message": "זמן אימות ההפעלה תם. נא להתחיל מחדש את תהליך הכניסה." }, - "verifyIdentity": { + "verifyYourIdentity": { "message": "Verify your Identity" }, "weDontRecognizeThisDevice": { - "message": "We don't recognize this device. Enter the code sent to your email to verify your identity." + "message": "אנחנו לא מזהים את המכשיר הזה. הזן את הקוד שנשלח לדוא\"ל שלך כדי לאמת את זהותך." }, "continueLoggingIn": { - "message": "Continue logging in" + "message": "המשך להיכנס" }, "whatIsADevice": { - "message": "What is a device?" + "message": "מהו מכשיר?" }, "aDeviceIs": { - "message": "A device is a unique installation of the Bitwarden app where you have logged in. Reinstalling, clearing app data, or clearing your cookies could result in a device appearing multiple times." + "message": "מכשיר הוא התקנה ייחודית של היישום Bitwarden היכן שנכנסת. התקנה מחדש, ניקוי נתוני היישום, או ניקוי העוגיות שלך עלולים לגרום למכשיר להופיע מספר פעמים." }, "logInInitiated": { - "message": "Log in initiated" + "message": "הכניסה החלה" }, "logInRequestSent": { - "message": "Request sent" + "message": "בקשה נשלחה" }, "submit": { "message": "שלח" @@ -1207,7 +1225,7 @@ "message": "הסיסמה הראשית היא הסיסמה שבאמצעותה תיגש לכספת שלך. חשוב מאוד שלא תשכח את הסיסמה הזו. אין שום דרך לשחזר אותה במקרה ושכחת אותה." }, "masterPassImportant": { - "message": "Your master password cannot be recovered if you forget it!" + "message": "הסיסמה הראשית שלך לא ניתנת לשחזור אם אתה שוכח אותה!" }, "masterPassHintDesc": { "message": "ניתן להשתמש ברמז לסיסמה הראשית אם שכחת אותה." @@ -1219,13 +1237,13 @@ "message": "רמז לסיסמה ראשית (אופציונאלי)" }, "newMasterPassHint": { - "message": "New master password hint (optional)" + "message": "רמז לסיסמה הראשית חדש (אופציונלי)" }, "masterPassHintLabel": { "message": "רמז לסיסמה ראשית" }, "masterPassHintText": { - "message": "If you forget your password, the password hint can be sent to your email. $CURRENT$/$MAXIMUM$ character maximum.", + "message": "אם תשכח את הסיסמה שלך, הרמז לסיסמה יכול להישלח לדוא\"ל שלך. $CURRENT$/$MAXIMUM$ תווים לכל היותר.", "placeholders": { "current": { "content": "$1", @@ -1241,16 +1259,16 @@ "message": "הגדרות" }, "accountEmail": { - "message": "Account email" + "message": "דוא\"ל חשבון" }, "requestHint": { - "message": "Request hint" + "message": "בקש רמז" }, "requestPasswordHint": { - "message": "Request password hint" + "message": "בקש רמז לסיסמה" }, "enterYourAccountEmailAddressAndYourPasswordHintWillBeSentToYou": { - "message": "Enter your account email address and your password hint will be sent to you" + "message": "הזן את כתובת דוא\"ל החשבון שלך והרמז לסיסמה שלך יישלח אליך" }, "passwordHint": { "message": "רמז לסיסמה" @@ -1268,13 +1286,13 @@ "message": "כתובת אימייל לא תקינה." }, "masterPasswordRequired": { - "message": "Master password is required." + "message": "נדרשת סיסמה ראשית." }, "confirmMasterPasswordRequired": { - "message": "Master password retype is required." + "message": "נדרשת הזנה מחדש של הסיסמה הראשית." }, "masterPasswordMinlength": { - "message": "Master password must be at least $VALUE$ characters long.", + "message": "הסיסמת הראשית חייבת להכיל $VALUE$ תווים לפחות.", "description": "The Master Password must be at least a specific number of characters long.", "placeholders": { "value": { @@ -1290,13 +1308,13 @@ "message": "החשבון החדש שלך נוצר בהצלחה! כעת ניתן להתחבר למערכת." }, "newAccountCreated2": { - "message": "Your new account has been created!" + "message": "החשבון החדש שלך נוצר!" }, "youHaveBeenLoggedIn": { - "message": "You have been logged in!" + "message": "נכנסת!" }, "trialAccountCreated": { - "message": "Account created successfully." + "message": "החשבון נוצר בהצלחה." }, "masterPassSent": { "message": "שלחנו לך אימייל עם רמז לסיסמה הראשית." @@ -1305,16 +1323,16 @@ "message": "אירעה שגיאה לא צפויה." }, "expirationDateError": { - "message": "Please select an expiration date that is in the future." + "message": "נא לבחור תאריך תפוגה שהוא בעתיד." }, "emailAddress": { "message": "כתובת אימייל" }, "yourVaultIsLockedV2": { - "message": "Your vault is locked" + "message": "הכספת שלך נעולה" }, "yourAccountIsLocked": { - "message": "Your account is locked" + "message": "החשבון שלך נעול" }, "uuid": { "message": "UUID" @@ -1339,7 +1357,7 @@ "message": "סיסמה ראשית שגויה" }, "invalidFilePassword": { - "message": "Invalid file password, please use the password you entered when you created the export file." + "message": "סיסמת קובץ שגויה, נא להשתמש בסיסמה שהזנת כשיצרת את קובץ הייצוא." }, "lockNow": { "message": "נעל עכשיו" @@ -1348,10 +1366,10 @@ "message": "אין פריטים להצגה ברשימה." }, "noPermissionToViewAllCollectionItems": { - "message": "You do not have permission to view all items in this collection." + "message": "אין לך הרשאה להציג את כל הפריטים באוסף זה." }, "youDoNotHavePermissions": { - "message": "You do not have permissions to this collection" + "message": "אין לך הרשאות לאוסף זה" }, "noCollectionsInList": { "message": "אין אוספים להצגה ברשימה." @@ -1363,7 +1381,7 @@ "message": "אין משתמשים להצגה ברשימה." }, "noMembersInList": { - "message": "There are no members to list." + "message": "אין חברים להצגה ברשימה." }, "noEventsInList": { "message": "אין אירועים להצגה ברשימה." @@ -1375,16 +1393,16 @@ "message": "אינך משויך לארגון. ניתן לשתף באופן מאובטח פריטים רק עם משתמשים אחרים בתוך ארגון." }, "notificationSentDevice": { - "message": "A notification has been sent to your device." + "message": "התראה נשלחה למכשיר שלך." }, "notificationSentDevicePart1": { - "message": "Unlock Bitwarden on your device or on the " + "message": "בטל נעילת Bitwarden במכשיר שלך או ב" }, "areYouTryingToAccessYourAccount": { - "message": "Are you trying to access your account?" + "message": "האם אתה מנסה לגשת לחשבון שלך?" }, "accessAttemptBy": { - "message": "Access attempt by $EMAIL$", + "message": "ניסיון גישה על ידי $EMAIL$", "placeholders": { "email": { "content": "$1", @@ -1393,22 +1411,22 @@ } }, "confirmAccess": { - "message": "Confirm access" + "message": "אשר גישה" }, "denyAccess": { - "message": "Deny access" + "message": "דחה גישה" }, "notificationSentDeviceAnchor": { - "message": "web app" + "message": "יישום רשת" }, "notificationSentDevicePart2": { - "message": "Make sure the Fingerprint phrase matches the one below before approving." + "message": "וודא שביטוי טביעת האצבע תואם את זה שלמטה לפני שתאשר." }, "notificationSentDeviceComplete": { - "message": "Unlock Bitwarden on your device. Make sure the Fingerprint phrase matches the one below before approving." + "message": "פתח את Bitwarden במכשיר שלך. וודא שביטוי טביעת האצבע תואם את זה שלמטה לפני שתאשר." }, "aNotificationWasSentToYourDevice": { - "message": "A notification was sent to your device" + "message": "התראה נשלחה למכשיר שלך" }, "versionNumber": { "message": "גרסה $VERSION_NUMBER$", @@ -1443,12 +1461,22 @@ "rememberMe": { "message": "זכור אותי" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "אל תשאל אותי שוב במכשיר זה למשך 30 יום" + }, "sendVerificationCodeEmailAgain": { "message": "שלח שוב קוד אימות לאימייל" }, "useAnotherTwoStepMethod": { "message": "השתמש בשיטה אחרת עבור כניסה דו שלבית" }, + "selectAnotherMethod": { + "message": "בחר שיטה אחרת", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "השתמש בקוד השחזור שלך" + }, "insertYubiKey": { "message": "הכנס את ה-YubiKey אל כניסת ה-USB במחשבך, ואז גע בכפתור שלו." }, @@ -1467,6 +1495,9 @@ "twoStepOptions": { "message": "אפשרויות כניסה דו שלבית" }, + "selectTwoStepLoginMethod": { + "message": "בחר שיטת כניסה דו־שלבית" + }, "recoveryCodeDesc": { "message": "איבדת גישה לכל ספקי האימות הדו-שלבי שלך? השתמש בקוד האימות כדי לבטל את הספקים הקיימים מתוך החשבון שלך." }, @@ -1477,17 +1508,17 @@ "message": "אפליקציית אימות" }, "authenticatorAppDescV2": { - "message": "Enter a code generated by an authenticator app like Bitwarden Authenticator.", + "message": "הזן קוד שנוצר על ידי יישום מאמת כמו מאמת Bitwarden.", "description": "'Bitwarden Authenticator' is a product name and should not be translated." }, "yubiKeyTitleV2": { - "message": "Yubico OTP security key" + "message": "מפתח אבטחה OTP של Yubico" }, "yubiKeyDesc": { "message": "השתמש בYubiKey עבור גישה לחשבון שלך. עובד עם YubiKey מסדרה 4, סדרה 5, ומכשירי NEO." }, "duoDescV2": { - "message": "Enter a code generated by Duo Security.", + "message": "הזן קוד שנוצר על ידי Duo Security.", "description": "'Duo Security' and 'Duo Mobile' are product names and should not be translated." }, "duoOrganizationDesc": { @@ -1501,19 +1532,22 @@ "message": "מפתח אבטחה FIDO U2F" }, "webAuthnTitle": { - "message": "Passkey" + "message": "מפתח גישה" }, "webAuthnDesc": { - "message": "Use your device's biometrics or a FIDO2 compatible security key." + "message": "השתמש בזיהוי ביומטרי של המכשיר שלך או במפתח אבטחה תואם FIDO2." }, "webAuthnMigrated": { - "message": "(Migrated from FIDO)" + "message": "(הועבר מ־FIDO)" + }, + "openInNewTab": { + "message": "פתח בכרטיסייה חדשה" }, "emailTitle": { "message": "אימייל" }, "emailDescV2": { - "message": "Enter a code sent to your email." + "message": "הזן קוד שנשלח לדוא\"ל שלך." }, "continue": { "message": "המשך" @@ -1525,10 +1559,10 @@ "message": "ארגונים" }, "moveToOrgDesc": { - "message": "Choose an organization that you wish to move this item to. Moving to an organization transfers ownership of the item to that organization. You will no longer be the direct owner of this item once it has been moved." + "message": "בחר ארגון שאליו ברצונך להעביר פריט זה. העברה אל ארגון מעבירה בעלות של הפריט אל אותו ארגון. לא תוכל להיות הבעלים הישיר של פריט זה ברגע שהוא הועבר." }, "moveManyToOrgDesc": { - "message": "Choose an organization that you wish to move these items to. Moving to an organization transfers ownership of the items to that organization. You will no longer be the direct owner of these items once they have been moved." + "message": "בחר ארגון שאליו ברצונך להעביר פריטים אלה. העברה אל ארגון מעבירה בעלות של הפריטים אל אותו ארגון. לא תוכל להיות הבעלים הישיר של פריטים אלה ברגע שהם הועברו." }, "collectionsDesc": { "message": "ערוך את האוסף המשותף של פריט זה. רק משתמשים מורשים מתוך הארגון יוכלו לראות פריט זה." @@ -1543,7 +1577,7 @@ } }, "deleteSelectedCollectionsDesc": { - "message": "$COUNT$ collection(s) will be permanently deleted.", + "message": "$COUNT$ אוספ(ים) יימחק(ו) לצמיתות.", "placeholders": { "count": { "content": "$1", @@ -1552,10 +1586,10 @@ } }, "deleteSelectedConfirmation": { - "message": "Are you sure you want to continue?" + "message": "האם אתה בטוח שברצונך להמשיך?" }, "moveSelectedItemsDesc": { - "message": "Choose a folder that you would like to add the $COUNT$ selected item(s) to.", + "message": "בחר תיקייה שאליה תרצה להוסיף את $COUNT$ הפריט(ים) שבחרת.", "placeholders": { "count": { "content": "$1", @@ -1564,7 +1598,7 @@ } }, "moveSelectedItemsCountDesc": { - "message": "You have selected $COUNT$ item(s). $MOVEABLE_COUNT$ item(s) can be moved to an organization, $NONMOVEABLE_COUNT$ cannot.", + "message": "בחרת $COUNT$ פריט(ים). $MOVEABLE_COUNT$ פריט(ים) ניתן להעביר אל ארגון, $NONMOVEABLE_COUNT$ לא ניתן.", "placeholders": { "count": { "content": "$1", @@ -1587,91 +1621,91 @@ "message": "העתק קוד אימות" }, "copyUuid": { - "message": "Copy UUID" + "message": "העתק UUID" }, "errorRefreshingAccessToken": { - "message": "Access Token Refresh Error" + "message": "שגיאת רענון אסימון גישה" }, "errorRefreshingAccessTokenDesc": { - "message": "No refresh token or API keys found. Please try logging out and logging back in." + "message": "לא נמצאו אסימון רענון או מפתחות API. נא לנסות לצאת ולהיכנס חזרה." }, "warning": { "message": "אזהרה" }, "confirmVaultExport": { - "message": "Confirm vault export" + "message": "אשר ייצוא כספת" }, "confirmSecretsExport": { - "message": "Confirm secrets export" + "message": "אשר ייצוא סודות" }, "exportWarningDesc": { "message": "הקובץ מכיל את פרטי הכספת שלך בפורמט לא מוצפן. מומלץ להעביר את הקובץ רק בדרכים מוצפנות, ומאוד לא מומלץ לשמור או לשלוח את הקובץ הזה בדרכים לא מוצפנות (כדוגמת סתם אימייל). מחק את הקובץ מיד לאחר שסיימת את השימוש בו." }, "exportSecretsWarningDesc": { - "message": "This export contains your secrets data in an unencrypted format. You should not store or send the exported file over unsecure channels (such as email). Delete it immediately after you are done using it." + "message": "ייצוא זה מכיל את נתוני הכספת שלך בפורמט לא מוצפן. אתה לא אמור לאחסן או לשלוח את הקובץ המיוצא דרך ערוצים לא מאובטחים (כמו דוא\"ל). מחק אותו מיד לאחר שסיימת להשתמש בו." }, "encExportKeyWarningDesc": { - "message": "This export encrypts your data using your account's encryption key. If you ever rotate your account's encryption key you should export again since you will not be able to decrypt this export file." + "message": "ייצוא זה מצפין את הנתונים שלך באמצעות מפתח ההצפנה של חשבונך. אם אי פעם תבצע סיבוב (רוטציה) למפתח ההצפנה של חשבונך, תצטרך לייצא שוב משום שלא תוכל לפענח קובץ ייצוא זה." }, "encExportAccountWarningDesc": { - "message": "Account encryption keys are unique to each Bitwarden user account, so you can't import an encrypted export into a different account." + "message": "מפתחות הצפנת חשבון הם ייחודים לכל חשבון משתמש של Bitwarden, לכן אינך יכול לייבא ייצוא מוצפן אל תוך חשבון אחר." }, "export": { - "message": "Export" + "message": "ייצא" }, "exportFrom": { - "message": "Export from" + "message": "ייצא מ־" }, "exportVault": { "message": "יצוא כספת" }, "exportSecrets": { - "message": "Export secrets" + "message": "ייצא סודות" }, "fileFormat": { "message": "פורמט קובץ" }, "fileEncryptedExportWarningDesc": { - "message": "This file export will be password protected and require the file password to decrypt." + "message": "קובץ ייצוא זה יהיה מוגן סיסמה ודורש את סיסמת הקובץ כדי לפענח." }, "exportPasswordDescription": { - "message": "This password will be used to export and import this file" + "message": "סיסמה זו תשמש כדי לייצא ולייבא קובץ זה" }, "confirmMasterPassword": { - "message": "Confirm master password" + "message": "אמת סיסמה ראשית" }, "confirmFormat": { - "message": "Confirm format" + "message": "אשר פורמט" }, "filePassword": { - "message": "File password" + "message": "סיסמת קובץ" }, "confirmFilePassword": { - "message": "Confirm file password" + "message": "אשר סיסמת קובץ" }, "accountRestrictedOptionDescription": { - "message": "Use your account encryption key, derived from your account's username and Master Password, to encrypt the export and restrict import to only the current Bitwarden account." + "message": "השתמש במפתח הצפנת החשבון שלך, הנגזר משם המשתמש והסיסמה הראשית של חשבונך, כדי להצפין את הייצוא ולהגביל את הייבוא רק לחשבון Bitwarden הנוכחי." }, "passwordProtectedOptionDescription": { - "message": "Set a file password to encrypt the export and import it to any Bitwarden account using the password for decryption." + "message": "הגדר סיסמת קובץ כדי להצפין את הייצוא ולייבא אותו לכל חשבון Bitwarden באמצעות הסיסמה לפענוח." }, "exportTypeHeading": { - "message": "Export type" + "message": "סוג ייצוא" }, "accountRestricted": { - "message": "Account restricted" + "message": "מוגבל חשבון" }, "passwordProtected": { - "message": "Password protected" + "message": "מוגן סיסמה" }, "filePasswordAndConfirmFilePasswordDoNotMatch": { - "message": "“File password” and “Confirm file password“ do not match." + "message": "\"סיסמת קובץ\" ו\"אשר סיסמת קובץ\" אינם תואמים." }, "confirmVaultImport": { - "message": "Confirm vault import" + "message": "אשר ייבוא כספת" }, "confirmVaultImportDesc": { - "message": "This file is password-protected. Please enter the file password to import data." + "message": "קובץ זה מוגן סיסמה. נא להזין את סיסמת הקובץ כדי לייבא נתונים." }, "exportSuccess": { "message": "הוצאת המידע מהכספת שלך הסתיימה." @@ -1694,29 +1728,29 @@ "description": "deprecated. Use avoidAmbiguous instead." }, "avoidAmbiguous": { - "message": "Avoid ambiguous characters", + "message": "הימנע מתווים דו־משמעיים", "description": "Label for the avoid ambiguous characters checkbox." }, "length": { "message": "אורך" }, "passwordMinLength": { - "message": "Minimum password length" + "message": "אורך סיסמה מינימלי" }, "uppercase": { - "message": "Uppercase (A-Z)", + "message": "אותיות גדולות (A-Z)", "description": "deprecated. Use uppercaseLabel instead." }, "lowercase": { - "message": "Lowercase (a-z)", + "message": "אותיות קטנות (a-z)", "description": "deprecated. Use lowercaseLabel instead." }, "numbers": { - "message": "Numbers (0-9)", + "message": "מספרים (0-9)", "description": "deprecated. Use numbersLabel instead." }, "specialCharacters": { - "message": "Special characters (!@#$%^&*)" + "message": "תווים מיוחדים (*&^%$#@!)" }, "numWords": { "message": "מספר מילים" @@ -1732,32 +1766,32 @@ "message": "כלול מספרים" }, "generatorPolicyInEffect": { - "message": "Enterprise policy requirements have been applied to your generator options.", + "message": "דרישות מדיניות ארגונית הוחלו על אפשרויות המחולל שלך.", "description": "Indicates that a policy limits the credential generator screen." }, "passwordHistory": { "message": "היסטוריית סיסמאות" }, "generatorHistory": { - "message": "Generator history" + "message": "היסטוריית מחולל" }, "clearGeneratorHistoryTitle": { - "message": "Clear generator history" + "message": "נקה היסטוריית מחולל" }, "cleargGeneratorHistoryDescription": { - "message": "If you continue, all entries will be permanently deleted from generator's history. Are you sure you want to continue?" + "message": "אם תמשיך, כל הרשומות יימחקו לצמיתות מהיסטוריית המחולל. האם אתה בטוח שברצונך להמשיך?" }, "noPasswordsInList": { "message": "אין סיסמאות להצגה ברשימה." }, "clearHistory": { - "message": "Clear history" + "message": "נקה היסטוריה" }, "nothingToShow": { - "message": "Nothing to show" + "message": "אין מה להראות" }, "nothingGeneratedRecently": { - "message": "You haven't generated anything recently" + "message": "לא יצרת שום דבר לאחרונה" }, "clear": { "message": "נקה", @@ -1770,7 +1804,7 @@ "message": "החלף אימייל" }, "changeEmailTwoFactorWarning": { - "message": "Proceeding will change your account email address. It will not change the email address used for two-step login authentication. You can change this email address in the two-step login settings." + "message": "המשך התהליך ישנה את כתובת הדוא\"ל של החשבון שלך. זה לא ישנה את כתובת הדוא\"ל המשמשת עבור אימות כניסה דו־שלבית. אתה יכול לשנות את כתובת דוא\"ל זו בהגדרות הכניסה הדו־שלבית." }, "newEmail": { "message": "דוא\"ל חדש" @@ -1797,10 +1831,10 @@ "message": "אנא התחבר שוב." }, "currentSession": { - "message": "Current session" + "message": "הפעלה נוכחית" }, "requestPending": { - "message": "Request pending" + "message": "בקשה בהמתנה" }, "logBackInOthersToo": { "message": "אנא התחבר שוב. אם אתה משתמש באפליקציות נוספות של Bitwarden, סגור את החיבור והתחבר שוב גם באפליקציות הללו." @@ -1848,17 +1882,17 @@ } }, "kdfMemory": { - "message": "KDF memory (MB)", + "message": "זיכרון KDF (ב־MB)", "description": "Memory refers to computer memory (RAM). MB is short for megabytes." }, "argon2Warning": { - "message": "Setting your KDF iterations, memory, and parallelism too high could result in poor performance when logging into (and unlocking) Bitwarden on slower or older devices. We recommend changing these individually in small increments and then test all of your devices." + "message": "הגדרת חזרות, זיכרון, ומקבילות ה־KDF שלך לערכים גבוהים מדי עלולה לגרום לביצועים ירודים בעת כניסה אל (וביטול נעילת) Bitwarden במכשירים איטיים או ישנים יותר. אנו ממליצים לשנות אותם באופן נפרד במרווחים קטנים ואז לבדוק את כל המכשירים שלך." }, "kdfParallelism": { - "message": "KDF parallelism" + "message": "מקבילות KDF" }, "argon2Desc": { - "message": "Higher KDF iterations, memory, and parallelism can help protect your master password from being brute forced by an attacker." + "message": "ערכי חזרות, זיכרון, ומקבילות KDF גבוהים יותר יכולים לעזור להגן על הסיסמה הראשית מפני תקיפה כוחנית על ידי תוקף." }, "changeKdf": { "message": "שנה KDF" @@ -1879,31 +1913,31 @@ "message": "בכדי להמשיך הסשן הנוכחי ינותק, ותדרש להזין את פרטי הכניסה החדשים וגם את פרטי האימות הדו-שלבי, אם הוא מאופשר. כל הסשנים הפעילים במכשירים אחרים ישארו פעילים עד שעה ממועד הכניסה החדשה." }, "newDeviceLoginProtection": { - "message": "New device login" + "message": "כניסת מכשיר חדש" }, "turnOffNewDeviceLoginProtection": { - "message": "Turn off new device login protection" + "message": "כבה הגנת כניסת מכשיר חדש" }, "turnOnNewDeviceLoginProtection": { - "message": "Turn on new device login protection" + "message": "הפעל הגנת כניסת מכשיר חדש" }, "turnOffNewDeviceLoginProtectionModalDesc": { - "message": "Proceed below to turn off the verification emails bitwarden sends when you login from a new device." + "message": "המשך למטה כדי לכבות הודעות דוא\"ל של אימות ש־Bitwarden שולח כאשר אתה נכנס ממכשיר חדש." }, "turnOnNewDeviceLoginProtectionModalDesc": { - "message": "Proceed below to have bitwarden send you verification emails when you login from a new device." + "message": "המשך למטה כדי ש־Bitwarden ישלח לך הודעות דוא\"ל של אימות כאשר אתה נכנס ממכשיר חדש." }, "turnOffNewDeviceLoginProtectionWarning": { - "message": "With new device login protection turned off, anyone with your master password can access your account from any device. To protect your account without verification emails, set up two-step login." + "message": "עם הגנת כניסת מכשיר חדש כבויה, כל אחד עם הסיסמה הראשית שלך יכול לגשת למכשיר שלך מכל מכשיר. כדי להגן על חשבונך ללא הודעות דוא\"ל של אימות, הגדר כניסה דו־שלבית." }, "accountNewDeviceLoginProtectionSaved": { - "message": "New device login protection changes saved" + "message": "שינויי הגנת כניסת מכשיר חדש נשמרו" }, "sessionsDeauthorized": { "message": "הוסרה ההרשאה מכל הסשנים" }, "accountIsOwnedMessage": { - "message": "This account is owned by $ORGANIZATIONNAME$", + "message": "חשבון זה הוא בבעלות $ORGANIZATIONNAME$", "placeholders": { "organizationName": { "content": "$1", @@ -1918,7 +1952,7 @@ "message": "מחק תוכן כספת ארגונית." }, "vaultAccessedByProvider": { - "message": "Vault accessed by Provider." + "message": "בוצעה גישה לפריט על ידי ספק." }, "purgeVaultDesc": { "message": "המשך כאן בכדי למחוק את כל הפריטים והתיקיות שבכספת שלך. פריטים השייכים לארגון לא ימחקו." @@ -1948,7 +1982,7 @@ "message": "חשבונך נסגר וכל המידע המשויך אליו נמחק." }, "deleteOrganizationWarning": { - "message": "Deleting your organization is permanent. It cannot be undone." + "message": "מחיקת הארגון שלך היא לצמיתות. לא ניתן לבטלה." }, "myAccount": { "message": "החשבון שלי" @@ -1960,36 +1994,36 @@ "message": "ייבא נתונים" }, "onboardingImportDataDetailsPartOne": { - "message": "If you don't have any data to import, you can create a ", + "message": "אם אין לך נתוני לייבא, אתה יכול ליצור ", "description": "This will be part of a larger sentence, that will read like this: If you don't have any data to import, you can create a new item instead. (Optional second half: You may need to wait until your administrator confirms your organization membership.)" }, "onboardingImportDataDetailsLink": { - "message": "new item", + "message": "פריט חדש", "description": "This will be part of a larger sentence, that will read like this: If you don't have any data to import, you can create a new item instead. (Optional second half: You may need to wait until your administrator confirms your organization membership.)" }, "onboardingImportDataDetailsLoginLink": { - "message": "new login", + "message": "כניסה חדשה", "description": "This will be part of a larger sentence, that will read like this: If you don't have any data to import, you can create a new login instead. (Optional second half: You may need to wait until your administrator confirms your organization membership.)" }, "onboardingImportDataDetailsPartTwoNoOrgs": { - "message": " instead.", + "message": " במקום.", "description": "This will be part of a larger sentence, that will read like this: If you don't have any data to import, you can create a new item instead." }, "onboardingImportDataDetailsPartTwoWithOrgs": { - "message": " instead. You may need to wait until your administrator confirms your organization membership.", + "message": " במקום. ייתכן שתצטרך לחכות עד שהמנהל שלך יאשר את החברות בארגון שלך.", "description": "This will be part of a larger sentence, that will read like this: If you don't have any data to import, you can create a new item instead. You may need to wait until your administrator confirms your organization membership." }, "importError": { - "message": "Import error" + "message": "שגיאת ייבוא" }, "importErrorDesc": { - "message": "There was a problem with the data you tried to import. Please resolve the errors listed below in your source file and try again." + "message": "הייתה בעיה עם הנתונים שניסית לייבא. נא לפתור את השגיאות למטה בקובץ המקור שלך ולנסות שוב." }, "importSuccess": { "message": "נתונים יובאו בהצלחה אל תוך הכספת שלך." }, "importSuccessNumberOfItems": { - "message": "A total of $AMOUNT$ items were imported.", + "message": "בסך הכל יובאו $AMOUNT$ פריטים.", "placeholders": { "amount": { "content": "$1", @@ -1998,10 +2032,10 @@ } }, "dataExportSuccess": { - "message": "Data successfully exported" + "message": "הנתונים יוצאו בהצלחה" }, "importWarning": { - "message": "You are importing data to $ORGANIZATION$. Your data may be shared with members of this organization. Do you want to proceed?", + "message": "אתה מייבא נתונים אל $ORGANIZATION$. ייתכן שהנתונים שלך ישותפו עם חברים של הארגון הזה. האם אתה רוצה להמשיך?", "placeholders": { "organization": { "content": "$1", @@ -2016,22 +2050,22 @@ "message": "לא יובא דבר." }, "importEncKeyError": { - "message": "Error decrypting the exported file. Your encryption key does not match the encryption key used export the data." + "message": "שגיאה בפענוח הקובץ המיוצא. מפתח ההצפנה שלך אינו תואם את מפתח ההצפנה המשמש לייצוא הנתונים." }, "destination": { - "message": "Destination" + "message": "יעד" }, "learnAboutImportOptions": { - "message": "Learn about your import options" + "message": "למד על אפשרויות הייבוא שלך" }, "selectImportFolder": { - "message": "Select a folder" + "message": "בחר תיקייה" }, "selectImportCollection": { - "message": "Select a collection" + "message": "בחר אוסף" }, "importTargetHint": { - "message": "Select this option if you want the imported file contents moved to a $DESTINATION$", + "message": "בחר באפשרות זו אם ברצונך להעביר את תוכן הקובץ המיובא אל $DESTINATION$", "description": "Located as a hint under the import target. Will be appended by either folder or collection, depending if the user is importing into an individual or an organizational vault.", "placeholders": { "destination": { @@ -2041,7 +2075,7 @@ } }, "importUnassignedItemsError": { - "message": "File contains unassigned items." + "message": "קובץ מכיל פריטים לא מוקצים." }, "selectFormat": { "message": "בחר את פורמט הקובץ לייבוא" @@ -2050,10 +2084,10 @@ "message": "בחר את הקובץ לייבוא" }, "chooseFile": { - "message": "Choose File" + "message": "בחר קובץ" }, "noFileChosen": { - "message": "No file chosen" + "message": "לא נבחר קובץ" }, "orCopyPasteFileContents": { "message": "או העתק\\הדבק את תוכן הקובץ ליבוא" @@ -2072,13 +2106,13 @@ "message": "אפשרויות" }, "preferences": { - "message": "Preferences" + "message": "העדפות" }, "preferencesDesc": { - "message": "Customize your web vault experience." + "message": "התאם אישית את חווית כספת הרשת שלך." }, "preferencesUpdated": { - "message": "Preferences saved" + "message": "העדפות נשמרו" }, "language": { "message": "שפה" @@ -2087,10 +2121,10 @@ "message": "שנה את השפה של כספת הרשת." }, "enableFavicon": { - "message": "Show website icons" + "message": "הצג סמלי אתר אינטרנט" }, "faviconDesc": { - "message": "Show a recognizable image next to each login." + "message": "הצג תמונה מוכרת ליד כל כניסה." }, "default": { "message": "ברירת מחדל" @@ -2138,32 +2172,32 @@ "message": "התחברות בשני-שלבים" }, "twoStepLoginEnforcement": { - "message": "Two-step Login Enforcement" + "message": "אכיפת כניסה דו־שלבית" }, "twoStepLoginDesc": { "message": "שפר את אבטחת החשבון שלך על ידי דרישת צעד נוסף עבור כל נסיון חיבור." }, "twoStepLoginTeamsDesc": { - "message": "Enable two-step login for your organization." + "message": "אפשר כניסה דו־שלבית עבור הארגון שלך." }, "twoStepLoginEnterpriseDescStart": { - "message": "Enforce Bitwarden Two-step Login options for members by using the ", + "message": "אכוף אפשרויות כניסה דו־שלבית של Bitwarden עבור חברים על ידי שימוש ב", "description": "This will be used as part of a larger sentence, broken up to include links. The full sentence will read 'Enforce Bitwarden Two-step Login options for members by using the Two-step Login Policy.'" }, "twoStepLoginPolicy": { - "message": "Two-step Login Policy" + "message": "מדיניות כניסה דו־שלבית" }, "twoStepLoginOrganizationDuoDesc": { - "message": "To enforce Two-step Login through Duo, use the options below." + "message": "כדי לאכוף כניסה דו־שלבית דרך Duo, השתמש באפשרויות למטה." }, "twoStepLoginOrganizationSsoDesc": { - "message": "If you have setup SSO or plan to, Two-step Login may already be enforced through your Identity Provider." + "message": "אם הגדרת SSO או מתכוון לעשות כן, ייתכן שכניסה דו־שלבית כבר נאכפת דרך ספק הזהות שלך." }, "twoStepLoginRecoveryWarning": { "message": "שים לב: שימוש לא נכון בכניסה דו-שלבית עשוי לגרום לך להנעל ללא גישה לחשבון Bitwarden שלך. מומלץ לשמור קוד שחזור לגישה לחשבון שלך למקרה שלא תוכל להשתמש בספק הכניסה הדו-שלבית (לדוגמא: איבדת את הפלאפון או את מפתח החומרה שלך). גם צוות התמיכה של Bitwarden לא יוכל לעזור לך במקרה שתאבד גישה לחשבון שלך. אנו ממליצים שתכתוב או תדפיס את קודי השחזור ותשמור אותם במקום בטוח." }, "yourSingleUseRecoveryCode": { - "message": "Your single-use recovery code can be used to turn off two-step login in the event that you lose access to your two-step login provider. Bitwarden recommends you write down the recovery code and keep it in a safe place." + "message": "ניתן להשתמש בקוד השחזור החד־פעמי שלך כדי לכבות כניסה דו־שלבית במקרה שאתה מאבד גישה לספק הכניסה הדו־שלבית שלך. Bitwarden ממליץ לך לרשום את קוד השחזור ולשמור אותו במקום בטוח." }, "viewRecoveryCode": { "message": "צפה בקוד שחזור" @@ -2179,7 +2213,7 @@ "message": "מופעל" }, "restoreAccess": { - "message": "Restore access" + "message": "שחזר גישה" }, "premium": { "message": "פרימיום", @@ -2204,25 +2238,28 @@ "message": "נהל" }, "manageCollection": { - "message": "Manage collection" + "message": "נהל אוסף" }, "viewItems": { - "message": "View items" + "message": "הצג פריטים" }, "viewItemsHidePass": { - "message": "View items, hidden passwords" + "message": "הצג פריטים, סיסמאות מוסתרות" }, "editItems": { - "message": "Edit items" + "message": "ערוך פריטים" }, "editItemsHidePass": { - "message": "Edit items, hidden passwords" + "message": "ערוך פריטים, סיסמאות מוסתרות" }, "disable": { "message": "בטל" }, "revokeAccess": { - "message": "Revoke access" + "message": "בטל גישה" + }, + "revoke": { + "message": "בטל" }, "twoStepLoginProviderEnabled": { "message": "ספק כניסה דו-שלבית זה נתמך בחשבון שלך." @@ -2231,19 +2268,19 @@ "message": "הזן את הסיסמה הראשית שלך בכדי לשנות הגדרות הנוגעות לכניסה דו-שלבית." }, "twoStepAuthenticatorInstructionPrefix": { - "message": "Download an authenticator app such as" + "message": "הורד יישום מאמת כגון" }, "twoStepAuthenticatorInstructionInfix1": { "message": "," }, "twoStepAuthenticatorInstructionInfix2": { - "message": "or" + "message": "או" }, "twoStepAuthenticatorInstructionSuffix": { "message": "." }, "continueToExternalUrlTitle": { - "message": "Continue to $URL$?", + "message": "להמשיך אל $URL$?", "placeholders": { "url": { "content": "$1", @@ -2252,25 +2289,25 @@ } }, "continueToExternalUrlDesc": { - "message": "You are leaving Bitwarden and launching an external website in a new window." + "message": "אתה עוזב את Bitwarden ופותח אתר אינטרנט חיצוני בחלון חדש." }, "twoStepContinueToBitwardenUrlTitle": { - "message": "Continue to bitwarden.com?" + "message": "להמשיך אל bitwarden.com?" }, "twoStepContinueToBitwardenUrlDesc": { - "message": "Bitwarden Authenticator allows you to store authenticator keys and generate TOTP codes for 2-step verification flows. Learn more on the bitwarden.com website." + "message": "מאמת Bitwarden מאפשר לך לאחסן מפתחות מאמת וליצור קודי TOTP עבור זרימת אימות דו־שלבית. למד עוד באתר האינטרנט bitwarden.com." }, "twoStepAuthenticatorScanCodeV2": { - "message": "Scan the QR code below with your authenticator app or enter the key." + "message": "סרוק את קוד ה־QR למטה עם יישום המאמת שלך או הזן את המפתח." }, "twoStepAuthenticatorQRCanvasError": { - "message": "Could not load QR code. Try again or use the key below." + "message": "לא היה ניתן לטעון קוד QR. נסה שוב או השתמש במפתח למטה." }, "key": { "message": "מפתח" }, "twoStepAuthenticatorEnterCodeV2": { - "message": "Verification code" + "message": "קוד אימות" }, "twoStepAuthenticatorReaddDesc": { "message": "במקרה שאתה צריך את אפשרות הכניסה זמינה גם במכשיר אחר, כאן ניתן למצוא את קוד הQR (או המפתח) הנחוץ לאפליקציית האימות במכשיר הנוסף." @@ -2324,7 +2361,7 @@ } }, "webAuthnkeyX": { - "message": "WebAuthn Key $INDEX$", + "message": "מפתח WebAuthn $INDEX$", "placeholders": { "index": { "content": "$1", @@ -2351,10 +2388,10 @@ "message": "הזן את פרטי אפליקציית Bitwarden מתוך עמוד הניהול של Duo." }, "twoFactorDuoClientId": { - "message": "Client Id" + "message": "מזהה משתמש" }, "twoFactorDuoClientSecret": { - "message": "Client Secret" + "message": "סוד לקוח" }, "twoFactorDuoApiHostname": { "message": "שם שרת הAPI" @@ -2378,7 +2415,7 @@ "message": "האם אתה בטוח שברצונך למחוק מפתח אבטחה זה?" }, "twoFactorWebAuthnAdd": { - "message": "Add a WebAuthn security key to your account" + "message": "הוסף מפתח אבטחה מסוג WebAuthn לחשבון שלך" }, "readKey": { "message": "קרא מפתח" @@ -2414,7 +2451,7 @@ "message": "היתה בעיה בקריאת מפתח האבטחה. נסה בשנית." }, "twoFactorWebAuthnWarning1": { - "message": "Due to platform limitations, WebAuthn cannot be used on all Bitwarden applications. You should set up another two-step login provider so that you can access your account when WebAuthn cannot be used." + "message": "עקב מגבלות פלטפורמה, לא ניתן להשתמש ב־WebAuthn בכל היישומים של Bitwarden. עליך להגדיר ספק כניסה דו־שלבית אחר כך שתוכל לגשת לחשבון שלך כאשר לא ניתן להשתמש ב־WebAuthn." }, "twoFactorRecoveryYourCode": { "message": "קוד השחזור שלך עבור כניסה דו שלבית לBitwarden" @@ -2430,11 +2467,11 @@ "message": "דוחות" }, "reportsDesc": { - "message": "Identify and close security gaps in your online accounts by clicking the reports below.", + "message": "זהה וסגור פערי אבטחה בחשבונות המקוונים שלך על ידי לחיצה על הדוחות למטה.", "description": "Vault health reports can be used to evaluate the security of your Bitwarden individual or organization vault." }, "orgsReportsDesc": { - "message": "Identify and close security gaps in your organization's accounts by clicking the reports below.", + "message": "זהה וסגור פערי אבטחה בחשבונות של הארגון שלך על ידי לחיצה על הדוחות למטה.", "description": "Vault health reports can be used to evaluate the security of your Bitwarden individual or organization vault." }, "unsecuredWebsitesReport": { @@ -2447,7 +2484,7 @@ "message": "נמצאו אתרים לא מאובטחים" }, "unsecuredWebsitesFoundReportDesc": { - "message": "We found $COUNT$ items in your $VAULT$ with unsecured URIs. You should change their URI scheme to https:// if the website allows it.", + "message": "מצאנו $COUNT$ פריטים בכספת שלך עם כתובות URI לא מאובטחות. עליך לשנות את סכמת ה־URI שלהם ל־//:https אם האתר מאפשר זאת.", "placeholders": { "count": { "content": "$1", @@ -2472,7 +2509,7 @@ "message": "נמצאו פרטי כניסות שלא פעילה בהן אופציית 2FA" }, "inactive2faFoundReportDesc": { - "message": "We found $COUNT$ website(s) in your $VAULT$ that may not be configured with two-step login (according to 2fa.directory). To further protect these accounts, you should set up two-step login.", + "message": "מצאנו $COUNT$ אתרים בכספת שלך שייתכן שלא הוגדרו עם כניסה דו־שלבית (על פי 2fa.directory). כדי להגן עוד יותר על החשבונות הללו, עליך להגדיר כניסה דו־שלבית.", "placeholders": { "count": { "content": "$1", @@ -2494,13 +2531,13 @@ "message": "דו\"ח סיסמאות שנחשפו" }, "exposedPasswordsReportDesc": { - "message": "Passwords exposed in a data breach are easy targets for attackers. Change these passwords to prevent potential break-ins." + "message": "סיסמאות חשופות בפרצת נתונים הן מטרות קלות עבור תוקפים. שנה סיסמאות אלה כדי למנוע פריצות פוטנציאליות." }, "exposedPasswordsFound": { "message": "נמצאו סיסמאות שנחשפו" }, "exposedPasswordsFoundReportDesc": { - "message": "We found $COUNT$ items in your $VAULT$ that have passwords that were exposed in known data breaches. You should change them to use a new password.", + "message": "מצאנו $COUNT$ פריטים בכספת שלך שיש להם סיסמאות שנחפשו בפרצות נתונים ידועות. עליך לשנות אותם כך שישתמשו בסיסמה חדשה.", "placeholders": { "count": { "content": "$1", @@ -2519,7 +2556,7 @@ "message": "בדוק אם קיימות סיסמאות שנפרצו" }, "timesExposed": { - "message": "Times exposed" + "message": "פעמים נחשפו" }, "exposedXTimes": { "message": "נחשף $COUNT$ פעמים", @@ -2540,7 +2577,7 @@ "message": "נמצאו סיסמאות חלשות" }, "weakPasswordsFoundReportDesc": { - "message": "We found $COUNT$ items in your $VAULT$ with passwords that are not strong. You should update them to use stronger passwords.", + "message": "מצאנו $COUNT$ פריטים בכספת שלך עם סיסמאות לא חזקות. עליך לעדכן אותם כך שישתמשו בסיסמאות חזקות יותר.", "placeholders": { "count": { "content": "$1", @@ -2556,7 +2593,7 @@ "message": "אין פריטים בכספת שלך עם סיסמאות חלשות." }, "weakness": { - "message": "Weakness" + "message": "חולשה" }, "reusedPasswordsReport": { "message": "דו\"ח סיסמאות משומשות" @@ -2568,7 +2605,7 @@ "message": "נמצאו סיסמאות משומשות" }, "reusedPasswordsFoundReportDesc": { - "message": "We found $COUNT$ passwords that are being reused in your $VAULT$. You should change them to a unique value.", + "message": "מצאנו $COUNT$ סיסמאות שנמצאות בשימוש חוזר בכספת שלך. עליך לשנות אותם לערך ייחודי.", "placeholders": { "count": { "content": "$1", @@ -2584,7 +2621,7 @@ "message": "אין פרטי התחברות בכספת שלך עם סיסמאות משומשות." }, "timesReused": { - "message": "Times reused" + "message": "פעמים בשימוש חוזר" }, "reusedXTimes": { "message": "היה בשימוש $COUNT$ פעמים", @@ -2658,10 +2695,10 @@ "message": "חיוב" }, "billingPlanLabel": { - "message": "Billing plan" + "message": "תוכנית חיוב" }, "paymentType": { - "message": "Payment type" + "message": "סוג תשלום" }, "accountCredit": { "message": "מאזן החשבון", @@ -2702,10 +2739,10 @@ "message": "1 ג'יגה של מקום אחסון מוצפן עבור קבצים מצורפים." }, "premiumSignUpTwoStepOptions": { - "message": "Proprietary two-step login options such as YubiKey and Duo." + "message": "אפשרויות כניסה דו־שלבית קנייניות כגון YubiKey ו־Duo." }, "premiumSignUpEmergency": { - "message": "Emergency access" + "message": "גישת חירום" }, "premiumSignUpReports": { "message": "היגיינת סיסמאות, מצב בריאות החשבון, ודיווחים מעודכנים על פרצות חדשות בכדי לשמור על הכספת שלך בטוחה." @@ -2729,7 +2766,7 @@ } }, "premiumPriceWithFamilyPlan": { - "message": "Go premium for just $PRICE$ /year, or get premium accounts for $FAMILYPLANUSERCOUNT$ users and unlimited family sharing with a ", + "message": "עבור לפרימיום תמורת $PRICE$ /שנה בלבד, או קבל חשבונות פרימיום ל־$FAMILYPLANUSERCOUNT$ משתמשים ושיתוף משפחתי בלתי מוגבל עם ", "placeholders": { "price": { "content": "$1", @@ -2742,7 +2779,7 @@ } }, "bitwardenFamiliesPlan": { - "message": "Bitwarden Families plan." + "message": "תוכנית Bitwarden למשפחות." }, "addons": { "message": "תוספים" @@ -2796,7 +2833,7 @@ "message": "שנה" }, "yr": { - "message": "yr" + "message": "שנה" }, "month": { "message": "חודש" @@ -2818,7 +2855,7 @@ } }, "paymentChargedWithUnpaidSubscription": { - "message": "Your payment method will be charged for any unpaid subscriptions." + "message": "שיטת התשלום שלך תחויב עבור כל מנוי שלא שולם." }, "paymentChargedWithTrial": { "message": "התוכנית שבחרת מגיעה עם 7 ימי נסיון חינמי. שיטת התשלום שבחרת לא תחויב עד לתום תקופת הנסיון. ביצוע החשבון יתבצע על בסיס מתחדש בכל $INTERVAL$. באפשרותך לבטל בכל עת." @@ -2827,10 +2864,10 @@ "message": "פרטי תשלום" }, "billingInformation": { - "message": "Billing information" + "message": "פרטי חיוב" }, "billingTrialSubLabel": { - "message": "Your payment method will not be charged during the 7 day free trial." + "message": "שיטת התשלום שלך לא תחויב במהלך 7 ימי הניסיון בחינם." }, "creditCard": { "message": "כרטיס אשראי" @@ -2842,7 +2879,7 @@ "message": "בטל מנוי" }, "subscriptionExpiration": { - "message": "Subscription expiration" + "message": "תפוגת מנוי" }, "subscriptionCanceled": { "message": "המנוי בוטל." @@ -2884,7 +2921,7 @@ "message": "הורד רישיון" }, "viewBillingToken": { - "message": "View Billing Token" + "message": "הצג אסימון חיוב" }, "updateLicense": { "message": "עדכן רישיון" @@ -2893,7 +2930,7 @@ "message": "ניהול מנוי" }, "launchCloudSubscription": { - "message": "Launch Cloud Subscription" + "message": "הפעל מנוי ענן" }, "storage": { "message": "אחסון" @@ -2933,10 +2970,10 @@ "message": "חשבוניות" }, "noUnpaidInvoices": { - "message": "No unpaid invoices." + "message": "אין חשבוניות לא משולמות." }, "noPaidInvoices": { - "message": "No paid invoices." + "message": "אין חשבוניות משולמות." }, "paid": { "message": "שולם", @@ -2995,7 +3032,7 @@ "message": "צור קשר עם התמיכה" }, "contactSupportShort": { - "message": "Contact Support" + "message": "פנה לתמיכה" }, "updatedPaymentMethod": { "message": "שיטת תשלום עודכנה." @@ -3099,7 +3136,7 @@ "message": "לעסקים וקבוצות ארגוניות." }, "planNameTeamsStarter": { - "message": "Teams Starter" + "message": "צוותים מתחילים" }, "planNameEnterprise": { "message": "ארגון" @@ -3204,7 +3241,7 @@ } }, "trialThankYou": { - "message": "Thanks for signing up for Bitwarden for $PLAN$!", + "message": "תודה שנרשמת ל־Bitwarden עבור $PLAN$!", "placeholders": { "plan": { "content": "$1", @@ -3213,7 +3250,7 @@ } }, "trialSecretsManagerThankYou": { - "message": "Thanks for signing up for Bitwarden Secrets Manager for $PLAN$!", + "message": "תודה שנרשמת למנהל הסודות של Bitwarden עבור $PLAN$!", "placeholders": { "plan": { "content": "$1", @@ -3222,7 +3259,7 @@ } }, "trialPaidInfoMessage": { - "message": "Your $PLAN$ 7 day free trial will be converted to a paid subscription after 7 days.", + "message": "7 ימי הניסיון בחינם של ה־$PLAN$ שלך יומרו למנוי בתשלום לאחר 7 ימים.", "placeholders": { "plan": { "content": "$1", @@ -3231,7 +3268,7 @@ } }, "trialConfirmationEmail": { - "message": "We've sent a confirmation email to your team's billing email at " + "message": "שלחנו דוא\"ל אימות לדוא\"ל החיוב של הצוות שלך ב־" }, "monthly": { "message": "חודשי" @@ -3240,7 +3277,7 @@ "message": "שנתי" }, "annual": { - "message": "Annual" + "message": "שנתי" }, "basePrice": { "message": "מחיר בסיסי" @@ -3285,7 +3322,7 @@ "message": "מדיניות" }, "singleSignOn": { - "message": "Single sign-on" + "message": "כניסה יחידה" }, "editPolicy": { "message": "ערוך מדיניות" @@ -3306,7 +3343,7 @@ "message": "האם אתה בטוח שברצונך למחוק קבוצה זו?" }, "deleteMultipleGroupsConfirmation": { - "message": "Are you sure you want to delete the following $QUANTITY$ group(s)?", + "message": "האם אתה בטח שברצונך להסיר את $QUANTITY$ הקבוצות הבאות?", "placeholders": { "quantity": { "content": "$1", @@ -3318,13 +3355,13 @@ "message": "האם אתה בטוח שברצונך להסיר משתמש זה?" }, "removeOrgUserConfirmation": { - "message": "When a member is removed, they no longer have access to organization data and this action is irreversible. To add the member back to the organization, they must be invited and onboarded again." + "message": "כאשר חבר מוסר, אין לו יותר גישה לנתוני הארגון ופעולה זו היא בלתי הפיכה. כדי להוסיף את החבר בחזרה לארגון, יש להזמין ולקלוט אותו שוב." }, "revokeUserConfirmation": { - "message": "When a member is revoked, they no longer have access to organization data. To quickly restore member access, go to the Revoked tab." + "message": "כאשר חבר מבוטל, אין לו יותר גישה לנתוני הארגון. כדי לשחזר במהירות גישת חבר, עבור לכרטיסייה 'מבוטל'." }, "removeUserConfirmationKeyConnector": { - "message": "Warning! This user requires Key Connector to manage their encryption. Removing this user from your organization will permanently deactivate their account. This action cannot be undone. Do you want to proceed?" + "message": "אזהרה! משתמש זה דורש Key Connector כדי לנהל את ההצפנה שלו. הסרת משתמש זה מהארגון שלך תשבית לצמיתות את החשבון שלו. פעולה זו אינה ניתנת לביטול. האם ברצונך להמשיך?" }, "externalId": { "message": "מזהה חיצוני" @@ -3333,7 +3370,7 @@ "message": "ניתן להשתמש במזהה החיצוני כקישור בין משאב זה למערכת חיצונית כמו לדוגמא תיקיית משתמש." }, "nestCollectionUnder": { - "message": "Nest collection under" + "message": "לקנן אוסף תחת" }, "accessControl": { "message": "בקרת גישה" @@ -3351,16 +3388,16 @@ "message": "ערוך אוסף" }, "collectionInfo": { - "message": "Collection info" + "message": "פרטי אוסף" }, "deleteCollectionConfirmation": { "message": "האם אתה בטוח שברצונך למחוק אוסף זה?" }, "editMember": { - "message": "Edit member" + "message": "ערוך חבר" }, "fieldOnTabRequiresAttention": { - "message": "A field on the '$TAB$' tab requires your attention.", + "message": "שדה בכרטיסיית ה־'$TAB$' דורש את תשומת לבך.", "placeholders": { "tab": { "content": "$1", @@ -3381,10 +3418,10 @@ } }, "inviteSingleEmailDesc": { - "message": "You have 1 invite remaining." + "message": "נותרה לך הזמנה 1." }, "inviteZeroEmailDesc": { - "message": "You have 0 invites remaining." + "message": "נותרו לך 0 הזמנות." }, "userUsingTwoStep": { "message": "משתמש זה הפעיל כניסה דו שלבית כדי להגן על חשבונו." @@ -3399,7 +3436,7 @@ "message": "אושר" }, "clientOwnerEmail": { - "message": "Client owner email" + "message": "דוא\"ל בעל לקוח" }, "owner": { "message": "בעלים" @@ -3408,7 +3445,7 @@ "message": "החשבון בעל ההרשאות הגבוהות ביותר שיכול לנהל את כל ההיבטים של הארגון." }, "clientOwnerDesc": { - "message": "This user should be independent of the Provider. If the Provider is disassociated with the organization, this user will maintain ownership of the organization." + "message": "על משתמש זה להיות עצמאי מהספק. אם הספק מנותק מהארגון, משתמש זה ישמור על הבעלות של הארגון." }, "admin": { "message": "מנהל" @@ -3426,10 +3463,10 @@ "message": "הכל" }, "addAccess": { - "message": "Add Access" + "message": "הוסף גישה" }, "addAccessFilter": { - "message": "Add Access Filter" + "message": "הוסף מסנן גישה" }, "refresh": { "message": "רענן" @@ -3465,10 +3502,10 @@ "message": "CLI" }, "bitWebVault": { - "message": "Bitwarden Web vault" + "message": "כספת הרשת של Bitwarden" }, "bitSecretsManager": { - "message": "Bitwarden Secrets Manager" + "message": "מנהל הסודות של Bitwarden" }, "loggedIn": { "message": "מחובר." @@ -3492,13 +3529,13 @@ "message": "נסיונות כניסה עם אימות דו שלבי נכשלו." }, "incorrectPassword": { - "message": "Incorrect password" + "message": "סיסמה שגויה" }, "incorrectCode": { - "message": "Incorrect code" + "message": "קוד שגוי" }, "incorrectPin": { - "message": "Incorrect PIN" + "message": "PIN שגוי" }, "pin": { "message": "PIN", @@ -3541,7 +3578,7 @@ } }, "movedItemIdToOrg": { - "message": "Moved item $ID$ to an organization.", + "message": "העביר פריט $ID$ אל ארגון.", "placeholders": { "id": { "content": "$1", @@ -3550,10 +3587,10 @@ } }, "viewAllLogInOptions": { - "message": "View all log in options" + "message": "הצג את כל אפשרויות הכניסה" }, "viewAllLoginOptions": { - "message": "View all log in options" + "message": "הצג את כל אפשרויות הכניסה" }, "viewedItemId": { "message": "פריט שנצפה $ID$.", @@ -3583,7 +3620,7 @@ } }, "viewedCardNumberItemId": { - "message": "Viewed Card Number for item $ID$.", + "message": "צפה במספר כרטיס עבור פריט $ID$.", "placeholders": { "id": { "content": "$1", @@ -3601,7 +3638,7 @@ } }, "viewCollectionWithName": { - "message": "View collection - $NAME$", + "message": "הצג אוסף - $NAME$", "placeholders": { "name": { "content": "$1", @@ -3610,7 +3647,7 @@ } }, "editItemWithName": { - "message": "Edit item - $NAME$", + "message": "ערוך פריט - $NAME$", "placeholders": { "name": { "content": "$1", @@ -3673,7 +3710,7 @@ } }, "deletedCollections": { - "message": "Deleted collections" + "message": "אוספים שנמחקו" }, "deletedCollectionId": { "message": "אוסף שנמחק $ID$.", @@ -3721,7 +3758,7 @@ } }, "deletedManyGroups": { - "message": "Deleted $QUANTITY$ group(s).", + "message": "נמחקו $QUANTITY$ אוספ(ים).", "placeholders": { "quantity": { "content": "$1", @@ -3739,7 +3776,7 @@ } }, "removeUserIdAccess": { - "message": "Remove $ID$ access", + "message": "הסר את הגישה של $ID$", "placeholders": { "id": { "content": "$1", @@ -3748,7 +3785,7 @@ } }, "revokedUserId": { - "message": "Revoked organization access for $ID$.", + "message": "הגישה לארגון בוטלה עבור $ID$.", "placeholders": { "id": { "content": "$1", @@ -3757,7 +3794,7 @@ } }, "restoredUserId": { - "message": "Restored organization access for $ID$.", + "message": "הגישה לארגון שוחזרה עבור $ID$.", "placeholders": { "id": { "content": "$1", @@ -3766,7 +3803,7 @@ } }, "revokeUserId": { - "message": "Revoke $ID$ access", + "message": "בטל את הגישה של $ID$", "placeholders": { "id": { "content": "$1", @@ -3838,10 +3875,10 @@ } }, "unlinkedSso": { - "message": "Unlinked SSO." + "message": "SSO נותק." }, "unlinkedSsoUser": { - "message": "Unlinked SSO for user $ID$.", + "message": "SSO נותק עבור משתמש $ID$.", "placeholders": { "id": { "content": "$1", @@ -3850,7 +3887,7 @@ } }, "createdOrganizationId": { - "message": "Created organization $ID$.", + "message": "נוצר ארגון $ID$.", "placeholders": { "id": { "content": "$1", @@ -3859,7 +3896,7 @@ } }, "addedOrganizationId": { - "message": "Added organization $ID$.", + "message": "נוסף ארגון $ID$.", "placeholders": { "id": { "content": "$1", @@ -3868,7 +3905,7 @@ } }, "removedOrganizationId": { - "message": "Removed organization $ID$.", + "message": "הוסר ארגון $ID$.", "placeholders": { "id": { "content": "$1", @@ -3877,7 +3914,7 @@ } }, "accessedClientVault": { - "message": "Accessed $ID$ organization vault.", + "message": "ניגש אל כספת הארגון של $ID$.", "placeholders": { "id": { "content": "$1", @@ -3889,22 +3926,22 @@ "message": "מכשיר" }, "loginStatus": { - "message": "Login status" + "message": "מצב כניסה" }, "firstLogin": { - "message": "First login" + "message": "כניסה ראשונה" }, "trusted": { - "message": "Trusted" + "message": "מהימן" }, "needsApproval": { - "message": "Needs approval" + "message": "צריך אישור" }, "areYouTryingtoLogin": { - "message": "Are you trying to log in?" + "message": "האם את/ה מנסה להיכנס?" }, "logInAttemptBy": { - "message": "Login attempt by $EMAIL$", + "message": "ניסיון כניסה על ידי $EMAIL$", "placeholders": { "email": { "content": "$1", @@ -3913,22 +3950,22 @@ } }, "deviceType": { - "message": "Device Type" + "message": "סוג מכשיר" }, "ipAddress": { - "message": "IP Address" + "message": "‏כתובת IP" }, "confirmLogIn": { - "message": "Confirm login" + "message": "אשר כניסה" }, "denyLogIn": { - "message": "Deny login" + "message": "דחה כניסה" }, "thisRequestIsNoLongerValid": { - "message": "This request is no longer valid." + "message": "בקשה זו אינה תקפה עוד." }, "logInConfirmedForEmailOnDevice": { - "message": "Login confirmed for $EMAIL$ on $DEVICE$", + "message": "הכניסה אושרה עבור $EMAIL$ ב־$DEVICE$", "placeholders": { "email": { "content": "$1", @@ -3941,16 +3978,16 @@ } }, "youDeniedALogInAttemptFromAnotherDevice": { - "message": "You denied a login attempt from another device. If this really was you, try to log in with the device again." + "message": "דחית ניסיון כניסה ממכשיר אחר. אם זה באמת היית אתה, נסה להיכנס עם המכשיר שוב." }, "loginRequestHasAlreadyExpired": { - "message": "Login request has already expired." + "message": "כבר פג תוקפה של בקשת הכניסה." }, "justNow": { - "message": "Just now" + "message": "זה עתה" }, "requestedXMinutesAgo": { - "message": "Requested $MINUTES$ minutes ago", + "message": "התבקשה לפני $MINUTES$ דקות", "placeholders": { "minutes": { "content": "$1", @@ -3959,25 +3996,25 @@ } }, "creatingAccountOn": { - "message": "Creating account on" + "message": "יוצר חשבון ב־" }, "checkYourEmail": { - "message": "Check your email" + "message": "בדוק את הדוא\"ל שלך" }, "followTheLinkInTheEmailSentTo": { - "message": "Follow the link in the email sent to" + "message": "עקוב אחר הקישור בדוא\"ל הנשלח אל" }, "andContinueCreatingYourAccount": { - "message": "and continue creating your account." + "message": "והמשך ליצור את החשבון שלך." }, "noEmail": { - "message": "No email?" + "message": "אין דוא\"ל?" }, "goBack": { - "message": "Go back" + "message": "חזור" }, "toEditYourEmailAddress": { - "message": "to edit your email address." + "message": "כדי לערוך את כתובת הדוא\"ל שלך." }, "view": { "message": "צפה" @@ -4061,7 +4098,7 @@ "message": "כתובת האימייל שלך אומתה." }, "emailVerifiedV2": { - "message": "Email verified" + "message": "דוא\"ל אומת" }, "emailVerifiedFailed": { "message": "לא ניתן לאמת את האימייל שלך. נסה לשלוח מייל אימות חדש." @@ -4076,13 +4113,19 @@ "message": "עדכן דפדפן" }, "generatingRiskInsights": { - "message": "Generating your risk insights..." + "message": "יוצר את תובנות הסיכון שלך..." }, "updateBrowserDesc": { "message": "אתה משתמש בדפדפן אינטרנט שאיננו נתמך. כספת הרשת עלולה שלא לפעול כראוי." }, + "youHaveAPendingLoginRequest": { + "message": "יש לך בקשת לכניסה ממתינה ממכשיר אחר." + }, + "reviewLoginRequest": { + "message": "סקור בקשת כניסה" + }, "freeTrialEndPromptCount": { - "message": "Your free trial ends in $COUNT$ days.", + "message": "הניסיון החינמי שלך מסתיים בעוד $COUNT$ ימים.", "placeholders": { "count": { "content": "$1", @@ -4091,7 +4134,7 @@ } }, "freeTrialEndPromptMultipleDays": { - "message": "$ORGANIZATION$, your free trial ends in $COUNT$ days.", + "message": "$ORGANIZATION$, הניסיון החינמי שלך מסתיים בעוד $COUNT$ ימים.", "placeholders": { "count": { "content": "$2", @@ -4104,7 +4147,7 @@ } }, "freeTrialEndPromptTomorrow": { - "message": "$ORGANIZATION$, your free trial ends tomorrow.", + "message": "$ORGANIZATION$, הניסיון החינמי שלך מסתיים מחר.", "placeholders": { "organization": { "content": "$1", @@ -4113,10 +4156,10 @@ } }, "freeTrialEndPromptTomorrowNoOrgName": { - "message": "Your free trial ends tomorrow." + "message": "הניסיון החינמי שלך מסתיים מחר." }, "freeTrialEndPromptToday": { - "message": "$ORGANIZATION$, your free trial ends today.", + "message": "$ORGANIZATION$, הניסיון החינמי שלך מסתיים היום.", "placeholders": { "organization": { "content": "$1", @@ -4125,16 +4168,16 @@ } }, "freeTrialEndingTodayWithoutOrgName": { - "message": "Your free trial ends today." + "message": "הניסיון החינמי שלך מסתיים היום." }, "clickHereToAddPaymentMethod": { - "message": "Click here to add a payment method." + "message": "לחץ כאן כדי להוסיף שיטת תשלום." }, "joinOrganization": { "message": "הצטרף לארגון" }, "joinOrganizationName": { - "message": "Join $ORGANIZATIONNAME$", + "message": "הצטרף אל $ORGANIZATIONNAME$", "placeholders": { "organizationName": { "content": "$1", @@ -4146,7 +4189,7 @@ "message": "הוזמנת להצטרף לארגון הרשום לעיל. בכדי להסכים, עליך להתחבר או ליצור חשבון Bitwarden חדש." }, "finishJoiningThisOrganizationBySettingAMasterPassword": { - "message": "Finish joining this organization by setting a master password." + "message": "סיים להצטרף לארגון זה על ידי הגדרת סיסמה ראשית." }, "inviteAccepted": { "message": "ההזמנה התקבלה" @@ -4155,7 +4198,7 @@ "message": "תוכל לקבל גישה לארגון זה כשאחד המנהלים יאשר את החברות שלך. נשלח לך מייל כשזה יקרה." }, "inviteInitAcceptedDesc": { - "message": "You can now access this organization." + "message": "אתה יכול עכשיו לגשת אל ארגון זה." }, "inviteAcceptFailed": { "message": "לא ניתן לקבל את ההזמנה. בקש ממנהל הארגון שישלח הזמנה חדשה." @@ -4176,7 +4219,7 @@ "message": "אם אין באפשרות לגשת לחשבונך דרך השיטות הדו-שלביות הרגילות, תוכל להשתמש בקוד לשחזור האימות הדו שלבי בכדי לבטל את כל ספקי האימות הדו שלבי בחשבונך." }, "logInBelowUsingYourSingleUseRecoveryCode": { - "message": "Log in below using your single-use recovery code. This will turn off all two-step providers on your account." + "message": "היכנס למטה באמצעות קוד השחזור החד־פעמי שלך. זה יכבה את כל הספקים הדו־שלביים בחשבון שלך." }, "recoverAccountTwoStep": { "message": "שחזר כניסה דו שלבית לחשבון" @@ -4197,19 +4240,19 @@ "message": "ביקשת למחוק את חשבון ה-Bitwarden שלך. לחץ על הכפתור למטה בכדי לאשר זאת." }, "deleteRecoverOrgConfirmDesc": { - "message": "You have requested to delete your Bitwarden organization." + "message": "ביקשת למחוק את ארגון ה־Bitwarden שלך." }, "myOrganization": { "message": "הארגון שלי" }, "organizationInfo": { - "message": "Organization info" + "message": "מידע על הארגון" }, "deleteOrganization": { "message": "מחק ארגון" }, "deletingOrganizationContentWarning": { - "message": "Enter the master password to confirm deletion of $ORGANIZATION$ and all associated data. Vault data in $ORGANIZATION$ includes:", + "message": "הזן את הסיסמה הראשית כדי לאשר את מחיקה של $ORGANIZATION$ וכל הנתונים המשויכים. נתוני כספת ב־$ORGANIZATION$ כוללים:", "placeholders": { "organization": { "content": "$1", @@ -4218,10 +4261,10 @@ } }, "deletingOrganizationActiveUserAccountsWarning": { - "message": "User accounts will remain active after deletion but will no longer be associated to this organization." + "message": "חשבונות משתמשים יישארו פעילים לאחר המחיקה אבל לא יהיו משויכים יותר אל ארגון זה." }, "deletingOrganizationIsPermanentWarning": { - "message": "Deleting $ORGANIZATION$ is permanent and irreversible.", + "message": "מחיקת $ORGANIZATION$ היא לצמיתות ובלתי הפיכה.", "placeholders": { "organization": { "content": "$1", @@ -4323,17 +4366,17 @@ "message": "הכנס את מספר ההתקנה שלך" }, "limitSubscriptionDesc": { - "message": "Set a seat limit for your subscription. Once this limit is reached, you will not be able to invite new members." + "message": "הגדר מגבלת מקום עבור המנוי שלך. ברגע שמגבלה זו תושג, לא תוכל להזמין חברים חדשים." }, "limitSmSubscriptionDesc": { - "message": "Set a seat limit for your Secrets Manager subscription. Once this limit is reached, you will not be able to invite new members." + "message": "הגדר מגבלת מקום עבור המנוי של מנהל הסודות שלך. ברגע שמגבלה זו תושג, לא תוכל להזמין חברים חדשים." }, "maxSeatLimit": { - "message": "Seat Limit (optional)", + "message": "מגבלת מקום (אופציונלי)", "description": "Upper limit of seats to allow through autoscaling" }, "maxSeatCost": { - "message": "Max potential seat cost" + "message": "עלות מקום פוטנציאלית מרבית" }, "addSeats": { "message": "הוסף כסאות", @@ -4344,7 +4387,7 @@ "description": "Seat = User Seat" }, "subscriptionDesc": { - "message": "Adjustments to your subscription will result in prorated changes to your billing totals. If newly invited users exceed your subscription seats, you will immediately receive a prorated charge for the additional users." + "message": "התאמות למנוי שלך יגרמו שינויים יחסיים לסך כל החיובים שלך. אם משתמשים חדשים שהוזמנו חורגים ממקומות המנוי שלך, תקבל באופן מיידי חיוב יחסי עבור המשתמשים הנוספים." }, "subscriptionUserSeats": { "message": "המנוי שלך מתיר עד $COUNT$ משתמשים.", @@ -4356,34 +4399,34 @@ } }, "limitSubscription": { - "message": "Limit subscription (optional)" + "message": "הגבל מנוי (אופציונלי)" }, "subscriptionSeats": { - "message": "Subscription seats" + "message": "מקומות מנוי" }, "subscriptionUpdated": { - "message": "Subscription updated" + "message": "המנוי עודכן" }, "subscribedToSecretsManager": { - "message": "Subscription updated. You now have access to Secrets Manager." + "message": "המנוי עודכן. עכשיו יש לך גישה למנהל הסודות." }, "additionalOptions": { - "message": "Additional options" + "message": "אפשרויות נוספות" }, "additionalOptionsDesc": { - "message": "For additional help in managing your subscription, please contact Customer Support." + "message": "לעזרה נוספת בניהול המנוי שלך, נא לפנות לתמיכת הלקוחות." }, "subscriptionUserSeatsUnlimitedAutoscale": { - "message": "Adjustments to your subscription will result in prorated changes to your billing totals. If newly invited members exceed your subscription seats, you will immediately receive a prorated charge for the additional members." + "message": "התאמות למנוי שלך יגרמו שינויים יחסיים לסך כל החיובים שלך. אם חברים חדשים שהוזמנו חורגים ממקומות המנוי שלך, תקבל באופן מיידי חיוב יחסי עבור החברים הנוספים." }, "smStandaloneTrialSeatCountUpdateMessageFragment1": { - "message": "If you want to add additional" + "message": "אם אתה רוצה להוסיף מקומות נוספים של" }, "smStandaloneTrialSeatCountUpdateMessageFragment2": { - "message": "seats without the bundled offer, please contact" + "message": "ללא ההצעה המצורפת, נא לפנות אל" }, "subscriptionUserSeatsLimitedAutoscale": { - "message": "Adjustments to your subscription will result in prorated changes to your billing totals. If newly invited members exceed your subscription seats, you will immediately receive a prorated charge for the additional members until your $MAX$ seat limit is reached.", + "message": "התאמות למנוי שלך יגרמו שינויים יחסיים לסך כל החיובים שלך. אם חברים חדשים שהוזמנו חורגים ממקומות המנוי שלך, תקבל באופן מיידי חיוב יחסי עבור החברים הנוספים עד שתושג מגבלת $MAX$ המקומות שלך.", "placeholders": { "max": { "content": "$1", @@ -4392,7 +4435,7 @@ } }, "subscriptionUserSeatsWithoutAdditionalSeatsOption": { - "message": "You can invite up to $COUNT$ members for no additional charge. Contact Customer Support to upgrade your plan and invite more members.", + "message": "אתה יכול להזמין עד $COUNT$ חברים ללא תשלום נוסף. פנה אל תמיכת לקוחות כדי לשדרג את התוכנית שלך ולהזמין עוד חברים.", "placeholders": { "count": { "content": "$1", @@ -4401,7 +4444,7 @@ } }, "subscriptionFreePlan": { - "message": "You cannot invite more than $COUNT$ members without upgrading your plan.", + "message": "אתה לא יכול להזמין יותר מ־$COUNT$ חברים מבלי לשדרג את התוכנית שלך.", "placeholders": { "count": { "content": "$1", @@ -4410,7 +4453,7 @@ } }, "subscriptionUpgrade": { - "message": "You cannot invite more than $COUNT$ members without upgrading your plan.", + "message": "אתה לא יכול להזמין יותר מ־$COUNT$ חברים מבלי לשדרג את התוכנית שלך.", "placeholders": { "count": { "content": "$1", @@ -4419,7 +4462,7 @@ } }, "subscriptionSponsoredFamiliesPlan": { - "message": "Your subscription allows for a total of $COUNT$ members. Your plan is sponsored and billed to an external organization.", + "message": "המנוי שלך מאפשר סך הכל $COUNT$ חברים. התוכנית שלך ממומנת ומחויבת לארגון חיצוני.", "placeholders": { "count": { "content": "$1", @@ -4428,7 +4471,7 @@ } }, "subscriptionMaxReached": { - "message": "Adjustments to your subscription will result in prorated changes to your billing totals. You cannot invite more than $COUNT$ members without increasing your subscription seats.", + "message": "התאמות למנוי שלך יגרמו שינויים יחסיים לסך כל החיובים שלך. אתה לא יכול להזמין יותר מ־$COUNT$ חברים מבלי להגדיל את מקומות המנוי שלך.", "placeholders": { "count": { "content": "$1", @@ -4437,7 +4480,7 @@ } }, "subscriptionSeatMaxReached": { - "message": "You cannot invite more than $COUNT$ members without increasing your subscription seats.", + "message": "אתה לא יכול להזמין יותר מ־$COUNT$ חברים מבלי להגדיל את מקומות המנוי שלך.", "placeholders": { "count": { "content": "$1", @@ -4467,10 +4510,10 @@ } }, "encryptionKeyUpdateCannotProceed": { - "message": "Encryption key update cannot proceed" + "message": "עדכון מפתח הצפנה לא יכול להמשיך" }, "editFieldLabel": { - "message": "Edit $LABEL$", + "message": "ערוך $LABEL$", "placeholders": { "label": { "content": "$1", @@ -4479,7 +4522,7 @@ } }, "reorderToggleButton": { - "message": "Reorder $LABEL$. Use arrow key to move item up or down.", + "message": "סדר מחדש את $LABEL$. השתמש במקש חץ כדי להעביר את הפריט למעלה או למטה.", "placeholders": { "label": { "content": "$1", @@ -4488,7 +4531,7 @@ } }, "keyUpdateFoldersFailed": { - "message": "When updating your encryption key, your folders could not be decrypted. To continue with the update, your folders must be deleted. No vault items will be deleted if you proceed." + "message": "בעת עדכון מפתח ההצפנה שלך, התיקיות שלך לא היה ניתנות לפענוח. כדי להמשיך עם העדכון, התיקיות שלך מוכרחות להימחק. לא יימחקו פריטי כספת אם תמשיך." }, "keyUpdated": { "message": "המפתח עודכן" @@ -4497,13 +4540,13 @@ "message": "עדכן מפתח הצפנה" }, "updateEncryptionSchemeDesc": { - "message": "We've changed the encryption scheme to provide better security. Update your encryption key now by entering your master password below." + "message": "שינינו את סכמת ההצפנה כדי לספק אבטחה טובה יותר. עדכן את מפתח ההצפנה שלך כעת על ידי הזנת הסיסמה הראשית שלך למטה." }, "updateEncryptionKeyWarning": { "message": "לאחר עדכון מפתחות ההצפנה שלך, תתבקש לצאת ולהכנס שוב בכל אפליקציות Bitwarden שאתה משתמש בהן (האפליקציה לפלאפון או ההרחבה לדפדפן). אם לא תצא ותכנס שוב (פעולת הכניסה מורידה את המפתח החדש), יתכן שתתקל במידע שגוי. אנו ננסה לגרום ליציאה אוטומטית, אך יתכן שהדבר לא יקרה מיידית." }, "updateEncryptionKeyExportWarning": { - "message": "Any encrypted exports that you have saved will also become invalid." + "message": "כל הייצואים המוצפנים ששמרת יהפכו גם הם ללא תקפים." }, "subscription": { "message": "מנוי" @@ -4533,25 +4576,25 @@ "message": "לא בחרת כלום." }, "receiveMarketingEmailsV2": { - "message": "Get advice, announcements, and research opportunities from Bitwarden in your inbox." + "message": "קבל עצות, הכרזות, והזדמנויות מחקר מאת Bitwarden בדואר הנכנס שלך." }, "unsubscribe": { - "message": "Unsubscribe" + "message": "בטל הרשמה" }, "atAnyTime": { - "message": "at any time." + "message": "בכל זמן." }, "byContinuingYouAgreeToThe": { - "message": "By continuing, you agree to the" + "message": "על ידי המשך, אתה מסכים ל" }, "and": { - "message": "and" + "message": "ו" }, "acceptPolicies": { "message": "סימון תיבה זו מהווה את הסכמתך לתנאים הבאים:" }, "acceptPoliciesRequired": { - "message": "Terms of Service and Privacy Policy have not been acknowledged." + "message": "תנאי השימוש ומדיניות הפרטיות לא הוכרו." }, "termsOfService": { "message": "תנאי שירות" @@ -4566,13 +4609,13 @@ "message": "משך זמן מירבי עבור חיבור לכספת" }, "vaultTimeout1": { - "message": "Timeout" + "message": "פסק זמן" }, "vaultTimeoutDesc": { "message": "בחר כמה זמן יעבור כדי שהכספת תסגר לאחר חוסר פעילות ותבצע את הפעולה שנבחרה." }, "vaultTimeoutLogoutDesc": { - "message": "Choose when your vault will be logged out." + "message": "בחר מתי הכספת שלך תסגר." }, "oneMinute": { "message": "דקה אחת" @@ -4600,7 +4643,7 @@ "description": "ex. Date this item was updated" }, "dateCreated": { - "message": "Created", + "message": "נוצר", "description": "ex. Date this item was created" }, "datePasswordUpdated": { @@ -4611,19 +4654,19 @@ "message": "הארגון הושבת." }, "secretsAccessSuspended": { - "message": "Suspended organizations cannot be accessed. Please contact your organization owner for assistance." + "message": "לא ניתן לגשת אל ארגונים מושעים. נא לפנות לבעל הארגון שלך עבור סיוע." }, "secretsCannotCreate": { - "message": "Secrets cannot be created in suspended organizations. Please contact your organization owner for assistance." + "message": "לא ניתן ליצור סודות בארגונים מושעים. נא לפנות לבעל הארגון שלך עבור סיוע." }, "projectsCannotCreate": { - "message": "Projects cannot be created in suspended organizations. Please contact your organization owner for assistance." + "message": "לא ניתן ליצור פרויקטים בארגונים מושעים. נא לפנות אל בעל הארגון שלך עבור סיוע." }, "serviceAccountsCannotCreate": { - "message": "Service accounts cannot be created in suspended organizations. Please contact your organization owner for assistance." + "message": "לא ניתן ליצור חשבונות שירות בארגונים מושעים. נא לפנות אל בעל הארגון שלך עבור סיוע." }, "disabledOrganizationFilterError": { - "message": "Items in suspended organizations cannot be accessed. Contact your organization owner for assistance." + "message": "לא ניתן לגשת לפריטים בארגון מושעה. פנה אל בעל הארגון שלך עבור סיוע." }, "licenseIsExpired": { "message": "תוקף הרשיון הסתיים." @@ -4635,7 +4678,7 @@ "message": "נבחר\\ו" }, "recommended": { - "message": "Recommended" + "message": "מומלץ" }, "ownership": { "message": "בעלות" @@ -4678,7 +4721,7 @@ "message": "לפריט זה יש קובץ מצורף שצריך תיקון." }, "attachmentFixDescription": { - "message": "This attachment uses outdated encryption. Select 'Fix' to download, re-encrypt, and re-upload the attachment." + "message": "קובץ מצורף זה משתמש בהצפנה מיושנת. בחר 'תקן' כדי להוריד, להצפין מחדש, ולהעלות מחדש את הקובץ המצורף." }, "fix": { "message": "תקן", @@ -4696,17 +4739,17 @@ "description": "A 'fingerprint phrase' is a unique word phrase (similar to a passphrase) that a user can use to authenticate their public key with another user, for the purposes of sharing." }, "fingerprintMatchInfo": { - "message": "Please make sure your vault is unlocked and Fingerprint phrase matches the other device." + "message": "נא לוודא שהכספת שלך פתוחה ושביטוי טביעת האצבע תואם את המכשיר האחר." }, "fingerprintPhraseHeader": { - "message": "Fingerprint phrase" + "message": "ביטוי טביעת אצבע" }, "dontAskFingerprintAgain": { "message": "אל תבקש ממני לאמת את משפט טביעת האצבע יותר", "description": "A 'fingerprint phrase' is a unique word phrase (similar to a passphrase) that a user can use to authenticate their public key with another user, for the purposes of sharing." }, "youWillBeNotifiedOnceTheRequestIsApproved": { - "message": "You will be notified once the request is approved" + "message": "תקבל התראה כאשר הבקשה תאושר" }, "free": { "message": "חינם", @@ -4753,13 +4796,22 @@ "message": "שכפול" }, "masterPassPolicyTitle": { - "message": "Master password requirements" + "message": "דרישות סיסמה ראשית" }, "masterPassPolicyDesc": { "message": "קבע דרישות מינימום עבור חוזק הסיסמה הראשית." }, + "passwordStrengthScore": { + "message": "ציון חוזק סיסמה $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "twoStepLoginPolicyTitle": { - "message": "Require two-step login" + "message": "דרוש כניסה דו-שלבית" }, "twoStepLoginPolicyDesc": { "message": "דרוש מהמשתמשים להגדיר כניסה דו-שלבית בחשבונות האישיים שלהם." @@ -4819,7 +4871,7 @@ "message": "מספר מינימאלי של מילים" }, "overridePasswordTypePolicy": { - "message": "Password Type", + "message": "סוג סיסמה", "description": "Name of the password generator policy that overrides the user's password/passphrase selection." }, "userPreference": { @@ -4936,10 +4988,10 @@ "message": "הכנס באמצעות פורטל ההזדהות האחודה (SSO) הארגוני שלך. אנא הזן את המזהה הארגוני שלך כדי להתחיל." }, "singleSignOnEnterOrgIdentifier": { - "message": "Enter your organization's SSO identifier to begin" + "message": "הזן את מזהה ה־SSO של הארגון שלך כדי להתחיל" }, "singleSignOnEnterOrgIdentifierText": { - "message": "To log in with your SSO provider, enter your organization's SSO identifier to begin. You may need to enter this SSO identifier when you log in from a new device." + "message": "כדי להיכנס ספק ה־SSO שלך, הזן את מזהה ה־SSO של הארגון שלך כדי להתחיל. ייתכן שתצטרך להזין את מזהה SSO זה כאשר אתה נכנס ממכשיר חדש." }, "enterpriseSingleSignOn": { "message": "כניסה ארגונית אחודה" @@ -4948,25 +5000,25 @@ "message": "ניתן לסגור את הטאב הנוכחי ולהמשיך את השימוש בתוסף." }, "youSuccessfullyLoggedIn": { - "message": "You successfully logged in" + "message": "נכנסת בהצלחה" }, "thisWindowWillCloseIn5Seconds": { - "message": "This window will automatically close in 5 seconds" + "message": "חלון זה ייסגר באופן אוטומטי בעוד 5 שניות" }, "youMayCloseThisWindow": { - "message": "You may close this window" + "message": "אתה רשאי לסגור חלון זה" }, "includeAllTeamsFeatures": { "message": "כל התכונות הקיימות ב\"צוות\", ובנוסף:" }, "includeAllTeamsStarterFeatures": { - "message": "All Teams Starter features, plus:" + "message": "כל התכונות של צוותים מתחילים, ובנוסף:" }, "chooseMonthlyOrAnnualBilling": { - "message": "Choose monthly or annual billing" + "message": "בחר חיוב חודשי או שנתי" }, "abilityToAddMoreThanNMembers": { - "message": "Ability to add more than $COUNT$ members", + "message": "יכולת להוסיף יותר מ־$COUNT$ חברים", "placeholders": { "count": { "content": "$1", @@ -4987,29 +5039,29 @@ "message": "מזהה הארגון נחוץ." }, "ssoIdentifier": { - "message": "SSO identifier" + "message": "מזהה SSO" }, "ssoIdentifierHintPartOne": { - "message": "Provide this ID to your members to login with SSO. To bypass this step, set up ", + "message": "ספק את המזהה הזה לחברים שלך כדי שיכנסו עם SSO. כדי לעקוף את השלב הזה, הגדר ", "description": "This will be used as part of a larger sentence, broken up to include links. The full sentence will read 'Provide this ID to your members to login with SSO. To bypass this step, set up Domain verification'" }, "unlinkSso": { "message": "נתק SSO" }, "unlinkSsoConfirmation": { - "message": "Are you sure you want to unlink SSO for this organization?" + "message": "האם אתה בטוח שברצונך לנתק SSO עבור ארגון זה?" }, "linkSso": { "message": "חבר SSO" }, "singleOrg": { - "message": "ארגון יחידני" + "message": "ארגון יחיד" }, "singleOrgDesc": { "message": "מונע מהמשתמשים אפשרות צירוף לארגונים אחרים." }, "singleOrgPolicyDesc": { - "message": "Restrict members from joining other organizations. This policy is required for organizations that have enabled domain verification." + "message": "הגבל משתמשים מלהצטרף לארגונים אחרים. מדיניות זו נדרשת עבור ארגונים שאפשרו אימות דומיין." }, "singleOrgBlockCreateMessage": { "message": "לפי מדיניות הארגון שלך, אין באפשרותך להצטרף ליותר מארגון אחד. אנא צור קשר עם מנהלי הארגון שלך, או לחלופין - צור חשבון Bitwarden נפרד." @@ -5018,7 +5070,7 @@ "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." + "message": "חברים שאינם עומדים בדרישות במצב מבוטל עד שיעזבו את כל שאר הארגונים. מנהלים הם פטורים ויכולים לשחזר חברים ברגע שיעמדו בדרישות." }, "requireSso": { "message": "אימות בעזרת כניסה אחודה" @@ -5030,20 +5082,48 @@ "message": "תנאים מקדימים" }, "requireSsoPolicyReq": { - "message": "יש לסמן את מדיניות הארגון היחידני לפני הפעלת מדיניות זו." + "message": "יש להפעיל את המדיניות הארגונית של הארגון היחיד לפני הפעלת מדיניות זו." }, "requireSsoPolicyReqError": { - "message": "מדיניות ארגון יחידני לא הופעלה." + "message": "מדיניות ארגון יחיד לא הוגדרה." }, "requireSsoExemption": { "message": "מנהלי ובעלי הארגון מוחרגים מאכיפת מדיניות זו." }, + "limitSendViews": { + "message": "Limit views" + }, + "limitSendViewsHint": { + "message": "No one can view this Send after the limit is reached.", + "description": "Displayed under the limit views field on Send" + }, + "limitSendViewsCount": { + "message": "$ACCESSCOUNT$ views left", + "description": "Displayed under the limit views field on Send", + "placeholders": { + "accessCount": { + "content": "$1", + "example": "2" + } + } + }, + "sendDetails": { + "message": "Send details", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendTypeTextToShare": { + "message": "Text to share" + }, "sendTypeFile": { "message": "קובץ" }, "sendTypeText": { "message": "טקסט" }, + "sendPasswordDescV3": { + "message": "Add an optional password for recipients to access this Send.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "createSend": { "message": "צור Send חדש", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -5068,58 +5148,39 @@ "message": "מחק Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, - "deleteSendConfirmation": { - "message": "האם אתה בטוח שברצונך למחוק Send זה?", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "whatTypeOfSend": { - "message": "מה סוג הSend?", + "deleteSendPermanentConfirmation": { + "message": "Are you sure you want to permanently delete this Send?", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "deletionDate": { "message": "תאריך מחיקה" }, - "deletionDateDesc": { - "message": "The Send will be permanently deleted on the specified date and time.", + "deletionDateDescV2": { + "message": "The Send will be permanently deleted on this date.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "expirationDate": { "message": "תאריך תפוגה" }, "expirationDateDesc": { - "message": "If set, access to this Send will expire on the specified date and time.", + "message": "אם מוגדר, גישה לסֵנְד זה תפוג בתאריך ובשעה שצוינו.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "maxAccessCount": { "message": "כמות גישות מקסימלית" }, - "maxAccessCountDesc": { - "message": "If set, users will no longer be able to access this Send once the maximum access count is reached.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "currentAccessCount": { - "message": "כמות גישות נוכחית" - }, - "sendPasswordDesc": { - "message": "Optionally require a password for users to access this Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendNotesDesc": { - "message": "Private notes about this Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "disabled": { "message": "מבוטל" }, "revoked": { - "message": "Revoked" + "message": "מבוטל" }, "sendLink": { "message": "לינק לSend", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "copyLink": { - "message": "Copy link" + "message": "העתק קישור" }, "copySendLink": { "message": "העתק לינק לSend", @@ -5134,23 +5195,19 @@ "removePasswordConfirmation": { "message": "האם אתה בטוח שברצונך להסיר את הסיסמה?" }, - "hideEmail": { - "message": "Hide my email address from recipients." - }, - "disableThisSend": { - "message": "Deactivate this Send so that no one can access it.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "allSends": { "message": "כל הSendים" }, "maxAccessCountReached": { - "message": "Max access count reached", + "message": "מספר הגישות המרבי הושג", "description": "This text will be displayed after a Send has been accessed the maximum amount of times." }, "pendingDeletion": { "message": "ממתין להסרה" }, + "hideTextByDefault": { + "message": "Hide text by default" + }, "expired": { "message": "פג תוקף" }, @@ -5171,14 +5228,14 @@ "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "downloadAttachments": { - "message": "Download attachments" + "message": "הורד קבצים מצורפים" }, "sendAccessUnavailable": { - "message": "The Send you are trying to access does not exist or is no longer available.", + "message": "הסֵנְד שאליו אתה מנסה לגשת אינו קיים או לא זמין יותר.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "missingSendFile": { - "message": "The file associated with this Send could not be found.", + "message": "הקובץ המשויך עם סֵנְד זה לא נמצא.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "noSendsInList": { @@ -5186,64 +5243,64 @@ "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "emergencyAccess": { - "message": "Emergency access" + "message": "גישת חירום" }, "emergencyAccessDesc": { - "message": "Grant and manage emergency access for trusted contacts. Trusted contacts may request access to either View or Takeover your account in case of an emergency. Visit our help page for more information and details into how zero knowledge sharing works." + "message": "הענק ונהל גישת חירום עבור אנשי קשר מהימנים. ייתכן שאנשי קשר מהימנים ידרשו גישה כדי לצפות בחשבון שלך או להשתלט עליו במקרה של מקרה חירום. בקר בעמוד העזרה שלנו עבור מידע נוסף ופרטים על איך שיתוף באפס ידיעה עובד." }, "emergencyAccessOwnerWarning": { - "message": "You are an owner of one or more organizations. If you give takeover access to an emergency contact, they will be able to use all your permissions as owner after a takeover." + "message": "אתה הבעלים של ארגון אחד או יותר. אם תתן גישת השתלטות לאיש קשר לשעת חירום, הוא יוכל להשתמש בכל ההרשאות שלך כבעלים לאחר ההשתלטות." }, "trustedEmergencyContacts": { - "message": "Trusted emergency contacts" + "message": "אנשי קשר לשעת חירום מהימנים" }, "noTrustedContacts": { - "message": "You have not added any emergency contacts yet, invite a trusted contact to get started." + "message": "עדיין לא הוספת איש קשר לשעת חירום, הזמן איש קשר מהימן כדי להתחיל." }, "addEmergencyContact": { - "message": "Add emergency contact" + "message": "הוסף איש קשר לשעת חירום" }, "designatedEmergencyContacts": { - "message": "Designated as emergency contact" + "message": "מונה כאיש קשר לשעת חירום" }, "noGrantedAccess": { - "message": "You have not been designated as an emergency contact for anyone yet." + "message": "עדיין אף אחד לא מינה אותך כאיש קשר לשעת חירום." }, "inviteEmergencyContact": { - "message": "Invite emergency contact" + "message": "הזמן איש קשר לשעת חירום" }, "editEmergencyContact": { - "message": "Edit emergency contact" + "message": "ערוך איש קשר לשעת חירום" }, "inviteEmergencyContactDesc": { - "message": "Invite a new emergency contact by entering their Bitwarden account email address below. If they do not have a Bitwarden account already, they will be prompted to create a new account." + "message": "הזמן איש קשר לשעת חירום חדש על ידי הזנת כתובת הדוא\"ל של חשבון ה־Bitwarden שלו למטה. אם אין לו כבר חשבון Bitwarden, הוא יתבקש ליצור חשבון חדש." }, "emergencyAccessRecoveryInitiated": { - "message": "Emergency access initiated" + "message": "גישת חירום החלה" }, "emergencyAccessRecoveryApproved": { - "message": "Emergency access approved" + "message": "גישת חירום אושרה" }, "viewDesc": { - "message": "Can view all items in your own vault." + "message": "יכול לצפות בכל הפריטים בכספת שלך." }, "takeover": { - "message": "Takeover" + "message": "השתלטות" }, "takeoverDesc": { - "message": "Can reset your account with a new master password." + "message": "יכול לאפס את החשבון שלך עם סיסמה ראשית חדשה." }, "waitTime": { - "message": "Wait time" + "message": "זמן המתנה" }, "waitTimeDesc": { - "message": "Time required before automatically granting access." + "message": "הזמן הנדרש לפני הענקת גישה באופן אוטומטי." }, "oneDay": { - "message": "1 day" + "message": "יום 1" }, "days": { - "message": "$DAYS$ days", + "message": "$DAYS$ ימים", "placeholders": { "days": { "content": "$1", @@ -5252,16 +5309,16 @@ } }, "invitedUser": { - "message": "Invited user." + "message": "המשתמש הוזמן." }, "acceptEmergencyAccess": { - "message": "You've been invited to become an emergency contact for the user listed above. To accept the invitation, you need to log in or create a new Bitwarden account." + "message": "הוזמנת להפוך להיות איש קשר לשעת חירום עבור המשתמש הרשום לעיל. כדי לאשר את ההזמנה, אתה מוכרח להיכנס או ליצור חשבון Bitwarden חדש." }, "emergencyInviteAcceptFailed": { - "message": "Unable to accept invitation. Ask the user to send a new invitation." + "message": "לא ניתן לקבל הזמנה. בקש מהמשתמש לשלוח הזמנה חדשה." }, "emergencyInviteAcceptFailedShort": { - "message": "Unable to accept invitation. $DESCRIPTION$", + "message": "לא ניתן לקבל הזמנה. $DESCRIPTION$", "placeholders": { "description": { "content": "$1", @@ -5270,13 +5327,13 @@ } }, "emergencyInviteAcceptedDesc": { - "message": "You can access the emergency options for this user after your identity has been confirmed. We'll send you an email when that happens." + "message": "אתה יכול לגשת אל אפשרויות החירום עבור משתמש זה לאחר שהזהות שלך אושרה. נשלח לך דוא\"ל כשזה יקרה." }, "requestAccess": { - "message": "Request Access" + "message": "בקש גישה" }, "requestAccessConfirmation": { - "message": "Are you sure you want to request emergency access? You will be provided access after $WAITTIME$ day(s) or whenever the user manually approves the request.", + "message": "האם אתה בטוח שברצונך לבקש גישת חירום? תינתן לך גישה לאחר $WAITTIME$ ימים או מתי שהמשתמש מאשר את הבקשה באופן ידני.", "placeholders": { "waittime": { "content": "$1", @@ -5285,7 +5342,7 @@ } }, "requestSent": { - "message": "Emergency access requested for $USER$. We'll notify you by email when it's possible to continue.", + "message": "ביקשת גישת חירום עבור $USER$. נודיע לך באמצעות דוא\"ל כאשר אפשר להמשיך.", "placeholders": { "user": { "content": "$1", @@ -5294,13 +5351,13 @@ } }, "approve": { - "message": "Approve" + "message": "אשר" }, "reject": { - "message": "Reject" + "message": "דחה" }, "approveAccessConfirmation": { - "message": "Are you sure you want to approve emergency access? This will allow $USER$ to $ACTION$ your account.", + "message": "האם אתה בטוח שברצונך לאשר גישת חירום? זה יאפשר ל־$USER$ לבצע את הפעולה הבאה בחשבון שלך: $ACTION$.", "placeholders": { "user": { "content": "$1", @@ -5313,13 +5370,13 @@ } }, "emergencyApproved": { - "message": "Emergency access approved" + "message": "גישת חירום אושרה" }, "emergencyRejected": { - "message": "Emergency access rejected" + "message": "גישת חירום נדחתה" }, "passwordResetFor": { - "message": "Password reset for $USER$. You can now login using the new password.", + "message": "הסיסמה אופסה עבור $USER$. אתה יכול כעת להיכנס באמצעות הסיסמה החדשה.", "placeholders": { "user": { "content": "$1", @@ -5328,59 +5385,52 @@ } }, "personalOwnership": { - "message": "Remove individual vault" + "message": "הסר כספת אישית" }, "personalOwnershipPolicyDesc": { - "message": "Require members to save items to an organization by removing the individual vault option." + "message": "דרוש מחברים לשמור פריטים לארגון על ידי הסרת האפשרות של כספת אישית." }, "personalOwnershipExemption": { - "message": "Organization owners and administrators are exempt from this policy's enforcement." + "message": "בעלי ארגונים ומנהלים פטורים מהאכיפה של המדיניות הזאת." }, "personalOwnershipSubmitError": { - "message": "Due to an Enterprise policy, you are restricted from saving items to your individual vault. Change the ownership option to an organization and choose from available collections." + "message": "בשל מדיניות ארגונית, אתה מוגבל מלשמור פריטים לכספת האישית שלך. שנה את אפשרות הבעלות לארגון ובחר מאוספים זמינים." }, "disableSend": { - "message": "Remove Send" + "message": "הסר סֵנְד" }, "disableSendPolicyDesc": { - "message": "Do not allow members to create or edit Sends.", + "message": "אל תאפשר לחברים ליצור או לערוך סֵנְדים.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "disableSendExemption": { - "message": "Organization members that can manage the organization's policies are exempt from this policy's enforcement." + "message": "חברי ארגון שיכולים לנהל את הפוליסות של הארגון הם פטורים מהאכיפה של המדיניות הזאת." }, "sendDisabled": { - "message": "Send removed", + "message": "סֵנְד הוסר", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "sendDisabledWarning": { - "message": "Due to an Enterprise policy, you are only able to delete an existing Send.", + "message": "בשל מדיניות ארגונית, אתה יכול למחוק רק סֵנְד קיים.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "sendOptions": { - "message": "Send options", + "message": "אפשרויות סֵנְד", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "sendOptionsPolicyDesc": { - "message": "Set options for creating and editing Sends.", + "message": "הגדר אפשרויות ליצירת ועריכת סֵנְדים.", "description": "'Sends' is a plural noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "sendOptionsExemption": { - "message": "Organization members that can manage the organization's policies are exempt from this policy's enforcement." + "message": "חברי ארגון שיכולים לנהל את הפוליסות של הארגון הם פטורים מהאכיפה של המדיניות הזאת." }, "disableHideEmail": { - "message": "Always show member’s email address with recipients when creating or editing a Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendOptionsPolicyInEffect": { - "message": "The following organization policies are currently in effect:" - }, - "sendDisableHideEmailInEffect": { - "message": "Users are not allowed to hide their email address from recipients when creating or editing a Send.", + "message": "הצג תמיד את כתובת הדוא\"ל של חבר מנמענים בעת יצירת או עריכת סֵנְד.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "modifiedPolicyId": { - "message": "Modified policy $ID$.", + "message": "מדיניות $ID$ שונתה.", "placeholders": { "id": { "content": "$1", @@ -5389,79 +5439,79 @@ } }, "planPrice": { - "message": "Plan price" + "message": "מחיר תוכנית" }, "estimatedTax": { - "message": "Estimated tax" + "message": "מס משוער" }, "custom": { - "message": "Custom" + "message": "מותאם אישית" }, "customDesc": { - "message": "Grant customized permissions to members" + "message": "הענק הרשאות מותאמות אישית לחברים" }, "customDescNonEnterpriseStart": { - "message": "Custom roles is an ", + "message": "תפקידים מותאמים אישית היא ", "description": "This will be used as part of a larger sentence, broken up to include links. The full sentence will read 'Custom roles is an enterprise feature. Contact our support team to upgrade your subscription'" }, "customDescNonEnterpriseLink": { - "message": "enterprise feature", + "message": "תכונה ארגונית", "description": "This will be used as part of a larger sentence, broken up to include links. The full sentence will read 'Custom roles is an enterprise feature. Contact our support team to upgrade your subscription'" }, "customDescNonEnterpriseEnd": { - "message": ". Contact our support team to upgrade your subscription", + "message": ". פנה אל צוות התמיכה שלנו כדי לשדרג את המנוי שלך", "description": "This will be used as part of a larger sentence, broken up to include links. The full sentence will read 'Custom roles is an enterprise feature. Contact our support team to upgrade your subscription'" }, "customNonEnterpriseError": { - "message": "To enable custom permissions the organization must be on an Enterprise 2020 plan." + "message": "כדי לאפשר הרשאות מותאמות אישית, הארגון מוכרח להיות בתוכנית ארגונית 2020." }, "permissions": { - "message": "Permissions" + "message": "הרשאות" }, "permission": { - "message": "Permission" + "message": "הרשאה" }, "accessEventLogs": { - "message": "Access event logs" + "message": "גישת יומני אירועים" }, "accessImportExport": { - "message": "Access import/export" + "message": "גישת ייבוא/ייצוא" }, "accessReports": { - "message": "Access reports" + "message": "גישת דוחות" }, "missingPermissions": { - "message": "You lack the necessary permissions to perform this action." + "message": "חסרות לך ההרשאות הנחוצות כדי לבצע פעולה זו." }, "manageAllCollections": { - "message": "Manage all collections" + "message": "ניהול כל האוספים" }, "createNewCollections": { - "message": "Create new collections" + "message": "יצירת אוספים חדשים" }, "editAnyCollection": { - "message": "Edit any collection" + "message": "עריכת כל אוסף" }, "deleteAnyCollection": { - "message": "Delete any collection" + "message": "מחיקת כל אוסף" }, "manageGroups": { - "message": "Manage groups" + "message": "ניהול קבוצות" }, "managePolicies": { - "message": "Manage policies" + "message": "ניהול פוליסות" }, "manageSso": { - "message": "Manage SSO" + "message": "ניהול SSO" }, "manageUsers": { - "message": "Manage users" + "message": "ניהול משתמשים" }, "manageAccountRecovery": { - "message": "Manage account recovery" + "message": "ניהול שחזור חשבון" }, "disableRequiredError": { - "message": "You must manually turn the $POLICYNAME$ policy before this policy can be turned off.", + "message": "אתה מוכרח להפעיל באופן ידני את המדיניות $POLICYNAME$ לפני שיהיה ניתן לכבות את המדיניות הזאת.", "placeholders": { "policyName": { "content": "$1", @@ -5470,153 +5520,132 @@ } }, "personalOwnershipPolicyInEffect": { - "message": "An organization policy is affecting your ownership options." + "message": "מדיניות ארגון משפיעה על אפשרויות הבעלות שלך." }, "personalOwnershipPolicyInEffectImports": { - "message": "An organization policy has blocked importing items into your individual vault." + "message": "מדיניות ארגון חסמה ייבוא פריטים אל תוך הכספת האישית שלך." }, "personalOwnershipCheckboxDesc": { - "message": "Remove individual ownership for organization users" - }, - "textHiddenByDefault": { - "message": "When accessing the Send, hide the text by default", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendNameDesc": { - "message": "A friendly name to describe this Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendTextDesc": { - "message": "The text you want to Send." - }, - "sendFileDesc": { - "message": "The file you want to Send." - }, - "copySendLinkOnSave": { - "message": "Copy the link to share this Send to my clipboard upon save." - }, - "sendLinkLabel": { - "message": "Send link", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + "message": "הסר בעלות אישית עבור משתמשי ארגון" }, "send": { - "message": "Send", + "message": "סֵנְד", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "sendAccessTaglineProductDesc": { - "message": "Bitwarden Send transmits sensitive, temporary information to others easily and securely.", + "message": "Bitwarden סֵנְד משדר מידע רגיש וזמני לאחרים באופן קל ומאובטח.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "sendAccessTaglineLearnMore": { - "message": "Learn more about", + "message": "למד עוד אודות", "description": "This will be used as part of a larger sentence, broken up to include links. The full sentence will read '**Learn more about** Bitwarden Send or sign up to try it today.'" }, "sendVaultCardProductDesc": { - "message": "Share text or files directly with anyone." + "message": "שתף קישור או טקסט ישירות עם כל אחד." }, "sendVaultCardLearnMore": { - "message": "Learn more", + "message": "למד עוד", "description": "This will be used as part of a larger sentence, broken up to include links. The full sentence will read '**Learn more**, see how it works, or try it now. '" }, "sendVaultCardSee": { - "message": "see", + "message": "ראה", "description": "This will be used as part of a larger sentence, broken up to include links. The full sentence will read 'Learn more, **see** how it works, or try it now.'" }, "sendVaultCardHowItWorks": { - "message": "how it works", + "message": "איך זה עובד", "description": "This will be used as part of a larger sentence, broken up to include links. The full sentence will read 'Learn more, see **how it works**, or try it now.'" }, "sendVaultCardOr": { - "message": "or", + "message": "או", "description": "This will be used as part of a larger sentence, broken up to include links. The full sentence will read 'Learn more, see how it works, **or** try it now.'" }, "developmentDevOpsAndITTeamsChooseBWSecret": { - "message": "Development, DevOps, and IT teams choose Bitwarden Secrets Manager to securely manage and deploy their infrastructure and machine secrets." + "message": "צוותי פיתוח, DevOps, וטכ\"מ בוחרים את מנהל הסודות של Bitwarden כדי לנהל ולפרוס באופן מאובטח את התשתיות וסודות מכונה שלהם." }, "centralizeSecretsManagement": { - "message": "Centralize secrets management." + "message": "רכז את ניהול הסודות." }, "centralizeSecretsManagementDescription": { - "message": "Securely store and manage secrets in one location to prevent secret sprawl across your organization." + "message": "אחסן ונהל באופן מאובטח סודות במקום אחד כדי למנוע התפשטות סודות ברחבי הארגון שלך." }, "preventSecretLeaks": { - "message": "Prevent secret leaks." + "message": "מנע דליפת סודות." }, "preventSecretLeaksDescription": { - "message": "Protect secrets with end-to-end encryption. No more hard coding secrets or sharing through .env files." + "message": "הגן על הסודות שלך עם הצפנה מקצה־לקצה. לא עוד תכנות נוקשה של סודות או שיתוף באמצעות קבצי env." }, "enhanceDeveloperProductivity": { - "message": "Enhance developer productivity." + "message": "שפר את פריון המפתחים." }, "enhanceDeveloperProductivityDescription": { - "message": "Programmatically retrieve and deploy secrets at runtime so developers can focus on what matters most, like improving code quality." + "message": "אחזר ופרוס סודות באופן תכנותי בזמן ריצה כך שמפתחים יכולים להתמקד במה שחשוב יותר מכל, כמו שיפור איכות הקוד." }, "strengthenBusinessSecurity": { - "message": "Strengthen business security." + "message": "חזק את אבטחת העסק." }, "strengthenBusinessSecurityDescription": { - "message": "Maintain tight control over machine and human access to secrets with SSO integrations, event logs, and access rotation." + "message": "שמור על שליטה הדוקה בגישת מכונות ובני אדם אל סודות עם אינטגרציות SSO, יומני אירועים, ורוטציית גישה." }, "tryItNow": { - "message": "Try it now" + "message": "נסה את זה עכשיו" }, "sendRequest": { - "message": "Send request" + "message": "שלח בקשה" }, "addANote": { - "message": "Add a note" + "message": "הוסף הערה" }, "bitwardenSecretsManager": { - "message": "Bitwarden Secrets Manager" + "message": "מנהל הסודות של Bitwarden" }, "moreProductsFromBitwarden": { - "message": "More products from Bitwarden" + "message": "עוד מוצרים מאת Bitwarden" }, "requestAccessToSecretsManager": { - "message": "Request access to Secrets Manager" + "message": "בקש גישה אל מנהל הסודות" }, "youNeedApprovalFromYourAdminToTrySecretsManager": { - "message": "You need approval from your administrator to try Secrets Manager." + "message": "אתה צריך אישור מהמנהל שלך כדי לנסות את מנהל הסודות." }, "smAccessRequestEmailSent": { - "message": "Access request for secrets manager email sent to admins." + "message": "דוא\"ל בקשת גישה אל מנהל הסודות נשלח למנהלים." }, "requestAccessSMDefaultEmailContent": { - "message": "Hi,\n\nI am requesting a subscription to Bitwarden Secrets Manager for our team. Your support would mean a great deal!\n\nBitwarden Secrets Manager is an end-to-end encrypted secrets management solution for securely storing, sharing, and deploying machine credentials like API keys, database passwords, and authentication certificates.\n\nSecrets Manager will help us to:\n\n- Improve security\n- Streamline operations\n- Prevent costly secret leaks\n\nTo request a free trial for our team, please reach out to Bitwarden.\n\nThank you for your help!" + "message": "היי,\n\nאני מבקש מנוי למנהל הסודות של Bitwarden עבור הצוות שלנו. התמיכה שלך תהיה משמעותית מאוד!\n\nמנהל הסיסמאות של Bitwarden הוא פתרון ניהול סודות בהצפנה מקצה־לקצה עבור אחסון, שיתוף, ופריסה באופן מאובטח של אישורי מכונה כמו מפתחות API, סיסמאות מסדי נתונים, ותעודות אימות.\n\nמנהל הסודות יכול לעזור לנו:\n\n- לשפר אבטחה\n- לייעל פעולות\n- למנוע דליפת סודות יקרה\n\nכדי לבקש ניסיון חינמי עבור הצוות שלנו, נא ליצור קשר עם Bitwarden.\n\nתודה לך על העזרה שלך!" }, "giveMembersAccess": { - "message": "Give members access:" + "message": "תן לחברים גישה:" }, "viewAndSelectTheMembers": { - "message": "view and select the members you want to give access to Secrets Manager." + "message": "הצג ובחר את החברים שברצונך להעניק להם גישה אל מנהל הסודות." }, "openYourOrganizations": { - "message": "Open your organization's" + "message": "פתח את של הארגון שלך" }, "usingTheMenuSelect": { - "message": "Using the menu, select" + "message": "באמצעות התפריט, בחר את" }, "toGrantAccessToSelectedMembers": { - "message": "to grant access to selected members." + "message": "כדי להעניק גישה לחברים שנבחרו." }, "sendVaultCardTryItNow": { - "message": "try it now", + "message": "נסה את זה עכשיו", "description": "This will be used as part of a larger sentence, broken up to include links. The full sentence will read 'Learn more, see how it works, or **try it now**.'" }, "sendAccessTaglineOr": { - "message": "or", + "message": "או", "description": "This will be used as part of a larger sentence, broken up to include links. The full sentence will read 'Learn more about Bitwarden Send **or** sign up to try it today.'" }, "sendAccessTaglineSignUp": { - "message": "sign up", + "message": "הירשם", "description": "This will be used as part of a larger sentence, broken up to include links. The full sentence will read 'Learn more about Bitwarden Send or **sign up** to try it today.'" }, "sendAccessTaglineTryToday": { - "message": "to try it today.", + "message": "כדי לנסות את זה היום.", "description": "This will be used as part of a larger sentence, broken up to include links. The full sentence will read 'Learn more about Bitwarden Send or sign up to **try it today.**'" }, "sendAccessCreatorIdentifier": { - "message": "Bitwarden member $USER_IDENTIFIER$ shared the following with you", + "message": "חבר Bitwarden עם המזהה $USER_IDENTIFIER$ שיתף איתך את הדברים הבאים", "placeholders": { "user_identifier": { "content": "$1", @@ -5625,60 +5654,69 @@ } }, "viewSend": { - "message": "View Send", + "message": "הצג סֵנְד", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "viewSendHiddenEmailWarning": { - "message": "The Bitwarden user who created this Send has chosen to hide their email address. You should ensure you trust the source of this link before using or downloading its content.", + "message": "משתמש ה־Bitwarden שיצר את סֵנְד זה בחר להסתיר את כתובת הדוא\"ל שלו. עליך לוודא שאתה בוטח במקור של קישור זה לפני שימוש או הורדה של התוכן שלו.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "expirationDateIsInvalid": { - "message": "The expiration date provided is not valid." + "message": "תאריך התפוגה שסופק אינו חוקי." }, "deletionDateIsInvalid": { - "message": "The deletion date provided is not valid." + "message": "תאריך המחיקה שסופק אינו חוקי." }, "expirationDateAndTimeRequired": { - "message": "An expiration date and time are required." + "message": "נדרשים תאריך וזמן תפוגה." }, "deletionDateAndTimeRequired": { - "message": "A deletion date and time are required." + "message": "נדרשים תאריך וזמן מחיקה." }, "dateParsingError": { - "message": "There was an error saving your deletion and expiration dates." + "message": "הייתה שגיאה בשמירת תאריכי המחיקה והתפוגה שלך." + }, + "hideYourEmail": { + "message": "Hide your email address from viewers." }, "webAuthnFallbackMsg": { - "message": "To verify your 2FA please click the button below." + "message": "כדי לאמת את האימות הדו־גורמי (2FA) שלך לחץ על הלחצן למטה." }, "webAuthnAuthenticate": { - "message": "Authenticate WebAuthn" + "message": "אמת WebAuthn" + }, + "readSecurityKey": { + "message": "קרא מפתח אבטחה" + }, + "awaitingSecurityKeyInteraction": { + "message": "ממתין לאינטראקציה עם מפתח אבטחה..." }, "webAuthnNotSupported": { - "message": "WebAuthn is not supported in this browser." + "message": "WebAuthn אינו נתמך בדפדפן זה." }, "webAuthnSuccess": { - "message": "WebAuthn verified successfully! You may close this tab." + "message": "WebAuthn אומת בהצלחה! אתה רשאי לסגור כרטיסייה זו." }, "hintEqualsPassword": { - "message": "Your password hint cannot be the same as your password." + "message": "רמז הסיסמה שלך לא יכול להיות אותו הדבר כמו הסיסמה שלך." }, "enrollAccountRecovery": { - "message": "Enroll in account recovery" + "message": "להירשם לשחזור חשבון" }, "enrolledAccountRecovery": { - "message": "Enrolled in account recovery" + "message": "נרשם לשחזור חשבון" }, "withdrawAccountRecovery": { - "message": "Withdraw from account recovery" + "message": "לסגת משחזור חשבון" }, "enrollPasswordResetSuccess": { - "message": "Enrollment success!" + "message": "הצלחת הרשמה!" }, "withdrawPasswordResetSuccess": { - "message": "Withdrawal success!" + "message": "הצלחת נסיגה!" }, "eventEnrollAccountRecovery": { - "message": "User $ID$ enrolled in account recovery.", + "message": "המשתמש $ID$ נרשם לשחזור חשבון.", "placeholders": { "id": { "content": "$1", @@ -5687,7 +5725,7 @@ } }, "eventWithdrawAccountRecovery": { - "message": "User $ID$ withdrew from account recovery.", + "message": "המשתמש $ID$ נסוג משחזור חשבון.", "placeholders": { "id": { "content": "$1", @@ -5696,7 +5734,7 @@ } }, "eventAdminPasswordReset": { - "message": "Master password reset for user $ID$.", + "message": "סיסמה ראשית אופסה עבור המשתמש $ID$.", "placeholders": { "id": { "content": "$1", @@ -5705,7 +5743,7 @@ } }, "eventResetSsoLink": { - "message": "Reset SSO link for user $ID$", + "message": "אפס קישור SSO עבור המשתמש $ID$", "placeholders": { "id": { "content": "$1", @@ -5714,7 +5752,7 @@ } }, "firstSsoLogin": { - "message": "$ID$ logged in using Sso for the first time", + "message": "$ID$ נכנס באמצעות SSO בפעם הראשונה", "placeholders": { "id": { "content": "$1", @@ -5723,10 +5761,10 @@ } }, "resetPassword": { - "message": "Reset password" + "message": "אפס סיסמה" }, "resetPasswordLoggedOutWarning": { - "message": "Proceeding will log $NAME$ out of their current session, requiring them to log back in. Active sessions on other devices may continue to remain active for up to one hour.", + "message": "המשך התהליך יוציא את $NAME$ מההפעלה הנוכחית שלו והוא יידרש להיכנס חזרה. הפעלות פעילות במכשירים אחרים עלולות להישאר פעילות למשך עד שעה אחת.", "placeholders": { "name": { "content": "$1", @@ -5735,229 +5773,229 @@ } }, "thisUser": { - "message": "this user" + "message": "משתמש זה" }, "resetPasswordMasterPasswordPolicyInEffect": { - "message": "One or more organization policies require the master password to meet the following requirements:" + "message": "מדיניות ארגון אחת או יותר דורשת שהסיסמה הראשית תעמוד בדרישות הבאות:" }, "resetPasswordSuccess": { - "message": "Password reset success!" + "message": "הצלחת איפוס סיסמה!" }, "resetPasswordEnrollmentWarning": { - "message": "Enrollment will allow organization administrators to change your master password" + "message": "הרשמה תאפשר למנהלי ארגון לשנות את הסיסמה הראשית שלך" }, "accountRecoveryPolicy": { - "message": "Account recovery administration" + "message": "ניהול שחזור חשבון" }, "accountRecoveryPolicyDesc": { - "message": "Based on the encryption method, recover accounts when master passwords or trusted devices are forgotten or lost." + "message": "בהתבסס על שיטת ההצפנה, שחזר חשבונות כאשר סיסמאות ראשיות או מכשירים מהימנים נשכחו או אבדו." }, "accountRecoveryPolicyWarning": { - "message": "Existing accounts with master passwords will require members to self-enroll before administrators can recover their accounts. Automatic enrollment will turn on account recovery for new members." + "message": "חברים בעלי חשבונות קיימים עם סיסמאות ראשיות יידרשו להירשם בעצמם לפני שמנהלים יוכלו לשחזר את החשבונות שלהם. הרשמה אוטומטית תפעיל שחזור חשבון עבור חברים חדשים." }, "accountRecoverySingleOrgRequirementDesc": { - "message": "The single organization Enterprise policy must be turned on before activating this policy." + "message": "יש להפעיל את המדיניות הארגונית של הארגון היחיד לפני הפעלת מדיניות זו." }, "resetPasswordPolicyAutoEnroll": { - "message": "Automatic enrollment" + "message": "הרשמה אוטומטית" }, "resetPasswordPolicyAutoEnrollCheckbox": { - "message": "Require new members to be enrolled automatically" + "message": "דרוש מחברים חדשים להיות רשומים באופן אוטומטי" }, "resetPasswordAutoEnrollInviteWarning": { - "message": "This organization has an Enterprise policy that will automatically enroll you in password reset. Enrollment will allow organization administrators to change your master password." + "message": "לארגון זה יש מדיניות ארגונית שתרשום אותך באופן אוטומטי לאיפוס סיסמה. הרישום יאפשר למנהלי הארגון לשנות את הסיסמה הראשית שלך." }, "resetPasswordOrgKeysError": { - "message": "Organization keys response is null" + "message": "תגובת מפתחות ארגון היא ריקה" }, "resetPasswordDetailsError": { - "message": "Reset password details response is null" + "message": "תגובת פרטי איפוס סיסמה היא ריקה" }, "trashCleanupWarning": { - "message": "Items that have been in trash more than 30 days will be automatically deleted." + "message": "פריטים שהיו באשפה יותר מ־30 יום יימחקו באופן אוטומטי." }, "trashCleanupWarningSelfHosted": { - "message": "Items that have been in trash for a while will be automatically deleted." + "message": "פריטים שהיו באשפה לזמן מה יימחקו באופן אוטומטי." }, "passwordPrompt": { - "message": "Master password re-prompt" + "message": "בקשה חוזרת של סיסמה ראשית" }, "passwordConfirmation": { - "message": "Master password confirmation" + "message": "אישור סיסמה ראשית" }, "passwordConfirmationDesc": { - "message": "This action is protected. To continue, please re-enter your master password to verify your identity." + "message": "פעולה זו מוגנת. כדי להמשיך, נא להזין שוב את הסיסמה הראשית שלך כדי לאמת את זהותך." }, "reinviteSelected": { - "message": "Resend invitations" + "message": "שלח מחדש הזמנות" }, "resendNotification": { - "message": "Resend notification" + "message": "שלח מחדש התראה" }, "noSelectedUsersApplicable": { - "message": "This action is not applicable to any of the selected users." + "message": "פעולה זו אינה ישימה לאף אחד מהמשתמשים שנבחרו." }, "removeUsersWarning": { - "message": "Are you sure you want to remove the following users? The process may take a few seconds to complete and cannot be interrupted or canceled." + "message": "האם אתה בטוח שברצונך להסיר את המשתמשים הבאים? התהליך עלול לקחת מספר שניות להשלמה ולא ניתן לקטוע או לבטל אותו." }, "removeOrgUsersConfirmation": { - "message": "When member(s) are removed, they no longer have access to organization data and this action is irreversible. To add the member back to the organization, they must be invited and onboarded again. The process may take a few seconds to complete and cannot be interrupted or canceled." + "message": "כאשר החברים מוסרים, אין להם יותר גישה אל נתוני הארגון ופעולה זו היא בלתי הפיכה. כדי להוסיף את החברים בחזרה לארגון, יש להזמין ולקלוט אותם שוב. התהליך עלול לקחת מספר שניות להשלמה ולא ניתן לקטוע או לבטל אותו." }, "revokeUsersWarning": { - "message": "When member(s) are revoked, they no longer have access to organization data. To quickly restore member access, go to the Revoked tab. The process may take a few seconds to complete and cannot be interrupted or canceled." + "message": "כאשר החברים מבוטלים, אין להם יותר גישה אל נתוני הארגון. כדי לשחזר במהירות גישת חבר, עבור לכרטיסייה 'מבוטל'. התהליך עלול לקחת מספר שניות להשלמה ולא ניתן לקטוע או לבטל אותו." }, "theme": { - "message": "Theme" + "message": "ערכת נושא" }, "themeDesc": { - "message": "Choose a theme for your web vault." + "message": "בחר ערכת נושא עבור כספת הרשת שלך." }, "themeSystem": { - "message": "Use system theme" + "message": "השתמש בערכת נושא של המערכת" }, "themeDark": { - "message": "Dark" + "message": "כהה" }, "themeLight": { - "message": "Light" + "message": "בהיר" }, "confirmSelected": { - "message": "Confirm selected" + "message": "אשר את שנבחר" }, "bulkConfirmStatus": { - "message": "Bulk action status" + "message": "מצב פעולה בכמות גדולה" }, "bulkConfirmMessage": { - "message": "Confirmed successfully" + "message": "אושרו בהצלחה" }, "bulkReinviteMessage": { - "message": "Reinvited successfully" + "message": "הוזמנו בהצלחה" }, "bulkRemovedMessage": { - "message": "Removed successfully" + "message": "הוסרו בהצלחה" }, "bulkRevokedMessage": { - "message": "Revoked organization access successfully" + "message": "הגישה לארגון בוטלה בהצלחה" }, "bulkRestoredMessage": { - "message": "Restored organization access successfully" + "message": "הגישה לארגון שוחזרה בהצלחה" }, "bulkFilteredMessage": { - "message": "Excluded, not applicable for this action" + "message": "לא נכללו, לא ישימים עבור פעולה זו" }, "nonCompliantMembersTitle": { - "message": "Non-compliant members" + "message": "חברים שאינם עומדים בדרישות" }, "nonCompliantMembersError": { - "message": "Members that are non-compliant with the Single organization or Two-step login policy cannot be restored until they adhere to the policy requirements" + "message": "חברים שאינם עומדים בדרישות מדיניות הארגון היחיד או הכניסה הדו־שלבית אינם ניתנים לשחזור עד שהם יעמדו בדרישות המדיניות" }, "fingerprint": { - "message": "Fingerprint" + "message": "טביעת אצבע" }, "removeUsers": { - "message": "Remove users" + "message": "הסר משתמשים" }, "revokeUsers": { - "message": "Revoke users" + "message": "בטל משתמשים" }, "restoreUsers": { - "message": "Restore users" + "message": "שחזר משתמשים" }, "error": { - "message": "Error" + "message": "שגיאה" }, "decryptionError": { - "message": "Decryption error" + "message": "שגיאת פענוח" }, "couldNotDecryptVaultItemsBelow": { - "message": "Bitwarden could not decrypt the vault item(s) listed below." + "message": "Bitwarden לא יכל לפענח את פריט(י) הכספת המפורט(ים) להלן." }, "contactCSToAvoidDataLossPart1": { - "message": "Contact customer success", + "message": "צור קשר עם הצלחת לקוחות", "description": "This is part of a larger sentence. The full sentence will read 'Contact customer success to avoid additional data loss.'" }, "contactCSToAvoidDataLossPart2": { - "message": "to avoid additional data loss.", + "message": "כדי למנוע אובדן נתונים נוסף.", "description": "This is part of a larger sentence. The full sentence will read 'Contact customer success to avoid additional data loss.'" }, "accountRecoveryManageUsers": { - "message": "Manage users must also be granted with the manage account recovery permission" + "message": "יש להעניק גם את הרשאת ניהול משתמשים עם ההרשאה לניהול שחזור חשבון" }, "setupProvider": { - "message": "Provider setup" + "message": "הגדרת ספק" }, "setupProviderLoginDesc": { - "message": "You've been invited to setup a new Provider. To continue, you need to log in or create a new Bitwarden account." + "message": "הוזמנת להגדיר ספק חדש. כדי להמשיך, תצטרך להיכנס או ליצור חשבון Bitwarden חדש." }, "setupProviderDesc": { - "message": "Please enter the details below to complete the Provider setup. Contact Customer Support if you have any questions." + "message": "נא להזין את הפרטים למטה כדי להשלים את הגדרת הספק. פנה אל תמיכת לקוחות אם יש לך שאלות כלשהן." }, "providerName": { - "message": "Provider name" + "message": "שם הספק" }, "providerSetup": { - "message": "Provider successfully set up" + "message": "הספק הוגדר בהצלחה" }, "clients": { - "message": "Clients" + "message": "לקוחות" }, "client": { - "message": "Client", + "message": "לקוח", "description": "This is used as a table header to describe which client application created an event log." }, "providerAdmin": { - "message": "Provider admin" + "message": "מנהל הספק" }, "providerAdminDesc": { - "message": "The highest access user that can manage all aspects of your Provider as well as access and manage client organizations." + "message": "המשתמש בעל הגישה הגבוהה ביותר שיכול לנהל את כל ההיבטים של הספק שלך כמו גם לגשת ולנהל ארגוני לקוחות." }, "serviceUser": { - "message": "Service user" + "message": "משתמש שירות" }, "serviceUserDesc": { - "message": "Service users can access and manage all client organizations." + "message": "משתמשי שירות יכולים לגשת אל ולנהל את כל ארגוני הלקוחות." }, "providerInviteUserDesc": { - "message": "Invite a new user to your Provider by entering their Bitwarden account email address below. If they do not have a Bitwarden account already, they will be prompted to create a new account." + "message": "הזמן משתמש חדש אל הספק שלך על ידי הזנת כתובת הדוא\"ל של חשבון ה־Bitwarden שלו למטה. אם אין לו כבר חשבון Bitwarden, הוא יתבקש ליצור חשבון חדש." }, "joinProvider": { - "message": "Join Provider" + "message": "הצטרף לספק" }, "joinProviderDesc": { - "message": "You've been invited to join the Provider listed above. To accept the invitation, you need to log in or create a new Bitwarden account." + "message": "הוזמנת להצטרף אל הספק הרשום לעיל. כדי לאשר את ההזמנה, אתה מוכרח להיכנס או ליצור חשבון Bitwarden חדש." }, "providerInviteAcceptFailed": { - "message": "Unable to accept invitation. Ask a Provider admin to send a new invitation." + "message": "לא ניתן לקבל הזמנה. בקש ממנהל ספק לשלוח הזמנה חדשה." }, "providerInviteAcceptedDesc": { - "message": "You can access this Provider once an administrator confirms your membership. We'll send you an email when that happens." + "message": "תוכל לגשת לספק הזה ברגע שמנהל יאשר את החברות שלך. נשלח לך דוא\"ל כשזה יקרה." }, "providerUsersNeedConfirmed": { - "message": "You have users that have accepted their invitation, but still need to be confirmed. Users will not have access to the Provider until they are confirmed." + "message": "יש לך משתמשים שקיבלו את ההזמנה שלהם, אבל עדיין צריך לאשר אותם. למשתמשים לא תהיה גישה אל הספק עד שהם יאושרו." }, "provider": { - "message": "Provider" + "message": "ספק" }, "newClientOrganization": { - "message": "New client organization" + "message": "ארגון לקוחות חדש" }, "newClientOrganizationDesc": { - "message": "Create a new client organization that will be associated with you as the Provider. You will be able to access and manage this organization." + "message": "צור ארגון לקוחות חדש שישויך אליך בתור הספק. תוכל לגשת לנהל את ארגון זה." }, "newClient": { - "message": "New client" + "message": "לקוח חדש" }, "addExistingOrganization": { - "message": "Add existing organization" + "message": "הוסף ארגון קיים" }, "addNewOrganization": { - "message": "Add new organization" + "message": "הוסף ארגון חדש" }, "myProvider": { - "message": "My Provider" + "message": "הספק שלי" }, "addOrganizationConfirmation": { - "message": "Are you sure you want to add $ORGANIZATION$ as a client to $PROVIDER$?", + "message": "האם אתה בטוח שברצונך להוסיף את $ORGANIZATION$ כלקוח אל $PROVIDER$?", "placeholders": { "organization": { "content": "$1", @@ -5970,10 +6008,10 @@ } }, "organizationJoinedProvider": { - "message": "Organization was successfully added to the Provider" + "message": "ארגון נוסף בהצלחה אל הספק" }, "accessingUsingProvider": { - "message": "Accessing organization using Provider $PROVIDER$", + "message": "ניגש לארגון באמצעות הספק $PROVIDER$", "placeholders": { "provider": { "content": "$1", @@ -5982,13 +6020,13 @@ } }, "providerIsDisabled": { - "message": "Provider suspended" + "message": "ספק מושעה" }, "providerUpdated": { - "message": "Provider saved" + "message": "ספק נשמר" }, "yourProviderIs": { - "message": "Your Provider is $PROVIDER$. They have administrative and billing privileges for your organization.", + "message": "הספק שלך הוא $PROVIDER$. יש לו הרשאות ניהול וחיוב עבור הארגון שלך.", "placeholders": { "provider": { "content": "$1", @@ -5997,7 +6035,7 @@ } }, "detachedOrganization": { - "message": "The organization $ORGANIZATION$ has been detached from your Provider.", + "message": "הארגון $ORGANIZATION$ נותק מהספק שלך.", "placeholders": { "organization": { "content": "$1", @@ -6006,61 +6044,61 @@ } }, "detachOrganizationConfirmation": { - "message": "Are you sure you want to detach this organization? The organization will continue to exist but will no longer be managed by the Provider." + "message": "האם אתה בטוח שברצונך לנתק ארגון זה? הארגון ימשיך להיות קיים אבל לא ינוהל יותר על ידי הספק." }, "add": { - "message": "Add" + "message": "הוסף" }, "updatedMasterPassword": { - "message": "Master password saved" + "message": "סיסמה ראשית נשמרה" }, "updateMasterPassword": { - "message": "Update master password" + "message": "עדכן סיסמה ראשית" }, "updateMasterPasswordWarning": { - "message": "Your master password was recently changed by an administrator in your organization. In order to access the vault, you must update your master password now. Proceeding will log you out of your current session, requiring you to log back in. Active sessions on other devices may continue to remain active for up to one hour." + "message": "הסיסמה הראשית שלך שונתה לאחרונה על ידי מנהל בארגון שלך. כדי לגשת אל הכספת, אתה מוכרח לעדכן את הסיסמה הראשית שלך עכשיו. המשך התהליך יוציא אותך מההפעלה הנוכחית שלך ותידרש להיכנס חזרה. הפעלות פעילות במכשירים אחרים עלולות להישאר פעילות למשך עד שעה אחת." }, "masterPasswordInvalidWarning": { - "message": "Your master password does not meet the policy requirements of this organization. In order to join the organization, you must update your master password now. Proceeding will log you out of your current session, requiring you to log back in. Active sessions on other devices may continue to remain active for up to one hour." + "message": "הסיסמה הראשית שלך אינה עומדת בדרישות המדיניות של ארגון זה. כדי להצטרף לארגון, אתה מוכרח לעדכן את הסיסמה הראשית שלך עכשיו. המשך התהליך יוציא אותך מההפעלה הנוכחית שלך ותידרש להיכנס חזרה. הפעלות פעילות במכשירים אחרים עלולות להישאר פעילות למשך עד שעה אחת." }, "updateWeakMasterPasswordWarning": { - "message": "Your master password does not meet one or more of your organization policies. In order to access the vault, you must update your master password now. Proceeding will log you out of your current session, requiring you to log back in. Active sessions on other devices may continue to remain active for up to one hour." + "message": "הסיסמה הראשית שלך אינה עומדת באחת או יותר מפוליסות הארגון שלך. כדי לגשת לכספת, אתה מוכרח לעדכן את הסיסמה הראשית שלך עכשיו. בהמשך תנותק מההפעלה הנוכחית שלך, מה שידרוש ממך להיכנס חזרה. הפעלות פעילות במכשירים אחרים עלולות להישאר פעילות למשך עד שעה אחת." }, "automaticAppLogin": { - "message": "Automatically log in users for allowed applications" + "message": "הכנס באופן אוטומטי משתמשים עבור יישומים מותרים" }, "automaticAppLoginDesc": { - "message": "Login forms will automatically be filled and submitted for apps launched from your configured identity provider." + "message": "טפסי כניסה ימולאו ויוגשו באופן אוטומטי עבור יישומים שנפתחו מספק הזהות המוגדר שלך." }, "automaticAppLoginIdpHostLabel": { - "message": "Identity provider host" + "message": "מארח ספק זהות" }, "automaticAppLoginIdpHostDesc": { - "message": "Enter your identity provider host URL. Enter multiple URLs by separating with a comma." + "message": "הזן את כתובת ה־URL של מארח ספק הזהות שלך. הזן מספר כתובות URL על ידי הפרדה עם פסיק." }, "tdeDisabledMasterPasswordRequired": { - "message": "Your organization has updated your decryption options. Please set a master password to access your vault." + "message": "הארגון שלך עדכן את אפשרויות הפענוח שלך. נא להגדיר סיסמה ראשית כדי לגשת לכספת שלך." }, "maximumVaultTimeout": { - "message": "Vault timeout" + "message": "פסק זמן לכספת" }, "maximumVaultTimeoutDesc": { - "message": "Set a maximum vault timeout for members." + "message": "הגדר פסק זמן מרבי לכספת עבור חברים." }, "maximumVaultTimeoutLabel": { - "message": "Maximum vault timeout" + "message": "פסק זמן מרבי לכספת" }, "invalidMaximumVaultTimeout": { - "message": "Invalid maximum vault timeout." + "message": "פסק זמן מרבי לכספת לא חוקי." }, "hours": { - "message": "Hours" + "message": "שעות" }, "minutes": { - "message": "Minutes" + "message": "דקות" }, "vaultTimeoutPolicyInEffect": { - "message": "Your organization policies have set your maximum allowed vault timeout to $HOURS$ hour(s) and $MINUTES$ minute(s).", + "message": "פוליסות הארגון שלך הגדירו את פסק הזמן לכספת המרבי שלך ל־$HOURS$ שעות ו־$MINUTES$ דקות.", "placeholders": { "hours": { "content": "$1", @@ -6073,7 +6111,7 @@ } }, "vaultTimeoutPolicyInEffect1": { - "message": "$HOURS$ hour(s) and $MINUTES$ minute(s) maximum.", + "message": "$HOURS$ שעות ו־$MINUTES$ דקות לכל היותר.", "placeholders": { "hours": { "content": "$1", @@ -6086,7 +6124,7 @@ } }, "vaultTimeoutPolicyWithActionInEffect": { - "message": "Your organization policies are affecting your vault timeout. Maximum allowed vault timeout is $HOURS$ hour(s) and $MINUTES$ minute(s). Your vault timeout action is set to $ACTION$.", + "message": "פוליסות הארגון שלך משפיעות על פסק הזמן לכספת שלך. פסק זמן מרבי המותר הוא $HOURS$ שעות ו־$MINUTES$ דקות. פעולת פסק הזמן לכספת שלך מוגדרת ל$ACTION$.", "placeholders": { "hours": { "content": "$1", @@ -6103,7 +6141,7 @@ } }, "vaultTimeoutActionPolicyInEffect": { - "message": "Your organization policies have set your vault timeout action to $ACTION$.", + "message": "פוליסות הארגון שלך הגדירו את פעולת פסק הזמן לכספת שלך ל$ACTION$.", "placeholders": { "action": { "content": "$1", @@ -6112,208 +6150,208 @@ } }, "vaultTimeoutToLarge": { - "message": "Your vault timeout exceeds the restriction set by your organization." + "message": "פסק הזמן לכספת שלך חורג מהמגבלה שנקבעה על ידי הארגון שלך." }, "vaultCustomTimeoutMinimum": { - "message": "Minimum custom timeout is 1 minute." + "message": "פסק זמן מותאם אישית מינימלי הוא דקה 1." }, "vaultTimeoutRangeError": { - "message": "Vault timeout is not within allowed range." + "message": "פסק זמן לכספת אינו בטווח המותר." }, "disablePersonalVaultExport": { - "message": "Remove individual vault export" + "message": "הסר ייצוא כספת אישית" }, "disablePersonalVaultExportDescription": { - "message": "Do not allow members to export data from their individual vault." + "message": "אל תאפשר לחברים לייצא נתונים מהכספת האישית שלהם." }, "vaultExportDisabled": { - "message": "Vault export removed" + "message": "ייצוא כספת הוסר" }, "personalVaultExportPolicyInEffect": { - "message": "One or more organization policies prevents you from exporting your individual vault." + "message": "מדיניות ארגון אחת או יותר מונעת ממך מלייצא את הכספת האישית שלך." }, "activateAutofill": { - "message": "Activate auto-fill" + "message": "הפעל מילוי אוטומטי" }, "activateAutofillPolicyDesc": { - "message": "Activate the auto-fill on page load setting on the browser extension for all existing and new members." + "message": "הפעל את הגדרת המילוי האוטומטי בעת טעינת עמוד בהרחבת הדפדפן עבור כל החברים הקיימים והחדשים." }, "experimentalFeature": { - "message": "Compromised or untrusted websites can exploit auto-fill on page load." + "message": "אתרים פרוצים או לא מהימנים יכולים לנצל מילוי אוטומטי בעת טעינת עמוד." }, "learnMoreAboutAutofill": { - "message": "Learn more about auto-fill" + "message": "למד עוד על מילוי אוטומטי" }, "selectType": { - "message": "Select SSO type" + "message": "בחר סוג SSO" }, "type": { - "message": "Type" + "message": "סוג" }, "openIdConnectConfig": { - "message": "OpenID connect configuration" + "message": "תצורת OpenID Connect" }, "samlSpConfig": { - "message": "SAML service provider configuration" + "message": "תצורת ספק שירות SAML" }, "samlIdpConfig": { - "message": "SAML identity provider configuration" + "message": "תצורת ספק זהות SAML" }, "callbackPath": { - "message": "Callback path" + "message": "נתיב התקשרות חזרה" }, "signedOutCallbackPath": { - "message": "Signed out callback path" + "message": "נתיב התקשרות חזרה מנותק" }, "authority": { - "message": "Authority" + "message": "רשות" }, "clientId": { - "message": "Client ID" + "message": "מזהה לקוח" }, "clientSecret": { - "message": "Client secret" + "message": "סוג לקוח" }, "metadataAddress": { - "message": "Metadata address" + "message": "כתובת מטא־נתונים" }, "oidcRedirectBehavior": { - "message": "OIDC redirect behavior" + "message": "התנהגות OIDC בעת ניתוב מחדש" }, "getClaimsFromUserInfoEndpoint": { - "message": "Get claims from user info endpoint" + "message": "קבל דרישות מנקודת הקצה של פרטי המשתמש" }, "additionalScopes": { - "message": "Custom scopes" + "message": "תחום מותאם אישית" }, "additionalUserIdClaimTypes": { - "message": "Custom user ID claim types" + "message": "סוגי דרישות מזהה משתמש מותאם אישית" }, "additionalEmailClaimTypes": { - "message": "Email claim types" + "message": "סוגי דרישות דוא\"ל" }, "additionalNameClaimTypes": { - "message": "Custom name claim types" + "message": "סוגי דרישות שם מותאם אישית" }, "acrValues": { - "message": "Requested authentication context class reference values" + "message": "ערכי ייחוס של מחלקת הקשר אימות מבוקשים" }, "expectedReturnAcrValue": { - "message": "Expected \"acr\" claim value in response" + "message": "ציפה לערך דרישת \"acr\" בתגובה" }, "spEntityId": { - "message": "SP entity ID" + "message": "מזהה ישות ספק שרות (SP)" }, "spMetadataUrl": { - "message": "SAML 2.0 metadata URL" + "message": "כתובת URL של מטא־נתוני SAML 2.0" }, "spAcsUrl": { - "message": "Assertion consumer service (ACS) URL" + "message": "כתובת URL של קביעת שירות צרכן (ACS)" }, "spNameIdFormat": { - "message": "Name ID format" + "message": "תבנית מזהה שם" }, "spOutboundSigningAlgorithm": { - "message": "Outbound signing algorithm" + "message": "אלגוריתם חתימה יוצאת" }, "spSigningBehavior": { - "message": "Signing behavior" + "message": "התנהגות חתימה" }, "spMinIncomingSigningAlgorithm": { - "message": "Minimum incoming signing algorithm" + "message": "אלגוריתם חתימה נכנסת מינימלי" }, "spWantAssertionsSigned": { - "message": "Expect signed assertions" + "message": "צפה לקביעות חתומות" }, "spValidateCertificates": { - "message": "Validate certificates" + "message": "אמת אישורים" }, "spUniqueEntityId": { - "message": "Set a unique SP entity ID" + "message": "הגדר מזהה ישות ספק שירות (SP) ייחודי" }, "spUniqueEntityIdDesc": { - "message": "Generate an identifier that is unique to your organization" + "message": "צור מזהה שהוא ייחודי לארגון שלך" }, "idpEntityId": { - "message": "Entity ID" + "message": "מזהה ישות" }, "idpBindingType": { - "message": "Binding type" + "message": "סוג קשירה" }, "idpSingleSignOnServiceUrl": { - "message": "Single sign-on service URL" + "message": "כתובת URL של שירות כניסה יחידה" }, "idpSingleLogoutServiceUrl": { - "message": "Single log-out service URL" + "message": "כתובת URL של שירות יציאה יחידה" }, "idpX509PublicCert": { - "message": "X509 public certificate" + "message": "תעודת X509 ציבורית" }, "idpOutboundSigningAlgorithm": { - "message": "Outbound signing algorithm" + "message": "אלגוריתם חתימה יוצאת" }, "idpAllowUnsolicitedAuthnResponse": { - "message": "Allow unsolicited authentication response" + "message": "אפשר תגובת אימות לא רצויה" }, "idpAllowOutboundLogoutRequests": { - "message": "Allow outbound logout requests" + "message": "אפשר בקשות יציאה יוצאות" }, "idpSignAuthenticationRequests": { - "message": "Sign authentication requests" + "message": "חתום בקשות אימות" }, "ssoSettingsSaved": { - "message": "Single sign-on configuration saved" + "message": "תצורת כניסה יחידה נשמרה" }, "sponsoredFamilies": { - "message": "Free Bitwarden Families" + "message": "Bitwarden למשפחות בחינם" }, "sponsoredFamiliesEligible": { - "message": "You and your family are eligible for Free Bitwarden Families. Redeem with your personal email to keep your data secure even when you are not at work." + "message": "אתה והמשפחה שלך זכאים ל־Bitwarden למשפחות בחינם. ממש עם הדוא\"ל האישי שלך כדי לשמור על אבטחת הנתונים שלך אפילו כשאתה לא בעבודה." }, "sponsoredFamiliesEligibleCard": { - "message": "Redeem your Free Bitwarden for Families plan today to keep your data secure even when you are not at work." + "message": "ממש את תוכנית Bitwarden למשפחות בחינם שלך היום כדי לשמור על אבטחת הנתונים שלך אפילו כשאתה לא בעבודה." }, "sponsoredFamiliesInclude": { - "message": "The Bitwarden for Families plan include" + "message": "התוכנית Bitwarden למשפחות כוללת" }, "sponsoredFamiliesPremiumAccess": { - "message": "Premium access for up to 6 users" + "message": "גישת פרימיום עד 6 משתמשים" }, "sponsoredFamiliesSharedCollections": { - "message": "Shared collections for Family secrets" + "message": "אוספים משותפים עבור סודות משפחה" }, "badToken": { - "message": "The link is no longer valid. Please have the sponsor resend the offer." + "message": "הקישור אינו חוקי עוד. אנא בקש מנותן החסות לשלוח שוב את ההצעה." }, "reclaimedFreePlan": { - "message": "Reclaimed free plan" + "message": "החזרת את התוכנית החינמית" }, "redeem": { - "message": "Redeem" + "message": "מימוש" }, "sponsoredFamiliesSelectOffer": { - "message": "Select the organization you would like sponsored" + "message": "בחר את הארגון שברצונך להעניק לו חסות" }, "familiesSponsoringOrgSelect": { - "message": "Which Free Families offer would you like to redeem?" + "message": "איזו הצעה למשפחות בחינם היית רוצה לממש?" }, "sponsoredFamiliesEmail": { - "message": "Enter your personal email to redeem Bitwarden Families" + "message": "הזן את הדוא\"ל האישי שלך כדי לממש את Bitwarden למשפחות" }, "sponsoredFamiliesLeaveCopy": { - "message": "If you remove an offer or are removed from the sponsoring organization, your Families sponsorship will expire at the next renewal date." + "message": "אם תסיר הצעה או שהוסרת מהארגון המממן, החסות למשפחות שלך תפוג בתאריך החידוש הבא." }, "acceptBitwardenFamiliesHelp": { - "message": "Accept offer for an existing organization or create a new Families organization." + "message": "קבל הצעה עבור ארגון קיים או צור ארגון משפחות חדש." }, "setupSponsoredFamiliesLoginDesc": { - "message": "You've been offered a free Bitwarden Families plan organization. To continue, you need to log in to the account that received the offer." + "message": "הציעו לך ארגון תוכנית Bitwarden למשפחות בחינם. כדי להמשיך, תצטרך להיכנס לחשבון שקיבל את ההצעה." }, "sponsoredFamiliesAcceptFailed": { - "message": "Unable to accept offer. Please resend the offer email from your Enterprise account and try again." + "message": "לא ניתן לקבל הצעה. נא לשלוח מחדש את דוא\"ל ההצעה מהחשבון הארגוני שלך ולנסות שוב." }, "sponsoredFamiliesAcceptFailedShort": { - "message": "Unable to accept offer. $DESCRIPTION$", + "message": "לא ניתן לקבל הצעה: $DESCRIPTION$", "placeholders": { "description": { "content": "$1", @@ -6322,19 +6360,19 @@ } }, "sponsoredFamiliesOffer": { - "message": "Accept Free Bitwarden Families" + "message": "קבל Bitwarden למשפחות בחינם" }, "sponsoredFamiliesOfferRedeemed": { - "message": "Free Bitwarden Families offer successfully redeemed" + "message": "הצעת Bitwarden למשפחות בחינם מומשה בהצלחה" }, "redeemed": { - "message": "Redeemed" + "message": "מומש" }, "redeemedAccount": { - "message": "Account redeemed" + "message": "החשבון מומש" }, "revokeAccount": { - "message": "Revoke account $NAME$", + "message": "בטל חשבון $NAME$", "placeholders": { "name": { "content": "$1", @@ -6343,7 +6381,7 @@ } }, "resendEmailLabel": { - "message": "Resend sponsorship email to $NAME$ sponsorship", + "message": "שלח מחדש דוא\"ל חסות לנותן החסות $NAME$", "placeholders": { "name": { "content": "$1", @@ -6352,61 +6390,61 @@ } }, "freeFamiliesPlan": { - "message": "Free Families plan" + "message": "תוכנית למשפחות בחינם" }, "redeemNow": { - "message": "Redeem now" + "message": "ממש עכשיו" }, "recipient": { - "message": "Recipient" + "message": "נמען" }, "removeSponsorship": { - "message": "Remove sponsorship" + "message": "הסר חסות" }, "removeSponsorshipConfirmation": { - "message": "After removing a sponsorship, you will be responsible for this subscription and related invoices. Are you sure you want to continue?" + "message": "לאחר הסרת חסות, אתה תהיה אחראי למנוי זה ולחשבוניות קשורות. האם אתה בטוח שברצונך להמשיך?" }, "sponsorshipCreated": { - "message": "Sponsorship created" + "message": "החסות נוצרה" }, "emailSent": { - "message": "Email sent" + "message": "הדוא\"ל נשלח" }, "removeSponsorshipSuccess": { - "message": "Sponsorship removed" + "message": "החסות הוסרה" }, "ssoKeyConnectorError": { - "message": "Key Connector error: make sure Key Connector is available and working correctly." + "message": "שגיאת Key Connector: וודא שה־Key Connector זמין ופועל כראוי." }, "keyConnectorUrl": { - "message": "Key Connector URL" + "message": "כתובת URL של Key Connector" }, "sendVerificationCode": { - "message": "Send a verification code to your email" + "message": "שלח קוד אימות לדוא\"ל שלח" }, "sendCode": { - "message": "Send code" + "message": "שלח קוד" }, "codeSent": { - "message": "Code sent" + "message": "קוד נשלח" }, "verificationCode": { - "message": "Verification code" + "message": "קוד אימות" }, "confirmIdentity": { - "message": "Confirm your identity to continue." + "message": "אשר את זהותך כדי להמשיך." }, "verificationCodeRequired": { - "message": "Verification code is required." + "message": "נדרש קוד אימות." }, "webauthnCancelOrTimeout": { - "message": "The authentication was cancelled or took too long. Please try again." + "message": "האימות בוטל או לקח זמן רב מדי. נא לנסות שוב." }, "invalidVerificationCode": { - "message": "Invalid verification code" + "message": "קוד אימות שגוי" }, "convertOrganizationEncryptionDesc": { - "message": "$ORGANIZATION$ is using SSO with a self-hosted key server. A master password is no longer required to log in for members of this organization.", + "message": "$ORGANIZATION$ משתמש/ת ב־SSO עם שרת מפתחות באירוח עצמי. סיסמה ראשית כבר לא נדרשת כדי להיכנס עבור חברים של ארגון זה.", "placeholders": { "organization": { "content": "$1", @@ -6415,205 +6453,205 @@ } }, "leaveOrganization": { - "message": "Leave organization" + "message": "עזוב ארגון" }, "removeMasterPassword": { - "message": "Remove master password" + "message": "הסר סיסמה ראשית" }, "removedMasterPassword": { - "message": "Master password removed" + "message": "הסיסמה הראשית הוסרה" }, "allowSso": { - "message": "Allow SSO authentication" + "message": "אפשר אימות SSO" }, "allowSsoDesc": { - "message": "Once set up, your configuration will be saved and members will be able to authenticate using their Identity Provider credentials." + "message": "לאחר ההגדרה, התצורה שלך תשמר וחברים יוכלו לאמת באמצעות אישורי ספק הזהות שלהם." }, "ssoPolicyHelpStart": { - "message": "Use the", + "message": "השתמש ב", "description": "This will be used as part of a larger sentence, broken up to include links. The full sentence will read 'Use the require single-sign-on authentication policy to require all members to log in with SSO.'" }, "ssoPolicyHelpAnchor": { - "message": "require single sign-on authentication policy", + "message": "מדיניות דרוש אימות כניסה יחידה", "description": "This will be used as part of a larger sentence, broken up to include links. The full sentence will read 'Use the require single-sign-on authentication policy to require all members to log in with SSO.'" }, "ssoPolicyHelpEnd": { - "message": "to require all members to log in with SSO.", + "message": "כדי לדרוש מכל החברים להיכנס עם SSO.", "description": "This will be used as part of a larger sentence, broken up to include links. The full sentence will read 'Use the require single-sign-on authentication policy to require all members to log in with SSO.'" }, "memberDecryptionOption": { - "message": "Member decryption options" + "message": "אפשרויות פענוח חברים" }, "memberDecryptionPassDesc": { - "message": "Once authenticated, members will decrypt vault data using their master passwords." + "message": "ברגע שאומתו, חברים יפענחו נתוני כספת באמצעות הסיסמאות הראשיות שלהם." }, "keyConnector": { "message": "Key Connector" }, "memberDecryptionKeyConnectorDescStart": { - "message": "Connect login with SSO to your self-hosted decryption key server. Using this option, members won’t need to use their master passwords to decrypt vault data. The", + "message": "חבר כניסה עם SSO למפתח הפענוח של השרת באירוח עצמי שלך. אם תשתמש באפשרות זו, חברים לא יצטרכו להשתמש בסיסמאות הראשיות שלהם כדי לפענח את נתוני הכספת.", "description": "This will be used as part of a larger sentence, broken up to include links. The full sentence will read 'Connect login with SSO to your self-hosted decryption key server. Using this option, members won’t need to use their master passwords to decrypt vault data. The require SSO authentication and single organization policies are required to set up Key Connector decryption. Contact Bitwarden Support for set up assistance.'" }, "memberDecryptionKeyConnectorDescLink": { - "message": "require SSO authentication and single organization policies", + "message": "הפוליסות דרוש אימות SSO וארגון יחיד", "description": "This will be used as part of a larger sentence, broken up to include links. The full sentence will read 'Connect login with SSO to your self-hosted decryption key server. Using this option, members won’t need to use their master passwords to decrypt vault data. The require SSO authentication and single organization policies are required to set up Key Connector decryption. Contact Bitwarden Support for set up assistance.'" }, "memberDecryptionKeyConnectorDescEnd": { - "message": "are required to set up Key Connector decryption. Contact Bitwarden Support for set up assistance.", + "message": "נדרשות עבור הגדרת פענוח Key Connector. פנה אל תמיכת Bitwarden עבור סיוע בהגדרה.", "description": "This will be used as part of a larger sentence, broken up to include links. The full sentence will read 'Connect login with SSO to your self-hosted decryption key server. Using this option, members won’t need to use their master passwords to decrypt vault data. The require SSO authentication and single organization policies are required to set up Key Connector decryption. Contact Bitwarden Support for set up assistance.'" }, "keyConnectorPolicyRestriction": { - "message": "\"Login with SSO and Key Connector Decryption\" is activated. This policy will only apply to owners and admins." + "message": "\"כניסה עם SSO ופענוח Key Connector\" מופעל. המדיניות תחול רק על בעלים ומנהלים." }, "enabledSso": { - "message": "SSO turned on" + "message": "SSO מופעל" }, "disabledSso": { - "message": "SSO turned on" + "message": "SSO כבוי" }, "enabledKeyConnector": { - "message": "Key Connector activated" + "message": "Key Connector הופעל" }, "disabledKeyConnector": { - "message": "Key Connector deactivated" + "message": "Key Connector הושבת" }, "keyConnectorWarning": { - "message": "Once members begin using Key Connector, your organization cannot revert to master password decryption. Proceed only if you are comfortable deploying and managing a key server." + "message": "ברגע שמחברים יתחילו להשתמש ב־Key Connector, הארגון שלך לא יוכל לחזור לפענוח סיסמה ראשית. המשך רק אם נוח לך לפרוס ולנהל שרת מפתחות." }, "migratedKeyConnector": { - "message": "Migrated to Key Connector" + "message": "העובר ל־Key Connector" }, "paymentSponsored": { - "message": "Please provide a payment method to associate with the organization. Don't worry, we won't charge you anything unless you select additional features or your sponsorship expires. " + "message": "נא לספק שיטת תשלום לשיוך עם הארגון. אל דאגה, אנחנו לא נחייב אותך בכלום אלא אם תבחר תכונות נוספות או שהחסות שלך תפוג. " }, "orgCreatedSponsorshipInvalid": { - "message": "The sponsorship offer has expired. You may delete the organization you created to avoid a charge at the end of your 7 day trial. Otherwise you may close this prompt to keep the organization and assume billing responsibility." + "message": "פג תוקפה של הצעת החסות. אתה יכול למחוק את הארגון שיצרת כדי להימנע מחיוב בסוף הניסיון בן 7 הימים שלך. אחרת אתה יכול לסגור הנחיה זו כדי להשאיר את הארגון ולקחת אחריות על החיוב." }, "newFamiliesOrganization": { - "message": "New Families organization" + "message": "ארגון משפחות חדש" }, "acceptOffer": { - "message": "Accept offer" + "message": "קבל הצעה" }, "sponsoringOrg": { - "message": "Sponsoring organization" + "message": "ארגון נותן חסות" }, "keyConnectorTest": { - "message": "Test" + "message": "בדיקה" }, "keyConnectorTestSuccess": { - "message": "Success! Key Connector reached." + "message": "הצלחה! Key Connector הושג." }, "keyConnectorTestFail": { - "message": "Cannot reach Key Connector. Check URL." + "message": "לא ניתן להשיג Key Connector. בדוק URL." }, "sponsorshipTokenHasExpired": { - "message": "The sponsorship offer has expired." + "message": "פג תוקפה של הצעת החסות." }, "freeWithSponsorship": { - "message": "FREE with sponsorship" + "message": "חינם עם חסות" }, "viewBillingSyncToken": { - "message": "View billing sync token" + "message": "הצג אסימון סנכרון חיוב" }, "generateBillingToken": { - "message": "Generate billing token" + "message": "צור אסימון חיוב" }, "copyPasteBillingSync": { - "message": "Copy and paste this token into the billing sync settings of your self-hosted organization." + "message": "העתק והדבק את האסימון הזה לתוך הגדרות סנכרון החיוב של הארגון באירוח עצמי שלך." }, "billingSyncCanAccess": { - "message": "Your billing sync token can access and edit this organization's subscription settings." + "message": "אסימון סנכרון החיוב שלך יכול לגשת אל ולערוך את הגדרות המנוי של ארגון זה." }, "manageBillingTokenSync": { - "message": "Manage Billing Token" + "message": "נהל אסימון חיוב" }, "setUpBillingSync": { - "message": "Set up billing sync" + "message": "הגדר סנכרון חיוב" }, "generateToken": { - "message": "Generate token" + "message": "צור אסימון" }, "rotateToken": { - "message": "Rotate token" + "message": "סובב אסימון" }, "rotateBillingSyncTokenWarning": { - "message": "If you proceed, you will need to re-setup billing sync on your self-hosted server." + "message": "אם תמשיך, תצטרך להגדיר מחדש סנכרון חיוב בשרת באירוח עצמי שלך." }, "rotateBillingSyncTokenTitle": { - "message": "Rotating the billing sync token will invalidate the previous token." + "message": "סיבוב של אסימון סנכרון החיוב יבטל את התוקף של האסימון הקודם." }, "selfHostedServer": { - "message": "self-hosted" + "message": "אירוח עצמי" }, "customEnvironment": { - "message": "Custom environment" + "message": "סביבה מותאמת אישית" }, "selfHostedBaseUrlHint": { - "message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com" + "message": "ציין את בסיס ה־URL של התקנת Bitwarden באירוח מקומי שלך. דוגמה: https://bitwarden.company.com" }, "selfHostedCustomEnvHeader": { - "message": "For advanced configuration, you can specify the base URL of each service independently." + "message": "עבור תצורה מתקדמת, באפשרותך לציין את בסיס ה־URL של כל שירות בנפרד." }, "selfHostedEnvFormInvalid": { - "message": "You must add either the base Server URL or at least one custom environment." + "message": "אתה מוכרח להוסיף או את בסיס ה־URL של השרת או לפחות סביבה מותאמת אישית אחת." }, "apiUrl": { - "message": "API server URL" + "message": "URL של שרת ה־API" }, "webVaultUrl": { - "message": "Web vault server URL" + "message": "URL של שרת כספת הרשת" }, "identityUrl": { - "message": "Identity server URL" + "message": "URL של שרת הזהות" }, "notificationsUrl": { - "message": "Notifications server URL" + "message": "URL של שרת ההודעות" }, "iconsUrl": { - "message": "Icons server URL" + "message": "URL של שרת הסמלים" }, "environmentSaved": { - "message": "Environment URLs saved" + "message": "כתובות URL של הסביבה נשמרו" }, "selfHostingTitle": { - "message": "Self-hosting" + "message": "אירוח עצמי" }, "selfHostingEnterpriseOrganizationSectionCopy": { - "message": "To set-up your organization on your own server, you will need to upload your license file. To support Free Families plans and advanced billing capabilities for your self-hosted organization, you will need to set up billing sync." + "message": "כדי להגדיר את הארגון שלך בשרת שלך, תצטרך להעלות את קובץ הרישיון שלך. כדי לתמוך בתוכניות למשפחות בחינם וביכולות חיוב מתקדמות עבור הארגון באירוח עצמי שלך, תצטרך להגדיר סנכרון חיוב." }, "billingSyncApiKeyRotated": { - "message": "Token rotated" + "message": "האסימון סובב" }, "billingSyncKeyDesc": { - "message": "A billing sync token from your cloud organization's subscription settings is required to complete this form." + "message": "נדרש אסימון סנכרון חיוב מהגדרות המנוי של הארגון בענן שלך כדי להשלים טופס זה." }, "billingSyncKey": { - "message": "Billing sync token" + "message": "אסימון סנכרון חיוב" }, "automaticBillingSyncDesc": { - "message": "Automatic sync unlocks Families sponsorships and allows you to sync your license without uploading a file. After making updates in the Bitwarden cloud server, select Sync License to apply changes." + "message": "סנכרון אוטומטי פותח חסויות למשפחות ומאפשר לך לסנכרן את הרישיון שלך מבלי להעלות קובץ. לאחר ביצוע עדכונים בשרת הענן של Bitwarden, בחר 'סנכרן רישיון' כדי להחיל שינויים." }, "active": { - "message": "Active" + "message": "פעיל" }, "inactive": { - "message": "Inactive" + "message": "לא פעיל" }, "sentAwaitingSync": { - "message": "Sent (awaiting sync)" + "message": "נשלח (ממתין לסנכרון)" }, "sent": { - "message": "Sent" + "message": "נשלח" }, "requestRemoved": { - "message": "Removed (awaiting sync)" + "message": "הוסר (ממתין לסנכרון)" }, "requested": { - "message": "Requested" + "message": "נדרש" }, "formErrorSummaryPlural": { - "message": "$COUNT$ fields above need your attention.", + "message": "$COUNT$ שדות למעלה צריכים את תשומת לבך.", "placeholders": { "count": { "content": "$1", @@ -6622,10 +6660,10 @@ } }, "formErrorSummarySingle": { - "message": "1 field above needs your attention." + "message": "שדה 1 למעלה צריך את תשומת לבך." }, "fieldRequiredError": { - "message": "$FIELDNAME$ is required.", + "message": "$FIELDNAME$ נדרש/ת.", "placeholders": { "fieldname": { "content": "$1", @@ -6634,10 +6672,10 @@ } }, "required": { - "message": "required" + "message": "נדרש" }, "charactersCurrentAndMaximum": { - "message": "$CURRENT$/$MAX$ character maximum", + "message": "$CURRENT$/$MAX$ תווים מקסימום", "placeholders": { "current": { "content": "$1", @@ -7199,6 +7237,12 @@ "duoRequiredByOrgForAccount": { "message": "Duo two-step login is required for your account." }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Duo two-step login is required for your account. Follow the steps below to finish logging in." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Follow the steps below to finish logging in." + }, "launchDuo": { "message": "Launch Duo" }, @@ -8359,31 +8403,31 @@ "message": "Trusted devices" }, "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": "חברים לא יצטרכו סיסמה ראשית בעת כניסה עם SSO. סיסמה ראשית מוחלפת עם מפתח הצפנה המאוחסן במכשיר, מה שהופך את המכשיר הזה למהימן. המכשיר הראשון בו חבר יוצר את החשבון שלו ונכנס אליו יהיה מהימן. מכשירים חדשים יצטרכו להיות מאושרים על ידי מכשיר מהימן קיים או על ידי מנהל.", "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": "מדיניות הארגון היחיד", "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": "", "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": "מדיניות דרוש SSO", "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": ", ו", "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": "מדיניות ניהול שחזור חשבון", "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": "יופעלו כאשר נעשה שימוש באפשרות זו.", "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": { @@ -9793,9 +9837,15 @@ "learnMoreAboutApi": { "message": "Learn more about Bitwarden's API" }, + "fileSend": { + "message": "File Send" + }, "fileSends": { "message": "File Sends" }, + "textSend": { + "message": "Text Send" + }, "textSends": { "message": "Text Sends" }, @@ -10029,10 +10079,6 @@ "message": "Include special characters", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "addAttachment": { "message": "Add attachment" }, @@ -10053,10 +10099,10 @@ "message": "Self-Hosting" }, "claim-domain-single-org-warning": { - "message": "Claiming a domain will turn on the single organization policy." + "message": "דרישת דומיין תפעיל את מדיניות הארגון היחיד." }, "single-org-revoked-user-warning": { - "message": "Non-compliant members will be revoked. Administrators can restore members once they leave all other organizations." + "message": "חברים שאינם עומדים בדרישות יבוטלו. מנהלים יכולים לשחזר חברים ברגע שהם עזבו את כל הארגונים האחרים." }, "deleteOrganizationUser": { "message": "Delete $NAME$", @@ -10291,38 +10337,38 @@ "message": "Domain claimed" }, "organizationNameMaxLength": { - "message": "Organization name cannot exceed 50 characters." + "message": "שם ארגון לא יכול לחרוג מ־50 תווים." }, "openingExtension": { - "message": "Opening the Bitwarden browser extension" + "message": "פותח את הרחבת היישום של Bitwarden" }, "somethingWentWrong": { - "message": "Something went wrong..." + "message": "משהו השתבש..." }, "openingExtensionError": { "message": "We had trouble opening the Bitwarden browser extension. Click the button to open it now." }, "openExtension": { - "message": "Open extension" + "message": "פתח הרחבה" }, "doNotHaveExtension": { - "message": "Don't have the Bitwarden browser extension?" + "message": "אין לך את הרחבת הדפדפן של Bitwarden?" }, "installExtension": { - "message": "Install extension" + "message": "התקן הרחבה" }, "openedExtension": { - "message": "Opened the browser extension" + "message": "פתח את הרחבת הדפדפן" }, "openedExtensionViewAtRiskPasswords": { - "message": "Successfully opened the Bitwarden browser extension. You can now review your at-risk passwords." + "message": "פתח בהצלחה את הרחבת הדפדפן של Bitwarden. אתה יכול לסקור עכשיו את הסיסמאות בסיכון שלך." }, "openExtensionManuallyPart1": { "message": "We had trouble opening the Bitwarden browser extension. Open the Bitwarden icon", "description": "This will be used as part of a larger sentence, broken up to include the Bitwarden icon. The full sentence will read 'We had trouble opening the Bitwarden browser extension. Open the Bitwarden icon [Bitwarden Icon] from the toolbar.'" }, "openExtensionManuallyPart2": { - "message": "from the toolbar.", + "message": "מסרגל הכלים.", "description": "This will be used as part of a larger sentence, broken up to include the Bitwarden icon. The full sentence will read 'We had trouble opening the Bitwarden browser extension. Open the Bitwarden icon [Bitwarden Icon] from the toolbar.'" }, "resellerRenewalWarningMsg": { @@ -10369,13 +10415,13 @@ } }, "restartOrganizationSubscription": { - "message": "Organization subscription restarted" + "message": "מנוי ארגון הופעל מחדש" }, "restartSubscription": { - "message": "Restart your subscription" + "message": "הפעל מחדש את המנוי שלך" }, "suspendedManagedOrgMessage": { - "message": "Contact $PROVIDER$ for assistance.", + "message": "פנה אל $PROVIDER$ עבור סיוע.", "placeholders": { "provider": { "content": "$1", @@ -10390,7 +10436,7 @@ "message": "This action will delete the member account including all items in their vault. This replaces the previous Remove action." }, "deleteManagedUserWarning": { - "message": "Delete is a new action!" + "message": "מחיקה היא פעולה חדשה!" }, "seatsRemaining": { "message": "You have $REMAINING$ seats remaining out of $TOTAL$ seats assigned to this organization. Contact your provider to manage your subscription.", @@ -10406,19 +10452,19 @@ } }, "existingOrganization": { - "message": "Existing organization" + "message": "ארגון קיים" }, "selectOrganizationProviderPortal": { - "message": "Select an organization to add to your Provider Portal." + "message": "בחר ארגון להוספה אל פורטל הספק שלך." }, "noOrganizations": { - "message": "There are no organizations to list" + "message": "אין ארגונים להצגה ברשימה" }, "yourProviderSubscriptionCredit": { "message": "Your provider subscription will receive a credit for any remaining time in the organization's subscription." }, "doYouWantToAddThisOrg": { - "message": "Do you want to add this organization to $PROVIDER$?", + "message": "האם ברצונך להוסיף ארגון זה אל $PROVIDER$?", "placeholders": { "provider": { "content": "$1", @@ -10427,15 +10473,36 @@ } }, "addedExistingOrganization": { - "message": "Added existing organization" + "message": "נוסף ארגון קיים" }, "assignedExceedsAvailable": { - "message": "Assigned seats exceed available seats." + "message": "מקומות מוקצים עולים על מקומות פנויים." + }, + "changeAtRiskPassword": { + "message": "Change at-risk password" }, "removeUnlockWithPinPolicyTitle": { - "message": "Remove Unlock with PIN" + "message": "הסר ביטול נעילה עם PIN" }, "removeUnlockWithPinPolicyDesc": { - "message": "Do not allow members to unlock their account with a PIN." + "message": "אל תאפשר לחברים לבטל את נעילת החשבון שלהם עם PIN." + }, + "limitedEventLogs": { + "message": "$PRODUCT_TYPE$ plans do not have access to real event logs", + "placeholders": { + "product_type": { + "content": "$1", + "example": "Teams" + } + } + }, + "upgradeForFullEvents": { + "message": "קבל גישה מלאה ליומני אירועים של ארגון על ידי שדרוג לתוכנית לצוותים או ארגונים." + }, + "upgradeEventLogTitle": { + "message": "שדרג עבור נתוני יומן אירועים אמיתיים" + }, + "upgradeEventLogMessage": { + "message": "האירועים האלה הם דוגמאות בלבד ולא משקפים אירועים אמיתיים בתוך ארגון ה־Bitwarden שלך." } } diff --git a/apps/web/src/locales/hi/messages.json b/apps/web/src/locales/hi/messages.json index 5128575a717..fd1cc2b8ad5 100644 --- a/apps/web/src/locales/hi/messages.json +++ b/apps/web/src/locales/hi/messages.json @@ -5,6 +5,9 @@ "criticalApplications": { "message": "Critical applications" }, + "noCriticalAppsAtRisk": { + "message": "No critical applications at risk" + }, "accessIntelligence": { "message": "Access Intelligence" }, @@ -198,6 +201,9 @@ "notes": { "message": "नोट्स" }, + "privateNote": { + "message": "Private note" + }, "note": { "message": "Note" }, @@ -1026,6 +1032,9 @@ "no": { "message": "नहीं" }, + "location": { + "message": "Location" + }, "loginOrCreateNewAccount": { "message": "सुरक्षित तिजोरी में प्रवेश करने के लिए नया खाता बनाएं या लॉग इन करें।" }, @@ -1161,13 +1170,22 @@ "logInToBitwarden": { "message": "Log in to Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "Enter the code sent to your email" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Enter the code from your authenticator app" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Press your YubiKey to authenticate" + }, "authenticationTimeout": { "message": "Authentication timeout" }, "authenticationSessionTimedOut": { "message": "The authentication session timed out. Please restart the login process." }, - "verifyIdentity": { + "verifyYourIdentity": { "message": "Verify your Identity" }, "weDontRecognizeThisDevice": { @@ -1443,12 +1461,22 @@ "rememberMe": { "message": "मुझे याद रखें" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Don't ask again on this device for 30 days" + }, "sendVerificationCodeEmailAgain": { "message": "फिर से सत्यापन कोड ईमेल भेजें" }, "useAnotherTwoStepMethod": { "message": "Use another two-step login method" }, + "selectAnotherMethod": { + "message": "Select another method", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Use your recovery code" + }, "insertYubiKey": { "message": "Insert your YubiKey into your computer's USB port, then touch its button." }, @@ -1467,6 +1495,9 @@ "twoStepOptions": { "message": "Two-step login options" }, + "selectTwoStepLoginMethod": { + "message": "Select two-step login method" + }, "recoveryCodeDesc": { "message": "Lost access to all of your two-step login providers? Use your recovery code to turn off all two-step login providers from your account." }, @@ -1509,6 +1540,9 @@ "webAuthnMigrated": { "message": "(Migrated from FIDO)" }, + "openInNewTab": { + "message": "Open in new tab" + }, "emailTitle": { "message": "Email" }, @@ -2224,6 +2258,9 @@ "revokeAccess": { "message": "Revoke access" }, + "revoke": { + "message": "Revoke" + }, "twoStepLoginProviderEnabled": { "message": "This two-step login provider is active on your account." }, @@ -4081,6 +4118,12 @@ "updateBrowserDesc": { "message": "You are using an unsupported web browser. The web vault may not function properly." }, + "youHaveAPendingLoginRequest": { + "message": "You have a pending login request from another device." + }, + "reviewLoginRequest": { + "message": "Review login request" + }, "freeTrialEndPromptCount": { "message": "Your free trial ends in $COUNT$ days.", "placeholders": { @@ -4758,6 +4801,15 @@ "masterPassPolicyDesc": { "message": "Set requirements for master password strength." }, + "passwordStrengthScore": { + "message": "Password strength score $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "twoStepLoginPolicyTitle": { "message": "Require two-step login" }, @@ -5038,12 +5090,40 @@ "requireSsoExemption": { "message": "Organization owners and admins are exempt from this policy's enforcement." }, + "limitSendViews": { + "message": "Limit views" + }, + "limitSendViewsHint": { + "message": "No one can view this Send after the limit is reached.", + "description": "Displayed under the limit views field on Send" + }, + "limitSendViewsCount": { + "message": "$ACCESSCOUNT$ views left", + "description": "Displayed under the limit views field on Send", + "placeholders": { + "accessCount": { + "content": "$1", + "example": "2" + } + } + }, + "sendDetails": { + "message": "Send details", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendTypeTextToShare": { + "message": "Text to share" + }, "sendTypeFile": { "message": "File" }, "sendTypeText": { "message": "Text" }, + "sendPasswordDescV3": { + "message": "Add an optional password for recipients to access this Send.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "createSend": { "message": "New Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -5068,19 +5148,15 @@ "message": "Delete Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, - "deleteSendConfirmation": { - "message": "Are you sure you want to delete this Send?", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "whatTypeOfSend": { - "message": "What type of Send is this?", + "deleteSendPermanentConfirmation": { + "message": "Are you sure you want to permanently delete this Send?", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "deletionDate": { "message": "Deletion date" }, - "deletionDateDesc": { - "message": "The Send will be permanently deleted on the specified date and time.", + "deletionDateDescV2": { + "message": "The Send will be permanently deleted on this date.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "expirationDate": { @@ -5093,21 +5169,6 @@ "maxAccessCount": { "message": "Maximum access count" }, - "maxAccessCountDesc": { - "message": "If set, users will no longer be able to access this Send once the maximum access count is reached.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "currentAccessCount": { - "message": "Current access count" - }, - "sendPasswordDesc": { - "message": "Optionally require a password for users to access this Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendNotesDesc": { - "message": "Private notes about this Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "disabled": { "message": "Disabled" }, @@ -5134,13 +5195,6 @@ "removePasswordConfirmation": { "message": "Are you sure you want to remove the password?" }, - "hideEmail": { - "message": "Hide my email address from recipients." - }, - "disableThisSend": { - "message": "Deactivate this Send so that no one can access it.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "allSends": { "message": "All Sends" }, @@ -5151,6 +5205,9 @@ "pendingDeletion": { "message": "Pending deletion" }, + "hideTextByDefault": { + "message": "Hide text by default" + }, "expired": { "message": "Expired" }, @@ -5372,13 +5429,6 @@ "message": "Always show member’s email address with recipients when creating or editing a Send.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, - "sendOptionsPolicyInEffect": { - "message": "The following organization policies are currently in effect:" - }, - "sendDisableHideEmailInEffect": { - "message": "Users are not allowed to hide their email address from recipients when creating or editing a Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "modifiedPolicyId": { "message": "Modified policy $ID$.", "placeholders": { @@ -5478,27 +5528,6 @@ "personalOwnershipCheckboxDesc": { "message": "Remove individual ownership for organization users" }, - "textHiddenByDefault": { - "message": "When accessing the Send, hide the text by default", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendNameDesc": { - "message": "A friendly name to describe this Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendTextDesc": { - "message": "The text you want to Send." - }, - "sendFileDesc": { - "message": "The file you want to Send." - }, - "copySendLinkOnSave": { - "message": "Copy the link to share this Send to my clipboard upon save." - }, - "sendLinkLabel": { - "message": "Send link", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "send": { "message": "Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -5647,12 +5676,21 @@ "dateParsingError": { "message": "There was an error saving your deletion and expiration dates." }, + "hideYourEmail": { + "message": "Hide your email address from viewers." + }, "webAuthnFallbackMsg": { "message": "To verify your 2FA please click the button below." }, "webAuthnAuthenticate": { "message": "Authenticate WebAuthn" }, + "readSecurityKey": { + "message": "Read security key" + }, + "awaitingSecurityKeyInteraction": { + "message": "Awaiting security key interaction..." + }, "webAuthnNotSupported": { "message": "WebAuthn is not supported in this browser." }, @@ -7199,6 +7237,12 @@ "duoRequiredByOrgForAccount": { "message": "Duo two-step login is required for your account." }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Duo two-step login is required for your account. Follow the steps below to finish logging in." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Follow the steps below to finish logging in." + }, "launchDuo": { "message": "Launch Duo" }, @@ -9793,9 +9837,15 @@ "learnMoreAboutApi": { "message": "Learn more about Bitwarden's API" }, + "fileSend": { + "message": "File Send" + }, "fileSends": { "message": "File Sends" }, + "textSend": { + "message": "Text Send" + }, "textSends": { "message": "Text Sends" }, @@ -10029,10 +10079,6 @@ "message": "Include special characters", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "addAttachment": { "message": "Add attachment" }, @@ -10432,10 +10478,31 @@ "assignedExceedsAvailable": { "message": "Assigned seats exceed available seats." }, + "changeAtRiskPassword": { + "message": "Change at-risk password" + }, "removeUnlockWithPinPolicyTitle": { "message": "Remove Unlock with PIN" }, "removeUnlockWithPinPolicyDesc": { "message": "Do not allow members to unlock their account with a PIN." + }, + "limitedEventLogs": { + "message": "$PRODUCT_TYPE$ plans do not have access to real event logs", + "placeholders": { + "product_type": { + "content": "$1", + "example": "Teams" + } + } + }, + "upgradeForFullEvents": { + "message": "Get full access to organization event logs by upgrading to a Teams or Enterprise plan." + }, + "upgradeEventLogTitle": { + "message": "Upgrade for real event log data" + }, + "upgradeEventLogMessage": { + "message": "These events are examples only and do not reflect real events within your Bitwarden organization." } } diff --git a/apps/web/src/locales/hr/messages.json b/apps/web/src/locales/hr/messages.json index b400780719b..d463efabc78 100644 --- a/apps/web/src/locales/hr/messages.json +++ b/apps/web/src/locales/hr/messages.json @@ -5,6 +5,9 @@ "criticalApplications": { "message": "Kritične aplikacije" }, + "noCriticalAppsAtRisk": { + "message": "No critical applications at risk" + }, "accessIntelligence": { "message": "Pristup inteligenciji" }, @@ -198,6 +201,9 @@ "notes": { "message": "Bilješke" }, + "privateNote": { + "message": "Private note" + }, "note": { "message": "Bilješka" }, @@ -1026,6 +1032,9 @@ "no": { "message": "Ne" }, + "location": { + "message": "Location" + }, "loginOrCreateNewAccount": { "message": "Prijavi se ili stvori novi račun za pristup svojem sigurnom trezoru." }, @@ -1161,14 +1170,23 @@ "logInToBitwarden": { "message": "Prijavi se u Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "Enter the code sent to your email" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Enter the code from your authenticator app" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Press your YubiKey to authenticate" + }, "authenticationTimeout": { "message": "Istek vremena za autentifikaciju" }, "authenticationSessionTimedOut": { "message": "Sesija za autentifikaciju je istekla. Ponovi proces prijave." }, - "verifyIdentity": { - "message": "Potvrdi svoj identitet" + "verifyYourIdentity": { + "message": "Verify your Identity" }, "weDontRecognizeThisDevice": { "message": "Ne prepoznajemo ovaj uređaj. Za potvrdu identiteta unesi kôd poslan e-poštom." @@ -1443,12 +1461,22 @@ "rememberMe": { "message": "Zapamti me" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Don't ask again on this device for 30 days" + }, "sendVerificationCodeEmailAgain": { "message": "Ponovno slanje kontrolnog koda e-poštom" }, "useAnotherTwoStepMethod": { "message": "Koristiti drugi način prijave dvostrukom autentifikacijom" }, + "selectAnotherMethod": { + "message": "Select another method", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Use your recovery code" + }, "insertYubiKey": { "message": "Umetni svoj YubiKey u USB priključak računala, a zatim dodirni njegovu tipku." }, @@ -1467,6 +1495,9 @@ "twoStepOptions": { "message": "Mogućnosti prijave dvostrukom autentifikacijom" }, + "selectTwoStepLoginMethod": { + "message": "Select two-step login method" + }, "recoveryCodeDesc": { "message": "Izgubljen je pristup uređaju za prijavu dvostrukom autentifikacijom? Koristi svoj kôd za oporavak za onemogućavanje svih pružatelja usluga prijave dvostrukom autentifikacijom na svom računu." }, @@ -1509,6 +1540,9 @@ "webAuthnMigrated": { "message": "(migrirano s FIDO)" }, + "openInNewTab": { + "message": "Open in new tab" + }, "emailTitle": { "message": "E-pošta" }, @@ -2224,6 +2258,9 @@ "revokeAccess": { "message": "Opozovi pristup" }, + "revoke": { + "message": "Revoke" + }, "twoStepLoginProviderEnabled": { "message": "Ovaj pružatelj prijave dvostrukom autentifikacijom je omogućen na tvojem računu." }, @@ -4081,6 +4118,12 @@ "updateBrowserDesc": { "message": "Koristiš nepodržani preglednik. Web trezor možda neće ispravno raditi." }, + "youHaveAPendingLoginRequest": { + "message": "You have a pending login request from another device." + }, + "reviewLoginRequest": { + "message": "Review login request" + }, "freeTrialEndPromptCount": { "message": "Besplatno probno razdoblje završava za $COUNT$ dan/a.", "placeholders": { @@ -4758,6 +4801,15 @@ "masterPassPolicyDesc": { "message": "Postavi pravila sigurnosti koja mora zadovoljiti glavna lozinka." }, + "passwordStrengthScore": { + "message": "Password strength score $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "twoStepLoginPolicyTitle": { "message": "Zahtijevaj prijavu dvostrukom autentifikacijom" }, @@ -5038,12 +5090,40 @@ "requireSsoExemption": { "message": "Pravilo neće biti primjenjeno na Vlasnike i Administratore." }, + "limitSendViews": { + "message": "Limit views" + }, + "limitSendViewsHint": { + "message": "No one can view this Send after the limit is reached.", + "description": "Displayed under the limit views field on Send" + }, + "limitSendViewsCount": { + "message": "$ACCESSCOUNT$ views left", + "description": "Displayed under the limit views field on Send", + "placeholders": { + "accessCount": { + "content": "$1", + "example": "2" + } + } + }, + "sendDetails": { + "message": "Send details", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendTypeTextToShare": { + "message": "Text to share" + }, "sendTypeFile": { "message": "Datoteka" }, "sendTypeText": { "message": "Tekst" }, + "sendPasswordDescV3": { + "message": "Add an optional password for recipients to access this Send.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "createSend": { "message": "Stvori novi Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -5068,19 +5148,15 @@ "message": "Izbriši Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, - "deleteSendConfirmation": { - "message": "Sigurno želiš izbrisati ovaj Send?", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "whatTypeOfSend": { - "message": "Koja je ovo vrsta Send-a?", + "deleteSendPermanentConfirmation": { + "message": "Are you sure you want to permanently delete this Send?", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "deletionDate": { "message": "Datum brisanja" }, - "deletionDateDesc": { - "message": "Send će biti trajno izbrisan navedenog datuma.", + "deletionDateDescV2": { + "message": "The Send will be permanently deleted on this date.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "expirationDate": { @@ -5093,21 +5169,6 @@ "maxAccessCount": { "message": "Najveći proj pristupanja" }, - "maxAccessCountDesc": { - "message": "Ako je uključeno, korisnici neće moći pristupiti ovom Sendu nakon što se postigne najveći broj pristupanja.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "currentAccessCount": { - "message": "Trenutni broj pristupanja" - }, - "sendPasswordDesc": { - "message": "Ako želiš, možeš za pristup Sendu zahtijevati lozinku (nije obavezno).", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendNotesDesc": { - "message": "Privatne bilješke o Sendu.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "disabled": { "message": "Onemogućeno" }, @@ -5134,13 +5195,6 @@ "removePasswordConfirmation": { "message": "Sigurno želiš ukloniti lozinku?" }, - "hideEmail": { - "message": "Sakrij moju adresu e-pošte od primatelja." - }, - "disableThisSend": { - "message": "Onemogući ovaj Send da mu nitko ne može pristupiti.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "allSends": { "message": "Svi Sendovi" }, @@ -5151,6 +5205,9 @@ "pendingDeletion": { "message": "Čeka brisanje" }, + "hideTextByDefault": { + "message": "Hide text by default" + }, "expired": { "message": "Isteklo" }, @@ -5372,13 +5429,6 @@ "message": "Ne dopusti skrivanje e-pošte kod stvaranja Senda.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, - "sendOptionsPolicyInEffect": { - "message": "Organizacijska pravila trenutno na snazi:" - }, - "sendDisableHideEmailInEffect": { - "message": "Korisnicima nije dopušteno skrivati adresu e-pošte od primatelja kod stvaranja ili uređivanja Senda.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "modifiedPolicyId": { "message": "Izmijenjena polica $ID$.", "placeholders": { @@ -5478,27 +5528,6 @@ "personalOwnershipCheckboxDesc": { "message": "Onemogući osobno vlasnišvo za organizacijske korisnike" }, - "textHiddenByDefault": { - "message": "Zadano sakrij tekst pri pristupanju Sendu", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendNameDesc": { - "message": "Nadimak za ovaj Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendTextDesc": { - "message": "Tekst kojeg želiš poslati." - }, - "sendFileDesc": { - "message": "Datoteka koju želiš poslati." - }, - "copySendLinkOnSave": { - "message": "Kopiraj vezu za dijeljenje ovog Senda nakon spremanja." - }, - "sendLinkLabel": { - "message": "Veza na Send", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "send": { "message": "Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -5647,12 +5676,21 @@ "dateParsingError": { "message": "Došlo je do greške kod spremanja vaših datuma isteka i brisanja." }, + "hideYourEmail": { + "message": "Hide your email address from viewers." + }, "webAuthnFallbackMsg": { "message": "Za ovjeru tvoje 2FA, odaberi donju tipku." }, "webAuthnAuthenticate": { "message": "Ovjeri WebAuthn" }, + "readSecurityKey": { + "message": "Read security key" + }, + "awaitingSecurityKeyInteraction": { + "message": "Awaiting security key interaction..." + }, "webAuthnNotSupported": { "message": "WebAuthn nije podržan u ovom pregledniku." }, @@ -7199,6 +7237,12 @@ "duoRequiredByOrgForAccount": { "message": "Za tvoj račun je potrebna Duo dvostruka autentifikacija." }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Duo two-step login is required for your account. Follow the steps below to finish logging in." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Follow the steps below to finish logging in." + }, "launchDuo": { "message": "Pokreni Duo" }, @@ -9793,9 +9837,15 @@ "learnMoreAboutApi": { "message": "Saznaj više o Bitwarden API" }, + "fileSend": { + "message": "File Send" + }, "fileSends": { "message": "Send datoteke" }, + "textSend": { + "message": "Text Send" + }, "textSends": { "message": "Send tekstovi" }, @@ -10029,10 +10079,6 @@ "message": "Uključi posebne znakove", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "! @ # $ % ^ & *", - "description": "Label for the password generator special characters checkbox" - }, "addAttachment": { "message": "Dodaj privitak" }, @@ -10432,10 +10478,31 @@ "assignedExceedsAvailable": { "message": "Dodijeljene licence premašuju dostupne licence." }, + "changeAtRiskPassword": { + "message": "Change at-risk password" + }, "removeUnlockWithPinPolicyTitle": { "message": "Remove Unlock with PIN" }, "removeUnlockWithPinPolicyDesc": { "message": "Do not allow members to unlock their account with a PIN." + }, + "limitedEventLogs": { + "message": "$PRODUCT_TYPE$ plans do not have access to real event logs", + "placeholders": { + "product_type": { + "content": "$1", + "example": "Teams" + } + } + }, + "upgradeForFullEvents": { + "message": "Get full access to organization event logs by upgrading to a Teams or Enterprise plan." + }, + "upgradeEventLogTitle": { + "message": "Upgrade for real event log data" + }, + "upgradeEventLogMessage": { + "message": "These events are examples only and do not reflect real events within your Bitwarden organization." } } diff --git a/apps/web/src/locales/hu/messages.json b/apps/web/src/locales/hu/messages.json index 4e698bbbe74..31ee33ba028 100644 --- a/apps/web/src/locales/hu/messages.json +++ b/apps/web/src/locales/hu/messages.json @@ -5,6 +5,9 @@ "criticalApplications": { "message": "Kritikus alkalmazások" }, + "noCriticalAppsAtRisk": { + "message": "Nincsenek veszélyben levő kritikus alkalmazások." + }, "accessIntelligence": { "message": "Elérés intelligencia" }, @@ -198,6 +201,9 @@ "notes": { "message": "Jegyzetek" }, + "privateNote": { + "message": "Személyes jegyzet" + }, "note": { "message": "Jegyzet" }, @@ -1006,7 +1012,7 @@ "message": "A hivatkozás lejárt" }, "pleaseRestartRegistrationOrTryLoggingIn": { - "message": "Please restart registration or try logging in." + "message": "Kezdd előlről a regisztrációt vagy próbálj belépni." }, "youMayAlreadyHaveAnAccount": { "message": "Lehet hogy már rendelkezel fiókkal" @@ -1026,6 +1032,9 @@ "no": { "message": "Nem" }, + "location": { + "message": "Hely" + }, "loginOrCreateNewAccount": { "message": "Bejelentkezés vagy új fiók létrehozása a biztonsági széf eléréséhez." }, @@ -1161,13 +1170,22 @@ "logInToBitwarden": { "message": "Bejelentkezés a Bitwardenbe" }, + "enterTheCodeSentToYourEmail": { + "message": "Adjuk meg az email címre elküldött kódot." + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Adjuk meg a hitelesítő alkalmazása által generált kódot." + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Nyomjuk meg a YubiKey-t a hitelesítéshez." + }, "authenticationTimeout": { "message": "Hitelesítési időkifutás" }, "authenticationSessionTimedOut": { "message": "A hitelesítési munkamenet időkifutással lejárt. Indítsuk újra a bejelentkezési folyamatot." }, - "verifyIdentity": { + "verifyYourIdentity": { "message": "Személyazonosság ellenőrzése" }, "weDontRecognizeThisDevice": { @@ -1443,12 +1461,22 @@ "rememberMe": { "message": "Adatok megjegyzése" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Ne kérdezzen újra ezen az eszközön 30 napig" + }, "sendVerificationCodeEmailAgain": { "message": "Megerősítő kód ismételt elküldése emailben" }, "useAnotherTwoStepMethod": { "message": "Másik kétlépcsős bejelentkezés használata" }, + "selectAnotherMethod": { + "message": "Másik módszer választás", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Helyreállító kód használata" + }, "insertYubiKey": { "message": "A YubiKey beillesztése a számítógép USB portjába és a rajta levő gomb megnyomása." }, @@ -1467,6 +1495,9 @@ "twoStepOptions": { "message": "Kétlépcsős bejelentkezés opciók" }, + "selectTwoStepLoginMethod": { + "message": "Kétlépcsős bejelentkezési mód használata" + }, "recoveryCodeDesc": { "message": "Elveszett a hozzáférés az összes kétlépcsős szolgáltatóhoz? A visszaállítókód használatával letilthatók fiókból a kétlépcsős szolgáltatók." }, @@ -1509,6 +1540,9 @@ "webAuthnMigrated": { "message": "(FIDO-ból áthelyezve)" }, + "openInNewTab": { + "message": "Megnyitás új fülön" + }, "emailTitle": { "message": "Email cím" }, @@ -1555,7 +1589,7 @@ "message": "Biztos folytatni szeretnénk?" }, "moveSelectedItemsDesc": { - "message": "Choose a folder that you would like to add the $COUNT$ selected item(s) to.", + "message": "Válassz ki egy mappát, amihez ezt a(z) $COUNT$ kiválasztott elemet hozzá szeretnéd adni.", "placeholders": { "count": { "content": "$1", @@ -1590,10 +1624,10 @@ "message": "UUID másolása" }, "errorRefreshingAccessToken": { - "message": "Access Token Refresh Error" + "message": "Hozzáférési token frissítés hiba" }, "errorRefreshingAccessTokenDesc": { - "message": "No refresh token or API keys found. Please try logging out and logging back in." + "message": "Nem található frissítőtoken vagy API kulcs. Kérlek próbálj kilépni és újra belépni." }, "warning": { "message": "Figyelmeztetés" @@ -1611,7 +1645,7 @@ "message": "Ez az exportálás titkosítatlan formátumban tartalmazza a titkos adatokat. Ne tároljuk vagy ne küldjük el az exportált fájlt nem biztonságos csatornákon (például emailben). A használat befejezése után azonnal töröljük." }, "encExportKeyWarningDesc": { - "message": "Ez az exportálás titkosítja az adatokat a fiók titkosítási kulcsával. Ha valaha a diók forgatási kulcsa más lesz, akkor újra exportálni kell, mert nem lehet visszafejteni ezt az exportálási fájlt." + "message": "Ez az exportálás titkosítja az adatokat a fiók titkosítási kulcsával. Ha valaha a fiók forgatási kulcsa más lesz, akkor újra exportálni kell, mert nem lehet visszafejteni ezt az exportálási fájlt." }, "encExportAccountWarningDesc": { "message": "A fiók titkosítási kulcsai minden Bitwarden felhasználói fiókhoz egyediek, ezért nem importálhatunk titkosított exportálást egy másik fiókba." @@ -1650,7 +1684,7 @@ "message": "Fájl jelszó megerősítés" }, "accountRestrictedOptionDescription": { - "message": "Használjuk a fiókjfelhasználónevéből és a fő jelszóból származó titkosítási kulcsot az exportálás titkosításához és az importálás korlátozásához csak az aktuális Bitwarden fiókra." + "message": "Használjuk a fiók felhasználónevéből és a mesterjelszóból származó titkosítási kulcsot az exportálás titkosításához és az importálás korlátozásához csak az aktuális Bitwarden fiókra." }, "passwordProtectedOptionDescription": { "message": "Hozzunk létre egy felhasználó által generált jelszót az exportálás védelme érdekében. Ezzel más fiókokban is használható exportálást hozhatunk létre." @@ -1873,7 +1907,7 @@ "message": "Munkamenetek hitelesítésének eldobása" }, "deauthorizeSessionsDesc": { - "message": "Aggódunk a egy másik eszközön történő bejelentkezés miatt? Az alábbiakban ismertetett módon dobjuk el az összes hitelesítést az összes számítógépen és eszközön. Ez a biztonsági lépés akkor ajánlott, ha korábban nyilvános helyen levő számítógépet használtunk vagy véletlenül mentettünk jelszót egy olyan eszközön, amely nem a sajátunk. Ez a lépés törli az összes korábban megjegyzett kétlépéses bejelentkezési munkamenetet." + "message": "Aggódunk a egy másik eszközön történő bejelentkezés miatt? Az alábbiakban ismertetett módon dobjuk el az összes hitelesítést az összes számítógépen és eszközön. Ez a biztonsági lépés akkor ajánlott, ha korábban nyilvános helyen levő számítógépet használtunk vagy véletlenül mentettünk jelszót egy olyan eszközön, amely nem a sajátunk. Ez a lépés törli az összes korábban megjegyzett kétfaktoros bejelentkezési munkamenetet." }, "deauthorizeSessionsWarning": { "message": "A folytatásban s felhasználó kiléptetésre kerül az aktuális munkamenetből, szükséges az ismételt bejelentkezés. Ismételten megjelenik a kétlépcsős bejelentkezés, ha az engedélyezett. Más eszközök aktív munkamenetei akár egy óráig is aktívak maradhatnak." @@ -2224,6 +2258,9 @@ "revokeAccess": { "message": "Hozzáférés visszavonása" }, + "revoke": { + "message": "Visszavonás" + }, "twoStepLoginProviderEnabled": { "message": "Ez a kétlépéses bejelentkezés szolgáltató már engedélyezett a fiókon." }, @@ -4081,6 +4118,12 @@ "updateBrowserDesc": { "message": "Nem támogatott böngészőt használunk. Előfordulhat, hogy a webes széf nem működik megfelelően." }, + "youHaveAPendingLoginRequest": { + "message": "Függőben lévő bejelentkezési kérelem van egy másik eszközről." + }, + "reviewLoginRequest": { + "message": "Bejelentkezési kérés áttekintése" + }, "freeTrialEndPromptCount": { "message": "Az ingyenes próbaidőszak $COUNT$ nap múlva ér véget.", "placeholders": { @@ -4467,7 +4510,7 @@ } }, "encryptionKeyUpdateCannotProceed": { - "message": "Encryption key update cannot proceed" + "message": "A titkosítókulcs frissítése nem végrehajtható" }, "editFieldLabel": { "message": "$LABEL$ szerkesztése", @@ -4488,7 +4531,7 @@ } }, "keyUpdateFoldersFailed": { - "message": "When updating your encryption key, your folders could not be decrypted. To continue with the update, your folders must be deleted. No vault items will be deleted if you proceed." + "message": "A titkosítókulcs frissítésekor a mappáid nem fejthetőek vissza. A frissítés folytatásához a mappáidat törölni kell. Semmi nem fog törlődni, ha folytatod." }, "keyUpdated": { "message": "A kulcs frissítésre került." @@ -4533,7 +4576,7 @@ "message": "Nincs kiválasztva semmi." }, "receiveMarketingEmailsV2": { - "message": "Get advice, announcements, and research opportunities from Bitwarden in your inbox." + "message": "Kapj tanácsokat, bejelentéseket és közvélemény-kutatásokat a Bitwardentől a postaládádba." }, "unsubscribe": { "message": "Leiratkozás" @@ -4666,10 +4709,10 @@ "message": "A választott mesterjelszó gyenge. Erős jelszót kell használni a Bitwarden fiók megfelelő védelme érdekében. Biztosan ezt a mesterjelszót szeretnénk használni?" }, "rotateAccountEncKey": { - "message": "A fiók titkosító kulcs forgatása is" + "message": "A felhasználói fiókom titkosítókódját is cseréljük le" }, "rotateEncKeyTitle": { - "message": "Titkosító kulcs forgatása" + "message": "Titkosító kulcs cseréje" }, "rotateEncKeyConfirmation": { "message": "Biztosan fordításra kerüljön a fiók titkosító kulcsa?" @@ -4719,7 +4762,7 @@ "message": "Az API kulcs használható a Bitwarden nyilvános API hitelesítéséhez." }, "apiKeyRotateDesc": { - "message": "Az API kulcs forgatása érvényteleníti a korábbi kulcsot. Az API kulcs forgatható, ha a jelenlegi kulcs már nem tűnik biztonságosnak." + "message": "Az API kulcs cseréje érvényteleníti a korábbi kulcsot. Ha azt gondolod, hogy a jelenlegi kulcs nem biztonságos akkor lecserélheted az API kulcsot." }, "apiKeyWarning": { "message": "Az API kulcs teljes hozzáférést biztosít a szervezethez. Célszerű titokban tartani." @@ -4738,7 +4781,7 @@ "message": "API kulcs megtekintése" }, "rotateApiKey": { - "message": "API kulcs forgatása" + "message": "API kulcs cseréje" }, "selectOneCollection": { "message": "Legalább egy gyűjteményt ki kell választani." @@ -4758,6 +4801,15 @@ "masterPassPolicyDesc": { "message": "A minimális követelmények beállítása a mesterjelszó hosszához." }, + "passwordStrengthScore": { + "message": "A jelszó erősségi pontszáma $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "twoStepLoginPolicyTitle": { "message": "Kétlépéses bejelentkezés szükséges" }, @@ -5038,12 +5090,40 @@ "requireSsoExemption": { "message": "A szervezet tulajdonosai és adminisztrátorai mentesülnek az irányelv végrehajtása alól." }, + "limitSendViews": { + "message": "Megtekintések korlátozása" + }, + "limitSendViewsHint": { + "message": "Senki sem tudja megtekinteni ezt a Send elemet a korlát elérése után.", + "description": "Displayed under the limit views field on Send" + }, + "limitSendViewsCount": { + "message": "$ACCESSCOUNT$ megtekintés maradt.", + "description": "Displayed under the limit views field on Send", + "placeholders": { + "accessCount": { + "content": "$1", + "example": "2" + } + } + }, + "sendDetails": { + "message": "Send részletek", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendTypeTextToShare": { + "message": "Megosztandó szöveg" + }, "sendTypeFile": { "message": "Fájl" }, "sendTypeText": { "message": "Szöveg" }, + "sendPasswordDescV3": { + "message": "Adjunk meg egy opcionális jelszót a címzetteknek a Send eléréséhez.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "createSend": { "message": "Új Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -5068,19 +5148,15 @@ "message": "Küldés törlése", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, - "deleteSendConfirmation": { - "message": "Biztosan törlésre kerüljön ez a küldés?", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "whatTypeOfSend": { - "message": "Milyen típusú ez a küldés?", + "deleteSendPermanentConfirmation": { + "message": "Biztosan véglegesen törlésre kerüljön ez a Send elem?", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "deletionDate": { "message": "Törlési dátum" }, - "deletionDateDesc": { - "message": "A Send véglegesen törölve lesz a meghatározott időpontban.", + "deletionDateDescV2": { + "message": "A Send véglegesen törölve lesz ebben az időpontban.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "expirationDate": { @@ -5093,21 +5169,6 @@ "maxAccessCount": { "message": "Maximális elérési szám" }, - "maxAccessCountDesc": { - "message": "Amennyiben be van állítva, a Send elérhetetlen lesz, amint elérik a meghatározott hozzáférések számát.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "currentAccessCount": { - "message": "Aktuális elérési szám" - }, - "sendPasswordDesc": { - "message": "Opcionálissan egy jelszó kérhető a felhasználóktól a Küldés eléréséhez.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendNotesDesc": { - "message": "Személyes megjegyzések erről a Küldésről.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "disabled": { "message": "Letiltva" }, @@ -5134,13 +5195,6 @@ "removePasswordConfirmation": { "message": "Biztosan eltávolításra kerüljön ez a jelszó?" }, - "hideEmail": { - "message": "Saját email cím elrejtése a címzettek elől." - }, - "disableThisSend": { - "message": "A Send letiltásával mindenki hozzáférése megvonható.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "allSends": { "message": "Összes küldés" }, @@ -5151,6 +5205,9 @@ "pendingDeletion": { "message": "Függőben lévő törlés" }, + "hideTextByDefault": { + "message": "Szöveg elrejtése alapértelmezetten" + }, "expired": { "message": "Lejárt" }, @@ -5372,13 +5429,6 @@ "message": "Ne engedjük, hogy a felhasználók elrejtsék email címüket a címzettek elől a Send elem létrehozása vagy szerkesztése során.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, - "sendOptionsPolicyInEffect": { - "message": "A következő szervezeti irányelvek vannak érvényben:" - }, - "sendDisableHideEmailInEffect": { - "message": "A felhasználók nem rejthetik el email címüket a címzettek elől egy Send elem létrehozásakor vagy szerkesztésekor.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "modifiedPolicyId": { "message": "$ID$ szabály módosításra került.", "placeholders": { @@ -5478,27 +5528,6 @@ "personalOwnershipCheckboxDesc": { "message": "A szervezeti felhasználók személyes tulajdon letiltása" }, - "textHiddenByDefault": { - "message": "A Küldés elérésekor alapértelmezés szerint a szöveg elrejtése", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendNameDesc": { - "message": "Barátságos név a Küldés leírására.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendTextDesc": { - "message": "A küldendő szöveg." - }, - "sendFileDesc": { - "message": "A küldendő fájl." - }, - "copySendLinkOnSave": { - "message": "A hivatkozás másolása a Küldés megosztásához a vágólapra mentéskor." - }, - "sendLinkLabel": { - "message": "Hivatkozás küldése", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "send": { "message": "Küldés", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -5531,10 +5560,10 @@ "description": "This will be used as part of a larger sentence, broken up to include links. The full sentence will read 'Learn more, see how it works, **or** try it now.'" }, "developmentDevOpsAndITTeamsChooseBWSecret": { - "message": "Development, DevOps, and IT teams choose Bitwarden Secrets Manager to securely manage and deploy their infrastructure and machine secrets." + "message": "Fejlesztők, DevOps és informatikai csapatok választják a Bitwarden Secret Managert hogy biztonságosan tudják telepíteni az infrastruktúra és eszköztitkokat." }, "centralizeSecretsManagement": { - "message": "Centralize secrets management." + "message": "Központosítsd a titkosított adattárolást." }, "centralizeSecretsManagementDescription": { "message": "Securely store and manage secrets in one location to prevent secret sprawl across your organization." @@ -5573,7 +5602,7 @@ "message": "További Bitwarden termékek" }, "requestAccessToSecretsManager": { - "message": "Request access to Secrets Manager" + "message": "Igényelj hozzáférést a Secrets Managerhez" }, "youNeedApprovalFromYourAdminToTrySecretsManager": { "message": "You need approval from your administrator to try Secrets Manager." @@ -5594,10 +5623,10 @@ "message": "Open your organization's" }, "usingTheMenuSelect": { - "message": "Using the menu, select" + "message": "A menü segítségével válassz az alábbiakból" }, "toGrantAccessToSelectedMembers": { - "message": "to grant access to selected members." + "message": "hogy kiválasztott tagoknak hozzáférést biztosíts." }, "sendVaultCardTryItNow": { "message": "próbáljuk ki most", @@ -5647,12 +5676,21 @@ "dateParsingError": { "message": "Hiba történt a törlés és a lejárati dátum mentésekor." }, + "hideYourEmail": { + "message": "Saját email cím elrejtése a megtekintések elől." + }, "webAuthnFallbackMsg": { "message": "A 2FA ellenőrzéséhez kattintsunk az alábbi gombra." }, "webAuthnAuthenticate": { "message": "WebAutn hitelesítés" }, + "readSecurityKey": { + "message": "Biztonsági kulcs olvasása" + }, + "awaitingSecurityKeyInteraction": { + "message": "Várakozás a biztonsági kulcs interakciójára..." + }, "webAuthnNotSupported": { "message": "Ezen a böngészőn a WebAuthn nem támogatott." }, @@ -7080,11 +7118,11 @@ "description": "the text, 'SCIM' and 'API', are acronyms and should not be translated." }, "rotateScimKeyWarning": { - "message": "Biztosan forgatni akarjuk a SCIM API kulcsot? A jelenlegi kulcs már nem működik egyik meglévő integrációhoz sem.", + "message": "Biztosan szeretnénk lecserélni a SCIM API kulcsot? A jelenlegi kulcs már nem működik egyik meglévő integrációhoz sem.", "description": "the text, 'SCIM' and 'API', are acronyms and should not be translated." }, "rotateKey": { - "message": "Kulcs forgatása" + "message": "Kulcs cseréje" }, "scimApiKey": { "message": "SCIM API kulcs", @@ -7099,7 +7137,7 @@ "description": "the text, 'SCIM' and 'URL', are acronyms and should not be translated." }, "scimApiKeyRotated": { - "message": "A SCIM API kulcs sikeresen forgatásra került.", + "message": "A SCIM API kulcs sikeresen lecserélésre került.", "description": "the text, 'SCIM' and 'API', are acronyms and should not be translated." }, "scimSettingsSaved": { @@ -7199,6 +7237,12 @@ "duoRequiredByOrgForAccount": { "message": "A fiókhoz kétlépcsős Duo bejelentkezés szükséges." }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Duo kétlépcsős bejelentkezés szükséges a fiókhoz. Kövessük az alábbi lépéseket a bejelentkezés befejezéséhez." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Kövessük az alábbi lépéseket a bejelentkezés befejezéséhez." + }, "launchDuo": { "message": "Duo indítása" }, @@ -8844,15 +8888,15 @@ "message": "A megerősítő email elküldésre került az email címre:" }, "sorryToSeeYouGo": { - "message": "Sorry to see you go! Help improve Bitwarden by sharing why you're canceling.", + "message": "Sajnáljuk, hogy itt hagysz minket! Segíts fejlődnünk azzal, hogy megosztod, hogy miért mondod fel a szolgáltatást.", "description": "A message shown to users as part of an offboarding survey asking them to provide more information on their subscription cancelation." }, "selectCancellationReason": { - "message": "Select a reason for canceling", + "message": "Válaszd ki a felmondás okát", "description": "Used as a form field label for a select input on the offboarding survey." }, "anyOtherFeedback": { - "message": "Is there any other feedback you'd like to share?", + "message": "Van még bármi visszajelzés, amit meg szeretnél osztani?", "description": "Used as a form field label for a textarea input on the offboarding survey." }, "missingFeatures": { @@ -9376,7 +9420,7 @@ "message": "Szervezet hozzáadása" }, "createdNewClient": { - "message": "Successfully created new client" + "message": "Az új ügyfél sikeresen létrejött" }, "noAccess": { "message": "Nincs hozzáférés." @@ -9793,9 +9837,15 @@ "learnMoreAboutApi": { "message": "További információ a Bitwarden API-járól" }, + "fileSend": { + "message": "Fájl típusú Send" + }, "fileSends": { "message": "Fájl küldés" }, + "textSend": { + "message": "Szöveg típusú Send" + }, "textSends": { "message": "Szöveg küldés" }, @@ -10029,10 +10079,6 @@ "message": "Speciális karakterek bevonása", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "addAttachment": { "message": "Melléklet hozzáadása" }, @@ -10164,7 +10210,7 @@ "message": "Fontos megjegyzés" }, "setupTwoStepLogin": { - "message": "Kétlépéses bejelentkezés szükséges" + "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." @@ -10432,10 +10478,31 @@ "assignedExceedsAvailable": { "message": "A hozzárendelt helyek száma meghaladja a rendelkezésre álló helyek számát." }, + "changeAtRiskPassword": { + "message": "Kockázatos jelszó megváltoztatása" + }, "removeUnlockWithPinPolicyTitle": { "message": "Feloldás eltávolítása PIN kóddal" }, "removeUnlockWithPinPolicyDesc": { "message": "Nem engedjük meg a tagoknak, hogy PIN kóddal oldják fel fiókjuk zárolását." + }, + "limitedEventLogs": { + "message": "A $PRODUCT_TYPE$ csomagok nem férnek hozzá a valós eseménynaplókhoz.", + "placeholders": { + "product_type": { + "content": "$1", + "example": "Teams" + } + } + }, + "upgradeForFullEvents": { + "message": "Teljes hozzáférést kaphatunk a szervezeti eseménynaplókhoz, ha Teams vagy Enterprise csomagra térünk át." + }, + "upgradeEventLogTitle": { + "message": "Áttérés valós eseménynapló adatokhoz" + }, + "upgradeEventLogMessage": { + "message": "Ezek az események csak példák és nem tükröznek valós eseményeket a Bitwarden szervezetén belül." } } diff --git a/apps/web/src/locales/id/messages.json b/apps/web/src/locales/id/messages.json index 055968f85c6..be55d7790c4 100644 --- a/apps/web/src/locales/id/messages.json +++ b/apps/web/src/locales/id/messages.json @@ -5,6 +5,9 @@ "criticalApplications": { "message": "Critical applications" }, + "noCriticalAppsAtRisk": { + "message": "No critical applications at risk" + }, "accessIntelligence": { "message": "Access Intelligence" }, @@ -198,6 +201,9 @@ "notes": { "message": "Catatan" }, + "privateNote": { + "message": "Private note" + }, "note": { "message": "Note" }, @@ -1026,6 +1032,9 @@ "no": { "message": "Tidak" }, + "location": { + "message": "Location" + }, "loginOrCreateNewAccount": { "message": "Masuk atau buat akun baru untuk mengakses brankas Anda." }, @@ -1161,13 +1170,22 @@ "logInToBitwarden": { "message": "Log in to Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "Enter the code sent to your email" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Enter the code from your authenticator app" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Press your YubiKey to authenticate" + }, "authenticationTimeout": { "message": "Authentication timeout" }, "authenticationSessionTimedOut": { "message": "The authentication session timed out. Please restart the login process." }, - "verifyIdentity": { + "verifyYourIdentity": { "message": "Verify your Identity" }, "weDontRecognizeThisDevice": { @@ -1443,12 +1461,22 @@ "rememberMe": { "message": "Ingat saya" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Don't ask again on this device for 30 days" + }, "sendVerificationCodeEmailAgain": { "message": "Kirim ulang email kode verifikasi" }, "useAnotherTwoStepMethod": { "message": "Gunakan metode login dua-langkah lainnya" }, + "selectAnotherMethod": { + "message": "Select another method", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Use your recovery code" + }, "insertYubiKey": { "message": "Masukkan YubiKey Anda ke port USB komputer Anda, lalu sentuh tombol nya." }, @@ -1467,6 +1495,9 @@ "twoStepOptions": { "message": "Opsi login dua-langkah" }, + "selectTwoStepLoginMethod": { + "message": "Select two-step login method" + }, "recoveryCodeDesc": { "message": "Kehilangan akses ke semua penyedia dua faktor Anda? Gunakan kode pemulihan untuk menonaktifkan semua penyedia dua faktor dari akun Anda." }, @@ -1509,6 +1540,9 @@ "webAuthnMigrated": { "message": "(Dipindahkan dari FIDO)" }, + "openInNewTab": { + "message": "Open in new tab" + }, "emailTitle": { "message": "Surel" }, @@ -2224,6 +2258,9 @@ "revokeAccess": { "message": "Cabut Akses" }, + "revoke": { + "message": "Revoke" + }, "twoStepLoginProviderEnabled": { "message": "Penyedia proses masuk dua langkah ini diaktifkan di akun Anda." }, @@ -4081,6 +4118,12 @@ "updateBrowserDesc": { "message": "Anda menggunakan browser web yang tidak didukung. Kubah web mungkin tidak berfungsi dengan baik." }, + "youHaveAPendingLoginRequest": { + "message": "You have a pending login request from another device." + }, + "reviewLoginRequest": { + "message": "Review login request" + }, "freeTrialEndPromptCount": { "message": "Your free trial ends in $COUNT$ days.", "placeholders": { @@ -4758,6 +4801,15 @@ "masterPassPolicyDesc": { "message": "Tetapkan persyaratan minimum untuk kekuatan kata sandi utama." }, + "passwordStrengthScore": { + "message": "Password strength score $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "twoStepLoginPolicyTitle": { "message": "Diperlukan login dua-langkah" }, @@ -5038,12 +5090,40 @@ "requireSsoExemption": { "message": "Pemilik dan Administrator Organisasi dibebaskan dari penegakan kebijakan ini." }, + "limitSendViews": { + "message": "Limit views" + }, + "limitSendViewsHint": { + "message": "No one can view this Send after the limit is reached.", + "description": "Displayed under the limit views field on Send" + }, + "limitSendViewsCount": { + "message": "$ACCESSCOUNT$ views left", + "description": "Displayed under the limit views field on Send", + "placeholders": { + "accessCount": { + "content": "$1", + "example": "2" + } + } + }, + "sendDetails": { + "message": "Send details", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendTypeTextToShare": { + "message": "Text to share" + }, "sendTypeFile": { "message": "Berkas" }, "sendTypeText": { "message": "Teks" }, + "sendPasswordDescV3": { + "message": "Add an optional password for recipients to access this Send.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "createSend": { "message": "Buat Pengiriman Baru", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -5068,19 +5148,15 @@ "message": "Hapus Kirim", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, - "deleteSendConfirmation": { - "message": "Anda yakin ingin menghapus Kirim ini?", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "whatTypeOfSend": { - "message": "Jenis Pengiriman apakah ini?", + "deleteSendPermanentConfirmation": { + "message": "Are you sure you want to permanently delete this Send?", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "deletionDate": { "message": "Tanggal Penghapusan" }, - "deletionDateDesc": { - "message": "Pengiriman akan dihapus secara permanen pada tanggal dan waktu yang ditentukan.", + "deletionDateDescV2": { + "message": "The Send will be permanently deleted on this date.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "expirationDate": { @@ -5093,21 +5169,6 @@ "maxAccessCount": { "message": "Hitungan Akses Maksimum" }, - "maxAccessCountDesc": { - "message": "Jika disetel, pengguna tidak dapat lagi mengakses pengiriman ini setelah jumlah akses maksimum tercapai.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "currentAccessCount": { - "message": "Hitungan Akses Saat Ini" - }, - "sendPasswordDesc": { - "message": "Secara opsional, minta kata sandi bagi pengguna untuk mengakses Kirim ini.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendNotesDesc": { - "message": "Catatan pribadi tentang Send ini.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "disabled": { "message": "Dinonaktifkan" }, @@ -5134,13 +5195,6 @@ "removePasswordConfirmation": { "message": "Anda yakin ingin menghapus kata sandi?" }, - "hideEmail": { - "message": "Sembunyikan alamat email dari penerima." - }, - "disableThisSend": { - "message": "Nonaktifkan Pengiriman ini sehingga tidak ada yang dapat mengaksesnya.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "allSends": { "message": "Semua Dikirim" }, @@ -5151,6 +5205,9 @@ "pendingDeletion": { "message": "Penghapusan menunggu keputusan" }, + "hideTextByDefault": { + "message": "Hide text by default" + }, "expired": { "message": "Kedaluwarsa" }, @@ -5372,13 +5429,6 @@ "message": "Pengguna tidak boleh menyembunyikan alamat email dari penerima ketika membuat atau mengubah Send.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, - "sendOptionsPolicyInEffect": { - "message": "Ketentuan organization berikut ini sedang berlaku:" - }, - "sendDisableHideEmailInEffect": { - "message": "Pengguna tidak boleh menyembunyikan alamat email dari penerima ketika membuat atau mengubah Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "modifiedPolicyId": { "message": "Kebijakan yang diubah $ID$.", "placeholders": { @@ -5478,27 +5528,6 @@ "personalOwnershipCheckboxDesc": { "message": "Nonaktifkan kepemilikan pribadi untuk pengguna organisasi" }, - "textHiddenByDefault": { - "message": "Saat mengakses Send, sembunyikan teks secara default", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendNameDesc": { - "message": "Nama yang ramah untuk menggambarkan kirim ini.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendTextDesc": { - "message": "Teks yang ingin Anda kirim." - }, - "sendFileDesc": { - "message": "File yang ingin Anda kirim." - }, - "copySendLinkOnSave": { - "message": "Salin tautan untuk membagikan kirim ini ke clipboard saya saat menyimpan." - }, - "sendLinkLabel": { - "message": "Kirim tautan", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "send": { "message": "Kirim", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -5647,12 +5676,21 @@ "dateParsingError": { "message": "Ada kesalahan menyimpan penghapusan dan tanggal kedaluwarsa Anda." }, + "hideYourEmail": { + "message": "Hide your email address from viewers." + }, "webAuthnFallbackMsg": { "message": "Untuk mengverifikasi dua-langkat autentikasi anda, silahkan click tombol dibawah." }, "webAuthnAuthenticate": { "message": "Autentikasi dengan WebAuthn" }, + "readSecurityKey": { + "message": "Read security key" + }, + "awaitingSecurityKeyInteraction": { + "message": "Awaiting security key interaction..." + }, "webAuthnNotSupported": { "message": "WebAuthn tidak didukung oleh browser ini." }, @@ -7199,6 +7237,12 @@ "duoRequiredByOrgForAccount": { "message": "Duo two-step login is required for your account." }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Duo two-step login is required for your account. Follow the steps below to finish logging in." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Follow the steps below to finish logging in." + }, "launchDuo": { "message": "Launch Duo" }, @@ -9793,9 +9837,15 @@ "learnMoreAboutApi": { "message": "Learn more about Bitwarden's API" }, + "fileSend": { + "message": "File Send" + }, "fileSends": { "message": "File Sends" }, + "textSend": { + "message": "Text Send" + }, "textSends": { "message": "Text Sends" }, @@ -10029,10 +10079,6 @@ "message": "Include special characters", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "addAttachment": { "message": "Add attachment" }, @@ -10432,10 +10478,31 @@ "assignedExceedsAvailable": { "message": "Assigned seats exceed available seats." }, + "changeAtRiskPassword": { + "message": "Change at-risk password" + }, "removeUnlockWithPinPolicyTitle": { "message": "Remove Unlock with PIN" }, "removeUnlockWithPinPolicyDesc": { "message": "Do not allow members to unlock their account with a PIN." + }, + "limitedEventLogs": { + "message": "$PRODUCT_TYPE$ plans do not have access to real event logs", + "placeholders": { + "product_type": { + "content": "$1", + "example": "Teams" + } + } + }, + "upgradeForFullEvents": { + "message": "Get full access to organization event logs by upgrading to a Teams or Enterprise plan." + }, + "upgradeEventLogTitle": { + "message": "Upgrade for real event log data" + }, + "upgradeEventLogMessage": { + "message": "These events are examples only and do not reflect real events within your Bitwarden organization." } } diff --git a/apps/web/src/locales/it/messages.json b/apps/web/src/locales/it/messages.json index 7ed38e87270..d1e74c5d670 100644 --- a/apps/web/src/locales/it/messages.json +++ b/apps/web/src/locales/it/messages.json @@ -5,6 +5,9 @@ "criticalApplications": { "message": "Critical applications" }, + "noCriticalAppsAtRisk": { + "message": "Nessuna applicazione critica a rischio" + }, "accessIntelligence": { "message": "Access Intelligence" }, @@ -198,6 +201,9 @@ "notes": { "message": "Note" }, + "privateNote": { + "message": "Nota privata" + }, "note": { "message": "Nota" }, @@ -1026,6 +1032,9 @@ "no": { "message": "No" }, + "location": { + "message": "Luogo" + }, "loginOrCreateNewAccount": { "message": "Entra o crea un nuovo account per accedere alla tua cassaforte." }, @@ -1161,13 +1170,22 @@ "logInToBitwarden": { "message": "Log in to Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "Enter the code sent to your email" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Enter the code from your authenticator app" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Press your YubiKey to authenticate" + }, "authenticationTimeout": { "message": "Authentication timeout" }, "authenticationSessionTimedOut": { "message": "The authentication session timed out. Please restart the login process." }, - "verifyIdentity": { + "verifyYourIdentity": { "message": "Verifica la tua identità" }, "weDontRecognizeThisDevice": { @@ -1443,12 +1461,22 @@ "rememberMe": { "message": "Ricordami" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Don't ask again on this device for 30 days" + }, "sendVerificationCodeEmailAgain": { "message": "Invia di nuovo l'email con codice di verifica" }, "useAnotherTwoStepMethod": { "message": "Usa un altro metodo di verifica in due passaggi" }, + "selectAnotherMethod": { + "message": "Select another method", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Use your recovery code" + }, "insertYubiKey": { "message": "Inserisci la tua YubiKey nella porta USB del computer e premi il suo pulsante." }, @@ -1467,6 +1495,9 @@ "twoStepOptions": { "message": "Opzioni verifica in due passaggi" }, + "selectTwoStepLoginMethod": { + "message": "Select two-step login method" + }, "recoveryCodeDesc": { "message": "Hai perso l'accesso a tutti i tuoi metodi di verifica in due passaggi? Usa il tuo codice di recupero per disattivarli tutti dal tuo account." }, @@ -1509,6 +1540,9 @@ "webAuthnMigrated": { "message": "(Trasferito da FIDO)" }, + "openInNewTab": { + "message": "Open in new tab" + }, "emailTitle": { "message": "Email" }, @@ -2224,6 +2258,9 @@ "revokeAccess": { "message": "Revoca accesso" }, + "revoke": { + "message": "Revoca" + }, "twoStepLoginProviderEnabled": { "message": "Questo metodo di verifica in due passaggi è attivo sul tuo account." }, @@ -4081,6 +4118,12 @@ "updateBrowserDesc": { "message": "Stai utilizzando un browser non supportato. La cassaforte web potrebbe non funzionare correttamente." }, + "youHaveAPendingLoginRequest": { + "message": "Hai una richiesta di accesso in sospeso da un altro dispositivo." + }, + "reviewLoginRequest": { + "message": "Rivedi richiesta di accesso" + }, "freeTrialEndPromptCount": { "message": "Your free trial ends in $COUNT$ days.", "placeholders": { @@ -4758,6 +4801,15 @@ "masterPassPolicyDesc": { "message": "Imposta requisiti minimi di complessità della password principale." }, + "passwordStrengthScore": { + "message": "Valutazione complessità parola d'accesso $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "twoStepLoginPolicyTitle": { "message": "Verifica in due passaggi obbligatoria" }, @@ -5038,12 +5090,40 @@ "requireSsoExemption": { "message": "I proprietari e gli amministratori dell'organizzazione sono esonerati dall'applicazione di questa politica." }, + "limitSendViews": { + "message": "Limita visualizzazioni" + }, + "limitSendViewsHint": { + "message": "Nessuno potrà vedere questo Send al raggiungimento del limite.", + "description": "Displayed under the limit views field on Send" + }, + "limitSendViewsCount": { + "message": "$ACCESSCOUNT$ visualizzazioni rimaste", + "description": "Displayed under the limit views field on Send", + "placeholders": { + "accessCount": { + "content": "$1", + "example": "2" + } + } + }, + "sendDetails": { + "message": "Dettagli Send", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendTypeTextToShare": { + "message": "Testo da condividere" + }, "sendTypeFile": { "message": "File" }, "sendTypeText": { "message": "Testo" }, + "sendPasswordDescV3": { + "message": "Richiedi ai destinatari una parola d'accesso opzionale per aprire questo Send.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "createSend": { "message": "Nuovo Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -5068,19 +5148,15 @@ "message": "Elimina Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, - "deleteSendConfirmation": { - "message": "Sei sicuro di voler eliminare questo Send?", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "whatTypeOfSend": { - "message": "Che tipo di Send è questo?", + "deleteSendPermanentConfirmation": { + "message": "Sicuro di voler eliminare definitivamente questo Send?", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "deletionDate": { "message": "Data di eliminazione" }, - "deletionDateDesc": { - "message": "Il Send sarà eliminato definitivamente alla data e all'ora specificate.", + "deletionDateDescV2": { + "message": "Il Send sarà eliminato definitivamente in questa data.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "expirationDate": { @@ -5093,21 +5169,6 @@ "maxAccessCount": { "message": "Numero massimo di accessi" }, - "maxAccessCountDesc": { - "message": "Se impostata, gli utenti non potranno più accedere a questo Send una volta raggiunto il numero massimo di accessi.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "currentAccessCount": { - "message": "Numero di accessi correnti" - }, - "sendPasswordDesc": { - "message": "Richiedi una password agli utenti per accedere a questo Send (facoltativo).", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendNotesDesc": { - "message": "Note private sul Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "disabled": { "message": "Disabilitato" }, @@ -5134,13 +5195,6 @@ "removePasswordConfirmation": { "message": "Sei sicuro di voler rimuovere la password?" }, - "hideEmail": { - "message": "Nascondi il mio indirizzo email dai destinatari." - }, - "disableThisSend": { - "message": "Disattiva il Send per renderlo inaccessibile.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "allSends": { "message": "Tutti i Send" }, @@ -5151,6 +5205,9 @@ "pendingDeletion": { "message": "In attesa di eliminazione" }, + "hideTextByDefault": { + "message": "Nascondi testo come default" + }, "expired": { "message": "Scaduto" }, @@ -5372,13 +5429,6 @@ "message": "Mostra sempre l'indirizzo email del membro ai destinatari durante la creazione o la modifica di un Send.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, - "sendOptionsPolicyInEffect": { - "message": "Queste politiche dell'organizzazione sono attualmente in vigore:" - }, - "sendDisableHideEmailInEffect": { - "message": "Gli utenti non possono nascondere il loro indirizzo email dai destinatari quando creano o modificano un Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "modifiedPolicyId": { "message": "Politica $ID$ modificata.", "placeholders": { @@ -5478,27 +5528,6 @@ "personalOwnershipCheckboxDesc": { "message": "Rimuovi la proprietà individuale per gli utenti dell'organizzazione" }, - "textHiddenByDefault": { - "message": "Quando si accede al Send, nascondi il testo per impostazione predefinita", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendNameDesc": { - "message": "Un nome intuitivo per descrivere il Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendTextDesc": { - "message": "Il testo che vuoi inviare." - }, - "sendFileDesc": { - "message": "Il file che vuoi inviare." - }, - "copySendLinkOnSave": { - "message": "Copia il link al Send negli appunti dopo averlo salvato." - }, - "sendLinkLabel": { - "message": "Link del Send", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "send": { "message": "Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -5647,12 +5676,21 @@ "dateParsingError": { "message": "Si è verificato un errore durante il salvataggio delle date di eliminazione e scadenza." }, + "hideYourEmail": { + "message": "Nascondi il tuo indirizzo e-mail ai visualizzatori." + }, "webAuthnFallbackMsg": { "message": "Per verificare la tua 2FA clicca il pulsante qui sotto." }, "webAuthnAuthenticate": { "message": "Autenticazione WebAuthn" }, + "readSecurityKey": { + "message": "Read security key" + }, + "awaitingSecurityKeyInteraction": { + "message": "Awaiting security key interaction..." + }, "webAuthnNotSupported": { "message": "WebAuthn non è supportato da questo browser." }, @@ -7199,6 +7237,12 @@ "duoRequiredByOrgForAccount": { "message": "Per il tuo account è richiesta la verifica in due passaggi DUO." }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Duo two-step login is required for your account. Follow the steps below to finish logging in." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Follow the steps below to finish logging in." + }, "launchDuo": { "message": "Avvia DUO" }, @@ -9793,9 +9837,15 @@ "learnMoreAboutApi": { "message": "Learn more about Bitwarden's API" }, + "fileSend": { + "message": "File Send" + }, "fileSends": { "message": "Send File" }, + "textSend": { + "message": "Testo Send" + }, "textSends": { "message": "Send Testo" }, @@ -10029,10 +10079,6 @@ "message": "Include special characters", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "addAttachment": { "message": "Add attachment" }, @@ -10432,10 +10478,31 @@ "assignedExceedsAvailable": { "message": "I posti assegnati superano i posti disponibili." }, + "changeAtRiskPassword": { + "message": "Cambia parola d'accesso a rischio" + }, "removeUnlockWithPinPolicyTitle": { "message": "Rimuovi sblocco con PIN" }, "removeUnlockWithPinPolicyDesc": { "message": "Non consentire ai membri di sbloccare il proprio account con un PIN." + }, + "limitedEventLogs": { + "message": "I piani $PRODUCT_TYPE$ non hanno accesso ai registri degli eventi reali", + "placeholders": { + "product_type": { + "content": "$1", + "example": "Teams" + } + } + }, + "upgradeForFullEvents": { + "message": "Ottieni pieno accesso ai registri degli eventi dell'organizzazione aggiornando a un piano Teams o Enterprise." + }, + "upgradeEventLogTitle": { + "message": "Aggiorna per i dati del registro eventi reali" + }, + "upgradeEventLogMessage": { + "message": "Questi eventi sono solo esempi e non riflettono eventi reali all'interno della tua organizzazione Bitwarden." } } diff --git a/apps/web/src/locales/ja/messages.json b/apps/web/src/locales/ja/messages.json index 060d55724b0..4c5747b151a 100644 --- a/apps/web/src/locales/ja/messages.json +++ b/apps/web/src/locales/ja/messages.json @@ -5,6 +5,9 @@ "criticalApplications": { "message": "きわめて重要なアプリ" }, + "noCriticalAppsAtRisk": { + "message": "No critical applications at risk" + }, "accessIntelligence": { "message": "アクセス インテリジェンス" }, @@ -198,6 +201,9 @@ "notes": { "message": "メモ" }, + "privateNote": { + "message": "Private note" + }, "note": { "message": "メモ" }, @@ -1026,6 +1032,9 @@ "no": { "message": "いいえ" }, + "location": { + "message": "Location" + }, "loginOrCreateNewAccount": { "message": "安全なデータ保管庫へアクセスするためにログインまたはアカウントを作成してください。" }, @@ -1161,14 +1170,23 @@ "logInToBitwarden": { "message": "Bitwarden にログイン" }, + "enterTheCodeSentToYourEmail": { + "message": "Enter the code sent to your email" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Enter the code from your authenticator app" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Press your YubiKey to authenticate" + }, "authenticationTimeout": { "message": "認証のタイムアウト" }, "authenticationSessionTimedOut": { "message": "認証セッションの有効期限が切れました。ログイン操作を最初からやり直してください。" }, - "verifyIdentity": { - "message": "本人確認" + "verifyYourIdentity": { + "message": "Verify your Identity" }, "weDontRecognizeThisDevice": { "message": "We don't recognize this device. Enter the code sent to your email to verify your identity." @@ -1443,12 +1461,22 @@ "rememberMe": { "message": "情報を保存する" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Don't ask again on this device for 30 days" + }, "sendVerificationCodeEmailAgain": { "message": "確認コードをメールで再送" }, "useAnotherTwoStepMethod": { "message": "他の2段階認証方法を使用" }, + "selectAnotherMethod": { + "message": "Select another method", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Use your recovery code" + }, "insertYubiKey": { "message": "YubiKey を USB ポートに挿入し、ボタンをタッチしてください。" }, @@ -1467,6 +1495,9 @@ "twoStepOptions": { "message": "2段階認証オプション" }, + "selectTwoStepLoginMethod": { + "message": "Select two-step login method" + }, "recoveryCodeDesc": { "message": "すべての2段階認証プロパイダにアクセスできなくなったときは、リカバリーコードを使用するとアカウントの2段階認証を無効化できます。" }, @@ -1509,6 +1540,9 @@ "webAuthnMigrated": { "message": "(FIDOから移行)" }, + "openInNewTab": { + "message": "Open in new tab" + }, "emailTitle": { "message": "メールアドレス" }, @@ -2224,6 +2258,9 @@ "revokeAccess": { "message": "アクセスを取り消す" }, + "revoke": { + "message": "Revoke" + }, "twoStepLoginProviderEnabled": { "message": "この二段階認証プロバイダは、あなたのアカウントで有効になっています。" }, @@ -4081,6 +4118,12 @@ "updateBrowserDesc": { "message": "サポートされていないブラウザを使用しています。ウェブ保管庫が正しく動作しないかもしれません。" }, + "youHaveAPendingLoginRequest": { + "message": "You have a pending login request from another device." + }, + "reviewLoginRequest": { + "message": "Review login request" + }, "freeTrialEndPromptCount": { "message": "無料体験はあと $COUNT$ 日で終了します。", "placeholders": { @@ -4758,6 +4801,15 @@ "masterPassPolicyDesc": { "message": "マスターパスワードの強度に最低要件を設定する。" }, + "passwordStrengthScore": { + "message": "Password strength score $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "twoStepLoginPolicyTitle": { "message": "2段階認証が必要です" }, @@ -5038,12 +5090,40 @@ "requireSsoExemption": { "message": "組織の所有者および管理者は、このポリシーの執行から除外されます。" }, + "limitSendViews": { + "message": "Limit views" + }, + "limitSendViewsHint": { + "message": "No one can view this Send after the limit is reached.", + "description": "Displayed under the limit views field on Send" + }, + "limitSendViewsCount": { + "message": "$ACCESSCOUNT$ views left", + "description": "Displayed under the limit views field on Send", + "placeholders": { + "accessCount": { + "content": "$1", + "example": "2" + } + } + }, + "sendDetails": { + "message": "Send details", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendTypeTextToShare": { + "message": "Text to share" + }, "sendTypeFile": { "message": "ファイル" }, "sendTypeText": { "message": "テキスト" }, + "sendPasswordDescV3": { + "message": "Add an optional password for recipients to access this Send.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "createSend": { "message": "新しい Send を作成", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -5068,19 +5148,15 @@ "message": "Send を削除", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, - "deleteSendConfirmation": { - "message": "この Send を削除してもよろしいですか?", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "whatTypeOfSend": { - "message": "この Send の種類は何ですか?", + "deleteSendPermanentConfirmation": { + "message": "Are you sure you want to permanently delete this Send?", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "deletionDate": { "message": "削除日時" }, - "deletionDateDesc": { - "message": "Send は指定された日時に完全に削除されます。", + "deletionDateDescV2": { + "message": "The Send will be permanently deleted on this date.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "expirationDate": { @@ -5093,21 +5169,6 @@ "maxAccessCount": { "message": "最大アクセス数" }, - "maxAccessCountDesc": { - "message": "設定されている場合、最大アクセス数に達するとユーザーはこの Send にアクセスできなくなります。", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "currentAccessCount": { - "message": "現在のアクセス数" - }, - "sendPasswordDesc": { - "message": "必要に応じて、ユーザーがこの Send にアクセスするためのパスワードを要求します。", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendNotesDesc": { - "message": "この Send に関するプライベートメモ", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "disabled": { "message": "無効" }, @@ -5134,13 +5195,6 @@ "removePasswordConfirmation": { "message": "パスワードを削除してもよろしいですか?" }, - "hideEmail": { - "message": "受信者に自分のメールアドレスを表示しない" - }, - "disableThisSend": { - "message": "誰もアクセスできないように、この Send を無効にします。", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "allSends": { "message": "すべての Send" }, @@ -5151,6 +5205,9 @@ "pendingDeletion": { "message": "保留中の削除" }, + "hideTextByDefault": { + "message": "Hide text by default" + }, "expired": { "message": "期限切れ" }, @@ -5372,13 +5429,6 @@ "message": "Send を作成または編集するとき、常にメンバーのメールアドレスを受信者と一緒に表示します。", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, - "sendOptionsPolicyInEffect": { - "message": "現在、以下の組織ポリシーが適用されています。" - }, - "sendDisableHideEmailInEffect": { - "message": "Send を作成または編集する際に、ユーザーのメールアドレスを受信者に非表示にすることはできません。", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "modifiedPolicyId": { "message": "変更されたポリシー $ID$.", "placeholders": { @@ -5478,27 +5528,6 @@ "personalOwnershipCheckboxDesc": { "message": "組織ユーザーの個人所有権を無効にする" }, - "textHiddenByDefault": { - "message": "Send へのアクセス時に既定でテキストを非表示にする", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendNameDesc": { - "message": "この Send を説明するわかりやすい名前", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendTextDesc": { - "message": "送信したいテキスト" - }, - "sendFileDesc": { - "message": "送信するファイル" - }, - "copySendLinkOnSave": { - "message": "Send の保存時にクリップボードへリンクをコピーします。" - }, - "sendLinkLabel": { - "message": "Send リンク", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "send": { "message": "Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -5647,12 +5676,21 @@ "dateParsingError": { "message": "削除と有効期限の保存中にエラーが発生しました。" }, + "hideYourEmail": { + "message": "Hide your email address from viewers." + }, "webAuthnFallbackMsg": { "message": "二段階認証を確認するには、下のボタンをクリックしてください。" }, "webAuthnAuthenticate": { "message": "WebAuthn の認証" }, + "readSecurityKey": { + "message": "Read security key" + }, + "awaitingSecurityKeyInteraction": { + "message": "Awaiting security key interaction..." + }, "webAuthnNotSupported": { "message": "WebAuthn はこのブラウザではサポートされていません。" }, @@ -7199,6 +7237,12 @@ "duoRequiredByOrgForAccount": { "message": "アカウントには DUO 二段階認証が必要です。" }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Duo two-step login is required for your account. Follow the steps below to finish logging in." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Follow the steps below to finish logging in." + }, "launchDuo": { "message": "DUO を起動" }, @@ -9793,9 +9837,15 @@ "learnMoreAboutApi": { "message": "Bitwarden API の詳細" }, + "fileSend": { + "message": "File Send" + }, "fileSends": { "message": "ファイル Send" }, + "textSend": { + "message": "Text Send" + }, "textSends": { "message": "テキスト Send" }, @@ -10029,10 +10079,6 @@ "message": "特殊記号を含める", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "addAttachment": { "message": "添付ファイルを追加" }, @@ -10432,10 +10478,31 @@ "assignedExceedsAvailable": { "message": "Assigned seats exceed available seats." }, + "changeAtRiskPassword": { + "message": "Change at-risk password" + }, "removeUnlockWithPinPolicyTitle": { "message": "Remove Unlock with PIN" }, "removeUnlockWithPinPolicyDesc": { "message": "Do not allow members to unlock their account with a PIN." + }, + "limitedEventLogs": { + "message": "$PRODUCT_TYPE$ plans do not have access to real event logs", + "placeholders": { + "product_type": { + "content": "$1", + "example": "Teams" + } + } + }, + "upgradeForFullEvents": { + "message": "Get full access to organization event logs by upgrading to a Teams or Enterprise plan." + }, + "upgradeEventLogTitle": { + "message": "Upgrade for real event log data" + }, + "upgradeEventLogMessage": { + "message": "These events are examples only and do not reflect real events within your Bitwarden organization." } } diff --git a/apps/web/src/locales/ka/messages.json b/apps/web/src/locales/ka/messages.json index a7a1a5c3113..5a7be95dfba 100644 --- a/apps/web/src/locales/ka/messages.json +++ b/apps/web/src/locales/ka/messages.json @@ -5,6 +5,9 @@ "criticalApplications": { "message": "Critical applications" }, + "noCriticalAppsAtRisk": { + "message": "No critical applications at risk" + }, "accessIntelligence": { "message": "Access Intelligence" }, @@ -198,6 +201,9 @@ "notes": { "message": "ჩანაწერები" }, + "privateNote": { + "message": "Private note" + }, "note": { "message": "Note" }, @@ -1026,6 +1032,9 @@ "no": { "message": "არა" }, + "location": { + "message": "Location" + }, "loginOrCreateNewAccount": { "message": "სისტემაში შედით ან შექმენით ახალი ანგარიში თქვენს დაცულ საცავთან საწვდომად." }, @@ -1161,13 +1170,22 @@ "logInToBitwarden": { "message": "Log in to Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "Enter the code sent to your email" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Enter the code from your authenticator app" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Press your YubiKey to authenticate" + }, "authenticationTimeout": { "message": "Authentication timeout" }, "authenticationSessionTimedOut": { "message": "The authentication session timed out. Please restart the login process." }, - "verifyIdentity": { + "verifyYourIdentity": { "message": "Verify your Identity" }, "weDontRecognizeThisDevice": { @@ -1443,12 +1461,22 @@ "rememberMe": { "message": "დამიმახსოვრე" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Don't ask again on this device for 30 days" + }, "sendVerificationCodeEmailAgain": { "message": "გამოგზავნა ერთჯერადი კოდის ელ-ფოსტაზე განმეორებით" }, "useAnotherTwoStepMethod": { "message": "გამოყენება სხვა ორსაფეხურიანი შესვლის მეთოდით" }, + "selectAnotherMethod": { + "message": "Select another method", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Use your recovery code" + }, "insertYubiKey": { "message": "შეარჭეთ თქვენი YubiKey თქვენს კომპიუტერის USB პორტში, შემდგომ დაადეთ მის ღილაკს." }, @@ -1467,6 +1495,9 @@ "twoStepOptions": { "message": "ორსაფეხურიანი ავტორიზაციის პარამეტრები" }, + "selectTwoStepLoginMethod": { + "message": "Select two-step login method" + }, "recoveryCodeDesc": { "message": "დაკარგეთ წვდომა ყველა შენს ორსაფეხურიან პროვაიდერებთან? გამოიყენეთ თქვენი აღდგენის კოდი რომ გათიშოთ ყველა ორსაფეხურიანი ავტორიზაციის პროვაიდერები შენი ანგარიშიდან." }, @@ -1509,6 +1540,9 @@ "webAuthnMigrated": { "message": "(გადმომიგრირდა FIDO-დან)" }, + "openInNewTab": { + "message": "Open in new tab" + }, "emailTitle": { "message": "ელ-ფოსტა" }, @@ -2224,6 +2258,9 @@ "revokeAccess": { "message": "Revoke access" }, + "revoke": { + "message": "Revoke" + }, "twoStepLoginProviderEnabled": { "message": "This two-step login provider is active on your account." }, @@ -4081,6 +4118,12 @@ "updateBrowserDesc": { "message": "You are using an unsupported web browser. The web vault may not function properly." }, + "youHaveAPendingLoginRequest": { + "message": "You have a pending login request from another device." + }, + "reviewLoginRequest": { + "message": "Review login request" + }, "freeTrialEndPromptCount": { "message": "Your free trial ends in $COUNT$ days.", "placeholders": { @@ -4758,6 +4801,15 @@ "masterPassPolicyDesc": { "message": "Set requirements for master password strength." }, + "passwordStrengthScore": { + "message": "Password strength score $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "twoStepLoginPolicyTitle": { "message": "Require two-step login" }, @@ -5038,12 +5090,40 @@ "requireSsoExemption": { "message": "Organization owners and admins are exempt from this policy's enforcement." }, + "limitSendViews": { + "message": "Limit views" + }, + "limitSendViewsHint": { + "message": "No one can view this Send after the limit is reached.", + "description": "Displayed under the limit views field on Send" + }, + "limitSendViewsCount": { + "message": "$ACCESSCOUNT$ views left", + "description": "Displayed under the limit views field on Send", + "placeholders": { + "accessCount": { + "content": "$1", + "example": "2" + } + } + }, + "sendDetails": { + "message": "Send details", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendTypeTextToShare": { + "message": "Text to share" + }, "sendTypeFile": { "message": "File" }, "sendTypeText": { "message": "Text" }, + "sendPasswordDescV3": { + "message": "Add an optional password for recipients to access this Send.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "createSend": { "message": "New Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -5068,19 +5148,15 @@ "message": "Delete Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, - "deleteSendConfirmation": { - "message": "Are you sure you want to delete this Send?", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "whatTypeOfSend": { - "message": "What type of Send is this?", + "deleteSendPermanentConfirmation": { + "message": "Are you sure you want to permanently delete this Send?", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "deletionDate": { "message": "Deletion date" }, - "deletionDateDesc": { - "message": "The Send will be permanently deleted on the specified date and time.", + "deletionDateDescV2": { + "message": "The Send will be permanently deleted on this date.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "expirationDate": { @@ -5093,21 +5169,6 @@ "maxAccessCount": { "message": "Maximum access count" }, - "maxAccessCountDesc": { - "message": "If set, users will no longer be able to access this Send once the maximum access count is reached.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "currentAccessCount": { - "message": "Current access count" - }, - "sendPasswordDesc": { - "message": "Optionally require a password for users to access this Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendNotesDesc": { - "message": "Private notes about this Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "disabled": { "message": "Disabled" }, @@ -5134,13 +5195,6 @@ "removePasswordConfirmation": { "message": "Are you sure you want to remove the password?" }, - "hideEmail": { - "message": "Hide my email address from recipients." - }, - "disableThisSend": { - "message": "Deactivate this Send so that no one can access it.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "allSends": { "message": "All Sends" }, @@ -5151,6 +5205,9 @@ "pendingDeletion": { "message": "Pending deletion" }, + "hideTextByDefault": { + "message": "Hide text by default" + }, "expired": { "message": "Expired" }, @@ -5372,13 +5429,6 @@ "message": "Always show member’s email address with recipients when creating or editing a Send.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, - "sendOptionsPolicyInEffect": { - "message": "The following organization policies are currently in effect:" - }, - "sendDisableHideEmailInEffect": { - "message": "Users are not allowed to hide their email address from recipients when creating or editing a Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "modifiedPolicyId": { "message": "Modified policy $ID$.", "placeholders": { @@ -5478,27 +5528,6 @@ "personalOwnershipCheckboxDesc": { "message": "Remove individual ownership for organization users" }, - "textHiddenByDefault": { - "message": "When accessing the Send, hide the text by default", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendNameDesc": { - "message": "A friendly name to describe this Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendTextDesc": { - "message": "The text you want to Send." - }, - "sendFileDesc": { - "message": "The file you want to Send." - }, - "copySendLinkOnSave": { - "message": "Copy the link to share this Send to my clipboard upon save." - }, - "sendLinkLabel": { - "message": "Send link", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "send": { "message": "Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -5647,12 +5676,21 @@ "dateParsingError": { "message": "There was an error saving your deletion and expiration dates." }, + "hideYourEmail": { + "message": "Hide your email address from viewers." + }, "webAuthnFallbackMsg": { "message": "To verify your 2FA please click the button below." }, "webAuthnAuthenticate": { "message": "Authenticate WebAuthn" }, + "readSecurityKey": { + "message": "Read security key" + }, + "awaitingSecurityKeyInteraction": { + "message": "Awaiting security key interaction..." + }, "webAuthnNotSupported": { "message": "WebAuthn is not supported in this browser." }, @@ -7199,6 +7237,12 @@ "duoRequiredByOrgForAccount": { "message": "Duo two-step login is required for your account." }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Duo two-step login is required for your account. Follow the steps below to finish logging in." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Follow the steps below to finish logging in." + }, "launchDuo": { "message": "Launch Duo" }, @@ -9793,9 +9837,15 @@ "learnMoreAboutApi": { "message": "Learn more about Bitwarden's API" }, + "fileSend": { + "message": "File Send" + }, "fileSends": { "message": "File Sends" }, + "textSend": { + "message": "Text Send" + }, "textSends": { "message": "Text Sends" }, @@ -10029,10 +10079,6 @@ "message": "Include special characters", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "addAttachment": { "message": "Add attachment" }, @@ -10432,10 +10478,31 @@ "assignedExceedsAvailable": { "message": "Assigned seats exceed available seats." }, + "changeAtRiskPassword": { + "message": "Change at-risk password" + }, "removeUnlockWithPinPolicyTitle": { "message": "Remove Unlock with PIN" }, "removeUnlockWithPinPolicyDesc": { "message": "Do not allow members to unlock their account with a PIN." + }, + "limitedEventLogs": { + "message": "$PRODUCT_TYPE$ plans do not have access to real event logs", + "placeholders": { + "product_type": { + "content": "$1", + "example": "Teams" + } + } + }, + "upgradeForFullEvents": { + "message": "Get full access to organization event logs by upgrading to a Teams or Enterprise plan." + }, + "upgradeEventLogTitle": { + "message": "Upgrade for real event log data" + }, + "upgradeEventLogMessage": { + "message": "These events are examples only and do not reflect real events within your Bitwarden organization." } } diff --git a/apps/web/src/locales/km/messages.json b/apps/web/src/locales/km/messages.json index 1c4e2e55201..c205ace9ac1 100644 --- a/apps/web/src/locales/km/messages.json +++ b/apps/web/src/locales/km/messages.json @@ -5,6 +5,9 @@ "criticalApplications": { "message": "Critical applications" }, + "noCriticalAppsAtRisk": { + "message": "No critical applications at risk" + }, "accessIntelligence": { "message": "Access Intelligence" }, @@ -198,6 +201,9 @@ "notes": { "message": "Notes" }, + "privateNote": { + "message": "Private note" + }, "note": { "message": "Note" }, @@ -1026,6 +1032,9 @@ "no": { "message": "No" }, + "location": { + "message": "Location" + }, "loginOrCreateNewAccount": { "message": "Log in or create a new account to access your secure vault." }, @@ -1161,13 +1170,22 @@ "logInToBitwarden": { "message": "Log in to Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "Enter the code sent to your email" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Enter the code from your authenticator app" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Press your YubiKey to authenticate" + }, "authenticationTimeout": { "message": "Authentication timeout" }, "authenticationSessionTimedOut": { "message": "The authentication session timed out. Please restart the login process." }, - "verifyIdentity": { + "verifyYourIdentity": { "message": "Verify your Identity" }, "weDontRecognizeThisDevice": { @@ -1443,12 +1461,22 @@ "rememberMe": { "message": "Remember me" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Don't ask again on this device for 30 days" + }, "sendVerificationCodeEmailAgain": { "message": "Send verification code email again" }, "useAnotherTwoStepMethod": { "message": "Use another two-step login method" }, + "selectAnotherMethod": { + "message": "Select another method", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Use your recovery code" + }, "insertYubiKey": { "message": "Insert your YubiKey into your computer's USB port, then touch its button." }, @@ -1467,6 +1495,9 @@ "twoStepOptions": { "message": "Two-step login options" }, + "selectTwoStepLoginMethod": { + "message": "Select two-step login method" + }, "recoveryCodeDesc": { "message": "Lost access to all of your two-step login providers? Use your recovery code to turn off all two-step login providers from your account." }, @@ -1509,6 +1540,9 @@ "webAuthnMigrated": { "message": "(Migrated from FIDO)" }, + "openInNewTab": { + "message": "Open in new tab" + }, "emailTitle": { "message": "Email" }, @@ -2224,6 +2258,9 @@ "revokeAccess": { "message": "Revoke access" }, + "revoke": { + "message": "Revoke" + }, "twoStepLoginProviderEnabled": { "message": "This two-step login provider is active on your account." }, @@ -4081,6 +4118,12 @@ "updateBrowserDesc": { "message": "You are using an unsupported web browser. The web vault may not function properly." }, + "youHaveAPendingLoginRequest": { + "message": "You have a pending login request from another device." + }, + "reviewLoginRequest": { + "message": "Review login request" + }, "freeTrialEndPromptCount": { "message": "Your free trial ends in $COUNT$ days.", "placeholders": { @@ -4758,6 +4801,15 @@ "masterPassPolicyDesc": { "message": "Set requirements for master password strength." }, + "passwordStrengthScore": { + "message": "Password strength score $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "twoStepLoginPolicyTitle": { "message": "Require two-step login" }, @@ -5038,12 +5090,40 @@ "requireSsoExemption": { "message": "Organization owners and admins are exempt from this policy's enforcement." }, + "limitSendViews": { + "message": "Limit views" + }, + "limitSendViewsHint": { + "message": "No one can view this Send after the limit is reached.", + "description": "Displayed under the limit views field on Send" + }, + "limitSendViewsCount": { + "message": "$ACCESSCOUNT$ views left", + "description": "Displayed under the limit views field on Send", + "placeholders": { + "accessCount": { + "content": "$1", + "example": "2" + } + } + }, + "sendDetails": { + "message": "Send details", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendTypeTextToShare": { + "message": "Text to share" + }, "sendTypeFile": { "message": "File" }, "sendTypeText": { "message": "Text" }, + "sendPasswordDescV3": { + "message": "Add an optional password for recipients to access this Send.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "createSend": { "message": "New Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -5068,19 +5148,15 @@ "message": "Delete Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, - "deleteSendConfirmation": { - "message": "Are you sure you want to delete this Send?", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "whatTypeOfSend": { - "message": "What type of Send is this?", + "deleteSendPermanentConfirmation": { + "message": "Are you sure you want to permanently delete this Send?", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "deletionDate": { "message": "Deletion date" }, - "deletionDateDesc": { - "message": "The Send will be permanently deleted on the specified date and time.", + "deletionDateDescV2": { + "message": "The Send will be permanently deleted on this date.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "expirationDate": { @@ -5093,21 +5169,6 @@ "maxAccessCount": { "message": "Maximum access count" }, - "maxAccessCountDesc": { - "message": "If set, users will no longer be able to access this Send once the maximum access count is reached.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "currentAccessCount": { - "message": "Current access count" - }, - "sendPasswordDesc": { - "message": "Optionally require a password for users to access this Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendNotesDesc": { - "message": "Private notes about this Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "disabled": { "message": "Disabled" }, @@ -5134,13 +5195,6 @@ "removePasswordConfirmation": { "message": "Are you sure you want to remove the password?" }, - "hideEmail": { - "message": "Hide my email address from recipients." - }, - "disableThisSend": { - "message": "Deactivate this Send so that no one can access it.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "allSends": { "message": "All Sends" }, @@ -5151,6 +5205,9 @@ "pendingDeletion": { "message": "Pending deletion" }, + "hideTextByDefault": { + "message": "Hide text by default" + }, "expired": { "message": "Expired" }, @@ -5372,13 +5429,6 @@ "message": "Always show member’s email address with recipients when creating or editing a Send.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, - "sendOptionsPolicyInEffect": { - "message": "The following organization policies are currently in effect:" - }, - "sendDisableHideEmailInEffect": { - "message": "Users are not allowed to hide their email address from recipients when creating or editing a Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "modifiedPolicyId": { "message": "Modified policy $ID$.", "placeholders": { @@ -5478,27 +5528,6 @@ "personalOwnershipCheckboxDesc": { "message": "Remove individual ownership for organization users" }, - "textHiddenByDefault": { - "message": "When accessing the Send, hide the text by default", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendNameDesc": { - "message": "A friendly name to describe this Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendTextDesc": { - "message": "The text you want to Send." - }, - "sendFileDesc": { - "message": "The file you want to Send." - }, - "copySendLinkOnSave": { - "message": "Copy the link to share this Send to my clipboard upon save." - }, - "sendLinkLabel": { - "message": "Send link", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "send": { "message": "Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -5647,12 +5676,21 @@ "dateParsingError": { "message": "There was an error saving your deletion and expiration dates." }, + "hideYourEmail": { + "message": "Hide your email address from viewers." + }, "webAuthnFallbackMsg": { "message": "To verify your 2FA please click the button below." }, "webAuthnAuthenticate": { "message": "Authenticate WebAuthn" }, + "readSecurityKey": { + "message": "Read security key" + }, + "awaitingSecurityKeyInteraction": { + "message": "Awaiting security key interaction..." + }, "webAuthnNotSupported": { "message": "WebAuthn is not supported in this browser." }, @@ -7199,6 +7237,12 @@ "duoRequiredByOrgForAccount": { "message": "Duo two-step login is required for your account." }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Duo two-step login is required for your account. Follow the steps below to finish logging in." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Follow the steps below to finish logging in." + }, "launchDuo": { "message": "Launch Duo" }, @@ -9793,9 +9837,15 @@ "learnMoreAboutApi": { "message": "Learn more about Bitwarden's API" }, + "fileSend": { + "message": "File Send" + }, "fileSends": { "message": "File Sends" }, + "textSend": { + "message": "Text Send" + }, "textSends": { "message": "Text Sends" }, @@ -10029,10 +10079,6 @@ "message": "Include special characters", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "addAttachment": { "message": "Add attachment" }, @@ -10432,10 +10478,31 @@ "assignedExceedsAvailable": { "message": "Assigned seats exceed available seats." }, + "changeAtRiskPassword": { + "message": "Change at-risk password" + }, "removeUnlockWithPinPolicyTitle": { "message": "Remove Unlock with PIN" }, "removeUnlockWithPinPolicyDesc": { "message": "Do not allow members to unlock their account with a PIN." + }, + "limitedEventLogs": { + "message": "$PRODUCT_TYPE$ plans do not have access to real event logs", + "placeholders": { + "product_type": { + "content": "$1", + "example": "Teams" + } + } + }, + "upgradeForFullEvents": { + "message": "Get full access to organization event logs by upgrading to a Teams or Enterprise plan." + }, + "upgradeEventLogTitle": { + "message": "Upgrade for real event log data" + }, + "upgradeEventLogMessage": { + "message": "These events are examples only and do not reflect real events within your Bitwarden organization." } } diff --git a/apps/web/src/locales/kn/messages.json b/apps/web/src/locales/kn/messages.json index 9abeaf5707f..d817f606008 100644 --- a/apps/web/src/locales/kn/messages.json +++ b/apps/web/src/locales/kn/messages.json @@ -5,6 +5,9 @@ "criticalApplications": { "message": "Critical applications" }, + "noCriticalAppsAtRisk": { + "message": "No critical applications at risk" + }, "accessIntelligence": { "message": "Access Intelligence" }, @@ -198,6 +201,9 @@ "notes": { "message": "ಟಿಪ್ಪಣಿಗಳು" }, + "privateNote": { + "message": "Private note" + }, "note": { "message": "Note" }, @@ -1026,6 +1032,9 @@ "no": { "message": "ಇಲ್ಲ" }, + "location": { + "message": "Location" + }, "loginOrCreateNewAccount": { "message": "ನಿಮ್ಮ ಸುರಕ್ಷಿತ ವಾಲ್ಟ್ ಅನ್ನು ಪ್ರವೇಶಿಸಲು ಲಾಗ್ ಇನ್ ಮಾಡಿ ಅಥವಾ ಹೊಸ ಖಾತೆಯನ್ನು ರಚಿಸಿ." }, @@ -1161,13 +1170,22 @@ "logInToBitwarden": { "message": "Log in to Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "Enter the code sent to your email" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Enter the code from your authenticator app" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Press your YubiKey to authenticate" + }, "authenticationTimeout": { "message": "Authentication timeout" }, "authenticationSessionTimedOut": { "message": "The authentication session timed out. Please restart the login process." }, - "verifyIdentity": { + "verifyYourIdentity": { "message": "Verify your Identity" }, "weDontRecognizeThisDevice": { @@ -1443,12 +1461,22 @@ "rememberMe": { "message": "ನನ್ನನ್ನು ನೆನಪಿನಲ್ಲಿ ಇಡು" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Don't ask again on this device for 30 days" + }, "sendVerificationCodeEmailAgain": { "message": "ಪರಿಶೀಲನೆ ಕೋಡ್ ಇಮೇಲ್ ಅನ್ನು ಮತ್ತೆ ಕಳುಹಿಸಿ" }, "useAnotherTwoStepMethod": { "message": "ಮತ್ತೊಂದು ಎರಡು-ಹಂತದ ಲಾಗಿನ್ ವಿಧಾನವನ್ನು ಬಳಸಿ" }, + "selectAnotherMethod": { + "message": "Select another method", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Use your recovery code" + }, "insertYubiKey": { "message": "ನಿಮ್ಮ ಯುಬಿಕಿಯನ್ನು ನಿಮ್ಮ ಕಂಪ್ಯೂಟರ್‌ನ ಯುಎಸ್‌ಬಿ ಪೋರ್ಟ್ಗೆ ಸೇರಿಸಿ, ನಂತರ ಅದರ ಗುಂಡಿಯನ್ನು ಸ್ಪರ್ಶಿಸಿ." }, @@ -1467,6 +1495,9 @@ "twoStepOptions": { "message": "ಎರಡು ಹಂತದ ಲಾಗಿನ್ ಆಯ್ಕೆಗಳು" }, + "selectTwoStepLoginMethod": { + "message": "Select two-step login method" + }, "recoveryCodeDesc": { "message": "ನಿಮ್ಮ ಎಲ್ಲಾ ಎರಡು ಅಂಶ ಪೂರೈಕೆದಾರರಿಗೆ ಪ್ರವೇಶವನ್ನು ಕಳೆದುಕೊಂಡಿದ್ದೀರಾ? ನಿಮ್ಮ ಖಾತೆಯಿಂದ ಎಲ್ಲಾ ಎರಡು ಅಂಶ ಪೂರೈಕೆದಾರರನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲು ನಿಮ್ಮ ಮರುಪಡೆಯುವಿಕೆ ಕೋಡ್ ಬಳಸಿ." }, @@ -1509,6 +1540,9 @@ "webAuthnMigrated": { "message": "(FIDO ನಿಂದ ವಲಸೆ ಬಂದಿದೆ)" }, + "openInNewTab": { + "message": "Open in new tab" + }, "emailTitle": { "message": "ಇಮೇಲ್" }, @@ -2224,6 +2258,9 @@ "revokeAccess": { "message": "Revoke access" }, + "revoke": { + "message": "Revoke" + }, "twoStepLoginProviderEnabled": { "message": "ಈ ಎರಡು ಹಂತದ ಲಾಗಿನ್ ಒದಗಿಸುವವರನ್ನು ನಿಮ್ಮ ಖಾತೆಯಲ್ಲಿ ಸಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ." }, @@ -4081,6 +4118,12 @@ "updateBrowserDesc": { "message": "ನೀವು ಬೆಂಬಲಿಸದ ವೆಬ್ ಬ್ರೌಸರ್ ಅನ್ನು ಬಳಸುತ್ತಿರುವಿರಿ. ವೆಬ್ ವಾಲ್ಟ್ ಸರಿಯಾಗಿ ಕಾರ್ಯನಿರ್ವಹಿಸದೆ ಇರಬಹುದು." }, + "youHaveAPendingLoginRequest": { + "message": "You have a pending login request from another device." + }, + "reviewLoginRequest": { + "message": "Review login request" + }, "freeTrialEndPromptCount": { "message": "Your free trial ends in $COUNT$ days.", "placeholders": { @@ -4758,6 +4801,15 @@ "masterPassPolicyDesc": { "message": "ಮಾಸ್ಟರ್ ಪಾಸ್‌ವರ್ಡ್ ಶಕ್ತಿಗಾಗಿ ಕನಿಷ್ಠ ಅವಶ್ಯಕತೆಗಳನ್ನು ಹೊಂದಿಸಿ." }, + "passwordStrengthScore": { + "message": "Password strength score $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "twoStepLoginPolicyTitle": { "message": "Require two-step login" }, @@ -5038,12 +5090,40 @@ "requireSsoExemption": { "message": "ಸಂಸ್ಥೆಯ ಮಾಲೀಕರು ಮತ್ತು ನಿರ್ವಾಹಕರು ಈ ನೀತಿಯ ಜಾರಿಯಿಂದ ವಿನಾಯಿತಿ ಪಡೆದಿದ್ದಾರೆ." }, + "limitSendViews": { + "message": "Limit views" + }, + "limitSendViewsHint": { + "message": "No one can view this Send after the limit is reached.", + "description": "Displayed under the limit views field on Send" + }, + "limitSendViewsCount": { + "message": "$ACCESSCOUNT$ views left", + "description": "Displayed under the limit views field on Send", + "placeholders": { + "accessCount": { + "content": "$1", + "example": "2" + } + } + }, + "sendDetails": { + "message": "Send details", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendTypeTextToShare": { + "message": "Text to share" + }, "sendTypeFile": { "message": "ಫೈಲ್" }, "sendTypeText": { "message": "ಪಠ್ಯ" }, + "sendPasswordDescV3": { + "message": "Add an optional password for recipients to access this Send.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "createSend": { "message": "ಹೊಸ ಕಳುಹಿಸುವಿಕೆಯನ್ನು ರಚಿಸಿ", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -5068,19 +5148,15 @@ "message": "ಅಳಿಸಿ ಕಳುಹಿಸಿ", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, - "deleteSendConfirmation": { - "message": "ಈ ಕಳುಹಿಸುವಿಕೆಯನ್ನು ಅಳಿಸಲು ನೀವು ಖಚಿತವಾಗಿ ಬಯಸುವಿರಾ?", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "whatTypeOfSend": { - "message": "ಇದು ಯಾವ ರೀತಿಯ ಕಳುಹಿಸುತ್ತದೆ?", + "deleteSendPermanentConfirmation": { + "message": "Are you sure you want to permanently delete this Send?", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "deletionDate": { "message": "ಅಳಿಸುವ ದಿನಾಂಕ" }, - "deletionDateDesc": { - "message": "ಕಳುಹಿಸಿದ ದಿನಾಂಕ ಮತ್ತು ಸಮಯದ ಮೇಲೆ ಕಳುಹಿಸುವಿಕೆಯನ್ನು ಶಾಶ್ವತವಾಗಿ ಅಳಿಸಲಾಗುತ್ತದೆ.", + "deletionDateDescV2": { + "message": "The Send will be permanently deleted on this date.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "expirationDate": { @@ -5093,21 +5169,6 @@ "maxAccessCount": { "message": "ಗರಿಷ್ಠ ಪ್ರವೇಶ ಎಣಿಕೆ" }, - "maxAccessCountDesc": { - "message": "ಹೊಂದಿಸಿದ್ದರೆ, ಗರಿಷ್ಠ ಪ್ರವೇಶ ಎಣಿಕೆ ತಲುಪಿದ ನಂತರ ಬಳಕೆದಾರರಿಗೆ ಈ ಕಳುಹಿಸುವಿಕೆಯನ್ನು ಪ್ರವೇಶಿಸಲು ಸಾಧ್ಯವಾಗುವುದಿಲ್ಲ.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "currentAccessCount": { - "message": "ಪ್ರಸ್ತುತ ಪ್ರವೇಶ ಎಣಿಕೆ" - }, - "sendPasswordDesc": { - "message": "ಈ ಕಳುಹಿಸುವಿಕೆಯನ್ನು ಪ್ರವೇಶಿಸಲು ಬಳಕೆದಾರರಿಗೆ ಪಾಸ್‌ವರ್ಡ್ ಐಚ್ ಗತ್ಯವಿದೆ.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendNotesDesc": { - "message": "ಈ ಕಳುಹಿಸುವ ಬಗ್ಗೆ ಖಾಸಗಿ ಟಿಪ್ಪಣಿಗಳು.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "disabled": { "message": "ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ" }, @@ -5134,13 +5195,6 @@ "removePasswordConfirmation": { "message": "ಪಾಸ್ವರ್ಡ್ ಅನ್ನು ತೆಗೆದುಹಾಕಲು ನೀವು ಖಚಿತವಾಗಿ ಬಯಸುವಿರಾ?" }, - "hideEmail": { - "message": "ಸ್ವೀಕರಿಸುವವರಿಂದ ನನ್ನ ಇಮೇಲ್ ವಿಳಾಸವನ್ನು ಮರೆಮಾಡಿ." - }, - "disableThisSend": { - "message": "ಇದನ್ನು ಕಳುಹಿಸುವುದನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿ ಇದರಿಂದ ಯಾರೂ ಅದನ್ನು ಪ್ರವೇಶಿಸಲಾಗುವುದಿಲ್ಲ.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "allSends": { "message": "ಎಲ್ಲಾ ಕಳುಹಿಸುತ್ತದೆ" }, @@ -5151,6 +5205,9 @@ "pendingDeletion": { "message": "ಅಳಿಸುವಿಕೆ ಬಾಕಿ ಉಳಿದಿದೆ" }, + "hideTextByDefault": { + "message": "Hide text by default" + }, "expired": { "message": "ಅವಧಿ ಮೀರಿದೆ" }, @@ -5372,13 +5429,6 @@ "message": "ಕಳುಹಿಸುವಿಕೆಯನ್ನು ರಚಿಸುವಾಗ ಅಥವಾ ಸಂಪಾದಿಸುವಾಗ ಬಳಕೆದಾರರು ತಮ್ಮ ಇಮೇಲ್ ವಿಳಾಸವನ್ನು ಸ್ವೀಕರಿಸುವವರಿಂದ ಮರೆಮಾಡಲು ಅನುಮತಿಸಬೇಡಿ.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, - "sendOptionsPolicyInEffect": { - "message": "ಕೆಳಗಿನ ಸಂಸ್ಥೆಯ ನೀತಿಗಳು ಪ್ರಸ್ತುತ ಜಾರಿಯಲ್ಲಿವೆ:" - }, - "sendDisableHideEmailInEffect": { - "message": "ಕಳುಹಿಸುವಿಕೆಯನ್ನು ರಚಿಸುವಾಗ ಅಥವಾ ಸಂಪಾದಿಸುವಾಗ ಬಳಕೆದಾರರು ತಮ್ಮ ಇಮೇಲ್ ವಿಳಾಸವನ್ನು ಸ್ವೀಕರಿಸುವವರಿಂದ ಮರೆಮಾಡಲು ಅನುಮತಿಸಲಾಗುವುದಿಲ್ಲ.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "modifiedPolicyId": { "message": "ಮಾರ್ಪಡಿಸಿದ ನೀತಿ $ID$.", "placeholders": { @@ -5478,27 +5528,6 @@ "personalOwnershipCheckboxDesc": { "message": "ಸಂಸ್ಥೆ ಬಳಕೆದಾರರಿಗಾಗಿ ವೈಯಕ್ತಿಕ ಮಾಲೀಕತ್ವವನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿ" }, - "textHiddenByDefault": { - "message": "ಕಳುಹಿಸುವಿಕೆಯನ್ನು ಪ್ರವೇಶಿಸುವಾಗ, ಪಠ್ಯವನ್ನು ಪೂರ್ವನಿಯೋಜಿತವಾಗಿ ಮರೆಮಾಡಿ", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendNameDesc": { - "message": "ಇದನ್ನು ಕಳುಹಿಸಲು ವಿವರಿಸಲು ಸ್ನೇಹಪರ ಹೆಸರು.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendTextDesc": { - "message": "ನೀವು ಕಳುಹಿಸಲು ಬಯಸುವ ಪಠ್ಯ." - }, - "sendFileDesc": { - "message": "ನೀವು ಕಳುಹಿಸಲು ಬಯಸುವ ಫೈಲ್." - }, - "copySendLinkOnSave": { - "message": "ಇದನ್ನು ಹಂಚಿಕೊಳ್ಳಲು ಲಿಂಕ್ ಅನ್ನು ನಕಲಿಸಿ ಉಳಿಸಿದ ನಂತರ ನನ್ನ ಕ್ಲಿಪ್‌ಬೋರ್ಡ್‌ಗೆ ಕಳುಹಿಸಿ." - }, - "sendLinkLabel": { - "message": "ಲಿಂಕ್ ಕಳುಹಿಸಿ", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "send": { "message": "ಕಳುಹಿಸಿ", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -5647,12 +5676,21 @@ "dateParsingError": { "message": "ನಿಮ್ಮ ಅಳಿಸುವಿಕೆ ಮತ್ತು ಮುಕ್ತಾಯ ದಿನಾಂಕಗಳನ್ನು ಉಳಿಸುವಲ್ಲಿ ದೋಷ ಕಂಡುಬಂದಿದೆ." }, + "hideYourEmail": { + "message": "Hide your email address from viewers." + }, "webAuthnFallbackMsg": { "message": "ನಿಮ್ಮ 2FA ಅನ್ನು ಪರಿಶೀಲಿಸಲು ದಯವಿಟ್ಟು ಕೆಳಗಿನ ಬಟನ್ ಕ್ಲಿಕ್ ಮಾಡಿ." }, "webAuthnAuthenticate": { "message": "WebAuthn ಅನ್ನು ಪ್ರಮಾಣಿಕರಿಸು" }, + "readSecurityKey": { + "message": "Read security key" + }, + "awaitingSecurityKeyInteraction": { + "message": "Awaiting security key interaction..." + }, "webAuthnNotSupported": { "message": "ಈ ಬ್ರೌಸರ್‌ನಲ್ಲಿ ವೆಬ್‌ಆಥ್ನ್ ಬೆಂಬಲಿಸುವುದಿಲ್ಲ." }, @@ -7199,6 +7237,12 @@ "duoRequiredByOrgForAccount": { "message": "Duo two-step login is required for your account." }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Duo two-step login is required for your account. Follow the steps below to finish logging in." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Follow the steps below to finish logging in." + }, "launchDuo": { "message": "Launch Duo" }, @@ -9793,9 +9837,15 @@ "learnMoreAboutApi": { "message": "Learn more about Bitwarden's API" }, + "fileSend": { + "message": "File Send" + }, "fileSends": { "message": "File Sends" }, + "textSend": { + "message": "Text Send" + }, "textSends": { "message": "Text Sends" }, @@ -10029,10 +10079,6 @@ "message": "Include special characters", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "addAttachment": { "message": "Add attachment" }, @@ -10432,10 +10478,31 @@ "assignedExceedsAvailable": { "message": "Assigned seats exceed available seats." }, + "changeAtRiskPassword": { + "message": "Change at-risk password" + }, "removeUnlockWithPinPolicyTitle": { "message": "Remove Unlock with PIN" }, "removeUnlockWithPinPolicyDesc": { "message": "Do not allow members to unlock their account with a PIN." + }, + "limitedEventLogs": { + "message": "$PRODUCT_TYPE$ plans do not have access to real event logs", + "placeholders": { + "product_type": { + "content": "$1", + "example": "Teams" + } + } + }, + "upgradeForFullEvents": { + "message": "Get full access to organization event logs by upgrading to a Teams or Enterprise plan." + }, + "upgradeEventLogTitle": { + "message": "Upgrade for real event log data" + }, + "upgradeEventLogMessage": { + "message": "These events are examples only and do not reflect real events within your Bitwarden organization." } } diff --git a/apps/web/src/locales/ko/messages.json b/apps/web/src/locales/ko/messages.json index 4cc8c841075..f389ef82312 100644 --- a/apps/web/src/locales/ko/messages.json +++ b/apps/web/src/locales/ko/messages.json @@ -5,6 +5,9 @@ "criticalApplications": { "message": "Critical applications" }, + "noCriticalAppsAtRisk": { + "message": "No critical applications at risk" + }, "accessIntelligence": { "message": "Access Intelligence" }, @@ -198,6 +201,9 @@ "notes": { "message": "메모" }, + "privateNote": { + "message": "Private note" + }, "note": { "message": "Note" }, @@ -1026,6 +1032,9 @@ "no": { "message": "아니오" }, + "location": { + "message": "Location" + }, "loginOrCreateNewAccount": { "message": "안전 보관함에 접근하려면 로그인하거나 새 계정을 만드세요." }, @@ -1161,13 +1170,22 @@ "logInToBitwarden": { "message": "Log in to Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "Enter the code sent to your email" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Enter the code from your authenticator app" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Press your YubiKey to authenticate" + }, "authenticationTimeout": { "message": "Authentication timeout" }, "authenticationSessionTimedOut": { "message": "The authentication session timed out. Please restart the login process." }, - "verifyIdentity": { + "verifyYourIdentity": { "message": "Verify your Identity" }, "weDontRecognizeThisDevice": { @@ -1443,12 +1461,22 @@ "rememberMe": { "message": "기억하기" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Don't ask again on this device for 30 days" + }, "sendVerificationCodeEmailAgain": { "message": "인증 코드 이메일 다시 보내기" }, "useAnotherTwoStepMethod": { "message": "다른 2단계 로그인 방법 사용" }, + "selectAnotherMethod": { + "message": "Select another method", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Use your recovery code" + }, "insertYubiKey": { "message": "YubiKey를 컴퓨터의 USB 포트에 삽입하고 버튼을 누르세요." }, @@ -1467,6 +1495,9 @@ "twoStepOptions": { "message": "2단계 인증 옵션" }, + "selectTwoStepLoginMethod": { + "message": "Select two-step login method" + }, "recoveryCodeDesc": { "message": "모든 2단계 인증을 사용할 수 없는 상황인가요? 복구 코드를 사용하여 계정의 모든 2단계 인증을 비활성화할 수 있습니다." }, @@ -1509,6 +1540,9 @@ "webAuthnMigrated": { "message": "(FIDO에서 이전됨)" }, + "openInNewTab": { + "message": "Open in new tab" + }, "emailTitle": { "message": "이메일" }, @@ -2224,6 +2258,9 @@ "revokeAccess": { "message": "Revoke access" }, + "revoke": { + "message": "Revoke" + }, "twoStepLoginProviderEnabled": { "message": "이 2단계 로그인 제공자는 귀하의 계정에 사용 가능합니다." }, @@ -4081,6 +4118,12 @@ "updateBrowserDesc": { "message": "지원하지 않는 웹 브라우저를 사용하고 있습니다. 웹 보관함 기능이 제대로 동작하지 않을 수 있습니다." }, + "youHaveAPendingLoginRequest": { + "message": "You have a pending login request from another device." + }, + "reviewLoginRequest": { + "message": "Review login request" + }, "freeTrialEndPromptCount": { "message": "Your free trial ends in $COUNT$ days.", "placeholders": { @@ -4758,6 +4801,15 @@ "masterPassPolicyDesc": { "message": "마스터 비밀번호 강도에 대한 최소 요구 사항을 설정해주세요." }, + "passwordStrengthScore": { + "message": "Password strength score $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "twoStepLoginPolicyTitle": { "message": "Require two-step login" }, @@ -5038,12 +5090,40 @@ "requireSsoExemption": { "message": "조직 소유자와 관리자는 이 정책을 적용받지 않습니다." }, + "limitSendViews": { + "message": "Limit views" + }, + "limitSendViewsHint": { + "message": "No one can view this Send after the limit is reached.", + "description": "Displayed under the limit views field on Send" + }, + "limitSendViewsCount": { + "message": "$ACCESSCOUNT$ views left", + "description": "Displayed under the limit views field on Send", + "placeholders": { + "accessCount": { + "content": "$1", + "example": "2" + } + } + }, + "sendDetails": { + "message": "Send details", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendTypeTextToShare": { + "message": "Text to share" + }, "sendTypeFile": { "message": "파일" }, "sendTypeText": { "message": "텍스트" }, + "sendPasswordDescV3": { + "message": "Add an optional password for recipients to access this Send.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "createSend": { "message": "새 Send 생성", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -5068,19 +5148,15 @@ "message": "Send 삭제", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, - "deleteSendConfirmation": { - "message": "정말 이 Send를 삭제하시겠습니까?", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "whatTypeOfSend": { - "message": "어떤 유형의 Send인가요?", + "deleteSendPermanentConfirmation": { + "message": "Are you sure you want to permanently delete this Send?", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "deletionDate": { "message": "삭제 날짜" }, - "deletionDateDesc": { - "message": "이 Send가 정해진 일시에 영구적으로 삭제됩니다.", + "deletionDateDescV2": { + "message": "The Send will be permanently deleted on this date.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "expirationDate": { @@ -5093,21 +5169,6 @@ "maxAccessCount": { "message": "최대 접근 횟수" }, - "maxAccessCountDesc": { - "message": "설정할 경우, 최대 접근 횟수에 도달할 때 이 Send에 접근할 수 없게 됩니다.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "currentAccessCount": { - "message": "현재 접근 횟수" - }, - "sendPasswordDesc": { - "message": "이 Send에 접근하기 위해 암호를 입력하도록 선택적으로 요구합니다.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendNotesDesc": { - "message": "이 Send에 대한 비공개 메모", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "disabled": { "message": "비활성화됨" }, @@ -5134,13 +5195,6 @@ "removePasswordConfirmation": { "message": "비밀번호를 제거하시겠습니까?" }, - "hideEmail": { - "message": "받는 사람으로부터 나의 이메일 주소 숨기기" - }, - "disableThisSend": { - "message": "이 Send를 비활성화하여 아무도 접근할 수 없게 합니다.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "allSends": { "message": "모든 Send" }, @@ -5151,6 +5205,9 @@ "pendingDeletion": { "message": "삭제 대기 중" }, + "hideTextByDefault": { + "message": "Hide text by default" + }, "expired": { "message": "만료됨" }, @@ -5372,13 +5429,6 @@ "message": "사용자가 Send를 생성하거나 수정할 때 받는 사람으로부터 자신의 이메일 주소를 숨기지 못하게 합니다.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, - "sendOptionsPolicyInEffect": { - "message": "다음 단체 정책이 현재 영향을 미치고 있습니다:" - }, - "sendDisableHideEmailInEffect": { - "message": "사용자는 Send를 생성하거나 수정할 때 받는 사람으로부터 자신의 이메일 주소를 숨기지 못하게 됩니다.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "modifiedPolicyId": { "message": "$ID$ 정책을 편집했습니다.", "placeholders": { @@ -5478,27 +5528,6 @@ "personalOwnershipCheckboxDesc": { "message": "조직 사용자의 개인 소유권 비활성화" }, - "textHiddenByDefault": { - "message": "Send에 접근할 때 기본적으로 텍스트를 숨김", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendNameDesc": { - "message": "이 Send의 이름", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendTextDesc": { - "message": "전송하려는 텍스트" - }, - "sendFileDesc": { - "message": "전송하려는 파일" - }, - "copySendLinkOnSave": { - "message": "저장할 때 이 Send를 공유하기 위한 링크를 클립보드에 복사합니다." - }, - "sendLinkLabel": { - "message": "Send 링크", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "send": { "message": "Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -5647,12 +5676,21 @@ "dateParsingError": { "message": "삭제 날짜와 만료 날짜를 저장하는 도중 오류가 발생했습니다." }, + "hideYourEmail": { + "message": "Hide your email address from viewers." + }, "webAuthnFallbackMsg": { "message": "2단계 인증을 확인하려면 아래의 버튼을 클릭하십시오." }, "webAuthnAuthenticate": { "message": "WebAuthn 인증" }, + "readSecurityKey": { + "message": "Read security key" + }, + "awaitingSecurityKeyInteraction": { + "message": "Awaiting security key interaction..." + }, "webAuthnNotSupported": { "message": "이 브라우저에서는 WebAuthn이 지원되지 않습니다." }, @@ -7199,6 +7237,12 @@ "duoRequiredByOrgForAccount": { "message": "Duo two-step login is required for your account." }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Duo two-step login is required for your account. Follow the steps below to finish logging in." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Follow the steps below to finish logging in." + }, "launchDuo": { "message": "Launch Duo" }, @@ -9793,9 +9837,15 @@ "learnMoreAboutApi": { "message": "Learn more about Bitwarden's API" }, + "fileSend": { + "message": "File Send" + }, "fileSends": { "message": "File Sends" }, + "textSend": { + "message": "Text Send" + }, "textSends": { "message": "Text Sends" }, @@ -10029,10 +10079,6 @@ "message": "Include special characters", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "addAttachment": { "message": "Add attachment" }, @@ -10432,10 +10478,31 @@ "assignedExceedsAvailable": { "message": "Assigned seats exceed available seats." }, + "changeAtRiskPassword": { + "message": "Change at-risk password" + }, "removeUnlockWithPinPolicyTitle": { "message": "Remove Unlock with PIN" }, "removeUnlockWithPinPolicyDesc": { "message": "Do not allow members to unlock their account with a PIN." + }, + "limitedEventLogs": { + "message": "$PRODUCT_TYPE$ plans do not have access to real event logs", + "placeholders": { + "product_type": { + "content": "$1", + "example": "Teams" + } + } + }, + "upgradeForFullEvents": { + "message": "Get full access to organization event logs by upgrading to a Teams or Enterprise plan." + }, + "upgradeEventLogTitle": { + "message": "Upgrade for real event log data" + }, + "upgradeEventLogMessage": { + "message": "These events are examples only and do not reflect real events within your Bitwarden organization." } } diff --git a/apps/web/src/locales/lv/messages.json b/apps/web/src/locales/lv/messages.json index 5d8afb53a09..9dc34f9e358 100644 --- a/apps/web/src/locales/lv/messages.json +++ b/apps/web/src/locales/lv/messages.json @@ -5,6 +5,9 @@ "criticalApplications": { "message": "Kritiskās lietotnes" }, + "noCriticalAppsAtRisk": { + "message": "Nav riskam pakļautu būtisku lietotņu" + }, "accessIntelligence": { "message": "Piekļuves inteliģence" }, @@ -198,6 +201,9 @@ "notes": { "message": "Piezīmes" }, + "privateNote": { + "message": "Personiska piezīme" + }, "note": { "message": "Piezīme" }, @@ -1026,6 +1032,9 @@ "no": { "message": "Nē" }, + "location": { + "message": "Atrašanās vieta" + }, "loginOrCreateNewAccount": { "message": "Jāpiesakās vai jāizveido jauns konts, lai piekļūtu drošajai glabātavai." }, @@ -1161,14 +1170,23 @@ "logInToBitwarden": { "message": "Pieteikties Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "Jāievada e-pastā nosūtītais kods" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Jāievada kods no savas autentificētājlietotnes" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Jāpiespiež sava YubiKey ierīce, lai autentificētu" + }, "authenticationTimeout": { "message": "Autentificēšanās noildze" }, "authenticationSessionTimedOut": { "message": "Iestājās autentificēšanās sesijas noildze. Lūgums sākt pieteikšanos no jauna." }, - "verifyIdentity": { - "message": "Jāapliecina sava identitāte" + "verifyYourIdentity": { + "message": "Apliecināt savu identitāti" }, "weDontRecognizeThisDevice": { "message": "Mēs neatpazīstam šo ierīci. Jāievada kods, kas tika nosūtīts e-pastā, lai apliecinātu savu identitāti." @@ -1443,12 +1461,22 @@ "rememberMe": { "message": "Atcerēties mani" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Šajā ierīcē 30 dienas vairs nevaicāt" + }, "sendVerificationCodeEmailAgain": { "message": "Atkārtoti nosūtīt apstiprinājuma kodu" }, "useAnotherTwoStepMethod": { "message": "Izmantot citu divpakāpju pieteikšanās veidu" }, + "selectAnotherMethod": { + "message": "Atlasīt citu veidu", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Izmantot savu atkopes kodu" + }, "insertYubiKey": { "message": "Ievietojiet YubiKey datora USB portā un pēc tam pieskarieties tā pogai." }, @@ -1467,6 +1495,9 @@ "twoStepOptions": { "message": "Divpakāpju pieteikšanās iespējas" }, + "selectTwoStepLoginMethod": { + "message": "Atlasīt divpakāpju pieteikšanās veidu" + }, "recoveryCodeDesc": { "message": "Zaudēta piekļuve visiem divpakāpju pieteikšanās nodrošinātājiem? Jāizmanto atkopšanas kods, lai izslēgtu visus sava konta divpakāpju pieteikšanās nodrošinātājus." }, @@ -1509,6 +1540,9 @@ "webAuthnMigrated": { "message": "(Pārgājis no FIDO)" }, + "openInNewTab": { + "message": "Atvērt jaunā cilnē" + }, "emailTitle": { "message": "E-pasts" }, @@ -2224,6 +2258,9 @@ "revokeAccess": { "message": "Atsaukt piekļuvi" }, + "revoke": { + "message": "Atsaukt" + }, "twoStepLoginProviderEnabled": { "message": "Kontā ir iespējots šis divpakāpju pieteikšanās nodrošinātājs." }, @@ -4081,6 +4118,12 @@ "updateBrowserDesc": { "message": "Tiek izmantots neatbalstīts tīmekļa pārlūks. Tīmekļa glabātava var nedarboties pareizi." }, + "youHaveAPendingLoginRequest": { + "message": "Ir neizskatīts pieteikšanās pieprasījums no citas ierīces." + }, + "reviewLoginRequest": { + "message": "Izskatīt pieteikšanās pieprasījumu" + }, "freeTrialEndPromptCount": { "message": "Bezmaksas izmēģinājums beigsies pēc $COUNT$ dienām.", "placeholders": { @@ -4758,6 +4801,15 @@ "masterPassPolicyDesc": { "message": "Uzstādīt galvenās paroles stipruma mazākās izpildāmās prasības." }, + "passwordStrengthScore": { + "message": "Paroles stipruma novērtējums $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "twoStepLoginPolicyTitle": { "message": "Pieprasīt divpakāpju pieteikšanos" }, @@ -5038,12 +5090,40 @@ "requireSsoExemption": { "message": "Uz apvienības īpašniekiem un pārvaldītājiem neattiecas šīs nosacījumu kopas piemērošana." }, + "limitSendViews": { + "message": "Ierobežot skatījumus" + }, + "limitSendViewsHint": { + "message": "Neviens nevar apskatīt šo Send pēc tam, kad ir sasniegts ierobežojums.", + "description": "Displayed under the limit views field on Send" + }, + "limitSendViewsCount": { + "message": "Atlikuši $ACCESSCOUNT$ skatījumi", + "description": "Displayed under the limit views field on Send", + "placeholders": { + "accessCount": { + "content": "$1", + "example": "2" + } + } + }, + "sendDetails": { + "message": "Informācija par Send", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendTypeTextToShare": { + "message": "Kopīgojamais teksts" + }, "sendTypeFile": { "message": "Datne" }, "sendTypeText": { "message": "Teksts" }, + "sendPasswordDescV3": { + "message": "Pēc izvēles var pievienot paroli saņēmējiem, lai varētu piekļūt šim Send.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "createSend": { "message": "Jauns Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -5068,19 +5148,15 @@ "message": "Izdzēst Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, - "deleteSendConfirmation": { - "message": "Vai tiešām izdzēst šo Send?", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "whatTypeOfSend": { - "message": "Kāds ir šī Send veids?", + "deleteSendPermanentConfirmation": { + "message": "Vai tiešām neatgriezeniski izdzēst šo Send?", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "deletionDate": { "message": "Dzēšanas datums" }, - "deletionDateDesc": { - "message": "Send tiks neatgriezeniski izdzēsts norādītajā datumā un laikā.", + "deletionDateDescV2": { + "message": "Send šajā datumā tiks neatgriezeniski izdzēsts.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "expirationDate": { @@ -5093,21 +5169,6 @@ "maxAccessCount": { "message": "Lielākais pieļaujamais piekļuves reižu skaits" }, - "maxAccessCountDesc": { - "message": "Ja iestatīts, lietotāji nevarēs piekļūt šim Send, kad tiks sasniegts lielākais pieļaujamais piekļūšanas reižu skaits.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "currentAccessCount": { - "message": "Pašreizējais piekļuvju skaits" - }, - "sendPasswordDesc": { - "message": "Pēc izvēles pieprasīt paroli, lai lietotāji varētu piekļūt šim Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendNotesDesc": { - "message": "Personīgas piezīmes par šo Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "disabled": { "message": "Atspējots" }, @@ -5134,13 +5195,6 @@ "removePasswordConfirmation": { "message": "Vai tiešām noņemt paroli?" }, - "hideEmail": { - "message": "Slēpt e-pasta adresi no saņēmējiem." - }, - "disableThisSend": { - "message": "Izslēgt šo Send, lai neviens tam nevarētu piekļūt.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "allSends": { "message": "Visi Send" }, @@ -5151,6 +5205,9 @@ "pendingDeletion": { "message": "Gaida dzēšanu" }, + "hideTextByDefault": { + "message": "Pēc noklusējuma paslēpt tekstu" + }, "expired": { "message": "Beidzies izmantošanas laiks" }, @@ -5372,13 +5429,6 @@ "message": "Vienmēr rādīt dalībnieka e-pasta adresi saņēmējiem, kad tiek izveidots vai labots Send.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, - "sendOptionsPolicyInEffect": { - "message": "Ir spēkā zemāk uzskaitītie apvienības nosacījumi:" - }, - "sendDisableHideEmailInEffect": { - "message": "Lietotājiem nav ļauts slēpt e-pasta adresi no saņēmējiem, kad tiek izveidots vai labots Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "modifiedPolicyId": { "message": "Nosacījums $ID$ izmainīts.", "placeholders": { @@ -5478,27 +5528,6 @@ "personalOwnershipCheckboxDesc": { "message": "Atspējot personīgās īpašumtiesības apvienības lietotājiem" }, - "textHiddenByDefault": { - "message": "Pēc noklusējuma paslēpt tekstu, kad piekļūst Send", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendNameDesc": { - "message": "Lasāms nosaukums, kas apraksta šo Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendTextDesc": { - "message": "Teksts, kuru ir vēlme nosūtīt." - }, - "sendFileDesc": { - "message": "Datne, kuru ir vēlme nosūtīt." - }, - "copySendLinkOnSave": { - "message": "Saglabāšanas brīdī ievietot saiti starpliktuvē, lai kopīgotu šo Send." - }, - "sendLinkLabel": { - "message": "Send saite", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "send": { "message": "Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -5647,12 +5676,21 @@ "dateParsingError": { "message": "Atgadījās kļūda, saglabājot dzēšanas un derīguma beigu datumus." }, + "hideYourEmail": { + "message": "Paslēpt e-pasta adresi no apskatītājiem." + }, "webAuthnFallbackMsg": { "message": "Lai apstiprinātu 2FA, lūgums klikšķināt uz zemāk esošās pogas." }, "webAuthnAuthenticate": { "message": "Autentificēt WebAuthn" }, + "readSecurityKey": { + "message": "Nolasīt drošības atslēgu" + }, + "awaitingSecurityKeyInteraction": { + "message": "Gaida mijiedarbību ar drošības atslēgu..." + }, "webAuthnNotSupported": { "message": "WebAuthn šajā pārlūkā netiek atbalstīts." }, @@ -7199,6 +7237,12 @@ "duoRequiredByOrgForAccount": { "message": "Kontam ir nepieciešama DUO divpakāpju pieteikšanās." }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Ir nepieciešama Duo divpakāpju pieteikšanās, lai pieteiktos savā kontā. Jāseko zemāk esošajām norādēm, lai pabeigtu pieteikšanos." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Jāseko zemāk esošajām norādēm, lai pabeigtu pieteikšanos." + }, "launchDuo": { "message": "Palaist DUO" }, @@ -9793,9 +9837,15 @@ "learnMoreAboutApi": { "message": "Uzzināt vairāk par Bitwarden API" }, + "fileSend": { + "message": "Datņu Send" + }, "fileSends": { "message": "Datņu Send" }, + "textSend": { + "message": "Teksta Send" + }, "textSends": { "message": "Teksta Send" }, @@ -10029,10 +10079,6 @@ "message": "Iekļaut īpašās rakstzīmes", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "addAttachment": { "message": "Pievienot pielikumu" }, @@ -10432,10 +10478,31 @@ "assignedExceedsAvailable": { "message": "Piešķirtās vietas pārsniedz pieejamās vietas." }, + "changeAtRiskPassword": { + "message": "Mainīt riskam pakļautu paroli" + }, "removeUnlockWithPinPolicyTitle": { "message": "Noņemt atslēgšanu ar PIN" }, "removeUnlockWithPinPolicyDesc": { "message": "Neļaut dalībniekiem atslēgt savu kontu ar PIN." + }, + "limitedEventLogs": { + "message": "$PRODUCT_TYPE$ plāniem nav piekļuve īstajiem notikumu žurnāliem", + "placeholders": { + "product_type": { + "content": "$1", + "example": "Teams" + } + } + }, + "upgradeForFullEvents": { + "message": "Pilna piekļuve apvienības notikumu žurnāliem ir iegūstama, ja izmanto Komandu vai Uzņēmējdarbības plānu." + }, + "upgradeEventLogTitle": { + "message": "Uzlabot, lai piekļūtu īstajiem notikumu žurnāla datiem" + }, + "upgradeEventLogMessage": { + "message": "Šie notikumu ir tikai piemēri, un tie neatspoguļo īstus notikumus Bitwarden apvienībā." } } diff --git a/apps/web/src/locales/ml/messages.json b/apps/web/src/locales/ml/messages.json index b3c686a0f46..8e23fe517e2 100644 --- a/apps/web/src/locales/ml/messages.json +++ b/apps/web/src/locales/ml/messages.json @@ -5,6 +5,9 @@ "criticalApplications": { "message": "Critical applications" }, + "noCriticalAppsAtRisk": { + "message": "No critical applications at risk" + }, "accessIntelligence": { "message": "Access Intelligence" }, @@ -198,6 +201,9 @@ "notes": { "message": "കുറിപ്പുകൾ" }, + "privateNote": { + "message": "Private note" + }, "note": { "message": "Note" }, @@ -1026,6 +1032,9 @@ "no": { "message": "അല്ല" }, + "location": { + "message": "Location" + }, "loginOrCreateNewAccount": { "message": "നിങ്ങളുടെ സുരക്ഷിത വാൾട്ടിലേക്ക് പ്രവേശിക്കാൻ ലോഗിൻ ചെയ്യുക അല്ലെങ്കിൽ ഒരു പുതിയ അക്കൗണ്ട് സൃഷ്ടിക്കുക." }, @@ -1161,13 +1170,22 @@ "logInToBitwarden": { "message": "Log in to Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "Enter the code sent to your email" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Enter the code from your authenticator app" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Press your YubiKey to authenticate" + }, "authenticationTimeout": { "message": "Authentication timeout" }, "authenticationSessionTimedOut": { "message": "The authentication session timed out. Please restart the login process." }, - "verifyIdentity": { + "verifyYourIdentity": { "message": "Verify your Identity" }, "weDontRecognizeThisDevice": { @@ -1443,12 +1461,22 @@ "rememberMe": { "message": "എന്നെ ഓർക്കണം" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Don't ask again on this device for 30 days" + }, "sendVerificationCodeEmailAgain": { "message": "സ്ഥിരീകരണ കോഡ് ഇമെയിൽ വഴി വീണ്ടും അയയ്ക്കുക" }, "useAnotherTwoStepMethod": { "message": "മറ്റൊരു രണ്ട് ഘട്ട പ്രവേശന രീതി ഉപയോഗിക്കുക" }, + "selectAnotherMethod": { + "message": "Select another method", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Use your recovery code" + }, "insertYubiKey": { "message": "നിങ്ങളുടെ കമ്പ്യൂട്ടറിന്റെ യു‌എസ്‌ബി പോർട്ടിലേക്ക് YubiKey ഇടുക, തുടർന്ന് അതിന്റെ ബട്ടൺ അമർത്തുക." }, @@ -1467,6 +1495,9 @@ "twoStepOptions": { "message": "രണ്ട്-ഘട്ട പ്രവേശനം ഓപ്ഷനുകൾ" }, + "selectTwoStepLoginMethod": { + "message": "Select two-step login method" + }, "recoveryCodeDesc": { "message": "നിങ്ങളുടെ രണ്ട്-ഘടക ദാതാക്കളിലേക്കുള്ള ആക്‌സസ്സ് നഷ്‌ടപ്പെട്ടോ? നിങ്ങളുടെ അക്കൗണ്ടിൽ നിന്ന് രണ്ട്-ഘടക ദാതാക്കളെ പ്രവർത്തനരഹിതമാക്കാൻ നിങ്ങളുടെ റിക്കവറി കോഡ് ഉപയോഗിക്കുക." }, @@ -1509,6 +1540,9 @@ "webAuthnMigrated": { "message": "(Migrated from FIDO)" }, + "openInNewTab": { + "message": "Open in new tab" + }, "emailTitle": { "message": "ഇമെയിൽ" }, @@ -2224,6 +2258,9 @@ "revokeAccess": { "message": "Revoke access" }, + "revoke": { + "message": "Revoke" + }, "twoStepLoginProviderEnabled": { "message": "This two-step login provider is enabled on your account." }, @@ -4081,6 +4118,12 @@ "updateBrowserDesc": { "message": "You are using an unsupported web browser. The web vault may not function properly." }, + "youHaveAPendingLoginRequest": { + "message": "You have a pending login request from another device." + }, + "reviewLoginRequest": { + "message": "Review login request" + }, "freeTrialEndPromptCount": { "message": "Your free trial ends in $COUNT$ days.", "placeholders": { @@ -4758,6 +4801,15 @@ "masterPassPolicyDesc": { "message": "Set minimum requirements for master password strength." }, + "passwordStrengthScore": { + "message": "Password strength score $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "twoStepLoginPolicyTitle": { "message": "Require two-step login" }, @@ -5038,12 +5090,40 @@ "requireSsoExemption": { "message": "ഓർ‌ഗനൈസേഷൻ‌ ഉടമകളെയും രക്ഷാധികാരികളെയും ഈ നയം നടപ്പിലാക്കുന്നതിൽ‌ നിന്നും ഒഴിവാക്കിയിരിക്കുന്നു." }, + "limitSendViews": { + "message": "Limit views" + }, + "limitSendViewsHint": { + "message": "No one can view this Send after the limit is reached.", + "description": "Displayed under the limit views field on Send" + }, + "limitSendViewsCount": { + "message": "$ACCESSCOUNT$ views left", + "description": "Displayed under the limit views field on Send", + "placeholders": { + "accessCount": { + "content": "$1", + "example": "2" + } + } + }, + "sendDetails": { + "message": "Send details", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendTypeTextToShare": { + "message": "Text to share" + }, "sendTypeFile": { "message": "ഫയൽ" }, "sendTypeText": { "message": "വാചകം" }, + "sendPasswordDescV3": { + "message": "Add an optional password for recipients to access this Send.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "createSend": { "message": "പുതിയ Send സൃഷ്‌ടിക്കുക", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -5068,19 +5148,15 @@ "message": "Send ഇല്ലാതാക്കുക", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, - "deleteSendConfirmation": { - "message": "ഈ Send ഇല്ലാതാക്കാൻ നിങ്ങൾ ആഗ്രഹിക്കുന്നുണ്ടോ?", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "whatTypeOfSend": { - "message": "ഇത് ഏത് തരം അയയ്ക്കലാണ്?", + "deleteSendPermanentConfirmation": { + "message": "Are you sure you want to permanently delete this Send?", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "deletionDate": { "message": "ഇല്ലാതാക്കൽ തീയതി" }, - "deletionDateDesc": { - "message": "The Send will be permanently deleted on the specified date and time.", + "deletionDateDescV2": { + "message": "The Send will be permanently deleted on this date.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "expirationDate": { @@ -5093,21 +5169,6 @@ "maxAccessCount": { "message": "പരമാവധി ആക്സസ് എണ്ണം" }, - "maxAccessCountDesc": { - "message": "If set, users will no longer be able to access this Send once the maximum access count is reached.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "currentAccessCount": { - "message": "നിലവിലെ ആക്‌സസ്സ് എണ്ണം" - }, - "sendPasswordDesc": { - "message": "Optionally require a password for users to access this Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendNotesDesc": { - "message": "Private notes about this Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "disabled": { "message": "അപ്രാപ്‌തമാക്കി" }, @@ -5134,13 +5195,6 @@ "removePasswordConfirmation": { "message": "പാസ്‌വേഡ് നീക്കംചെയ്യണമെന്ന് നിങ്ങൾക്ക് ഉറപ്പാണോ?" }, - "hideEmail": { - "message": "Hide my email address from recipients." - }, - "disableThisSend": { - "message": "Deactivate this Send so that no one can access it.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "allSends": { "message": "എല്ലാം Send-കൾ" }, @@ -5151,6 +5205,9 @@ "pendingDeletion": { "message": "Pending deletion" }, + "hideTextByDefault": { + "message": "Hide text by default" + }, "expired": { "message": "Expired" }, @@ -5372,13 +5429,6 @@ "message": "Always show member’s email address with recipients when creating or editing a Send.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, - "sendOptionsPolicyInEffect": { - "message": "The following organization policies are currently in effect:" - }, - "sendDisableHideEmailInEffect": { - "message": "Users are not allowed to hide their email address from recipients when creating or editing a Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "modifiedPolicyId": { "message": "Modified policy $ID$.", "placeholders": { @@ -5478,27 +5528,6 @@ "personalOwnershipCheckboxDesc": { "message": "Remove individual ownership for organization users" }, - "textHiddenByDefault": { - "message": "When accessing the Send, hide the text by default", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendNameDesc": { - "message": "A friendly name to describe this Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendTextDesc": { - "message": "The text you want to Send." - }, - "sendFileDesc": { - "message": "The file you want to Send." - }, - "copySendLinkOnSave": { - "message": "Copy the link to share this Send to my clipboard upon save." - }, - "sendLinkLabel": { - "message": "Send link", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "send": { "message": "Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -5647,12 +5676,21 @@ "dateParsingError": { "message": "There was an error saving your deletion and expiration dates." }, + "hideYourEmail": { + "message": "Hide your email address from viewers." + }, "webAuthnFallbackMsg": { "message": "To verify your 2FA please click the button below." }, "webAuthnAuthenticate": { "message": "Authenticate WebAuthn" }, + "readSecurityKey": { + "message": "Read security key" + }, + "awaitingSecurityKeyInteraction": { + "message": "Awaiting security key interaction..." + }, "webAuthnNotSupported": { "message": "WebAuthn is not supported in this browser." }, @@ -7199,6 +7237,12 @@ "duoRequiredByOrgForAccount": { "message": "Duo two-step login is required for your account." }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Duo two-step login is required for your account. Follow the steps below to finish logging in." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Follow the steps below to finish logging in." + }, "launchDuo": { "message": "Launch Duo" }, @@ -9793,9 +9837,15 @@ "learnMoreAboutApi": { "message": "Learn more about Bitwarden's API" }, + "fileSend": { + "message": "File Send" + }, "fileSends": { "message": "File Sends" }, + "textSend": { + "message": "Text Send" + }, "textSends": { "message": "Text Sends" }, @@ -10029,10 +10079,6 @@ "message": "Include special characters", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "addAttachment": { "message": "Add attachment" }, @@ -10432,10 +10478,31 @@ "assignedExceedsAvailable": { "message": "Assigned seats exceed available seats." }, + "changeAtRiskPassword": { + "message": "Change at-risk password" + }, "removeUnlockWithPinPolicyTitle": { "message": "Remove Unlock with PIN" }, "removeUnlockWithPinPolicyDesc": { "message": "Do not allow members to unlock their account with a PIN." + }, + "limitedEventLogs": { + "message": "$PRODUCT_TYPE$ plans do not have access to real event logs", + "placeholders": { + "product_type": { + "content": "$1", + "example": "Teams" + } + } + }, + "upgradeForFullEvents": { + "message": "Get full access to organization event logs by upgrading to a Teams or Enterprise plan." + }, + "upgradeEventLogTitle": { + "message": "Upgrade for real event log data" + }, + "upgradeEventLogMessage": { + "message": "These events are examples only and do not reflect real events within your Bitwarden organization." } } diff --git a/apps/web/src/locales/mr/messages.json b/apps/web/src/locales/mr/messages.json index 1c4e2e55201..c205ace9ac1 100644 --- a/apps/web/src/locales/mr/messages.json +++ b/apps/web/src/locales/mr/messages.json @@ -5,6 +5,9 @@ "criticalApplications": { "message": "Critical applications" }, + "noCriticalAppsAtRisk": { + "message": "No critical applications at risk" + }, "accessIntelligence": { "message": "Access Intelligence" }, @@ -198,6 +201,9 @@ "notes": { "message": "Notes" }, + "privateNote": { + "message": "Private note" + }, "note": { "message": "Note" }, @@ -1026,6 +1032,9 @@ "no": { "message": "No" }, + "location": { + "message": "Location" + }, "loginOrCreateNewAccount": { "message": "Log in or create a new account to access your secure vault." }, @@ -1161,13 +1170,22 @@ "logInToBitwarden": { "message": "Log in to Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "Enter the code sent to your email" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Enter the code from your authenticator app" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Press your YubiKey to authenticate" + }, "authenticationTimeout": { "message": "Authentication timeout" }, "authenticationSessionTimedOut": { "message": "The authentication session timed out. Please restart the login process." }, - "verifyIdentity": { + "verifyYourIdentity": { "message": "Verify your Identity" }, "weDontRecognizeThisDevice": { @@ -1443,12 +1461,22 @@ "rememberMe": { "message": "Remember me" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Don't ask again on this device for 30 days" + }, "sendVerificationCodeEmailAgain": { "message": "Send verification code email again" }, "useAnotherTwoStepMethod": { "message": "Use another two-step login method" }, + "selectAnotherMethod": { + "message": "Select another method", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Use your recovery code" + }, "insertYubiKey": { "message": "Insert your YubiKey into your computer's USB port, then touch its button." }, @@ -1467,6 +1495,9 @@ "twoStepOptions": { "message": "Two-step login options" }, + "selectTwoStepLoginMethod": { + "message": "Select two-step login method" + }, "recoveryCodeDesc": { "message": "Lost access to all of your two-step login providers? Use your recovery code to turn off all two-step login providers from your account." }, @@ -1509,6 +1540,9 @@ "webAuthnMigrated": { "message": "(Migrated from FIDO)" }, + "openInNewTab": { + "message": "Open in new tab" + }, "emailTitle": { "message": "Email" }, @@ -2224,6 +2258,9 @@ "revokeAccess": { "message": "Revoke access" }, + "revoke": { + "message": "Revoke" + }, "twoStepLoginProviderEnabled": { "message": "This two-step login provider is active on your account." }, @@ -4081,6 +4118,12 @@ "updateBrowserDesc": { "message": "You are using an unsupported web browser. The web vault may not function properly." }, + "youHaveAPendingLoginRequest": { + "message": "You have a pending login request from another device." + }, + "reviewLoginRequest": { + "message": "Review login request" + }, "freeTrialEndPromptCount": { "message": "Your free trial ends in $COUNT$ days.", "placeholders": { @@ -4758,6 +4801,15 @@ "masterPassPolicyDesc": { "message": "Set requirements for master password strength." }, + "passwordStrengthScore": { + "message": "Password strength score $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "twoStepLoginPolicyTitle": { "message": "Require two-step login" }, @@ -5038,12 +5090,40 @@ "requireSsoExemption": { "message": "Organization owners and admins are exempt from this policy's enforcement." }, + "limitSendViews": { + "message": "Limit views" + }, + "limitSendViewsHint": { + "message": "No one can view this Send after the limit is reached.", + "description": "Displayed under the limit views field on Send" + }, + "limitSendViewsCount": { + "message": "$ACCESSCOUNT$ views left", + "description": "Displayed under the limit views field on Send", + "placeholders": { + "accessCount": { + "content": "$1", + "example": "2" + } + } + }, + "sendDetails": { + "message": "Send details", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendTypeTextToShare": { + "message": "Text to share" + }, "sendTypeFile": { "message": "File" }, "sendTypeText": { "message": "Text" }, + "sendPasswordDescV3": { + "message": "Add an optional password for recipients to access this Send.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "createSend": { "message": "New Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -5068,19 +5148,15 @@ "message": "Delete Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, - "deleteSendConfirmation": { - "message": "Are you sure you want to delete this Send?", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "whatTypeOfSend": { - "message": "What type of Send is this?", + "deleteSendPermanentConfirmation": { + "message": "Are you sure you want to permanently delete this Send?", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "deletionDate": { "message": "Deletion date" }, - "deletionDateDesc": { - "message": "The Send will be permanently deleted on the specified date and time.", + "deletionDateDescV2": { + "message": "The Send will be permanently deleted on this date.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "expirationDate": { @@ -5093,21 +5169,6 @@ "maxAccessCount": { "message": "Maximum access count" }, - "maxAccessCountDesc": { - "message": "If set, users will no longer be able to access this Send once the maximum access count is reached.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "currentAccessCount": { - "message": "Current access count" - }, - "sendPasswordDesc": { - "message": "Optionally require a password for users to access this Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendNotesDesc": { - "message": "Private notes about this Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "disabled": { "message": "Disabled" }, @@ -5134,13 +5195,6 @@ "removePasswordConfirmation": { "message": "Are you sure you want to remove the password?" }, - "hideEmail": { - "message": "Hide my email address from recipients." - }, - "disableThisSend": { - "message": "Deactivate this Send so that no one can access it.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "allSends": { "message": "All Sends" }, @@ -5151,6 +5205,9 @@ "pendingDeletion": { "message": "Pending deletion" }, + "hideTextByDefault": { + "message": "Hide text by default" + }, "expired": { "message": "Expired" }, @@ -5372,13 +5429,6 @@ "message": "Always show member’s email address with recipients when creating or editing a Send.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, - "sendOptionsPolicyInEffect": { - "message": "The following organization policies are currently in effect:" - }, - "sendDisableHideEmailInEffect": { - "message": "Users are not allowed to hide their email address from recipients when creating or editing a Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "modifiedPolicyId": { "message": "Modified policy $ID$.", "placeholders": { @@ -5478,27 +5528,6 @@ "personalOwnershipCheckboxDesc": { "message": "Remove individual ownership for organization users" }, - "textHiddenByDefault": { - "message": "When accessing the Send, hide the text by default", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendNameDesc": { - "message": "A friendly name to describe this Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendTextDesc": { - "message": "The text you want to Send." - }, - "sendFileDesc": { - "message": "The file you want to Send." - }, - "copySendLinkOnSave": { - "message": "Copy the link to share this Send to my clipboard upon save." - }, - "sendLinkLabel": { - "message": "Send link", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "send": { "message": "Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -5647,12 +5676,21 @@ "dateParsingError": { "message": "There was an error saving your deletion and expiration dates." }, + "hideYourEmail": { + "message": "Hide your email address from viewers." + }, "webAuthnFallbackMsg": { "message": "To verify your 2FA please click the button below." }, "webAuthnAuthenticate": { "message": "Authenticate WebAuthn" }, + "readSecurityKey": { + "message": "Read security key" + }, + "awaitingSecurityKeyInteraction": { + "message": "Awaiting security key interaction..." + }, "webAuthnNotSupported": { "message": "WebAuthn is not supported in this browser." }, @@ -7199,6 +7237,12 @@ "duoRequiredByOrgForAccount": { "message": "Duo two-step login is required for your account." }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Duo two-step login is required for your account. Follow the steps below to finish logging in." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Follow the steps below to finish logging in." + }, "launchDuo": { "message": "Launch Duo" }, @@ -9793,9 +9837,15 @@ "learnMoreAboutApi": { "message": "Learn more about Bitwarden's API" }, + "fileSend": { + "message": "File Send" + }, "fileSends": { "message": "File Sends" }, + "textSend": { + "message": "Text Send" + }, "textSends": { "message": "Text Sends" }, @@ -10029,10 +10079,6 @@ "message": "Include special characters", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "addAttachment": { "message": "Add attachment" }, @@ -10432,10 +10478,31 @@ "assignedExceedsAvailable": { "message": "Assigned seats exceed available seats." }, + "changeAtRiskPassword": { + "message": "Change at-risk password" + }, "removeUnlockWithPinPolicyTitle": { "message": "Remove Unlock with PIN" }, "removeUnlockWithPinPolicyDesc": { "message": "Do not allow members to unlock their account with a PIN." + }, + "limitedEventLogs": { + "message": "$PRODUCT_TYPE$ plans do not have access to real event logs", + "placeholders": { + "product_type": { + "content": "$1", + "example": "Teams" + } + } + }, + "upgradeForFullEvents": { + "message": "Get full access to organization event logs by upgrading to a Teams or Enterprise plan." + }, + "upgradeEventLogTitle": { + "message": "Upgrade for real event log data" + }, + "upgradeEventLogMessage": { + "message": "These events are examples only and do not reflect real events within your Bitwarden organization." } } diff --git a/apps/web/src/locales/my/messages.json b/apps/web/src/locales/my/messages.json index 1c4e2e55201..c205ace9ac1 100644 --- a/apps/web/src/locales/my/messages.json +++ b/apps/web/src/locales/my/messages.json @@ -5,6 +5,9 @@ "criticalApplications": { "message": "Critical applications" }, + "noCriticalAppsAtRisk": { + "message": "No critical applications at risk" + }, "accessIntelligence": { "message": "Access Intelligence" }, @@ -198,6 +201,9 @@ "notes": { "message": "Notes" }, + "privateNote": { + "message": "Private note" + }, "note": { "message": "Note" }, @@ -1026,6 +1032,9 @@ "no": { "message": "No" }, + "location": { + "message": "Location" + }, "loginOrCreateNewAccount": { "message": "Log in or create a new account to access your secure vault." }, @@ -1161,13 +1170,22 @@ "logInToBitwarden": { "message": "Log in to Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "Enter the code sent to your email" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Enter the code from your authenticator app" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Press your YubiKey to authenticate" + }, "authenticationTimeout": { "message": "Authentication timeout" }, "authenticationSessionTimedOut": { "message": "The authentication session timed out. Please restart the login process." }, - "verifyIdentity": { + "verifyYourIdentity": { "message": "Verify your Identity" }, "weDontRecognizeThisDevice": { @@ -1443,12 +1461,22 @@ "rememberMe": { "message": "Remember me" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Don't ask again on this device for 30 days" + }, "sendVerificationCodeEmailAgain": { "message": "Send verification code email again" }, "useAnotherTwoStepMethod": { "message": "Use another two-step login method" }, + "selectAnotherMethod": { + "message": "Select another method", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Use your recovery code" + }, "insertYubiKey": { "message": "Insert your YubiKey into your computer's USB port, then touch its button." }, @@ -1467,6 +1495,9 @@ "twoStepOptions": { "message": "Two-step login options" }, + "selectTwoStepLoginMethod": { + "message": "Select two-step login method" + }, "recoveryCodeDesc": { "message": "Lost access to all of your two-step login providers? Use your recovery code to turn off all two-step login providers from your account." }, @@ -1509,6 +1540,9 @@ "webAuthnMigrated": { "message": "(Migrated from FIDO)" }, + "openInNewTab": { + "message": "Open in new tab" + }, "emailTitle": { "message": "Email" }, @@ -2224,6 +2258,9 @@ "revokeAccess": { "message": "Revoke access" }, + "revoke": { + "message": "Revoke" + }, "twoStepLoginProviderEnabled": { "message": "This two-step login provider is active on your account." }, @@ -4081,6 +4118,12 @@ "updateBrowserDesc": { "message": "You are using an unsupported web browser. The web vault may not function properly." }, + "youHaveAPendingLoginRequest": { + "message": "You have a pending login request from another device." + }, + "reviewLoginRequest": { + "message": "Review login request" + }, "freeTrialEndPromptCount": { "message": "Your free trial ends in $COUNT$ days.", "placeholders": { @@ -4758,6 +4801,15 @@ "masterPassPolicyDesc": { "message": "Set requirements for master password strength." }, + "passwordStrengthScore": { + "message": "Password strength score $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "twoStepLoginPolicyTitle": { "message": "Require two-step login" }, @@ -5038,12 +5090,40 @@ "requireSsoExemption": { "message": "Organization owners and admins are exempt from this policy's enforcement." }, + "limitSendViews": { + "message": "Limit views" + }, + "limitSendViewsHint": { + "message": "No one can view this Send after the limit is reached.", + "description": "Displayed under the limit views field on Send" + }, + "limitSendViewsCount": { + "message": "$ACCESSCOUNT$ views left", + "description": "Displayed under the limit views field on Send", + "placeholders": { + "accessCount": { + "content": "$1", + "example": "2" + } + } + }, + "sendDetails": { + "message": "Send details", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendTypeTextToShare": { + "message": "Text to share" + }, "sendTypeFile": { "message": "File" }, "sendTypeText": { "message": "Text" }, + "sendPasswordDescV3": { + "message": "Add an optional password for recipients to access this Send.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "createSend": { "message": "New Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -5068,19 +5148,15 @@ "message": "Delete Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, - "deleteSendConfirmation": { - "message": "Are you sure you want to delete this Send?", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "whatTypeOfSend": { - "message": "What type of Send is this?", + "deleteSendPermanentConfirmation": { + "message": "Are you sure you want to permanently delete this Send?", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "deletionDate": { "message": "Deletion date" }, - "deletionDateDesc": { - "message": "The Send will be permanently deleted on the specified date and time.", + "deletionDateDescV2": { + "message": "The Send will be permanently deleted on this date.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "expirationDate": { @@ -5093,21 +5169,6 @@ "maxAccessCount": { "message": "Maximum access count" }, - "maxAccessCountDesc": { - "message": "If set, users will no longer be able to access this Send once the maximum access count is reached.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "currentAccessCount": { - "message": "Current access count" - }, - "sendPasswordDesc": { - "message": "Optionally require a password for users to access this Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendNotesDesc": { - "message": "Private notes about this Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "disabled": { "message": "Disabled" }, @@ -5134,13 +5195,6 @@ "removePasswordConfirmation": { "message": "Are you sure you want to remove the password?" }, - "hideEmail": { - "message": "Hide my email address from recipients." - }, - "disableThisSend": { - "message": "Deactivate this Send so that no one can access it.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "allSends": { "message": "All Sends" }, @@ -5151,6 +5205,9 @@ "pendingDeletion": { "message": "Pending deletion" }, + "hideTextByDefault": { + "message": "Hide text by default" + }, "expired": { "message": "Expired" }, @@ -5372,13 +5429,6 @@ "message": "Always show member’s email address with recipients when creating or editing a Send.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, - "sendOptionsPolicyInEffect": { - "message": "The following organization policies are currently in effect:" - }, - "sendDisableHideEmailInEffect": { - "message": "Users are not allowed to hide their email address from recipients when creating or editing a Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "modifiedPolicyId": { "message": "Modified policy $ID$.", "placeholders": { @@ -5478,27 +5528,6 @@ "personalOwnershipCheckboxDesc": { "message": "Remove individual ownership for organization users" }, - "textHiddenByDefault": { - "message": "When accessing the Send, hide the text by default", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendNameDesc": { - "message": "A friendly name to describe this Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendTextDesc": { - "message": "The text you want to Send." - }, - "sendFileDesc": { - "message": "The file you want to Send." - }, - "copySendLinkOnSave": { - "message": "Copy the link to share this Send to my clipboard upon save." - }, - "sendLinkLabel": { - "message": "Send link", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "send": { "message": "Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -5647,12 +5676,21 @@ "dateParsingError": { "message": "There was an error saving your deletion and expiration dates." }, + "hideYourEmail": { + "message": "Hide your email address from viewers." + }, "webAuthnFallbackMsg": { "message": "To verify your 2FA please click the button below." }, "webAuthnAuthenticate": { "message": "Authenticate WebAuthn" }, + "readSecurityKey": { + "message": "Read security key" + }, + "awaitingSecurityKeyInteraction": { + "message": "Awaiting security key interaction..." + }, "webAuthnNotSupported": { "message": "WebAuthn is not supported in this browser." }, @@ -7199,6 +7237,12 @@ "duoRequiredByOrgForAccount": { "message": "Duo two-step login is required for your account." }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Duo two-step login is required for your account. Follow the steps below to finish logging in." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Follow the steps below to finish logging in." + }, "launchDuo": { "message": "Launch Duo" }, @@ -9793,9 +9837,15 @@ "learnMoreAboutApi": { "message": "Learn more about Bitwarden's API" }, + "fileSend": { + "message": "File Send" + }, "fileSends": { "message": "File Sends" }, + "textSend": { + "message": "Text Send" + }, "textSends": { "message": "Text Sends" }, @@ -10029,10 +10079,6 @@ "message": "Include special characters", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "addAttachment": { "message": "Add attachment" }, @@ -10432,10 +10478,31 @@ "assignedExceedsAvailable": { "message": "Assigned seats exceed available seats." }, + "changeAtRiskPassword": { + "message": "Change at-risk password" + }, "removeUnlockWithPinPolicyTitle": { "message": "Remove Unlock with PIN" }, "removeUnlockWithPinPolicyDesc": { "message": "Do not allow members to unlock their account with a PIN." + }, + "limitedEventLogs": { + "message": "$PRODUCT_TYPE$ plans do not have access to real event logs", + "placeholders": { + "product_type": { + "content": "$1", + "example": "Teams" + } + } + }, + "upgradeForFullEvents": { + "message": "Get full access to organization event logs by upgrading to a Teams or Enterprise plan." + }, + "upgradeEventLogTitle": { + "message": "Upgrade for real event log data" + }, + "upgradeEventLogMessage": { + "message": "These events are examples only and do not reflect real events within your Bitwarden organization." } } diff --git a/apps/web/src/locales/nb/messages.json b/apps/web/src/locales/nb/messages.json index 32f3a9485a8..2d58852e557 100644 --- a/apps/web/src/locales/nb/messages.json +++ b/apps/web/src/locales/nb/messages.json @@ -5,6 +5,9 @@ "criticalApplications": { "message": "Critical applications" }, + "noCriticalAppsAtRisk": { + "message": "No critical applications at risk" + }, "accessIntelligence": { "message": "Access Intelligence" }, @@ -198,6 +201,9 @@ "notes": { "message": "Notater" }, + "privateNote": { + "message": "Private note" + }, "note": { "message": "Note" }, @@ -1026,6 +1032,9 @@ "no": { "message": "Nei" }, + "location": { + "message": "Location" + }, "loginOrCreateNewAccount": { "message": "Logg på eller opprett en ny konto for å få tilgang til ditt sikre hvelv." }, @@ -1161,13 +1170,22 @@ "logInToBitwarden": { "message": "Logg inn på Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "Enter the code sent to your email" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Enter the code from your authenticator app" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Press your YubiKey to authenticate" + }, "authenticationTimeout": { "message": "Authentication timeout" }, "authenticationSessionTimedOut": { "message": "The authentication session timed out. Please restart the login process." }, - "verifyIdentity": { + "verifyYourIdentity": { "message": "Verify your Identity" }, "weDontRecognizeThisDevice": { @@ -1443,12 +1461,22 @@ "rememberMe": { "message": "Husk på meg" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Don't ask again on this device for 30 days" + }, "sendVerificationCodeEmailAgain": { "message": "Send E-posten med verifiseringskoden på nytt" }, "useAnotherTwoStepMethod": { "message": "Bruk en annen 2-trinnsinnloggingsmetode" }, + "selectAnotherMethod": { + "message": "Select another method", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Use your recovery code" + }, "insertYubiKey": { "message": "Sett inn din YubiKey i din datamaskins USB-uttak, og så trykk på dens knapp." }, @@ -1467,6 +1495,9 @@ "twoStepOptions": { "message": "2-trinnsinnloggingsalternativer" }, + "selectTwoStepLoginMethod": { + "message": "Select two-step login method" + }, "recoveryCodeDesc": { "message": "Har du mistet tilgang til alle dine 2-trinnsleverandører? Bruk din gjenopprettingskode til å fjerne alle 2-trinnsleverandører fra din konto." }, @@ -1509,6 +1540,9 @@ "webAuthnMigrated": { "message": "(Migrert fra FIDO)" }, + "openInNewTab": { + "message": "Open in new tab" + }, "emailTitle": { "message": "E-post" }, @@ -2224,6 +2258,9 @@ "revokeAccess": { "message": "Opphev tilgang" }, + "revoke": { + "message": "Revoke" + }, "twoStepLoginProviderEnabled": { "message": "Denne 2-trinnsleverandøren er aktivert på din konto." }, @@ -4081,6 +4118,12 @@ "updateBrowserDesc": { "message": "Du bruker en ustøttet nettleser. Netthvelvet vil kanskje ikke fungere ordentlig." }, + "youHaveAPendingLoginRequest": { + "message": "You have a pending login request from another device." + }, + "reviewLoginRequest": { + "message": "Review login request" + }, "freeTrialEndPromptCount": { "message": "Your free trial ends in $COUNT$ days.", "placeholders": { @@ -4758,6 +4801,15 @@ "masterPassPolicyDesc": { "message": "Sett minimumskrav til hovedpassordets styrke." }, + "passwordStrengthScore": { + "message": "Password strength score $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "twoStepLoginPolicyTitle": { "message": "Krev 2-trinnsinnlogging" }, @@ -5038,12 +5090,40 @@ "requireSsoExemption": { "message": "Organisasjonens eiere og administratorer er unntatt fra denne policyens håndheving." }, + "limitSendViews": { + "message": "Limit views" + }, + "limitSendViewsHint": { + "message": "No one can view this Send after the limit is reached.", + "description": "Displayed under the limit views field on Send" + }, + "limitSendViewsCount": { + "message": "$ACCESSCOUNT$ views left", + "description": "Displayed under the limit views field on Send", + "placeholders": { + "accessCount": { + "content": "$1", + "example": "2" + } + } + }, + "sendDetails": { + "message": "Send details", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendTypeTextToShare": { + "message": "Text to share" + }, "sendTypeFile": { "message": "Fil" }, "sendTypeText": { "message": "Tekst" }, + "sendPasswordDescV3": { + "message": "Add an optional password for recipients to access this Send.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "createSend": { "message": "Lag ny Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -5068,19 +5148,15 @@ "message": "Slett Send-en", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, - "deleteSendConfirmation": { - "message": "Er du sikker på at du vil slette denne Send-en?", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "whatTypeOfSend": { - "message": "Hvilken type Send er dette?", + "deleteSendPermanentConfirmation": { + "message": "Are you sure you want to permanently delete this Send?", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "deletionDate": { "message": "Dato for sletting" }, - "deletionDateDesc": { - "message": "Send-en vil bli permanent slettet på angitt dato og klokkeslett.", + "deletionDateDescV2": { + "message": "The Send will be permanently deleted on this date.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "expirationDate": { @@ -5093,21 +5169,6 @@ "maxAccessCount": { "message": "Maksimal antall tilganger" }, - "maxAccessCountDesc": { - "message": "Hvis satt, vil ikke brukere lenger ha tilgang til denne Send-en når maksimalt antall aksesseringer er nådd.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "currentAccessCount": { - "message": "Antall nåværende tilganger" - }, - "sendPasswordDesc": { - "message": "Valgfritt passordkrav for å få tilgang til denne Send-en.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendNotesDesc": { - "message": "Private notater om denne Send-en.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "disabled": { "message": "Deaktivert" }, @@ -5134,13 +5195,6 @@ "removePasswordConfirmation": { "message": "Er du sikker på at du vil fjerne passordet?" }, - "hideEmail": { - "message": "Skjul min e-postadresse fra mottakere." - }, - "disableThisSend": { - "message": "Deaktiver denne Send-en slik at ingen får tilgang til den.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "allSends": { "message": "Alle Send-er" }, @@ -5151,6 +5205,9 @@ "pendingDeletion": { "message": "Venter på sletting" }, + "hideTextByDefault": { + "message": "Hide text by default" + }, "expired": { "message": "Utløpt" }, @@ -5372,13 +5429,6 @@ "message": "Ikke tillat brukere å skjule sin e-postadresse fra mottakere når de oppretter eller endrer en Send.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, - "sendOptionsPolicyInEffect": { - "message": "Følgende organisasjonspolicyer er for tiden i virkning:" - }, - "sendDisableHideEmailInEffect": { - "message": "Brukere kan ikke skjule sin e-postadresse fra mottakere når de oppretter eller endrer en Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "modifiedPolicyId": { "message": "Modifisert policy $ID$.", "placeholders": { @@ -5478,27 +5528,6 @@ "personalOwnershipCheckboxDesc": { "message": "Deaktiver personlig eierskap for organisasjonsbrukere" }, - "textHiddenByDefault": { - "message": "Når du åpner Send-en, er teksten skjult som standard", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendNameDesc": { - "message": "Beskrivende navn for denne Send-en.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendTextDesc": { - "message": "Teksten du ønsker å sende." - }, - "sendFileDesc": { - "message": "Filen du vil sende." - }, - "copySendLinkOnSave": { - "message": "Kopier lenken for å dele denne Send-en til utklippstavlen min ved lagring." - }, - "sendLinkLabel": { - "message": "Send lenke", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "send": { "message": "Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -5647,12 +5676,21 @@ "dateParsingError": { "message": "Det oppstod en feil ved lagring av slettingen og utløpsdatoene." }, + "hideYourEmail": { + "message": "Hide your email address from viewers." + }, "webAuthnFallbackMsg": { "message": "For å verifisere din 2FA vennligst klikk knappen nedenfor." }, "webAuthnAuthenticate": { "message": "Autentiser WebAuthn" }, + "readSecurityKey": { + "message": "Read security key" + }, + "awaitingSecurityKeyInteraction": { + "message": "Awaiting security key interaction..." + }, "webAuthnNotSupported": { "message": "WebAuthn støttes ikke i denne nettleseren." }, @@ -7199,6 +7237,12 @@ "duoRequiredByOrgForAccount": { "message": "Duo two-step login is required for your account." }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Duo two-step login is required for your account. Follow the steps below to finish logging in." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Follow the steps below to finish logging in." + }, "launchDuo": { "message": "Start Duo" }, @@ -9793,9 +9837,15 @@ "learnMoreAboutApi": { "message": "Learn more about Bitwarden's API" }, + "fileSend": { + "message": "File Send" + }, "fileSends": { "message": "File Sends" }, + "textSend": { + "message": "Text Send" + }, "textSends": { "message": "Text Sends" }, @@ -10029,10 +10079,6 @@ "message": "Inkluder spesialtegn", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "addAttachment": { "message": "Legg til vedlegg" }, @@ -10432,10 +10478,31 @@ "assignedExceedsAvailable": { "message": "Assigned seats exceed available seats." }, + "changeAtRiskPassword": { + "message": "Change at-risk password" + }, "removeUnlockWithPinPolicyTitle": { "message": "Remove Unlock with PIN" }, "removeUnlockWithPinPolicyDesc": { "message": "Do not allow members to unlock their account with a PIN." + }, + "limitedEventLogs": { + "message": "$PRODUCT_TYPE$ plans do not have access to real event logs", + "placeholders": { + "product_type": { + "content": "$1", + "example": "Teams" + } + } + }, + "upgradeForFullEvents": { + "message": "Get full access to organization event logs by upgrading to a Teams or Enterprise plan." + }, + "upgradeEventLogTitle": { + "message": "Upgrade for real event log data" + }, + "upgradeEventLogMessage": { + "message": "These events are examples only and do not reflect real events within your Bitwarden organization." } } diff --git a/apps/web/src/locales/ne/messages.json b/apps/web/src/locales/ne/messages.json index 7070b26a7bc..6774111e2ea 100644 --- a/apps/web/src/locales/ne/messages.json +++ b/apps/web/src/locales/ne/messages.json @@ -5,6 +5,9 @@ "criticalApplications": { "message": "Critical applications" }, + "noCriticalAppsAtRisk": { + "message": "No critical applications at risk" + }, "accessIntelligence": { "message": "Access Intelligence" }, @@ -198,6 +201,9 @@ "notes": { "message": "नोटहरू" }, + "privateNote": { + "message": "Private note" + }, "note": { "message": "Note" }, @@ -1026,6 +1032,9 @@ "no": { "message": "No" }, + "location": { + "message": "Location" + }, "loginOrCreateNewAccount": { "message": "Log in or create a new account to access your secure vault." }, @@ -1161,13 +1170,22 @@ "logInToBitwarden": { "message": "Log in to Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "Enter the code sent to your email" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Enter the code from your authenticator app" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Press your YubiKey to authenticate" + }, "authenticationTimeout": { "message": "Authentication timeout" }, "authenticationSessionTimedOut": { "message": "The authentication session timed out. Please restart the login process." }, - "verifyIdentity": { + "verifyYourIdentity": { "message": "Verify your Identity" }, "weDontRecognizeThisDevice": { @@ -1443,12 +1461,22 @@ "rememberMe": { "message": "Remember me" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Don't ask again on this device for 30 days" + }, "sendVerificationCodeEmailAgain": { "message": "Send verification code email again" }, "useAnotherTwoStepMethod": { "message": "Use another two-step login method" }, + "selectAnotherMethod": { + "message": "Select another method", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Use your recovery code" + }, "insertYubiKey": { "message": "Insert your YubiKey into your computer's USB port, then touch its button." }, @@ -1467,6 +1495,9 @@ "twoStepOptions": { "message": "Two-step login options" }, + "selectTwoStepLoginMethod": { + "message": "Select two-step login method" + }, "recoveryCodeDesc": { "message": "Lost access to all of your two-step login providers? Use your recovery code to turn off all two-step login providers from your account." }, @@ -1509,6 +1540,9 @@ "webAuthnMigrated": { "message": "(Migrated from FIDO)" }, + "openInNewTab": { + "message": "Open in new tab" + }, "emailTitle": { "message": "Email" }, @@ -2224,6 +2258,9 @@ "revokeAccess": { "message": "Revoke access" }, + "revoke": { + "message": "Revoke" + }, "twoStepLoginProviderEnabled": { "message": "This two-step login provider is active on your account." }, @@ -4081,6 +4118,12 @@ "updateBrowserDesc": { "message": "You are using an unsupported web browser. The web vault may not function properly." }, + "youHaveAPendingLoginRequest": { + "message": "You have a pending login request from another device." + }, + "reviewLoginRequest": { + "message": "Review login request" + }, "freeTrialEndPromptCount": { "message": "Your free trial ends in $COUNT$ days.", "placeholders": { @@ -4758,6 +4801,15 @@ "masterPassPolicyDesc": { "message": "Set requirements for master password strength." }, + "passwordStrengthScore": { + "message": "Password strength score $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "twoStepLoginPolicyTitle": { "message": "Require two-step login" }, @@ -5038,12 +5090,40 @@ "requireSsoExemption": { "message": "Organization owners and admins are exempt from this policy's enforcement." }, + "limitSendViews": { + "message": "Limit views" + }, + "limitSendViewsHint": { + "message": "No one can view this Send after the limit is reached.", + "description": "Displayed under the limit views field on Send" + }, + "limitSendViewsCount": { + "message": "$ACCESSCOUNT$ views left", + "description": "Displayed under the limit views field on Send", + "placeholders": { + "accessCount": { + "content": "$1", + "example": "2" + } + } + }, + "sendDetails": { + "message": "Send details", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendTypeTextToShare": { + "message": "Text to share" + }, "sendTypeFile": { "message": "File" }, "sendTypeText": { "message": "Text" }, + "sendPasswordDescV3": { + "message": "Add an optional password for recipients to access this Send.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "createSend": { "message": "New Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -5068,19 +5148,15 @@ "message": "Delete Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, - "deleteSendConfirmation": { - "message": "Are you sure you want to delete this Send?", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "whatTypeOfSend": { - "message": "What type of Send is this?", + "deleteSendPermanentConfirmation": { + "message": "Are you sure you want to permanently delete this Send?", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "deletionDate": { "message": "Deletion date" }, - "deletionDateDesc": { - "message": "The Send will be permanently deleted on the specified date and time.", + "deletionDateDescV2": { + "message": "The Send will be permanently deleted on this date.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "expirationDate": { @@ -5093,21 +5169,6 @@ "maxAccessCount": { "message": "Maximum access count" }, - "maxAccessCountDesc": { - "message": "If set, users will no longer be able to access this Send once the maximum access count is reached.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "currentAccessCount": { - "message": "Current access count" - }, - "sendPasswordDesc": { - "message": "Optionally require a password for users to access this Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendNotesDesc": { - "message": "Private notes about this Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "disabled": { "message": "Disabled" }, @@ -5134,13 +5195,6 @@ "removePasswordConfirmation": { "message": "Are you sure you want to remove the password?" }, - "hideEmail": { - "message": "Hide my email address from recipients." - }, - "disableThisSend": { - "message": "Deactivate this Send so that no one can access it.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "allSends": { "message": "All Sends" }, @@ -5151,6 +5205,9 @@ "pendingDeletion": { "message": "Pending deletion" }, + "hideTextByDefault": { + "message": "Hide text by default" + }, "expired": { "message": "Expired" }, @@ -5372,13 +5429,6 @@ "message": "Always show member’s email address with recipients when creating or editing a Send.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, - "sendOptionsPolicyInEffect": { - "message": "The following organization policies are currently in effect:" - }, - "sendDisableHideEmailInEffect": { - "message": "Users are not allowed to hide their email address from recipients when creating or editing a Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "modifiedPolicyId": { "message": "Modified policy $ID$.", "placeholders": { @@ -5478,27 +5528,6 @@ "personalOwnershipCheckboxDesc": { "message": "Remove individual ownership for organization users" }, - "textHiddenByDefault": { - "message": "When accessing the Send, hide the text by default", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendNameDesc": { - "message": "A friendly name to describe this Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendTextDesc": { - "message": "The text you want to Send." - }, - "sendFileDesc": { - "message": "The file you want to Send." - }, - "copySendLinkOnSave": { - "message": "Copy the link to share this Send to my clipboard upon save." - }, - "sendLinkLabel": { - "message": "Send link", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "send": { "message": "Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -5647,12 +5676,21 @@ "dateParsingError": { "message": "There was an error saving your deletion and expiration dates." }, + "hideYourEmail": { + "message": "Hide your email address from viewers." + }, "webAuthnFallbackMsg": { "message": "To verify your 2FA please click the button below." }, "webAuthnAuthenticate": { "message": "Authenticate WebAuthn" }, + "readSecurityKey": { + "message": "Read security key" + }, + "awaitingSecurityKeyInteraction": { + "message": "Awaiting security key interaction..." + }, "webAuthnNotSupported": { "message": "WebAuthn is not supported in this browser." }, @@ -7199,6 +7237,12 @@ "duoRequiredByOrgForAccount": { "message": "Duo two-step login is required for your account." }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Duo two-step login is required for your account. Follow the steps below to finish logging in." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Follow the steps below to finish logging in." + }, "launchDuo": { "message": "Launch Duo" }, @@ -9793,9 +9837,15 @@ "learnMoreAboutApi": { "message": "Learn more about Bitwarden's API" }, + "fileSend": { + "message": "File Send" + }, "fileSends": { "message": "File Sends" }, + "textSend": { + "message": "Text Send" + }, "textSends": { "message": "Text Sends" }, @@ -10029,10 +10079,6 @@ "message": "Include special characters", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "addAttachment": { "message": "Add attachment" }, @@ -10432,10 +10478,31 @@ "assignedExceedsAvailable": { "message": "Assigned seats exceed available seats." }, + "changeAtRiskPassword": { + "message": "Change at-risk password" + }, "removeUnlockWithPinPolicyTitle": { "message": "Remove Unlock with PIN" }, "removeUnlockWithPinPolicyDesc": { "message": "Do not allow members to unlock their account with a PIN." + }, + "limitedEventLogs": { + "message": "$PRODUCT_TYPE$ plans do not have access to real event logs", + "placeholders": { + "product_type": { + "content": "$1", + "example": "Teams" + } + } + }, + "upgradeForFullEvents": { + "message": "Get full access to organization event logs by upgrading to a Teams or Enterprise plan." + }, + "upgradeEventLogTitle": { + "message": "Upgrade for real event log data" + }, + "upgradeEventLogMessage": { + "message": "These events are examples only and do not reflect real events within your Bitwarden organization." } } diff --git a/apps/web/src/locales/nl/messages.json b/apps/web/src/locales/nl/messages.json index df680d0359a..cfcdef41085 100644 --- a/apps/web/src/locales/nl/messages.json +++ b/apps/web/src/locales/nl/messages.json @@ -5,6 +5,9 @@ "criticalApplications": { "message": "Belangrijke applicaties" }, + "noCriticalAppsAtRisk": { + "message": "Geen belangrijke applicaties lopen risico" + }, "accessIntelligence": { "message": "Toegangsintelligentie" }, @@ -198,6 +201,9 @@ "notes": { "message": "Notities" }, + "privateNote": { + "message": "Privénotitie" + }, "note": { "message": "Notitie" }, @@ -1026,6 +1032,9 @@ "no": { "message": "Nee" }, + "location": { + "message": "Locatie" + }, "loginOrCreateNewAccount": { "message": "Log in of maak een nieuw account aan om toegang te krijgen tot je beveiligde kluis." }, @@ -1161,14 +1170,23 @@ "logInToBitwarden": { "message": "Inloggen op Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "Voer de code in die naar je e-mailadres is verstuurd" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Voer de code uit je authenticatie-app in" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Druk op je YubiKey om te verifiëren" + }, "authenticationTimeout": { "message": "Authenticatie-timeout" }, "authenticationSessionTimedOut": { "message": "De verificatiesessie is verlopen. Start het inlogproces opnieuw op." }, - "verifyIdentity": { - "message": "Controleer je identiteit" + "verifyYourIdentity": { + "message": "Verifieer je identiteit" }, "weDontRecognizeThisDevice": { "message": "We herkennen dit apparaat niet. Voer de code in die naar je e-mail is verzonden om je identiteit te verifiëren." @@ -1443,12 +1461,22 @@ "rememberMe": { "message": "Mijn gegevens onthouden" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "30 dagen niet meer vragen op dit apparaat" + }, "sendVerificationCodeEmailAgain": { "message": "E-mail met verificatiecode opnieuw versturen" }, "useAnotherTwoStepMethod": { "message": "Gebruik een andere methode voor tweestapsaanmelding" }, + "selectAnotherMethod": { + "message": "Kies een andere methode", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Gebruik je herstelcode" + }, "insertYubiKey": { "message": "Plaats je YubiKey in de USB-poort van je computer en druk op de knop." }, @@ -1467,6 +1495,9 @@ "twoStepOptions": { "message": "Opties voor tweestapsaanmelding" }, + "selectTwoStepLoginMethod": { + "message": "Kies methode voor tweestapsaanmelding" + }, "recoveryCodeDesc": { "message": "Ben je de toegang tot al je tweestapsaanbieders verloren? Gebruik dan je herstelcode om alle tweestapsaanbieders op je account uit te schakelen." }, @@ -1509,6 +1540,9 @@ "webAuthnMigrated": { "message": "(Gemigreerd van FIDO)" }, + "openInNewTab": { + "message": "Openen in nieuwe tab" + }, "emailTitle": { "message": "E-mailadres" }, @@ -2224,6 +2258,9 @@ "revokeAccess": { "message": "Toegang intrekken" }, + "revoke": { + "message": "Intrekken" + }, "twoStepLoginProviderEnabled": { "message": "Deze tweestapsaanmeldingsaanbieder is geactiveerd voor je account." }, @@ -4081,6 +4118,12 @@ "updateBrowserDesc": { "message": "Je maakt gebruik van webbrowser die we niet ondersteunen. De webkluis werkt mogelijk niet goed." }, + "youHaveAPendingLoginRequest": { + "message": "Je hebt inlogverzoek van een ander apparaat." + }, + "reviewLoginRequest": { + "message": "Inlogverzoek afhandelen" + }, "freeTrialEndPromptCount": { "message": "Je gratis proefperiode eindigt over $COUNT$ dagen.", "placeholders": { @@ -4758,6 +4801,15 @@ "masterPassPolicyDesc": { "message": "Minimale eisen voor de sterkte van het hoofdwachtwoord instellen." }, + "passwordStrengthScore": { + "message": "Score wachtwoordsterkte $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "twoStepLoginPolicyTitle": { "message": "Tweestapsaanmelding vereisen" }, @@ -5038,12 +5090,40 @@ "requireSsoExemption": { "message": "Eigenaren en beheerders van de organisatie zijn vrijgesteld van de handhaving van dit beleid." }, + "limitSendViews": { + "message": "Weergaven limiteren" + }, + "limitSendViewsHint": { + "message": "Niemand kan deze Send weergeven als de limiet is bereikt.", + "description": "Displayed under the limit views field on Send" + }, + "limitSendViewsCount": { + "message": "$ACCESSCOUNT$ weergaven over", + "description": "Displayed under the limit views field on Send", + "placeholders": { + "accessCount": { + "content": "$1", + "example": "2" + } + } + }, + "sendDetails": { + "message": "Send-details", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendTypeTextToShare": { + "message": "Te delen tekst" + }, "sendTypeFile": { "message": "Bestand" }, "sendTypeText": { "message": "Tekst" }, + "sendPasswordDescV3": { + "message": "Voeg een optioneel wachtwoord toe voor ontvangers om toegang te krijgen tot deze Send.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "createSend": { "message": "Nieuwe Send aanmaken", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -5068,19 +5148,15 @@ "message": "Send verwijderen", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, - "deleteSendConfirmation": { - "message": "Weet je zeker dat je deze Send wilt verwijderen?", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "whatTypeOfSend": { - "message": "Wat voor soort Send is dit?", + "deleteSendPermanentConfirmation": { + "message": "Weet je zeker dat je deze Send permanent wil verwijderen?", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "deletionDate": { "message": "Verwijderingsdatum" }, - "deletionDateDesc": { - "message": "Deze Send wordt definitief verwijderd op de aangegeven datum en tijd.", + "deletionDateDescV2": { + "message": "Op deze datum wordt de Send definitief verwijderd.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "expirationDate": { @@ -5093,21 +5169,6 @@ "maxAccessCount": { "message": "Maximum toegangsaantal" }, - "maxAccessCountDesc": { - "message": "Als dit is ingesteld kunnen gebruikers deze Send niet meer benaderen zodra het maximale aantal toegang is bereikt.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "currentAccessCount": { - "message": "Huidige toegangsaantal" - }, - "sendPasswordDesc": { - "message": "Vereis optioneel een wachtwoord voor gebruikers om toegang te krijgen tot deze Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendNotesDesc": { - "message": "Privénotities over deze Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "disabled": { "message": "Uitgeschakeld" }, @@ -5134,13 +5195,6 @@ "removePasswordConfirmation": { "message": "Weet je zeker dat je dit wachtwoord wilt verwijderen?" }, - "hideEmail": { - "message": "Verberg mijn e-mailadres voor ontvangers." - }, - "disableThisSend": { - "message": "Schakel deze Send uit zodat niemand hem kan benaderen.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "allSends": { "message": "Alle Sends" }, @@ -5151,6 +5205,9 @@ "pendingDeletion": { "message": "Wordt verwijderd" }, + "hideTextByDefault": { + "message": "Tekst standaard verbergen" + }, "expired": { "message": "Verlopen" }, @@ -5372,13 +5429,6 @@ "message": "Gebruikers mogen hun e-mailadres niet verbergen voor ontvangers bij het aanmaken of bewerken van een Send.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, - "sendOptionsPolicyInEffect": { - "message": "Het volgende organisatiebeleid is momenteel van toepassing:" - }, - "sendDisableHideEmailInEffect": { - "message": "Gebruikers mogen hun e-mailadres niet verbergen voor ontvangers bij het aanmaken of bewerken van een Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "modifiedPolicyId": { "message": "Bewerkt beleid $ID$.", "placeholders": { @@ -5478,27 +5528,6 @@ "personalOwnershipCheckboxDesc": { "message": "Schakel persoonlijke eigendom uit voor organisatiegebruikers" }, - "textHiddenByDefault": { - "message": "Verberg de tekst standaard bij het gebruiken van de Send", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendNameDesc": { - "message": "Een vriendelijke naam om deze Send te beschrijven.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendTextDesc": { - "message": "De tekst die je wilt versturen." - }, - "sendFileDesc": { - "message": "Het bestand dat je wilt versturen." - }, - "copySendLinkOnSave": { - "message": "Kopieer de link om deze Send te delen bij opslaan naar mijn klembord." - }, - "sendLinkLabel": { - "message": "Send-link", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "send": { "message": "Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -5647,12 +5676,21 @@ "dateParsingError": { "message": "Er is een fout opgetreden bij het opslaan van je verwijder- en vervaldatum." }, + "hideYourEmail": { + "message": "Je e-mailadres voor ontvangers verbergen." + }, "webAuthnFallbackMsg": { "message": "Klik op onderstaande knop om je 2FA te verifiëren." }, "webAuthnAuthenticate": { "message": "Authenticeer WebAuthn" }, + "readSecurityKey": { + "message": "Beveiligingssleutel lezen" + }, + "awaitingSecurityKeyInteraction": { + "message": "Wacht op interactie met beveiligingssleutel..." + }, "webAuthnNotSupported": { "message": "WebAuthn wordt niet ondersteund in deze browser." }, @@ -7199,6 +7237,12 @@ "duoRequiredByOrgForAccount": { "message": "DUO tweestapsaanmelding is vereist voor jouw account." }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Jouw account vereist Duo-tweestapsaanmelding. Volg de onderstaande stappen om het inloggen te voltooien." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Volg de onderstaande stappen om in te loggen." + }, "launchDuo": { "message": "DUO starten" }, @@ -9793,9 +9837,15 @@ "learnMoreAboutApi": { "message": "Lees meer over Bitwarden's API" }, + "fileSend": { + "message": "Bestand verzenden" + }, "fileSends": { "message": "Bestand-Sends" }, + "textSend": { + "message": "Tekst-Sends" + }, "textSends": { "message": "Tekst-Sends" }, @@ -10029,10 +10079,6 @@ "message": "Speciale tekens toevoegen", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "addAttachment": { "message": "Bijlage toevoegen" }, @@ -10432,10 +10478,31 @@ "assignedExceedsAvailable": { "message": "Meer toegewezen dan beschikbare plaatsen." }, + "changeAtRiskPassword": { + "message": "Risicovol wachtwoord wijzigen" + }, "removeUnlockWithPinPolicyTitle": { "message": "Ontgrendelen met PIN verwijderen" }, "removeUnlockWithPinPolicyDesc": { "message": "Leden niet toestaan hun account te ontgrendelen met een pincode." + }, + "limitedEventLogs": { + "message": "$PRODUCT_TYPE$-abonnementen hebben geen toegang tot echte event logs", + "placeholders": { + "product_type": { + "content": "$1", + "example": "Teams" + } + } + }, + "upgradeForFullEvents": { + "message": "Krijg volledige toegang tot event logs van de organisatie door te upgraden naar een Teams- of Enterprise-abonnement." + }, + "upgradeEventLogTitle": { + "message": "Upgrade voor echte event log gegevens" + }, + "upgradeEventLogMessage": { + "message": "Deze events zijn voorbeelden en weerspiegelen geen echte evenementen binnen je Bitwarden-organisatie." } } diff --git a/apps/web/src/locales/nn/messages.json b/apps/web/src/locales/nn/messages.json index c139fc606b8..5f0b86a3192 100644 --- a/apps/web/src/locales/nn/messages.json +++ b/apps/web/src/locales/nn/messages.json @@ -5,6 +5,9 @@ "criticalApplications": { "message": "Critical applications" }, + "noCriticalAppsAtRisk": { + "message": "No critical applications at risk" + }, "accessIntelligence": { "message": "Access Intelligence" }, @@ -198,6 +201,9 @@ "notes": { "message": "Notat" }, + "privateNote": { + "message": "Private note" + }, "note": { "message": "Note" }, @@ -1026,6 +1032,9 @@ "no": { "message": "No" }, + "location": { + "message": "Location" + }, "loginOrCreateNewAccount": { "message": "Log in or create a new account to access your secure vault." }, @@ -1161,13 +1170,22 @@ "logInToBitwarden": { "message": "Log in to Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "Enter the code sent to your email" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Enter the code from your authenticator app" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Press your YubiKey to authenticate" + }, "authenticationTimeout": { "message": "Authentication timeout" }, "authenticationSessionTimedOut": { "message": "The authentication session timed out. Please restart the login process." }, - "verifyIdentity": { + "verifyYourIdentity": { "message": "Verify your Identity" }, "weDontRecognizeThisDevice": { @@ -1443,12 +1461,22 @@ "rememberMe": { "message": "Hugsa meg" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Don't ask again on this device for 30 days" + }, "sendVerificationCodeEmailAgain": { "message": "Send verification code email again" }, "useAnotherTwoStepMethod": { "message": "Bruk ein annan tofaktormetode for pålogging" }, + "selectAnotherMethod": { + "message": "Select another method", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Use your recovery code" + }, "insertYubiKey": { "message": "Insert your YubiKey into your computer's USB port, then touch its button." }, @@ -1467,6 +1495,9 @@ "twoStepOptions": { "message": "Two-step login options" }, + "selectTwoStepLoginMethod": { + "message": "Select two-step login method" + }, "recoveryCodeDesc": { "message": "Lost access to all of your two-step login providers? Use your recovery code to turn off all two-step login providers from your account." }, @@ -1509,6 +1540,9 @@ "webAuthnMigrated": { "message": "(Migrated from FIDO)" }, + "openInNewTab": { + "message": "Open in new tab" + }, "emailTitle": { "message": "Email" }, @@ -2224,6 +2258,9 @@ "revokeAccess": { "message": "Revoke access" }, + "revoke": { + "message": "Revoke" + }, "twoStepLoginProviderEnabled": { "message": "This two-step login provider is active on your account." }, @@ -4081,6 +4118,12 @@ "updateBrowserDesc": { "message": "You are using an unsupported web browser. The web vault may not function properly." }, + "youHaveAPendingLoginRequest": { + "message": "You have a pending login request from another device." + }, + "reviewLoginRequest": { + "message": "Review login request" + }, "freeTrialEndPromptCount": { "message": "Your free trial ends in $COUNT$ days.", "placeholders": { @@ -4758,6 +4801,15 @@ "masterPassPolicyDesc": { "message": "Set requirements for master password strength." }, + "passwordStrengthScore": { + "message": "Password strength score $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "twoStepLoginPolicyTitle": { "message": "Require two-step login" }, @@ -5038,12 +5090,40 @@ "requireSsoExemption": { "message": "Organization owners and admins are exempt from this policy's enforcement." }, + "limitSendViews": { + "message": "Limit views" + }, + "limitSendViewsHint": { + "message": "No one can view this Send after the limit is reached.", + "description": "Displayed under the limit views field on Send" + }, + "limitSendViewsCount": { + "message": "$ACCESSCOUNT$ views left", + "description": "Displayed under the limit views field on Send", + "placeholders": { + "accessCount": { + "content": "$1", + "example": "2" + } + } + }, + "sendDetails": { + "message": "Send details", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendTypeTextToShare": { + "message": "Text to share" + }, "sendTypeFile": { "message": "File" }, "sendTypeText": { "message": "Text" }, + "sendPasswordDescV3": { + "message": "Add an optional password for recipients to access this Send.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "createSend": { "message": "New Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -5068,19 +5148,15 @@ "message": "Delete Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, - "deleteSendConfirmation": { - "message": "Are you sure you want to delete this Send?", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "whatTypeOfSend": { - "message": "What type of Send is this?", + "deleteSendPermanentConfirmation": { + "message": "Are you sure you want to permanently delete this Send?", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "deletionDate": { "message": "Deletion date" }, - "deletionDateDesc": { - "message": "The Send will be permanently deleted on the specified date and time.", + "deletionDateDescV2": { + "message": "The Send will be permanently deleted on this date.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "expirationDate": { @@ -5093,21 +5169,6 @@ "maxAccessCount": { "message": "Maximum access count" }, - "maxAccessCountDesc": { - "message": "If set, users will no longer be able to access this Send once the maximum access count is reached.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "currentAccessCount": { - "message": "Current access count" - }, - "sendPasswordDesc": { - "message": "Optionally require a password for users to access this Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendNotesDesc": { - "message": "Private notes about this Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "disabled": { "message": "Disabled" }, @@ -5134,13 +5195,6 @@ "removePasswordConfirmation": { "message": "Are you sure you want to remove the password?" }, - "hideEmail": { - "message": "Hide my email address from recipients." - }, - "disableThisSend": { - "message": "Deactivate this Send so that no one can access it.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "allSends": { "message": "All Sends" }, @@ -5151,6 +5205,9 @@ "pendingDeletion": { "message": "Pending deletion" }, + "hideTextByDefault": { + "message": "Hide text by default" + }, "expired": { "message": "Expired" }, @@ -5372,13 +5429,6 @@ "message": "Always show member’s email address with recipients when creating or editing a Send.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, - "sendOptionsPolicyInEffect": { - "message": "The following organization policies are currently in effect:" - }, - "sendDisableHideEmailInEffect": { - "message": "Users are not allowed to hide their email address from recipients when creating or editing a Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "modifiedPolicyId": { "message": "Modified policy $ID$.", "placeholders": { @@ -5478,27 +5528,6 @@ "personalOwnershipCheckboxDesc": { "message": "Remove individual ownership for organization users" }, - "textHiddenByDefault": { - "message": "When accessing the Send, hide the text by default", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendNameDesc": { - "message": "A friendly name to describe this Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendTextDesc": { - "message": "The text you want to Send." - }, - "sendFileDesc": { - "message": "The file you want to Send." - }, - "copySendLinkOnSave": { - "message": "Copy the link to share this Send to my clipboard upon save." - }, - "sendLinkLabel": { - "message": "Send link", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "send": { "message": "Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -5647,12 +5676,21 @@ "dateParsingError": { "message": "There was an error saving your deletion and expiration dates." }, + "hideYourEmail": { + "message": "Hide your email address from viewers." + }, "webAuthnFallbackMsg": { "message": "To verify your 2FA please click the button below." }, "webAuthnAuthenticate": { "message": "Authenticate WebAuthn" }, + "readSecurityKey": { + "message": "Read security key" + }, + "awaitingSecurityKeyInteraction": { + "message": "Awaiting security key interaction..." + }, "webAuthnNotSupported": { "message": "WebAuthn is not supported in this browser." }, @@ -7199,6 +7237,12 @@ "duoRequiredByOrgForAccount": { "message": "Duo two-step login is required for your account." }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Duo two-step login is required for your account. Follow the steps below to finish logging in." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Follow the steps below to finish logging in." + }, "launchDuo": { "message": "Launch Duo" }, @@ -9793,9 +9837,15 @@ "learnMoreAboutApi": { "message": "Learn more about Bitwarden's API" }, + "fileSend": { + "message": "File Send" + }, "fileSends": { "message": "File Sends" }, + "textSend": { + "message": "Text Send" + }, "textSends": { "message": "Text Sends" }, @@ -10029,10 +10079,6 @@ "message": "Include special characters", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "addAttachment": { "message": "Add attachment" }, @@ -10432,10 +10478,31 @@ "assignedExceedsAvailable": { "message": "Assigned seats exceed available seats." }, + "changeAtRiskPassword": { + "message": "Change at-risk password" + }, "removeUnlockWithPinPolicyTitle": { "message": "Remove Unlock with PIN" }, "removeUnlockWithPinPolicyDesc": { "message": "Do not allow members to unlock their account with a PIN." + }, + "limitedEventLogs": { + "message": "$PRODUCT_TYPE$ plans do not have access to real event logs", + "placeholders": { + "product_type": { + "content": "$1", + "example": "Teams" + } + } + }, + "upgradeForFullEvents": { + "message": "Get full access to organization event logs by upgrading to a Teams or Enterprise plan." + }, + "upgradeEventLogTitle": { + "message": "Upgrade for real event log data" + }, + "upgradeEventLogMessage": { + "message": "These events are examples only and do not reflect real events within your Bitwarden organization." } } diff --git a/apps/web/src/locales/or/messages.json b/apps/web/src/locales/or/messages.json index 1c4e2e55201..c205ace9ac1 100644 --- a/apps/web/src/locales/or/messages.json +++ b/apps/web/src/locales/or/messages.json @@ -5,6 +5,9 @@ "criticalApplications": { "message": "Critical applications" }, + "noCriticalAppsAtRisk": { + "message": "No critical applications at risk" + }, "accessIntelligence": { "message": "Access Intelligence" }, @@ -198,6 +201,9 @@ "notes": { "message": "Notes" }, + "privateNote": { + "message": "Private note" + }, "note": { "message": "Note" }, @@ -1026,6 +1032,9 @@ "no": { "message": "No" }, + "location": { + "message": "Location" + }, "loginOrCreateNewAccount": { "message": "Log in or create a new account to access your secure vault." }, @@ -1161,13 +1170,22 @@ "logInToBitwarden": { "message": "Log in to Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "Enter the code sent to your email" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Enter the code from your authenticator app" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Press your YubiKey to authenticate" + }, "authenticationTimeout": { "message": "Authentication timeout" }, "authenticationSessionTimedOut": { "message": "The authentication session timed out. Please restart the login process." }, - "verifyIdentity": { + "verifyYourIdentity": { "message": "Verify your Identity" }, "weDontRecognizeThisDevice": { @@ -1443,12 +1461,22 @@ "rememberMe": { "message": "Remember me" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Don't ask again on this device for 30 days" + }, "sendVerificationCodeEmailAgain": { "message": "Send verification code email again" }, "useAnotherTwoStepMethod": { "message": "Use another two-step login method" }, + "selectAnotherMethod": { + "message": "Select another method", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Use your recovery code" + }, "insertYubiKey": { "message": "Insert your YubiKey into your computer's USB port, then touch its button." }, @@ -1467,6 +1495,9 @@ "twoStepOptions": { "message": "Two-step login options" }, + "selectTwoStepLoginMethod": { + "message": "Select two-step login method" + }, "recoveryCodeDesc": { "message": "Lost access to all of your two-step login providers? Use your recovery code to turn off all two-step login providers from your account." }, @@ -1509,6 +1540,9 @@ "webAuthnMigrated": { "message": "(Migrated from FIDO)" }, + "openInNewTab": { + "message": "Open in new tab" + }, "emailTitle": { "message": "Email" }, @@ -2224,6 +2258,9 @@ "revokeAccess": { "message": "Revoke access" }, + "revoke": { + "message": "Revoke" + }, "twoStepLoginProviderEnabled": { "message": "This two-step login provider is active on your account." }, @@ -4081,6 +4118,12 @@ "updateBrowserDesc": { "message": "You are using an unsupported web browser. The web vault may not function properly." }, + "youHaveAPendingLoginRequest": { + "message": "You have a pending login request from another device." + }, + "reviewLoginRequest": { + "message": "Review login request" + }, "freeTrialEndPromptCount": { "message": "Your free trial ends in $COUNT$ days.", "placeholders": { @@ -4758,6 +4801,15 @@ "masterPassPolicyDesc": { "message": "Set requirements for master password strength." }, + "passwordStrengthScore": { + "message": "Password strength score $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "twoStepLoginPolicyTitle": { "message": "Require two-step login" }, @@ -5038,12 +5090,40 @@ "requireSsoExemption": { "message": "Organization owners and admins are exempt from this policy's enforcement." }, + "limitSendViews": { + "message": "Limit views" + }, + "limitSendViewsHint": { + "message": "No one can view this Send after the limit is reached.", + "description": "Displayed under the limit views field on Send" + }, + "limitSendViewsCount": { + "message": "$ACCESSCOUNT$ views left", + "description": "Displayed under the limit views field on Send", + "placeholders": { + "accessCount": { + "content": "$1", + "example": "2" + } + } + }, + "sendDetails": { + "message": "Send details", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendTypeTextToShare": { + "message": "Text to share" + }, "sendTypeFile": { "message": "File" }, "sendTypeText": { "message": "Text" }, + "sendPasswordDescV3": { + "message": "Add an optional password for recipients to access this Send.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "createSend": { "message": "New Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -5068,19 +5148,15 @@ "message": "Delete Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, - "deleteSendConfirmation": { - "message": "Are you sure you want to delete this Send?", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "whatTypeOfSend": { - "message": "What type of Send is this?", + "deleteSendPermanentConfirmation": { + "message": "Are you sure you want to permanently delete this Send?", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "deletionDate": { "message": "Deletion date" }, - "deletionDateDesc": { - "message": "The Send will be permanently deleted on the specified date and time.", + "deletionDateDescV2": { + "message": "The Send will be permanently deleted on this date.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "expirationDate": { @@ -5093,21 +5169,6 @@ "maxAccessCount": { "message": "Maximum access count" }, - "maxAccessCountDesc": { - "message": "If set, users will no longer be able to access this Send once the maximum access count is reached.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "currentAccessCount": { - "message": "Current access count" - }, - "sendPasswordDesc": { - "message": "Optionally require a password for users to access this Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendNotesDesc": { - "message": "Private notes about this Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "disabled": { "message": "Disabled" }, @@ -5134,13 +5195,6 @@ "removePasswordConfirmation": { "message": "Are you sure you want to remove the password?" }, - "hideEmail": { - "message": "Hide my email address from recipients." - }, - "disableThisSend": { - "message": "Deactivate this Send so that no one can access it.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "allSends": { "message": "All Sends" }, @@ -5151,6 +5205,9 @@ "pendingDeletion": { "message": "Pending deletion" }, + "hideTextByDefault": { + "message": "Hide text by default" + }, "expired": { "message": "Expired" }, @@ -5372,13 +5429,6 @@ "message": "Always show member’s email address with recipients when creating or editing a Send.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, - "sendOptionsPolicyInEffect": { - "message": "The following organization policies are currently in effect:" - }, - "sendDisableHideEmailInEffect": { - "message": "Users are not allowed to hide their email address from recipients when creating or editing a Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "modifiedPolicyId": { "message": "Modified policy $ID$.", "placeholders": { @@ -5478,27 +5528,6 @@ "personalOwnershipCheckboxDesc": { "message": "Remove individual ownership for organization users" }, - "textHiddenByDefault": { - "message": "When accessing the Send, hide the text by default", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendNameDesc": { - "message": "A friendly name to describe this Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendTextDesc": { - "message": "The text you want to Send." - }, - "sendFileDesc": { - "message": "The file you want to Send." - }, - "copySendLinkOnSave": { - "message": "Copy the link to share this Send to my clipboard upon save." - }, - "sendLinkLabel": { - "message": "Send link", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "send": { "message": "Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -5647,12 +5676,21 @@ "dateParsingError": { "message": "There was an error saving your deletion and expiration dates." }, + "hideYourEmail": { + "message": "Hide your email address from viewers." + }, "webAuthnFallbackMsg": { "message": "To verify your 2FA please click the button below." }, "webAuthnAuthenticate": { "message": "Authenticate WebAuthn" }, + "readSecurityKey": { + "message": "Read security key" + }, + "awaitingSecurityKeyInteraction": { + "message": "Awaiting security key interaction..." + }, "webAuthnNotSupported": { "message": "WebAuthn is not supported in this browser." }, @@ -7199,6 +7237,12 @@ "duoRequiredByOrgForAccount": { "message": "Duo two-step login is required for your account." }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Duo two-step login is required for your account. Follow the steps below to finish logging in." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Follow the steps below to finish logging in." + }, "launchDuo": { "message": "Launch Duo" }, @@ -9793,9 +9837,15 @@ "learnMoreAboutApi": { "message": "Learn more about Bitwarden's API" }, + "fileSend": { + "message": "File Send" + }, "fileSends": { "message": "File Sends" }, + "textSend": { + "message": "Text Send" + }, "textSends": { "message": "Text Sends" }, @@ -10029,10 +10079,6 @@ "message": "Include special characters", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "addAttachment": { "message": "Add attachment" }, @@ -10432,10 +10478,31 @@ "assignedExceedsAvailable": { "message": "Assigned seats exceed available seats." }, + "changeAtRiskPassword": { + "message": "Change at-risk password" + }, "removeUnlockWithPinPolicyTitle": { "message": "Remove Unlock with PIN" }, "removeUnlockWithPinPolicyDesc": { "message": "Do not allow members to unlock their account with a PIN." + }, + "limitedEventLogs": { + "message": "$PRODUCT_TYPE$ plans do not have access to real event logs", + "placeholders": { + "product_type": { + "content": "$1", + "example": "Teams" + } + } + }, + "upgradeForFullEvents": { + "message": "Get full access to organization event logs by upgrading to a Teams or Enterprise plan." + }, + "upgradeEventLogTitle": { + "message": "Upgrade for real event log data" + }, + "upgradeEventLogMessage": { + "message": "These events are examples only and do not reflect real events within your Bitwarden organization." } } diff --git a/apps/web/src/locales/pl/messages.json b/apps/web/src/locales/pl/messages.json index eb372bb81cf..73802dc8531 100644 --- a/apps/web/src/locales/pl/messages.json +++ b/apps/web/src/locales/pl/messages.json @@ -5,6 +5,9 @@ "criticalApplications": { "message": "Krytyczne aplikacje" }, + "noCriticalAppsAtRisk": { + "message": "Brak zagrożonych aplikacji krytycznych" + }, "accessIntelligence": { "message": "Dostęp do informacji" }, @@ -198,6 +201,9 @@ "notes": { "message": "Notatki" }, + "privateNote": { + "message": "Prywatna notatka" + }, "note": { "message": "Notatka" }, @@ -1026,6 +1032,9 @@ "no": { "message": "Nie" }, + "location": { + "message": "Lokalizacja" + }, "loginOrCreateNewAccount": { "message": "Zaloguj się lub utwórz nowe konto, aby uzyskać dostęp do Twojego bezpiecznego sejfu." }, @@ -1161,14 +1170,23 @@ "logInToBitwarden": { "message": "Zaloguj do Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "Wpisz kod wysłany na Twój adres e-mail" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Wpisz kod z aplikacji uwierzytelniającej" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Naciśnij YubiKey aby uwierzytelnić" + }, "authenticationTimeout": { "message": "Limit czasu uwierzytelniania" }, "authenticationSessionTimedOut": { "message": "Upłynął limit czasu uwierzytelniania. Uruchom ponownie proces logowania." }, - "verifyIdentity": { - "message": "Zweryfikuj swoją tożsamość" + "verifyYourIdentity": { + "message": "Potwierdź swoją tożsamość" }, "weDontRecognizeThisDevice": { "message": "Nie rozpoznajemy tego urządzenia. Wpisz kod wysłany na Twój e-mail, aby zweryfikować tożsamość." @@ -1443,12 +1461,22 @@ "rememberMe": { "message": "Zapamiętaj mnie" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Nie pytaj ponownie na tym urządzeniu przez 30 dni" + }, "sendVerificationCodeEmailAgain": { "message": "Wyślij ponownie wiadomość z kodem weryfikacyjnym" }, "useAnotherTwoStepMethod": { "message": "Użyj innej metody logowania dwustopniowego" }, + "selectAnotherMethod": { + "message": "Wybierz inną metodę", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Użyj kodu odzyskiwania" + }, "insertYubiKey": { "message": "Włóż klucz YubiKey do portu USB komputera, a następnie dotknij jego przycisku." }, @@ -1467,6 +1495,9 @@ "twoStepOptions": { "message": "Opcje logowania dwustopniowego" }, + "selectTwoStepLoginMethod": { + "message": "Wybierz metodę logowania dwustopniowego" + }, "recoveryCodeDesc": { "message": "Utraciłeś dostęp do wszystkich swoich mechanizmów dwustopniowego logowania? Użyj kodów odzyskiwania, aby wyłączyć dwustopniowe logowanie na Twoim koncie." }, @@ -1509,6 +1540,9 @@ "webAuthnMigrated": { "message": "(przeniesiony z FIDO)" }, + "openInNewTab": { + "message": "Otwórz w nowej karcie" + }, "emailTitle": { "message": "Adres e-mail" }, @@ -2224,6 +2258,9 @@ "revokeAccess": { "message": "Unieważnij dostęp" }, + "revoke": { + "message": "Unieważnij" + }, "twoStepLoginProviderEnabled": { "message": "Ten dostawca logowania dwustopniowego jest już włączony na koncie." }, @@ -4081,6 +4118,12 @@ "updateBrowserDesc": { "message": "Używasz nieobsługiwanej przeglądarki. Sejf internetowy może działać niewłaściwie." }, + "youHaveAPendingLoginRequest": { + "message": "Masz oczekujące żądanie logowania z innego urządzenia." + }, + "reviewLoginRequest": { + "message": "Przejrzyj żądanie logowania" + }, "freeTrialEndPromptCount": { "message": "Twój okres próbny kończy się za $COUNT$ dni.", "placeholders": { @@ -4758,6 +4801,15 @@ "masterPassPolicyDesc": { "message": "Ustaw minimalne wymagania dla hasła głównego." }, + "passwordStrengthScore": { + "message": "Siła hasła: $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "twoStepLoginPolicyTitle": { "message": "Wymagaj logowania dwustopniowego" }, @@ -5038,12 +5090,40 @@ "requireSsoExemption": { "message": "Właściciele i administratorzy organizacji są zwolnieni z przestrzegania wymagań zasad." }, + "limitSendViews": { + "message": "Limit wyświetleń" + }, + "limitSendViewsHint": { + "message": "Nikt nie może wyświetlić Wysyłki po przekroczeniu limitu.", + "description": "Displayed under the limit views field on Send" + }, + "limitSendViewsCount": { + "message": "Pozostało wyświetleń: $ACCESSCOUNT$", + "description": "Displayed under the limit views field on Send", + "placeholders": { + "accessCount": { + "content": "$1", + "example": "2" + } + } + }, + "sendDetails": { + "message": "Szczegóły Wysyłki", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendTypeTextToShare": { + "message": "Tekst do udostępnienia" + }, "sendTypeFile": { "message": "Plik" }, "sendTypeText": { "message": "Tekst" }, + "sendPasswordDescV3": { + "message": "Zabezpiecz tę Wysyłkę hasłem, które będzie wymagane, aby uzyskać do niej dostęp.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "createSend": { "message": "Nowa wysyłka", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -5068,19 +5148,15 @@ "message": "Usuń wysyłkę", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, - "deleteSendConfirmation": { - "message": "Czy na pewno chcesz usunąć tę wysyłkę?", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "whatTypeOfSend": { - "message": "Jakiego typu jest to wysyłka?", + "deleteSendPermanentConfirmation": { + "message": "Czy na pewno chcesz trwale usunąć tę Wysyłkę?", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "deletionDate": { "message": "Data usunięcia" }, - "deletionDateDesc": { - "message": "Wysyłka zostanie trwale usunięta w określonym czasie.", + "deletionDateDescV2": { + "message": "Wysyłka zostanie trwale usunięte w tej dacie.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "expirationDate": { @@ -5093,21 +5169,6 @@ "maxAccessCount": { "message": "Maksymalna liczba dostępów" }, - "maxAccessCountDesc": { - "message": "Jeśli funkcja jest włączona, po osiągnięciu maksymalnej liczby dostępów, użytkownicy nie będą mieli dostępu do tej wysyłki.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "currentAccessCount": { - "message": "Obecna liczba dostępów" - }, - "sendPasswordDesc": { - "message": "Opcjonalne hasło dla użytkownika, aby uzyskać dostęp do wysyłki.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendNotesDesc": { - "message": "Prywatne notatki o tej wysyłce.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "disabled": { "message": "Wyłączone" }, @@ -5134,13 +5195,6 @@ "removePasswordConfirmation": { "message": "Czy na pewno chcesz usunąć hasło?" }, - "hideEmail": { - "message": "Ukryj mój adres e-mail przed odbiorcami." - }, - "disableThisSend": { - "message": "Wyłącz wysyłkę, aby nikt nie miał do niej dostępu.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "allSends": { "message": "Wszystkie wysyłki" }, @@ -5151,6 +5205,9 @@ "pendingDeletion": { "message": "Oczekiwanie na usunięcie" }, + "hideTextByDefault": { + "message": "Domyślnie ukryj tekst" + }, "expired": { "message": "Wygasła" }, @@ -5372,13 +5429,6 @@ "message": "Nie zezwalaj użytkownikom na ukrywanie ich adresów e-mail przed odbiorcami, podczas tworzenia lub edytowania wysyłek.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, - "sendOptionsPolicyInEffect": { - "message": "Obecnie obowiązujące zasady organizacji:" - }, - "sendDisableHideEmailInEffect": { - "message": "Użytkownicy nie mogą ukrywać swoich adresów e-mail przed odbiorcami, podczas tworzenia lub edytowania wysyłek.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "modifiedPolicyId": { "message": "Zasada $ID$ została zaktualizowana.", "placeholders": { @@ -5478,27 +5528,6 @@ "personalOwnershipCheckboxDesc": { "message": "Wyłącz opcję własności osobistej dla użytkowników organizacji" }, - "textHiddenByDefault": { - "message": "Ukryj domyślnie tekst wysyłki", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendNameDesc": { - "message": "Nazwa wysyłki.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendTextDesc": { - "message": "Tekst, który chcesz wysłać." - }, - "sendFileDesc": { - "message": "Plik, który chcesz wysłać." - }, - "copySendLinkOnSave": { - "message": "Po zapisaniu wysyłki, skopiuj link do schowka." - }, - "sendLinkLabel": { - "message": "Link wysyłki", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "send": { "message": "Wyślij", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -5647,12 +5676,21 @@ "dateParsingError": { "message": "Wystąpił błąd podczas zapisywania dat usunięcia i wygaśnięcia." }, + "hideYourEmail": { + "message": "Ukryj mój adres e-mail przed oglądającymi." + }, "webAuthnFallbackMsg": { "message": "Aby zweryfikować logowanie dwustopniowe, kliknij przycisk poniżej." }, "webAuthnAuthenticate": { "message": "Uwierzytelnianie WebAuthn" }, + "readSecurityKey": { + "message": "Odczytaj klucz bezpieczeństwa" + }, + "awaitingSecurityKeyInteraction": { + "message": "Oczekiwanie na interakcję z kluczem bezpieczeństwa..." + }, "webAuthnNotSupported": { "message": "Ta przeglądarka nie obsługuje uwierzytelniania WebAuthn." }, @@ -7199,6 +7237,12 @@ "duoRequiredByOrgForAccount": { "message": "Dwustopniowe logowanie DUO jest wymagane dla Twojego konta." }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Logowanie dwustopniowe Duo jest wymagane dla twojego konta. Wykonaj poniższe kroki, by dokończyć logowanie" + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Wykonaj poniższe kroki, by dokończyć logowanie" + }, "launchDuo": { "message": "Uruchom DUO" }, @@ -9793,9 +9837,15 @@ "learnMoreAboutApi": { "message": "Dowiedz się więcej o API Bitwarden" }, + "fileSend": { + "message": "Wysyłka pliku" + }, "fileSends": { "message": "Wysyłki plików" }, + "textSend": { + "message": "Wysyłka tekstu" + }, "textSends": { "message": "Wysyłki tekstów" }, @@ -10029,10 +10079,6 @@ "message": "Dołącz znaki specjalne", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "addAttachment": { "message": "Dodaj załącznik" }, @@ -10432,10 +10478,31 @@ "assignedExceedsAvailable": { "message": "Przydzielone miejsca przekraczają dostępne miejsca." }, + "changeAtRiskPassword": { + "message": "Zmień hasło zagrożone" + }, "removeUnlockWithPinPolicyTitle": { "message": "Usuń odblokowanie kodem PIN" }, "removeUnlockWithPinPolicyDesc": { "message": "Nie zezwalaj członkom na odblokowanie ich konta za pomocą kodu PIN." + }, + "limitedEventLogs": { + "message": "Plany $PRODUCT_TYPE$ nie mają dostępu do dzienników rzeczywistych wydarzeń", + "placeholders": { + "product_type": { + "content": "$1", + "example": "Teams" + } + } + }, + "upgradeForFullEvents": { + "message": "Uzyskaj pełny dostęp do dzienników zdarzeń organizacji poprzez uaktualnienie do planu Teams lub Enterprise." + }, + "upgradeEventLogTitle": { + "message": "Uaktualnij dla rzeczywistych danych dziennika zdarzeń" + }, + "upgradeEventLogMessage": { + "message": "Te wydarzenia są tylko przykładami i nie odzwierciedlają rzeczywistych wydarzeń w Twojej organizacji Bitwarden." } } diff --git a/apps/web/src/locales/pt_BR/messages.json b/apps/web/src/locales/pt_BR/messages.json index d360195f3fd..037a17c05ca 100644 --- a/apps/web/src/locales/pt_BR/messages.json +++ b/apps/web/src/locales/pt_BR/messages.json @@ -5,6 +5,9 @@ "criticalApplications": { "message": "Aplicações críticas" }, + "noCriticalAppsAtRisk": { + "message": "No critical applications at risk" + }, "accessIntelligence": { "message": "Acessar a Inteligência" }, @@ -198,6 +201,9 @@ "notes": { "message": "Notas" }, + "privateNote": { + "message": "Private note" + }, "note": { "message": "Nota" }, @@ -1026,6 +1032,9 @@ "no": { "message": "Não" }, + "location": { + "message": "Location" + }, "loginOrCreateNewAccount": { "message": "Inicie a sessão ou crie uma nova conta para acessar seu cofre seguro." }, @@ -1161,14 +1170,23 @@ "logInToBitwarden": { "message": "Inicie a sessão no Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "Enter the code sent to your email" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Enter the code from your authenticator app" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Press your YubiKey to authenticate" + }, "authenticationTimeout": { "message": "Tempo de autenticação esgotado" }, "authenticationSessionTimedOut": { "message": "A sessão de autenticação expirou. Por favor, reinicie o processo de “login”." }, - "verifyIdentity": { - "message": "Verifique sua identidade" + "verifyYourIdentity": { + "message": "Verify your Identity" }, "weDontRecognizeThisDevice": { "message": "We don't recognize this device. Enter the code sent to your email to verify your identity." @@ -1443,12 +1461,22 @@ "rememberMe": { "message": "Lembrar de mim" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Don't ask again on this device for 30 days" + }, "sendVerificationCodeEmailAgain": { "message": "Enviar código de verificação para o e-mail novamente" }, "useAnotherTwoStepMethod": { "message": "Utilizar outro método de verificação em duas etapas" }, + "selectAnotherMethod": { + "message": "Select another method", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Use your recovery code" + }, "insertYubiKey": { "message": "Insira a sua YubiKey na porta USB do seu computador, e depois toque no botão da mesma." }, @@ -1467,6 +1495,9 @@ "twoStepOptions": { "message": "Opções de login em duas etapas" }, + "selectTwoStepLoginMethod": { + "message": "Select two-step login method" + }, "recoveryCodeDesc": { "message": "Perdeu o acesso a todos os seus provedores de duas etapas? Utilize o seu código de recuperação para desativar todos os provedores de duas etapas da sua conta." }, @@ -1509,6 +1540,9 @@ "webAuthnMigrated": { "message": "(Migrado de FIDO)" }, + "openInNewTab": { + "message": "Open in new tab" + }, "emailTitle": { "message": "E-mail" }, @@ -2224,6 +2258,9 @@ "revokeAccess": { "message": "Revogar acesso" }, + "revoke": { + "message": "Revoke" + }, "twoStepLoginProviderEnabled": { "message": "Este provedor de login em duas etapas está ativado em sua conta." }, @@ -4081,6 +4118,12 @@ "updateBrowserDesc": { "message": "Você está usando um navegador da Web não suportado. O cofre web pode não funcionar corretamente." }, + "youHaveAPendingLoginRequest": { + "message": "You have a pending login request from another device." + }, + "reviewLoginRequest": { + "message": "Review login request" + }, "freeTrialEndPromptCount": { "message": "Your free trial ends in $COUNT$ days.", "placeholders": { @@ -4758,6 +4801,15 @@ "masterPassPolicyDesc": { "message": "Defina os requisitos mínimos para a força da senha mestra." }, + "passwordStrengthScore": { + "message": "Password strength score $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "twoStepLoginPolicyTitle": { "message": "Exigir login em duas etapas" }, @@ -5038,12 +5090,40 @@ "requireSsoExemption": { "message": "Os Proprietários e Administradores da Organização estão isentos da aplicação desta política." }, + "limitSendViews": { + "message": "Limit views" + }, + "limitSendViewsHint": { + "message": "No one can view this Send after the limit is reached.", + "description": "Displayed under the limit views field on Send" + }, + "limitSendViewsCount": { + "message": "$ACCESSCOUNT$ views left", + "description": "Displayed under the limit views field on Send", + "placeholders": { + "accessCount": { + "content": "$1", + "example": "2" + } + } + }, + "sendDetails": { + "message": "Send details", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendTypeTextToShare": { + "message": "Text to share" + }, "sendTypeFile": { "message": "Arquivo" }, "sendTypeText": { "message": "Texto" }, + "sendPasswordDescV3": { + "message": "Add an optional password for recipients to access this Send.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "createSend": { "message": "Criar Novo Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -5068,19 +5148,15 @@ "message": "Excluir Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, - "deleteSendConfirmation": { - "message": "Você tem certeza que deseja excluir este Send?", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "whatTypeOfSend": { - "message": "Que tipo de Send é este?", + "deleteSendPermanentConfirmation": { + "message": "Are you sure you want to permanently delete this Send?", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "deletionDate": { "message": "Data de Exclusão" }, - "deletionDateDesc": { - "message": "O Send será eliminado permanentemente na data e hora especificadas.", + "deletionDateDescV2": { + "message": "The Send will be permanently deleted on this date.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "expirationDate": { @@ -5093,21 +5169,6 @@ "maxAccessCount": { "message": "Contagem Máxima de Acessos" }, - "maxAccessCountDesc": { - "message": "Se atribuído, usuários não poderão mais acessar este Send assim que o número máximo de acessos for atingido.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "currentAccessCount": { - "message": "Contagem Atual de Acessos" - }, - "sendPasswordDesc": { - "message": "Opcionalmente exigir uma senha para os usuários acessarem este Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendNotesDesc": { - "message": "Notas privadas sobre esse Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "disabled": { "message": "Desativado" }, @@ -5134,13 +5195,6 @@ "removePasswordConfirmation": { "message": "Você tem certeza que deseja remover a senha?" }, - "hideEmail": { - "message": "Ocultar meu endereço de e-mail dos destinatários." - }, - "disableThisSend": { - "message": "Desabilite este Send para que ninguém possa acessá-lo.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "allSends": { "message": "Todos os Sends" }, @@ -5151,6 +5205,9 @@ "pendingDeletion": { "message": "Exclusão pendente" }, + "hideTextByDefault": { + "message": "Hide text by default" + }, "expired": { "message": "Expirado" }, @@ -5372,13 +5429,6 @@ "message": "Não permitir que os usuários ocultem seus endereços de e-mail dos destinatários ao criar ou editar um Send.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, - "sendOptionsPolicyInEffect": { - "message": "As seguintes políticas da organização estão em vigor atualmente:" - }, - "sendDisableHideEmailInEffect": { - "message": "Os usuários não têm permissão para ocultar seus endereços de e-mail dos destinatários ao criar ou editar um Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "modifiedPolicyId": { "message": "Política modificada $ID$.", "placeholders": { @@ -5478,27 +5528,6 @@ "personalOwnershipCheckboxDesc": { "message": "Desativar propriedade pessoal para usuários da organização" }, - "textHiddenByDefault": { - "message": "Ao acessar o Send, ocultar o texto por padrão", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendNameDesc": { - "message": "Um nome amigável para descrever este Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendTextDesc": { - "message": "O texto que você deseja enviar." - }, - "sendFileDesc": { - "message": "O arquivo que você deseja enviar." - }, - "copySendLinkOnSave": { - "message": "Copie o link para compartilhar este Send para minha área de transferência depois de salvar." - }, - "sendLinkLabel": { - "message": "Link do Send", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "send": { "message": "Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -5647,12 +5676,21 @@ "dateParsingError": { "message": "Ocorreu um erro ao salvar as suas datas de exclusão e validade." }, + "hideYourEmail": { + "message": "Hide your email address from viewers." + }, "webAuthnFallbackMsg": { "message": "Para verificar seu 2FA, por favor, clique no botão abaixo." }, "webAuthnAuthenticate": { "message": "Autenticar WebAuthn" }, + "readSecurityKey": { + "message": "Read security key" + }, + "awaitingSecurityKeyInteraction": { + "message": "Awaiting security key interaction..." + }, "webAuthnNotSupported": { "message": "O WebAuthn não é suportado neste navegador." }, @@ -7199,6 +7237,12 @@ "duoRequiredByOrgForAccount": { "message": "A autenticação em duas etapas do Duo é necessária para sua conta." }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Duo two-step login is required for your account. Follow the steps below to finish logging in." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Follow the steps below to finish logging in." + }, "launchDuo": { "message": "Abrir o Duo" }, @@ -9793,9 +9837,15 @@ "learnMoreAboutApi": { "message": "Saiba mais sobre a API do Bitwarden" }, + "fileSend": { + "message": "File Send" + }, "fileSends": { "message": "Arquivos enviados" }, + "textSend": { + "message": "Text Send" + }, "textSends": { "message": "Texto enviado" }, @@ -10029,10 +10079,6 @@ "message": "Incluir caracteres especiais", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "addAttachment": { "message": "Adicionar anexo" }, @@ -10432,10 +10478,31 @@ "assignedExceedsAvailable": { "message": "Assigned seats exceed available seats." }, + "changeAtRiskPassword": { + "message": "Change at-risk password" + }, "removeUnlockWithPinPolicyTitle": { "message": "Remove Unlock with PIN" }, "removeUnlockWithPinPolicyDesc": { "message": "Do not allow members to unlock their account with a PIN." + }, + "limitedEventLogs": { + "message": "$PRODUCT_TYPE$ plans do not have access to real event logs", + "placeholders": { + "product_type": { + "content": "$1", + "example": "Teams" + } + } + }, + "upgradeForFullEvents": { + "message": "Get full access to organization event logs by upgrading to a Teams or Enterprise plan." + }, + "upgradeEventLogTitle": { + "message": "Upgrade for real event log data" + }, + "upgradeEventLogMessage": { + "message": "These events are examples only and do not reflect real events within your Bitwarden organization." } } diff --git a/apps/web/src/locales/pt_PT/messages.json b/apps/web/src/locales/pt_PT/messages.json index 69606c58924..3dbabdd4e10 100644 --- a/apps/web/src/locales/pt_PT/messages.json +++ b/apps/web/src/locales/pt_PT/messages.json @@ -5,6 +5,9 @@ "criticalApplications": { "message": "Aplicações críticas" }, + "noCriticalAppsAtRisk": { + "message": "Não há aplicações críticas em risco" + }, "accessIntelligence": { "message": "Aceder à informação" }, @@ -198,6 +201,9 @@ "notes": { "message": "Notas" }, + "privateNote": { + "message": "Nota privada" + }, "note": { "message": "Nota" }, @@ -1026,6 +1032,9 @@ "no": { "message": "Não" }, + "location": { + "message": "Localização" + }, "loginOrCreateNewAccount": { "message": "Inicie sessão ou crie uma nova conta para aceder ao seu cofre seguro." }, @@ -1161,13 +1170,22 @@ "logInToBitwarden": { "message": "Iniciar sessão no Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "Introduza o código enviado para o seu e-mail" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Introduza o código da sua app de autenticação" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Prima a sua YubiKey para se autenticar" + }, "authenticationTimeout": { "message": "Tempo limite de autenticação" }, "authenticationSessionTimedOut": { "message": "A sessão de autenticação expirou. Por favor, reinicie o processo de início de sessão." }, - "verifyIdentity": { + "verifyYourIdentity": { "message": "Verifique a sua identidade" }, "weDontRecognizeThisDevice": { @@ -1443,12 +1461,22 @@ "rememberMe": { "message": "Memorizar" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Não voltar a perguntar neste dispositivo durante 30 dias" + }, "sendVerificationCodeEmailAgain": { "message": "Enviar e-mail com o código de verificação novamente" }, "useAnotherTwoStepMethod": { "message": "Utilizar outro método de verificação de dois passos" }, + "selectAnotherMethod": { + "message": "Selecionar outro método", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Utilize o seu código de recuperação" + }, "insertYubiKey": { "message": "Introduza a sua YubiKey na porta USB do seu computador, depois toque no botão da mesma." }, @@ -1467,6 +1495,9 @@ "twoStepOptions": { "message": "Opções de verificação de dois passos" }, + "selectTwoStepLoginMethod": { + "message": "Selecionar método de verificação de dois passos" + }, "recoveryCodeDesc": { "message": "Perdeu o acesso a todos os seus fornecedores de verificação de dois passos? Utilize o seu código de recuperação para desativar todos os fornecedores de verificação de dois passos da sua conta." }, @@ -1509,6 +1540,9 @@ "webAuthnMigrated": { "message": "(Migrado do FIDO)" }, + "openInNewTab": { + "message": "Abrir num novo separador" + }, "emailTitle": { "message": "E-mail" }, @@ -2224,6 +2258,9 @@ "revokeAccess": { "message": "Revogar o acesso" }, + "revoke": { + "message": "Revogar" + }, "twoStepLoginProviderEnabled": { "message": "Este fornecedor de verificação de dois passos está ativado na sua conta." }, @@ -4081,6 +4118,12 @@ "updateBrowserDesc": { "message": "Está a utilizar um navegador web não suportado. O cofre web pode não funcionar corretamente." }, + "youHaveAPendingLoginRequest": { + "message": "Tem um pedido de início de sessão pendente doutro dispositivo." + }, + "reviewLoginRequest": { + "message": "Rever pedido de início de sessão" + }, "freeTrialEndPromptCount": { "message": "O seu período experimental gratuito termina dentro de $COUNT$ dias.", "placeholders": { @@ -4758,6 +4801,15 @@ "masterPassPolicyDesc": { "message": "Definir requisitos para a força da palavra-passe mestra." }, + "passwordStrengthScore": { + "message": "Pontuação da força da palavra-passe: $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "twoStepLoginPolicyTitle": { "message": "Exigir verificação de dois passos" }, @@ -5038,12 +5090,40 @@ "requireSsoExemption": { "message": "Os proprietários e administradores da organização estão isentos da aplicação desta política." }, + "limitSendViews": { + "message": "Limitar visualizações" + }, + "limitSendViewsHint": { + "message": "Ninguém poderá ver este Send depois de o limite ser atingido.", + "description": "Displayed under the limit views field on Send" + }, + "limitSendViewsCount": { + "message": "$ACCESSCOUNT$ visualizações restantes", + "description": "Displayed under the limit views field on Send", + "placeholders": { + "accessCount": { + "content": "$1", + "example": "2" + } + } + }, + "sendDetails": { + "message": "Detalhes do Send", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendTypeTextToShare": { + "message": "Texto a partilhar" + }, "sendTypeFile": { "message": "Ficheiro" }, "sendTypeText": { "message": "Texto" }, + "sendPasswordDescV3": { + "message": "Adicione uma palavra-passe opcional para os destinatários acederem a este Send.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "createSend": { "message": "Novo Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -5068,19 +5148,15 @@ "message": "Eliminar Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, - "deleteSendConfirmation": { - "message": "Tem a certeza de que pretende eliminar este Send?", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "whatTypeOfSend": { - "message": "Que tipo de Send é este?", + "deleteSendPermanentConfirmation": { + "message": "Tem a certeza de que pretende eliminar permanentemente este Send?", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "deletionDate": { "message": "Data de eliminação" }, - "deletionDateDesc": { - "message": "O Send será permanentemente eliminado na data e hora especificadas.", + "deletionDateDescV2": { + "message": "O Send será permanentemente eliminado nesta data.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "expirationDate": { @@ -5093,21 +5169,6 @@ "maxAccessCount": { "message": "Número máximo de acessos" }, - "maxAccessCountDesc": { - "message": "Se definido, os utilizadores deixarão de poder aceder a este Send quando a contagem máxima de acessos for atingida.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "currentAccessCount": { - "message": "Número de acessos atual" - }, - "sendPasswordDesc": { - "message": "Opcionalmente, exigir uma palavra-passe para os utilizadores acederem a este Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendNotesDesc": { - "message": "Notas privadas sobre este Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "disabled": { "message": "Desativado" }, @@ -5134,13 +5195,6 @@ "removePasswordConfirmation": { "message": "Tem a certeza de que pretende remover a palavra-passe?" }, - "hideEmail": { - "message": "Ocultar o meu endereço de e-mail dos destinatários." - }, - "disableThisSend": { - "message": "Desative este Send para que ninguém possa aceder ao mesmo.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "allSends": { "message": "Todos os Sends" }, @@ -5151,6 +5205,9 @@ "pendingDeletion": { "message": "Eliminação pendente" }, + "hideTextByDefault": { + "message": "Ocultar texto por predefinição" + }, "expired": { "message": "Expirado" }, @@ -5372,13 +5429,6 @@ "message": "Mostrar sempre o endereço de e-mail do membro com os destinatários ao criar ou editar um Send.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, - "sendOptionsPolicyInEffect": { - "message": "As seguintes políticas da organização estão atualmente em vigor:" - }, - "sendDisableHideEmailInEffect": { - "message": "Os utilizadores não estão autorizados a ocultar o seu endereço de e-mail dos destinatários quando criam ou editam um Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "modifiedPolicyId": { "message": "Política $ID$ modificada.", "placeholders": { @@ -5478,27 +5528,6 @@ "personalOwnershipCheckboxDesc": { "message": "Remover a propriedade individual dos utilizadores da organização" }, - "textHiddenByDefault": { - "message": "Ao aceder ao Send, ocultar o texto por defeito", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendNameDesc": { - "message": "Um nome simpático para descrever este Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendTextDesc": { - "message": "O texto que deseja enviar." - }, - "sendFileDesc": { - "message": "O ficheiro que deseja enviar." - }, - "copySendLinkOnSave": { - "message": "Copiar o link para partilhar este Send para a minha área de transferência ao guardar." - }, - "sendLinkLabel": { - "message": "Link do Send", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "send": { "message": "Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -5647,12 +5676,21 @@ "dateParsingError": { "message": "Ocorreu um erro ao guardar as suas datas de eliminação e validade." }, + "hideYourEmail": { + "message": "Oculte o seu endereço de e-mail dos visualizadores." + }, "webAuthnFallbackMsg": { "message": "Para verificar a sua 2FA, por favor, clique no botão abaixo." }, "webAuthnAuthenticate": { "message": "Autenticar o WebAuthn" }, + "readSecurityKey": { + "message": "Ler chave de segurança" + }, + "awaitingSecurityKeyInteraction": { + "message": "A aguardar interação da chave de segurança..." + }, "webAuthnNotSupported": { "message": "O WebAuthn não é suportado por este navegador." }, @@ -7199,6 +7237,12 @@ "duoRequiredByOrgForAccount": { "message": "A verificação de dois passos Duo é necessária para a sua conta." }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "A verificação de dois passos do Duo é necessária para a sua conta. Siga os passos abaixo para concluir o início de sessão." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Siga os passos abaixo para concluir o início de sessão." + }, "launchDuo": { "message": "Iniciar o DUO" }, @@ -9793,9 +9837,15 @@ "learnMoreAboutApi": { "message": "Saiba mais sobre a API do Bitwarden" }, + "fileSend": { + "message": "Send de ficheiro" + }, "fileSends": { "message": "Sends de ficheiros" }, + "textSend": { + "message": "Send de texto" + }, "textSends": { "message": "Sends de texto" }, @@ -10029,10 +10079,6 @@ "message": "Incluir carateres especiais", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "addAttachment": { "message": "Adicionar anexo" }, @@ -10432,10 +10478,31 @@ "assignedExceedsAvailable": { "message": "Os lugares atribuídos excedem os lugares disponíveis." }, + "changeAtRiskPassword": { + "message": "Alterar palavra-passe em risco" + }, "removeUnlockWithPinPolicyTitle": { - "message": "Remove Unlock with PIN" + "message": "Remover o desbloqueio com PIN" }, "removeUnlockWithPinPolicyDesc": { - "message": "Do not allow members to unlock their account with a PIN." + "message": "Não permitir que os membros desbloqueiem a sua conta com um PIN." + }, + "limitedEventLogs": { + "message": "Os planos $PRODUCT_TYPE$ não têm acesso a registos de eventos reais", + "placeholders": { + "product_type": { + "content": "$1", + "example": "Teams" + } + } + }, + "upgradeForFullEvents": { + "message": "Obtenha acesso total aos registos de eventos da organização ao atualizar para um plano Equipas ou Empresarial." + }, + "upgradeEventLogTitle": { + "message": "Atualizar para dados de registo de eventos reais" + }, + "upgradeEventLogMessage": { + "message": "Estes eventos são apenas exemplos e não refletem eventos reais na sua organização Bitwarden." } } diff --git a/apps/web/src/locales/ro/messages.json b/apps/web/src/locales/ro/messages.json index 0b4572578e4..670dbf0b8db 100644 --- a/apps/web/src/locales/ro/messages.json +++ b/apps/web/src/locales/ro/messages.json @@ -5,6 +5,9 @@ "criticalApplications": { "message": "Aplicațiile critice" }, + "noCriticalAppsAtRisk": { + "message": "No critical applications at risk" + }, "accessIntelligence": { "message": "Access Intelligence" }, @@ -198,6 +201,9 @@ "notes": { "message": "Note" }, + "privateNote": { + "message": "Private note" + }, "note": { "message": "Note" }, @@ -1026,6 +1032,9 @@ "no": { "message": "Nu" }, + "location": { + "message": "Location" + }, "loginOrCreateNewAccount": { "message": "Autentificați-vă sau creați un cont nou pentru a accesa seiful dvs. securizat." }, @@ -1161,13 +1170,22 @@ "logInToBitwarden": { "message": "Log in to Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "Enter the code sent to your email" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Enter the code from your authenticator app" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Press your YubiKey to authenticate" + }, "authenticationTimeout": { "message": "Authentication timeout" }, "authenticationSessionTimedOut": { "message": "The authentication session timed out. Please restart the login process." }, - "verifyIdentity": { + "verifyYourIdentity": { "message": "Verify your Identity" }, "weDontRecognizeThisDevice": { @@ -1443,12 +1461,22 @@ "rememberMe": { "message": "Memorare autentificare" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Don't ask again on this device for 30 days" + }, "sendVerificationCodeEmailAgain": { "message": "Retrimitere e-mail cu codul de verificare" }, "useAnotherTwoStepMethod": { "message": "Utilizare de metodă diferită de autentificare în două etape" }, + "selectAnotherMethod": { + "message": "Select another method", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Use your recovery code" + }, "insertYubiKey": { "message": "Introduceți YubiKey în portul USB al calculatorului apoi apăsați butonul acestuia." }, @@ -1467,6 +1495,9 @@ "twoStepOptions": { "message": "Opțiuni de autentificare în două etape" }, + "selectTwoStepLoginMethod": { + "message": "Select two-step login method" + }, "recoveryCodeDesc": { "message": "Ați pierdut accesul la toți furnizorii de autentificare în două etape? Folosiți codul de recuperare pentru a dezactiva toți acești furnizori din contul dvs." }, @@ -1509,6 +1540,9 @@ "webAuthnMigrated": { "message": "(Migrate din FIDO)" }, + "openInNewTab": { + "message": "Open in new tab" + }, "emailTitle": { "message": "E-mail" }, @@ -2224,6 +2258,9 @@ "revokeAccess": { "message": "Revocare acces" }, + "revoke": { + "message": "Revoke" + }, "twoStepLoginProviderEnabled": { "message": "Acest furnizor de autentificare în două etape este activ în contul dvs." }, @@ -4081,6 +4118,12 @@ "updateBrowserDesc": { "message": "Utilizați un browser nesuportat. Seiful web ar putea să nu funcționeze corect." }, + "youHaveAPendingLoginRequest": { + "message": "You have a pending login request from another device." + }, + "reviewLoginRequest": { + "message": "Review login request" + }, "freeTrialEndPromptCount": { "message": "Your free trial ends in $COUNT$ days.", "placeholders": { @@ -4758,6 +4801,15 @@ "masterPassPolicyDesc": { "message": "Setați cerințele pentru puterea parolei principale." }, + "passwordStrengthScore": { + "message": "Password strength score $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "twoStepLoginPolicyTitle": { "message": "Necesită autentificare în doi pași" }, @@ -5038,12 +5090,40 @@ "requireSsoExemption": { "message": "Proprietarii și administratorii de organizații sunt exceptați de la aplicarea acestei politici." }, + "limitSendViews": { + "message": "Limit views" + }, + "limitSendViewsHint": { + "message": "No one can view this Send after the limit is reached.", + "description": "Displayed under the limit views field on Send" + }, + "limitSendViewsCount": { + "message": "$ACCESSCOUNT$ views left", + "description": "Displayed under the limit views field on Send", + "placeholders": { + "accessCount": { + "content": "$1", + "example": "2" + } + } + }, + "sendDetails": { + "message": "Send details", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendTypeTextToShare": { + "message": "Text to share" + }, "sendTypeFile": { "message": "Fișier" }, "sendTypeText": { "message": "Text" }, + "sendPasswordDescV3": { + "message": "Add an optional password for recipients to access this Send.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "createSend": { "message": "Nou Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -5068,19 +5148,15 @@ "message": "Ștergere Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, - "deleteSendConfirmation": { - "message": "Sigur doriți să ștergeți acest Send?", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "whatTypeOfSend": { - "message": "Ce fel de Send este acesta?", + "deleteSendPermanentConfirmation": { + "message": "Are you sure you want to permanently delete this Send?", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "deletionDate": { "message": "Data ștergerii" }, - "deletionDateDesc": { - "message": "Send-ul va fi șters definitiv la data și ora specificate.", + "deletionDateDescV2": { + "message": "The Send will be permanently deleted on this date.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "expirationDate": { @@ -5093,21 +5169,6 @@ "maxAccessCount": { "message": "Numărul maxim de accesări" }, - "maxAccessCountDesc": { - "message": "Dacă este configurat, utilizatorii nu vor mai putea accesa acest Send când a fost atins numărul maxim de accesări.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "currentAccessCount": { - "message": "Numărul actual de accesări" - }, - "sendPasswordDesc": { - "message": "Opțional, este necesară o parolă pentru ca utilizatorii să acceseze acest Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendNotesDesc": { - "message": "Note private despre acest Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "disabled": { "message": "Dezactivat" }, @@ -5134,13 +5195,6 @@ "removePasswordConfirmation": { "message": "Sigur doriți să eliminați parola?" }, - "hideEmail": { - "message": "Ascundeți adresa mea de e-mail de la destinatari." - }, - "disableThisSend": { - "message": "Dezactivare Send pentru ca nimeni să nu-l poată accesa.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "allSends": { "message": "Toate Send-urile" }, @@ -5151,6 +5205,9 @@ "pendingDeletion": { "message": "Ștergere în așteptare" }, + "hideTextByDefault": { + "message": "Hide text by default" + }, "expired": { "message": "Expirat" }, @@ -5372,13 +5429,6 @@ "message": "Afișați întotdeauna adresa de e-mail a membrului împreună cu destinatarii atunci când creați sau editați un Send.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, - "sendOptionsPolicyInEffect": { - "message": "În prezent, sunt în vigoare următoarele politici de organizare:" - }, - "sendDisableHideEmailInEffect": { - "message": "Utilizatorii nu au voie să-și ascundă adresa de e-mail de la destinatari atunci când creează sau editează un Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "modifiedPolicyId": { "message": "Politica $ID$ a fost editată.", "placeholders": { @@ -5478,27 +5528,6 @@ "personalOwnershipCheckboxDesc": { "message": "Eliminați proprietatea individuală pentru utilizatorii organizației" }, - "textHiddenByDefault": { - "message": "Când Send-ul este accesat, ascundeți textul în mod implicit", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendNameDesc": { - "message": "Un nume prietenos pentru a descrie acest Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendTextDesc": { - "message": "Textul pe care doriți să-l trimiteți." - }, - "sendFileDesc": { - "message": "Fișierul pe care doriți să-l trimiteți." - }, - "copySendLinkOnSave": { - "message": "Copiați linkul pentru a partaja acest Send în clipboard-ul meu la salvare." - }, - "sendLinkLabel": { - "message": "Link Send", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "send": { "message": "Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -5647,12 +5676,21 @@ "dateParsingError": { "message": "A survenit o eroare la salvarea datelor de ștergere și de expirare." }, + "hideYourEmail": { + "message": "Hide your email address from viewers." + }, "webAuthnFallbackMsg": { "message": "Pentru a verifica 2FA, vă rugăm să faceți clic pe butonul de mai jos." }, "webAuthnAuthenticate": { "message": "Autentificare WebAuthn" }, + "readSecurityKey": { + "message": "Read security key" + }, + "awaitingSecurityKeyInteraction": { + "message": "Awaiting security key interaction..." + }, "webAuthnNotSupported": { "message": "WebAuthn nu este acceptat în acest browser." }, @@ -7199,6 +7237,12 @@ "duoRequiredByOrgForAccount": { "message": "Duo two-step login is required for your account." }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Duo two-step login is required for your account. Follow the steps below to finish logging in." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Follow the steps below to finish logging in." + }, "launchDuo": { "message": "Launch Duo" }, @@ -9793,9 +9837,15 @@ "learnMoreAboutApi": { "message": "Learn more about Bitwarden's API" }, + "fileSend": { + "message": "File Send" + }, "fileSends": { "message": "File Sends" }, + "textSend": { + "message": "Text Send" + }, "textSends": { "message": "Text Sends" }, @@ -10029,10 +10079,6 @@ "message": "Include special characters", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "addAttachment": { "message": "Add attachment" }, @@ -10432,10 +10478,31 @@ "assignedExceedsAvailable": { "message": "Assigned seats exceed available seats." }, + "changeAtRiskPassword": { + "message": "Change at-risk password" + }, "removeUnlockWithPinPolicyTitle": { "message": "Remove Unlock with PIN" }, "removeUnlockWithPinPolicyDesc": { "message": "Do not allow members to unlock their account with a PIN." + }, + "limitedEventLogs": { + "message": "$PRODUCT_TYPE$ plans do not have access to real event logs", + "placeholders": { + "product_type": { + "content": "$1", + "example": "Teams" + } + } + }, + "upgradeForFullEvents": { + "message": "Get full access to organization event logs by upgrading to a Teams or Enterprise plan." + }, + "upgradeEventLogTitle": { + "message": "Upgrade for real event log data" + }, + "upgradeEventLogMessage": { + "message": "These events are examples only and do not reflect real events within your Bitwarden organization." } } diff --git a/apps/web/src/locales/ru/messages.json b/apps/web/src/locales/ru/messages.json index 11f00e2fb4b..1ee34c7351c 100644 --- a/apps/web/src/locales/ru/messages.json +++ b/apps/web/src/locales/ru/messages.json @@ -5,6 +5,9 @@ "criticalApplications": { "message": "Критичные приложения" }, + "noCriticalAppsAtRisk": { + "message": "Никакие критически важные приложения не подвергаются риску" + }, "accessIntelligence": { "message": "Управление доступом" }, @@ -198,6 +201,9 @@ "notes": { "message": "Заметки" }, + "privateNote": { + "message": "Приватная заметка" + }, "note": { "message": "Заметка" }, @@ -1026,6 +1032,9 @@ "no": { "message": "Нет" }, + "location": { + "message": "Местоположение" + }, "loginOrCreateNewAccount": { "message": "Войдите или создайте новый аккаунт для доступа к вашему защищенному хранилищу." }, @@ -1161,13 +1170,22 @@ "logInToBitwarden": { "message": "Войти в Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "Введите код, отправленный на ваш email" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Введите код из приложения-аутентификатора" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Нажмите на YubiKey для аутентификации" + }, "authenticationTimeout": { "message": "Таймаут аутентификации" }, "authenticationSessionTimedOut": { "message": "Сеанс аутентификации завершился по времени. Пожалуйста, попробуйте войти еще раз." }, - "verifyIdentity": { + "verifyYourIdentity": { "message": "Подтвердите вашу личность" }, "weDontRecognizeThisDevice": { @@ -1443,12 +1461,22 @@ "rememberMe": { "message": "Запомнить меня" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Не спрашивать на этом устройстве в течение 30 дней" + }, "sendVerificationCodeEmailAgain": { "message": "Отправить код подтверждения еще раз" }, "useAnotherTwoStepMethod": { "message": "Использовать другой метод двухэтапной аутентификации" }, + "selectAnotherMethod": { + "message": "Выбрать другой способ", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Использовать код восстановления" + }, "insertYubiKey": { "message": "Вставьте свой YubiKey в USB-порт компьютера и нажмите его кнопку." }, @@ -1467,6 +1495,9 @@ "twoStepOptions": { "message": "Настройки двухэтапной аутентификации" }, + "selectTwoStepLoginMethod": { + "message": "Выбрать другой метод двухэтапной аутентификации" + }, "recoveryCodeDesc": { "message": "Потеряли доступ ко всем вариантам двухэтапной аутентификации? Используйте код восстановления, чтобы отключить ее для вашего аккаунта." }, @@ -1509,6 +1540,9 @@ "webAuthnMigrated": { "message": "(Перенесено из FIDO)" }, + "openInNewTab": { + "message": "Открыть в новой вкладке" + }, "emailTitle": { "message": "Email" }, @@ -2210,13 +2244,13 @@ "message": "Просмотр элементов" }, "viewItemsHidePass": { - "message": "Просмотр элементов, скрытых паролей" + "message": "Просмотр элементов, пароли скрыты" }, "editItems": { - "message": "Изменить элементы" + "message": "Изменение элементов" }, "editItemsHidePass": { - "message": "Изменить элементы, скрытые пароли" + "message": "Изменение элементов, пароли скрыты" }, "disable": { "message": "Отключить" @@ -2224,6 +2258,9 @@ "revokeAccess": { "message": "Отозвать доступ" }, + "revoke": { + "message": "Отозвать" + }, "twoStepLoginProviderEnabled": { "message": "Этот провайдер двухэтапной аутентификации включен для вашего аккаунта." }, @@ -4081,6 +4118,12 @@ "updateBrowserDesc": { "message": "Вы используете неподдерживаемый браузер. Веб-хранилище может работать некорректно." }, + "youHaveAPendingLoginRequest": { + "message": "У вас есть незавершенный запрос на авторизацию с другого устройства." + }, + "reviewLoginRequest": { + "message": "Просмотр запроса на вход" + }, "freeTrialEndPromptCount": { "message": "Ваша бесплатная пробная версия заканчивается через $COUNT$ дней.", "placeholders": { @@ -4758,6 +4801,15 @@ "masterPassPolicyDesc": { "message": "Установите требования к надежности мастер-пароля." }, + "passwordStrengthScore": { + "message": "Оценка надежности пароля $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "twoStepLoginPolicyTitle": { "message": "Требуется двухэтапная аутентификация" }, @@ -5038,12 +5090,40 @@ "requireSsoExemption": { "message": "Владельцы и администраторы организаций освобождены от применения этой политики." }, + "limitSendViews": { + "message": "Лимит просмотров" + }, + "limitSendViewsHint": { + "message": "Никто не сможет просмотреть эту Send после лимита просмотров.", + "description": "Displayed under the limit views field on Send" + }, + "limitSendViewsCount": { + "message": "Осталось просмотров: $ACCESSCOUNT$", + "description": "Displayed under the limit views field on Send", + "placeholders": { + "accessCount": { + "content": "$1", + "example": "2" + } + } + }, + "sendDetails": { + "message": "Информация о Send", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendTypeTextToShare": { + "message": "Текст для отправки" + }, "sendTypeFile": { "message": "Файл" }, "sendTypeText": { "message": "Текст" }, + "sendPasswordDescV3": { + "message": "Добавьте опциональный пароль для доступа получателей к этой Send.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "createSend": { "message": "Новая Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -5068,19 +5148,15 @@ "message": "Удалить Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, - "deleteSendConfirmation": { - "message": "Вы действительно хотите удалить эту Send?", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "whatTypeOfSend": { - "message": "Какой это тип Send?", + "deleteSendPermanentConfirmation": { + "message": "Вы уверены, что хотите безвозвратно удалить эту Send?", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "deletionDate": { "message": "Дата удаления" }, - "deletionDateDesc": { - "message": "Эта Send будет окончательно удалена в указанные дату и время.", + "deletionDateDescV2": { + "message": "С этой даты Send будет удалена навсегда.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "expirationDate": { @@ -5093,21 +5169,6 @@ "maxAccessCount": { "message": "Максимум обращений" }, - "maxAccessCountDesc": { - "message": "Если задано, пользователи больше не смогут получить доступ к этой Send, как только будет достигнуто максимальное количество обращений.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "currentAccessCount": { - "message": "Текущих обращений" - }, - "sendPasswordDesc": { - "message": "По возможности запрашивать у пользователей пароль для доступа к этой Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendNotesDesc": { - "message": "Личные заметки об этой Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "disabled": { "message": "Отключено" }, @@ -5134,13 +5195,6 @@ "removePasswordConfirmation": { "message": "Вы уверены, что хотите удалить пароль?" }, - "hideEmail": { - "message": "Скрыть мой адрес email от получателей." - }, - "disableThisSend": { - "message": "Деактивировать эту Send, чтобы никто не мог получить к ней доступ.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "allSends": { "message": "Все Send’ы" }, @@ -5151,6 +5205,9 @@ "pendingDeletion": { "message": "Ожидание удаления" }, + "hideTextByDefault": { + "message": "Скрыть текст по умолчанию" + }, "expired": { "message": "Срок истек" }, @@ -5372,13 +5429,6 @@ "message": "Всегда показывать email пользователя получателям при создании или редактировании Send.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, - "sendOptionsPolicyInEffect": { - "message": "На данный момент действуют следующие политики организации:" - }, - "sendDisableHideEmailInEffect": { - "message": "Пользователям не разрешается скрывать свой адрес email от получателей при создании или редактировании Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "modifiedPolicyId": { "message": "Изменена политика $ID$.", "placeholders": { @@ -5478,27 +5528,6 @@ "personalOwnershipCheckboxDesc": { "message": "Отключить личное владение для пользователей организации" }, - "textHiddenByDefault": { - "message": "При доступе к Send скрывать текст по умолчанию", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendNameDesc": { - "message": "Понятное имя для описания этой Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendTextDesc": { - "message": "Текст, который отправится вместе с Send." - }, - "sendFileDesc": { - "message": "Файл, который отправится вместе с Send." - }, - "copySendLinkOnSave": { - "message": "Скопировать ссылку в буфер обмена после сохранения, чтобы поделиться этой Send." - }, - "sendLinkLabel": { - "message": "Ссылка на Send", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "send": { "message": "Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -5647,12 +5676,21 @@ "dateParsingError": { "message": "Произошла ошибка при сохранении данных о сроках удаления и истечения." }, + "hideYourEmail": { + "message": "Скрыть ваш email от просматривающих." + }, "webAuthnFallbackMsg": { "message": "Для подтверждения 2ЭА нажмите кнопку ниже." }, "webAuthnAuthenticate": { "message": "Аутентификация WebAutn" }, + "readSecurityKey": { + "message": "Считать ключ безопасности" + }, + "awaitingSecurityKeyInteraction": { + "message": "Ожидание взаимодействия с ключом безопасности..." + }, "webAuthnNotSupported": { "message": "WebAuthn не поддерживается в этом браузере." }, @@ -7199,6 +7237,12 @@ "duoRequiredByOrgForAccount": { "message": "Для вашего аккаунта требуется двухэтапная аутентификация Duo." }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Duo two-step login is required for your account. Follow the steps below to finish logging in." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Следуйте указаниям ниже, чтобы завершить авторизацию." + }, "launchDuo": { "message": "Запустить Duo" }, @@ -9793,9 +9837,15 @@ "learnMoreAboutApi": { "message": "Узнайте больше об API Bitwarden" }, + "fileSend": { + "message": "Файловая Send" + }, "fileSends": { "message": "Файловая Send" }, + "textSend": { + "message": "Текстовая Send" + }, "textSends": { "message": "Текстовая Send" }, @@ -10029,10 +10079,6 @@ "message": "Включить специальные символы", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "addAttachment": { "message": "Добавить вложение" }, @@ -10432,10 +10478,31 @@ "assignedExceedsAvailable": { "message": "Assigned seats exceed available seats." }, + "changeAtRiskPassword": { + "message": "Изменить пароль, находящийся под угрозой" + }, "removeUnlockWithPinPolicyTitle": { "message": "Отключить разблокировку PIN-кодом" }, "removeUnlockWithPinPolicyDesc": { "message": "Не разрешать пользователям разблокировать свои аккаунты с помощью PIN-кода." + }, + "limitedEventLogs": { + "message": "Планы $PRODUCT_TYPE$ не имеют доступа к реальным журналам событий", + "placeholders": { + "product_type": { + "content": "$1", + "example": "Teams" + } + } + }, + "upgradeForFullEvents": { + "message": "Получите полный доступ к журналам событий организации, перейдя на план Teams или Enterprise." + }, + "upgradeEventLogTitle": { + "message": "Upgrade for real event log data" + }, + "upgradeEventLogMessage": { + "message": "Эти события являются лишь примерами и не отражают реальных событий в вашей организации Bitwarden." } } diff --git a/apps/web/src/locales/si/messages.json b/apps/web/src/locales/si/messages.json index d7d7133d056..ec20b090923 100644 --- a/apps/web/src/locales/si/messages.json +++ b/apps/web/src/locales/si/messages.json @@ -5,6 +5,9 @@ "criticalApplications": { "message": "Critical applications" }, + "noCriticalAppsAtRisk": { + "message": "No critical applications at risk" + }, "accessIntelligence": { "message": "Access Intelligence" }, @@ -198,6 +201,9 @@ "notes": { "message": "සටහන්" }, + "privateNote": { + "message": "Private note" + }, "note": { "message": "Note" }, @@ -1026,6 +1032,9 @@ "no": { "message": "නැහැ" }, + "location": { + "message": "Location" + }, "loginOrCreateNewAccount": { "message": "Log in or create a new account to access your secure vault." }, @@ -1161,13 +1170,22 @@ "logInToBitwarden": { "message": "Log in to Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "Enter the code sent to your email" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Enter the code from your authenticator app" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Press your YubiKey to authenticate" + }, "authenticationTimeout": { "message": "Authentication timeout" }, "authenticationSessionTimedOut": { "message": "The authentication session timed out. Please restart the login process." }, - "verifyIdentity": { + "verifyYourIdentity": { "message": "Verify your Identity" }, "weDontRecognizeThisDevice": { @@ -1443,12 +1461,22 @@ "rememberMe": { "message": "Remember me" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Don't ask again on this device for 30 days" + }, "sendVerificationCodeEmailAgain": { "message": "Send verification code email again" }, "useAnotherTwoStepMethod": { "message": "Use another two-step login method" }, + "selectAnotherMethod": { + "message": "Select another method", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Use your recovery code" + }, "insertYubiKey": { "message": "Insert your YubiKey into your computer's USB port, then touch its button." }, @@ -1467,6 +1495,9 @@ "twoStepOptions": { "message": "Two-step login options" }, + "selectTwoStepLoginMethod": { + "message": "Select two-step login method" + }, "recoveryCodeDesc": { "message": "Lost access to all of your two-step login providers? Use your recovery code to turn off all two-step login providers from your account." }, @@ -1509,6 +1540,9 @@ "webAuthnMigrated": { "message": "(Migrated from FIDO)" }, + "openInNewTab": { + "message": "Open in new tab" + }, "emailTitle": { "message": "වි-තැපෑල" }, @@ -2224,6 +2258,9 @@ "revokeAccess": { "message": "Revoke access" }, + "revoke": { + "message": "Revoke" + }, "twoStepLoginProviderEnabled": { "message": "This two-step login provider is active on your account." }, @@ -4081,6 +4118,12 @@ "updateBrowserDesc": { "message": "You are using an unsupported web browser. The web vault may not function properly." }, + "youHaveAPendingLoginRequest": { + "message": "You have a pending login request from another device." + }, + "reviewLoginRequest": { + "message": "Review login request" + }, "freeTrialEndPromptCount": { "message": "Your free trial ends in $COUNT$ days.", "placeholders": { @@ -4758,6 +4801,15 @@ "masterPassPolicyDesc": { "message": "Set requirements for master password strength." }, + "passwordStrengthScore": { + "message": "Password strength score $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "twoStepLoginPolicyTitle": { "message": "Require two-step login" }, @@ -5038,12 +5090,40 @@ "requireSsoExemption": { "message": "Organization owners and admins are exempt from this policy's enforcement." }, + "limitSendViews": { + "message": "Limit views" + }, + "limitSendViewsHint": { + "message": "No one can view this Send after the limit is reached.", + "description": "Displayed under the limit views field on Send" + }, + "limitSendViewsCount": { + "message": "$ACCESSCOUNT$ views left", + "description": "Displayed under the limit views field on Send", + "placeholders": { + "accessCount": { + "content": "$1", + "example": "2" + } + } + }, + "sendDetails": { + "message": "Send details", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendTypeTextToShare": { + "message": "Text to share" + }, "sendTypeFile": { "message": "File" }, "sendTypeText": { "message": "Text" }, + "sendPasswordDescV3": { + "message": "Add an optional password for recipients to access this Send.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "createSend": { "message": "New Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -5068,19 +5148,15 @@ "message": "Delete Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, - "deleteSendConfirmation": { - "message": "Are you sure you want to delete this Send?", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "whatTypeOfSend": { - "message": "What type of Send is this?", + "deleteSendPermanentConfirmation": { + "message": "Are you sure you want to permanently delete this Send?", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "deletionDate": { "message": "Deletion date" }, - "deletionDateDesc": { - "message": "The Send will be permanently deleted on the specified date and time.", + "deletionDateDescV2": { + "message": "The Send will be permanently deleted on this date.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "expirationDate": { @@ -5093,21 +5169,6 @@ "maxAccessCount": { "message": "Maximum access count" }, - "maxAccessCountDesc": { - "message": "If set, users will no longer be able to access this Send once the maximum access count is reached.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "currentAccessCount": { - "message": "Current access count" - }, - "sendPasswordDesc": { - "message": "Optionally require a password for users to access this Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendNotesDesc": { - "message": "Private notes about this Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "disabled": { "message": "Disabled" }, @@ -5134,13 +5195,6 @@ "removePasswordConfirmation": { "message": "Are you sure you want to remove the password?" }, - "hideEmail": { - "message": "Hide my email address from recipients." - }, - "disableThisSend": { - "message": "Deactivate this Send so that no one can access it.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "allSends": { "message": "All Sends" }, @@ -5151,6 +5205,9 @@ "pendingDeletion": { "message": "Pending deletion" }, + "hideTextByDefault": { + "message": "Hide text by default" + }, "expired": { "message": "Expired" }, @@ -5372,13 +5429,6 @@ "message": "Always show member’s email address with recipients when creating or editing a Send.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, - "sendOptionsPolicyInEffect": { - "message": "The following organization policies are currently in effect:" - }, - "sendDisableHideEmailInEffect": { - "message": "Users are not allowed to hide their email address from recipients when creating or editing a Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "modifiedPolicyId": { "message": "Modified policy $ID$.", "placeholders": { @@ -5478,27 +5528,6 @@ "personalOwnershipCheckboxDesc": { "message": "Remove individual ownership for organization users" }, - "textHiddenByDefault": { - "message": "When accessing the Send, hide the text by default", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendNameDesc": { - "message": "A friendly name to describe this Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendTextDesc": { - "message": "The text you want to Send." - }, - "sendFileDesc": { - "message": "The file you want to Send." - }, - "copySendLinkOnSave": { - "message": "Copy the link to share this Send to my clipboard upon save." - }, - "sendLinkLabel": { - "message": "Send link", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "send": { "message": "Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -5647,12 +5676,21 @@ "dateParsingError": { "message": "There was an error saving your deletion and expiration dates." }, + "hideYourEmail": { + "message": "Hide your email address from viewers." + }, "webAuthnFallbackMsg": { "message": "To verify your 2FA please click the button below." }, "webAuthnAuthenticate": { "message": "Authenticate WebAuthn" }, + "readSecurityKey": { + "message": "Read security key" + }, + "awaitingSecurityKeyInteraction": { + "message": "Awaiting security key interaction..." + }, "webAuthnNotSupported": { "message": "WebAuthn is not supported in this browser." }, @@ -7199,6 +7237,12 @@ "duoRequiredByOrgForAccount": { "message": "Duo two-step login is required for your account." }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Duo two-step login is required for your account. Follow the steps below to finish logging in." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Follow the steps below to finish logging in." + }, "launchDuo": { "message": "Launch Duo" }, @@ -9793,9 +9837,15 @@ "learnMoreAboutApi": { "message": "Learn more about Bitwarden's API" }, + "fileSend": { + "message": "File Send" + }, "fileSends": { "message": "File Sends" }, + "textSend": { + "message": "Text Send" + }, "textSends": { "message": "Text Sends" }, @@ -10029,10 +10079,6 @@ "message": "Include special characters", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "addAttachment": { "message": "Add attachment" }, @@ -10432,10 +10478,31 @@ "assignedExceedsAvailable": { "message": "Assigned seats exceed available seats." }, + "changeAtRiskPassword": { + "message": "Change at-risk password" + }, "removeUnlockWithPinPolicyTitle": { "message": "Remove Unlock with PIN" }, "removeUnlockWithPinPolicyDesc": { "message": "Do not allow members to unlock their account with a PIN." + }, + "limitedEventLogs": { + "message": "$PRODUCT_TYPE$ plans do not have access to real event logs", + "placeholders": { + "product_type": { + "content": "$1", + "example": "Teams" + } + } + }, + "upgradeForFullEvents": { + "message": "Get full access to organization event logs by upgrading to a Teams or Enterprise plan." + }, + "upgradeEventLogTitle": { + "message": "Upgrade for real event log data" + }, + "upgradeEventLogMessage": { + "message": "These events are examples only and do not reflect real events within your Bitwarden organization." } } diff --git a/apps/web/src/locales/sk/messages.json b/apps/web/src/locales/sk/messages.json index f7843acb742..d83f441f8e6 100644 --- a/apps/web/src/locales/sk/messages.json +++ b/apps/web/src/locales/sk/messages.json @@ -5,6 +5,9 @@ "criticalApplications": { "message": "Kritické aplikácie" }, + "noCriticalAppsAtRisk": { + "message": "Nie sú ohrozené žiadne kritické aplikácie" + }, "accessIntelligence": { "message": "Prehľad o prístupe" }, @@ -198,6 +201,9 @@ "notes": { "message": "Poznámky" }, + "privateNote": { + "message": "Private note" + }, "note": { "message": "Poznámka" }, @@ -1026,6 +1032,9 @@ "no": { "message": "Nie" }, + "location": { + "message": "Location" + }, "loginOrCreateNewAccount": { "message": "Prihláste sa, alebo vytvorte nový účet pre prístup k vášmu bezpečnému trezoru." }, @@ -1161,14 +1170,23 @@ "logInToBitwarden": { "message": "Prihlásenie do Bitwardenu" }, + "enterTheCodeSentToYourEmail": { + "message": "Zadajte kód zaslaný na váš e-mail" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Zadajte kód z overovacej aplikácie" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Stlačte YubiKey na overenie" + }, "authenticationTimeout": { "message": "Časový limit overenia" }, "authenticationSessionTimedOut": { "message": "Relácia overovania skončila. Znovu spustite proces prihlásenia." }, - "verifyIdentity": { - "message": "Overte svoju totožnosť" + "verifyYourIdentity": { + "message": "Verify your Identity" }, "weDontRecognizeThisDevice": { "message": "Nespoznávame toto zariadenie. Pre overenie vašej identity zadajte kód ktorý bol zaslaný na váš email." @@ -1443,12 +1461,22 @@ "rememberMe": { "message": "Zapamätaj si ma" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Nepýtať sa znova na tomto zariadení 30 dní" + }, "sendVerificationCodeEmailAgain": { "message": "Znovu zaslať overovací kód emailom" }, "useAnotherTwoStepMethod": { "message": "Použiť inú dvojstupňovú metódu prihlásenia" }, + "selectAnotherMethod": { + "message": "Vyberte iný spôsob", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Použiť obnovovací kód" + }, "insertYubiKey": { "message": "Vložte váš YubiKey do USB portu počítača a stlačte jeho tlačidlo." }, @@ -1467,6 +1495,9 @@ "twoStepOptions": { "message": "Možnosti dvojstupňového prihlásenia" }, + "selectTwoStepLoginMethod": { + "message": "Vyberte metódu dvojstupňového prihlásenia" + }, "recoveryCodeDesc": { "message": "Stratili ste prístup ku všetkým vašim dvojstupňovým poskytovateľom? Použite váš záchranný kód pre vypnutie všetkých poskytovateľov vo vašom účte." }, @@ -1509,6 +1540,9 @@ "webAuthnMigrated": { "message": "(Migrované z FIDO)" }, + "openInNewTab": { + "message": "Otvoriť v novej karte" + }, "emailTitle": { "message": "Email" }, @@ -2224,6 +2258,9 @@ "revokeAccess": { "message": "Zrušiť prístup" }, + "revoke": { + "message": "Odvolať" + }, "twoStepLoginProviderEnabled": { "message": "Tento poskytovateľ overenia je povolený pre váš účet." }, @@ -4081,6 +4118,12 @@ "updateBrowserDesc": { "message": "Používate nepodporovaný prehliadač. Webový trezor nemusí úplne fungovať." }, + "youHaveAPendingLoginRequest": { + "message": "Máte čakajúcu požiadavku na prihlásenie z iného zariadenia." + }, + "reviewLoginRequest": { + "message": "Skontrolovať požiadavku o prihlásenie" + }, "freeTrialEndPromptCount": { "message": "Vaše bezplatné skúšobné obdobie vyprší o $COUNT$ dní.", "placeholders": { @@ -4758,6 +4801,15 @@ "masterPassPolicyDesc": { "message": "Nastavte minimálne požiadavky pre silu hlavného hesla." }, + "passwordStrengthScore": { + "message": "Sila hesla $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "twoStepLoginPolicyTitle": { "message": "Vyžadovať dvojstupňové prihlásenie" }, @@ -5038,12 +5090,40 @@ "requireSsoExemption": { "message": "Vlastníci a administrátori organizácie sú vyňatí z uplatnenia tohto pravidla." }, + "limitSendViews": { + "message": "Limit views" + }, + "limitSendViewsHint": { + "message": "No one can view this Send after the limit is reached.", + "description": "Displayed under the limit views field on Send" + }, + "limitSendViewsCount": { + "message": "$ACCESSCOUNT$ views left", + "description": "Displayed under the limit views field on Send", + "placeholders": { + "accessCount": { + "content": "$1", + "example": "2" + } + } + }, + "sendDetails": { + "message": "Send details", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendTypeTextToShare": { + "message": "Text to share" + }, "sendTypeFile": { "message": "Súbor" }, "sendTypeText": { "message": "Text" }, + "sendPasswordDescV3": { + "message": "Add an optional password for recipients to access this Send.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "createSend": { "message": "Vytvoriť nový Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -5068,19 +5148,15 @@ "message": "Zmazať Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, - "deleteSendConfirmation": { - "message": "Naozaj chcete odstrániť tento Send?", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "whatTypeOfSend": { - "message": "Aký typ Send to je?", + "deleteSendPermanentConfirmation": { + "message": "Are you sure you want to permanently delete this Send?", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "deletionDate": { "message": "Dátum vymazania" }, - "deletionDateDesc": { - "message": "Odoslanie bude natrvalo odstránené v zadaný dátum a čas.", + "deletionDateDescV2": { + "message": "The Send will be permanently deleted on this date.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "expirationDate": { @@ -5093,21 +5169,6 @@ "maxAccessCount": { "message": "Maximálny počet prístupov" }, - "maxAccessCountDesc": { - "message": "Ak je nastavené, používatelia už nebudú mať prístup k tomuto Sendu po dosiahnutí maximálneho počtu prístupov.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "currentAccessCount": { - "message": "Súčasný počet prístupov" - }, - "sendPasswordDesc": { - "message": "Voliteľne môžete vyžadovať heslo pre používateľov na prístup k tomuto odoslaniu.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendNotesDesc": { - "message": "Zabezpečená poznámka o tomto Odoslaní.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "disabled": { "message": "Vypnuté" }, @@ -5134,13 +5195,6 @@ "removePasswordConfirmation": { "message": "Naozaj chcete odstrániť heslo?" }, - "hideEmail": { - "message": "Skryť moju emailovú adresu pred príjemcami." - }, - "disableThisSend": { - "message": "Vypnúť tento Send, aby k nemu nikto nemal prístup.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "allSends": { "message": "Všetky Sendy" }, @@ -5151,6 +5205,9 @@ "pendingDeletion": { "message": "Čakajúce odstránenie" }, + "hideTextByDefault": { + "message": "Hide text by default" + }, "expired": { "message": "Expirované" }, @@ -5372,13 +5429,6 @@ "message": "Nedovoľte používateľom skryť svoju e-mailovú adresu pred príjemcami pri vytváraní alebo úpravách Sendu.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, - "sendOptionsPolicyInEffect": { - "message": "V súčasnosti platia nasledujúce pravidlá organizácie:" - }, - "sendDisableHideEmailInEffect": { - "message": "Používatelia nemajú povolené skryť svoju e-mailovú adresu pred príjemcami pri vytváraní alebo úpravách Sendu.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "modifiedPolicyId": { "message": "Upravená politika $ID$.", "placeholders": { @@ -5478,27 +5528,6 @@ "personalOwnershipCheckboxDesc": { "message": "Zakázať osobné vlastníctvo pre používateľov organizácie" }, - "textHiddenByDefault": { - "message": "Pri prístupe k Odoslaniu, predvolene skryť text", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendNameDesc": { - "message": "Priateľský názov pre popísanie tohto Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendTextDesc": { - "message": "Text, ktorý chcete odoslať." - }, - "sendFileDesc": { - "message": "Súbor, ktorý chcete odoslať." - }, - "copySendLinkOnSave": { - "message": "Kopírovať odkaz na zdieľanie tohto Send do schránky počas ukladania." - }, - "sendLinkLabel": { - "message": "Odkaz na Send", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "send": { "message": "Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -5647,12 +5676,21 @@ "dateParsingError": { "message": "Pri ukladaní dátumov odstránenia a vypršania platnosti sa vyskytla chyba." }, + "hideYourEmail": { + "message": "Hide your email address from viewers." + }, "webAuthnFallbackMsg": { "message": "Na overenie 2FA, prosím, kliknite na tlačidlo nižšie." }, "webAuthnAuthenticate": { "message": "Overiť cez WebAuthn" }, + "readSecurityKey": { + "message": "Prečítať bezpečnostný kľúč" + }, + "awaitingSecurityKeyInteraction": { + "message": "Čaká sa na interakciu s bezpečnostným kľúčom..." + }, "webAuthnNotSupported": { "message": "Tento prehliadač nepodporuje WebAuthn." }, @@ -7199,6 +7237,12 @@ "duoRequiredByOrgForAccount": { "message": "Pre váš účet je potrebné dvojstupňové prihlásenie DUO." }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Pre váš účet sa vyžaduje dvojstupňové prihlásenie Duo. Na dokončenie prihlásenia postupujte podľa pokynov." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Na dokončenie prihlásenia postupujte podľa pokynov." + }, "launchDuo": { "message": "Spustiť DUO" }, @@ -9793,9 +9837,15 @@ "learnMoreAboutApi": { "message": "Dozvedieť sa viac o Bitwarden API" }, + "fileSend": { + "message": "File Send" + }, "fileSends": { "message": "Sendy so súborom" }, + "textSend": { + "message": "Text Send" + }, "textSends": { "message": "Textové Sendy" }, @@ -10029,10 +10079,6 @@ "message": "Zahrnúť špeciálne znaky", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "addAttachment": { "message": "Priložiť prílohu" }, @@ -10432,10 +10478,31 @@ "assignedExceedsAvailable": { "message": "Počet pridelených sedení presahuje počet dostupných sedení." }, + "changeAtRiskPassword": { + "message": "Change at-risk password" + }, "removeUnlockWithPinPolicyTitle": { - "message": "Remove Unlock with PIN" + "message": "Odstrániť odomknutie PIN kódom" }, "removeUnlockWithPinPolicyDesc": { - "message": "Do not allow members to unlock their account with a PIN." + "message": "Neumožnite vaším členom odomykať si konto PIN kódom." + }, + "limitedEventLogs": { + "message": "$PRODUCT_TYPE$ plans do not have access to real event logs", + "placeholders": { + "product_type": { + "content": "$1", + "example": "Teams" + } + } + }, + "upgradeForFullEvents": { + "message": "Prechodom na plán Teams alebo Enterprise získate úplný prístup k denníku udalostí organizácie." + }, + "upgradeEventLogTitle": { + "message": "Upgrade for real event log data" + }, + "upgradeEventLogMessage": { + "message": "These events are examples only and do not reflect real events within your Bitwarden organization." } } diff --git a/apps/web/src/locales/sl/messages.json b/apps/web/src/locales/sl/messages.json index fad209c3c03..de787b66af1 100644 --- a/apps/web/src/locales/sl/messages.json +++ b/apps/web/src/locales/sl/messages.json @@ -5,6 +5,9 @@ "criticalApplications": { "message": "Kritične aplikacije" }, + "noCriticalAppsAtRisk": { + "message": "No critical applications at risk" + }, "accessIntelligence": { "message": "Analiza dostopa" }, @@ -198,6 +201,9 @@ "notes": { "message": "Zapisek" }, + "privateNote": { + "message": "Private note" + }, "note": { "message": "Note" }, @@ -1026,6 +1032,9 @@ "no": { "message": "Ne" }, + "location": { + "message": "Location" + }, "loginOrCreateNewAccount": { "message": "Prijavite se ali ustvarite nov račun za dostop do svojega zavarovanega trezorja." }, @@ -1161,13 +1170,22 @@ "logInToBitwarden": { "message": "Log in to Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "Enter the code sent to your email" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Enter the code from your authenticator app" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Press your YubiKey to authenticate" + }, "authenticationTimeout": { "message": "Authentication timeout" }, "authenticationSessionTimedOut": { "message": "The authentication session timed out. Please restart the login process." }, - "verifyIdentity": { + "verifyYourIdentity": { "message": "Verify your Identity" }, "weDontRecognizeThisDevice": { @@ -1443,12 +1461,22 @@ "rememberMe": { "message": "Zapomni si me" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Don't ask again on this device for 30 days" + }, "sendVerificationCodeEmailAgain": { "message": "Ponovno posreduj potrditveno kodo na e-poštni naslov" }, "useAnotherTwoStepMethod": { "message": "Uporabi drug dvostopenjski način vpisa" }, + "selectAnotherMethod": { + "message": "Select another method", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Use your recovery code" + }, "insertYubiKey": { "message": "Svoj YubiKey ključek vstavite v USB režo in pritisnite na njegovo tipko." }, @@ -1467,6 +1495,9 @@ "twoStepOptions": { "message": "Možnosti dvostopenjske prijave" }, + "selectTwoStepLoginMethod": { + "message": "Select two-step login method" + }, "recoveryCodeDesc": { "message": "Ste izgubili dostop do vseh vaših ponudnikov dvostopenjse prijave? Uporabite svoje kode za obnovitev in tako onemogočite dvostopenjsko prijavo v svoj račun." }, @@ -1509,6 +1540,9 @@ "webAuthnMigrated": { "message": "(Preseljeno iz FIDO)" }, + "openInNewTab": { + "message": "Open in new tab" + }, "emailTitle": { "message": "E-pošta" }, @@ -2224,6 +2258,9 @@ "revokeAccess": { "message": "Odvzemi dostop" }, + "revoke": { + "message": "Revoke" + }, "twoStepLoginProviderEnabled": { "message": "This two-step login provider is active on your account." }, @@ -4081,6 +4118,12 @@ "updateBrowserDesc": { "message": "You are using an unsupported web browser. The web vault may not function properly." }, + "youHaveAPendingLoginRequest": { + "message": "You have a pending login request from another device." + }, + "reviewLoginRequest": { + "message": "Review login request" + }, "freeTrialEndPromptCount": { "message": "Your free trial ends in $COUNT$ days.", "placeholders": { @@ -4758,6 +4801,15 @@ "masterPassPolicyDesc": { "message": "Nastavite zahteve za moč glavnega gesla." }, + "passwordStrengthScore": { + "message": "Password strength score $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "twoStepLoginPolicyTitle": { "message": "Require two-step login" }, @@ -5038,12 +5090,40 @@ "requireSsoExemption": { "message": "Organization owners and admins are exempt from this policy's enforcement." }, + "limitSendViews": { + "message": "Limit views" + }, + "limitSendViewsHint": { + "message": "No one can view this Send after the limit is reached.", + "description": "Displayed under the limit views field on Send" + }, + "limitSendViewsCount": { + "message": "$ACCESSCOUNT$ views left", + "description": "Displayed under the limit views field on Send", + "placeholders": { + "accessCount": { + "content": "$1", + "example": "2" + } + } + }, + "sendDetails": { + "message": "Send details", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendTypeTextToShare": { + "message": "Text to share" + }, "sendTypeFile": { "message": "Datoteka" }, "sendTypeText": { "message": "Besedilo" }, + "sendPasswordDescV3": { + "message": "Add an optional password for recipients to access this Send.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "createSend": { "message": "Nova pošiljka", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -5068,19 +5148,15 @@ "message": "Izbriši pošiljko", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, - "deleteSendConfirmation": { - "message": "Ste prepričani, da želite izbrisati to pošiljko?", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "whatTypeOfSend": { - "message": "Katere vrste pošiljka je to?", + "deleteSendPermanentConfirmation": { + "message": "Are you sure you want to permanently delete this Send?", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "deletionDate": { "message": "Deletion date" }, - "deletionDateDesc": { - "message": "The Send will be permanently deleted on the specified date and time.", + "deletionDateDescV2": { + "message": "The Send will be permanently deleted on this date.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "expirationDate": { @@ -5093,21 +5169,6 @@ "maxAccessCount": { "message": "Maximum access count" }, - "maxAccessCountDesc": { - "message": "If set, users will no longer be able to access this Send once the maximum access count is reached.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "currentAccessCount": { - "message": "Current access count" - }, - "sendPasswordDesc": { - "message": "Optionally require a password for users to access this Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendNotesDesc": { - "message": "Private notes about this Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "disabled": { "message": "Disabled" }, @@ -5134,13 +5195,6 @@ "removePasswordConfirmation": { "message": "Are you sure you want to remove the password?" }, - "hideEmail": { - "message": "Hide my email address from recipients." - }, - "disableThisSend": { - "message": "Deactivate this Send so that no one can access it.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "allSends": { "message": "Vse pošiljke" }, @@ -5151,6 +5205,9 @@ "pendingDeletion": { "message": "Pending deletion" }, + "hideTextByDefault": { + "message": "Hide text by default" + }, "expired": { "message": "Expired" }, @@ -5372,13 +5429,6 @@ "message": "Always show member’s email address with recipients when creating or editing a Send.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, - "sendOptionsPolicyInEffect": { - "message": "The following organization policies are currently in effect:" - }, - "sendDisableHideEmailInEffect": { - "message": "Users are not allowed to hide their email address from recipients when creating or editing a Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "modifiedPolicyId": { "message": "Modified policy $ID$.", "placeholders": { @@ -5478,27 +5528,6 @@ "personalOwnershipCheckboxDesc": { "message": "Remove individual ownership for organization users" }, - "textHiddenByDefault": { - "message": "When accessing the Send, hide the text by default", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendNameDesc": { - "message": "A friendly name to describe this Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendTextDesc": { - "message": "The text you want to Send." - }, - "sendFileDesc": { - "message": "Datoteka, ki jo želite poslati kot pošiljko." - }, - "copySendLinkOnSave": { - "message": "Ko shranim, skopiraj povezavo za deljenje te pošiljke v odložišče." - }, - "sendLinkLabel": { - "message": "Povezava pošiljke", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "send": { "message": "Pošiljka", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -5647,12 +5676,21 @@ "dateParsingError": { "message": "There was an error saving your deletion and expiration dates." }, + "hideYourEmail": { + "message": "Hide your email address from viewers." + }, "webAuthnFallbackMsg": { "message": "To verify your 2FA please click the button below." }, "webAuthnAuthenticate": { "message": "Authenticate WebAuthn" }, + "readSecurityKey": { + "message": "Read security key" + }, + "awaitingSecurityKeyInteraction": { + "message": "Awaiting security key interaction..." + }, "webAuthnNotSupported": { "message": "WebAuthn is not supported in this browser." }, @@ -7199,6 +7237,12 @@ "duoRequiredByOrgForAccount": { "message": "Duo two-step login is required for your account." }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Duo two-step login is required for your account. Follow the steps below to finish logging in." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Follow the steps below to finish logging in." + }, "launchDuo": { "message": "Launch Duo" }, @@ -9793,9 +9837,15 @@ "learnMoreAboutApi": { "message": "Learn more about Bitwarden's API" }, + "fileSend": { + "message": "File Send" + }, "fileSends": { "message": "File Sends" }, + "textSend": { + "message": "Text Send" + }, "textSends": { "message": "Text Sends" }, @@ -10029,10 +10079,6 @@ "message": "Include special characters", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "addAttachment": { "message": "Add attachment" }, @@ -10432,10 +10478,31 @@ "assignedExceedsAvailable": { "message": "Assigned seats exceed available seats." }, + "changeAtRiskPassword": { + "message": "Change at-risk password" + }, "removeUnlockWithPinPolicyTitle": { "message": "Remove Unlock with PIN" }, "removeUnlockWithPinPolicyDesc": { "message": "Do not allow members to unlock their account with a PIN." + }, + "limitedEventLogs": { + "message": "$PRODUCT_TYPE$ plans do not have access to real event logs", + "placeholders": { + "product_type": { + "content": "$1", + "example": "Teams" + } + } + }, + "upgradeForFullEvents": { + "message": "Get full access to organization event logs by upgrading to a Teams or Enterprise plan." + }, + "upgradeEventLogTitle": { + "message": "Upgrade for real event log data" + }, + "upgradeEventLogMessage": { + "message": "These events are examples only and do not reflect real events within your Bitwarden organization." } } diff --git a/apps/web/src/locales/sr/messages.json b/apps/web/src/locales/sr/messages.json index 6540a709174..eaa5cc50639 100644 --- a/apps/web/src/locales/sr/messages.json +++ b/apps/web/src/locales/sr/messages.json @@ -5,6 +5,9 @@ "criticalApplications": { "message": "Критичне апликације" }, + "noCriticalAppsAtRisk": { + "message": "Нема критичних апликација у ризику" + }, "accessIntelligence": { "message": "Приступи интелигенцији" }, @@ -198,6 +201,9 @@ "notes": { "message": "Напомене" }, + "privateNote": { + "message": "Приватна белешка" + }, "note": { "message": "Белешка" }, @@ -465,16 +471,16 @@ "message": "Уреди фасциклу" }, "newFolder": { - "message": "New folder" + "message": "Нова фасцикла" }, "folderName": { - "message": "Folder name" + "message": "Име фасцикле" }, "folderHintText": { - "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums" + "message": "Угнездите фасциклу додавањем имена надређене фасцкле праћеног знаком „/“. Пример: Друштвени/Форуми" }, "deleteFolderPermanently": { - "message": "Are you sure you want to permanently delete this folder?" + "message": "Да ли сте сигурни да желите да трајно избришете ову фасциклу?" }, "baseDomain": { "message": "Главни домен", @@ -1026,6 +1032,9 @@ "no": { "message": "Не" }, + "location": { + "message": "Локација" + }, "loginOrCreateNewAccount": { "message": "Пријавите се или креирајте нови налог за приступ Сефу." }, @@ -1161,13 +1170,22 @@ "logInToBitwarden": { "message": "Пријавите се на Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "Унесите кôд послат на ваш имејл" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Унесите кôд из апликације за аутентификацију" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Стисните Ваш YubiKey за аутентификацију" + }, "authenticationTimeout": { "message": "Истекло је време аутентификације" }, "authenticationSessionTimedOut": { "message": "Истекло је време сесије за аутентификацију. Молим вас покрените процес пријаве поново." }, - "verifyIdentity": { + "verifyYourIdentity": { "message": "Потврдите идентитет" }, "weDontRecognizeThisDevice": { @@ -1399,7 +1417,7 @@ "message": "Одбиј приступ" }, "notificationSentDeviceAnchor": { - "message": "web app" + "message": "веб апликација" }, "notificationSentDevicePart2": { "message": "Потврдите да се фраза отиска прста поклапа са овом испод пре одобравања." @@ -1443,12 +1461,22 @@ "rememberMe": { "message": "Запамти ме" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Не питајте поново на овом уређају 30 дана" + }, "sendVerificationCodeEmailAgain": { "message": "Поново послати верификациони код на Е-пошту" }, "useAnotherTwoStepMethod": { "message": "Користите другу методу пријављивања у два корака" }, + "selectAnotherMethod": { + "message": "Изаберите другу методу", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Употребите шифру за опоравак" + }, "insertYubiKey": { "message": "Убаците свој YubiKey у УСБ порт рачунара, а затим додирните његово дугме." }, @@ -1467,6 +1495,9 @@ "twoStepOptions": { "message": "Опције дво-коракне пријаве" }, + "selectTwoStepLoginMethod": { + "message": "Одабрати методу пријављивања у два корака" + }, "recoveryCodeDesc": { "message": "Изгубили сте приступ свим својим двофакторским добављачима? Употребите код за опоравак да онемогућите све двофакторске добављаче из налога." }, @@ -1509,6 +1540,9 @@ "webAuthnMigrated": { "message": "(Мигрирао из FIDO)" }, + "openInNewTab": { + "message": "Отвори у новом језичку" + }, "emailTitle": { "message": "Е-пошта" }, @@ -1888,16 +1922,16 @@ "message": "Укључи заштиту пријаве на новом уређају" }, "turnOffNewDeviceLoginProtectionModalDesc": { - "message": "Proceed below to turn off the verification emails bitwarden sends when you login from a new device." + "message": "Наставите доле да бисте искључили верификационе имејлове које Bitwarden шаље када се пријавите са новог уређаја." }, "turnOnNewDeviceLoginProtectionModalDesc": { - "message": "Proceed below to have bitwarden send you verification emails when you login from a new device." + "message": "Наставите доле да бисте Bitwarden Ва- шаље верификационе имејлове када се пријавите са новог уређаја." }, "turnOffNewDeviceLoginProtectionWarning": { - "message": "With new device login protection turned off, anyone with your master password can access your account from any device. To protect your account without verification emails, set up two-step login." + "message": "Ако је заштита нових пријава искључена, је било ко са вашом главном лозинком може приступити вашем налогу са било којег уређаја. Да бисте заштитили свој рачун без верификационих имејлова, поставите пријаву у два корака." }, "accountNewDeviceLoginProtectionSaved": { - "message": "New device login protection changes saved" + "message": "Промене нових уређаји за заштиту пријаве су сачуване" }, "sessionsDeauthorized": { "message": "Одузето овлашћење свих сесија" @@ -2163,7 +2197,7 @@ "message": "Омогућавање пријаве у два корака може вас трајно закључати са вашег Bitwarden-а налога. Код за опоравак омогућава вам приступ вашем налогу у случају да више не можете да користите свог уобичајеног добављача услуге пријављивања у два корака (нпр. ако изгубите уређај). Подршка Bitwarden-а неће вам моћи помоћи ако изгубите приступ свом налогу. Препоручујемо да запишете или одштампате код за опоравак и сачувате га на сигурном месту." }, "yourSingleUseRecoveryCode": { - "message": "Your single-use recovery code can be used to turn off two-step login in the event that you lose access to your two-step login provider. Bitwarden recommends you write down the recovery code and keep it in a safe place." + "message": "Ваш јединствени кôд за опоравак може се користити за искључивање у два корака у случају да изгубите приступ свом двоструком провајдеру пријаве. Bitwarden препоручује да запишете кôд за опоравак и држите га на сигурном месту." }, "viewRecoveryCode": { "message": "Погледати шифру за опоравак" @@ -2224,6 +2258,9 @@ "revokeAccess": { "message": "Опозови Приступ" }, + "revoke": { + "message": "Опозови" + }, "twoStepLoginProviderEnabled": { "message": "Овај добављач услуге пријављивања у два корака је омогућен на вашем налогу." }, @@ -2414,7 +2451,7 @@ "message": "Догодила се грешка приликом читања безбедносног кључа. Покушајте поново." }, "twoFactorWebAuthnWarning1": { - "message": "Due to platform limitations, WebAuthn cannot be used on all Bitwarden applications. You should set up another two-step login provider so that you can access your account when WebAuthn cannot be used." + "message": "Због ограничења платформе, WebAuthn се не могу користити на свим Bitwarden апликацијама. Требали бисте подесити другог добављача услуге пријављивања у два корака како бисте могли да приступите свом налогу када WebAuthn не могу да се користе." }, "twoFactorRecoveryYourCode": { "message": "Ваш Bitwarden код за опоравак пријаве у два корака" @@ -4081,6 +4118,12 @@ "updateBrowserDesc": { "message": "Користите неподржани веб прегледач. Веб сеф можда неће правилно функционисати." }, + "youHaveAPendingLoginRequest": { + "message": "Имате захтев за пријаву на чекању са другог уређаја." + }, + "reviewLoginRequest": { + "message": "Прегледајте захтев за пријаву" + }, "freeTrialEndPromptCount": { "message": "Ваша проба се завршава за $COUNT$ дана.", "placeholders": { @@ -4176,7 +4219,7 @@ "message": "Ако не можете да приступите свом налогу путем уобичајених метода пријављивања у два корака, можете користити свој код за опоравак пријаве да бисте онемогућили све добављаче услуга у два корака на свом налогу." }, "logInBelowUsingYourSingleUseRecoveryCode": { - "message": "Log in below using your single-use recovery code. This will turn off all two-step providers on your account." + "message": "Пријавите се испод коришћења вашег једнократног кôда за опоравак. Ово ће искључити све провајдере у два корака на вашем налогу." }, "recoverAccountTwoStep": { "message": "Опоравак пријаве у два корака" @@ -4470,7 +4513,7 @@ "message": "Ажурирање кључа за шифровање не може да се настави" }, "editFieldLabel": { - "message": "Edit $LABEL$", + "message": "Уреди $LABEL$", "placeholders": { "label": { "content": "$1", @@ -4479,7 +4522,7 @@ } }, "reorderToggleButton": { - "message": "Reorder $LABEL$. Use arrow key to move item up or down.", + "message": "Преместити $LABEL$. Користите тастер са стрелицом да бисте померили ставку.", "placeholders": { "label": { "content": "$1", @@ -4758,6 +4801,15 @@ "masterPassPolicyDesc": { "message": "Поставите минималне захтеве за чврстоћу главне лозинке." }, + "passwordStrengthScore": { + "message": "Снага лозинкe $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "twoStepLoginPolicyTitle": { "message": "Потребна дво-степенска пријава" }, @@ -5038,12 +5090,40 @@ "requireSsoExemption": { "message": "Власници и администратори организација изузети су ове политике." }, + "limitSendViews": { + "message": "Ограничити приказе" + }, + "limitSendViewsHint": { + "message": "Нико не може да види ово Send након што се достигне ограничење.", + "description": "Displayed under the limit views field on Send" + }, + "limitSendViewsCount": { + "message": "Осталих прегледа: $ACCESSCOUNT$", + "description": "Displayed under the limit views field on Send", + "placeholders": { + "accessCount": { + "content": "$1", + "example": "2" + } + } + }, + "sendDetails": { + "message": "Детаљи Send-а", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendTypeTextToShare": { + "message": "Текст за дељење" + }, "sendTypeFile": { "message": "Датотека" }, "sendTypeText": { "message": "Текст" }, + "sendPasswordDescV3": { + "message": "Додајте опционалну лозинку за примаоце да приступе овом Send.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "createSend": { "message": "Креирај ново „Send“", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -5068,19 +5148,15 @@ "message": "Избриши „Send“", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, - "deleteSendConfirmation": { - "message": "Сигурно избрисати овај „Send“?", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "whatTypeOfSend": { - "message": "Који је ово тип „Send“-a?", + "deleteSendPermanentConfirmation": { + "message": "Да ли сте сигурни да желите да трајно избришете овај Send?", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "deletionDate": { "message": "Брисање после" }, - "deletionDateDesc": { - "message": "„The Send“ ће бити трајно избрисан наведеног датума и времена.", + "deletionDateDescV2": { + "message": "Send ће бити трајно обрисано у наведени датум.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "expirationDate": { @@ -5093,21 +5169,6 @@ "maxAccessCount": { "message": "Максималан број приступа" }, - "maxAccessCountDesc": { - "message": "Ако је постављено, корисници више неће моћи да приступе овом „send“ када се достигне максимални број приступа.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "currentAccessCount": { - "message": "Тренутни број приступа" - }, - "sendPasswordDesc": { - "message": "Опционално захтевајте лозинку за приступ корисницима „Send“-у.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendNotesDesc": { - "message": "Приватне белешке о овом „Send“.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "disabled": { "message": "Онемогућено" }, @@ -5134,13 +5195,6 @@ "removePasswordConfirmation": { "message": "Да ли сте сигурни да желите уклонити лозинку?" }, - "hideEmail": { - "message": "Сакриј моју е-адресу од примаоца." - }, - "disableThisSend": { - "message": "Онемогућите овај „Send“ да нико не би могао да му приступи.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "allSends": { "message": "Све „Send“" }, @@ -5151,6 +5205,9 @@ "pendingDeletion": { "message": "Брисање на чекању" }, + "hideTextByDefault": { + "message": "Сакриј текст подразумевано" + }, "expired": { "message": "Истекло" }, @@ -5372,13 +5429,6 @@ "message": "Не дозволите корисницима да сакрију своју е-пошту од примаоца приликом креирања или уређивања „Send“-а.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, - "sendOptionsPolicyInEffect": { - "message": "Следеће организационе политике су тренутно на снази:" - }, - "sendDisableHideEmailInEffect": { - "message": "Корисници не могу да сакрију своју е-пошту од примаоца приликом креирања или уређивања „Send“-а.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "modifiedPolicyId": { "message": "Политика $ID$ промењена.", "placeholders": { @@ -5478,27 +5528,6 @@ "personalOwnershipCheckboxDesc": { "message": "Онемогућите лично власништво за кориснике организације" }, - "textHiddenByDefault": { - "message": "На притуп „Send“-а, сакриј текст по дефаулту", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendNameDesc": { - "message": "Име да се опише ово слање.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendTextDesc": { - "message": "Текст који желиш да пошаљеш." - }, - "sendFileDesc": { - "message": "Датотека коју желиш да пошаљеш." - }, - "copySendLinkOnSave": { - "message": "Копирај везу да би поделио слање на бележницу након снимања." - }, - "sendLinkLabel": { - "message": "Пошаљи везу", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "send": { "message": "Пошаљи", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -5647,12 +5676,21 @@ "dateParsingError": { "message": "Појавила се грешка при снимању датума брисања и истицања." }, + "hideYourEmail": { + "message": "Сакријте свој имејл од гледалаца." + }, "webAuthnFallbackMsg": { "message": "Да би проверили Ваш 2FA Кликните на дугме испод." }, "webAuthnAuthenticate": { "message": "WebAutn аутентификација" }, + "readSecurityKey": { + "message": "Read security key" + }, + "awaitingSecurityKeyInteraction": { + "message": "Awaiting security key interaction..." + }, "webAuthnNotSupported": { "message": "WebAuthn није подржано у овом прегледачу." }, @@ -7199,6 +7237,12 @@ "duoRequiredByOrgForAccount": { "message": "DUO пријава у два корака је потребна за ваш налог." }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Duo two-step login is required for your account. Follow the steps below to finish logging in." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Follow the steps below to finish logging in." + }, "launchDuo": { "message": "Покренути DUO" }, @@ -8462,16 +8506,16 @@ "message": "Одобри захтев" }, "deviceApproved": { - "message": "Device approved" + "message": "Уређај одобрен" }, "deviceRemoved": { - "message": "Device removed" + "message": "Уређај је уклоњен" }, "removeDevice": { - "message": "Remove device" + "message": "Уклони уређај" }, "removeDeviceConfirmation": { - "message": "Are you sure you want to remove this device?" + "message": "Да ли сте сигурни да желите да уклоните овај уређај?" }, "noDeviceRequests": { "message": "Нема захтева уређаја" @@ -9793,9 +9837,15 @@ "learnMoreAboutApi": { "message": "Сазнајте више о API Bitwarden-а" }, + "fileSend": { + "message": "Датотека „Send“" + }, "fileSends": { "message": "Датотека „Send“" }, + "textSend": { + "message": "Текст „Send“" + }, "textSends": { "message": "Текст „Send“" }, @@ -10029,10 +10079,6 @@ "message": "Укључити специјална слова", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "addAttachment": { "message": "Додај прилог" }, @@ -10291,38 +10337,38 @@ "message": "Domain claimed" }, "organizationNameMaxLength": { - "message": "Organization name cannot exceed 50 characters." + "message": "Име организације не може прећи 50 знакова." }, "openingExtension": { - "message": "Opening the Bitwarden browser extension" + "message": "Отварање Bitwarden додатка прегледача" }, "somethingWentWrong": { - "message": "Something went wrong..." + "message": "Нешто није у реду..." }, "openingExtensionError": { - "message": "We had trouble opening the Bitwarden browser extension. Click the button to open it now." + "message": "Имали смо проблема са отварањем додатка. Кликните на дугме да бисте га сада отворили." }, "openExtension": { - "message": "Open extension" + "message": "Отвори додатак" }, "doNotHaveExtension": { - "message": "Don't have the Bitwarden browser extension?" + "message": "Немате додатак за Bitwarden?" }, "installExtension": { - "message": "Install extension" + "message": "Инсталирајте додатак" }, "openedExtension": { - "message": "Opened the browser extension" + "message": "Отворите додатак претраживача" }, "openedExtensionViewAtRiskPasswords": { - "message": "Successfully opened the Bitwarden browser extension. You can now review your at-risk passwords." + "message": "Успешно је отворен додатак. Сада можете да прегледате своје ризичне лозинке." }, "openExtensionManuallyPart1": { - "message": "We had trouble opening the Bitwarden browser extension. Open the Bitwarden icon", + "message": "Имали смо проблема са отварањем додатка. Отворите Bitwarden иконицу", "description": "This will be used as part of a larger sentence, broken up to include the Bitwarden icon. The full sentence will read 'We had trouble opening the Bitwarden browser extension. Open the Bitwarden icon [Bitwarden Icon] from the toolbar.'" }, "openExtensionManuallyPart2": { - "message": "from the toolbar.", + "message": "са алатне траке.", "description": "This will be used as part of a larger sentence, broken up to include the Bitwarden icon. The full sentence will read 'We had trouble opening the Bitwarden browser extension. Open the Bitwarden icon [Bitwarden Icon] from the toolbar.'" }, "resellerRenewalWarningMsg": { @@ -10390,7 +10436,7 @@ "message": "This action will delete the member account including all items in their vault. This replaces the previous Remove action." }, "deleteManagedUserWarning": { - "message": "Delete is a new action!" + "message": "Избриши је нова акција!" }, "seatsRemaining": { "message": "You have $REMAINING$ seats remaining out of $TOTAL$ seats assigned to this organization. Contact your provider to manage your subscription.", @@ -10406,7 +10452,7 @@ } }, "existingOrganization": { - "message": "Existing organization" + "message": "Постојећа организација" }, "selectOrganizationProviderPortal": { "message": "Select an organization to add to your Provider Portal." @@ -10432,10 +10478,31 @@ "assignedExceedsAvailable": { "message": "Assigned seats exceed available seats." }, + "changeAtRiskPassword": { + "message": "Променити ризичну лозинку" + }, "removeUnlockWithPinPolicyTitle": { "message": "Remove Unlock with PIN" }, "removeUnlockWithPinPolicyDesc": { "message": "Do not allow members to unlock their account with a PIN." + }, + "limitedEventLogs": { + "message": "$PRODUCT_TYPE$ планови немају приступ стварним извештајима догађаја", + "placeholders": { + "product_type": { + "content": "$1", + "example": "Teams" + } + } + }, + "upgradeForFullEvents": { + "message": "Добијте потпуни приступ извештајима о догађајима организације надоградњом на Teams или Enterprise." + }, + "upgradeEventLogTitle": { + "message": "Надоградите за извештај о реалним догађајима" + }, + "upgradeEventLogMessage": { + "message": "Ови догађаји су само примери и не одражавају стварне догађаје у вашем Bitwarden отганизацији." } } diff --git a/apps/web/src/locales/sr_CS/messages.json b/apps/web/src/locales/sr_CS/messages.json index 6b5a1e6def2..8b61a2d86fa 100644 --- a/apps/web/src/locales/sr_CS/messages.json +++ b/apps/web/src/locales/sr_CS/messages.json @@ -5,6 +5,9 @@ "criticalApplications": { "message": "Kritične aplikacije" }, + "noCriticalAppsAtRisk": { + "message": "No critical applications at risk" + }, "accessIntelligence": { "message": "Pristupi inteligenciji" }, @@ -198,6 +201,9 @@ "notes": { "message": "Beleške" }, + "privateNote": { + "message": "Private note" + }, "note": { "message": "Note" }, @@ -1026,6 +1032,9 @@ "no": { "message": "Ne" }, + "location": { + "message": "Location" + }, "loginOrCreateNewAccount": { "message": "Ulogujte se ili napravite novi nalog kako biste pristupili Vašem trezoru." }, @@ -1161,13 +1170,22 @@ "logInToBitwarden": { "message": "Log in to Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "Enter the code sent to your email" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Enter the code from your authenticator app" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Press your YubiKey to authenticate" + }, "authenticationTimeout": { "message": "Authentication timeout" }, "authenticationSessionTimedOut": { "message": "The authentication session timed out. Please restart the login process." }, - "verifyIdentity": { + "verifyYourIdentity": { "message": "Verify your Identity" }, "weDontRecognizeThisDevice": { @@ -1443,12 +1461,22 @@ "rememberMe": { "message": "Zapamti me" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Don't ask again on this device for 30 days" + }, "sendVerificationCodeEmailAgain": { "message": "Send verification code email again" }, "useAnotherTwoStepMethod": { "message": "Use another two-step login method" }, + "selectAnotherMethod": { + "message": "Select another method", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Use your recovery code" + }, "insertYubiKey": { "message": "Povežite Vaš YubiKey preko USB porta na vašem računaru, pa pritisnite dugme na njemu." }, @@ -1467,6 +1495,9 @@ "twoStepOptions": { "message": "Two-step login options" }, + "selectTwoStepLoginMethod": { + "message": "Select two-step login method" + }, "recoveryCodeDesc": { "message": "Lost access to all of your two-step login providers? Use your recovery code to turn off all two-step login providers from your account." }, @@ -1509,6 +1540,9 @@ "webAuthnMigrated": { "message": "(Migrated from FIDO)" }, + "openInNewTab": { + "message": "Open in new tab" + }, "emailTitle": { "message": "Email" }, @@ -2224,6 +2258,9 @@ "revokeAccess": { "message": "Revoke access" }, + "revoke": { + "message": "Revoke" + }, "twoStepLoginProviderEnabled": { "message": "This two-step login provider is active on your account." }, @@ -4081,6 +4118,12 @@ "updateBrowserDesc": { "message": "You are using an unsupported web browser. The web vault may not function properly." }, + "youHaveAPendingLoginRequest": { + "message": "You have a pending login request from another device." + }, + "reviewLoginRequest": { + "message": "Review login request" + }, "freeTrialEndPromptCount": { "message": "Your free trial ends in $COUNT$ days.", "placeholders": { @@ -4758,6 +4801,15 @@ "masterPassPolicyDesc": { "message": "Set requirements for master password strength." }, + "passwordStrengthScore": { + "message": "Password strength score $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "twoStepLoginPolicyTitle": { "message": "Require two-step login" }, @@ -5038,12 +5090,40 @@ "requireSsoExemption": { "message": "Organization owners and admins are exempt from this policy's enforcement." }, + "limitSendViews": { + "message": "Limit views" + }, + "limitSendViewsHint": { + "message": "No one can view this Send after the limit is reached.", + "description": "Displayed under the limit views field on Send" + }, + "limitSendViewsCount": { + "message": "$ACCESSCOUNT$ views left", + "description": "Displayed under the limit views field on Send", + "placeholders": { + "accessCount": { + "content": "$1", + "example": "2" + } + } + }, + "sendDetails": { + "message": "Send details", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendTypeTextToShare": { + "message": "Text to share" + }, "sendTypeFile": { "message": "File" }, "sendTypeText": { "message": "Text" }, + "sendPasswordDescV3": { + "message": "Add an optional password for recipients to access this Send.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "createSend": { "message": "Napravi novo slanje", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -5068,19 +5148,15 @@ "message": "Obriši slanje", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, - "deleteSendConfirmation": { - "message": "Are you sure you want to delete this Send?", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "whatTypeOfSend": { - "message": "What type of Send is this?", + "deleteSendPermanentConfirmation": { + "message": "Are you sure you want to permanently delete this Send?", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "deletionDate": { "message": "Deletion date" }, - "deletionDateDesc": { - "message": "The Send will be permanently deleted on the specified date and time.", + "deletionDateDescV2": { + "message": "The Send will be permanently deleted on this date.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "expirationDate": { @@ -5093,21 +5169,6 @@ "maxAccessCount": { "message": "Maximum access count" }, - "maxAccessCountDesc": { - "message": "If set, users will no longer be able to access this Send once the maximum access count is reached.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "currentAccessCount": { - "message": "Current access count" - }, - "sendPasswordDesc": { - "message": "Optionally require a password for users to access this Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendNotesDesc": { - "message": "Private notes about this Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "disabled": { "message": "Disabled" }, @@ -5134,13 +5195,6 @@ "removePasswordConfirmation": { "message": "Are you sure you want to remove the password?" }, - "hideEmail": { - "message": "Hide my email address from recipients." - }, - "disableThisSend": { - "message": "Deactivate this Send so that no one can access it.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "allSends": { "message": "Sva slanja" }, @@ -5151,6 +5205,9 @@ "pendingDeletion": { "message": "Pending deletion" }, + "hideTextByDefault": { + "message": "Hide text by default" + }, "expired": { "message": "Expired" }, @@ -5372,13 +5429,6 @@ "message": "Always show member’s email address with recipients when creating or editing a Send.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, - "sendOptionsPolicyInEffect": { - "message": "The following organization policies are currently in effect:" - }, - "sendDisableHideEmailInEffect": { - "message": "Users are not allowed to hide their email address from recipients when creating or editing a Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "modifiedPolicyId": { "message": "Modified policy $ID$.", "placeholders": { @@ -5478,27 +5528,6 @@ "personalOwnershipCheckboxDesc": { "message": "Remove individual ownership for organization users" }, - "textHiddenByDefault": { - "message": "When accessing the Send, hide the text by default", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendNameDesc": { - "message": "A friendly name to describe this Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendTextDesc": { - "message": "The text you want to Send." - }, - "sendFileDesc": { - "message": "The file you want to Send." - }, - "copySendLinkOnSave": { - "message": "Copy the link to share this Send to my clipboard upon save." - }, - "sendLinkLabel": { - "message": "Pošalji vezu", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "send": { "message": "Slanje", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -5647,12 +5676,21 @@ "dateParsingError": { "message": "There was an error saving your deletion and expiration dates." }, + "hideYourEmail": { + "message": "Hide your email address from viewers." + }, "webAuthnFallbackMsg": { "message": "To verify your 2FA please click the button below." }, "webAuthnAuthenticate": { "message": "Authenticate WebAuthn" }, + "readSecurityKey": { + "message": "Read security key" + }, + "awaitingSecurityKeyInteraction": { + "message": "Awaiting security key interaction..." + }, "webAuthnNotSupported": { "message": "WebAuthn is not supported in this browser." }, @@ -7199,6 +7237,12 @@ "duoRequiredByOrgForAccount": { "message": "Duo two-step login is required for your account." }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Duo two-step login is required for your account. Follow the steps below to finish logging in." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Follow the steps below to finish logging in." + }, "launchDuo": { "message": "Launch Duo" }, @@ -9793,9 +9837,15 @@ "learnMoreAboutApi": { "message": "Learn more about Bitwarden's API" }, + "fileSend": { + "message": "File Send" + }, "fileSends": { "message": "File Sends" }, + "textSend": { + "message": "Text Send" + }, "textSends": { "message": "Text Sends" }, @@ -10029,10 +10079,6 @@ "message": "Include special characters", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "addAttachment": { "message": "Add attachment" }, @@ -10432,10 +10478,31 @@ "assignedExceedsAvailable": { "message": "Assigned seats exceed available seats." }, + "changeAtRiskPassword": { + "message": "Change at-risk password" + }, "removeUnlockWithPinPolicyTitle": { "message": "Remove Unlock with PIN" }, "removeUnlockWithPinPolicyDesc": { "message": "Do not allow members to unlock their account with a PIN." + }, + "limitedEventLogs": { + "message": "$PRODUCT_TYPE$ plans do not have access to real event logs", + "placeholders": { + "product_type": { + "content": "$1", + "example": "Teams" + } + } + }, + "upgradeForFullEvents": { + "message": "Get full access to organization event logs by upgrading to a Teams or Enterprise plan." + }, + "upgradeEventLogTitle": { + "message": "Upgrade for real event log data" + }, + "upgradeEventLogMessage": { + "message": "These events are examples only and do not reflect real events within your Bitwarden organization." } } diff --git a/apps/web/src/locales/sv/messages.json b/apps/web/src/locales/sv/messages.json index d3aeee603b8..218954600cb 100644 --- a/apps/web/src/locales/sv/messages.json +++ b/apps/web/src/locales/sv/messages.json @@ -5,6 +5,9 @@ "criticalApplications": { "message": "Kritiska applikationer" }, + "noCriticalAppsAtRisk": { + "message": "No critical applications at risk" + }, "accessIntelligence": { "message": "Access Intelligence" }, @@ -198,6 +201,9 @@ "notes": { "message": "Anteckningar" }, + "privateNote": { + "message": "Private note" + }, "note": { "message": "Anteckning" }, @@ -1026,6 +1032,9 @@ "no": { "message": "Nej" }, + "location": { + "message": "Location" + }, "loginOrCreateNewAccount": { "message": "Logga in eller skapa ett nytt konto för att komma åt ditt valv." }, @@ -1161,13 +1170,22 @@ "logInToBitwarden": { "message": "Logga in på Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "Enter the code sent to your email" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Enter the code from your authenticator app" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Press your YubiKey to authenticate" + }, "authenticationTimeout": { "message": "Authentication timeout" }, "authenticationSessionTimedOut": { "message": "The authentication session timed out. Please restart the login process." }, - "verifyIdentity": { + "verifyYourIdentity": { "message": "Verify your Identity" }, "weDontRecognizeThisDevice": { @@ -1443,12 +1461,22 @@ "rememberMe": { "message": "Kom ihåg mig" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Don't ask again on this device for 30 days" + }, "sendVerificationCodeEmailAgain": { "message": "Skicka e-postmeddelandet med verifieringskoden igen" }, "useAnotherTwoStepMethod": { "message": "Använd en annan metod för tvåstegsverifiering" }, + "selectAnotherMethod": { + "message": "Select another method", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Use your recovery code" + }, "insertYubiKey": { "message": "Sätt in din YubiKey i din dators USB-port och tryck på dess knapp." }, @@ -1467,6 +1495,9 @@ "twoStepOptions": { "message": "Alternativ för tvåstegsverifiering" }, + "selectTwoStepLoginMethod": { + "message": "Select two-step login method" + }, "recoveryCodeDesc": { "message": "Förlorat åtkomst till alla dina metoder för tvåstegsverifiering? Använd din återställningskod för att inaktivera tvåstegsverifiering på ditt konto." }, @@ -1509,6 +1540,9 @@ "webAuthnMigrated": { "message": "(Migrerad från FIDO)" }, + "openInNewTab": { + "message": "Open in new tab" + }, "emailTitle": { "message": "E-post" }, @@ -2224,6 +2258,9 @@ "revokeAccess": { "message": "Återkalla åtkomst" }, + "revoke": { + "message": "Revoke" + }, "twoStepLoginProviderEnabled": { "message": "Denna metod för tvåstegsverifiering är aktiverad på ditt konto." }, @@ -4081,6 +4118,12 @@ "updateBrowserDesc": { "message": "Du använder en webbläsare som inte stöds. Webbvalvet kanske inte fungerar som det ska." }, + "youHaveAPendingLoginRequest": { + "message": "You have a pending login request from another device." + }, + "reviewLoginRequest": { + "message": "Review login request" + }, "freeTrialEndPromptCount": { "message": "Your free trial ends in $COUNT$ days.", "placeholders": { @@ -4758,6 +4801,15 @@ "masterPassPolicyDesc": { "message": "Ange minimikrav för huvudlösenordsstyrka." }, + "passwordStrengthScore": { + "message": "Password strength score $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "twoStepLoginPolicyTitle": { "message": "Kräv tvåstegsverifiering" }, @@ -5038,12 +5090,40 @@ "requireSsoExemption": { "message": "Organisationens ägare och administratörer är undantagna från denna policy." }, + "limitSendViews": { + "message": "Limit views" + }, + "limitSendViewsHint": { + "message": "No one can view this Send after the limit is reached.", + "description": "Displayed under the limit views field on Send" + }, + "limitSendViewsCount": { + "message": "$ACCESSCOUNT$ views left", + "description": "Displayed under the limit views field on Send", + "placeholders": { + "accessCount": { + "content": "$1", + "example": "2" + } + } + }, + "sendDetails": { + "message": "Send details", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendTypeTextToShare": { + "message": "Text to share" + }, "sendTypeFile": { "message": "Fil" }, "sendTypeText": { "message": "Text" }, + "sendPasswordDescV3": { + "message": "Add an optional password for recipients to access this Send.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "createSend": { "message": "Ny Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -5068,19 +5148,15 @@ "message": "Radera Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, - "deleteSendConfirmation": { - "message": "Är du säker på att du vill radera denna Send?", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "whatTypeOfSend": { - "message": "Vilken typ av Send är detta?", + "deleteSendPermanentConfirmation": { + "message": "Are you sure you want to permanently delete this Send?", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "deletionDate": { "message": "Raderingsdatum" }, - "deletionDateDesc": { - "message": "Denna Send kommer att raderas permanent på angivet datum och klockslag.", + "deletionDateDescV2": { + "message": "The Send will be permanently deleted on this date.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "expirationDate": { @@ -5093,21 +5169,6 @@ "maxAccessCount": { "message": "Maximalt antal åtkomster" }, - "maxAccessCountDesc": { - "message": "Om angivet kommer användare inte längre kunna komma åt denna Send när det maximala antalet åtkomster har uppnåtts.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "currentAccessCount": { - "message": "Nuvarande antal åtkomster" - }, - "sendPasswordDesc": { - "message": "Kräv valfritt ett lösenord för att användare ska komma åt denna Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendNotesDesc": { - "message": "Privata anteckningar om denna Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "disabled": { "message": "Inaktiverad" }, @@ -5134,13 +5195,6 @@ "removePasswordConfirmation": { "message": "Är du säker på att du vill ta bort lösenordet?" }, - "hideEmail": { - "message": "Dölj min e-postadress för mottagare." - }, - "disableThisSend": { - "message": "Inaktivera denna Send så att ingen kan komma åt den.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "allSends": { "message": "Alla Sends" }, @@ -5151,6 +5205,9 @@ "pendingDeletion": { "message": "Väntar på radering" }, + "hideTextByDefault": { + "message": "Hide text by default" + }, "expired": { "message": "Utgången" }, @@ -5372,13 +5429,6 @@ "message": "Tillåt inte användare att dölja sin e-postadress från mottagare när de skapar eller redigerar en Send.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, - "sendOptionsPolicyInEffect": { - "message": "Följande organisationspolicyer är aktiva just nu:" - }, - "sendDisableHideEmailInEffect": { - "message": "Användare tillåts inte dölja sin e-postadress för mottagare när de skapar eller redigerar en Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "modifiedPolicyId": { "message": "Ändrade policyn $ID$.", "placeholders": { @@ -5478,27 +5528,6 @@ "personalOwnershipCheckboxDesc": { "message": "Inaktivera personligt ägarskap för organisationens användare" }, - "textHiddenByDefault": { - "message": "When accessing the Send, hide the text by default", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendNameDesc": { - "message": "A friendly name to describe this Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendTextDesc": { - "message": "Texten du vill skicka." - }, - "sendFileDesc": { - "message": "Filen du vill skicka." - }, - "copySendLinkOnSave": { - "message": "Copy the link to share this Send to my clipboard upon save." - }, - "sendLinkLabel": { - "message": "Send-länk", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "send": { "message": "Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -5647,12 +5676,21 @@ "dateParsingError": { "message": "Det gick inte att spara raderings- och utgångsdatum." }, + "hideYourEmail": { + "message": "Hide your email address from viewers." + }, "webAuthnFallbackMsg": { "message": "Klicka på knappen nedan för att verifiera din 2FA." }, "webAuthnAuthenticate": { "message": "Autentisera WebAuthn" }, + "readSecurityKey": { + "message": "Read security key" + }, + "awaitingSecurityKeyInteraction": { + "message": "Awaiting security key interaction..." + }, "webAuthnNotSupported": { "message": "WebAuthn stöds inte i denna webbläsare." }, @@ -7199,6 +7237,12 @@ "duoRequiredByOrgForAccount": { "message": "Duo two-step login is required for your account." }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Duo two-step login is required for your account. Follow the steps below to finish logging in." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Follow the steps below to finish logging in." + }, "launchDuo": { "message": "Starta Duo" }, @@ -9793,9 +9837,15 @@ "learnMoreAboutApi": { "message": "Läs mer om Bitwardens API" }, + "fileSend": { + "message": "File Send" + }, "fileSends": { "message": "File Sends" }, + "textSend": { + "message": "Text Send" + }, "textSends": { "message": "Text Sends" }, @@ -10029,10 +10079,6 @@ "message": "Inkludera specialtecken", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "addAttachment": { "message": "Lägg till bilaga" }, @@ -10432,10 +10478,31 @@ "assignedExceedsAvailable": { "message": "Assigned seats exceed available seats." }, + "changeAtRiskPassword": { + "message": "Change at-risk password" + }, "removeUnlockWithPinPolicyTitle": { "message": "Remove Unlock with PIN" }, "removeUnlockWithPinPolicyDesc": { "message": "Do not allow members to unlock their account with a PIN." + }, + "limitedEventLogs": { + "message": "$PRODUCT_TYPE$ plans do not have access to real event logs", + "placeholders": { + "product_type": { + "content": "$1", + "example": "Teams" + } + } + }, + "upgradeForFullEvents": { + "message": "Get full access to organization event logs by upgrading to a Teams or Enterprise plan." + }, + "upgradeEventLogTitle": { + "message": "Upgrade for real event log data" + }, + "upgradeEventLogMessage": { + "message": "These events are examples only and do not reflect real events within your Bitwarden organization." } } diff --git a/apps/web/src/locales/te/messages.json b/apps/web/src/locales/te/messages.json index 1c4e2e55201..c205ace9ac1 100644 --- a/apps/web/src/locales/te/messages.json +++ b/apps/web/src/locales/te/messages.json @@ -5,6 +5,9 @@ "criticalApplications": { "message": "Critical applications" }, + "noCriticalAppsAtRisk": { + "message": "No critical applications at risk" + }, "accessIntelligence": { "message": "Access Intelligence" }, @@ -198,6 +201,9 @@ "notes": { "message": "Notes" }, + "privateNote": { + "message": "Private note" + }, "note": { "message": "Note" }, @@ -1026,6 +1032,9 @@ "no": { "message": "No" }, + "location": { + "message": "Location" + }, "loginOrCreateNewAccount": { "message": "Log in or create a new account to access your secure vault." }, @@ -1161,13 +1170,22 @@ "logInToBitwarden": { "message": "Log in to Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "Enter the code sent to your email" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Enter the code from your authenticator app" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Press your YubiKey to authenticate" + }, "authenticationTimeout": { "message": "Authentication timeout" }, "authenticationSessionTimedOut": { "message": "The authentication session timed out. Please restart the login process." }, - "verifyIdentity": { + "verifyYourIdentity": { "message": "Verify your Identity" }, "weDontRecognizeThisDevice": { @@ -1443,12 +1461,22 @@ "rememberMe": { "message": "Remember me" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Don't ask again on this device for 30 days" + }, "sendVerificationCodeEmailAgain": { "message": "Send verification code email again" }, "useAnotherTwoStepMethod": { "message": "Use another two-step login method" }, + "selectAnotherMethod": { + "message": "Select another method", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Use your recovery code" + }, "insertYubiKey": { "message": "Insert your YubiKey into your computer's USB port, then touch its button." }, @@ -1467,6 +1495,9 @@ "twoStepOptions": { "message": "Two-step login options" }, + "selectTwoStepLoginMethod": { + "message": "Select two-step login method" + }, "recoveryCodeDesc": { "message": "Lost access to all of your two-step login providers? Use your recovery code to turn off all two-step login providers from your account." }, @@ -1509,6 +1540,9 @@ "webAuthnMigrated": { "message": "(Migrated from FIDO)" }, + "openInNewTab": { + "message": "Open in new tab" + }, "emailTitle": { "message": "Email" }, @@ -2224,6 +2258,9 @@ "revokeAccess": { "message": "Revoke access" }, + "revoke": { + "message": "Revoke" + }, "twoStepLoginProviderEnabled": { "message": "This two-step login provider is active on your account." }, @@ -4081,6 +4118,12 @@ "updateBrowserDesc": { "message": "You are using an unsupported web browser. The web vault may not function properly." }, + "youHaveAPendingLoginRequest": { + "message": "You have a pending login request from another device." + }, + "reviewLoginRequest": { + "message": "Review login request" + }, "freeTrialEndPromptCount": { "message": "Your free trial ends in $COUNT$ days.", "placeholders": { @@ -4758,6 +4801,15 @@ "masterPassPolicyDesc": { "message": "Set requirements for master password strength." }, + "passwordStrengthScore": { + "message": "Password strength score $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "twoStepLoginPolicyTitle": { "message": "Require two-step login" }, @@ -5038,12 +5090,40 @@ "requireSsoExemption": { "message": "Organization owners and admins are exempt from this policy's enforcement." }, + "limitSendViews": { + "message": "Limit views" + }, + "limitSendViewsHint": { + "message": "No one can view this Send after the limit is reached.", + "description": "Displayed under the limit views field on Send" + }, + "limitSendViewsCount": { + "message": "$ACCESSCOUNT$ views left", + "description": "Displayed under the limit views field on Send", + "placeholders": { + "accessCount": { + "content": "$1", + "example": "2" + } + } + }, + "sendDetails": { + "message": "Send details", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendTypeTextToShare": { + "message": "Text to share" + }, "sendTypeFile": { "message": "File" }, "sendTypeText": { "message": "Text" }, + "sendPasswordDescV3": { + "message": "Add an optional password for recipients to access this Send.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "createSend": { "message": "New Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -5068,19 +5148,15 @@ "message": "Delete Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, - "deleteSendConfirmation": { - "message": "Are you sure you want to delete this Send?", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "whatTypeOfSend": { - "message": "What type of Send is this?", + "deleteSendPermanentConfirmation": { + "message": "Are you sure you want to permanently delete this Send?", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "deletionDate": { "message": "Deletion date" }, - "deletionDateDesc": { - "message": "The Send will be permanently deleted on the specified date and time.", + "deletionDateDescV2": { + "message": "The Send will be permanently deleted on this date.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "expirationDate": { @@ -5093,21 +5169,6 @@ "maxAccessCount": { "message": "Maximum access count" }, - "maxAccessCountDesc": { - "message": "If set, users will no longer be able to access this Send once the maximum access count is reached.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "currentAccessCount": { - "message": "Current access count" - }, - "sendPasswordDesc": { - "message": "Optionally require a password for users to access this Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendNotesDesc": { - "message": "Private notes about this Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "disabled": { "message": "Disabled" }, @@ -5134,13 +5195,6 @@ "removePasswordConfirmation": { "message": "Are you sure you want to remove the password?" }, - "hideEmail": { - "message": "Hide my email address from recipients." - }, - "disableThisSend": { - "message": "Deactivate this Send so that no one can access it.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "allSends": { "message": "All Sends" }, @@ -5151,6 +5205,9 @@ "pendingDeletion": { "message": "Pending deletion" }, + "hideTextByDefault": { + "message": "Hide text by default" + }, "expired": { "message": "Expired" }, @@ -5372,13 +5429,6 @@ "message": "Always show member’s email address with recipients when creating or editing a Send.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, - "sendOptionsPolicyInEffect": { - "message": "The following organization policies are currently in effect:" - }, - "sendDisableHideEmailInEffect": { - "message": "Users are not allowed to hide their email address from recipients when creating or editing a Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "modifiedPolicyId": { "message": "Modified policy $ID$.", "placeholders": { @@ -5478,27 +5528,6 @@ "personalOwnershipCheckboxDesc": { "message": "Remove individual ownership for organization users" }, - "textHiddenByDefault": { - "message": "When accessing the Send, hide the text by default", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendNameDesc": { - "message": "A friendly name to describe this Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendTextDesc": { - "message": "The text you want to Send." - }, - "sendFileDesc": { - "message": "The file you want to Send." - }, - "copySendLinkOnSave": { - "message": "Copy the link to share this Send to my clipboard upon save." - }, - "sendLinkLabel": { - "message": "Send link", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "send": { "message": "Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -5647,12 +5676,21 @@ "dateParsingError": { "message": "There was an error saving your deletion and expiration dates." }, + "hideYourEmail": { + "message": "Hide your email address from viewers." + }, "webAuthnFallbackMsg": { "message": "To verify your 2FA please click the button below." }, "webAuthnAuthenticate": { "message": "Authenticate WebAuthn" }, + "readSecurityKey": { + "message": "Read security key" + }, + "awaitingSecurityKeyInteraction": { + "message": "Awaiting security key interaction..." + }, "webAuthnNotSupported": { "message": "WebAuthn is not supported in this browser." }, @@ -7199,6 +7237,12 @@ "duoRequiredByOrgForAccount": { "message": "Duo two-step login is required for your account." }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Duo two-step login is required for your account. Follow the steps below to finish logging in." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Follow the steps below to finish logging in." + }, "launchDuo": { "message": "Launch Duo" }, @@ -9793,9 +9837,15 @@ "learnMoreAboutApi": { "message": "Learn more about Bitwarden's API" }, + "fileSend": { + "message": "File Send" + }, "fileSends": { "message": "File Sends" }, + "textSend": { + "message": "Text Send" + }, "textSends": { "message": "Text Sends" }, @@ -10029,10 +10079,6 @@ "message": "Include special characters", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "addAttachment": { "message": "Add attachment" }, @@ -10432,10 +10478,31 @@ "assignedExceedsAvailable": { "message": "Assigned seats exceed available seats." }, + "changeAtRiskPassword": { + "message": "Change at-risk password" + }, "removeUnlockWithPinPolicyTitle": { "message": "Remove Unlock with PIN" }, "removeUnlockWithPinPolicyDesc": { "message": "Do not allow members to unlock their account with a PIN." + }, + "limitedEventLogs": { + "message": "$PRODUCT_TYPE$ plans do not have access to real event logs", + "placeholders": { + "product_type": { + "content": "$1", + "example": "Teams" + } + } + }, + "upgradeForFullEvents": { + "message": "Get full access to organization event logs by upgrading to a Teams or Enterprise plan." + }, + "upgradeEventLogTitle": { + "message": "Upgrade for real event log data" + }, + "upgradeEventLogMessage": { + "message": "These events are examples only and do not reflect real events within your Bitwarden organization." } } diff --git a/apps/web/src/locales/th/messages.json b/apps/web/src/locales/th/messages.json index d78b2e863de..945ada11394 100644 --- a/apps/web/src/locales/th/messages.json +++ b/apps/web/src/locales/th/messages.json @@ -5,6 +5,9 @@ "criticalApplications": { "message": "Critical applications" }, + "noCriticalAppsAtRisk": { + "message": "No critical applications at risk" + }, "accessIntelligence": { "message": "Access Intelligence" }, @@ -198,6 +201,9 @@ "notes": { "message": "หมายเหตุ" }, + "privateNote": { + "message": "Private note" + }, "note": { "message": "Note" }, @@ -1026,6 +1032,9 @@ "no": { "message": "ไม่ใช่" }, + "location": { + "message": "Location" + }, "loginOrCreateNewAccount": { "message": "ล็อกอิน หรือ สร้างบัญชีใหม่ เพื่อใช้งานตู้นิรภัยของคุณ" }, @@ -1161,13 +1170,22 @@ "logInToBitwarden": { "message": "Log in to Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "Enter the code sent to your email" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Enter the code from your authenticator app" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Press your YubiKey to authenticate" + }, "authenticationTimeout": { "message": "Authentication timeout" }, "authenticationSessionTimedOut": { "message": "The authentication session timed out. Please restart the login process." }, - "verifyIdentity": { + "verifyYourIdentity": { "message": "Verify your Identity" }, "weDontRecognizeThisDevice": { @@ -1443,12 +1461,22 @@ "rememberMe": { "message": "จำการเข้าระบบของฉันไว้" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Don't ask again on this device for 30 days" + }, "sendVerificationCodeEmailAgain": { "message": "ส่งรหัสยืนยันไปยังอีเมลอีกครั้ง" }, "useAnotherTwoStepMethod": { "message": "ใช้วิธีลงชื่อเข้าใช้แบบสองขั้นตอนวิธีอื่น" }, + "selectAnotherMethod": { + "message": "Select another method", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Use your recovery code" + }, "insertYubiKey": { "message": "Insert your YubiKey into your computer's USB port, then touch its button." }, @@ -1467,6 +1495,9 @@ "twoStepOptions": { "message": "ตัวเลือกการเข้าสู่ระบบแบบสองขั้นตอน" }, + "selectTwoStepLoginMethod": { + "message": "Select two-step login method" + }, "recoveryCodeDesc": { "message": "Lost access to all of your two-step login providers? Use your recovery code to turn off all two-step login providers from your account." }, @@ -1509,6 +1540,9 @@ "webAuthnMigrated": { "message": "(Migrated from FIDO)" }, + "openInNewTab": { + "message": "Open in new tab" + }, "emailTitle": { "message": "อีเมล" }, @@ -2224,6 +2258,9 @@ "revokeAccess": { "message": "Revoke access" }, + "revoke": { + "message": "Revoke" + }, "twoStepLoginProviderEnabled": { "message": "This two-step login provider is active on your account." }, @@ -4081,6 +4118,12 @@ "updateBrowserDesc": { "message": "You are using an unsupported web browser. The web vault may not function properly." }, + "youHaveAPendingLoginRequest": { + "message": "You have a pending login request from another device." + }, + "reviewLoginRequest": { + "message": "Review login request" + }, "freeTrialEndPromptCount": { "message": "Your free trial ends in $COUNT$ days.", "placeholders": { @@ -4758,6 +4801,15 @@ "masterPassPolicyDesc": { "message": "Set requirements for master password strength." }, + "passwordStrengthScore": { + "message": "Password strength score $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "twoStepLoginPolicyTitle": { "message": "Require two-step login" }, @@ -5038,12 +5090,40 @@ "requireSsoExemption": { "message": "Organization owners and admins are exempt from this policy's enforcement." }, + "limitSendViews": { + "message": "Limit views" + }, + "limitSendViewsHint": { + "message": "No one can view this Send after the limit is reached.", + "description": "Displayed under the limit views field on Send" + }, + "limitSendViewsCount": { + "message": "$ACCESSCOUNT$ views left", + "description": "Displayed under the limit views field on Send", + "placeholders": { + "accessCount": { + "content": "$1", + "example": "2" + } + } + }, + "sendDetails": { + "message": "Send details", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendTypeTextToShare": { + "message": "Text to share" + }, "sendTypeFile": { "message": "File" }, "sendTypeText": { "message": "Text" }, + "sendPasswordDescV3": { + "message": "Add an optional password for recipients to access this Send.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "createSend": { "message": "New Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -5068,19 +5148,15 @@ "message": "Delete Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, - "deleteSendConfirmation": { - "message": "Are you sure you want to delete this Send?", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "whatTypeOfSend": { - "message": "What type of Send is this?", + "deleteSendPermanentConfirmation": { + "message": "Are you sure you want to permanently delete this Send?", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "deletionDate": { "message": "Deletion date" }, - "deletionDateDesc": { - "message": "The Send will be permanently deleted on the specified date and time.", + "deletionDateDescV2": { + "message": "The Send will be permanently deleted on this date.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "expirationDate": { @@ -5093,21 +5169,6 @@ "maxAccessCount": { "message": "Maximum access count" }, - "maxAccessCountDesc": { - "message": "If set, users will no longer be able to access this Send once the maximum access count is reached.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "currentAccessCount": { - "message": "Current access count" - }, - "sendPasswordDesc": { - "message": "Optionally require a password for users to access this Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendNotesDesc": { - "message": "Private notes about this Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "disabled": { "message": "Disabled" }, @@ -5134,13 +5195,6 @@ "removePasswordConfirmation": { "message": "Are you sure you want to remove the password?" }, - "hideEmail": { - "message": "Hide my email address from recipients." - }, - "disableThisSend": { - "message": "Deactivate this Send so that no one can access it.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "allSends": { "message": "All Sends" }, @@ -5151,6 +5205,9 @@ "pendingDeletion": { "message": "Pending deletion" }, + "hideTextByDefault": { + "message": "Hide text by default" + }, "expired": { "message": "Expired" }, @@ -5372,13 +5429,6 @@ "message": "Always show member’s email address with recipients when creating or editing a Send.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, - "sendOptionsPolicyInEffect": { - "message": "The following organization policies are currently in effect:" - }, - "sendDisableHideEmailInEffect": { - "message": "Users are not allowed to hide their email address from recipients when creating or editing a Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "modifiedPolicyId": { "message": "Modified policy $ID$.", "placeholders": { @@ -5478,27 +5528,6 @@ "personalOwnershipCheckboxDesc": { "message": "Remove individual ownership for organization users" }, - "textHiddenByDefault": { - "message": "When accessing the Send, hide the text by default", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendNameDesc": { - "message": "A friendly name to describe this Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendTextDesc": { - "message": "The text you want to Send." - }, - "sendFileDesc": { - "message": "The file you want to Send." - }, - "copySendLinkOnSave": { - "message": "Copy the link to share this Send to my clipboard upon save." - }, - "sendLinkLabel": { - "message": "Send link", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "send": { "message": "Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -5647,12 +5676,21 @@ "dateParsingError": { "message": "There was an error saving your deletion and expiration dates." }, + "hideYourEmail": { + "message": "Hide your email address from viewers." + }, "webAuthnFallbackMsg": { "message": "To verify your 2FA please click the button below." }, "webAuthnAuthenticate": { "message": "Authenticate WebAuthn" }, + "readSecurityKey": { + "message": "Read security key" + }, + "awaitingSecurityKeyInteraction": { + "message": "Awaiting security key interaction..." + }, "webAuthnNotSupported": { "message": "WebAuthn is not supported in this browser." }, @@ -7199,6 +7237,12 @@ "duoRequiredByOrgForAccount": { "message": "Duo two-step login is required for your account." }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Duo two-step login is required for your account. Follow the steps below to finish logging in." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Follow the steps below to finish logging in." + }, "launchDuo": { "message": "Launch Duo" }, @@ -9793,9 +9837,15 @@ "learnMoreAboutApi": { "message": "Learn more about Bitwarden's API" }, + "fileSend": { + "message": "File Send" + }, "fileSends": { "message": "File Sends" }, + "textSend": { + "message": "Text Send" + }, "textSends": { "message": "Text Sends" }, @@ -10029,10 +10079,6 @@ "message": "Include special characters", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "addAttachment": { "message": "Add attachment" }, @@ -10432,10 +10478,31 @@ "assignedExceedsAvailable": { "message": "Assigned seats exceed available seats." }, + "changeAtRiskPassword": { + "message": "Change at-risk password" + }, "removeUnlockWithPinPolicyTitle": { "message": "Remove Unlock with PIN" }, "removeUnlockWithPinPolicyDesc": { "message": "Do not allow members to unlock their account with a PIN." + }, + "limitedEventLogs": { + "message": "$PRODUCT_TYPE$ plans do not have access to real event logs", + "placeholders": { + "product_type": { + "content": "$1", + "example": "Teams" + } + } + }, + "upgradeForFullEvents": { + "message": "Get full access to organization event logs by upgrading to a Teams or Enterprise plan." + }, + "upgradeEventLogTitle": { + "message": "Upgrade for real event log data" + }, + "upgradeEventLogMessage": { + "message": "These events are examples only and do not reflect real events within your Bitwarden organization." } } diff --git a/apps/web/src/locales/tr/messages.json b/apps/web/src/locales/tr/messages.json index 94c9633e225..a2af30a2adf 100644 --- a/apps/web/src/locales/tr/messages.json +++ b/apps/web/src/locales/tr/messages.json @@ -5,6 +5,9 @@ "criticalApplications": { "message": "Kritik uygulamalar" }, + "noCriticalAppsAtRisk": { + "message": "No critical applications at risk" + }, "accessIntelligence": { "message": "Access Intelligence" }, @@ -198,6 +201,9 @@ "notes": { "message": "Notlar" }, + "privateNote": { + "message": "Özel not" + }, "note": { "message": "Not" }, @@ -1026,6 +1032,9 @@ "no": { "message": "Hayır" }, + "location": { + "message": "Konum" + }, "loginOrCreateNewAccount": { "message": "Güvenli kasanıza ulaşmak için giriş yapın veya yeni bir hesap oluşturun." }, @@ -1161,14 +1170,23 @@ "logInToBitwarden": { "message": "Log in to Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "E-posta adresinize gönderilen kodu girin" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Kimlik doğrulama uygulamanızdaki kodu girin" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Press your YubiKey to authenticate" + }, "authenticationTimeout": { "message": "Authentication timeout" }, "authenticationSessionTimedOut": { "message": "The authentication session timed out. Please restart the login process." }, - "verifyIdentity": { - "message": "Kimliğinizi doğrulayın" + "verifyYourIdentity": { + "message": "Verify your Identity" }, "weDontRecognizeThisDevice": { "message": "Bu cihazı tanıyamadık. Kimliğinizi doğrulamak için e-postanıza gönderilen kodu girin." @@ -1399,7 +1417,7 @@ "message": "Erişimi reddet" }, "notificationSentDeviceAnchor": { - "message": "web app" + "message": "web uygulaması" }, "notificationSentDevicePart2": { "message": "Make sure the Fingerprint phrase matches the one below before approving." @@ -1443,12 +1461,22 @@ "rememberMe": { "message": "Beni hatırla" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Don't ask again on this device for 30 days" + }, "sendVerificationCodeEmailAgain": { "message": "Doğrulama kodu e-postasını yeniden gönder" }, "useAnotherTwoStepMethod": { "message": "Başka bir iki aşamalı giriş yöntemini kullan" }, + "selectAnotherMethod": { + "message": "Select another method", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Use your recovery code" + }, "insertYubiKey": { "message": "YubiKey'inizi bilgisayarınızın USB portuna takın, ardından düğmesine dokunun." }, @@ -1467,6 +1495,9 @@ "twoStepOptions": { "message": "İki aşamalı giriş seçenekleri" }, + "selectTwoStepLoginMethod": { + "message": "Select two-step login method" + }, "recoveryCodeDesc": { "message": "İki aşamalı giriş sağlayıcılarınıza ulaşamıyor musunuz? Kurtarma kodunuzu kullanarak hesabınızdaki tüm iki aşamalı giriş sağlayıcılarını devre dışı bırakabilirsiniz." }, @@ -1509,6 +1540,9 @@ "webAuthnMigrated": { "message": "(FIDO'dan taşındı)" }, + "openInNewTab": { + "message": "Yeni sekmede aç" + }, "emailTitle": { "message": "E-posta" }, @@ -1797,7 +1831,7 @@ "message": "Lütfen yeniden giriş yapın." }, "currentSession": { - "message": "Current session" + "message": "Geçerli oturum" }, "requestPending": { "message": "Request pending" @@ -2204,7 +2238,7 @@ "message": "Yönet" }, "manageCollection": { - "message": "Manage collection" + "message": "Koleksiyonu yönet" }, "viewItems": { "message": "View items" @@ -2224,6 +2258,9 @@ "revokeAccess": { "message": "Erişimi iptal et" }, + "revoke": { + "message": "İptal et" + }, "twoStepLoginProviderEnabled": { "message": "Bu iki aşamalı giriş sağlayıcısı hesabınızda etkin durumda." }, @@ -4081,6 +4118,12 @@ "updateBrowserDesc": { "message": "Desteklenmeyen bir web tarayıcısı kullanıyorsunuz. Web kasası düzgün çalışmayabilir." }, + "youHaveAPendingLoginRequest": { + "message": "You have a pending login request from another device." + }, + "reviewLoginRequest": { + "message": "Review login request" + }, "freeTrialEndPromptCount": { "message": "Your free trial ends in $COUNT$ days.", "placeholders": { @@ -4758,6 +4801,15 @@ "masterPassPolicyDesc": { "message": "Ana parola gücü gereksinimlerini ayarlayın." }, + "passwordStrengthScore": { + "message": "Password strength score $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "twoStepLoginPolicyTitle": { "message": "İki adımlı girişi zorunlu tut" }, @@ -5038,12 +5090,40 @@ "requireSsoExemption": { "message": "Kuruluş sahipleri ve yöneticileri bu ilkenin uygulanmasından muaf tutulur." }, + "limitSendViews": { + "message": "Gösterimi sınırla" + }, + "limitSendViewsHint": { + "message": "Bu sınıra ulaşıldıktan sonra bu Send'i kimse göremez.", + "description": "Displayed under the limit views field on Send" + }, + "limitSendViewsCount": { + "message": "$ACCESSCOUNT$ gösterim kaldı", + "description": "Displayed under the limit views field on Send", + "placeholders": { + "accessCount": { + "content": "$1", + "example": "2" + } + } + }, + "sendDetails": { + "message": "Send ayrıntıları", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendTypeTextToShare": { + "message": "Paylaşılacak metin" + }, "sendTypeFile": { "message": "Dosya" }, "sendTypeText": { "message": "Metin" }, + "sendPasswordDescV3": { + "message": "Alıcıların bu Send'e erişmesi için isterseniz parola ekleyebilirsiniz.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "createSend": { "message": "Yeni Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -5068,19 +5148,15 @@ "message": "Send'i sil", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, - "deleteSendConfirmation": { - "message": "Bu Send'i silmek istediğinizden emin misiniz?", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "whatTypeOfSend": { - "message": "Bu ne tür bir Send?", + "deleteSendPermanentConfirmation": { + "message": "Bu Send'i kalıcı olarak silmek istediğinizden emin misiniz?", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "deletionDate": { "message": "Silinme tarihi" }, - "deletionDateDesc": { - "message": "Bu Send belirtilen tarih ve saatte kalıcı olacak silinecek.", + "deletionDateDescV2": { + "message": "Bu Send belirtilen tarihte kalıcı olacak silinecek.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "expirationDate": { @@ -5093,21 +5169,6 @@ "maxAccessCount": { "message": "Maksimum erişim sayısı" }, - "maxAccessCountDesc": { - "message": "Bunu ayarlarsanız maksimum erişim sayısına ulaşıldıktan sonra bu Send'e erişilemeyecektir.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "currentAccessCount": { - "message": "Mevcut erişim sayısı" - }, - "sendPasswordDesc": { - "message": "Kullanıcıların bu Send'e erişmek için parola girmelerini isteyebilirsiniz.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendNotesDesc": { - "message": "Bu Send ile ilgili özel notlar.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "disabled": { "message": "Devre dışı" }, @@ -5134,13 +5195,6 @@ "removePasswordConfirmation": { "message": "Parolayı kaldırmak istediğinizden emin misiniz?" }, - "hideEmail": { - "message": "E-posta adresimi alıcılardan gizle." - }, - "disableThisSend": { - "message": "Kimsenin erişememesi için bu Send'i devre dışı bırak.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "allSends": { "message": "Tüm Send'ler" }, @@ -5151,6 +5205,9 @@ "pendingDeletion": { "message": "Silinmesi bekleniyor" }, + "hideTextByDefault": { + "message": "Metni varsayılan olarak gizle" + }, "expired": { "message": "Süresi dolmuş" }, @@ -5372,13 +5429,6 @@ "message": "Send oluştururken veya düzenlerken üyelerin e-posta adreslerini her zaman alıcılara göster.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, - "sendOptionsPolicyInEffect": { - "message": "Şu anda yürüklükte olan kuruluş ilkeleri:" - }, - "sendDisableHideEmailInEffect": { - "message": "Kullanıcıların Send oluştururken veya düzenlerken alıcılardan e-posta adreslerini gizlemelerine izin verilmiyor.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "modifiedPolicyId": { "message": "$ID$ ilkesi düzenlendi.", "placeholders": { @@ -5478,27 +5528,6 @@ "personalOwnershipCheckboxDesc": { "message": "Kuruluş kullanıcıları için kişisel sahipliği kapat" }, - "textHiddenByDefault": { - "message": "Send'e erişirken varsayılan olarak metni gizle", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendNameDesc": { - "message": "Bu Send'i açıklayan anlaşılır bir ad.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendTextDesc": { - "message": "Göndermek istediğiniz metin." - }, - "sendFileDesc": { - "message": "Göndermek istediğiniz dosya." - }, - "copySendLinkOnSave": { - "message": "Kaydettikten sonra bu Send'i paylaşma linkini panoya kopyala." - }, - "sendLinkLabel": { - "message": "Send bağlantısı", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "send": { "message": "Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -5647,12 +5676,21 @@ "dateParsingError": { "message": "Silinme ve son kullanma tarihleriniz kaydedilirken bir hata oluştu." }, + "hideYourEmail": { + "message": "E-posta adresimi Send'i görüntüleyenlerden gizle." + }, "webAuthnFallbackMsg": { "message": "İki aşamalı doğrulamanızı onaylamak için aşağıdaki düğmeye tıklayın." }, "webAuthnAuthenticate": { "message": "WebAutn ile doğrula" }, + "readSecurityKey": { + "message": "Güvenlik anahtarını oku" + }, + "awaitingSecurityKeyInteraction": { + "message": "Awaiting security key interaction..." + }, "webAuthnNotSupported": { "message": "WebAuthn bu tarayıcıda desteklenmiyor." }, @@ -7199,6 +7237,12 @@ "duoRequiredByOrgForAccount": { "message": "Hesabınız için Duo iki adımlı giriş gereklidir." }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Duo two-step login is required for your account. Follow the steps below to finish logging in." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Follow the steps below to finish logging in." + }, "launchDuo": { "message": "Duo'yu başlat" }, @@ -8468,7 +8512,7 @@ "message": "Device removed" }, "removeDevice": { - "message": "Remove device" + "message": "Cihazı kaldır" }, "removeDeviceConfirmation": { "message": "Are you sure you want to remove this device?" @@ -9269,7 +9313,7 @@ "message": "SCIM" }, "scimIntegrationDescStart": { - "message": "Configure ", + "message": "Yapılandır ", "description": "This represents the beginning of a sentence, broken up to include links. The full sentence will be 'Configure SCIM (System for Cross-domain Identity Management) to automatically provision users and groups to Bitwarden using the implementation guide for your Identity Provider" }, "scimIntegrationDescEnd": { @@ -9558,7 +9602,7 @@ "message": "Export client report" }, "memberAccessReport": { - "message": "Member access" + "message": "Üye erişimi" }, "memberAccessReportDesc": { "message": "Ensure members have access to the right credentials and their accounts are secure. Use this report to obtain a CSV of member access and account configurations." @@ -9793,9 +9837,15 @@ "learnMoreAboutApi": { "message": "Learn more about Bitwarden's API" }, + "fileSend": { + "message": "Dosya Send'i" + }, "fileSends": { "message": "Dosya Send'leri" }, + "textSend": { + "message": "Metin Send'i" + }, "textSends": { "message": "Metin Send'leri" }, @@ -9884,7 +9934,7 @@ "message": "Access to Premium features" }, "additionalStorageGbMessage": { - "message": "GB additional storage" + "message": "GB ek depolama" }, "sshKeyAlgorithm": { "message": "Key algorithm" @@ -9911,13 +9961,13 @@ "message": "ED25519" }, "sshKeyAlgorithmRSA2048": { - "message": "RSA 2048-Bit" + "message": "RSA 2048 bit" }, "sshKeyAlgorithmRSA3072": { - "message": "RSA 3072-Bit" + "message": "RSA 3072 bit" }, "sshKeyAlgorithmRSA4096": { - "message": "RSA 4096-Bit" + "message": "RSA 4096 bit" }, "premiumAccounts": { "message": "6 premium hesap" @@ -9959,7 +10009,7 @@ "message": "20 makine hesabı" }, "current": { - "message": "Current" + "message": "Geçerli" }, "secretsManagerSubscriptionInfo": { "message": "Secrets Manager aboneliğiniz seçtiğiniz plana göre yükseltilecektir" @@ -10029,10 +10079,6 @@ "message": "Özel karakterleri dahil et", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "addAttachment": { "message": "Dosya ekle" }, @@ -10200,7 +10246,7 @@ "message": "Remove members" }, "devices": { - "message": "Devices" + "message": "Cihazlar" }, "deviceListDescription": { "message": "Your account was logged in to each of the devices below. If you do not recognize a device, remove it now." @@ -10297,19 +10343,19 @@ "message": "Opening the Bitwarden browser extension" }, "somethingWentWrong": { - "message": "Something went wrong..." + "message": "Bir şeyler ters gitti..." }, "openingExtensionError": { "message": "We had trouble opening the Bitwarden browser extension. Click the button to open it now." }, "openExtension": { - "message": "Open extension" + "message": "Uzantıyı aç" }, "doNotHaveExtension": { "message": "Don't have the Bitwarden browser extension?" }, "installExtension": { - "message": "Install extension" + "message": "Uzantıyı yükle" }, "openedExtension": { "message": "Opened the browser extension" @@ -10432,10 +10478,31 @@ "assignedExceedsAvailable": { "message": "Assigned seats exceed available seats." }, + "changeAtRiskPassword": { + "message": "Change at-risk password" + }, "removeUnlockWithPinPolicyTitle": { "message": "Remove Unlock with PIN" }, "removeUnlockWithPinPolicyDesc": { "message": "Do not allow members to unlock their account with a PIN." + }, + "limitedEventLogs": { + "message": "$PRODUCT_TYPE$ plans do not have access to real event logs", + "placeholders": { + "product_type": { + "content": "$1", + "example": "Teams" + } + } + }, + "upgradeForFullEvents": { + "message": "Get full access to organization event logs by upgrading to a Teams or Enterprise plan." + }, + "upgradeEventLogTitle": { + "message": "Upgrade for real event log data" + }, + "upgradeEventLogMessage": { + "message": "These events are examples only and do not reflect real events within your Bitwarden organization." } } diff --git a/apps/web/src/locales/uk/messages.json b/apps/web/src/locales/uk/messages.json index 85f9cfafab1..86e725f32cb 100644 --- a/apps/web/src/locales/uk/messages.json +++ b/apps/web/src/locales/uk/messages.json @@ -5,6 +5,9 @@ "criticalApplications": { "message": "Критичні програми" }, + "noCriticalAppsAtRisk": { + "message": "Немає критичних програм із ризиком" + }, "accessIntelligence": { "message": "Управління доступом" }, @@ -198,6 +201,9 @@ "notes": { "message": "Нотатки" }, + "privateNote": { + "message": "Приватна нотатка" + }, "note": { "message": "Нотатка" }, @@ -465,16 +471,16 @@ "message": "Редагування" }, "newFolder": { - "message": "New folder" + "message": "Нова тека" }, "folderName": { - "message": "Folder name" + "message": "Назва теки" }, "folderHintText": { - "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums" + "message": "Зробіть теку вкладеною, вказавши після основної теки \"/\". Наприклад: Обговорення/Форуми" }, "deleteFolderPermanently": { - "message": "Are you sure you want to permanently delete this folder?" + "message": "Ви дійсно хочете остаточно видалити цю теку?" }, "baseDomain": { "message": "Основний домен", @@ -1026,6 +1032,9 @@ "no": { "message": "Ні" }, + "location": { + "message": "Розташування" + }, "loginOrCreateNewAccount": { "message": "Для доступу до сховища увійдіть в обліковий запис, або створіть новий." }, @@ -1161,13 +1170,22 @@ "logInToBitwarden": { "message": "Увійти в Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "Введіть код, надісланий вам електронною поштою" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Введіть код з програми автентифікації" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Натисніть свій YubiKey для автентифікації" + }, "authenticationTimeout": { "message": "Час очікування автентифікації" }, "authenticationSessionTimedOut": { "message": "Час очікування сеансу автентифікації завершився. Перезапустіть процес входу в систему." }, - "verifyIdentity": { + "verifyYourIdentity": { "message": "Підтвердьте свою особу" }, "weDontRecognizeThisDevice": { @@ -1186,7 +1204,7 @@ "message": "Ініційовано вхід" }, "logInRequestSent": { - "message": "Request sent" + "message": "Запит надіслано" }, "submit": { "message": "Відправити" @@ -1378,13 +1396,13 @@ "message": "Сповіщення було надіслано на ваш пристрій." }, "notificationSentDevicePart1": { - "message": "Unlock Bitwarden on your device or on the " + "message": "Розблокуйте Bitwarden на своєму пристрої або у " }, "areYouTryingToAccessYourAccount": { - "message": "Are you trying to access your account?" + "message": "Ви намагаєтесь отримати доступ до свого облікового запису?" }, "accessAttemptBy": { - "message": "Access attempt by $EMAIL$", + "message": "Спроба доступу з $EMAIL$", "placeholders": { "email": { "content": "$1", @@ -1393,16 +1411,16 @@ } }, "confirmAccess": { - "message": "Confirm access" + "message": "Підтвердити доступ" }, "denyAccess": { - "message": "Deny access" + "message": "Заборонити доступ" }, "notificationSentDeviceAnchor": { - "message": "web app" + "message": "вебпрограмі" }, "notificationSentDevicePart2": { - "message": "Make sure the Fingerprint phrase matches the one below before approving." + "message": "Перш ніж підтверджувати, обов'язково перевірте відповідність зазначеної нижче фрази відбитка." }, "notificationSentDeviceComplete": { "message": "Unlock Bitwarden on your device. Make sure the Fingerprint phrase matches the one below before approving." @@ -1443,12 +1461,22 @@ "rememberMe": { "message": "Запам'ятати мене" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Don't ask again on this device for 30 days" + }, "sendVerificationCodeEmailAgain": { "message": "Надіслати код підтвердження ще раз" }, "useAnotherTwoStepMethod": { "message": "Інший спосіб двоетапної перевірки" }, + "selectAnotherMethod": { + "message": "Select another method", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Use your recovery code" + }, "insertYubiKey": { "message": "Вставте свій YubiKey в USB порт комп'ютера, потім торкніться цієї кнопки." }, @@ -1467,6 +1495,9 @@ "twoStepOptions": { "message": "Налаштування двоетапної перевірки" }, + "selectTwoStepLoginMethod": { + "message": "Select two-step login method" + }, "recoveryCodeDesc": { "message": "Втратили доступ до всіх провайдерів двоетапної перевірки? Скористайтеся кодом відновлення, щоб вимкнути двоетапну перевірку для свого облікового запису." }, @@ -1509,6 +1540,9 @@ "webAuthnMigrated": { "message": "(Перенесено з FIDO)" }, + "openInNewTab": { + "message": "Open in new tab" + }, "emailTitle": { "message": "Е-пошта" }, @@ -2224,6 +2258,9 @@ "revokeAccess": { "message": "Відкликати доступ" }, + "revoke": { + "message": "Revoke" + }, "twoStepLoginProviderEnabled": { "message": "Для вашого облікового запису увімкнено цей спосіб двоетапної перевірки." }, @@ -4081,6 +4118,12 @@ "updateBrowserDesc": { "message": "Ви використовуєте непідтримуваний браузер. Вебсховище може працювати неправильно." }, + "youHaveAPendingLoginRequest": { + "message": "You have a pending login request from another device." + }, + "reviewLoginRequest": { + "message": "Review login request" + }, "freeTrialEndPromptCount": { "message": "Ваш безплатний пробний період завершується через $COUNT$ днів.", "placeholders": { @@ -4758,6 +4801,15 @@ "masterPassPolicyDesc": { "message": "Встановіть вимоги надійності головного пароля." }, + "passwordStrengthScore": { + "message": "Password strength score $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "twoStepLoginPolicyTitle": { "message": "Вимагати двоетапну перевірку" }, @@ -5038,12 +5090,40 @@ "requireSsoExemption": { "message": "Власники організації та адміністратори звільняються від дотримання цієї політики." }, + "limitSendViews": { + "message": "Limit views" + }, + "limitSendViewsHint": { + "message": "No one can view this Send after the limit is reached.", + "description": "Displayed under the limit views field on Send" + }, + "limitSendViewsCount": { + "message": "$ACCESSCOUNT$ views left", + "description": "Displayed under the limit views field on Send", + "placeholders": { + "accessCount": { + "content": "$1", + "example": "2" + } + } + }, + "sendDetails": { + "message": "Send details", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendTypeTextToShare": { + "message": "Text to share" + }, "sendTypeFile": { "message": "Файл" }, "sendTypeText": { "message": "Текст" }, + "sendPasswordDescV3": { + "message": "Add an optional password for recipients to access this Send.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "createSend": { "message": "Нове відправлення", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -5068,19 +5148,15 @@ "message": "Видалити відправлення", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, - "deleteSendConfirmation": { - "message": "Ви дійсно хочете видалити це відправлення?", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "whatTypeOfSend": { - "message": "Який це тип відправлення?", + "deleteSendPermanentConfirmation": { + "message": "Are you sure you want to permanently delete this Send?", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "deletionDate": { "message": "Термін дії" }, - "deletionDateDesc": { - "message": "Відправлення буде остаточно видалено у вказаний час.", + "deletionDateDescV2": { + "message": "The Send will be permanently deleted on this date.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "expirationDate": { @@ -5093,21 +5169,6 @@ "maxAccessCount": { "message": "Максимальна кількість доступів" }, - "maxAccessCountDesc": { - "message": "Якщо встановлено, користувачі більше не зможуть отримати доступ до цього відправлення після досягнення максимальної кількості доступів.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "currentAccessCount": { - "message": "Поточна кількість доступів" - }, - "sendPasswordDesc": { - "message": "Ви можете встановити пароль для доступу до цього відправлення.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendNotesDesc": { - "message": "Особисті нотатки про це відправлення.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "disabled": { "message": "Вимкнено" }, @@ -5134,13 +5195,6 @@ "removePasswordConfirmation": { "message": "Ви дійсно хочете вилучити пароль?" }, - "hideEmail": { - "message": "Приховувати мою адресу електронної пошти від отримувачів." - }, - "disableThisSend": { - "message": "Деактивувати це відправлення для скасування доступу до нього.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "allSends": { "message": "Усі відправлення" }, @@ -5151,6 +5205,9 @@ "pendingDeletion": { "message": "Очікується видалення" }, + "hideTextByDefault": { + "message": "Hide text by default" + }, "expired": { "message": "Термін дії завершився" }, @@ -5372,13 +5429,6 @@ "message": "Завжди показувати отримувачам адресу е-пошти учасників під час створення чи редагування відправлень.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, - "sendOptionsPolicyInEffect": { - "message": "Наразі діють такі політики організації:" - }, - "sendDisableHideEmailInEffect": { - "message": "Користувачам не дозволяється приховувати свою адресу електронної пошти від отримувачів під час створення чи редагування відправлень.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "modifiedPolicyId": { "message": "Змінено політику $ID$.", "placeholders": { @@ -5478,27 +5528,6 @@ "personalOwnershipCheckboxDesc": { "message": "Вилучити особисту власність для учасників організації" }, - "textHiddenByDefault": { - "message": "При доступі до відправлення типово приховувати текст", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendNameDesc": { - "message": "Опис цього відправлення.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendTextDesc": { - "message": "Текст, який ви хочете відправити." - }, - "sendFileDesc": { - "message": "Файл, який ви хочете відправити." - }, - "copySendLinkOnSave": { - "message": "Копіювати посилання, щоб поділитися відправленням після збереження." - }, - "sendLinkLabel": { - "message": "Посилання на відправлення", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "send": { "message": "Відправлення", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -5647,12 +5676,21 @@ "dateParsingError": { "message": "При збереженні дат видалення і терміну дії виникла помилка." }, + "hideYourEmail": { + "message": "Hide your email address from viewers." + }, "webAuthnFallbackMsg": { "message": "Щоб засвідчити ваш 2FA, натисніть кнопку внизу." }, "webAuthnAuthenticate": { "message": "Автентифікація WebAuthn" }, + "readSecurityKey": { + "message": "Read security key" + }, + "awaitingSecurityKeyInteraction": { + "message": "Awaiting security key interaction..." + }, "webAuthnNotSupported": { "message": "WebAuthn не підтримується в цьому браузері." }, @@ -7199,6 +7237,12 @@ "duoRequiredByOrgForAccount": { "message": "Для вашого облікового запису необхідна двоетапна перевірка з Duo." }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Duo two-step login is required for your account. Follow the steps below to finish logging in." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Follow the steps below to finish logging in." + }, "launchDuo": { "message": "Запустити Duo" }, @@ -9793,9 +9837,15 @@ "learnMoreAboutApi": { "message": "Докладніше про Bitwarden API" }, + "fileSend": { + "message": "File Send" + }, "fileSends": { "message": "Відправлення файлів" }, + "textSend": { + "message": "Text Send" + }, "textSends": { "message": "Відправлення тексту" }, @@ -10029,10 +10079,6 @@ "message": "Спеціальні символи", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "addAttachment": { "message": "Додати вкладення" }, @@ -10432,10 +10478,31 @@ "assignedExceedsAvailable": { "message": "Assigned seats exceed available seats." }, + "changeAtRiskPassword": { + "message": "Change at-risk password" + }, "removeUnlockWithPinPolicyTitle": { "message": "Remove Unlock with PIN" }, "removeUnlockWithPinPolicyDesc": { "message": "Do not allow members to unlock their account with a PIN." + }, + "limitedEventLogs": { + "message": "$PRODUCT_TYPE$ plans do not have access to real event logs", + "placeholders": { + "product_type": { + "content": "$1", + "example": "Teams" + } + } + }, + "upgradeForFullEvents": { + "message": "Get full access to organization event logs by upgrading to a Teams or Enterprise plan." + }, + "upgradeEventLogTitle": { + "message": "Upgrade for real event log data" + }, + "upgradeEventLogMessage": { + "message": "These events are examples only and do not reflect real events within your Bitwarden organization." } } diff --git a/apps/web/src/locales/vi/messages.json b/apps/web/src/locales/vi/messages.json index e1d5e54b550..6310cf5a53e 100644 --- a/apps/web/src/locales/vi/messages.json +++ b/apps/web/src/locales/vi/messages.json @@ -5,6 +5,9 @@ "criticalApplications": { "message": "Critical applications" }, + "noCriticalAppsAtRisk": { + "message": "No critical applications at risk" + }, "accessIntelligence": { "message": "Access Intelligence" }, @@ -198,6 +201,9 @@ "notes": { "message": "Ghi chú" }, + "privateNote": { + "message": "Private note" + }, "note": { "message": "Ghi chú" }, @@ -1026,6 +1032,9 @@ "no": { "message": "Không" }, + "location": { + "message": "Location" + }, "loginOrCreateNewAccount": { "message": "Đăng nhập hoặc tạo tài khoản mới để truy cập kho mật khẩu của bạn." }, @@ -1161,14 +1170,23 @@ "logInToBitwarden": { "message": "Log in to Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "Enter the code sent to your email" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Enter the code from your authenticator app" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Press your YubiKey to authenticate" + }, "authenticationTimeout": { "message": "Authentication timeout" }, "authenticationSessionTimedOut": { "message": "The authentication session timed out. Please restart the login process." }, - "verifyIdentity": { - "message": "Xác minh danh tính của bạn" + "verifyYourIdentity": { + "message": "Verify your Identity" }, "weDontRecognizeThisDevice": { "message": "We don't recognize this device. Enter the code sent to your email to verify your identity." @@ -1443,12 +1461,22 @@ "rememberMe": { "message": "Ghi nhớ đăng nhập" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Don't ask again on this device for 30 days" + }, "sendVerificationCodeEmailAgain": { "message": "Gửi lại email xác minh" }, "useAnotherTwoStepMethod": { "message": "Dùng phương pháp xác mnih hai bước khác" }, + "selectAnotherMethod": { + "message": "Select another method", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Use your recovery code" + }, "insertYubiKey": { "message": "Cắm YubiKey vào cổng USB trên máy tính bạn và bấm nút trên Yubikey." }, @@ -1467,6 +1495,9 @@ "twoStepOptions": { "message": "Tùy chọn xác minh hai bước" }, + "selectTwoStepLoginMethod": { + "message": "Select two-step login method" + }, "recoveryCodeDesc": { "message": "Bạn bị mất quyền truy cập vào tất cả các dịch vụ xác minh hai bước? Sử dụng mã phục hồi của bạn để tắt chúng trên tài khoản bạn." }, @@ -1509,6 +1540,9 @@ "webAuthnMigrated": { "message": "(Migrated from FIDO)" }, + "openInNewTab": { + "message": "Open in new tab" + }, "emailTitle": { "message": "Email" }, @@ -2224,6 +2258,9 @@ "revokeAccess": { "message": "Thu hồi quyền truy cập" }, + "revoke": { + "message": "Revoke" + }, "twoStepLoginProviderEnabled": { "message": "This two-step login provider is active on your account." }, @@ -4081,6 +4118,12 @@ "updateBrowserDesc": { "message": "You are using an unsupported web browser. The web vault may not function properly." }, + "youHaveAPendingLoginRequest": { + "message": "You have a pending login request from another device." + }, + "reviewLoginRequest": { + "message": "Review login request" + }, "freeTrialEndPromptCount": { "message": "Your free trial ends in $COUNT$ days.", "placeholders": { @@ -4758,6 +4801,15 @@ "masterPassPolicyDesc": { "message": "Set requirements for master password strength." }, + "passwordStrengthScore": { + "message": "Password strength score $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "twoStepLoginPolicyTitle": { "message": "Require two-step login" }, @@ -5038,12 +5090,40 @@ "requireSsoExemption": { "message": "Organization owners and admins are exempt from this policy's enforcement." }, + "limitSendViews": { + "message": "Limit views" + }, + "limitSendViewsHint": { + "message": "No one can view this Send after the limit is reached.", + "description": "Displayed under the limit views field on Send" + }, + "limitSendViewsCount": { + "message": "$ACCESSCOUNT$ views left", + "description": "Displayed under the limit views field on Send", + "placeholders": { + "accessCount": { + "content": "$1", + "example": "2" + } + } + }, + "sendDetails": { + "message": "Send details", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendTypeTextToShare": { + "message": "Text to share" + }, "sendTypeFile": { "message": "Tập tin" }, "sendTypeText": { "message": "Văn bản" }, + "sendPasswordDescV3": { + "message": "Add an optional password for recipients to access this Send.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "createSend": { "message": "Mục Gửi mới", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -5068,19 +5148,15 @@ "message": "Xóa mục Gửi", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, - "deleteSendConfirmation": { - "message": "Bạn có chắc muốn xóa mục Gửi này?", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "whatTypeOfSend": { - "message": "Đây là kiểu Gửi gì?", + "deleteSendPermanentConfirmation": { + "message": "Are you sure you want to permanently delete this Send?", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "deletionDate": { "message": "Deletion date" }, - "deletionDateDesc": { - "message": "Mục Gửi sẽ được xóa vĩnh viễn vào ngày và giờ được chỉ định.", + "deletionDateDescV2": { + "message": "The Send will be permanently deleted on this date.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "expirationDate": { @@ -5093,21 +5169,6 @@ "maxAccessCount": { "message": "Maximum access count" }, - "maxAccessCountDesc": { - "message": "Nếu được thiết lập, khi đã đạt tới số lượng truy cập tối đa, người dùng sẽ không thể truy cập mục Gửi này nữa.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "currentAccessCount": { - "message": "Số lần truy cập hiện tại" - }, - "sendPasswordDesc": { - "message": "Optionally require a password for users to access this Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendNotesDesc": { - "message": "Private notes about this Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "disabled": { "message": "Đã tắt" }, @@ -5134,13 +5195,6 @@ "removePasswordConfirmation": { "message": "Are you sure you want to remove the password?" }, - "hideEmail": { - "message": "Hide my email address from recipients." - }, - "disableThisSend": { - "message": "Deactivate this Send so that no one can access it.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "allSends": { "message": "Tất cả mục Gửi" }, @@ -5151,6 +5205,9 @@ "pendingDeletion": { "message": "Pending deletion" }, + "hideTextByDefault": { + "message": "Hide text by default" + }, "expired": { "message": "Expired" }, @@ -5372,13 +5429,6 @@ "message": "Always show member’s email address with recipients when creating or editing a Send.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, - "sendOptionsPolicyInEffect": { - "message": "The following organization policies are currently in effect:" - }, - "sendDisableHideEmailInEffect": { - "message": "Users are not allowed to hide their email address from recipients when creating or editing a Send.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "modifiedPolicyId": { "message": "Modified policy $ID$.", "placeholders": { @@ -5478,27 +5528,6 @@ "personalOwnershipCheckboxDesc": { "message": "Remove individual ownership for organization users" }, - "textHiddenByDefault": { - "message": "When accessing the Send, hide the text by default", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendNameDesc": { - "message": "Một tên gợi nhớ để mô tả mục Gửi này.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendTextDesc": { - "message": "Văn bản bạn muốn gửi." - }, - "sendFileDesc": { - "message": "Tập tin bạn muốn gửi." - }, - "copySendLinkOnSave": { - "message": "Copy the link to share this Send to my clipboard upon save." - }, - "sendLinkLabel": { - "message": "Send link", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "send": { "message": "Gửi", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -5647,12 +5676,21 @@ "dateParsingError": { "message": "There was an error saving your deletion and expiration dates." }, + "hideYourEmail": { + "message": "Hide your email address from viewers." + }, "webAuthnFallbackMsg": { "message": "To verify your 2FA please click the button below." }, "webAuthnAuthenticate": { "message": "Authenticate WebAuthn" }, + "readSecurityKey": { + "message": "Read security key" + }, + "awaitingSecurityKeyInteraction": { + "message": "Awaiting security key interaction..." + }, "webAuthnNotSupported": { "message": "WebAuthn is not supported in this browser." }, @@ -7199,6 +7237,12 @@ "duoRequiredByOrgForAccount": { "message": "Duo two-step login is required for your account." }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Duo two-step login is required for your account. Follow the steps below to finish logging in." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Follow the steps below to finish logging in." + }, "launchDuo": { "message": "Launch Duo" }, @@ -9793,9 +9837,15 @@ "learnMoreAboutApi": { "message": "Learn more about Bitwarden's API" }, + "fileSend": { + "message": "File Send" + }, "fileSends": { "message": "File Sends" }, + "textSend": { + "message": "Text Send" + }, "textSends": { "message": "Text Sends" }, @@ -10029,10 +10079,6 @@ "message": "Include special characters", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "addAttachment": { "message": "Add attachment" }, @@ -10432,10 +10478,31 @@ "assignedExceedsAvailable": { "message": "Assigned seats exceed available seats." }, + "changeAtRiskPassword": { + "message": "Change at-risk password" + }, "removeUnlockWithPinPolicyTitle": { "message": "Remove Unlock with PIN" }, "removeUnlockWithPinPolicyDesc": { "message": "Do not allow members to unlock their account with a PIN." + }, + "limitedEventLogs": { + "message": "$PRODUCT_TYPE$ plans do not have access to real event logs", + "placeholders": { + "product_type": { + "content": "$1", + "example": "Teams" + } + } + }, + "upgradeForFullEvents": { + "message": "Get full access to organization event logs by upgrading to a Teams or Enterprise plan." + }, + "upgradeEventLogTitle": { + "message": "Upgrade for real event log data" + }, + "upgradeEventLogMessage": { + "message": "These events are examples only and do not reflect real events within your Bitwarden organization." } } diff --git a/apps/web/src/locales/zh_CN/messages.json b/apps/web/src/locales/zh_CN/messages.json index 616bdd68360..c4c9d626304 100644 --- a/apps/web/src/locales/zh_CN/messages.json +++ b/apps/web/src/locales/zh_CN/messages.json @@ -5,6 +5,9 @@ "criticalApplications": { "message": "关键应用程序" }, + "noCriticalAppsAtRisk": { + "message": "没有关键应用程序存在风险" + }, "accessIntelligence": { "message": "Access Intelligence" }, @@ -15,7 +18,7 @@ "message": "密码风险" }, "reviewAtRiskPasswords": { - "message": "跨应用程序审查有风险的密码(弱密码、暴露的密码或重复使用的密码)。选择最关键的应用程序,优先为用户采取安全措施,以解决密码风险问题。" + "message": "审查各个应用程序中存在风险的密码(弱、暴露或重复使用)。选择最关键的应用程序,优先为用户采取安全措施,以解决存在风险的密码问题。" }, "dataLastUpdated": { "message": "数据最后更新于:$DATE$", @@ -78,13 +81,13 @@ } }, "noAppsInOrgDescription": { - "message": "当用户保存登录信息时,应用程序会出现在这里,显示所有有风险的密码。标记关键应用程序并通知用户更新密码。" + "message": "当用户保存登录信息时,应用程序会出现在这里,显示所有存在风险的密码。标记关键应用程序并通知用户更新密码。" }, "noCriticalAppsTitle": { "message": "您未将任何应用程序标记为关键" }, "noCriticalAppsDescription": { - "message": "选择最关键的应用程序来发现有风险的密码,并通知用户更改这些密码。" + "message": "选择最关键的应用程序来发现存在风险的密码,并通知用户更改这些密码。" }, "markCriticalApps": { "message": "标记关键应用程序" @@ -99,7 +102,7 @@ "message": "应用程序" }, "atRiskPasswords": { - "message": "有风险的密码" + "message": "存在风险的密码" }, "requestPasswordChange": { "message": "请求更改密码" @@ -111,10 +114,10 @@ "message": "搜索应用程序" }, "atRiskMembers": { - "message": "有风险的成员" + "message": "存在风险的成员" }, "atRiskMembersWithCount": { - "message": "有风险的成员 ($COUNT$)", + "message": "存在风险的成员 ($COUNT$)", "placeholders": { "count": { "content": "$1", @@ -123,7 +126,7 @@ } }, "atRiskApplicationsWithCount": { - "message": "有风险的应用程序 ($COUNT$)", + "message": "存在风险的应用程序 ($COUNT$)", "placeholders": { "count": { "content": "$1", @@ -150,7 +153,7 @@ "message": "总的成员" }, "atRiskApplications": { - "message": "有风险的应用程序" + "message": "存在风险的应用程序" }, "totalApplications": { "message": "总的应用程序" @@ -198,6 +201,9 @@ "notes": { "message": "备注" }, + "privateNote": { + "message": "私密备注" + }, "note": { "message": "笔记" }, @@ -451,7 +457,7 @@ "message": "未分配" }, "noneFolder": { - "message": "无文件夹", + "message": "默认文件夹", "description": "This is the folder for uncategorized items" }, "selfOwnershipLabel": { @@ -474,10 +480,10 @@ "message": "通过在父文件夹名后面添加「/」来嵌套文件夹。示例:Social/Forums" }, "deleteFolderPermanently": { - "message": "您确定要永久删除这个文件夹吗?" + "message": "确定要永久删除这个文件夹吗?" }, "baseDomain": { - "message": "基础域", + "message": "基础域名", "description": "Domain name. Example: website.com" }, "domainName": { @@ -1026,6 +1032,9 @@ "no": { "message": "否" }, + "location": { + "message": "位置" + }, "loginOrCreateNewAccount": { "message": "登录或创建一个新账户以访问您的安全密码库。" }, @@ -1132,10 +1141,10 @@ "message": "如果所有通行密钥被移除,不使用主密码您将无法登录新的设备。" }, "passkeyLimitReachedInfo": { - "message": "通行密钥已达上限。移除一个通行密钥以添加另一个。" + "message": "已达到通行密钥上限。请移除一个通行密钥后再添加其他通行密钥。" }, "tryAgain": { - "message": "请重试" + "message": "重试" }, "createAccount": { "message": "创建账户" @@ -1161,13 +1170,22 @@ "logInToBitwarden": { "message": "登录到 Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "输入发送到您的电子邮箱的代码" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "输入来自您的验证器 App 的代码" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "按下 YubiKey 以验证身份" + }, "authenticationTimeout": { "message": "身份验证超时" }, "authenticationSessionTimedOut": { "message": "身份验证会话超时。请重新启动登录过程。" }, - "verifyIdentity": { + "verifyYourIdentity": { "message": "验证您的身份" }, "weDontRecognizeThisDevice": { @@ -1443,17 +1461,27 @@ "rememberMe": { "message": "记住我" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "30 天内在此设备上不再询问" + }, "sendVerificationCodeEmailAgain": { "message": "再次发送验证码电子邮件" }, "useAnotherTwoStepMethod": { "message": "使用其他两步登录方式" }, + "selectAnotherMethod": { + "message": "选择其他方式", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "使用您的恢复代码" + }, "insertYubiKey": { "message": "将您的 YubiKey 插入计算机的 USB 端口,然后触摸其按钮。" }, "insertU2f": { - "message": "将您的安全钥匙插入计算机的 USB 端口。如果它有按钮,请触摸它。" + "message": "将您的安全密钥插入计算机的 USB 端口。如果它有按钮,请触摸它。" }, "loginUnavailable": { "message": "登录不可用" @@ -1462,11 +1490,14 @@ "message": "此账户已启用两步登录,但此浏览器不支持任何已配置的两步登录提供程序。" }, "noTwoStepProviders2": { - "message": "请使用支持的网页浏览器(例如 Chrome)和/或添加其他支持更广泛的提供程序(例如验证器 App)。" + "message": "请使用受支持的网页浏览器(例如 Chrome),和/或添加其他跨网页浏览器支持更好的提供程序(例如验证器 App)。" }, "twoStepOptions": { "message": "两步登录选项" }, + "selectTwoStepLoginMethod": { + "message": "选择两步登录方式" + }, "recoveryCodeDesc": { "message": "失去对您所有的双重身份验证设备的访问?请使用您的恢复代码来关闭您账户中所有的两步登录提供程序。" }, @@ -1481,7 +1512,7 @@ "description": "'Bitwarden Authenticator' is a product name and should not be translated." }, "yubiKeyTitleV2": { - "message": "Yubico OTP 安全钥匙" + "message": "Yubico OTP 安全密钥" }, "yubiKeyDesc": { "message": "使用 YubiKey 4、5 或 NEO 设备。" @@ -1491,24 +1522,27 @@ "description": "'Duo Security' and 'Duo Mobile' are product names and should not be translated." }, "duoOrganizationDesc": { - "message": "为您的组织使用 Duo Security 的 Duo 移动 App、短信、电话或 U2F 安全钥匙来进行验证。", + "message": "为您的组织使用 Duo Security 的 Duo 移动 App、短信、电话或 U2F 安全密钥来进行验证。", "description": "'Duo Security' and 'Duo Mobile' are product names and should not be translated." }, "u2fDesc": { - "message": "使用任何 FIDO U2F 兼容的安全钥匙访问您的账户。" + "message": "使用任何 FIDO U2F 兼容的安全密钥访问您的账户。" }, "u2fTitle": { - "message": "FIDO U2F 安全钥匙" + "message": "FIDO U2F 安全密钥" }, "webAuthnTitle": { "message": "通行密钥" }, "webAuthnDesc": { - "message": "使用您设备的生物识别或 WebAuthn 兼容的安全钥匙。" + "message": "使用您设备的生物识别或 FIDO2 兼容的安全密钥。" }, "webAuthnMigrated": { "message": "(迁移自 FIDO)" }, + "openInNewTab": { + "message": "在新标签页中打开" + }, "emailTitle": { "message": "电子邮箱" }, @@ -2117,7 +2151,7 @@ "message": "自定义" }, "newCustomDomain": { - "message": "添加自定义域名" + "message": "新增自定义域名" }, "newCustomDomainDesc": { "message": "输入用逗号分隔的域名列表。只能输入「基础」域名,不要输入子域名。例如,输入「google.com」而不是「www.google.com」。您也可以输入「androidapp://package.name」以将 Android App 与其他网站域名关联。" @@ -2147,14 +2181,14 @@ "message": "为您的组织启用两步登录。" }, "twoStepLoginEnterpriseDescStart": { - "message": "要为成员实施 Bitwarden 两步登录选项,请使用 ", + "message": "要为成员强制实施 Bitwarden 两步登录选项,请使用 ", "description": "This will be used as part of a larger sentence, broken up to include links. The full sentence will read 'Enforce Bitwarden Two-step Login options for members by using the Two-step Login Policy.'" }, "twoStepLoginPolicy": { "message": "两步登录策略" }, "twoStepLoginOrganizationDuoDesc": { - "message": "要实施 Duo 方式的两步登录,请使用下面的选项。" + "message": "要强制实施 Duo 方式的两步登录,请使用下面的选项。" }, "twoStepLoginOrganizationSsoDesc": { "message": "如果您已设置或计划设置 SSO,两步登录可能已经通过您的身份提供程序强制实施了。" @@ -2224,6 +2258,9 @@ "revokeAccess": { "message": "撤销访问权限" }, + "revoke": { + "message": "撤销" + }, "twoStepLoginProviderEnabled": { "message": "您的账户已启用此两步登录提供程序。" }, @@ -2324,7 +2361,7 @@ } }, "webAuthnkeyX": { - "message": "WebAuthn 钥匙 $INDEX$", + "message": "WebAuthn 密钥 $INDEX$", "placeholders": { "index": { "content": "$1", @@ -2336,7 +2373,7 @@ "message": "NFC 支持" }, "twoFactorYubikeySupportsNfc": { - "message": "我的一把钥匙支持 NFC。" + "message": "我的一把密钥支持 NFC。" }, "twoFactorYubikeySupportsNfcDesc": { "message": "如果您的某个 YubiKey 支持 NFC(例如 YubiKey NEO),移动设备在检测到 NFC 可用时将提示您。" @@ -2345,7 +2382,7 @@ "message": "YubiKey 已更新" }, "disableAllKeys": { - "message": "禁用全部钥匙" + "message": "禁用全部密钥" }, "twoFactorDuoDesc": { "message": "输入 Duo 管理面板提供的 Bitwarden 应用程序信息。" @@ -2372,28 +2409,28 @@ "message": "发送电子邮件" }, "twoFactorU2fAdd": { - "message": "添加一个 FIDO U2F 安全钥匙到您的帐户" + "message": "添加一个 FIDO U2F 安全密钥到您的账户" }, "removeU2fConfirmation": { - "message": "确认要删除此安全钥匙吗?" + "message": "确定要移除此安全密钥吗?" }, "twoFactorWebAuthnAdd": { - "message": "添加一个 WebAuthn 安全钥匙到您的账户" + "message": "添加一个 WebAuthn 安全密钥到您的账户" }, "readKey": { - "message": "读取钥匙" + "message": "读取密钥" }, "keyCompromised": { - "message": "密钥被破坏。" + "message": "密钥已损坏。" }, "twoFactorU2fGiveName": { - "message": "给安全钥匙起一个友好的名称来标识它。" + "message": "给安全密钥起一个友好的名称来标识它。" }, "twoFactorU2fPlugInReadKey": { - "message": "将安全钥匙插入计算机的 USB 端口,然后点击「读取钥匙」按钮。" + "message": "将安全密钥插入计算机的 USB 端口,然后点击「读取密钥」按钮。" }, "twoFactorU2fTouchButton": { - "message": "如果安全钥匙有按钮,请触摸它。" + "message": "如果安全密钥有按钮,请触摸它。" }, "twoFactorU2fSaveForm": { "message": "保存表单。" @@ -2405,13 +2442,13 @@ "message": "桌面/笔记本电脑上支持 U2F 的浏览器(开启了 FIDO U2F 的 Chrome、Opera、Vivaldi 或 Firefox)中的网页版密码库和浏览器扩展。" }, "twoFactorU2fWaiting": { - "message": "等待您触摸安全钥匙上的按钮" + "message": "等待您触摸安全密钥上的按钮" }, "twoFactorU2fClickSave": { - "message": "单击下面的「保存」按钮,以启用此安全钥匙用于两步登录。" + "message": "单击下面的「保存」按钮,以启用此安全密钥用于两步登录。" }, "twoFactorU2fProblemReadingTryAgain": { - "message": "读取安全钥匙时出现问题,请重试。" + "message": "读取安全密钥时出现问题。请重试。" }, "twoFactorWebAuthnWarning1": { "message": "由于平台限制,WebAuthn 不能在所有 Bitwarden 应用程序上使用。您应该启用另一个两步登录提供程序,以便在无法使用 WebAuthn 时可以访问您的账户。" @@ -2652,7 +2689,7 @@ "message": "泄漏报告于" }, "reportError": { - "message": "加载报告时发生错误,请重试。" + "message": "加载报告时发生错误。请重试" }, "billing": { "message": "计费" @@ -2720,7 +2757,7 @@ "message": "未来的更多高级功能。敬请期待!" }, "premiumPrice": { - "message": "全部仅需 $PRICE$ /年!", + "message": "所有功能仅需 $PRICE$ /年!", "placeholders": { "price": { "content": "$1", @@ -2729,7 +2766,7 @@ } }, "premiumPriceWithFamilyPlan": { - "message": "升级高级会员仅需 $PRICE$/年,或成为具有 $FAMILYPLANUSERCOUNT$ 位用户以及无限制的家庭共享的高级账户,通过 ", + "message": "升级高级会员仅需 $PRICE$ /年,或成为具有 $FAMILYPLANUSERCOUNT$ 位用户以及无限制的家庭共享的高级账户,通过 ", "placeholders": { "price": { "content": "$1", @@ -2745,7 +2782,7 @@ "message": "Bitwarden 家庭版计划。" }, "addons": { - "message": "附加" + "message": "附加项目" }, "premiumAccess": { "message": "高级会员" @@ -2857,7 +2894,7 @@ "message": "恢复订阅" }, "reinstateConfirmation": { - "message": "确定要移除待处理的取消请求并恢复订阅吗?" + "message": "确定要移除待取消的请求并恢复订阅吗?" }, "reinstated": { "message": "您的订阅已恢复。" @@ -3025,7 +3062,7 @@ "message": "必须验证您的账户电子邮箱地址。" }, "newOrganizationDesc": { - "message": "组织允许您与他人共享您的密码库的部分内容,以及管理特定实体(例如家族、小型团队或大型公司)的相关用户。" + "message": "组织允许您与他人共享您的密码库的部分内容,以及管理特定实体(例如家庭、小型团队或大型公司)的相关用户。" }, "generalInformation": { "message": "常规信息" @@ -3093,7 +3130,7 @@ "message": "适用于个人使用,与家人和朋友共享。" }, "planNameTeams": { - "message": "团队" + "message": "团队版" }, "planDescTeams": { "message": "适用于企业和其他团队组织。" @@ -3102,7 +3139,7 @@ "message": "团队入门版" }, "planNameEnterprise": { - "message": "企业" + "message": "企业版" }, "planDescEnterprise": { "message": "适用于企业和其他大型组织。" @@ -3204,7 +3241,7 @@ } }, "trialThankYou": { - "message": "感谢您注册 Bitwarden $PLAN$!", + "message": "感谢您注册适用于 $PLAN$ 的 Bitwarden!", "placeholders": { "plan": { "content": "$1", @@ -3315,7 +3352,7 @@ } }, "removeUserConfirmation": { - "message": "确实要移除此用户吗?" + "message": "确定要移除此用户吗?" }, "removeOrgUserConfirmation": { "message": "移除成员后,他们将不再具有对组织数据的访问权限,并且此操作无法撤销。要将此成员添加回组织,必须再次邀请他们并加入。" @@ -4064,7 +4101,7 @@ "message": "电子邮箱已验证" }, "emailVerifiedFailed": { - "message": "无法验证您的电子邮箱。尝试发送新的验证电子邮件。" + "message": "无法验证您的电子邮箱。请尝试发送新的验证电子邮件。" }, "emailVerificationRequired": { "message": "需要验证电子邮箱" @@ -4081,6 +4118,12 @@ "updateBrowserDesc": { "message": "您使用的是不受支持的 Web 浏览器。网页密码库可能无法正常运行。" }, + "youHaveAPendingLoginRequest": { + "message": "您有一个来自其他设备的待处理登录请求。" + }, + "reviewLoginRequest": { + "message": "审查登录请求" + }, "freeTrialEndPromptCount": { "message": "您的免费试用将于 $COUNT$ 天后结束。", "placeholders": { @@ -4143,7 +4186,7 @@ } }, "joinOrganizationDesc": { - "message": "您已被邀请加入上面的组织。要接受邀请,您需要登录或者创建一个 Bitwarden 账户。" + "message": "您已被邀请加入上面的组织。要接受邀请,您需要登录或者创建一个新的 Bitwarden 账户。" }, "finishJoiningThisOrganizationBySettingAMasterPassword": { "message": "通过设置主密码完成加入此组织。" @@ -4488,7 +4531,7 @@ } }, "keyUpdateFoldersFailed": { - "message": "更新您的加密密钥时,无法解密您的文件夹。要继续更新,文件夹必须被删除。继续操作不会删除密码库项目。" + "message": "更新加密密钥时,无法解密您的文件夹。要继续更新,必须删除文件夹。继续操作不会删除任何密码库项目。" }, "keyUpdated": { "message": "密钥已更新" @@ -4500,7 +4543,7 @@ "message": "为了提高安全性,我们更改了加密方案。请在下方输入您的主密码以立即更新您的加密密钥。" }, "updateEncryptionKeyWarning": { - "message": "更新加密密钥后,您需要注销所有正在使用的 Bitwarden 应用程序(比如移动 App 或者浏览器扩展)后重新登录。注销或者重新登录(这将下载新的加密密钥)失败可能会导致数据损坏。我们会尝试自动为您注销,但是,可能会有所延迟。" + "message": "更新加密密钥后,您需要注销所有当前使用的 Bitwarden 应用程序(例如移动 App 或浏览器扩展)然后重新登录。注销或者重新登录(这将下载新的加密密钥)失败可能会导致数据损坏。我们会尝试自动为您注销,但可能会有所延迟。" }, "updateEncryptionKeyExportWarning": { "message": "您保存的任何已加密导出也将变为无效。" @@ -4758,6 +4801,15 @@ "masterPassPolicyDesc": { "message": "设置主密码强度要求。" }, + "passwordStrengthScore": { + "message": "密码强度评分 $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "twoStepLoginPolicyTitle": { "message": "要求两步登录" }, @@ -5018,7 +5070,7 @@ "message": "不是所有者或管理员并且已是其他组织的成员的组织成员将从您的组织中移除。" }, "singleOrgPolicyMemberWarning": { - "message": "不符合要求的成员将被置于撤销状态,直到他们离开所有其他组织。管理员可以豁免,达到要求后,管理员可以恢复他们的成员资格。" + "message": "不符合要求的成员将被置于已撤销状态,直到他们退出所有其他组织,管理员不受此约束。达到要求后,管理员可以恢复他们的成员资格。" }, "requireSso": { "message": "要求单点登录身份验证" @@ -5036,7 +5088,31 @@ "message": "单一组织策略未启用。" }, "requireSsoExemption": { - "message": "组织的所有者和管理员豁免此策略。" + "message": "组织的所有者和管理员不受此策略的约束。" + }, + "limitSendViews": { + "message": "查看次数限制" + }, + "limitSendViewsHint": { + "message": "达到限额后,任何人无法查看此 Send。", + "description": "Displayed under the limit views field on Send" + }, + "limitSendViewsCount": { + "message": "剩余 $ACCESSCOUNT$ 次查看次数", + "description": "Displayed under the limit views field on Send", + "placeholders": { + "accessCount": { + "content": "$1", + "example": "2" + } + } + }, + "sendDetails": { + "message": "Send 详细信息", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendTypeTextToShare": { + "message": "要分享的文本" }, "sendTypeFile": { "message": "文件" @@ -5044,8 +5120,12 @@ "sendTypeText": { "message": "文本" }, + "sendPasswordDescV3": { + "message": "添加一个用于接收者访问此 Send 的可选密码。", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "createSend": { - "message": "创建 Send", + "message": "新增 Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "editSend": { @@ -5068,19 +5148,15 @@ "message": "删除 Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, - "deleteSendConfirmation": { - "message": "确定要删除此 Send 吗?", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "whatTypeOfSend": { - "message": "这是什么类型的 Send?", + "deleteSendPermanentConfirmation": { + "message": "您确定要永久删除这个 Send 吗?", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "deletionDate": { "message": "删除日期" }, - "deletionDateDesc": { - "message": "此 Send 将在指定的日期和时间后被永久删除。", + "deletionDateDescV2": { + "message": "此 Send 将在此日期后被永久删除。", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "expirationDate": { @@ -5093,21 +5169,6 @@ "maxAccessCount": { "message": "最大访问次数" }, - "maxAccessCountDesc": { - "message": "设置后,当达到最大访问次数时用户将不再能够访问此 Send。", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "currentAccessCount": { - "message": "当前访问次数" - }, - "sendPasswordDesc": { - "message": "可选。用户需要提供密码才能访问此 Send。", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendNotesDesc": { - "message": "关于此 Send 的私密备注。", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "disabled": { "message": "已禁用" }, @@ -5132,14 +5193,7 @@ "message": "密码已移除" }, "removePasswordConfirmation": { - "message": "确定移除此密码?" - }, - "hideEmail": { - "message": "对接收者隐藏我的电子邮箱地址。" - }, - "disableThisSend": { - "message": "停用此 Send 确保无人能访问它。", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + "message": "确定要移除此密码吗?" }, "allSends": { "message": "所有 Send" @@ -5151,6 +5205,9 @@ "pendingDeletion": { "message": "待删除" }, + "hideTextByDefault": { + "message": "默认隐藏文本" + }, "expired": { "message": "已过期" }, @@ -5189,7 +5246,7 @@ "message": "紧急访问" }, "emergencyAccessDesc": { - "message": "授予和管理可信联系人的紧急访问权限。可信联系人可以在紧急情况下请求获取查看或接管您账户的权限。查阅我们的帮助页面以了解更多关于零知识共享的工作原理和细节。" + "message": "授予和管理可信联系人的紧急访问权限。可信联系人可以在紧急情况下请求获取查看或接管您账户的权限。请访问我们的帮助页面,了解更多关于零知识共享的工作原理和细节。" }, "emergencyAccessOwnerWarning": { "message": "您是一个或多个组织的拥有者。如果您授予紧急联系人接管权限,他们在接管后可作为拥有者持有您的所有权限。" @@ -5334,7 +5391,7 @@ "message": "通过禁用个人密码库选项,要求成员将项目保存到组织。" }, "personalOwnershipExemption": { - "message": "组织的所有者和管理员豁免此策略。" + "message": "组织的所有者和管理员不受此策略的约束。" }, "personalOwnershipSubmitError": { "message": "由于某个企业策略,您不能将项目保存到您的个人密码库。将所有权选项更改为组织,并从可用的集合中选择。" @@ -5347,7 +5404,7 @@ "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "disableSendExemption": { - "message": "可以管理组织策略的组织成员豁免此策略。" + "message": "可以管理组织策略的组织成员不受此策略的约束。" }, "sendDisabled": { "message": "Send 已禁用", @@ -5366,19 +5423,12 @@ "description": "'Sends' is a plural noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "sendOptionsExemption": { - "message": "可以管理组织策略的组织成员豁免此策略。" + "message": "可以管理组织策略的组织成员不受此策略的约束。" }, "disableHideEmail": { "message": "创建或编辑 Send 时,始终向接收者显示成员的电子邮箱地址。", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, - "sendOptionsPolicyInEffect": { - "message": "以下组织策略目前正起作用:" - }, - "sendDisableHideEmailInEffect": { - "message": "创建或编辑 Send 时,不允许用户对接收者隐藏他们的电子邮箱地址。", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "modifiedPolicyId": { "message": "修改了策略 $ID$。", "placeholders": { @@ -5478,27 +5528,6 @@ "personalOwnershipCheckboxDesc": { "message": "移除组织用户的个人所有权" }, - "textHiddenByDefault": { - "message": "访问此 Send 时,默认隐藏文本内容", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendNameDesc": { - "message": "用于描述此 Send 的友好名称。", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendTextDesc": { - "message": "您想在此 Send 中附加的文本。" - }, - "sendFileDesc": { - "message": "您想在此 Send 中附加的文件。" - }, - "copySendLinkOnSave": { - "message": "保存时复制链接到剪贴板以便分享此 Send。" - }, - "sendLinkLabel": { - "message": "Send 链接", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "send": { "message": "Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -5537,7 +5566,7 @@ "message": "集中管理机密。" }, "centralizeSecretsManagementDescription": { - "message": "在一个位置安全地存储和管理机密,以防止机密扩散到您的组织。" + "message": "在一个位置安全地存储和管理机密,防止机密在组织内扩散。" }, "preventSecretLeaks": { "message": "防止机密遭泄漏。" @@ -5647,12 +5676,21 @@ "dateParsingError": { "message": "保存您的删除和过期日期时出错。" }, + "hideYourEmail": { + "message": "对查看者隐藏您的电子邮箱地址。" + }, "webAuthnFallbackMsg": { "message": "要验证您的 2FA,请点击下面的按钮。" }, "webAuthnAuthenticate": { "message": "验证 WebAuthn" }, + "readSecurityKey": { + "message": "读取安全密钥" + }, + "awaitingSecurityKeyInteraction": { + "message": "等待安全密钥交互..." + }, "webAuthnNotSupported": { "message": "此浏览器不支持 WebAuthn。" }, @@ -5927,7 +5965,7 @@ "message": "您已被邀请加入上面列出的提供商。要接受邀请,您需要登录或创建一个新的 Bitwarden 账户。" }, "providerInviteAcceptFailed": { - "message": "无法接受邀请。请联系提供商管理员发送新的邀请。" + "message": "无法接受邀请。请向提供商管理员请求发送新的邀请。" }, "providerInviteAcceptedDesc": { "message": "管理员确认您的成员资格后,您就可以访问此提供商了。届时我们会向您发送一封电子邮件。" @@ -6139,7 +6177,7 @@ "message": "为所有现有成员和新成员激活浏览器扩展上的页面加载时的自动填充设置。" }, "experimentalFeature": { - "message": "不完整或不信任的网站可以使用页面加载时自动填充。" + "message": "被入侵或不受信任的网站可以利用页面加载时的自动填充功能。" }, "learnMoreAboutAutofill": { "message": "进一步了解自动填充" @@ -6301,7 +6339,7 @@ "message": "输入您的个人电子邮箱以兑换 Bitwarden 家庭" }, "sponsoredFamiliesLeaveCopy": { - "message": "如果您移除邀请或邀请被赞助组织移除,您的家庭赞助将在下一个续费日到期。" + "message": "如果您移除邀请或您被从赞助组织中移除,您的家庭赞助将在下一个续费日到期。" }, "acceptBitwardenFamiliesHelp": { "message": "接受现有组织的邀请或创建一个新的家庭组织。" @@ -7199,6 +7237,12 @@ "duoRequiredByOrgForAccount": { "message": "您的账户要求使用 Duo 两步登录。" }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "您的账户要求使用 Duo 两步登录。请按照以下步骤完成登录。" + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "按照以下步骤完成登录。" + }, "launchDuo": { "message": "启动 Duo" }, @@ -7697,7 +7741,7 @@ "message": "更新" }, "plusNMore": { - "message": "+ $QUANTITY$ 及更多", + "message": "还有 $QUANTITY$ 个", "placeholders": { "quantity": { "content": "$1", @@ -8395,7 +8439,7 @@ "description": "Used as a card title description on the set password page to explain why the user is there" }, "cardMetrics": { - "message": "总计 $TOTAL$", + "message": "满分 $TOTAL$", "placeholders": { "total": { "content": "$1", @@ -8828,7 +8872,7 @@ } }, "addAPaymentMethod": { - "message": "请添加一个付款方式。", + "message": "请添加一个付款方式", "description": "This will be used as part of a larger sentence, broken up to include links. The full sentence will read 'To maintain your subscription for $ORG$, add a payment method'" }, "organizationInformation": { @@ -8852,7 +8896,7 @@ "description": "Used as a form field label for a select input on the offboarding survey." }, "anyOtherFeedback": { - "message": "您还有其他反馈信息要分享吗?", + "message": "您还有其他反馈意见要分享吗?", "description": "Used as a form field label for a textarea input on the offboarding survey." }, "missingFeatures": { @@ -9549,7 +9593,7 @@ "message": "通过审计成员访问权限来识别安全风险" }, "onlyAvailableForEnterpriseOrganization": { - "message": "通过升级为企业计划,快速查看整个组织的成员访问权限。" + "message": "通过升级为企业版计划,快速查看整个组织的成员访问权限。" }, "date": { "message": "日期" @@ -9564,7 +9608,7 @@ "message": "确保成员具有对合适的凭据的访问权限,以及他们的账户是安全的。使用此报告获取包含会员访问权限和账户配置的 CSV 文件 。" }, "memberAccessReportPageDesc": { - "message": "审计组织成员在各个群组、集合和集合项目之间的访问权限。CSV 导出文件提供了每位成员的详细信息,包括集合权限和账户配置的相关信息。" + "message": "审计组织成员在群组、集合和集合项目中的访问权限。CSV 导出文件提供了每位成员的详细信息,包括集合权限和账户配置信息。" }, "memberAccessReportNoCollection": { "message": "(无集合)" @@ -9793,9 +9837,15 @@ "learnMoreAboutApi": { "message": "进一步了解 Bitwarden API" }, + "fileSend": { + "message": "文件 Send" + }, "fileSends": { "message": "文件 Send" }, + "textSend": { + "message": "文本 Send" + }, "textSends": { "message": "文本 Send" }, @@ -10029,10 +10079,6 @@ "message": "包含特殊字符", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "addAttachment": { "message": "添加附件" }, @@ -10040,7 +10086,7 @@ "message": "最大文件大小为 500 MB" }, "permanentlyDeleteAttachmentConfirmation": { - "message": "您确定要永久删除此附件吗?" + "message": "确定要永久删除此附件吗?" }, "manageSubscriptionFromThe": { "message": "管理订阅,通过", @@ -10056,7 +10102,7 @@ "message": "声明域名将开启单一组织策略。" }, "single-org-revoked-user-warning": { - "message": "不符合要求的成员将被撤销。管理员可以在他们离开所有其他组织后恢复其成员资格。" + "message": "不符合要求的成员将被撤销。管理员可以在他们退出所有其他组织后恢复其成员资格。" }, "deleteOrganizationUser": { "message": "删除 $NAME$", @@ -10137,7 +10183,7 @@ "message": "删除成功" }, "freeFamiliesSponsorship": { - "message": "移除免费的 Bitwarden 家庭赞助" + "message": "禁用免费 Bitwarden 家庭赞助" }, "freeFamiliesSponsorshipPolicyDesc": { "message": "不允许成员通过此组织兑换家庭计划。" @@ -10266,7 +10312,7 @@ } }, "updatedRevokeSponsorshipConfirmationForSentSponsorship": { - "message": "如果您移除 $EMAIL$,将无法兑换此家庭计划赞助,确定要继续吗?", + "message": "如果您移除 $EMAIL$,将无法兑换此家庭计划赞助。确定要继续吗?", "placeholders": { "email": { "content": "$1", @@ -10315,14 +10361,14 @@ "message": "已打开浏览器扩展" }, "openedExtensionViewAtRiskPasswords": { - "message": "成功打开 Bitwarden 浏览器扩展。您现在可以审查有风险的密码了。" + "message": "成功打开 Bitwarden 浏览器扩展。您现在可以审查存在风险的密码了。" }, "openExtensionManuallyPart1": { - "message": "我们无法打开 Bitwarden 浏览器扩展。请从工具栏打开 Bitwarden 图标", + "message": "我们无法打开 Bitwarden 浏览器扩展。请从工具栏中点击 Bitwarden 图标", "description": "This will be used as part of a larger sentence, broken up to include the Bitwarden icon. The full sentence will read 'We had trouble opening the Bitwarden browser extension. Open the Bitwarden icon [Bitwarden Icon] from the toolbar.'" }, "openExtensionManuallyPart2": { - "message": "。", + "message": "来打开它。", "description": "This will be used as part of a larger sentence, broken up to include the Bitwarden icon. The full sentence will read 'We had trouble opening the Bitwarden browser extension. Open the Bitwarden icon [Bitwarden Icon] from the toolbar.'" }, "resellerRenewalWarningMsg": { @@ -10432,10 +10478,31 @@ "assignedExceedsAvailable": { "message": "分配的席位超过可用席位。" }, + "changeAtRiskPassword": { + "message": "更改有风险的密码" + }, "removeUnlockWithPinPolicyTitle": { - "message": "移除使用 PIN 码解锁" + "message": "禁用 PIN 码解锁" }, "removeUnlockWithPinPolicyDesc": { "message": "不允许成员使用 PIN 码解锁他们的账户。" + }, + "limitedEventLogs": { + "message": "$PRODUCT_TYPE$ 计划无法访问真实的事件日志", + "placeholders": { + "product_type": { + "content": "$1", + "example": "Teams" + } + } + }, + "upgradeForFullEvents": { + "message": "升级到团队版或企业版计划,即可获得对组织事件日志的完整访问权限。" + }, + "upgradeEventLogTitle": { + "message": "升级以访问真实的事件日志数据" + }, + "upgradeEventLogMessage": { + "message": "这些事件仅为示例,并不反映您 Bitwarden 组织内的真实事件。" } } diff --git a/apps/web/src/locales/zh_TW/messages.json b/apps/web/src/locales/zh_TW/messages.json index 23dfe159033..89b7b7f20e4 100644 --- a/apps/web/src/locales/zh_TW/messages.json +++ b/apps/web/src/locales/zh_TW/messages.json @@ -5,6 +5,9 @@ "criticalApplications": { "message": "重要應用程式" }, + "noCriticalAppsAtRisk": { + "message": "No critical applications at risk" + }, "accessIntelligence": { "message": "存取資訊" }, @@ -198,6 +201,9 @@ "notes": { "message": "備註" }, + "privateNote": { + "message": "Private note" + }, "note": { "message": "備註" }, @@ -1026,6 +1032,9 @@ "no": { "message": "否" }, + "location": { + "message": "Location" + }, "loginOrCreateNewAccount": { "message": "登入或建立帳戶以存取您的安全密碼庫。" }, @@ -1161,14 +1170,23 @@ "logInToBitwarden": { "message": "登入 Bitwarden" }, + "enterTheCodeSentToYourEmail": { + "message": "Enter the code sent to your email" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "Enter the code from your authenticator app" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "Press your YubiKey to authenticate" + }, "authenticationTimeout": { "message": "驗證逾時" }, "authenticationSessionTimedOut": { "message": "此驗證工作階段已逾時。請重試登入。" }, - "verifyIdentity": { - "message": "核實你的身份" + "verifyYourIdentity": { + "message": "Verify your Identity" }, "weDontRecognizeThisDevice": { "message": "We don't recognize this device. Enter the code sent to your email to verify your identity." @@ -1443,12 +1461,22 @@ "rememberMe": { "message": "記住我" }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "Don't ask again on this device for 30 days" + }, "sendVerificationCodeEmailAgain": { "message": "再次傳送​​包含驗證碼的電子郵件" }, "useAnotherTwoStepMethod": { "message": "使用另一種兩步驟登入方法" }, + "selectAnotherMethod": { + "message": "Select another method", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "Use your recovery code" + }, "insertYubiKey": { "message": "將您的 YubiKey 插入電腦的 USB 連接埠,然後觸摸其按鈕。" }, @@ -1467,6 +1495,9 @@ "twoStepOptions": { "message": "兩步驟登入選項" }, + "selectTwoStepLoginMethod": { + "message": "Select two-step login method" + }, "recoveryCodeDesc": { "message": "無法使用任何兩步驟登入方式嗎?請使用您的復原碼停用所有兩步驟登入方式。" }, @@ -1509,6 +1540,9 @@ "webAuthnMigrated": { "message": "(遷移自 FIDO)" }, + "openInNewTab": { + "message": "Open in new tab" + }, "emailTitle": { "message": "電子郵件" }, @@ -2224,6 +2258,9 @@ "revokeAccess": { "message": "撤銷存取權限" }, + "revoke": { + "message": "Revoke" + }, "twoStepLoginProviderEnabled": { "message": "您的帳戶已啟用此兩步驟登入方式。" }, @@ -4081,6 +4118,12 @@ "updateBrowserDesc": { "message": "未支援您使用的瀏覽器。網頁版密碼庫可能無法正常運作。" }, + "youHaveAPendingLoginRequest": { + "message": "You have a pending login request from another device." + }, + "reviewLoginRequest": { + "message": "Review login request" + }, "freeTrialEndPromptCount": { "message": "您的免費試用將於 $COUNT$ 天後結束。", "placeholders": { @@ -4758,6 +4801,15 @@ "masterPassPolicyDesc": { "message": "設定主密碼強度要求。" }, + "passwordStrengthScore": { + "message": "Password strength score $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, "twoStepLoginPolicyTitle": { "message": "要求兩步驟登入" }, @@ -5038,12 +5090,40 @@ "requireSsoExemption": { "message": "組織擁有者與管理員不受此原則的執行影響。" }, + "limitSendViews": { + "message": "Limit views" + }, + "limitSendViewsHint": { + "message": "No one can view this Send after the limit is reached.", + "description": "Displayed under the limit views field on Send" + }, + "limitSendViewsCount": { + "message": "$ACCESSCOUNT$ views left", + "description": "Displayed under the limit views field on Send", + "placeholders": { + "accessCount": { + "content": "$1", + "example": "2" + } + } + }, + "sendDetails": { + "message": "Send details", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendTypeTextToShare": { + "message": "Text to share" + }, "sendTypeFile": { "message": "檔案" }, "sendTypeText": { "message": "文字" }, + "sendPasswordDescV3": { + "message": "Add an optional password for recipients to access this Send.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, "createSend": { "message": "建立新 Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -5068,19 +5148,15 @@ "message": "刪除 Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, - "deleteSendConfirmation": { - "message": "您確定要刪除此 Send 嗎?", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "whatTypeOfSend": { - "message": "這是什麽類型的 Send?", + "deleteSendPermanentConfirmation": { + "message": "Are you sure you want to permanently delete this Send?", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "deletionDate": { "message": "刪除日期" }, - "deletionDateDesc": { - "message": "此 Send 將在指定的日期和時間後被永久刪除。", + "deletionDateDescV2": { + "message": "The Send will be permanently deleted on this date.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "expirationDate": { @@ -5093,21 +5169,6 @@ "maxAccessCount": { "message": "最大存取次數" }, - "maxAccessCountDesc": { - "message": "如果設定此選項,當達到最大存取次數時,使用者將無法再次存取此 Send。", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "currentAccessCount": { - "message": "目前存取次數" - }, - "sendPasswordDesc": { - "message": "選用。使用者需提供密碼才能存取此 Send。", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendNotesDesc": { - "message": "關於此 Send 的私人備註。", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "disabled": { "message": "已停用" }, @@ -5134,13 +5195,6 @@ "removePasswordConfirmation": { "message": "您確定要移除此密碼嗎?" }, - "hideEmail": { - "message": "對收件人隱藏我的電子郵件地址。" - }, - "disableThisSend": { - "message": "停用此 Send 以阻止任何人存取。", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "allSends": { "message": "所有 Send" }, @@ -5151,6 +5205,9 @@ "pendingDeletion": { "message": "等待刪除" }, + "hideTextByDefault": { + "message": "Hide text by default" + }, "expired": { "message": "已逾期" }, @@ -5372,13 +5429,6 @@ "message": "建立或編輯 Send 時,始終對收件人顯示成員的電子郵件地址。", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, - "sendOptionsPolicyInEffect": { - "message": "以下組織原則目前作用中:" - }, - "sendDisableHideEmailInEffect": { - "message": "使用者在建立或編輯 Send 時不允許隱藏他們的電子郵件地址。", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "modifiedPolicyId": { "message": "原則 $ID$ 已修改。", "placeholders": { @@ -5478,27 +5528,6 @@ "personalOwnershipCheckboxDesc": { "message": "停用組織使用者的個人擁有權" }, - "textHiddenByDefault": { - "message": "存取此 Send 時,將預設隱藏文字", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendNameDesc": { - "message": "用於描述此 Send 的易記名稱。", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendTextDesc": { - "message": "您想要傳送的文字。" - }, - "sendFileDesc": { - "message": "您想要傳送的檔案。" - }, - "copySendLinkOnSave": { - "message": "儲存時複製連結至剪貼簿以便共用此 Send。" - }, - "sendLinkLabel": { - "message": "Send 連結", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "send": { "message": "Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -5647,12 +5676,21 @@ "dateParsingError": { "message": "儲存刪除日期和逾期日期時發生錯誤。" }, + "hideYourEmail": { + "message": "Hide your email address from viewers." + }, "webAuthnFallbackMsg": { "message": "要驗證您的 2FA,請點選下方的按鈕。" }, "webAuthnAuthenticate": { "message": "驗證 WebAuthn" }, + "readSecurityKey": { + "message": "Read security key" + }, + "awaitingSecurityKeyInteraction": { + "message": "Awaiting security key interaction..." + }, "webAuthnNotSupported": { "message": "此瀏覽器不支援 WebAuthn。" }, @@ -7199,6 +7237,12 @@ "duoRequiredByOrgForAccount": { "message": "Duo two-step login is required for your account." }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "Duo two-step login is required for your account. Follow the steps below to finish logging in." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "Follow the steps below to finish logging in." + }, "launchDuo": { "message": "啟動 Duo" }, @@ -9793,9 +9837,15 @@ "learnMoreAboutApi": { "message": "瞭解更多關於 Bitwarden API 的資訊" }, + "fileSend": { + "message": "File Send" + }, "fileSends": { "message": "File Sends" }, + "textSend": { + "message": "Text Send" + }, "textSends": { "message": "Text Sends" }, @@ -10029,10 +10079,6 @@ "message": "包含特殊字元", "description": "Full description for the password generator special characters checkbox" }, - "specialCharactersLabel": { - "message": "!@#$%^&*", - "description": "Label for the password generator special characters checkbox" - }, "addAttachment": { "message": "新增附件" }, @@ -10432,10 +10478,31 @@ "assignedExceedsAvailable": { "message": "Assigned seats exceed available seats." }, + "changeAtRiskPassword": { + "message": "Change at-risk password" + }, "removeUnlockWithPinPolicyTitle": { "message": "Remove Unlock with PIN" }, "removeUnlockWithPinPolicyDesc": { "message": "Do not allow members to unlock their account with a PIN." + }, + "limitedEventLogs": { + "message": "$PRODUCT_TYPE$ plans do not have access to real event logs", + "placeholders": { + "product_type": { + "content": "$1", + "example": "Teams" + } + } + }, + "upgradeForFullEvents": { + "message": "Get full access to organization event logs by upgrading to a Teams or Enterprise plan." + }, + "upgradeEventLogTitle": { + "message": "Upgrade for real event log data" + }, + "upgradeEventLogMessage": { + "message": "These events are examples only and do not reflect real events within your Bitwarden organization." } } diff --git a/apps/web/src/polyfills.ts b/apps/web/src/polyfills.ts index 33af553f786..3971ed3207f 100644 --- a/apps/web/src/polyfills.ts +++ b/apps/web/src/polyfills.ts @@ -1,4 +1,5 @@ import "core-js/stable"; +import "core-js/proposals/explicit-resource-management"; import "zone.js"; if (process.env.NODE_ENV === "production") { diff --git a/apps/web/test.setup.ts b/apps/web/test.setup.ts index 224262ec83e..5c248668a6d 100644 --- a/apps/web/test.setup.ts +++ b/apps/web/test.setup.ts @@ -1,4 +1,4 @@ -import "jest-preset-angular/setup-jest"; +import "@bitwarden/ui-common/setup-jest"; Object.defineProperty(window, "CSS", { value: null }); Object.defineProperty(window, "getComputedStyle", { diff --git a/apps/web/tsconfig.json b/apps/web/tsconfig.json index d1da8ac4532..3d62a30bc01 100644 --- a/apps/web/tsconfig.json +++ b/apps/web/tsconfig.json @@ -26,6 +26,7 @@ "@bitwarden/send-ui": ["../../libs/tools/send/send-ui/src"], "@bitwarden/tools-card": ["../../libs/tools/card/src"], "@bitwarden/ui-common": ["../../libs/ui/common/src"], + "@bitwarden/ui-common/setup-jest": ["../../libs/ui/common/src/setup-jest"], "@bitwarden/vault-export-core": [ "../../libs/tools/export/vault-export/vault-export-core/src" ], diff --git a/bitwarden_license/bit-common/src/admin-console/auth-requests/pending-auth-request.view.ts b/bitwarden_license/bit-common/src/admin-console/auth-requests/pending-auth-request.view.ts index d32d6fcfbc7..b0f65cd3f76 100644 --- a/bitwarden_license/bit-common/src/admin-console/auth-requests/pending-auth-request.view.ts +++ b/bitwarden_license/bit-common/src/admin-console/auth-requests/pending-auth-request.view.ts @@ -13,6 +13,7 @@ export class PendingAuthRequestView implements View { requestDeviceIdentifier: string; requestDeviceType: string; requestIpAddress: string; + requestCountryName: string; creationDate: Date; static fromResponse(response: PendingOrganizationAuthRequestResponse): PendingAuthRequestView { diff --git a/bitwarden_license/bit-common/src/admin-console/auth-requests/pending-organization-auth-request.response.ts b/bitwarden_license/bit-common/src/admin-console/auth-requests/pending-organization-auth-request.response.ts index b4854eea4aa..0f686d17edd 100644 --- a/bitwarden_license/bit-common/src/admin-console/auth-requests/pending-organization-auth-request.response.ts +++ b/bitwarden_license/bit-common/src/admin-console/auth-requests/pending-organization-auth-request.response.ts @@ -9,6 +9,7 @@ export class PendingOrganizationAuthRequestResponse extends BaseResponse { requestDeviceIdentifier: string; requestDeviceType: string; requestIpAddress: string; + requestCountryName: string; creationDate: string; constructor(response: any) { @@ -21,6 +22,7 @@ export class PendingOrganizationAuthRequestResponse extends BaseResponse { this.requestDeviceIdentifier = this.getResponseProperty("RequestDeviceIdentifier"); this.requestDeviceType = this.getResponseProperty("RequestDeviceType"); this.requestIpAddress = this.getResponseProperty("RequestIpAddress"); + this.requestCountryName = this.getResponseProperty("RequestCountryName"); this.creationDate = this.getResponseProperty("CreationDate"); } } diff --git a/bitwarden_license/bit-common/test.setup.ts b/bitwarden_license/bit-common/test.setup.ts index a702c633967..3f9ef28ad00 100644 --- a/bitwarden_license/bit-common/test.setup.ts +++ b/bitwarden_license/bit-common/test.setup.ts @@ -1 +1 @@ -import "jest-preset-angular/setup-jest"; +import "@bitwarden/ui-common/setup-jest"; diff --git a/bitwarden_license/bit-common/tsconfig.json b/bitwarden_license/bit-common/tsconfig.json index bc36576f1b3..641b0ac6aa9 100644 --- a/bitwarden_license/bit-common/tsconfig.json +++ b/bitwarden_license/bit-common/tsconfig.json @@ -22,6 +22,7 @@ "@bitwarden/send-ui": ["../../libs/tools/send/send-ui/src"], "@bitwarden/tools-card": ["../../libs/tools/card/src"], "@bitwarden/ui-common": ["../../libs/ui/common/src"], + "@bitwarden/ui-common/setup-jest": ["../../libs/ui/common/src/setup-jest"], "@bitwarden/vault-export-core": [ "../../libs/tools/export/vault-export/vault-export-core/src" ], diff --git a/bitwarden_license/bit-web/src/app/admin-console/organizations/manage/domain-verification/domain-verification.component.ts b/bitwarden_license/bit-web/src/app/admin-console/organizations/manage/domain-verification/domain-verification.component.ts index 1cbe57a7082..70823d61c39 100644 --- a/bitwarden_license/bit-web/src/app/admin-console/organizations/manage/domain-verification/domain-verification.component.ts +++ b/bitwarden_license/bit-web/src/app/admin-console/organizations/manage/domain-verification/domain-verification.component.ts @@ -61,7 +61,6 @@ export class DomainVerificationComponent implements OnInit, OnDestroy { ); } - // eslint-disable-next-line @typescript-eslint/no-empty-function async ngOnInit() { this.orgDomains$ = this.orgDomainService.orgDomains$; diff --git a/bitwarden_license/bit-web/src/app/admin-console/organizations/manage/scim.component.ts b/bitwarden_license/bit-web/src/app/admin-console/organizations/manage/scim.component.ts index ea24e74ac8f..76bcd7383f3 100644 --- a/bitwarden_license/bit-web/src/app/admin-console/organizations/manage/scim.component.ts +++ b/bitwarden_license/bit-web/src/app/admin-console/organizations/manage/scim.component.ts @@ -25,7 +25,6 @@ import { DialogService, ToastService } from "@bitwarden/components"; selector: "app-org-manage-scim", templateUrl: "scim.component.html", }) -// eslint-disable-next-line rxjs-angular/prefer-takeuntil export class ScimComponent implements OnInit { loading = true; organizationId: string; diff --git a/bitwarden_license/bit-web/src/app/admin-console/policies/maximum-vault-timeout.component.ts b/bitwarden_license/bit-web/src/app/admin-console/policies/maximum-vault-timeout.component.ts index a0ad1cd3010..9d09ead800e 100644 --- a/bitwarden_license/bit-web/src/app/admin-console/policies/maximum-vault-timeout.component.ts +++ b/bitwarden_license/bit-web/src/app/admin-console/policies/maximum-vault-timeout.component.ts @@ -5,7 +5,7 @@ import { FormBuilder, FormControl } from "@angular/forms"; import { PolicyType } from "@bitwarden/common/admin-console/enums"; import { PolicyRequest } from "@bitwarden/common/admin-console/models/request/policy.request"; -import { VaultTimeoutAction } from "@bitwarden/common/enums/vault-timeout-action.enum"; +import { VaultTimeoutAction } from "@bitwarden/common/key-management/vault-timeout"; import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; import { BasePolicy, diff --git a/bitwarden_license/bit-web/src/app/admin-console/providers/clients/base-clients.component.ts b/bitwarden_license/bit-web/src/app/admin-console/providers/clients/base-clients.component.ts deleted file mode 100644 index 6cfe3cfff18..00000000000 --- a/bitwarden_license/bit-web/src/app/admin-console/providers/clients/base-clients.component.ts +++ /dev/null @@ -1,132 +0,0 @@ -// FIXME: Update this file to be type safe and remove this and next line -// @ts-strict-ignore -import { SelectionModel } from "@angular/cdk/collections"; -import { Directive, OnDestroy, OnInit } from "@angular/core"; -import { ActivatedRoute } from "@angular/router"; -import { BehaviorSubject, from, Subject, switchMap } from "rxjs"; -import { first, takeUntil } from "rxjs/operators"; - -import { SearchService } from "@bitwarden/common/abstractions/search.service"; -import { ProviderOrganizationOrganizationDetailsResponse } from "@bitwarden/common/admin-console/models/response/provider/provider-organization.response"; -import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; -import { ValidationService } from "@bitwarden/common/platform/abstractions/validation.service"; -import { DialogService, TableDataSource, ToastService } from "@bitwarden/components"; - -import { WebProviderService } from "../services/web-provider.service"; - -@Directive() -export abstract class BaseClientsComponent implements OnInit, OnDestroy { - protected destroy$ = new Subject(); - - private searchText$ = new BehaviorSubject(""); - - get searchText() { - return this.searchText$.value; - } - - set searchText(value: string) { - this.searchText$.next(value); - this.selection.clear(); - this.dataSource.filter = value; - } - - private searching = false; - protected scrolled = false; - protected pageSize = 100; - private pagedClientsCount = 0; - protected selection = new SelectionModel(true, []); - - protected clients: ProviderOrganizationOrganizationDetailsResponse[]; - protected pagedClients: ProviderOrganizationOrganizationDetailsResponse[]; - protected dataSource = new TableDataSource(); - - abstract providerId: string; - - protected constructor( - protected activatedRoute: ActivatedRoute, - protected dialogService: DialogService, - private i18nService: I18nService, - private searchService: SearchService, - private toastService: ToastService, - private validationService: ValidationService, - private webProviderService: WebProviderService, - ) {} - - abstract load(): Promise; - - ngOnInit() { - this.activatedRoute.queryParams - .pipe(first(), takeUntil(this.destroy$)) - .subscribe((queryParams) => { - this.searchText = queryParams.search; - }); - - this.searchText$ - .pipe( - switchMap((searchText) => from(this.searchService.isSearchable(searchText))), - takeUntil(this.destroy$), - ) - .subscribe((isSearchable) => { - this.searching = isSearchable; - }); - } - - ngOnDestroy() { - this.destroy$.next(); - this.destroy$.complete(); - } - - isPaging() { - if (this.searching && this.scrolled) { - this.resetPaging(); - } - return !this.searching && this.clients && this.clients.length > this.pageSize; - } - - resetPaging() { - this.pagedClients = []; - this.loadMore(); - } - - loadMore() { - if (!this.clients || this.clients.length <= this.pageSize) { - return; - } - const pagedLength = this.pagedClients.length; - let pagedSize = this.pageSize; - if (pagedLength === 0 && this.pagedClientsCount > this.pageSize) { - pagedSize = this.pagedClientsCount; - } - if (this.clients.length > pagedLength) { - this.pagedClients = this.pagedClients.concat( - this.clients.slice(pagedLength, pagedLength + pagedSize), - ); - } - this.pagedClientsCount = this.pagedClients.length; - this.scrolled = this.pagedClients.length > this.pageSize; - } - - async remove(organization: ProviderOrganizationOrganizationDetailsResponse) { - const confirmed = await this.dialogService.openSimpleDialog({ - title: organization.organizationName, - content: { key: "detachOrganizationConfirmation" }, - type: "warning", - }); - - if (!confirmed) { - return; - } - - try { - await this.webProviderService.detachOrganization(this.providerId, organization.id); - this.toastService.showToast({ - variant: "success", - title: null, - message: this.i18nService.t("detachedOrganization", organization.organizationName), - }); - await this.load(); - } catch (e) { - this.validationService.showError(e); - } - } -} diff --git a/bitwarden_license/bit-web/src/app/admin-console/providers/clients/create-organization.component.ts b/bitwarden_license/bit-web/src/app/admin-console/providers/clients/create-organization.component.ts index ec352748064..d22665b432f 100644 --- a/bitwarden_license/bit-web/src/app/admin-console/providers/clients/create-organization.component.ts +++ b/bitwarden_license/bit-web/src/app/admin-console/providers/clients/create-organization.component.ts @@ -9,7 +9,6 @@ import { OrganizationPlansComponent } from "@bitwarden/web-vault/app/billing"; selector: "app-create-organization", templateUrl: "create-organization.component.html", }) -// eslint-disable-next-line rxjs-angular/prefer-takeuntil export class CreateOrganizationComponent implements OnInit { @ViewChild(OrganizationPlansComponent, { static: true }) orgPlansComponent: OrganizationPlansComponent; diff --git a/bitwarden_license/bit-web/src/app/admin-console/providers/manage/events.component.ts b/bitwarden_license/bit-web/src/app/admin-console/providers/manage/events.component.ts index 6390d13ee16..87f29fd91e9 100644 --- a/bitwarden_license/bit-web/src/app/admin-console/providers/manage/events.component.ts +++ b/bitwarden_license/bit-web/src/app/admin-console/providers/manage/events.component.ts @@ -20,7 +20,6 @@ import { EventExportService } from "@bitwarden/web-vault/app/tools/event-export" selector: "provider-events", templateUrl: "events.component.html", }) -// eslint-disable-next-line rxjs-angular/prefer-takeuntil export class EventsComponent extends BaseEventsComponent implements OnInit { exportFileName = "provider-events"; providerId: string; diff --git a/bitwarden_license/bit-web/src/app/admin-console/providers/settings/account.component.ts b/bitwarden_license/bit-web/src/app/admin-console/providers/settings/account.component.ts index e0a4eaedce1..e72e1c7c326 100644 --- a/bitwarden_license/bit-web/src/app/admin-console/providers/settings/account.component.ts +++ b/bitwarden_license/bit-web/src/app/admin-console/providers/settings/account.component.ts @@ -21,7 +21,6 @@ import { DialogService, ToastService } from "@bitwarden/components"; selector: "provider-account", templateUrl: "account.component.html", }) -// eslint-disable-next-line rxjs-angular/prefer-takeuntil export class AccountComponent implements OnDestroy, OnInit { selfHosted = false; loading = true; diff --git a/bitwarden_license/bit-web/src/app/admin-console/providers/verify-recover-delete-provider.component.ts b/bitwarden_license/bit-web/src/app/admin-console/providers/verify-recover-delete-provider.component.ts index 83a87d8bc6c..b27a7ddd0f4 100644 --- a/bitwarden_license/bit-web/src/app/admin-console/providers/verify-recover-delete-provider.component.ts +++ b/bitwarden_license/bit-web/src/app/admin-console/providers/verify-recover-delete-provider.component.ts @@ -14,7 +14,6 @@ import { ToastService } from "@bitwarden/components"; selector: "app-verify-recover-delete-provider", templateUrl: "verify-recover-delete-provider.component.html", }) -// eslint-disable-next-line rxjs-angular/prefer-takeuntil export class VerifyRecoverDeleteProviderComponent implements OnInit { name: string; diff --git a/bitwarden_license/bit-web/src/app/billing/providers/subscription/provider-subscription.component.html b/bitwarden_license/bit-web/src/app/billing/providers/subscription/provider-subscription.component.html index 72f743d2cc7..63b5bc01dd8 100644 --- a/bitwarden_license/bit-web/src/app/billing/providers/subscription/provider-subscription.component.html +++ b/bitwarden_license/bit-web/src/app/billing/providers/subscription/provider-subscription.component.html @@ -1,7 +1,7 @@ - + {{ "loading" | i18n }} @@ -11,7 +11,7 @@
{{ "details" | i18n }}   - {{ "requestPasswordChange" | i18n }} + {{ + enableRequestPasswordChange + ? ("requestPasswordChange" | i18n) + : ("noCriticalAppsAtRisk" | i18n) + }}
diff --git a/bitwarden_license/bit-web/src/app/tools/access-intelligence/risk-insights.component.ts b/bitwarden_license/bit-web/src/app/tools/access-intelligence/risk-insights.component.ts index 20dc320de20..68ec7bb2496 100644 --- a/bitwarden_license/bit-web/src/app/tools/access-intelligence/risk-insights.component.ts +++ b/bitwarden_license/bit-web/src/app/tools/access-intelligence/risk-insights.component.ts @@ -15,7 +15,6 @@ import { DrawerType, PasswordHealthReportApplicationsResponse, } from "@bitwarden/bit-common/tools/reports/risk-insights/models/password-health"; -// eslint-disable-next-line no-restricted-imports -- used for dependency injection import { FeatureFlag } from "@bitwarden/common/enums/feature-flag.enum"; import { ConfigService } from "@bitwarden/common/platform/abstractions/config/config.service"; import { devFlagEnabled } from "@bitwarden/common/platform/misc/flags"; diff --git a/bitwarden_license/bit-web/src/app/tools/reports/member-access-report/member-access-report.component.html b/bitwarden_license/bit-web/src/app/tools/reports/member-access-report/member-access-report.component.html index 6483a196a3f..f2e550cb68e 100644 --- a/bitwarden_license/bit-web/src/app/tools/reports/member-access-report/member-access-report.component.html +++ b/bitwarden_license/bit-web/src/app/tools/reports/member-access-report/member-access-report.component.html @@ -35,7 +35,12 @@
- + {{ "members" | i18n }} @@ -44,25 +49,23 @@ {{ "items" | i18n }} - - - -
- -
- + + +
+ +
+ -
- {{ r.email }} -
+
+ {{ row.email }}
- - {{ r.groupsCount }} - {{ r.collectionsCount }} - {{ r.itemsCount }} - +
+ + {{ row.groupsCount }} + {{ row.collectionsCount }} + {{ row.itemsCount }}
- + diff --git a/bitwarden_license/bit-web/tsconfig.json b/bitwarden_license/bit-web/tsconfig.json index 82e0b7f57fa..679513a656f 100644 --- a/bitwarden_license/bit-web/tsconfig.json +++ b/bitwarden_license/bit-web/tsconfig.json @@ -27,6 +27,7 @@ "@bitwarden/key-management-ui": ["../../libs/key-management-ui/src"], "@bitwarden/platform": ["../../libs/platform/src"], "@bitwarden/ui-common": ["../../libs/ui/common/src"], + "@bitwarden/ui-common/setup-jest": ["../../libs/ui/common/src/setup-jest"], "@bitwarden/send-ui": ["../../libs/tools/send/send-ui/src"], "@bitwarden/tools-card": ["../../libs/tools/card/src"], "@bitwarden/vault": ["../../libs/vault/src"], diff --git a/eslint.config.mjs b/eslint.config.mjs index 2d7c91521f9..9d93d1118c0 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -27,6 +27,9 @@ export default tseslint.config( importPlugin.flatConfigs.typescript, eslintConfigPrettier, // Disables rules that conflict with Prettier ], + linterOptions: { + reportUnusedDisableDirectives: "error", + }, plugins: { rxjs: rxjs, "rxjs-angular": angularRxjs, diff --git a/libs/admin-console/test.setup.ts b/libs/admin-console/test.setup.ts index 8ab102f2cf4..7656954feca 100644 --- a/libs/admin-console/test.setup.ts +++ b/libs/admin-console/test.setup.ts @@ -1,7 +1,7 @@ import { webcrypto } from "crypto"; import { addCustomMatchers } from "@bitwarden/common/spec"; -import "jest-preset-angular/setup-jest"; +import "@bitwarden/ui-common/setup-jest"; addCustomMatchers(); diff --git a/libs/angular/src/auth/components/login-via-auth-request-v1.component.ts b/libs/angular/src/auth/components/login-via-auth-request-v1.component.ts index 7409acf6845..7f5a5c3f299 100644 --- a/libs/angular/src/auth/components/login-via-auth-request-v1.component.ts +++ b/libs/angular/src/auth/components/login-via-auth-request-v1.component.ts @@ -107,7 +107,6 @@ export class LoginViaAuthRequestComponentV1 this.authRequestService.authRequestPushNotification$ .pipe(takeUntil(this.destroy$)) .subscribe((id) => { - // eslint-disable-next-line @typescript-eslint/no-floating-promises this.verifyAndHandleApprovedAuthReq(id).catch((e: Error) => { this.toastService.showToast({ variant: "error", diff --git a/libs/angular/src/auth/components/two-factor-v1.component.spec.ts b/libs/angular/src/auth/components/two-factor-v1.component.spec.ts index 82dea7cd8c0..ccbd8e18a6c 100644 --- a/libs/angular/src/auth/components/two-factor-v1.component.spec.ts +++ b/libs/angular/src/auth/components/two-factor-v1.component.spec.ts @@ -4,7 +4,6 @@ import { ActivatedRoute, convertToParamMap, Router } from "@angular/router"; import { mock, MockProxy } from "jest-mock-extended"; import { BehaviorSubject } from "rxjs"; -// eslint-disable-next-line no-restricted-imports import { WINDOW } from "@bitwarden/angular/services/injection-tokens"; import { LoginStrategyServiceAbstraction, diff --git a/libs/angular/src/auth/components/two-factor-v1.component.ts b/libs/angular/src/auth/components/two-factor-v1.component.ts index 4cbaa9362f2..1040916c365 100644 --- a/libs/angular/src/auth/components/two-factor-v1.component.ts +++ b/libs/angular/src/auth/components/two-factor-v1.component.ts @@ -6,7 +6,6 @@ import { ActivatedRoute, NavigationExtras, Router } from "@angular/router"; import { firstValueFrom } from "rxjs"; import { first } from "rxjs/operators"; -// eslint-disable-next-line no-restricted-imports import { WINDOW } from "@bitwarden/angular/services/injection-tokens"; import { LoginStrategyServiceAbstraction, diff --git a/libs/angular/src/auth/components/user-verification.component.ts b/libs/angular/src/auth/components/user-verification.component.ts index 7af53805a09..408d8403b88 100644 --- a/libs/angular/src/auth/components/user-verification.component.ts +++ b/libs/angular/src/auth/components/user-verification.component.ts @@ -23,7 +23,6 @@ import { KeyService } from "@bitwarden/key-management"; @Directive({ selector: "app-user-verification", }) -// eslint-disable-next-line rxjs-angular/prefer-takeuntil export class UserVerificationComponent implements ControlValueAccessor, OnInit, OnDestroy { private _invalidSecret = false; @Input() diff --git a/libs/angular/src/auth/guards/lock.guard.spec.ts b/libs/angular/src/auth/guards/lock.guard.spec.ts index d801ef0f8f9..1b09a415999 100644 --- a/libs/angular/src/auth/guards/lock.guard.spec.ts +++ b/libs/angular/src/auth/guards/lock.guard.spec.ts @@ -5,7 +5,6 @@ import { MockProxy, mock } from "jest-mock-extended"; import { BehaviorSubject, of } from "rxjs"; import { EmptyComponent } from "@bitwarden/angular/platform/guard/feature-flag.guard.spec"; -import { VaultTimeoutSettingsService } from "@bitwarden/common/abstractions/vault-timeout/vault-timeout-settings.service"; import { Account, AccountInfo, @@ -16,6 +15,7 @@ import { DeviceTrustServiceAbstraction } from "@bitwarden/common/auth/abstractio import { UserVerificationService } from "@bitwarden/common/auth/abstractions/user-verification/user-verification.service.abstraction"; import { AuthenticationStatus } from "@bitwarden/common/auth/enums/authentication-status"; import { ClientType } from "@bitwarden/common/enums"; +import { VaultTimeoutSettingsService } from "@bitwarden/common/key-management/vault-timeout"; import { MessagingService } from "@bitwarden/common/platform/abstractions/messaging.service"; import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service"; import { UserId } from "@bitwarden/common/types/guid"; diff --git a/libs/angular/src/auth/guards/lock.guard.ts b/libs/angular/src/auth/guards/lock.guard.ts index 244e9935281..c7627442c69 100644 --- a/libs/angular/src/auth/guards/lock.guard.ts +++ b/libs/angular/src/auth/guards/lock.guard.ts @@ -7,13 +7,13 @@ import { } from "@angular/router"; import { firstValueFrom } from "rxjs"; -import { VaultTimeoutSettingsService } from "@bitwarden/common/abstractions/vault-timeout/vault-timeout-settings.service"; import { AccountService } from "@bitwarden/common/auth/abstractions/account.service"; import { AuthService } from "@bitwarden/common/auth/abstractions/auth.service"; import { DeviceTrustServiceAbstraction } from "@bitwarden/common/auth/abstractions/device-trust.service.abstraction"; import { UserVerificationService } from "@bitwarden/common/auth/abstractions/user-verification/user-verification.service.abstraction"; import { AuthenticationStatus } from "@bitwarden/common/auth/enums/authentication-status"; import { ClientType } from "@bitwarden/common/enums"; +import { VaultTimeoutSettingsService } from "@bitwarden/common/key-management/vault-timeout"; import { MessagingService } from "@bitwarden/common/platform/abstractions/messaging.service"; import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service"; import { KeyService } from "@bitwarden/key-management"; diff --git a/libs/angular/src/billing/components/invoices/invoices.component.html b/libs/angular/src/billing/components/invoices/invoices.component.html index 2a171e5b5bc..634baa4fa7f 100644 --- a/libs/angular/src/billing/components/invoices/invoices.component.html +++ b/libs/angular/src/billing/components/invoices/invoices.component.html @@ -1,10 +1,10 @@ - {{ "loading" | i18n }} + {{ "loading" | i18n }} diff --git a/libs/angular/src/platform/services/theming/angular-theming.service.ts b/libs/angular/src/platform/services/theming/angular-theming.service.ts index 2073abdcd10..8f1d863844f 100644 --- a/libs/angular/src/platform/services/theming/angular-theming.service.ts +++ b/libs/angular/src/platform/services/theming/angular-theming.service.ts @@ -59,8 +59,6 @@ export class AngularThemingService implements AbstractThemingService { document.documentElement.classList.remove( "theme_" + ThemeTypes.Light, "theme_" + ThemeTypes.Dark, - "theme_" + ThemeTypes.Nord, - "theme_" + ThemeTypes.SolarizedDark, ); document.documentElement.classList.add("theme_" + theme); }); diff --git a/libs/angular/src/services/injection-tokens.ts b/libs/angular/src/services/injection-tokens.ts index 2c740d5bb42..a63d862b0d8 100644 --- a/libs/angular/src/services/injection-tokens.ts +++ b/libs/angular/src/services/injection-tokens.ts @@ -4,6 +4,7 @@ import { Observable, Subject } from "rxjs"; import { LogoutReason } from "@bitwarden/auth/common"; import { ClientType } from "@bitwarden/common/enums"; +import { VaultTimeout } from "@bitwarden/common/key-management/vault-timeout"; import { RegionConfig } from "@bitwarden/common/platform/abstractions/environment.service"; import { AbstractStorageService, @@ -12,7 +13,6 @@ 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 { VaultTimeout } from "@bitwarden/common/types/vault-timeout.type"; import { SafeInjectionToken } from "@bitwarden/ui-common"; // Re-export the SafeInjectionToken from ui-common export { SafeInjectionToken } from "@bitwarden/ui-common"; diff --git a/libs/angular/src/services/jslib-services.module.ts b/libs/angular/src/services/jslib-services.module.ts index 10f3f32fb85..9ee49a30689 100644 --- a/libs/angular/src/services/jslib-services.module.ts +++ b/libs/angular/src/services/jslib-services.module.ts @@ -45,8 +45,6 @@ import { DefaultAuthRequestApiService, DefaultLoginSuccessHandlerService, LoginSuccessHandlerService, - PasswordLoginStrategy, - PasswordLoginStrategyData, LoginApprovalComponentServiceAbstraction, } from "@bitwarden/auth/common"; import { ApiService as ApiServiceAbstraction } from "@bitwarden/common/abstractions/api.service"; @@ -54,8 +52,6 @@ import { AuditService as AuditServiceAbstraction } from "@bitwarden/common/abstr import { EventCollectionService as EventCollectionServiceAbstraction } from "@bitwarden/common/abstractions/event/event-collection.service"; import { EventUploadService as EventUploadServiceAbstraction } from "@bitwarden/common/abstractions/event/event-upload.service"; import { SearchService as SearchServiceAbstraction } from "@bitwarden/common/abstractions/search.service"; -import { VaultTimeoutSettingsService as VaultTimeoutSettingsServiceAbstraction } from "@bitwarden/common/abstractions/vault-timeout/vault-timeout-settings.service"; -import { VaultTimeoutService as VaultTimeoutServiceAbstraction } from "@bitwarden/common/abstractions/vault-timeout/vault-timeout.service"; import { OrganizationApiServiceAbstraction } from "@bitwarden/common/admin-console/abstractions/organization/organization-api.service.abstraction"; import { InternalOrganizationServiceAbstraction, @@ -157,6 +153,12 @@ import { BulkEncryptService } from "@bitwarden/common/key-management/crypto/abst import { EncryptService } from "@bitwarden/common/key-management/crypto/abstractions/encrypt.service"; import { BulkEncryptServiceImplementation } from "@bitwarden/common/key-management/crypto/services/bulk-encrypt.service.implementation"; import { MultithreadEncryptServiceImplementation } from "@bitwarden/common/key-management/crypto/services/multithread-encrypt.service.implementation"; +import { + DefaultVaultTimeoutService, + DefaultVaultTimeoutSettingsService, + VaultTimeoutService, + VaultTimeoutSettingsService, +} from "@bitwarden/common/key-management/vault-timeout"; import { AppIdService as AppIdServiceAbstraction } from "@bitwarden/common/platform/abstractions/app-id.service"; import { BroadcasterService } from "@bitwarden/common/platform/abstractions/broadcaster.service"; import { ConfigApiServiceAbstraction } from "@bitwarden/common/platform/abstractions/config/config-api.service.abstraction"; @@ -243,8 +245,6 @@ import { AuditService } from "@bitwarden/common/services/audit.service"; import { EventCollectionService } from "@bitwarden/common/services/event/event-collection.service"; import { EventUploadService } from "@bitwarden/common/services/event/event-upload.service"; import { SearchService } from "@bitwarden/common/services/search.service"; -import { VaultTimeoutSettingsService } from "@bitwarden/common/services/vault-timeout/vault-timeout-settings.service"; -import { VaultTimeoutService } from "@bitwarden/common/services/vault-timeout/vault-timeout.service"; import { PasswordStrengthService, PasswordStrengthServiceAbstraction, @@ -408,7 +408,7 @@ const safeProviders: SafeProvider[] = [ safeProvider({ provide: ThemeStateService, useClass: DefaultThemeStateService, - deps: [GlobalStateProvider, ConfigService], + deps: [GlobalStateProvider], }), safeProvider({ provide: AbstractThemingService, @@ -463,7 +463,7 @@ const safeProviders: SafeProvider[] = [ InternalUserDecryptionOptionsServiceAbstraction, GlobalStateProvider, BillingAccountProfileStateService, - VaultTimeoutSettingsServiceAbstraction, + VaultTimeoutSettingsService, KdfConfigService, TaskSchedulerService, ], @@ -603,7 +603,7 @@ const safeProviders: SafeProvider[] = [ safeProvider({ provide: TotpServiceAbstraction, useClass: TotpService, - deps: [CryptoFunctionServiceAbstraction, LogService], + deps: [SdkService], }), safeProvider({ provide: TokenServiceAbstraction, @@ -697,7 +697,7 @@ const safeProviders: SafeProvider[] = [ REFRESH_ACCESS_TOKEN_ERROR_CALLBACK, LogService, LOGOUT_CALLBACK, - VaultTimeoutSettingsServiceAbstraction, + VaultTimeoutSettingsService, ], }), safeProvider({ @@ -762,8 +762,8 @@ const safeProviders: SafeProvider[] = [ deps: [MessageListener], }), safeProvider({ - provide: VaultTimeoutSettingsServiceAbstraction, - useClass: VaultTimeoutSettingsService, + provide: VaultTimeoutSettingsService, + useClass: DefaultVaultTimeoutSettingsService, deps: [ AccountServiceAbstraction, PinServiceAbstraction, @@ -778,8 +778,8 @@ const safeProviders: SafeProvider[] = [ ], }), safeProvider({ - provide: VaultTimeoutService, - useClass: VaultTimeoutService, + provide: DefaultVaultTimeoutService, + useClass: DefaultVaultTimeoutService, deps: [ AccountServiceAbstraction, InternalMasterPasswordServiceAbstraction, @@ -791,7 +791,7 @@ const safeProviders: SafeProvider[] = [ SearchServiceAbstraction, StateServiceAbstraction, AuthServiceAbstraction, - VaultTimeoutSettingsServiceAbstraction, + VaultTimeoutSettingsService, StateEventRunnerService, TaskSchedulerService, LogService, @@ -801,8 +801,8 @@ const safeProviders: SafeProvider[] = [ ], }), safeProvider({ - provide: VaultTimeoutServiceAbstraction, - useExisting: VaultTimeoutService, + provide: VaultTimeoutService, + useExisting: DefaultVaultTimeoutService, }), safeProvider({ provide: SsoLoginServiceAbstraction, @@ -1458,37 +1458,6 @@ const safeProviders: SafeProvider[] = [ useClass: DefaultLoginSuccessHandlerService, deps: [SyncService, UserAsymmetricKeysRegenerationService], }), - safeProvider({ - provide: PasswordLoginStrategy, - useClass: PasswordLoginStrategy, - deps: [ - PasswordLoginStrategyData, - PasswordStrengthServiceAbstraction, - PolicyServiceAbstraction, - LoginStrategyServiceAbstraction, - AccountServiceAbstraction, - InternalMasterPasswordServiceAbstraction, - KeyService, - EncryptService, - ApiServiceAbstraction, - TokenServiceAbstraction, - AppIdServiceAbstraction, - PlatformUtilsServiceAbstraction, - MessagingServiceAbstraction, - LogService, - StateServiceAbstraction, - TwoFactorServiceAbstraction, - InternalUserDecryptionOptionsServiceAbstraction, - BillingAccountProfileStateService, - VaultTimeoutSettingsServiceAbstraction, - KdfConfigService, - ], - }), - safeProvider({ - provide: PasswordLoginStrategyData, - useClass: PasswordLoginStrategyData, - deps: [], - }), safeProvider({ provide: TaskService, useClass: DefaultTaskService, diff --git a/libs/angular/src/tools/send/send.component.ts b/libs/angular/src/tools/send/send.component.ts index 6b7f911ed12..738960fc628 100644 --- a/libs/angular/src/tools/send/send.component.ts +++ b/libs/angular/src/tools/send/send.component.ts @@ -14,6 +14,8 @@ import { import { SearchService } from "@bitwarden/common/abstractions/search.service"; import { PolicyService } from "@bitwarden/common/admin-console/abstractions/policy/policy.service.abstraction"; import { PolicyType } from "@bitwarden/common/admin-console/enums"; +import { AccountService } from "@bitwarden/common/auth/abstractions/account.service"; +import { getUserId } from "@bitwarden/common/auth/services/account.service"; import { EnvironmentService } from "@bitwarden/common/platform/abstractions/environment.service"; import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; import { LogService } from "@bitwarden/common/platform/abstractions/log.service"; @@ -79,9 +81,12 @@ export class SendComponent implements OnInit, OnDestroy { protected sendApiService: SendApiService, protected dialogService: DialogService, protected toastService: ToastService, + private accountService: AccountService, ) {} async ngOnInit() { + const userId = await firstValueFrom(getUserId(this.accountService.activeAccount$)); + this.policyService .policyAppliesToActiveUser$(PolicyType.DisableSend) .pipe(takeUntil(this.destroy$)) @@ -91,7 +96,7 @@ export class SendComponent implements OnInit, OnDestroy { this._searchText$ .pipe( - switchMap((searchText) => from(this.searchService.isSearchable(searchText))), + switchMap((searchText) => from(this.searchService.isSearchable(userId, searchText))), takeUntil(this.destroy$), ) .subscribe((isSearchable) => { diff --git a/libs/angular/src/vault/components/vault-items.component.ts b/libs/angular/src/vault/components/vault-items.component.ts index fb76ff500eb..f7280cb74b3 100644 --- a/libs/angular/src/vault/components/vault-items.component.ts +++ b/libs/angular/src/vault/components/vault-items.component.ts @@ -1,8 +1,7 @@ // FIXME: Update this file to be type safe and remove this and next line // @ts-strict-ignore import { Directive, EventEmitter, Input, OnDestroy, OnInit, Output } from "@angular/core"; -import { takeUntilDestroyed } from "@angular/core/rxjs-interop"; -import { BehaviorSubject, Subject, firstValueFrom, from, map, switchMap, takeUntil } from "rxjs"; +import { BehaviorSubject, Subject, firstValueFrom, from, switchMap, takeUntil } from "rxjs"; import { SearchService } from "@bitwarden/common/abstractions/search.service"; import { Organization } from "@bitwarden/common/admin-console/models/domain/organization"; @@ -22,14 +21,13 @@ export class VaultItemsComponent implements OnInit, OnDestroy { loaded = false; ciphers: CipherView[] = []; - searchPlaceholder: string = null; filter: (cipher: CipherView) => boolean = null; deleted = false; organization: Organization; - accessEvents = false; protected searchPending = false; + private userId: UserId; private destroy$ = new Subject(); private searchTimeout: any = null; private isSearchable: boolean = false; @@ -45,25 +43,14 @@ export class VaultItemsComponent implements OnInit, OnDestroy { protected searchService: SearchService, protected cipherService: CipherService, protected accountService: AccountService, - ) { - this.accountService.activeAccount$ - .pipe( - getUserId, - switchMap((userId) => - this.cipherService.cipherViews$(userId).pipe(map((ciphers) => ({ userId, ciphers }))), - ), - takeUntilDestroyed(), - ) - .subscribe(({ userId, ciphers }) => { - void this.doSearch(ciphers, userId); - this.loaded = true; - }); - } + ) {} + + async ngOnInit() { + this.userId = await firstValueFrom(getUserId(this.accountService.activeAccount$)); - ngOnInit(): void { this._searchText$ .pipe( - switchMap((searchText) => from(this.searchService.isSearchable(searchText))), + switchMap((searchText) => from(this.searchService.isSearchable(this.userId, searchText))), takeUntil(this.destroy$), ) .subscribe((isSearchable) => { @@ -149,6 +136,7 @@ export class VaultItemsComponent implements OnInit, OnDestroy { } this.ciphers = await this.searchService.searchCiphers( + this.userId, this.searchText, [this.filter, this.deletedFilter], indexedCiphers, diff --git a/libs/angular/src/vault/components/view.component.ts b/libs/angular/src/vault/components/view.component.ts index 92a231ab8db..a2285e6a835 100644 --- a/libs/angular/src/vault/components/view.component.ts +++ b/libs/angular/src/vault/components/view.component.ts @@ -41,6 +41,7 @@ import { AttachmentView } from "@bitwarden/common/vault/models/view/attachment.v import { CipherView } from "@bitwarden/common/vault/models/view/cipher.view"; import { FolderView } from "@bitwarden/common/vault/models/view/folder.view"; import { CipherAuthorizationService } from "@bitwarden/common/vault/services/cipher-authorization.service"; +import { TotpInfo } from "@bitwarden/common/vault/services/totp.service"; import { DialogService, ToastService } from "@bitwarden/components"; import { KeyService } from "@bitwarden/key-management"; import { PasswordRepromptService } from "@bitwarden/vault"; @@ -66,20 +67,19 @@ export class ViewComponent implements OnDestroy, OnInit { showPrivateKey: boolean; canAccessPremium: boolean; showPremiumRequiredTotp: boolean; - totpCode: string; - totpCodeFormatted: string; - totpDash: number; - totpSec: number; - totpLow: boolean; fieldType = FieldType; checkPasswordPromise: Promise; folder: FolderView; cipherType = CipherType; - private totpInterval: any; private previousCipherId: string; private passwordReprompted = false; + /** + * Represents TOTP information including display formatting and timing + */ + protected totpInfo$: Observable | undefined; + get fido2CredentialCreationDateValue(): string { const dateCreated = this.i18nService.t("dateCreated"); const creationDate = this.datePipe.transform( @@ -166,19 +166,33 @@ export class ViewComponent implements OnDestroy, OnInit { ).find((f) => f.id == this.cipher.folderId); } - if ( + const canGenerateTotp = this.cipher.type === CipherType.Login && this.cipher.login.totp && - (this.cipher.organizationUseTotp || this.canAccessPremium) - ) { - await this.totpUpdateCode(); - const interval = this.totpService.getTimeInterval(this.cipher.login.totp); - await this.totpTick(interval); + (this.cipher.organizationUseTotp || this.canAccessPremium); - this.totpInterval = setInterval(async () => { - await this.totpTick(interval); - }, 1000); - } + this.totpInfo$ = canGenerateTotp + ? this.totpService.getCode$(this.cipher.login.totp).pipe( + map((response) => { + const epoch = Math.round(new Date().getTime() / 1000.0); + const mod = epoch % response.period; + + // Format code + const totpCodeFormatted = + response.code.length > 4 + ? `${response.code.slice(0, Math.floor(response.code.length / 2))} ${response.code.slice(Math.floor(response.code.length / 2))}` + : response.code; + + return { + totpCode: response.code, + totpCodeFormatted, + totpDash: +(Math.round(((78.6 / response.period) * mod + "e+2") as any) + "e-2"), + totpSec: response.period - mod, + totpLow: response.period - mod <= 7, + } as TotpInfo; + }), + ) + : undefined; if (this.previousCipherId !== this.cipherId) { // FIXME: Verify that this floating promise is intentional. If it is, add an explanatory comment and ensure there is proper error handling. @@ -515,56 +529,11 @@ export class ViewComponent implements OnDestroy, OnInit { } private cleanUp() { - this.totpCode = null; this.cipher = null; this.folder = null; this.showPassword = false; this.showCardNumber = false; this.showCardCode = false; this.passwordReprompted = false; - if (this.totpInterval) { - clearInterval(this.totpInterval); - } - } - - private async totpUpdateCode() { - if ( - this.cipher == null || - this.cipher.type !== CipherType.Login || - this.cipher.login.totp == null - ) { - if (this.totpInterval) { - clearInterval(this.totpInterval); - } - return; - } - - this.totpCode = await this.totpService.getCode(this.cipher.login.totp); - if (this.totpCode != null) { - if (this.totpCode.length > 4) { - const half = Math.floor(this.totpCode.length / 2); - this.totpCodeFormatted = - this.totpCode.substring(0, half) + " " + this.totpCode.substring(half); - } else { - this.totpCodeFormatted = this.totpCode; - } - } else { - this.totpCodeFormatted = null; - if (this.totpInterval) { - clearInterval(this.totpInterval); - } - } - } - - private async totpTick(intervalSeconds: number) { - const epoch = Math.round(new Date().getTime() / 1000.0); - const mod = epoch % intervalSeconds; - - this.totpSec = intervalSeconds - mod; - this.totpDash = +(Math.round(((78.6 / intervalSeconds) * mod + "e+2") as any) + "e-2"); - this.totpLow = this.totpSec <= 7; - if (mod === 0) { - await this.totpUpdateCode(); - } } } diff --git a/libs/angular/src/vault/vault-filter/services/vault-filter.service.ts b/libs/angular/src/vault/vault-filter/services/vault-filter.service.ts index d175942c475..01fa3384b82 100644 --- a/libs/angular/src/vault/vault-filter/services/vault-filter.service.ts +++ b/libs/angular/src/vault/vault-filter/services/vault-filter.service.ts @@ -1,7 +1,7 @@ // FIXME: Update this file to be type safe and remove this and next line // @ts-strict-ignore import { Injectable } from "@angular/core"; -import { firstValueFrom, from, map, mergeMap, Observable, switchMap } from "rxjs"; +import { firstValueFrom, from, map, mergeMap, Observable, switchMap, take } from "rxjs"; import { CollectionService, CollectionView } from "@bitwarden/admin-console/common"; import { OrganizationService } from "@bitwarden/common/admin-console/abstractions/organization/organization.service.abstraction"; @@ -85,6 +85,7 @@ export class VaultFilterService implements DeprecatedVaultFilterServiceAbstracti }; return this.accountService.activeAccount$.pipe( + take(1), getUserId, switchMap((userId) => this.folderService diff --git a/libs/angular/test.setup.ts b/libs/angular/test.setup.ts index 6be6e7b8dd1..159c28d2be5 100644 --- a/libs/angular/test.setup.ts +++ b/libs/angular/test.setup.ts @@ -1,5 +1,5 @@ import { webcrypto } from "crypto"; -import "jest-preset-angular/setup-jest"; +import "@bitwarden/ui-common/setup-jest"; Object.defineProperty(window, "CSS", { value: null }); Object.defineProperty(window, "getComputedStyle", { diff --git a/libs/auth/src/angular/login-approval/login-approval.component.html b/libs/auth/src/angular/login-approval/login-approval.component.html index 2115bdbff11..d37e30c5e0a 100644 --- a/libs/auth/src/angular/login-approval/login-approval.component.html +++ b/libs/auth/src/angular/login-approval/login-approval.component.html @@ -18,8 +18,11 @@

{{ authRequestResponse?.requestDeviceType }}

- {{ "ipAddress" | i18n }} -

{{ authRequestResponse?.requestIpAddress }}

+ {{ "location" | i18n }} +

+ {{ authRequestResponse?.requestCountryName }} + ({{ authRequestResponse?.requestIpAddress }}) +

{{ "time" | i18n }} diff --git a/libs/auth/src/angular/login-via-auth-request/login-via-auth-request.component.html b/libs/auth/src/angular/login-via-auth-request/login-via-auth-request.component.html index ba26ba77cb0..22cf8320036 100644 --- a/libs/auth/src/angular/login-via-auth-request/login-via-auth-request.component.html +++ b/libs/auth/src/angular/login-via-auth-request/login-via-auth-request.component.html @@ -32,7 +32,8 @@
- {{ "needAnotherOptionV1" | i18n }} + {{ "needAnotherOptionV1" | i18n }}  {{ "viewAllLogInOptions" | i18n }} @@ -46,7 +47,8 @@ {{ fingerprintPhrase }}
- {{ "troubleLoggingIn" | i18n }} + {{ "troubleLoggingIn" | i18n }}  {{ "viewAllLogInOptions" | i18n }} diff --git a/libs/auth/src/angular/login-via-auth-request/login-via-auth-request.component.ts b/libs/auth/src/angular/login-via-auth-request/login-via-auth-request.component.ts index 00e2d621c47..dab516e0916 100644 --- a/libs/auth/src/angular/login-via-auth-request/login-via-auth-request.component.ts +++ b/libs/auth/src/angular/login-via-auth-request/login-via-auth-request.component.ts @@ -382,7 +382,7 @@ export class LoginViaAuthRequestComponent implements OnInit, OnDestroy { * | Standard Flow 1 | unauthed | "Login with device" [/login] | /login-with-device | yes | * | Standard Flow 2 | unauthed | "Login with device" [/login] | /login-with-device | no | * | Standard Flow 3 | authed | "Approve from your other device" [/login-initiated] | /login-with-device | yes | - * | Standard Flow 4 | authed | "Approve from your other device" [/login-initiated] | /login-with-device | no | | + * | Standard Flow 4 | authed | "Approve from your other device" [/login-initiated] | /login-with-device | no | * | Admin Flow | authed | "Request admin approval" [/login-initiated] | /admin-approval-requested | NA - admin requests always send encrypted userKey | * |-------------------------------------------------------------------------------------------------------------------------------------------------------------------------| * * Note 1: The phrase "in memory" here is important. It is possible for a user to have a master password for their account, but not have a masterKey IN MEMORY for diff --git a/libs/auth/src/angular/login/login.component.ts b/libs/auth/src/angular/login/login.component.ts index 47109b00bbb..c291a64a8c5 100644 --- a/libs/auth/src/angular/login/login.component.ts +++ b/libs/auth/src/angular/login/login.component.ts @@ -161,8 +161,9 @@ export class LoginComponent implements OnInit, OnDestroy { tap(async (flag) => { // If the flag is turned OFF, we must force a reload to ensure the correct UI is shown if (!flag) { + const qParams = await firstValueFrom(this.activatedRoute.queryParams); const uniqueQueryParams = { - ...this.activatedRoute.queryParams, + ...qParams, // adding a unique timestamp to the query params to force a reload t: new Date().getTime().toString(), // Adding a unique timestamp as a query parameter }; @@ -629,12 +630,7 @@ export class LoginComponent implements OnInit, OnDestroy { * Handle the SSO button click. */ async handleSsoClick() { - // Make sure the email is not empty, for type safety const email = this.formGroup.value.email; - if (!email) { - this.logService.error("Email is required for SSO"); - return; - } // Make sure the email is valid const isEmailValid = await this.validateEmail(); @@ -642,6 +638,12 @@ export class LoginComponent implements OnInit, OnDestroy { return; } + // Make sure the email is not empty, for type safety + if (!email) { + this.logService.error("Email is required for SSO"); + return; + } + // Save the email configuration for the login component await this.saveEmailSettings(); diff --git a/libs/auth/src/angular/new-device-verification/new-device-verification.component.html b/libs/auth/src/angular/new-device-verification/new-device-verification.component.html index 2f807d32993..e731f3afcb6 100644 --- a/libs/auth/src/angular/new-device-verification/new-device-verification.component.html +++ b/libs/auth/src/angular/new-device-verification/new-device-verification.component.html @@ -25,6 +25,7 @@
`; ``` + +## Stories + +### Promise resolves -- loading spinner is displayed + + + +### Promise resolves -- quickly without loading spinner + + + +### Promise rejects + + + +### Observable + + diff --git a/libs/components/src/async-actions/standalone.stories.ts b/libs/components/src/async-actions/standalone.stories.ts index f658dfb0f01..52b85b88561 100644 --- a/libs/components/src/async-actions/standalone.stories.ts +++ b/libs/components/src/async-actions/standalone.stories.ts @@ -11,9 +11,9 @@ import { IconButtonModule } from "../icon-button"; import { BitActionDirective } from "./bit-action.directive"; -const template = ` +const template = /*html*/ ` `; @@ -22,9 +22,30 @@ const template = ` selector: "app-promise-example", }) class PromiseExampleComponent { + statusEmoji = "🟡"; action = async () => { await new Promise((resolve, reject) => { - setTimeout(resolve, 2000); + setTimeout(() => { + resolve(); + this.statusEmoji = "🟢"; + }, 5000); + }); + }; +} + +@Component({ + template, + selector: "app-action-resolves-quickly", +}) +class ActionResolvesQuicklyComponent { + statusEmoji = "🟡"; + + action = async () => { + await new Promise((resolve, reject) => { + setTimeout(() => { + resolve(); + this.statusEmoji = "🟢"; + }, 50); }); }; } @@ -59,6 +80,7 @@ export default { PromiseExampleComponent, ObservableExampleComponent, RejectedPromiseExampleComponent, + ActionResolvesQuicklyComponent, ], imports: [ButtonModule, IconButtonModule, BitActionDirective], providers: [ @@ -100,3 +122,10 @@ export const RejectedPromise: ObservableStory = { template: ``, }), }; + +export const ActionResolvesQuickly: PromiseStory = { + render: (args) => ({ + props: args, + template: ``, + }), +}; diff --git a/libs/components/src/button/button.component.html b/libs/components/src/button/button.component.html index ee4d150dfcc..a07ab9fb99b 100644 --- a/libs/components/src/button/button.component.html +++ b/libs/components/src/button/button.component.html @@ -1,10 +1,10 @@ - + diff --git a/libs/components/src/button/button.component.ts b/libs/components/src/button/button.component.ts index 96311f91529..0b4ce3073c3 100644 --- a/libs/components/src/button/button.component.ts +++ b/libs/components/src/button/button.component.ts @@ -2,7 +2,9 @@ // @ts-strict-ignore import { coerceBooleanProperty } from "@angular/cdk/coercion"; import { NgClass } from "@angular/common"; -import { Input, HostBinding, Component } from "@angular/core"; +import { Input, HostBinding, Component, model, computed } from "@angular/core"; +import { toObservable, toSignal } from "@angular/core/rxjs-interop"; +import { debounce, interval } from "rxjs"; import { ButtonLikeAbstraction, ButtonType } from "../shared/button-like.abstraction"; @@ -49,6 +51,9 @@ const buttonStyles: Record = { providers: [{ provide: ButtonLikeAbstraction, useExisting: ButtonComponent }], standalone: true, imports: [NgClass], + host: { + "[attr.disabled]": "disabledAttr()", + }, }) export class ButtonComponent implements ButtonLikeAbstraction { @HostBinding("class") get classList() { @@ -64,24 +69,41 @@ export class ButtonComponent implements ButtonLikeAbstraction { "tw-no-underline", "hover:tw-no-underline", "focus:tw-outline-none", - "disabled:tw-bg-secondary-300", - "disabled:hover:tw-bg-secondary-300", - "disabled:tw-border-secondary-300", - "disabled:hover:tw-border-secondary-300", - "disabled:!tw-text-muted", - "disabled:hover:!tw-text-muted", - "disabled:tw-cursor-not-allowed", - "disabled:hover:tw-no-underline", ] .concat(this.block ? ["tw-w-full", "tw-block"] : ["tw-inline-block"]) - .concat(buttonStyles[this.buttonType ?? "secondary"]); + .concat(buttonStyles[this.buttonType ?? "secondary"]) + .concat( + this.showDisabledStyles() || this.disabled() + ? [ + "disabled:tw-bg-secondary-300", + "disabled:hover:tw-bg-secondary-300", + "disabled:tw-border-secondary-300", + "disabled:hover:tw-border-secondary-300", + "disabled:!tw-text-muted", + "disabled:hover:!tw-text-muted", + "disabled:tw-cursor-not-allowed", + "disabled:hover:tw-no-underline", + ] + : [], + ); } - @HostBinding("attr.disabled") - get disabledAttr() { - const disabled = this.disabled != null && this.disabled !== false; - return disabled || this.loading ? true : null; - } + protected disabledAttr = computed(() => { + const disabled = this.disabled() != null && this.disabled() !== false; + return disabled || this.loading() ? true : null; + }); + + /** + * Determine whether it is appropriate to display the disabled styles. We only want to show + * the disabled styles if the button is truly disabled, or if the loading styles are also + * visible. + * + * We can't use `disabledAttr` for this, because it returns `true` when `loading` is `true`. + * We only want to show disabled styles during loading if `showLoadingStyles` is `true`. + */ + protected showDisabledStyles = computed(() => { + return this.showLoadingStyle() || (this.disabledAttr() && this.loading() === false); + }); @Input() buttonType: ButtonType; @@ -96,7 +118,23 @@ export class ButtonComponent implements ButtonLikeAbstraction { this._block = coerceBooleanProperty(value); } - @Input() loading = false; + loading = model(false); - @Input() disabled = false; + /** + * Determine whether it is appropriate to display a loading spinner. We only want to show + * a spinner if it's been more than 75 ms since the `loading` state began. This prevents + * a spinner "flash" for actions that are synchronous/nearly synchronous. + * + * We can't use `loading` for this, because we still need to disable the button during + * the full `loading` state. I.e. we only want the spinner to be debounced, not the + * loading state. + * + * This pattern of converting a signal to an observable and back to a signal is not + * recommended. TODO -- find better way to use debounce with signals (CL-596) + */ + protected showLoadingStyle = toSignal( + toObservable(this.loading).pipe(debounce((isLoading) => interval(isLoading ? 75 : 0))), + ); + + disabled = model(false); } diff --git a/libs/components/src/dialog/simple-dialog/simple-dialog.component.html b/libs/components/src/dialog/simple-dialog/simple-dialog.component.html index 1f154a8d543..d810838cabb 100644 --- a/libs/components/src/dialog/simple-dialog/simple-dialog.component.html +++ b/libs/components/src/dialog/simple-dialog/simple-dialog.component.html @@ -3,10 +3,12 @@ @fadeIn >
- @if (hasIcon) { - - } @else { - + @if (!hideIcon()) { + @if (hasIcon) { + + } @else { + + } }

({ + props: args, + template: ` + + Premium Subscription Available + Message Content + + + + + + `, + }), +}; + export const ScrollingContent: Story = { - render: (args: SimpleDialogComponent) => ({ + render: (args) => ({ props: args, template: ` diff --git a/libs/components/src/icon-button/icon-button.component.html b/libs/components/src/icon-button/icon-button.component.html index 6eeaaaffaf0..0145f0b0ba5 100644 --- a/libs/components/src/icon-button/icon-button.component.html +++ b/libs/components/src/icon-button/icon-button.component.html @@ -1,10 +1,10 @@ - + = { "hover:tw-bg-transparent-hover", "hover:tw-border-text-contrast", "focus-visible:before:tw-ring-text-contrast", - "disabled:tw-opacity-60", - "disabled:hover:tw-border-transparent", - "disabled:hover:tw-bg-transparent", ...focusRing, ], main: [ @@ -46,9 +45,6 @@ const styles: Record = { "hover:tw-bg-transparent-hover", "hover:tw-border-primary-600", "focus-visible:before:tw-ring-primary-600", - "disabled:!tw-text-secondary-300", - "disabled:hover:tw-border-transparent", - "disabled:hover:tw-bg-transparent", ...focusRing, ], muted: [ @@ -60,11 +56,8 @@ const styles: Record = { "hover:tw-bg-transparent-hover", "hover:tw-border-primary-600", "focus-visible:before:tw-ring-primary-600", - "disabled:!tw-text-secondary-300", "aria-expanded:hover:tw-bg-secondary-700", "aria-expanded:hover:tw-border-secondary-700", - "disabled:hover:tw-border-transparent", - "disabled:hover:tw-bg-transparent", ...focusRing, ], primary: [ @@ -74,9 +67,6 @@ const styles: Record = { "hover:tw-bg-primary-600", "hover:tw-border-primary-600", "focus-visible:before:tw-ring-primary-600", - "disabled:tw-opacity-60", - "disabled:hover:tw-border-primary-600", - "disabled:hover:tw-bg-primary-600", ...focusRing, ], secondary: [ @@ -86,10 +76,6 @@ const styles: Record = { "hover:!tw-text-contrast", "hover:tw-bg-text-muted", "focus-visible:before:tw-ring-primary-600", - "disabled:tw-opacity-60", - "disabled:hover:tw-border-text-muted", - "disabled:hover:tw-bg-transparent", - "disabled:hover:!tw-text-muted", ...focusRing, ], danger: [ @@ -100,10 +86,6 @@ const styles: Record = { "hover:tw-bg-transparent", "hover:tw-border-primary-600", "focus-visible:before:tw-ring-primary-600", - "disabled:!tw-text-secondary-300", - "disabled:hover:tw-border-transparent", - "disabled:hover:tw-bg-transparent", - "disabled:hover:!tw-text-secondary-300", ...focusRing, ], light: [ @@ -113,10 +95,48 @@ const styles: Record = { "hover:tw-bg-transparent-hover", "hover:tw-border-text-alt2", "focus-visible:before:tw-ring-text-alt2", + ...focusRing, + ], + unstyled: [], +}; + +const disabledStyles: Record = { + contrast: [ + "disabled:tw-opacity-60", + "disabled:hover:tw-border-transparent", + "disabled:hover:tw-bg-transparent", + ], + main: [ + "disabled:!tw-text-secondary-300", + "disabled:hover:tw-border-transparent", + "disabled:hover:tw-bg-transparent", + ], + muted: [ + "disabled:!tw-text-secondary-300", + "disabled:hover:tw-border-transparent", + "disabled:hover:tw-bg-transparent", + ], + primary: [ + "disabled:tw-opacity-60", + "disabled:hover:tw-border-primary-600", + "disabled:hover:tw-bg-primary-600", + ], + secondary: [ + "disabled:tw-opacity-60", + "disabled:hover:tw-border-text-muted", + "disabled:hover:tw-bg-transparent", + "disabled:hover:!tw-text-muted", + ], + danger: [ + "disabled:!tw-text-secondary-300", + "disabled:hover:tw-border-transparent", + "disabled:hover:tw-bg-transparent", + "disabled:hover:!tw-text-secondary-300", + ], + light: [ "disabled:tw-opacity-60", "disabled:hover:tw-border-transparent", "disabled:hover:tw-bg-transparent", - ...focusRing, ], unstyled: [], }; @@ -137,11 +157,14 @@ const sizes: Record = { ], standalone: true, imports: [NgClass], + host: { + "[attr.disabled]": "disabledAttr()", + }, }) export class BitIconButtonComponent implements ButtonLikeAbstraction, FocusableElement { @Input("bitIconButton") icon: string; - @Input() buttonType: IconButtonType; + @Input() buttonType: IconButtonType = "main"; @Input() size: IconButtonSize = "default"; @@ -155,22 +178,51 @@ export class BitIconButtonComponent implements ButtonLikeAbstraction, FocusableE "hover:tw-no-underline", "focus:tw-outline-none", ] - .concat(styles[this.buttonType ?? "main"]) - .concat(sizes[this.size]); + .concat(styles[this.buttonType]) + .concat(sizes[this.size]) + .concat(this.showDisabledStyles() || this.disabled() ? disabledStyles[this.buttonType] : []); } get iconClass() { return [this.icon, "!tw-m-0"]; } - @HostBinding("attr.disabled") - get disabledAttr() { - const disabled = this.disabled != null && this.disabled !== false; - return disabled || this.loading ? true : null; - } + protected disabledAttr = computed(() => { + const disabled = this.disabled() != null && this.disabled() !== false; + return disabled || this.loading() ? true : null; + }); - @Input() loading = false; - @Input() disabled = false; + /** + * Determine whether it is appropriate to display the disabled styles. We only want to show + * the disabled styles if the button is truly disabled, or if the loading styles are also + * visible. + * + * We can't use `disabledAttr` for this, because it returns `true` when `loading` is `true`. + * We only want to show disabled styles during loading if `showLoadingStyles` is `true`. + */ + protected showDisabledStyles = computed(() => { + return this.showLoadingStyle() || (this.disabledAttr() && this.loading() === false); + }); + + loading = model(false); + + /** + * Determine whether it is appropriate to display a loading spinner. We only want to show + * a spinner if it's been more than 75 ms since the `loading` state began. This prevents + * a spinner "flash" for actions that are synchronous/nearly synchronous. + * + * We can't use `loading` for this, because we still need to disable the button during + * the full `loading` state. I.e. we only want the spinner to be debounced, not the + * loading state. + * + * This pattern of converting a signal to an observable and back to a signal is not + * recommended. TODO -- find better way to use debounce with signals (CL-596) + */ + protected showLoadingStyle = toSignal( + toObservable(this.loading).pipe(debounce((isLoading) => interval(isLoading ? 75 : 0))), + ); + + disabled = model(false); getFocusTarget() { return this.elementRef.nativeElement; diff --git a/libs/components/src/popover/popover.component.html b/libs/components/src/popover/popover.component.html index 8da3b002031..cb0681822d0 100644 --- a/libs/components/src/popover/popover.component.html +++ b/libs/components/src/popover/popover.component.html @@ -1,11 +1,11 @@