diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 38a1597848e..9502a9c404d 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -18,6 +18,7 @@ apps/cli/src/auth @bitwarden/team-auth-dev apps/desktop/src/auth @bitwarden/team-auth-dev apps/web/src/app/auth @bitwarden/team-auth-dev libs/auth @bitwarden/team-auth-dev +libs/user-core @bitwarden/team-auth-dev # web connectors used for auth apps/web/src/connectors @bitwarden/team-auth-dev bitwarden_license/bit-web/src/app/auth @bitwarden/team-auth-dev @@ -39,6 +40,7 @@ libs/tools @bitwarden/team-tools-dev apps/web/src/app/dirt @bitwarden/team-data-insights-and-reporting-dev bitwarden_license/bit-common/src/dirt @bitwarden/team-data-insights-and-reporting-dev bitwarden_license/bit-web/src/app/dirt @bitwarden/team-data-insights-and-reporting-dev +libs/dirt @bitwarden/team-data-insights-and-reporting-dev ## Localization/Crowdin (Platform and Tools team) apps/browser/src/_locales @bitwarden/team-tools-dev @bitwarden/team-platform-dev @@ -80,13 +82,18 @@ bitwarden_license/bit-web/src/app/billing @bitwarden/team-billing-dev apps/browser/src/platform @bitwarden/team-platform-dev apps/cli/src/platform @bitwarden/team-platform-dev apps/desktop/macos @bitwarden/team-platform-dev +apps/desktop/scripts @bitwarden/team-platform-dev apps/desktop/src/platform @bitwarden/team-platform-dev +apps/desktop/resources @bitwarden/team-platform-dev apps/web/src/app/platform @bitwarden/team-platform-dev libs/angular/src/platform @bitwarden/team-platform-dev libs/common/src/platform @bitwarden/team-platform-dev libs/common/spec @bitwarden/team-platform-dev libs/common/src/state-migrations @bitwarden/team-platform-dev libs/platform @bitwarden/team-platform-dev +libs/storage-core @bitwarden/team-platform-dev +libs/logging @bitwarden/team-platform-dev +libs/storage-test-utils @bitwarden/team-platform-dev # Web utils used across app and connectors apps/web/src/utils/ @bitwarden/team-platform-dev # Web core and shared files @@ -116,6 +123,9 @@ apps/web/src/translation-constants.ts @bitwarden/team-platform-dev .github/workflows/version-auto-bump.yml @bitwarden/team-platform-dev # ESLint custom rules libs/eslint @bitwarden/team-platform-dev +# Typescript tooling +tsconfig.base.json @bitwarden/team-platform-dev +nx.json @bitwarden/team-platform-dev ## Autofill team files ## apps/browser/src/autofill @bitwarden/team-autofill-dev @@ -136,6 +146,7 @@ libs/components @bitwarden/team-ui-foundation libs/ui @bitwarden/team-ui-foundation apps/browser/src/platform/popup/layout @bitwarden/team-ui-foundation apps/browser/src/popup/app-routing.animations.ts @bitwarden/team-ui-foundation +apps/browser/src/popup/components/extension-anon-layout-wrapper @bitwarden/team-ui-foundation apps/web/src/app/layouts @bitwarden/team-ui-foundation @@ -188,3 +199,4 @@ apps/web/src/locales/en/messages.json # To track that effort please see https://bitwarden.atlassian.net/browse/PM-21636 **/tsconfig.json @bitwarden/team-platform-dev **/jest.config.js @bitwarden/team-platform-dev +**/project.jsons @bitwarden/team-platform-dev diff --git a/.github/ISSUE_TEMPLATE/browser.yml b/.github/ISSUE_TEMPLATE/browser.yml index 23a0e4276bf..6f5c9dd0051 100644 --- a/.github/ISSUE_TEMPLATE/browser.yml +++ b/.github/ISSUE_TEMPLATE/browser.yml @@ -1,4 +1,4 @@ -name: Browser Bug Report +name: Browser Extension Bug Report description: File a bug report labels: [bug, browser] body: diff --git a/.github/ISSUE_TEMPLATE/desktop.yml b/.github/ISSUE_TEMPLATE/desktop.yml index 6fd6f1d1c2b..129ba510664 100644 --- a/.github/ISSUE_TEMPLATE/desktop.yml +++ b/.github/ISSUE_TEMPLATE/desktop.yml @@ -73,6 +73,7 @@ body: - Homebrew - Chocolatey - Snap + - Flatpak - Other validations: required: true diff --git a/.github/ISSUE_TEMPLATE/web.yml b/.github/ISSUE_TEMPLATE/web.yml index 80429112fbd..d7989e40af1 100644 --- a/.github/ISSUE_TEMPLATE/web.yml +++ b/.github/ISSUE_TEMPLATE/web.yml @@ -1,4 +1,4 @@ -name: Web Bug Report +name: Web App Bug Report description: File a bug report labels: [bug, web] body: @@ -77,6 +77,7 @@ body: - Opera - Brave - Vivaldi + - DuckDuckGo validations: required: true - type: input diff --git a/.github/codecov.yml b/.github/codecov.yml index d9d59f9de28..ba4c4b48163 100644 --- a/.github/codecov.yml +++ b/.github/codecov.yml @@ -44,6 +44,7 @@ component_management: - component_id: key-management-keys name: Key Management - Keys paths: + - apps/desktop/src/key-management/electron-key.service.ts - libs/key-management/src/kdf-config.service.ts - libs/key-management/src/key.service.ts - libs/common/src/key-management/master-password/** diff --git a/.github/renovate.json5 b/.github/renovate.json5 index f30bc06e4a2..09afb97174f 100644 --- a/.github/renovate.json5 +++ b/.github/renovate.json5 @@ -144,6 +144,10 @@ "@electron/notarize", "@electron/rebuild", "@ngtools/webpack", + "@nx/devkit", + "@nx/eslint", + "@nx/jest", + "@nx/js", "@types/chrome", "@types/firefox-webext-browser", "@types/glob", @@ -204,11 +208,13 @@ "scopeguard", "security-framework", "security-framework-sys", + "semver", "serde", "serde_json", "simplelog", "style-loader", "sysinfo", + "ts-node", "ts-loader", "tsconfig-paths-webpack-plugin", "type-fest", @@ -413,6 +419,12 @@ allowedVersions: "1.0.0", description: "Higher versions of lowdb are not compatible with CommonJS", }, + { + // Pin types as well since we are not upgrading past v1 (and also v2+ does not need separate types). + matchPackageNames: ["@types/lowdb"], + allowedVersions: "< 2.0.0", + description: "Higher versions of lowdb do not need separate types", + }, ], ignoreDeps: ["@types/koa-bodyparser", "bootstrap", "node-ipc", "@bitwarden/sdk-internal"], } diff --git a/.github/whitelist-capital-letters.txt b/.github/whitelist-capital-letters.txt index 653f6591c7f..db5097e5268 100644 --- a/.github/whitelist-capital-letters.txt +++ b/.github/whitelist-capital-letters.txt @@ -34,3 +34,4 @@ ./apps/browser/src/safari/safari/Info.plist ./apps/browser/src/safari/desktop.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist ./SECURITY.md +./libs/nx-plugin/src/generators/files/README.md__tmpl__ diff --git a/.github/workflows/auto-branch-updater.yml b/.github/workflows/auto-branch-updater.yml index dc4a43fc34e..3f67388fd0c 100644 --- a/.github/workflows/auto-branch-updater.yml +++ b/.github/workflows/auto-branch-updater.yml @@ -22,6 +22,8 @@ jobs: env: _BOT_EMAIL: 106330231+bitwarden-devops-bot@users.noreply.github.com _BOT_NAME: bitwarden-devops-bot + permissions: + contents: write steps: - name: Setup id: setup diff --git a/.github/workflows/auto-reply-discussions.yml b/.github/workflows/auto-reply-discussions.yml index 8becc7471c5..83970ab3619 100644 --- a/.github/workflows/auto-reply-discussions.yml +++ b/.github/workflows/auto-reply-discussions.yml @@ -8,6 +8,9 @@ jobs: reply: name: Auto-reply runs-on: ubuntu-22.04 + permissions: + discussions: write + contents: read steps: - name: Get discussion label and template name diff --git a/.github/workflows/build-browser.yml b/.github/workflows/build-browser.yml index f7b8eeabefe..c75298a3e92 100644 --- a/.github/workflows/build-browser.yml +++ b/.github/workflows/build-browser.yml @@ -41,6 +41,8 @@ defaults: run: shell: bash +permissions: {} + jobs: setup: name: Setup @@ -266,6 +268,29 @@ jobs: working-directory: browser-source/ run: npm link ../sdk-internal + - name: Check source file size + if: ${{ startsWith(matrix.name, 'firefox') }} + run: | + # Declare variable as indexed array + declare -a FILES + + # Search for source files that are greater than 4M + TARGET_DIR='./browser-source/apps/browser' + while IFS=' ' read -r RESULT; do + FILES+=("$RESULT") + done < <(find $TARGET_DIR -size +4M) + + # Validate results and provide messaging + if [[ ${#FILES[@]} -ne 0 ]]; then + echo "File(s) exceeds size limit: 4MB" + for FILE in ${FILES[@]}; do + echo "- $(du --si $FILE)" + done + echo "ERROR Firefox rejects extension uploads that contain files larger than 4MB" + # Invoke failure + exit 1 + fi + - name: Build extension run: npm run ${{ matrix.npm_command }} working-directory: browser-source/apps/browser @@ -441,7 +466,7 @@ jobs: secrets: "crowdin-api-token" - name: Upload Sources - uses: crowdin/github-action@30849777a3cba6ee9a09e24e195272b8287a0a5b # v1.20.4 + uses: crowdin/github-action@f214c8723025f41fc55b2ad26e67b60b80b1885d # v2.7.1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} CROWDIN_API_TOKEN: ${{ steps.retrieve-secrets.outputs.crowdin-api-token }} diff --git a/.github/workflows/build-cli.yml b/.github/workflows/build-cli.yml index e89ca59a297..ac314a4c33a 100644 --- a/.github/workflows/build-cli.yml +++ b/.github/workflows/build-cli.yml @@ -46,10 +46,13 @@ defaults: run: working-directory: apps/cli +permissions: + contents: read + jobs: setup: name: Setup - runs-on: ubuntu-22.04 + runs-on: ubuntu-24.04 outputs: package_version: ${{ steps.retrieve-package-version.outputs.package_version }} node_version: ${{ steps.retrieve-node-version.outputs.node_version }} @@ -58,7 +61,7 @@ jobs: - name: Check out repo uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: - ref: ${{ github.event.pull_request.head.sha }} + ref: ${{ github.event.pull_request.head.sha }} - name: Get Package Version id: retrieve-package-version @@ -68,7 +71,6 @@ jobs: - name: Get Node Version id: retrieve-node-version - working-directory: ./ run: | NODE_NVMRC=$(cat .nvmrc) NODE_VERSION=${NODE_NVMRC/v/''} @@ -82,25 +84,25 @@ jobs: has_secrets=${{ secrets.AZURE_KV_CI_SERVICE_PRINCIPAL != '' }} echo "has_secrets=$has_secrets" >> $GITHUB_OUTPUT + cli: name: CLI ${{ matrix.os.base }}${{ matrix.os.target_suffix }} - ${{ matrix.license_type.readable }} strategy: matrix: os: - [ - { base: "linux", distro: "ubuntu-22.04", target_suffix: "" }, - { base: "linux", distro: "ubuntu-22.04-arm", target_suffix: "-arm64" }, - { base: "mac", distro: "macos-13", target_suffix: "" }, - { base: "mac", distro: "macos-14", target_suffix: "-arm64" } - ] + [ + { base: "linux", distro: "ubuntu-22.04", target_suffix: "" }, + { base: "linux", distro: "ubuntu-22.04-arm", target_suffix: "-arm64" }, + { base: "mac", distro: "macos-13", target_suffix: "" }, + { base: "mac", distro: "macos-14", target_suffix: "-arm64" } + ] license_type: [ { build_prefix: "oss", artifact_prefix: "-oss", readable: "open source license" }, { build_prefix: "bit", artifact_prefix: "", readable: "commercial license" } ] runs-on: ${{ matrix.os.distro }} - needs: - - setup + needs: setup env: _PACKAGE_VERSION: ${{ needs.setup.outputs.package_version }} _NODE_VERSION: ${{ needs.setup.outputs.node_version }} @@ -110,7 +112,7 @@ jobs: - name: Check out repo uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: - ref: ${{ github.event.pull_request.head.sha }} + ref: ${{ github.event.pull_request.head.sha }} - name: Setup Unix Vars run: | @@ -152,11 +154,69 @@ jobs: - name: Build & Package Unix run: npm run dist:${{ matrix.license_type.build_prefix }}:${{ env.SHORT_RUNNER_OS }}${{ matrix.os.target_suffix }} --quiet + - name: Login to Azure + if: ${{ matrix.os.base == 'mac' && needs.setup.outputs.has_secrets == 'true' }} + uses: Azure/login@e15b166166a8746d1a47596803bd8c1b595455cf # v1.6.0 + with: + creds: ${{ secrets.AZURE_KV_CI_SERVICE_PRINCIPAL }} + + - name: Get certificates + if: ${{ matrix.os.base == 'mac' && needs.setup.outputs.has_secrets == 'true' }} + run: | + mkdir -p $HOME/certificates + + az keyvault secret show --id https://bitwarden-ci.vault.azure.net/certificates/devid-app-cert | + jq -r .value | base64 -d > $HOME/certificates/devid-app-cert.p12 + + - name: Set up keychain + if: ${{ matrix.os.base == 'mac' && needs.setup.outputs.has_secrets == 'true' }} + env: + KEYCHAIN_PASSWORD: ${{ secrets.KEYCHAIN_PASSWORD }} + run: | + security create-keychain -p $KEYCHAIN_PASSWORD build.keychain + security default-keychain -s build.keychain + security unlock-keychain -p $KEYCHAIN_PASSWORD build.keychain + security set-keychain-settings -lut 1200 build.keychain + + security import "$HOME/certificates/devid-app-cert.p12" -k build.keychain -P "" \ + -T /usr/bin/codesign -T /usr/bin/security -T /usr/bin/productbuild + + security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k $KEYCHAIN_PASSWORD build.keychain + + - name: Sign binary + if: ${{ matrix.os.base == 'mac' && needs.setup.outputs.has_secrets == 'true' }} + env: + MACOS_CERTIFICATE_NAME: "Developer ID Application: 8bit Solutions LLC" + run: codesign --sign "$MACOS_CERTIFICATE_NAME" --verbose=3 --force --options=runtime --entitlements ./entitlements.plist --timestamp ./dist/${{ matrix.license_type.build_prefix }}/${{ env.LOWER_RUNNER_OS }}${{ matrix.os.target_suffix }}/bw + - name: Zip Unix run: | cd ./dist/${{ matrix.license_type.build_prefix }}/${{ env.LOWER_RUNNER_OS }}${{ matrix.os.target_suffix }} zip ../../bw${{ matrix.license_type.artifact_prefix }}-${{ env.LOWER_RUNNER_OS }}${{ matrix.os.target_suffix }}-${{ env._PACKAGE_VERSION }}.zip ./bw + - name: Set up private auth key + if: ${{ matrix.os.base == 'mac' && needs.setup.outputs.has_secrets == 'true' }} + run: | + mkdir ~/private_keys + cat << EOF > ~/private_keys/AuthKey_6TV9MKN3GP.p8 + ${{ secrets.APP_STORE_CONNECT_AUTH_KEY }} + EOF + + - name: Notarize app + if: ${{ matrix.os.base == 'mac' && needs.setup.outputs.has_secrets == 'true' }} + env: + APP_STORE_CONNECT_TEAM_ISSUER: ${{ secrets.APP_STORE_CONNECT_TEAM_ISSUER }} + APP_STORE_CONNECT_AUTH_KEY: 6TV9MKN3GP + APP_STORE_CONNECT_AUTH_KEY_PATH: ~/private_keys/AuthKey_6TV9MKN3GP.p8 + run: | + echo "Create keychain profile" + xcrun notarytool store-credentials "notarytool-profile" --key-id "$APP_STORE_CONNECT_AUTH_KEY" --key "$APP_STORE_CONNECT_AUTH_KEY_PATH" --issuer "$APP_STORE_CONNECT_TEAM_ISSUER" + + codesign --sign "Developer ID Application: 8bit Solutions LLC" --verbose=3 --force --options=runtime --timestamp ./dist/bw${{ matrix.license_type.artifact_prefix }}-${{ env.LOWER_RUNNER_OS }}${{ matrix.os.target_suffix }}-${{ env._PACKAGE_VERSION }}.zip + + echo "Notarize app" + xcrun notarytool submit ./dist/bw${{ matrix.license_type.artifact_prefix }}-${{ env.LOWER_RUNNER_OS }}${{ matrix.os.target_suffix }}-${{ env._PACKAGE_VERSION }}.zip --keychain-profile "notarytool-profile" --wait + - name: Version Test run: | unzip "./dist/bw${{ matrix.license_type.artifact_prefix }}-${{ env.LOWER_RUNNER_OS }}${{ matrix.os.target_suffix }}-${{ env._PACKAGE_VERSION }}.zip" -d "./test" @@ -168,13 +228,6 @@ jobs: exit 1 fi - - name: Create checksums Unix - run: | - cd ./dist - shasum -a 256 bw${{ matrix.license_type.artifact_prefix }}-${{ env.LOWER_RUNNER_OS }}${{ matrix.os.target_suffix }}-${{ env._PACKAGE_VERSION }}.zip \ - | awk '{split($0, a); print a[1]}' > bw${{ - matrix.license_type.artifact_prefix }}-${{ env.LOWER_RUNNER_OS }}${{ matrix.os.target_suffix }}-sha256-${{ env._PACKAGE_VERSION }}.txt - - name: Upload unix zip asset uses: actions/upload-artifact@65c4c4a1ddee5b72f698fdd19549f0f0fb45cf08 # v4.6.0 with: @@ -182,12 +235,21 @@ jobs: path: apps/cli/dist/bw${{ matrix.license_type.artifact_prefix }}-${{ env.LOWER_RUNNER_OS }}${{ matrix.os.target_suffix }}-${{ env._PACKAGE_VERSION }}.zip if-no-files-found: error - - name: Upload unix checksum asset - uses: actions/upload-artifact@65c4c4a1ddee5b72f698fdd19549f0f0fb45cf08 # v4.6.0 - with: - name: bw${{ matrix.license_type.artifact_prefix }}-${{ env.LOWER_RUNNER_OS }}${{ matrix.os.target_suffix }}-sha256-${{ env._PACKAGE_VERSION }}.txt - path: apps/cli/dist/bw${{ matrix.license_type.artifact_prefix }}-${{ env.LOWER_RUNNER_OS }}${{ matrix.os.target_suffix }}-sha256-${{ env._PACKAGE_VERSION }}.txt - if-no-files-found: error + # We want to confirm the CLI is runnable using the dependencies defined in `apps/cli/package.json`. + - name: Remove node_modules (root) + run: rm -rf node_modules + working-directory: ./ + + - name: Remove package.json (root) + run: rm package.json + working-directory: ./ + + - name: Install (CLI) + run: npm i + + - name: Output help + run: node ./build/bw.js --help + cli-windows: name: Windows - ${{ matrix.license_type.readable }} @@ -199,8 +261,7 @@ jobs: { build_prefix: "bit", artifact_prefix: "", readable: "commercial license" } ] runs-on: windows-2022 - needs: - - setup + needs: setup env: _PACKAGE_VERSION: ${{ needs.setup.outputs.package_version }} _NODE_VERSION: ${{ needs.setup.outputs.node_version }} @@ -364,11 +425,6 @@ jobs: Throw "Version test failed." } - - name: Create checksums Windows - run: | - checksum -f="./dist/bw${{ matrix.license_type.artifact_prefix }}-windows-${env:_PACKAGE_VERSION}.zip" ` - -t sha256 | Out-File -Encoding ASCII ./dist/bw${{ matrix.license_type.artifact_prefix }}-windows-sha256-${env:_PACKAGE_VERSION}.txt - - name: Upload windows zip asset uses: actions/upload-artifact@65c4c4a1ddee5b72f698fdd19549f0f0fb45cf08 # v4.6.0 with: @@ -376,13 +432,6 @@ jobs: path: apps/cli/dist/bw${{ matrix.license_type.artifact_prefix }}-windows-${{ env._PACKAGE_VERSION }}.zip if-no-files-found: error - - name: Upload windows checksum asset - uses: actions/upload-artifact@65c4c4a1ddee5b72f698fdd19549f0f0fb45cf08 # v4.6.0 - with: - name: bw${{ matrix.license_type.artifact_prefix }}-windows-sha256-${{ env._PACKAGE_VERSION }}.txt - path: apps/cli/dist/bw${{ matrix.license_type.artifact_prefix }}-windows-sha256-${{ env._PACKAGE_VERSION }}.txt - if-no-files-found: error - - name: Upload Chocolatey asset if: matrix.license_type.build_prefix == 'bit' uses: actions/upload-artifact@65c4c4a1ddee5b72f698fdd19549f0f0fb45cf08 # v4.6.0 @@ -442,13 +491,6 @@ jobs: with: path: apps/cli/dist/snap - - name: Create checksum - run: | - cd dist/snap - ls -alth - sha256sum bw_${{ env._PACKAGE_VERSION }}_amd64.snap \ - | awk '{split($0, a); print a[1]}' > bw-snap-sha256-${{ env._PACKAGE_VERSION }}.txt - - name: Install Snap run: sudo snap install dist/snap/bw*.snap --dangerous @@ -473,18 +515,11 @@ jobs: path: apps/cli/dist/snap/bw_${{ env._PACKAGE_VERSION }}_amd64.snap if-no-files-found: error - - name: Upload snap checksum asset - uses: actions/upload-artifact@65c4c4a1ddee5b72f698fdd19549f0f0fb45cf08 # v4.6.0 - with: - name: bw-snap-sha256-${{ env._PACKAGE_VERSION }}.txt - path: apps/cli/dist/snap/bw-snap-sha256-${{ env._PACKAGE_VERSION }}.txt - if-no-files-found: error - check-failures: name: Check for failures if: always() - runs-on: ubuntu-22.04 + runs-on: ubuntu-24.04 needs: - setup - cli diff --git a/.github/workflows/build-desktop.yml b/.github/workflows/build-desktop.yml index fab0df693cb..a022fe7fd0f 100644 --- a/.github/workflows/build-desktop.yml +++ b/.github/workflows/build-desktop.yml @@ -46,6 +46,9 @@ defaults: run: shell: bash +permissions: + contents: read + jobs: electron-verify: name: Verify Electron Version @@ -425,7 +428,7 @@ jobs: - name: Install AST run: dotnet tool install --global AzureSignTool --version 4.0.1 - - name: Set up environmentF + - name: Set up environment run: choco install checksum --no-progress - name: Print environment @@ -499,7 +502,7 @@ jobs: run: | npm run pack:win - - name: Pack & Sign (dev) + - name: Pack & Sign if: ${{ needs.setup.outputs.has_secrets == 'true' }} env: ELECTRON_BUILDER_SIGN: 1 @@ -1413,7 +1416,7 @@ jobs: secrets: "crowdin-api-token" - name: Upload Sources - uses: crowdin/github-action@30849777a3cba6ee9a09e24e195272b8287a0a5b # v1.20.4 + uses: crowdin/github-action@f214c8723025f41fc55b2ad26e67b60b80b1885d # v2.7.1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} CROWDIN_API_TOKEN: ${{ steps.retrieve-secrets.outputs.crowdin-api-token }} diff --git a/.github/workflows/build-web.yml b/.github/workflows/build-web.yml index 275b867390e..745376b46d8 100644 --- a/.github/workflows/build-web.yml +++ b/.github/workflows/build-web.yml @@ -51,6 +51,8 @@ env: _AZ_REGISTRY: bitwardenprod.azurecr.io _GITHUB_PR_REPO_NAME: ${{ github.event.pull_request.head.repo.full_name }} +permissions: {} + jobs: setup: name: Setup @@ -309,7 +311,7 @@ jobs: - name: Scan Docker image if: ${{ needs.setup.outputs.has_secrets == 'true' }} id: container-scan - uses: anchore/scan-action@869c549e657a088dc0441b08ce4fc0ecdac2bb65 # v5.3.0 + uses: anchore/scan-action@2c901ab7378897c01b8efaa2d0c9bf519cc64b9e # v6.2.0 with: image: ${{ steps.image-name.outputs.name }} fail-build: false @@ -351,7 +353,7 @@ jobs: secrets: "crowdin-api-token" - name: Upload Sources - uses: crowdin/github-action@30849777a3cba6ee9a09e24e195272b8287a0a5b # v1.20.4 + uses: crowdin/github-action@f214c8723025f41fc55b2ad26e67b60b80b1885d # v2.7.1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} CROWDIN_API_TOKEN: ${{ steps.retrieve-secrets.outputs.crowdin-api-token }} diff --git a/.github/workflows/chromatic.yml b/.github/workflows/chromatic.yml index 47f3b310504..78733bc5a8b 100644 --- a/.github/workflows/chromatic.yml +++ b/.github/workflows/chromatic.yml @@ -7,7 +7,9 @@ on: - "rc" - "hotfix-rc" pull_request_target: - types: [opened, synchronize] + types: [opened, synchronize, reopened] + branches: + - "main" jobs: check-run: diff --git a/.github/workflows/enforce-labels.yml b/.github/workflows/enforce-labels.yml index 40ddfe7739f..12a771fd3c0 100644 --- a/.github/workflows/enforce-labels.yml +++ b/.github/workflows/enforce-labels.yml @@ -4,6 +4,9 @@ on: workflow_call: pull_request: types: [labeled, unlabeled, opened, edited, synchronize] +permissions: + contents: read + pull-requests: read jobs: enforce-label: name: EnforceLabel diff --git a/.github/workflows/lint-crowdin-config.yml b/.github/workflows/lint-crowdin-config.yml new file mode 100644 index 00000000000..adb5950e3a0 --- /dev/null +++ b/.github/workflows/lint-crowdin-config.yml @@ -0,0 +1,45 @@ +name: Lint Crowdin Config + +on: + pull_request: + types: [opened, synchronize] + paths: + - '**/crowdin.yml' +permissions: {} + +jobs: + lint-crowdin-config: + name: Lint Crowdin Config ${{ matrix.app.name }} + runs-on: ubuntu-24.04 + strategy: + matrix: + app: [ + { name: 'web', project_id: '308189', config_path: 'apps/web/crowdin.yml' }, + { name: 'desktop', project_id: '299360', config_path: 'apps/desktop/crowdin.yml' }, + { name: 'browser', project_id: '268134', config_path: 'apps/browser/crowdin.yml' } + ] + steps: + - name: Check out repo + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + fetch-depth: 1 + - name: Login to Azure + uses: Azure/login@e15b166166a8746d1a47596803bd8c1b595455cf # v1.6.0 + with: + creds: ${{ secrets.AZURE_KV_CI_SERVICE_PRINCIPAL }} + - name: Retrieve secrets + id: retrieve-secrets + uses: bitwarden/gh-actions/get-keyvault-secrets@main + with: + keyvault: "bitwarden-ci" + secrets: "crowdin-api-token" + - name: Lint ${{ matrix.app.name }} config + uses: crowdin/github-action@f214c8723025f41fc55b2ad26e67b60b80b1885d # v2.7.1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + CROWDIN_PROJECT_ID: ${{ matrix.app.project_id }} + CROWDIN_API_TOKEN: ${{ steps.retrieve-secrets.outputs.crowdin-api-token }} + with: + dryrun_action: true + command: 'config lint' + command_args: '--verbose -c ${{ matrix.app.config_path }}' \ No newline at end of file diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 4fbef027c7c..4246d623f04 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -22,6 +22,9 @@ defaults: run: shell: bash +permissions: + contents: read + jobs: lint: name: Lint diff --git a/.github/workflows/locales-lint.yml b/.github/workflows/locales-lint.yml index 8c9447ea50f..0c8148d4c28 100644 --- a/.github/workflows/locales-lint.yml +++ b/.github/workflows/locales-lint.yml @@ -8,6 +8,9 @@ on: paths: - '**/messages.json' +permissions: + contents: read + jobs: lint: name: Lint diff --git a/.github/workflows/release-browser.yml b/.github/workflows/release-browser.yml index 498f8748959..ac79287f84d 100644 --- a/.github/workflows/release-browser.yml +++ b/.github/workflows/release-browser.yml @@ -22,6 +22,8 @@ jobs: setup: name: Setup runs-on: ubuntu-22.04 + permissions: + contents: read outputs: release_version: ${{ steps.version.outputs.version }} steps: @@ -53,6 +55,8 @@ jobs: name: Locales Test runs-on: ubuntu-22.04 needs: setup + permissions: + contents: read steps: - name: Checkout repo uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 @@ -89,6 +93,8 @@ jobs: needs: - setup - locales-test + permissions: + contents: write steps: - name: Download latest Release build artifacts if: ${{ github.event.inputs.release_type != 'Dry Run' }} diff --git a/.github/workflows/release-cli.yml b/.github/workflows/release-cli.yml index 519fee1989b..2d7be2e186e 100644 --- a/.github/workflows/release-cli.yml +++ b/.github/workflows/release-cli.yml @@ -18,6 +18,9 @@ defaults: run: working-directory: apps/cli +permissions: + contents: read + jobs: setup: name: Setup @@ -52,6 +55,8 @@ jobs: name: Release runs-on: ubuntu-22.04 needs: setup + permissions: + contents: write steps: - name: Download all Release artifacts if: ${{ inputs.release_type != 'Dry Run' }} @@ -78,24 +83,15 @@ jobs: PKG_VERSION: ${{ needs.setup.outputs.release_version }} with: artifacts: "apps/cli/bw-oss-windows-${{ env.PKG_VERSION }}.zip, - apps/cli/bw-oss-windows-sha256-${{ env.PKG_VERSION }}.txt, apps/cli/bw-windows-${{ env.PKG_VERSION }}.zip, - 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, - apps/cli/bw-linux-sha256-${{ env.PKG_VERSION }}.txt, apps/cli/bitwarden-cli.${{ env.PKG_VERSION }}.nupkg, apps/cli/bw_${{ env.PKG_VERSION }}_amd64.snap, - apps/cli/bw-snap-sha256-${{ env.PKG_VERSION }}.txt, apps/cli/bitwarden-cli-${{ env.PKG_VERSION }}-npm-build.zip" commit: ${{ github.sha }} tag: cli-v${{ env.PKG_VERSION }} diff --git a/.github/workflows/release-desktop.yml b/.github/workflows/release-desktop.yml index 57143747a86..5ce0da4cb4b 100644 --- a/.github/workflows/release-desktop.yml +++ b/.github/workflows/release-desktop.yml @@ -17,10 +17,15 @@ defaults: run: shell: bash +permissions: + contents: read + jobs: setup: name: Setup runs-on: ubuntu-22.04 + permissions: + contents: write outputs: release_version: ${{ steps.version.outputs.version }} release_channel: ${{ steps.release_channel.outputs.channel }} @@ -89,12 +94,6 @@ jobs: working-directory: apps/desktop/artifacts run: mv Bitwarden-${{ env.PKG_VERSION }}-universal.pkg Bitwarden-${{ env.PKG_VERSION }}-universal.pkg.archive - - name: Get checksum files - uses: bitwarden/gh-actions/get-checksum@main - with: - packages_dir: "apps/desktop/artifacts" - file_path: "apps/desktop/artifacts/sha256-checksums.txt" - - name: Create Release uses: ncipollo/release-action@cdcc88a9acf3ca41c16c37bb7d21b9ad48560d87 # v1.15.0 if: ${{ steps.release_channel.outputs.channel == 'latest' && github.event.inputs.release_type != 'Dry Run' }} @@ -125,8 +124,7 @@ jobs: apps/desktop/artifacts/Bitwarden-${{ env.PKG_VERSION }}-universal.pkg.archive, apps/desktop/artifacts/${{ env.RELEASE_CHANNEL }}.yml, apps/desktop/artifacts/${{ env.RELEASE_CHANNEL }}-linux.yml, - apps/desktop/artifacts/${{ env.RELEASE_CHANNEL }}-mac.yml, - apps/desktop/artifacts/sha256-checksums.txt" + apps/desktop/artifacts/${{ env.RELEASE_CHANNEL }}-mac.yml" commit: ${{ github.sha }} tag: desktop-v${{ env.PKG_VERSION }} name: Desktop v${{ env.PKG_VERSION }} diff --git a/.github/workflows/release-web.yml b/.github/workflows/release-web.yml index 0301b814796..5a3c29d29fc 100644 --- a/.github/workflows/release-web.yml +++ b/.github/workflows/release-web.yml @@ -18,6 +18,8 @@ jobs: setup: name: Setup runs-on: ubuntu-22.04 + permissions: + contents: read outputs: release_version: ${{ steps.version.outputs.version }} tag_version: ${{ steps.version.outputs.tag }} @@ -50,6 +52,8 @@ jobs: runs-on: ubuntu-22.04 needs: - setup + permissions: + contents: write steps: - name: Download latest build artifacts if: ${{ github.event.inputs.release_type != 'Dry Run' }} diff --git a/.github/workflows/repository-management.yml b/.github/workflows/repository-management.yml index 8ab74adf543..d91e0a12afd 100644 --- a/.github/workflows/repository-management.yml +++ b/.github/workflows/repository-management.yml @@ -36,8 +36,7 @@ on: description: "New version override (leave blank for automatic calculation, example: '2024.1.0')" required: false type: string - - +permissions: {} jobs: setup: name: Setup @@ -57,51 +56,11 @@ jobs: fi echo "branch=$BRANCH" >> $GITHUB_OUTPUT - - - cut_branch: - name: Cut branch - if: ${{ needs.setup.outputs.branch == 'rc' }} - needs: setup - runs-on: ubuntu-24.04 - steps: - - name: Generate GH App token - uses: actions/create-github-app-token@30bf6253fa41bdc8d1501d202ad15287582246b4 # v2.0.3 - id: app-token - with: - app-id: ${{ secrets.BW_GHAPP_ID }} - private-key: ${{ secrets.BW_GHAPP_KEY }} - - - name: Check out target ref - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - with: - ref: ${{ inputs.target_ref }} - token: ${{ steps.app-token.outputs.token }} - - - name: Check if ${{ needs.setup.outputs.branch }} branch exists - env: - BRANCH_NAME: ${{ needs.setup.outputs.branch }} - run: | - if [[ $(git ls-remote --heads origin $BRANCH_NAME) ]]; then - echo "$BRANCH_NAME already exists! Please delete $BRANCH_NAME before running again." >> $GITHUB_STEP_SUMMARY - exit 1 - fi - - - name: Cut branch - env: - BRANCH_NAME: ${{ needs.setup.outputs.branch }} - run: | - git switch --quiet --create $BRANCH_NAME - git push --quiet --set-upstream origin $BRANCH_NAME - - bump_version: name: Bump Version if: ${{ always() }} runs-on: ubuntu-24.04 - needs: - - cut_branch - - setup + needs: setup outputs: version_browser: ${{ steps.set-final-version-output.outputs.version_browser }} version_cli: ${{ steps.set-final-version-output.outputs.version_cli }} @@ -441,15 +400,13 @@ jobs: - name: Push changes if: ${{ steps.version-changed.outputs.changes_to_commit == 'TRUE' }} run: git push - - - cherry_pick: - name: Cherry-Pick Commit(s) + cut_branch: + name: Cut branch if: ${{ needs.setup.outputs.branch == 'rc' }} - runs-on: ubuntu-24.04 needs: - - bump_version - setup + - bump_version + runs-on: ubuntu-24.04 steps: - name: Generate GH App token uses: actions/create-github-app-token@30bf6253fa41bdc8d1501d202ad15287582246b4 # v2.0.3 @@ -458,43 +415,24 @@ jobs: app-id: ${{ secrets.BW_GHAPP_ID }} private-key: ${{ secrets.BW_GHAPP_KEY }} - - name: Check out main branch + - name: Check out target ref uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: - fetch-depth: 0 - ref: main + ref: ${{ inputs.target_ref }} token: ${{ steps.app-token.outputs.token }} - - name: Configure Git + - name: Check if ${{ needs.setup.outputs.branch }} branch exists + env: + BRANCH_NAME: ${{ needs.setup.outputs.branch }} run: | - git config --local user.email "actions@github.com" - git config --local user.name "Github Actions" + if [[ $(git ls-remote --heads origin $BRANCH_NAME) ]]; then + echo "$BRANCH_NAME already exists! Please delete $BRANCH_NAME before running again." >> $GITHUB_STEP_SUMMARY + exit 1 + fi - - name: Perform cherry-pick(s) + - name: Cut branch + env: + BRANCH_NAME: ${{ needs.setup.outputs.branch }} run: | - # Function for cherry-picking - cherry_pick () { - local package_path="apps/$1/package.json" - local source_branch=$2 - local destination_branch=$3 - - # Get project commit/version from source branch - git switch $source_branch - SOURCE_COMMIT=$(git log --reverse --pretty=format:"%H" --max-count=1 $package_path) - SOURCE_VERSION=$(cat $package_path | jq -r '.version') - - # Get project commit/version from destination branch - git switch $destination_branch - DESTINATION_VERSION=$(cat $package_path | jq -r '.version') - - if [[ "$DESTINATION_VERSION" != "$SOURCE_VERSION" ]]; then - git cherry-pick --strategy-option=theirs -x $SOURCE_COMMIT - git push -u origin $destination_branch - fi - } - - # Cherry-pick from 'main' into 'rc' - cherry_pick browser main rc - cherry_pick cli main rc - cherry_pick desktop main rc - cherry_pick web main rc + git switch --quiet --create $BRANCH_NAME + git push --quiet --set-upstream origin $BRANCH_NAME \ No newline at end of file diff --git a/.github/workflows/scan.yml b/.github/workflows/scan.yml index 585115ef6dd..59ef1e0734e 100644 --- a/.github/workflows/scan.yml +++ b/.github/workflows/scan.yml @@ -74,7 +74,7 @@ jobs: ref: ${{ github.event.pull_request.head.sha }} - name: Scan with SonarCloud - uses: sonarsource/sonarqube-scan-action@bfd4e558cda28cda6b5defafb9232d191be8c203 # v4.2.1 + uses: sonarsource/sonarqube-scan-action@2500896589ef8f7247069a56136f8dc177c27ccf # v5.2.0 env: SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} with: diff --git a/.github/workflows/stale-bot.yml b/.github/workflows/stale-bot.yml index abb292f53f3..13acde2b0fc 100644 --- a/.github/workflows/stale-bot.yml +++ b/.github/workflows/stale-bot.yml @@ -8,6 +8,11 @@ jobs: stale: name: 'Check for stale issues and PRs' runs-on: ubuntu-22.04 + permissions: + actions: write + contents: read + issues: write + pull-requests: write steps: - name: 'Run stale action' uses: actions/stale@5bef64f19d7facfb25b37b414482c7164d639639 # v9.1.0 diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 64cc86f1db6..a8bfd368884 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -10,6 +10,8 @@ on: pull_request: types: [ opened, synchronize ] +permissions: {} + jobs: testing: @@ -134,7 +136,7 @@ jobs: uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: Install rust - uses: dtolnay/rust-toolchain@c5a29ddb4d9d194e7c84ec8c3fba61b1c31fee8c # stable + uses: dtolnay/rust-toolchain@b3b07ba8b418998c39fb20f53e8b695cdcc8de1b # stable with: toolchain: stable components: llvm-tools diff --git a/.gitignore b/.gitignore index e865fa6a8fb..0fa968aa47c 100644 --- a/.gitignore +++ b/.gitignore @@ -34,6 +34,9 @@ build # Testing coverage junit.xml +## The "base" root level folder is expected for some local tests that do +## comparisons between the current branch and a base branch (usually main) +base/ # Misc *.crx diff --git a/.nvmrc b/.nvmrc index 9a2a0e219c9..53d1c14db37 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -v20 +v22 diff --git a/.storybook/format-args-for-code-snippet.ts b/.storybook/format-args-for-code-snippet.ts new file mode 100644 index 00000000000..bf36c153c0a --- /dev/null +++ b/.storybook/format-args-for-code-snippet.ts @@ -0,0 +1,33 @@ +import { argsToTemplate, StoryObj } from "@storybook/angular"; + +type RenderArgType = StoryObj["args"]; + +export const formatArgsForCodeSnippet = >( + args: RenderArgType, +) => { + const nonNullArgs = Object.entries(args as ComponentType).filter( + ([_, value]) => value !== null && value !== undefined, + ); + const functionArgs = nonNullArgs.filter(([_, value]) => typeof value === "function"); + const argsToFormat = nonNullArgs.filter(([_, value]) => typeof value !== "function"); + + const argsToTemplateIncludeKeys = [...functionArgs].map( + ([key, _]) => key as keyof RenderArgType, + ); + + const formattedNonFunctionArgs = argsToFormat + .map(([key, value]) => { + if (typeof value === "boolean") { + return `[${key}]="${value}"`; + } + + if (Array.isArray(value)) { + const formattedArray = value.map((v) => `'${v}'`).join(", "); + return `[${key}]="[${formattedArray}]"`; + } + return `${key}="${value}"`; + }) + .join(" "); + + return `${formattedNonFunctionArgs} ${argsToTemplate(args as ComponentType, { include: argsToTemplateIncludeKeys })}`; +}; diff --git a/.storybook/main.ts b/.storybook/main.ts index d5d116e99be..879e87fe376 100644 --- a/.storybook/main.ts +++ b/.storybook/main.ts @@ -8,6 +8,8 @@ const config: StorybookConfig = { stories: [ "../libs/auth/src/**/*.mdx", "../libs/auth/src/**/*.stories.@(js|jsx|ts|tsx)", + "../libs/dirt/card/src/**/*.mdx", + "../libs/dirt/card/src/**/*.stories.@(js|jsx|ts|tsx)", "../libs/tools/send/send-ui/src/**/*.mdx", "../libs/tools/send/send-ui/src/**/*.stories.@(js|jsx|ts|tsx)", "../libs/vault/src/**/*.mdx", @@ -20,8 +22,6 @@ const config: StorybookConfig = { "../apps/browser/src/**/*.stories.@(js|jsx|ts|tsx)", "../bitwarden_license/bit-web/src/**/*.mdx", "../bitwarden_license/bit-web/src/**/*.stories.@(js|jsx|ts|tsx)", - "../libs/tools/card/src/**/*.mdx", - "../libs/tools/card/src/**/*.stories.@(js|jsx|ts|tsx)", "../libs/angular/src/**/*.stories.@(js|jsx|ts|tsx)", ], addons: [ diff --git a/.storybook/preview.tsx b/.storybook/preview.tsx index a948fce0428..59b5287f3a3 100644 --- a/.storybook/preview.tsx +++ b/.storybook/preview.tsx @@ -41,7 +41,12 @@ const preview: Preview = { order: ["Documentation", ["Introduction", "Colors", "Icons"], "Component Library"], }, }, - docs: { source: { type: "dynamic", excludeDecorators: true } }, + docs: { + source: { + type: "dynamic", + excludeDecorators: true, + }, + }, backgrounds: { disable: true, }, diff --git a/apps/browser/jest.config.js b/apps/browser/jest.config.js index 73f5ada287a..14cd959810e 100644 --- a/apps/browser/jest.config.js +++ b/apps/browser/jest.config.js @@ -1,18 +1,17 @@ const { pathsToModuleNameMapper } = require("ts-jest"); -const { compilerOptions } = require("./tsconfig"); +const { compilerOptions } = require("../../tsconfig.base"); const sharedConfig = require("../../libs/shared/jest.config.angular"); /** @type {import('jest').Config} */ module.exports = { ...sharedConfig, - preset: "jest-preset-angular", setupFilesAfterEnv: ["/test.setup.ts"], moduleNameMapper: pathsToModuleNameMapper( - { "@bitwarden/common/spec": ["../../libs/common/spec"], ...(compilerOptions?.paths ?? {}) }, + { "@bitwarden/common/spec": ["libs/common/spec"], ...(compilerOptions?.paths ?? {}) }, { - prefix: "/", + prefix: "/../../", }, ), }; diff --git a/apps/browser/package.json b/apps/browser/package.json index c44743add7c..70dd0d7a241 100644 --- a/apps/browser/package.json +++ b/apps/browser/package.json @@ -1,6 +1,6 @@ { "name": "@bitwarden/browser", - "version": "2025.5.1", + "version": "2025.7.0", "scripts": { "build": "npm run build:chrome", "build:chrome": "cross-env BROWSER=chrome MANIFEST_VERSION=3 NODE_OPTIONS=\"--max-old-space-size=8192\" webpack", diff --git a/apps/browser/src/_locales/ar/messages.json b/apps/browser/src/_locales/ar/messages.json index 48ae14fc1ce..02734de942b 100644 --- a/apps/browser/src/_locales/ar/messages.json +++ b/apps/browser/src/_locales/ar/messages.json @@ -1173,6 +1173,12 @@ "message": "أوه لا! لم نتمكن من حفظ هذا. حاول إدخال التفاصيل يدويا.", "description": "Detailed error message shown when saving login details fails." }, + "changePasswordWarning": { + "message": "After changing your password, you will need to log in with your new password. Active sessions on other devices will be logged out within one hour." + }, + "accountRecoveryUpdateMasterPasswordSubtitle": { + "message": "Change your master password to complete account recovery." + }, "enableChangedPasswordNotification": { "message": "اسأل عن تحديث تسجيل الدخول الحالي" }, @@ -1365,8 +1371,8 @@ "featureUnavailable": { "message": "الميزة غير متوفرة" }, - "encryptionKeyMigrationRequired": { - "message": "مطلوب نقل مفتاح التشفير. الرجاء تسجيل الدخول بواسطة مخزن الويب لتحديث مفتاح التشفير الخاص بك." + "legacyEncryptionUnsupported": { + "message": "Legacy encryption is no longer supported. Please contact support to recover your account." }, "premiumMembership": { "message": "العضوية المميزة" @@ -1922,6 +1928,9 @@ "typeSshKey": { "message": "مفتاح SSH" }, + "typeNote": { + "message": "Note" + }, "newItemHeader": { "message": "جديد $TYPE$", "placeholders": { @@ -2153,8 +2162,8 @@ "setYourPinCode": { "message": "تعيين رمز PIN الخاص بك لإلغاء قفل Bitwarden. سيتم إعادة تعيين إعدادات PIN الخاصة بك إذا قمت بتسجيل الخروج بالكامل من التطبيق." }, - "setYourPinCode1": { - "message": "سيتم استخدام رَقَم التعريف الشخصي الخاص بك لفتح Bitwarden بدلاً من كلمة المرور الرئيسية. سيتم حذف رَقَم التعريف الشخصي الخاص بك إذا قمت بتسجيل الخروج بالكامل من Bitwarden." + "setPinCode": { + "message": "You can use this PIN to unlock Bitwarden. Your PIN will be reset if you ever fully log out of the application." }, "pinRequired": { "message": "رمز PIN مطلوب." @@ -2204,6 +2213,9 @@ "useThisPassword": { "message": "استخدم كلمة المرور هذه" }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, "useThisUsername": { "message": "استخدم اسم المستخدم هذا" }, @@ -2481,6 +2493,12 @@ "personalOwnershipPolicyInEffectImports": { "message": "لقد حالت سياسة المؤسسة دون استيراد العناصر إلى خزانتك الشخصية." }, + "restrictCardTypeImport": { + "message": "Cannot import card item types" + }, + "restrictCardTypeImportDesc": { + "message": "A policy set by 1 or more organizations prevents you from importing cards to your vaults." + }, "domainsTitle": { "message": "النطاقات", "description": "A category title describing the concept of web domains" @@ -2512,6 +2530,10 @@ "change": { "message": "تغيير" }, + "changePassword": { + "message": "Change password", + "description": "Change password button for browser at risk notification on login." + }, "changeButtonTitle": { "message": "تغيير كلمة المرور - $ITEMNAME$", "placeholders": { @@ -2521,6 +2543,9 @@ } } }, + "atRiskPassword": { + "message": "At-risk password" + }, "atRiskPasswords": { "message": "At-risk passwords" }, @@ -2555,6 +2580,26 @@ } } }, + "atRiskChangePrompt": { + "message": "Your password for this site is at-risk. $ORGANIZATION$ has requested that you change it.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + }, + "description": "Notification body when a login triggers an at-risk password change request and the change password domain is known." + }, + "atRiskNavigatePrompt": { + "message": "$ORGANIZATION$ wants you to change this password because it is at-risk. Navigate to your account settings to change the password.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + }, + "description": "Notification body when a login triggers an at-risk password change request and no change password domain is provided." + }, "reviewAndChangeAtRiskPassword": { "message": "Review and change one at-risk password" }, @@ -2674,6 +2719,10 @@ "message": "كل الإرسالات", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "maxAccessCountReached": { + "message": "Max access count reached", + "description": "This text will be displayed after a Send has been accessed the maximum amount of times." + }, "hideTextByDefault": { "message": "إخفاء النص بشكل افتراضي" }, @@ -2876,6 +2925,9 @@ "emailVerificationRequiredDesc": { "message": "يجب عليك تأكيد بريدك الإلكتروني لاستخدام هذه الميزة. يمكنك تأكيد بريدك الإلكتروني في خزانة الويب." }, + "masterPasswordSuccessfullySet": { + "message": "Master password successfully set" + }, "updatedMasterPassword": { "message": "تحديث كلمة المرور الرئيسية" }, @@ -3408,6 +3460,9 @@ "logInRequestSent": { "message": "Request sent" }, + "masterPasswordChanged": { + "message": "Master password saved" + }, "exposedMasterPassword": { "message": "كلمة المرور الرئيسية مكشوفة" }, @@ -3522,6 +3577,12 @@ "requestAdminApproval": { "message": "طلب موافقة المدير" }, + "unableToCompleteLogin": { + "message": "Unable to complete login" + }, + "loginOnTrustedDeviceOrAskAdminToAssignPassword": { + "message": "You need to log in on a trusted device or ask your administrator to assign you a password." + }, "ssoIdentifierRequired": { "message": "Organization SSO identifier is required." }, @@ -3607,14 +3668,6 @@ "trustUser": { "message": "Trust user" }, - "sendsNoItemsTitle": { - "message": "No active Sends", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendsNoItemsMessage": { - "message": "Use Send to securely share encrypted information with anyone.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "sendsTitleNoItems": { "message": "Send sensitive information safely", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -4209,6 +4262,26 @@ "message": "Common formats", "description": "Label indicating the most common import formats" }, + "uriMatchDefaultStrategyHint": { + "message": "URI match detection is how Bitwarden identifies autofill suggestions.", + "description": "Explains to the user that URI match detection determines how Bitwarden suggests autofill options, and clarifies that this default strategy applies when no specific match detection is set for a login item." + }, + "regExAdvancedOptionWarning": { + "message": "\"Regular expression\" is an advanced option with increased risk of exposing credentials.", + "description": "Content for dialog which warns a user when selecting 'regular expression' matching strategy as a cipher match strategy" + }, + "startsWithAdvancedOptionWarning": { + "message": "\"Starts with\" is an advanced option with increased risk of exposing credentials.", + "description": "Content for dialog which warns a user when selecting 'starts with' matching strategy as a cipher match strategy" + }, + "uriMatchWarningDialogLink": { + "message": "More about match detection", + "description": "Link to match detection docs on warning dialog for advance match strategy" + }, + "uriAdvancedOption": { + "message": "Advanced options", + "description": "Advanced option placeholder for uri option component" + }, "confirmContinueToBrowserSettingsTitle": { "message": "Continue to browser settings?", "description": "Title for dialog which asks if the user wants to proceed to a relevant browser settings page" @@ -5036,6 +5109,9 @@ "unlockPinSet": { "message": "Unlock PIN set" }, + "unlockWithBiometricSet": { + "message": "Unlock with biometrics set" + }, "authenticating": { "message": "Authenticating" }, @@ -5377,5 +5453,9 @@ }, "noPermissionsViewPage": { "message": "You do not have permissions to view this page. Try logging in with a different account." + }, + "wasmNotSupported": { + "message": "WebAssembly is not supported on your browser or is not enabled. WebAssembly is required to use the Bitwarden app.", + "description": "'WebAssembly' is a technical term and should not be translated." } } diff --git a/apps/browser/src/_locales/az/messages.json b/apps/browser/src/_locales/az/messages.json index c9096bce0d6..64fa77c8683 100644 --- a/apps/browser/src/_locales/az/messages.json +++ b/apps/browser/src/_locales/az/messages.json @@ -1173,6 +1173,12 @@ "message": "Bunu saxlaya bilmədik. Məlumatları manual daxil etməyə çalışın.", "description": "Detailed error message shown when saving login details fails." }, + "changePasswordWarning": { + "message": "Parolunuzu dəyişdirdikdən sonra yeni parolunuzla giriş etməli olacaqsınız. Digər cihazlardakı aktiv seanslar bir saat ərzində çıxış sonlandırılacaq." + }, + "accountRecoveryUpdateMasterPasswordSubtitle": { + "message": "Hesabın geri qaytarılması prosesini tamamlamaq üçün ana parolunuzu dəyişdirin." + }, "enableChangedPasswordNotification": { "message": "Mövcud girişin güncəllənməsini soruş" }, @@ -1365,8 +1371,8 @@ "featureUnavailable": { "message": "Özəllik əlçatmazdır" }, - "encryptionKeyMigrationRequired": { - "message": "Şifrələmə açarının daşınması tələb olunur. Şifrələmə açarınızı güncəlləmək üçün lütfən veb seyfinizə giriş edin." + "legacyEncryptionUnsupported": { + "message": "Köhnə şifrələmə artıq dəstəklənmir. Hesabınızı geri qaytarmaq üçün lütfən dəstəklə əlaqə saxlayın." }, "premiumMembership": { "message": "Premium üzvlük" @@ -1922,6 +1928,9 @@ "typeSshKey": { "message": "SSH açarı" }, + "typeNote": { + "message": "Not" + }, "newItemHeader": { "message": "Yeni $TYPE$", "placeholders": { @@ -2153,8 +2162,8 @@ "setYourPinCode": { "message": "Bitwarden-in kilidini açmaq üçün PIN kodunuzu ayarlayın. Tətbiqdən tam çıxış etdikdə PIN ayarlarınız sıfırlanacaq." }, - "setYourPinCode1": { - "message": "Bitwarden kilidini açmaq üçün ana parolunuzun əvəzinə PIN-iniz istifadə ediləcək. Bitwarden-dən tamamilə çıxış etdikdə PIN-iniz sıfırlanacaq." + "setPinCode": { + "message": "Bitwarden-in kilidini açmaq üçün bu PIN-i istifadə edə bilərsiniz. Tətbiqdən tam çıxış etsəniz, PIN-iniz sıfırlanacaq." }, "pinRequired": { "message": "PIN kod lazımdır." @@ -2204,6 +2213,9 @@ "useThisPassword": { "message": "Bu parolu istifadə et" }, + "useThisPassphrase": { + "message": "Bu keçid ifadəsini istifadə et" + }, "useThisUsername": { "message": "Bu istifadəçi adını istifadə et" }, @@ -2481,6 +2493,12 @@ "personalOwnershipPolicyInEffectImports": { "message": "Bir təşkilat siyasəti, elementlərin fərdi seyfinizə köçürülməsini əngəllədi." }, + "restrictCardTypeImport": { + "message": "Kart element növləri daxilə köçürülə bilmir" + }, + "restrictCardTypeImportDesc": { + "message": "1 və ya daha çox təşkilat tərəfindən təyin edilən bir siyasət, kartların seyfinizə köçürülməsini əngəlləyir." + }, "domainsTitle": { "message": "Domenlər", "description": "A category title describing the concept of web domains" @@ -2512,6 +2530,10 @@ "change": { "message": "Dəyişdir" }, + "changePassword": { + "message": "Parolu dəyişdir", + "description": "Change password button for browser at risk notification on login." + }, "changeButtonTitle": { "message": "Parolu dəyişdir - $ITEMNAME$", "placeholders": { @@ -2521,6 +2543,9 @@ } } }, + "atRiskPassword": { + "message": "Riskli parollar" + }, "atRiskPasswords": { "message": "Riskli parollar" }, @@ -2555,6 +2580,26 @@ } } }, + "atRiskChangePrompt": { + "message": "Bu saytdakı parolunuz risk altındadır. $ORGANIZATION$ onu dəyişdirməyinizi tələb edir.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + }, + "description": "Notification body when a login triggers an at-risk password change request and the change password domain is known." + }, + "atRiskNavigatePrompt": { + "message": "$ORGANIZATION$, bu parolun risk altında olduğu üçün dəyişdirməyinizi istəyir. Parolu dəyişdirmək üçün hesabınızın ayarlarına gedin.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + }, + "description": "Notification body when a login triggers an at-risk password change request and no change password domain is provided." + }, "reviewAndChangeAtRiskPassword": { "message": "Riskli bir parolu incələ və dəyişdir" }, @@ -2674,6 +2719,10 @@ "message": "Bütün \"Send\"lər", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "maxAccessCountReached": { + "message": "Maksimal müraciət sayına çatıldı", + "description": "This text will be displayed after a Send has been accessed the maximum amount of times." + }, "hideTextByDefault": { "message": "Mətni ilkin olaraq gizlət" }, @@ -2876,6 +2925,9 @@ "emailVerificationRequiredDesc": { "message": "Bu özəlliyi istifadə etmək üçün e-poçtunuzu doğrulamalısınız. E-poçtunuzu veb seyfdə doğrulaya bilərsiniz." }, + "masterPasswordSuccessfullySet": { + "message": "Ana parol uğurla təyin edildi" + }, "updatedMasterPassword": { "message": "Güncəllənmiş ana parol" }, @@ -3408,6 +3460,9 @@ "logInRequestSent": { "message": "Tələb göndərildi" }, + "masterPasswordChanged": { + "message": "Ana parol saxlanıldı" + }, "exposedMasterPassword": { "message": "İfşa olunmuş ana parol" }, @@ -3522,6 +3577,12 @@ "requestAdminApproval": { "message": "Admin təsdiqini tələb et" }, + "unableToCompleteLogin": { + "message": "Giriş prosesi tamamlana bilmir" + }, + "loginOnTrustedDeviceOrAskAdminToAssignPassword": { + "message": "Güvəndiyiniz bir cihazda giriş etməli və ya inzibatçınızdan sizə bir parol təyin etməsini xahiş etməlisiniz." + }, "ssoIdentifierRequired": { "message": "Təşkilat SSO identifikatoru tələb olunur." }, @@ -3607,14 +3668,6 @@ "trustUser": { "message": "İstifadəçiyə güvən" }, - "sendsNoItemsTitle": { - "message": "Aktiv \"Send\" yoxdur", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendsNoItemsMessage": { - "message": "Şifrələnmiş məlumatları hər kəslə güvənli şəkildə paylaşmaq üçün \"Send\"i istifadə edin.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "sendsTitleNoItems": { "message": "Send, həssas məlumatlar təhlükəsizdir", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -4209,6 +4262,26 @@ "message": "Ortaq formatlar", "description": "Label indicating the most common import formats" }, + "uriMatchDefaultStrategyHint": { + "message": "URI uyuşma aşkarlaması, Bitwarden-in avto-doldurma təkliflərini necə müəyyən etdiyini göstərir.", + "description": "Explains to the user that URI match detection determines how Bitwarden suggests autofill options, and clarifies that this default strategy applies when no specific match detection is set for a login item." + }, + "regExAdvancedOptionWarning": { + "message": "\"Müntəzəm ifadə\", kimlik məlumatlarının ifşa olunma riskini artıran qabaqcıl bir seçimdir.", + "description": "Content for dialog which warns a user when selecting 'regular expression' matching strategy as a cipher match strategy" + }, + "startsWithAdvancedOptionWarning": { + "message": "\"İlə başlayır\", kimlik məlumatlarının ifşa olunma riskini artıran qabaqcıl bir seçimdir.", + "description": "Content for dialog which warns a user when selecting 'starts with' matching strategy as a cipher match strategy" + }, + "uriMatchWarningDialogLink": { + "message": "Uyuşma aşkarlaması barədə daha çox", + "description": "Link to match detection docs on warning dialog for advance match strategy" + }, + "uriAdvancedOption": { + "message": "Qabaqcıl seçimlər", + "description": "Advanced option placeholder for uri option component" + }, "confirmContinueToBrowserSettingsTitle": { "message": "Brauzer ayarları ilə davam edilsin?", "description": "Title for dialog which asks if the user wants to proceed to a relevant browser settings page" @@ -5036,6 +5109,9 @@ "unlockPinSet": { "message": "PIN ilə kilid açma təyini" }, + "unlockWithBiometricSet": { + "message": "Kilidi biometriklə aç ayarı" + }, "authenticating": { "message": "Kimlik doğrulama" }, @@ -5377,5 +5453,9 @@ }, "noPermissionsViewPage": { "message": "Bu səhifəyə baxmaq icazəniz yoxdur. Fərqli hesabla giriş etməyə çalışın." + }, + "wasmNotSupported": { + "message": "WebAssembly brauzerinizdə dəstəklənmir və ya fəal deyil. WebAssembly, Bitwarden tətbiqini istifadə etmək üçün tələb olunur.", + "description": "'WebAssembly' is a technical term and should not be translated." } } diff --git a/apps/browser/src/_locales/be/messages.json b/apps/browser/src/_locales/be/messages.json index 0dd5ff4163f..eb721e76850 100644 --- a/apps/browser/src/_locales/be/messages.json +++ b/apps/browser/src/_locales/be/messages.json @@ -1173,6 +1173,12 @@ "message": "Oh no! We couldn't save this. Try entering the details manually.", "description": "Detailed error message shown when saving login details fails." }, + "changePasswordWarning": { + "message": "After changing your password, you will need to log in with your new password. Active sessions on other devices will be logged out within one hour." + }, + "accountRecoveryUpdateMasterPasswordSubtitle": { + "message": "Change your master password to complete account recovery." + }, "enableChangedPasswordNotification": { "message": "Пытацца пра абнаўленні існуючага лагіна" }, @@ -1365,8 +1371,8 @@ "featureUnavailable": { "message": "Функцыя недаступна" }, - "encryptionKeyMigrationRequired": { - "message": "Encryption key migration required. Please login through the web vault to update your encryption key." + "legacyEncryptionUnsupported": { + "message": "Legacy encryption is no longer supported. Please contact support to recover your account." }, "premiumMembership": { "message": "Прэміяльны статус" @@ -1922,6 +1928,9 @@ "typeSshKey": { "message": "Ключ SSH" }, + "typeNote": { + "message": "Note" + }, "newItemHeader": { "message": "Новы $TYPE$", "placeholders": { @@ -2153,8 +2162,8 @@ "setYourPinCode": { "message": "Прызначце PIN-код для разблакіроўкі Bitwarden. Налады PIN-кода будуць скінуты, калі вы калі-небудзь цалкам выйдзеце з праграмы." }, - "setYourPinCode1": { - "message": "Your PIN will be used to unlock Bitwarden instead of your master password. Your PIN will reset if you ever fully log out of Bitwarden." + "setPinCode": { + "message": "You can use this PIN to unlock Bitwarden. Your PIN will be reset if you ever fully log out of the application." }, "pinRequired": { "message": "Патрабуецца PIN-код." @@ -2204,6 +2213,9 @@ "useThisPassword": { "message": "Выкарыстоўваць гэты пароль" }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, "useThisUsername": { "message": "Выкарыстоўваць гэта імя карыстальніка" }, @@ -2481,6 +2493,12 @@ "personalOwnershipPolicyInEffectImports": { "message": "An organization policy has blocked importing items into your individual vault." }, + "restrictCardTypeImport": { + "message": "Cannot import card item types" + }, + "restrictCardTypeImportDesc": { + "message": "A policy set by 1 or more organizations prevents you from importing cards to your vaults." + }, "domainsTitle": { "message": "Дамены", "description": "A category title describing the concept of web domains" @@ -2512,6 +2530,10 @@ "change": { "message": "Change" }, + "changePassword": { + "message": "Change password", + "description": "Change password button for browser at risk notification on login." + }, "changeButtonTitle": { "message": "Change password - $ITEMNAME$", "placeholders": { @@ -2521,6 +2543,9 @@ } } }, + "atRiskPassword": { + "message": "At-risk password" + }, "atRiskPasswords": { "message": "At-risk passwords" }, @@ -2555,6 +2580,26 @@ } } }, + "atRiskChangePrompt": { + "message": "Your password for this site is at-risk. $ORGANIZATION$ has requested that you change it.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + }, + "description": "Notification body when a login triggers an at-risk password change request and the change password domain is known." + }, + "atRiskNavigatePrompt": { + "message": "$ORGANIZATION$ wants you to change this password because it is at-risk. Navigate to your account settings to change the password.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + }, + "description": "Notification body when a login triggers an at-risk password change request and no change password domain is provided." + }, "reviewAndChangeAtRiskPassword": { "message": "Review and change one at-risk password" }, @@ -2674,6 +2719,10 @@ "message": "Усе Send’ы", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "maxAccessCountReached": { + "message": "Max access count reached", + "description": "This text will be displayed after a Send has been accessed the maximum amount of times." + }, "hideTextByDefault": { "message": "Hide text by default" }, @@ -2876,6 +2925,9 @@ "emailVerificationRequiredDesc": { "message": "Вы павінны праверыць свой адрас электроннай пошты, каб выкарыстоўваць гэту функцыю. Зрабіць гэта можна ў вэб-сховішчы." }, + "masterPasswordSuccessfullySet": { + "message": "Master password successfully set" + }, "updatedMasterPassword": { "message": "Асноўны пароль абноўлены" }, @@ -3408,6 +3460,9 @@ "logInRequestSent": { "message": "Request sent" }, + "masterPasswordChanged": { + "message": "Master password saved" + }, "exposedMasterPassword": { "message": "Скампраметаваны асноўны пароль" }, @@ -3522,6 +3577,12 @@ "requestAdminApproval": { "message": "Запытаць ухваленне адміністратара" }, + "unableToCompleteLogin": { + "message": "Unable to complete login" + }, + "loginOnTrustedDeviceOrAskAdminToAssignPassword": { + "message": "You need to log in on a trusted device or ask your administrator to assign you a password." + }, "ssoIdentifierRequired": { "message": "Organization SSO identifier is required." }, @@ -3607,14 +3668,6 @@ "trustUser": { "message": "Trust user" }, - "sendsNoItemsTitle": { - "message": "Няма актыўных Send'аў", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendsNoItemsMessage": { - "message": "Выкарыстоўвайце Send'ы, каб бяспечна абагуляць зашыфраваную інфармацыю з іншымі.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "sendsTitleNoItems": { "message": "Send sensitive information safely", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -4209,6 +4262,26 @@ "message": "Common formats", "description": "Label indicating the most common import formats" }, + "uriMatchDefaultStrategyHint": { + "message": "URI match detection is how Bitwarden identifies autofill suggestions.", + "description": "Explains to the user that URI match detection determines how Bitwarden suggests autofill options, and clarifies that this default strategy applies when no specific match detection is set for a login item." + }, + "regExAdvancedOptionWarning": { + "message": "\"Regular expression\" is an advanced option with increased risk of exposing credentials.", + "description": "Content for dialog which warns a user when selecting 'regular expression' matching strategy as a cipher match strategy" + }, + "startsWithAdvancedOptionWarning": { + "message": "\"Starts with\" is an advanced option with increased risk of exposing credentials.", + "description": "Content for dialog which warns a user when selecting 'starts with' matching strategy as a cipher match strategy" + }, + "uriMatchWarningDialogLink": { + "message": "More about match detection", + "description": "Link to match detection docs on warning dialog for advance match strategy" + }, + "uriAdvancedOption": { + "message": "Advanced options", + "description": "Advanced option placeholder for uri option component" + }, "confirmContinueToBrowserSettingsTitle": { "message": "Continue to browser settings?", "description": "Title for dialog which asks if the user wants to proceed to a relevant browser settings page" @@ -5036,6 +5109,9 @@ "unlockPinSet": { "message": "Unlock PIN set" }, + "unlockWithBiometricSet": { + "message": "Unlock with biometrics set" + }, "authenticating": { "message": "Authenticating" }, @@ -5377,5 +5453,9 @@ }, "noPermissionsViewPage": { "message": "You do not have permissions to view this page. Try logging in with a different account." + }, + "wasmNotSupported": { + "message": "WebAssembly is not supported on your browser or is not enabled. WebAssembly is required to use the Bitwarden app.", + "description": "'WebAssembly' is a technical term and should not be translated." } } diff --git a/apps/browser/src/_locales/bg/messages.json b/apps/browser/src/_locales/bg/messages.json index 0bf8dbce2b0..dad53b42e36 100644 --- a/apps/browser/src/_locales/bg/messages.json +++ b/apps/browser/src/_locales/bg/messages.json @@ -1173,6 +1173,12 @@ "message": "О, не! Запазването не беше успешно. Опитайте да въведете данните ръчно.", "description": "Detailed error message shown when saving login details fails." }, + "changePasswordWarning": { + "message": "След като промените паролата си, ще трябва да се впишете отново с новата си парола. Сесиите на други устройства също ще бъдат прекратени в рамките на един час." + }, + "accountRecoveryUpdateMasterPasswordSubtitle": { + "message": "Променете главната си парола, за да завършите възстановяването на акаунта." + }, "enableChangedPasswordNotification": { "message": "Питане за обновяване на съществуващ запис" }, @@ -1365,8 +1371,8 @@ "featureUnavailable": { "message": "Функцията е недостъпна" }, - "encryptionKeyMigrationRequired": { - "message": "Необходима е промяна на шифриращия ключ. Впишете се в трезора си по уеб, за да обновите своя шифриращ ключ." + "legacyEncryptionUnsupported": { + "message": "Остарелият метод на шифроване вече не се поддържа. Моля, свържете се с поддръжката, за да възстановите акаунта си." }, "premiumMembership": { "message": "Платен абонамент" @@ -1922,6 +1928,9 @@ "typeSshKey": { "message": "SSH ключ" }, + "typeNote": { + "message": "Бележка" + }, "newItemHeader": { "message": "Ново $TYPE$", "placeholders": { @@ -2153,8 +2162,8 @@ "setYourPinCode": { "message": "Задайте ПИН за отключване на Bitwarden. Настройките за ПИН се изчистват при всяко пълно излизане от програмата." }, - "setYourPinCode1": { - "message": "Вашият ПИН ще бъде ползван за отключване на Битуорден, вместо главната парола. Той ще бъде нулиран, ако някога се отпишете напълно от Битуорден." + "setPinCode": { + "message": "Може да използвате този ПИН за отключване на Битуорден. Вашият ПИН ще се нулира ако в някакъв момент се отпишете напълно от приложението." }, "pinRequired": { "message": "Необходим е ПИН." @@ -2204,6 +2213,9 @@ "useThisPassword": { "message": "Използване на тази парола" }, + "useThisPassphrase": { + "message": "Използване на тази парола-фраза" + }, "useThisUsername": { "message": "Използване на това потребителско име" }, @@ -2481,6 +2493,12 @@ "personalOwnershipPolicyInEffectImports": { "message": "Политика на организацията забранява да внасяте елементи в личния си трезор." }, + "restrictCardTypeImport": { + "message": "Картовите елементи не могат да бъдат внесени" + }, + "restrictCardTypeImportDesc": { + "message": "Политика, зададена от 1 или повече организации, не позволява да внасяте карти в трезорите си." + }, "domainsTitle": { "message": "Домейни", "description": "A category title describing the concept of web domains" @@ -2512,6 +2530,10 @@ "change": { "message": "Промяна" }, + "changePassword": { + "message": "Промяна на паролата", + "description": "Change password button for browser at risk notification on login." + }, "changeButtonTitle": { "message": "Промяна на паролата – $ITEMNAME$", "placeholders": { @@ -2521,6 +2543,9 @@ } } }, + "atRiskPassword": { + "message": "Парола в риск" + }, "atRiskPasswords": { "message": "Пароли в риск" }, @@ -2555,6 +2580,26 @@ } } }, + "atRiskChangePrompt": { + "message": "Вашата парола за този уеб сайт е в риск. $ORGANIZATION$ изисква от Вас да я смените.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + }, + "description": "Notification body when a login triggers an at-risk password change request and the change password domain is known." + }, + "atRiskNavigatePrompt": { + "message": "$ORGANIZATION$ иска от Вас да смените тази парола, защото е в риск. Отидете в настройките на акаунта си, за да смените паролата си.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + }, + "description": "Notification body when a login triggers an at-risk password change request and no change password domain is provided." + }, "reviewAndChangeAtRiskPassword": { "message": "Преглед и промяна на една парола в риск" }, @@ -2674,6 +2719,10 @@ "message": "Всички изпращания", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "maxAccessCountReached": { + "message": "Достигнат е максималният брой достъпвания", + "description": "This text will be displayed after a Send has been accessed the maximum amount of times." + }, "hideTextByDefault": { "message": "Скриване на текста по подразбиране" }, @@ -2876,6 +2925,9 @@ "emailVerificationRequiredDesc": { "message": "Трябва да потвърдите е-пощата си, за да използвате тази функционалност. Можете да го направите в уеб-трезора." }, + "masterPasswordSuccessfullySet": { + "message": "Главната парола е зададена успешно" + }, "updatedMasterPassword": { "message": "Главната парола е променена" }, @@ -3408,6 +3460,9 @@ "logInRequestSent": { "message": "Заявката е изпратена" }, + "masterPasswordChanged": { + "message": "Главната парола е запазена" + }, "exposedMasterPassword": { "message": "Разкрита главна парола" }, @@ -3522,6 +3577,12 @@ "requestAdminApproval": { "message": "Подаване на заявка за одобрение от администратор" }, + "unableToCompleteLogin": { + "message": "Вписването не може да бъде завършено" + }, + "loginOnTrustedDeviceOrAskAdminToAssignPassword": { + "message": "Трябва да се впишете на доверено устройство или да помолите администратора си да Ви зададе парола." + }, "ssoIdentifierRequired": { "message": "Идентификаторът за еднократна идентификация на организация е задължителен." }, @@ -3607,14 +3668,6 @@ "trustUser": { "message": "Даване на доверие на потребителя" }, - "sendsNoItemsTitle": { - "message": "Няма активни Изпращания", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendsNoItemsMessage": { - "message": "Използвайте Изпращане, за да споделите безопасно шифрована информация с някого.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "sendsTitleNoItems": { "message": "Изпращайте чувствителна информация сигурно", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -4209,6 +4262,26 @@ "message": "Често използвани формати", "description": "Label indicating the most common import formats" }, + "uriMatchDefaultStrategyHint": { + "message": "Разпознаването на съвпадения чрез адреса е начинът, по който Битуорден определя кои елементи да предложи за автоматично попълване.", + "description": "Explains to the user that URI match detection determines how Bitwarden suggests autofill options, and clarifies that this default strategy applies when no specific match detection is set for a login item." + }, + "regExAdvancedOptionWarning": { + "message": "„Регулярен израз“ е по-сложен метод, който е и по-рисков, тъй като може да застраши сигурността на данните за вписване.", + "description": "Content for dialog which warns a user when selecting 'regular expression' matching strategy as a cipher match strategy" + }, + "startsWithAdvancedOptionWarning": { + "message": "„Започва с“ е по-сложен метод, който е и по-рисков, тъй като може да застраши сигурността на данните за вписване.", + "description": "Content for dialog which warns a user when selecting 'starts with' matching strategy as a cipher match strategy" + }, + "uriMatchWarningDialogLink": { + "message": "Повече относно разпознаването на съвпадения", + "description": "Link to match detection docs on warning dialog for advance match strategy" + }, + "uriAdvancedOption": { + "message": "Разширени настройки", + "description": "Advanced option placeholder for uri option component" + }, "confirmContinueToBrowserSettingsTitle": { "message": "Продължаване към настройките на браузъра?", "description": "Title for dialog which asks if the user wants to proceed to a relevant browser settings page" @@ -5036,6 +5109,9 @@ "unlockPinSet": { "message": "Зададен е ПИН код за отключване" }, + "unlockWithBiometricSet": { + "message": "Отключване с биометричен набор" + }, "authenticating": { "message": "Удостоверяване" }, @@ -5060,7 +5136,7 @@ "description": "Represents the ~ key in screen reader content as a readable word" }, "backtickCharacterDescriptor": { - "message": "Backtick", + "message": "Обратен апостроф", "description": "Represents the ` key in screen reader content as a readable word" }, "exclamationCharacterDescriptor": { @@ -5377,5 +5453,9 @@ }, "noPermissionsViewPage": { "message": "Нямате права за преглед на тази страница. Опитайте да се впишете с друг акаунт." + }, + "wasmNotSupported": { + "message": "WebAssembly не е включено или не се поддържа от Вашия браузър. За ползването на приложението на Битуорден е необходимо WebAssembly да работи.", + "description": "'WebAssembly' is a technical term and should not be translated." } } diff --git a/apps/browser/src/_locales/bn/messages.json b/apps/browser/src/_locales/bn/messages.json index f7f28115faa..d70378f146c 100644 --- a/apps/browser/src/_locales/bn/messages.json +++ b/apps/browser/src/_locales/bn/messages.json @@ -1173,6 +1173,12 @@ "message": "Oh no! We couldn't save this. Try entering the details manually.", "description": "Detailed error message shown when saving login details fails." }, + "changePasswordWarning": { + "message": "After changing your password, you will need to log in with your new password. Active sessions on other devices will be logged out within one hour." + }, + "accountRecoveryUpdateMasterPasswordSubtitle": { + "message": "Change your master password to complete account recovery." + }, "enableChangedPasswordNotification": { "message": "Ask to update existing login" }, @@ -1365,8 +1371,8 @@ "featureUnavailable": { "message": "বৈশিষ্ট্য অনুপলব্ধ" }, - "encryptionKeyMigrationRequired": { - "message": "Encryption key migration required. Please login through the web vault to update your encryption key." + "legacyEncryptionUnsupported": { + "message": "Legacy encryption is no longer supported. Please contact support to recover your account." }, "premiumMembership": { "message": "প্রিমিয়াম সদস্য" @@ -1922,6 +1928,9 @@ "typeSshKey": { "message": "SSH key" }, + "typeNote": { + "message": "Note" + }, "newItemHeader": { "message": "New $TYPE$", "placeholders": { @@ -2153,8 +2162,8 @@ "setYourPinCode": { "message": "Bitwarden আনলক করার জন্য আপনার পিন কোডটি সেট করুন। আপনি যদি অ্যাপ্লিকেশনটি থেকে পুরোপুরি লগ আউট করেন তবে আপনার পিন সেটিংস রিসেট করা হবে।" }, - "setYourPinCode1": { - "message": "Your PIN will be used to unlock Bitwarden instead of your master password. Your PIN will reset if you ever fully log out of Bitwarden." + "setPinCode": { + "message": "You can use this PIN to unlock Bitwarden. Your PIN will be reset if you ever fully log out of the application." }, "pinRequired": { "message": "পিন কোড প্রয়োজন।" @@ -2204,6 +2213,9 @@ "useThisPassword": { "message": "Use this password" }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, "useThisUsername": { "message": "Use this username" }, @@ -2481,6 +2493,12 @@ "personalOwnershipPolicyInEffectImports": { "message": "An organization policy has blocked importing items into your individual vault." }, + "restrictCardTypeImport": { + "message": "Cannot import card item types" + }, + "restrictCardTypeImportDesc": { + "message": "A policy set by 1 or more organizations prevents you from importing cards to your vaults." + }, "domainsTitle": { "message": "Domains", "description": "A category title describing the concept of web domains" @@ -2512,6 +2530,10 @@ "change": { "message": "Change" }, + "changePassword": { + "message": "Change password", + "description": "Change password button for browser at risk notification on login." + }, "changeButtonTitle": { "message": "Change password - $ITEMNAME$", "placeholders": { @@ -2521,6 +2543,9 @@ } } }, + "atRiskPassword": { + "message": "At-risk password" + }, "atRiskPasswords": { "message": "At-risk passwords" }, @@ -2555,6 +2580,26 @@ } } }, + "atRiskChangePrompt": { + "message": "Your password for this site is at-risk. $ORGANIZATION$ has requested that you change it.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + }, + "description": "Notification body when a login triggers an at-risk password change request and the change password domain is known." + }, + "atRiskNavigatePrompt": { + "message": "$ORGANIZATION$ wants you to change this password because it is at-risk. Navigate to your account settings to change the password.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + }, + "description": "Notification body when a login triggers an at-risk password change request and no change password domain is provided." + }, "reviewAndChangeAtRiskPassword": { "message": "Review and change one at-risk password" }, @@ -2674,6 +2719,10 @@ "message": "All Sends", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "maxAccessCountReached": { + "message": "Max access count reached", + "description": "This text will be displayed after a Send has been accessed the maximum amount of times." + }, "hideTextByDefault": { "message": "Hide text by default" }, @@ -2876,6 +2925,9 @@ "emailVerificationRequiredDesc": { "message": "You must verify your email to use this feature. You can verify your email in the web vault." }, + "masterPasswordSuccessfullySet": { + "message": "Master password successfully set" + }, "updatedMasterPassword": { "message": "প্রধান পাসওয়ার্ড আপডেট করা হয়েছে" }, @@ -3408,6 +3460,9 @@ "logInRequestSent": { "message": "Request sent" }, + "masterPasswordChanged": { + "message": "Master password saved" + }, "exposedMasterPassword": { "message": "Exposed Master Password" }, @@ -3522,6 +3577,12 @@ "requestAdminApproval": { "message": "Request admin approval" }, + "unableToCompleteLogin": { + "message": "Unable to complete login" + }, + "loginOnTrustedDeviceOrAskAdminToAssignPassword": { + "message": "You need to log in on a trusted device or ask your administrator to assign you a password." + }, "ssoIdentifierRequired": { "message": "Organization SSO identifier is required." }, @@ -3607,14 +3668,6 @@ "trustUser": { "message": "Trust user" }, - "sendsNoItemsTitle": { - "message": "No active Sends", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendsNoItemsMessage": { - "message": "Use Send to securely share encrypted information with anyone.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "sendsTitleNoItems": { "message": "Send sensitive information safely", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -4209,6 +4262,26 @@ "message": "Common formats", "description": "Label indicating the most common import formats" }, + "uriMatchDefaultStrategyHint": { + "message": "URI match detection is how Bitwarden identifies autofill suggestions.", + "description": "Explains to the user that URI match detection determines how Bitwarden suggests autofill options, and clarifies that this default strategy applies when no specific match detection is set for a login item." + }, + "regExAdvancedOptionWarning": { + "message": "\"Regular expression\" is an advanced option with increased risk of exposing credentials.", + "description": "Content for dialog which warns a user when selecting 'regular expression' matching strategy as a cipher match strategy" + }, + "startsWithAdvancedOptionWarning": { + "message": "\"Starts with\" is an advanced option with increased risk of exposing credentials.", + "description": "Content for dialog which warns a user when selecting 'starts with' matching strategy as a cipher match strategy" + }, + "uriMatchWarningDialogLink": { + "message": "More about match detection", + "description": "Link to match detection docs on warning dialog for advance match strategy" + }, + "uriAdvancedOption": { + "message": "Advanced options", + "description": "Advanced option placeholder for uri option component" + }, "confirmContinueToBrowserSettingsTitle": { "message": "Continue to browser settings?", "description": "Title for dialog which asks if the user wants to proceed to a relevant browser settings page" @@ -5036,6 +5109,9 @@ "unlockPinSet": { "message": "Unlock PIN set" }, + "unlockWithBiometricSet": { + "message": "Unlock with biometrics set" + }, "authenticating": { "message": "Authenticating" }, @@ -5377,5 +5453,9 @@ }, "noPermissionsViewPage": { "message": "You do not have permissions to view this page. Try logging in with a different account." + }, + "wasmNotSupported": { + "message": "WebAssembly is not supported on your browser or is not enabled. WebAssembly is required to use the Bitwarden app.", + "description": "'WebAssembly' is a technical term and should not be translated." } } diff --git a/apps/browser/src/_locales/bs/messages.json b/apps/browser/src/_locales/bs/messages.json index 1dc35addd8e..afe20ff55ca 100644 --- a/apps/browser/src/_locales/bs/messages.json +++ b/apps/browser/src/_locales/bs/messages.json @@ -1173,6 +1173,12 @@ "message": "Oh no! We couldn't save this. Try entering the details manually.", "description": "Detailed error message shown when saving login details fails." }, + "changePasswordWarning": { + "message": "After changing your password, you will need to log in with your new password. Active sessions on other devices will be logged out within one hour." + }, + "accountRecoveryUpdateMasterPasswordSubtitle": { + "message": "Change your master password to complete account recovery." + }, "enableChangedPasswordNotification": { "message": "Ask to update existing login" }, @@ -1365,8 +1371,8 @@ "featureUnavailable": { "message": "Feature unavailable" }, - "encryptionKeyMigrationRequired": { - "message": "Encryption key migration required. Please login through the web vault to update your encryption key." + "legacyEncryptionUnsupported": { + "message": "Legacy encryption is no longer supported. Please contact support to recover your account." }, "premiumMembership": { "message": "Premium membership" @@ -1922,6 +1928,9 @@ "typeSshKey": { "message": "SSH key" }, + "typeNote": { + "message": "Note" + }, "newItemHeader": { "message": "New $TYPE$", "placeholders": { @@ -2153,8 +2162,8 @@ "setYourPinCode": { "message": "Set your PIN code for unlocking Bitwarden. Your PIN settings will be reset if you ever fully log out of the application." }, - "setYourPinCode1": { - "message": "Your PIN will be used to unlock Bitwarden instead of your master password. Your PIN will reset if you ever fully log out of Bitwarden." + "setPinCode": { + "message": "You can use this PIN to unlock Bitwarden. Your PIN will be reset if you ever fully log out of the application." }, "pinRequired": { "message": "PIN code is required." @@ -2204,6 +2213,9 @@ "useThisPassword": { "message": "Use this password" }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, "useThisUsername": { "message": "Use this username" }, @@ -2481,6 +2493,12 @@ "personalOwnershipPolicyInEffectImports": { "message": "An organization policy has blocked importing items into your individual vault." }, + "restrictCardTypeImport": { + "message": "Cannot import card item types" + }, + "restrictCardTypeImportDesc": { + "message": "A policy set by 1 or more organizations prevents you from importing cards to your vaults." + }, "domainsTitle": { "message": "Domains", "description": "A category title describing the concept of web domains" @@ -2512,6 +2530,10 @@ "change": { "message": "Change" }, + "changePassword": { + "message": "Change password", + "description": "Change password button for browser at risk notification on login." + }, "changeButtonTitle": { "message": "Change password - $ITEMNAME$", "placeholders": { @@ -2521,6 +2543,9 @@ } } }, + "atRiskPassword": { + "message": "At-risk password" + }, "atRiskPasswords": { "message": "At-risk passwords" }, @@ -2555,6 +2580,26 @@ } } }, + "atRiskChangePrompt": { + "message": "Your password for this site is at-risk. $ORGANIZATION$ has requested that you change it.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + }, + "description": "Notification body when a login triggers an at-risk password change request and the change password domain is known." + }, + "atRiskNavigatePrompt": { + "message": "$ORGANIZATION$ wants you to change this password because it is at-risk. Navigate to your account settings to change the password.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + }, + "description": "Notification body when a login triggers an at-risk password change request and no change password domain is provided." + }, "reviewAndChangeAtRiskPassword": { "message": "Review and change one at-risk password" }, @@ -2674,6 +2719,10 @@ "message": "All Sends", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "maxAccessCountReached": { + "message": "Max access count reached", + "description": "This text will be displayed after a Send has been accessed the maximum amount of times." + }, "hideTextByDefault": { "message": "Hide text by default" }, @@ -2876,6 +2925,9 @@ "emailVerificationRequiredDesc": { "message": "You must verify your email to use this feature. You can verify your email in the web vault." }, + "masterPasswordSuccessfullySet": { + "message": "Master password successfully set" + }, "updatedMasterPassword": { "message": "Updated master password" }, @@ -3408,6 +3460,9 @@ "logInRequestSent": { "message": "Request sent" }, + "masterPasswordChanged": { + "message": "Master password saved" + }, "exposedMasterPassword": { "message": "Exposed Master Password" }, @@ -3522,6 +3577,12 @@ "requestAdminApproval": { "message": "Request admin approval" }, + "unableToCompleteLogin": { + "message": "Unable to complete login" + }, + "loginOnTrustedDeviceOrAskAdminToAssignPassword": { + "message": "You need to log in on a trusted device or ask your administrator to assign you a password." + }, "ssoIdentifierRequired": { "message": "Organization SSO identifier is required." }, @@ -3607,14 +3668,6 @@ "trustUser": { "message": "Trust user" }, - "sendsNoItemsTitle": { - "message": "No active Sends", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendsNoItemsMessage": { - "message": "Use Send to securely share encrypted information with anyone.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "sendsTitleNoItems": { "message": "Send sensitive information safely", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -4209,6 +4262,26 @@ "message": "Common formats", "description": "Label indicating the most common import formats" }, + "uriMatchDefaultStrategyHint": { + "message": "URI match detection is how Bitwarden identifies autofill suggestions.", + "description": "Explains to the user that URI match detection determines how Bitwarden suggests autofill options, and clarifies that this default strategy applies when no specific match detection is set for a login item." + }, + "regExAdvancedOptionWarning": { + "message": "\"Regular expression\" is an advanced option with increased risk of exposing credentials.", + "description": "Content for dialog which warns a user when selecting 'regular expression' matching strategy as a cipher match strategy" + }, + "startsWithAdvancedOptionWarning": { + "message": "\"Starts with\" is an advanced option with increased risk of exposing credentials.", + "description": "Content for dialog which warns a user when selecting 'starts with' matching strategy as a cipher match strategy" + }, + "uriMatchWarningDialogLink": { + "message": "More about match detection", + "description": "Link to match detection docs on warning dialog for advance match strategy" + }, + "uriAdvancedOption": { + "message": "Advanced options", + "description": "Advanced option placeholder for uri option component" + }, "confirmContinueToBrowserSettingsTitle": { "message": "Continue to browser settings?", "description": "Title for dialog which asks if the user wants to proceed to a relevant browser settings page" @@ -5036,6 +5109,9 @@ "unlockPinSet": { "message": "Unlock PIN set" }, + "unlockWithBiometricSet": { + "message": "Unlock with biometrics set" + }, "authenticating": { "message": "Authenticating" }, @@ -5377,5 +5453,9 @@ }, "noPermissionsViewPage": { "message": "You do not have permissions to view this page. Try logging in with a different account." + }, + "wasmNotSupported": { + "message": "WebAssembly is not supported on your browser or is not enabled. WebAssembly is required to use the Bitwarden app.", + "description": "'WebAssembly' is a technical term and should not be translated." } } diff --git a/apps/browser/src/_locales/ca/messages.json b/apps/browser/src/_locales/ca/messages.json index 9517257ac3a..29859f03dd0 100644 --- a/apps/browser/src/_locales/ca/messages.json +++ b/apps/browser/src/_locales/ca/messages.json @@ -3,7 +3,7 @@ "message": "Bitwarden" }, "appLogoLabel": { - "message": "Bitwarden logo" + "message": "Logotip de Bitwarden" }, "extName": { "message": "Bitwarden - Gestor de contrasenyes", @@ -1173,6 +1173,12 @@ "message": "Oh no! We couldn't save this. Try entering the details manually.", "description": "Detailed error message shown when saving login details fails." }, + "changePasswordWarning": { + "message": "After changing your password, you will need to log in with your new password. Active sessions on other devices will be logged out within one hour." + }, + "accountRecoveryUpdateMasterPasswordSubtitle": { + "message": "Change your master password to complete account recovery." + }, "enableChangedPasswordNotification": { "message": "Demana d'actualitzar els inicis de sessió existents" }, @@ -1365,8 +1371,8 @@ "featureUnavailable": { "message": "Característica no disponible" }, - "encryptionKeyMigrationRequired": { - "message": "Cal migrar la clau de xifratge. Inicieu la sessió a la caixa forta web per actualitzar la clau de xifratge." + "legacyEncryptionUnsupported": { + "message": "Legacy encryption is no longer supported. Please contact support to recover your account." }, "premiumMembership": { "message": "Subscripció Premium" @@ -1621,10 +1627,10 @@ "message": "Mostra suggeriments d'emplenament automàtic als camps del formulari" }, "showInlineMenuIdentitiesLabel": { - "message": "Display identities as suggestions" + "message": "Mostra identitats com a suggeriments" }, "showInlineMenuCardsLabel": { - "message": "Display cards as suggestions" + "message": "Mostra targetes com a suggeriments" }, "showInlineMenuOnIconSelectionLabel": { "message": "Mostra suggeriments quan la icona està seleccionada" @@ -1922,6 +1928,9 @@ "typeSshKey": { "message": "Clau SSH" }, + "typeNote": { + "message": "Nota" + }, "newItemHeader": { "message": "Nou $TYPE$", "placeholders": { @@ -2153,8 +2162,8 @@ "setYourPinCode": { "message": "Configureu el vostre codi PIN per desbloquejar Bitwarden. La configuració del PIN es restablirà si tanqueu la sessió definitivament." }, - "setYourPinCode1": { - "message": "Your PIN will be used to unlock Bitwarden instead of your master password. Your PIN will reset if you ever fully log out of Bitwarden." + "setPinCode": { + "message": "You can use this PIN to unlock Bitwarden. Your PIN will be reset if you ever fully log out of the application." }, "pinRequired": { "message": "Es necessita el codi PIN." @@ -2204,6 +2213,9 @@ "useThisPassword": { "message": "Utilitzeu aquesta contrasenya" }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, "useThisUsername": { "message": "Utilitzeu aquest nom d'usuari" }, @@ -2219,7 +2231,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": "Personalització de la caixa forta" }, "vaultTimeoutAction": { "message": "Acció quan acabe el temps d'espera de la caixa forta" @@ -2481,6 +2493,12 @@ "personalOwnershipPolicyInEffectImports": { "message": "Una política d'organització ha bloquejat la importació d'elements a la vostra caixa forta individual." }, + "restrictCardTypeImport": { + "message": "Cannot import card item types" + }, + "restrictCardTypeImportDesc": { + "message": "A policy set by 1 or more organizations prevents you from importing cards to your vaults." + }, "domainsTitle": { "message": "Dominis", "description": "A category title describing the concept of web domains" @@ -2512,6 +2530,10 @@ "change": { "message": "Canvia" }, + "changePassword": { + "message": "Change password", + "description": "Change password button for browser at risk notification on login." + }, "changeButtonTitle": { "message": "Change password - $ITEMNAME$", "placeholders": { @@ -2521,6 +2543,9 @@ } } }, + "atRiskPassword": { + "message": "At-risk password" + }, "atRiskPasswords": { "message": "At-risk passwords" }, @@ -2555,6 +2580,26 @@ } } }, + "atRiskChangePrompt": { + "message": "Your password for this site is at-risk. $ORGANIZATION$ has requested that you change it.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + }, + "description": "Notification body when a login triggers an at-risk password change request and the change password domain is known." + }, + "atRiskNavigatePrompt": { + "message": "$ORGANIZATION$ wants you to change this password because it is at-risk. Navigate to your account settings to change the password.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + }, + "description": "Notification body when a login triggers an at-risk password change request and no change password domain is provided." + }, "reviewAndChangeAtRiskPassword": { "message": "Review and change one at-risk password" }, @@ -2674,6 +2719,10 @@ "message": "Tots els Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "maxAccessCountReached": { + "message": "Max access count reached", + "description": "This text will be displayed after a Send has been accessed the maximum amount of times." + }, "hideTextByDefault": { "message": "Amaga el text per defecte" }, @@ -2876,6 +2925,9 @@ "emailVerificationRequiredDesc": { "message": "Heu de verificar el correu electrònic per utilitzar aquesta característica. Podeu verificar el vostre correu electrònic a la caixa forta web." }, + "masterPasswordSuccessfullySet": { + "message": "La contrasenya mestra s'ha configurat correctament" + }, "updatedMasterPassword": { "message": "Contrasenya mestra actualitzada" }, @@ -3408,6 +3460,9 @@ "logInRequestSent": { "message": "Sol·licitud enviada" }, + "masterPasswordChanged": { + "message": "Master password saved" + }, "exposedMasterPassword": { "message": "Contrasenya mestra exposada" }, @@ -3522,6 +3577,12 @@ "requestAdminApproval": { "message": "Sol·liciteu l'aprovació de l'administrador" }, + "unableToCompleteLogin": { + "message": "Unable to complete login" + }, + "loginOnTrustedDeviceOrAskAdminToAssignPassword": { + "message": "You need to log in on a trusted device or ask your administrator to assign you a password." + }, "ssoIdentifierRequired": { "message": "Es requereix un identificador SSO de l'organització." }, @@ -3607,14 +3668,6 @@ "trustUser": { "message": "Trust user" }, - "sendsNoItemsTitle": { - "message": "No hi ha Sends actius", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendsNoItemsMessage": { - "message": "Utilitzeu Send per compartir informació xifrada de manera segura amb qualsevol persona.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "sendsTitleNoItems": { "message": "Send sensitive information safely", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -4209,6 +4262,26 @@ "message": "Formats comuns", "description": "Label indicating the most common import formats" }, + "uriMatchDefaultStrategyHint": { + "message": "URI match detection is how Bitwarden identifies autofill suggestions.", + "description": "Explains to the user that URI match detection determines how Bitwarden suggests autofill options, and clarifies that this default strategy applies when no specific match detection is set for a login item." + }, + "regExAdvancedOptionWarning": { + "message": "\"Regular expression\" is an advanced option with increased risk of exposing credentials.", + "description": "Content for dialog which warns a user when selecting 'regular expression' matching strategy as a cipher match strategy" + }, + "startsWithAdvancedOptionWarning": { + "message": "\"Starts with\" is an advanced option with increased risk of exposing credentials.", + "description": "Content for dialog which warns a user when selecting 'starts with' matching strategy as a cipher match strategy" + }, + "uriMatchWarningDialogLink": { + "message": "More about match detection", + "description": "Link to match detection docs on warning dialog for advance match strategy" + }, + "uriAdvancedOption": { + "message": "Advanced options", + "description": "Advanced option placeholder for uri option component" + }, "confirmContinueToBrowserSettingsTitle": { "message": "Voleu continuar a la configuració del navegador?", "description": "Title for dialog which asks if the user wants to proceed to a relevant browser settings page" @@ -5036,6 +5109,9 @@ "unlockPinSet": { "message": "Unlock PIN set" }, + "unlockWithBiometricSet": { + "message": "Desbloqueja amb conjunt biomètric" + }, "authenticating": { "message": "S'està autenticant" }, @@ -5253,7 +5329,7 @@ "message": "Change at-risk password" }, "settingsVaultOptions": { - "message": "Vault options" + "message": "Opcions de la caixa forta" }, "emptyVaultDescription": { "message": "The vault protects more than just your passwords. Store secure logins, IDs, cards and notes securely here." @@ -5377,5 +5453,9 @@ }, "noPermissionsViewPage": { "message": "You do not have permissions to view this page. Try logging in with a different account." + }, + "wasmNotSupported": { + "message": "WebAssembly is not supported on your browser or is not enabled. WebAssembly is required to use the Bitwarden app.", + "description": "'WebAssembly' is a technical term and should not be translated." } } diff --git a/apps/browser/src/_locales/cs/messages.json b/apps/browser/src/_locales/cs/messages.json index b213e0aee7d..05135190fb4 100644 --- a/apps/browser/src/_locales/cs/messages.json +++ b/apps/browser/src/_locales/cs/messages.json @@ -1003,7 +1003,7 @@ "message": "Prohledat složku" }, "searchCollection": { - "message": "Prohledat kolekci" + "message": "Prohledat sbírku" }, "searchType": { "message": "Typ hledání" @@ -1173,6 +1173,12 @@ "message": "Ale ne! Nemohli jsme to uložit. Zkuste zadat podrobnosti ručně.", "description": "Detailed error message shown when saving login details fails." }, + "changePasswordWarning": { + "message": "Po změně hesla se budete muset přihlásit pomocí svého nového hesla. Aktivní relace na jiných zařízeních budou odhlášeny do jedné hodiny." + }, + "accountRecoveryUpdateMasterPasswordSubtitle": { + "message": "Pro dokončení obnovy účtu změňte hlavní heslo." + }, "enableChangedPasswordNotification": { "message": "Zeptat se na aktualizaci existujícího přihlášení" }, @@ -1365,8 +1371,8 @@ "featureUnavailable": { "message": "Funkce je nedostupná" }, - "encryptionKeyMigrationRequired": { - "message": "Vyžaduje se migrace šifrovacího klíče. Pro aktualizaci šifrovacího klíče se přihlaste přes webový trezor." + "legacyEncryptionUnsupported": { + "message": "Staré šifrování již není podporováno. Kontaktujte podporu pro obnovení Vašeho účtu." }, "premiumMembership": { "message": "Prémiové členství" @@ -1922,6 +1928,9 @@ "typeSshKey": { "message": "SSH klíč" }, + "typeNote": { + "message": "Poznámka" + }, "newItemHeader": { "message": "Nové $TYPE$", "placeholders": { @@ -1965,10 +1974,10 @@ "message": "Zpět" }, "collections": { - "message": "Kolekce" + "message": "Sbírky" }, "nCollections": { - "message": "$COUNT$ kolekcí", + "message": "$COUNT$ sbírek", "placeholders": { "count": { "content": "$1", @@ -2111,7 +2120,7 @@ "message": "Nepatříte do žádné organizace. Organizace umožňují bezpečné sdílení položek s ostatními uživateli." }, "noCollectionsInList": { - "message": "Žádné kolekce k zobrazení." + "message": "Žádné sbírky k zobrazení." }, "ownership": { "message": "Vlastnictví" @@ -2153,8 +2162,8 @@ "setYourPinCode": { "message": "Nastavte svůj PIN kód pro odemknutí trezoru. Pokud se zcela odhlásíte z aplikace bude Váš aktuální PIN resetován." }, - "setYourPinCode1": { - "message": "Váš PIN bude použit k odemknutí Bitwardenu namísto hlavního hesla. Pokud se někdy plně odhlásíte z Bitwarden, Váš PIN kód se obnoví." + "setPinCode": { + "message": "Tento PIN můžete použít k odemknutí Bitwardenu. Váš PIN bude resetován, pokud seněkdy úplně odhlásíte z aplikace." }, "pinRequired": { "message": "Je vyžadován PIN kód." @@ -2184,7 +2193,7 @@ "message": "Vyžadovat hlavní heslo při restartu prohlížeče" }, "selectOneCollection": { - "message": "Musíte vybrat alespoň jednu kolekci." + "message": "Musíte vybrat alespoň jednu sbírku." }, "cloneItem": { "message": "Duplikovat položku" @@ -2204,6 +2213,9 @@ "useThisPassword": { "message": "Použít toto heslo" }, + "useThisPassphrase": { + "message": "Použít tuto heslovou frázi" + }, "useThisUsername": { "message": "Použít toto uživatelské jméno" }, @@ -2473,7 +2485,7 @@ "message": "Tuto akci nelze provést v postranním panelu, zkuste akci znovu v novém okně." }, "personalOwnershipSubmitError": { - "message": "Z důvodu podnikových zásad nemůžete ukládat položky do svého osobního trezoru. Změňte vlastnictví položky na organizaci a poté si vyberte z dostupných kolekcí." + "message": "Z důvodu podnikových zásad nemůžete ukládat položky do svého osobního trezoru. Změňte vlastnictví položky na organizaci a poté si vyberte dostupných sbírek." }, "personalOwnershipPolicyInEffect": { "message": "Zásady organizace ovlivňují možnosti vlastnictví." @@ -2481,6 +2493,12 @@ "personalOwnershipPolicyInEffectImports": { "message": "Zásady organizace zablokovaly importování položek do Vašeho osobního trezoru." }, + "restrictCardTypeImport": { + "message": "Nelze importovat typy položek karty" + }, + "restrictCardTypeImportDesc": { + "message": "Zásady nastavené 1 nebo více organizací Vám brání v importu karet do Vašeho trezoru." + }, "domainsTitle": { "message": "Domény", "description": "A category title describing the concept of web domains" @@ -2512,6 +2530,10 @@ "change": { "message": "Změnit" }, + "changePassword": { + "message": "Změnit heslo", + "description": "Change password button for browser at risk notification on login." + }, "changeButtonTitle": { "message": "Změnit heslo - $ITEMNAME$", "placeholders": { @@ -2521,11 +2543,14 @@ } } }, + "atRiskPassword": { + "message": "Ohrožené heslo" + }, "atRiskPasswords": { "message": "Ohrožená hesla" }, "atRiskPasswordDescSingleOrg": { - "message": "$ORGANIZATION$ Vás žádá o změnu 1 hesla, protože je v ohrožení.", + "message": "$ORGANIZATION$ Vás žádá o změnu 1 hesla, protože je ohroženo.", "placeholders": { "organization": { "content": "$1", @@ -2534,7 +2559,7 @@ } }, "atRiskPasswordsDescSingleOrgPlural": { - "message": "$ORGANIZATION$ Vás žádá o změnu $COUNT$ hesel, protože jsou v ohrožení.", + "message": "$ORGANIZATION$ Vás žádá o změnu $COUNT$ hesel, protože jsou ohrožena.", "placeholders": { "organization": { "content": "$1", @@ -2547,7 +2572,7 @@ } }, "atRiskPasswordsDescMultiOrgPlural": { - "message": "Vaše organizace Vás žádají o změnu $COUNT$ hesel, protože jsou v ohrožení.", + "message": "Vaše organizace Vás žádají o změnu $COUNT$ hesel, protože jsou ohrožena.", "placeholders": { "count": { "content": "$1", @@ -2555,6 +2580,26 @@ } } }, + "atRiskChangePrompt": { + "message": "Vaše heslo pro tuto stránku je ohrožené. $ORGANIZATION$ Vás požádala, abyste jej změnili.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + }, + "description": "Notification body when a login triggers an at-risk password change request and the change password domain is known." + }, + "atRiskNavigatePrompt": { + "message": "$ORGANIZATION$ chce, abyste změnili toto heslo, protože je ohrožené. Přejděte do nastavení účtu a změňte heslo.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + }, + "description": "Notification body when a login triggers an at-risk password change request and no change password domain is provided." + }, "reviewAndChangeAtRiskPassword": { "message": "Zkontrolovat a změnit jedno ohrožené heslo" }, @@ -2574,20 +2619,20 @@ "message": "Aktualizujte svá nastavení, abyste mohli rychle automaticky vyplňovat hesla a generovat nová hesla." }, "reviewAtRiskLogins": { - "message": "Kontrola rizikových přihlášení" + "message": "Kontrola ohrožených přihlášení" }, "reviewAtRiskPasswords": { - "message": "Kontrola rizikových hesel" + "message": "Kontrola ohrožený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" }, "reviewAtRiskLoginSlideImgAltPeriod": { - "message": "Ilustrace seznamu přihlášení, která jsou riziková." + "message": "Ilustrace seznamu přihlášení, která jsou ohrožená." }, "generatePasswordSlideDesc": { - "message": "Rychle vygeneruje silné, unikátní heslo s nabídkou automatického vyplňování Bitwarden na rizikových stránkách.", + "message": "Rychle vygeneruje silné, unikátní heslo s nabídkou automatického vyplňování Bitwarden na ohrožených stránkách.", "description": "Description of the generate password slide on the at-risk password page carousel" }, "generatePasswordSlideImgAltPeriod": { @@ -2674,6 +2719,10 @@ "message": "Všechny Sends", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "maxAccessCountReached": { + "message": "Dosažen maximální počet přístupů", + "description": "This text will be displayed after a Send has been accessed the maximum amount of times." + }, "hideTextByDefault": { "message": "Ve výchozím nastavení skrýt text" }, @@ -2876,6 +2925,9 @@ "emailVerificationRequiredDesc": { "message": "Abyste mohli tuto funkci používat, musíte ověřit svůj e-mail. Svůj e-mail můžete ověřit ve webovém trezoru." }, + "masterPasswordSuccessfullySet": { + "message": "Hlavní heslo bylo úspěšně nastaveno" + }, "updatedMasterPassword": { "message": "Hlavní heslo bylo aktualizováno" }, @@ -3408,6 +3460,9 @@ "logInRequestSent": { "message": "Požadavek odeslán" }, + "masterPasswordChanged": { + "message": "Hlavní heslo bylo uloženo" + }, "exposedMasterPassword": { "message": "Odhalené hlavní heslo" }, @@ -3522,6 +3577,12 @@ "requestAdminApproval": { "message": "Žádost o schválení správcem" }, + "unableToCompleteLogin": { + "message": "Nelze dokončit přihlášení" + }, + "loginOnTrustedDeviceOrAskAdminToAssignPassword": { + "message": "Musíte se přihlásit na důvěryhodném zařízení nebo požádat správce, aby Vám přiřadil heslo." + }, "ssoIdentifierRequired": { "message": "Je vyžadován SSO identifikátor organizace." }, @@ -3607,14 +3668,6 @@ "trustUser": { "message": "Důvěřovat uživateli" }, - "sendsNoItemsTitle": { - "message": "Žádná aktivní Sends", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendsNoItemsMessage": { - "message": "Použijte Send pro bezpečné sdílení šifrovaných informací s kýmkoliv.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "sendsTitleNoItems": { "message": "Posílejte citlivé informace bezpečně", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -3960,7 +4013,7 @@ "message": "Zvolte složku" }, "selectImportCollection": { - "message": "Zvolte kolekci" + "message": "Zvolte sbírku" }, "importTargetHint": { "message": "Pokud chcete obsah importovaného souboru přesunout do složky $DESTINATION$, vyberte tuto volbu", @@ -4146,7 +4199,7 @@ "message": "Zkuste to znovu nebo vyhledejte e-mail od LastPass pro ověření, že jste to Vy." }, "collection": { - "message": "Kolekce" + "message": "Sbírka" }, "lastPassYubikeyDesc": { "message": "Vložte YubiKey spojený s Vaším účtem LastPass do USB portu Vašeho počítače a stiskněte jeho tlačítko." @@ -4209,6 +4262,26 @@ "message": "Společné formáty", "description": "Label indicating the most common import formats" }, + "uriMatchDefaultStrategyHint": { + "message": "Detekce shody URI je způsob, jakým Bitwarden identifikuje návrhy automatického vyplňování.", + "description": "Explains to the user that URI match detection determines how Bitwarden suggests autofill options, and clarifies that this default strategy applies when no specific match detection is set for a login item." + }, + "regExAdvancedOptionWarning": { + "message": "\"Regulární výraz\" je pokročilá volba se zvýšeným rizikem odhalení přihlašovacích údajů.", + "description": "Content for dialog which warns a user when selecting 'regular expression' matching strategy as a cipher match strategy" + }, + "startsWithAdvancedOptionWarning": { + "message": "\"Začíná na\" je pokročilá volba se zvýšeným rizikem odhalení přihlašovacích údajů.", + "description": "Content for dialog which warns a user when selecting 'starts with' matching strategy as a cipher match strategy" + }, + "uriMatchWarningDialogLink": { + "message": "Další informace o detekci shody", + "description": "Link to match detection docs on warning dialog for advance match strategy" + }, + "uriAdvancedOption": { + "message": "Rozšířené volby", + "description": "Advanced option placeholder for uri option component" + }, "confirmContinueToBrowserSettingsTitle": { "message": "Pokračovat do nastavení prohlížeče?", "description": "Title for dialog which asks if the user wants to proceed to a relevant browser settings page" @@ -4410,7 +4483,7 @@ "message": "Žádné hodnoty ke zkopírování" }, "assignToCollections": { - "message": "Přiřadit ke kolekcím" + "message": "Přiřadit ke sbírkám" }, "copyEmail": { "message": "Kopírovat e-mail" @@ -4434,7 +4507,7 @@ "message": "Vzhled" }, "errorAssigningTargetCollection": { - "message": "Chyba při přiřazování cílové kolekce." + "message": "Chyba při přiřazování do cílové sbírky." }, "errorAssigningTargetFolder": { "message": "Chyba při přiřazování cílové složky." @@ -4726,10 +4799,10 @@ "message": "Přiřadit" }, "bulkCollectionAssignmentDialogDescriptionSingular": { - "message": "Jen členové organizace s přístupem k těmto kolekcím budou moci vidět položku." + "message": "Jen členové organizace s přístupem k těmto sbírkám budou moci vidět položku." }, "bulkCollectionAssignmentDialogDescriptionPlural": { - "message": "Jen členové organizace s přístupem k těmto kolekcím budou moci vidět položky." + "message": "Jen členové organizace s přístupem k těmto sbírkám budou moci vidět položky." }, "bulkCollectionAssignmentWarning": { "message": "Vybrali jste $TOTAL_COUNT$ položek. Nemůžete aktualizovat $READONLY_COUNT$ položek, protože nemáte oprávnění k úpravám.", @@ -4830,7 +4903,7 @@ } }, "selectCollectionsToAssign": { - "message": "Vyberte kolekce pro přiřazení" + "message": "Vyberte sbírky pro přiřazení" }, "personalItemTransferWarningSingular": { "message": "1 položka bude trvale převedena do vybrané organizace. Tuto položku již nebudete vlastnit." @@ -4867,7 +4940,7 @@ } }, "successfullyAssignedCollections": { - "message": "Kolekce byly úspěšně přiřazeny" + "message": "Sbírky byly úspěšně přiřazeny" }, "nothingSelected": { "message": "Nevybrali jste žádné položky." @@ -5036,6 +5109,9 @@ "unlockPinSet": { "message": "PIN pro odemknutí byl nastaven" }, + "unlockWithBiometricSet": { + "message": "Odemknout pomocí biometrie" + }, "authenticating": { "message": "Ověřování" }, @@ -5235,7 +5311,7 @@ "message": "SSH klíč byl úspěšně importován" }, "cannotRemoveViewOnlyCollections": { - "message": "Nemůžete odebrat kolekce s oprávněními jen pro zobrazení: $COLLECTIONS$", + "message": "Nemůžete odebrat sbírky s oprávněními jen pro zobrazení: $COLLECTIONS$", "placeholders": { "collections": { "content": "$1", @@ -5377,5 +5453,9 @@ }, "noPermissionsViewPage": { "message": "Nemáte oprávnění k zobrazení této stránky. Zkuste se přihlásit jiným účtem." + }, + "wasmNotSupported": { + "message": "WebAssembly není ve Vašem prohlížeči podporováno nebo není povoleno. WebAssembly je vyžadováno pro použití aplikace Bitwarden.", + "description": "'WebAssembly' is a technical term and should not be translated." } } diff --git a/apps/browser/src/_locales/cy/messages.json b/apps/browser/src/_locales/cy/messages.json index ee74d1e45e2..c5cbbdd189c 100644 --- a/apps/browser/src/_locales/cy/messages.json +++ b/apps/browser/src/_locales/cy/messages.json @@ -3,7 +3,7 @@ "message": "Bitwarden" }, "appLogoLabel": { - "message": "Bitwarden logo" + "message": "Logo Bitwarden" }, "extName": { "message": "Rheolydd cyfrineiriau Bitwarden", @@ -335,7 +335,7 @@ "message": "Mwy gan Bitwarden" }, "continueToBitwardenDotCom": { - "message": "Continue to bitwarden.com?" + "message": "Parhau i bitwarden.com?" }, "bitwardenForBusiness": { "message": "Bitwarden for Business" @@ -668,13 +668,13 @@ "message": "Mae eich cell ar glo. Gwiriwch eich hunaniaeth i barhau." }, "yourVaultIsLockedV2": { - "message": "Your vault is locked" + "message": "Mae eich cell ar glo" }, "yourAccountIsLocked": { - "message": "Your account is locked" + "message": "Mae eich cyfrif ar glo" }, "or": { - "message": "or" + "message": "neu" }, "unlock": { "message": "Datgloi" @@ -762,7 +762,7 @@ "message": "Your master password cannot be recovered if you forget it!" }, "masterPassHintLabel": { - "message": "Master password hint" + "message": "Awgrym o'ch prif gyfrinair" }, "errorOccurred": { "message": "Bu gwall" @@ -799,13 +799,13 @@ "message": "Mae eich cyfrif wedi cael ei greu!" }, "youHaveBeenLoggedIn": { - "message": "You have been logged in!" + "message": "Rydych wedi cael eich mewngofnodi!" }, "youSuccessfullyLoggedIn": { "message": "You successfully logged in" }, "youMayCloseThisWindow": { - "message": "You may close this window" + "message": "Gallwch cau'r ffenestr hon bellach" }, "masterPassSent": { "message": "Rydym ni wedi anfon ebost atoch gydag awgrym ar gyfer eich prif gyfrinair." @@ -860,7 +860,7 @@ "message": "Logged out" }, "loggedOutDesc": { - "message": "You have been logged out of your account." + "message": "Rydych wedi cael eich allgofnodi o'ch cyfrif." }, "loginExpired": { "message": "Mae eich sesiwn wedi dod i ben." @@ -872,13 +872,13 @@ "message": "Mewngofnodi i Bitwarden" }, "enterTheCodeSentToYourEmail": { - "message": "Enter the code sent to your email" + "message": "Rhowch y cod a anfonwyd i'ch ebost" }, "enterTheCodeFromYourAuthenticatorApp": { - "message": "Enter the code from your authenticator app" + "message": "Rhowch y cod o'ch ap dilysu" }, "pressYourYubiKeyToAuthenticate": { - "message": "Press your YubiKey to authenticate" + "message": "Gwasgwch eich YubiKey i ddilysu" }, "duoTwoFactorRequiredPageSubtitle": { "message": "Duo two-step login is required for your account. Follow the steps below to finish logging in." @@ -929,13 +929,13 @@ "message": "Make your account more secure by setting up two-step login in the Bitwarden web app." }, "twoStepLoginConfirmationTitle": { - "message": "Continue to web app?" + "message": "Parhau i'r ap gwe?" }, "editedFolder": { "message": "Ffolder wedi'i chadw" }, "deleteFolderConfirmation": { - "message": "Are you sure you want to delete this folder?" + "message": "Ydych chi'n sicr yr hoffech chi ddileu'r ffolder hon?" }, "deletedFolder": { "message": "Ffolder wedi'i dileu" @@ -1076,11 +1076,11 @@ "description": "Aria label for the new item button in notification bar confirmation message when error is prompted" }, "notificationEditTooltip": { - "message": "Edit before saving", + "message": "Golygu cyn cadw", "description": "Tooltip and Aria label for edit button on cipher item" }, "newNotification": { - "message": "New notification" + "message": "Hysbysiad newydd" }, "labelWithNotification": { "message": "$LABEL$: New notification", @@ -1173,6 +1173,12 @@ "message": "Oh no! We couldn't save this. Try entering the details manually.", "description": "Detailed error message shown when saving login details fails." }, + "changePasswordWarning": { + "message": "After changing your password, you will need to log in with your new password. Active sessions on other devices will be logged out within one hour." + }, + "accountRecoveryUpdateMasterPasswordSubtitle": { + "message": "Change your master password to complete account recovery." + }, "enableChangedPasswordNotification": { "message": "Gofyn i ddiweddaru manylion mewngofnodi sy'n bodoli eisoes" }, @@ -1365,8 +1371,8 @@ "featureUnavailable": { "message": "Feature unavailable" }, - "encryptionKeyMigrationRequired": { - "message": "Encryption key migration required. Please login through the web vault to update your encryption key." + "legacyEncryptionUnsupported": { + "message": "Legacy encryption is no longer supported. Please contact support to recover your account." }, "premiumMembership": { "message": "Aelodaeth uwch" @@ -1922,6 +1928,9 @@ "typeSshKey": { "message": "Allwedd SSH" }, + "typeNote": { + "message": "Note" + }, "newItemHeader": { "message": "$TYPE$ newydd", "placeholders": { @@ -2090,7 +2099,7 @@ "message": "Tynnu" }, "default": { - "message": "Default" + "message": "Rhagosodiad" }, "dateUpdated": { "message": "Updated", @@ -2153,8 +2162,8 @@ "setYourPinCode": { "message": "Set your PIN code for unlocking Bitwarden. Your PIN settings will be reset if you ever fully log out of the application." }, - "setYourPinCode1": { - "message": "Your PIN will be used to unlock Bitwarden instead of your master password. Your PIN will reset if you ever fully log out of Bitwarden." + "setPinCode": { + "message": "You can use this PIN to unlock Bitwarden. Your PIN will be reset if you ever fully log out of the application." }, "pinRequired": { "message": "Mae angen cod PIN." @@ -2204,6 +2213,9 @@ "useThisPassword": { "message": "Defnyddio'r cyfrinair hwn" }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, "useThisUsername": { "message": "Defnyddio'r enw defnyddiwr hwn" }, @@ -2219,7 +2231,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": "Addasu'r gell" }, "vaultTimeoutAction": { "message": "Vault timeout action" @@ -2481,6 +2493,12 @@ "personalOwnershipPolicyInEffectImports": { "message": "An organization policy has blocked importing items into your individual vault." }, + "restrictCardTypeImport": { + "message": "Cannot import card item types" + }, + "restrictCardTypeImportDesc": { + "message": "A policy set by 1 or more organizations prevents you from importing cards to your vaults." + }, "domainsTitle": { "message": "Domains", "description": "A category title describing the concept of web domains" @@ -2512,6 +2530,10 @@ "change": { "message": "Change" }, + "changePassword": { + "message": "Change password", + "description": "Change password button for browser at risk notification on login." + }, "changeButtonTitle": { "message": "Change password - $ITEMNAME$", "placeholders": { @@ -2521,6 +2543,9 @@ } } }, + "atRiskPassword": { + "message": "At-risk password" + }, "atRiskPasswords": { "message": "Cyfrineiriau mewn perygl" }, @@ -2555,6 +2580,26 @@ } } }, + "atRiskChangePrompt": { + "message": "Your password for this site is at-risk. $ORGANIZATION$ has requested that you change it.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + }, + "description": "Notification body when a login triggers an at-risk password change request and the change password domain is known." + }, + "atRiskNavigatePrompt": { + "message": "$ORGANIZATION$ wants you to change this password because it is at-risk. Navigate to your account settings to change the password.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + }, + "description": "Notification body when a login triggers an at-risk password change request and no change password domain is provided." + }, "reviewAndChangeAtRiskPassword": { "message": "Review and change one at-risk password" }, @@ -2674,6 +2719,10 @@ "message": "Pob Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "maxAccessCountReached": { + "message": "Max access count reached", + "description": "This text will be displayed after a Send has been accessed the maximum amount of times." + }, "hideTextByDefault": { "message": "Hide text by default" }, @@ -2876,6 +2925,9 @@ "emailVerificationRequiredDesc": { "message": "You must verify your email to use this feature. You can verify your email in the web vault." }, + "masterPasswordSuccessfullySet": { + "message": "Master password successfully set" + }, "updatedMasterPassword": { "message": "Diweddarwyd y prif gyfrinair" }, @@ -3125,7 +3177,7 @@ } }, "passphraseNumWordsRecommendationHint": { - "message": " Defnyddiwch $RECOMMENDED$ neu fwy o eiriau i gynhyrchu cyfrinymadrodd cryff.", + "message": " Defnyddiwch $RECOMMENDED$ neu fwy o eiriau i gynhyrchu cyfrinymadrodd cryf.", "description": "Appended to `spinboxBoundariesHint` to recommend a number of words to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", "placeholders": { "recommended": { @@ -3408,6 +3460,9 @@ "logInRequestSent": { "message": "Request sent" }, + "masterPasswordChanged": { + "message": "Master password saved" + }, "exposedMasterPassword": { "message": "Exposed Master Password" }, @@ -3522,6 +3577,12 @@ "requestAdminApproval": { "message": "Request admin approval" }, + "unableToCompleteLogin": { + "message": "Unable to complete login" + }, + "loginOnTrustedDeviceOrAskAdminToAssignPassword": { + "message": "You need to log in on a trusted device or ask your administrator to assign you a password." + }, "ssoIdentifierRequired": { "message": "Organization SSO identifier is required." }, @@ -3607,14 +3668,6 @@ "trustUser": { "message": "Trust user" }, - "sendsNoItemsTitle": { - "message": "No active Sends", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendsNoItemsMessage": { - "message": "Use Send to securely share encrypted information with anyone.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "sendsTitleNoItems": { "message": "Send sensitive information safely", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -4016,7 +4069,7 @@ "message": "Passkey" }, "accessing": { - "message": "Accessing" + "message": "Yn cysylltu â" }, "loggedInExclamation": { "message": "Logged in!" @@ -4173,7 +4226,7 @@ "message": "Account limit reached. Log out of an account to add another." }, "active": { - "message": "active" + "message": "gweithredol" }, "locked": { "message": "locked" @@ -4209,6 +4262,26 @@ "message": "Fformatau cyffredin", "description": "Label indicating the most common import formats" }, + "uriMatchDefaultStrategyHint": { + "message": "URI match detection is how Bitwarden identifies autofill suggestions.", + "description": "Explains to the user that URI match detection determines how Bitwarden suggests autofill options, and clarifies that this default strategy applies when no specific match detection is set for a login item." + }, + "regExAdvancedOptionWarning": { + "message": "\"Regular expression\" is an advanced option with increased risk of exposing credentials.", + "description": "Content for dialog which warns a user when selecting 'regular expression' matching strategy as a cipher match strategy" + }, + "startsWithAdvancedOptionWarning": { + "message": "\"Starts with\" is an advanced option with increased risk of exposing credentials.", + "description": "Content for dialog which warns a user when selecting 'starts with' matching strategy as a cipher match strategy" + }, + "uriMatchWarningDialogLink": { + "message": "More about match detection", + "description": "Link to match detection docs on warning dialog for advance match strategy" + }, + "uriAdvancedOption": { + "message": "Advanced options", + "description": "Advanced option placeholder for uri option component" + }, "confirmContinueToBrowserSettingsTitle": { "message": "Continue to browser settings?", "description": "Title for dialog which asks if the user wants to proceed to a relevant browser settings page" @@ -4647,7 +4720,7 @@ "message": "Delete website" }, "defaultLabel": { - "message": "Default ($VALUE$)", + "message": "Rhagosodiad ($VALUE$)", "description": "A label that indicates the default value for a field with the current default value in parentheses.", "placeholders": { "value": { @@ -4696,10 +4769,10 @@ } }, "enableAnimations": { - "message": "Enable animations" + "message": "Galluogi animeiddio" }, "showAnimations": { - "message": "Show animations" + "message": "Dangos animeiddio" }, "addAccount": { "message": "Ychwanegu cyfrif" @@ -4923,7 +4996,7 @@ "message": "Text Sends" }, "accountActions": { - "message": "Account actions" + "message": "Gweithredoedd y cyfrif" }, "showNumberOfAutofillSuggestions": { "message": "Show number of login autofill suggestions on extension icon" @@ -4932,7 +5005,7 @@ "message": "Show quick copy actions on Vault" }, "systemDefault": { - "message": "System default" + "message": "Rhagosodiad y sytem" }, "enterprisePolicyRequirementsApplied": { "message": "Enterprise policy requirements have been applied to this setting" @@ -5036,6 +5109,9 @@ "unlockPinSet": { "message": "Unlock PIN set" }, + "unlockWithBiometricSet": { + "message": "Unlock with biometrics set" + }, "authenticating": { "message": "Authenticating" }, @@ -5199,13 +5275,13 @@ "message": "Beta" }, "extensionWidth": { - "message": "Extension width" + "message": "Lled yr estyniad" }, "wide": { - "message": "Wide" + "message": "Llydan" }, "extraWide": { - "message": "Extra wide" + "message": "Llydan iawn" }, "sshKeyWrongPassword": { "message": "The password you entered is incorrect." @@ -5253,7 +5329,7 @@ "message": "Change at-risk password" }, "settingsVaultOptions": { - "message": "Vault options" + "message": "Dewisiadau'r gell" }, "emptyVaultDescription": { "message": "The vault protects more than just your passwords. Store secure logins, IDs, cards and notes securely here." @@ -5377,5 +5453,9 @@ }, "noPermissionsViewPage": { "message": "You do not have permissions to view this page. Try logging in with a different account." + }, + "wasmNotSupported": { + "message": "WebAssembly is not supported on your browser or is not enabled. WebAssembly is required to use the Bitwarden app.", + "description": "'WebAssembly' is a technical term and should not be translated." } } diff --git a/apps/browser/src/_locales/da/messages.json b/apps/browser/src/_locales/da/messages.json index da24e1bcfb9..5737ba66b8d 100644 --- a/apps/browser/src/_locales/da/messages.json +++ b/apps/browser/src/_locales/da/messages.json @@ -1173,6 +1173,12 @@ "message": "Oh no! We couldn't save this. Try entering the details manually.", "description": "Detailed error message shown when saving login details fails." }, + "changePasswordWarning": { + "message": "After changing your password, you will need to log in with your new password. Active sessions on other devices will be logged out within one hour." + }, + "accountRecoveryUpdateMasterPasswordSubtitle": { + "message": "Change your master password to complete account recovery." + }, "enableChangedPasswordNotification": { "message": "Bed om at opdatere eksisterende login" }, @@ -1365,8 +1371,8 @@ "featureUnavailable": { "message": "Funktion ikke tilgængelig" }, - "encryptionKeyMigrationRequired": { - "message": "Krypteringsnøglemigrering nødvendig. Log ind gennem web-boksen for at opdatere krypteringsnøglen." + "legacyEncryptionUnsupported": { + "message": "Legacy encryption is no longer supported. Please contact support to recover your account." }, "premiumMembership": { "message": "Premium-medlemskab" @@ -1922,6 +1928,9 @@ "typeSshKey": { "message": "SSH-nøgle" }, + "typeNote": { + "message": "Note" + }, "newItemHeader": { "message": "Ny $TYPE$", "placeholders": { @@ -2153,8 +2162,8 @@ "setYourPinCode": { "message": "Indstil din pinkode til at låse Bitwarden op. Dine pin-indstillinger nulstilles, hvis du nogensinde logger helt ud af programmet." }, - "setYourPinCode1": { - "message": "PIN-koden vil blive brugt til oplåsning af Bitwarden i stedet for hovedadgangskoden. PIN-koden nulstilles, hvis man logger helt ud af Bitwarden." + "setPinCode": { + "message": "You can use this PIN to unlock Bitwarden. Your PIN will be reset if you ever fully log out of the application." }, "pinRequired": { "message": "Pinkode er påkrævet." @@ -2204,6 +2213,9 @@ "useThisPassword": { "message": "Anvend denne adgangskode" }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, "useThisUsername": { "message": "Anvend dette brugernavn" }, @@ -2481,6 +2493,12 @@ "personalOwnershipPolicyInEffectImports": { "message": "En organisationspolitik hindrer import af emner til den individuelle boks." }, + "restrictCardTypeImport": { + "message": "Cannot import card item types" + }, + "restrictCardTypeImportDesc": { + "message": "A policy set by 1 or more organizations prevents you from importing cards to your vaults." + }, "domainsTitle": { "message": "Domæner", "description": "A category title describing the concept of web domains" @@ -2512,6 +2530,10 @@ "change": { "message": "Change" }, + "changePassword": { + "message": "Change password", + "description": "Change password button for browser at risk notification on login." + }, "changeButtonTitle": { "message": "Change password - $ITEMNAME$", "placeholders": { @@ -2521,6 +2543,9 @@ } } }, + "atRiskPassword": { + "message": "At-risk password" + }, "atRiskPasswords": { "message": "At-risk passwords" }, @@ -2555,6 +2580,26 @@ } } }, + "atRiskChangePrompt": { + "message": "Your password for this site is at-risk. $ORGANIZATION$ has requested that you change it.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + }, + "description": "Notification body when a login triggers an at-risk password change request and the change password domain is known." + }, + "atRiskNavigatePrompt": { + "message": "$ORGANIZATION$ wants you to change this password because it is at-risk. Navigate to your account settings to change the password.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + }, + "description": "Notification body when a login triggers an at-risk password change request and no change password domain is provided." + }, "reviewAndChangeAtRiskPassword": { "message": "Review and change one at-risk password" }, @@ -2674,6 +2719,10 @@ "message": "Alle Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "maxAccessCountReached": { + "message": "Max access count reached", + "description": "This text will be displayed after a Send has been accessed the maximum amount of times." + }, "hideTextByDefault": { "message": "Skjul tekst som standard" }, @@ -2876,6 +2925,9 @@ "emailVerificationRequiredDesc": { "message": "Du skal bekræfte din e-mail for at bruge denne funktion. Du kan bekræfte din e-mail i web-boksen." }, + "masterPasswordSuccessfullySet": { + "message": "Master password successfully set" + }, "updatedMasterPassword": { "message": "Hovedadgangskode opdateret" }, @@ -3408,6 +3460,9 @@ "logInRequestSent": { "message": "Request sent" }, + "masterPasswordChanged": { + "message": "Master password saved" + }, "exposedMasterPassword": { "message": "Kompromitteret hovedadgangskode" }, @@ -3522,6 +3577,12 @@ "requestAdminApproval": { "message": "Anmod om admin-godkendelse" }, + "unableToCompleteLogin": { + "message": "Unable to complete login" + }, + "loginOnTrustedDeviceOrAskAdminToAssignPassword": { + "message": "You need to log in on a trusted device or ask your administrator to assign you a password." + }, "ssoIdentifierRequired": { "message": "Organisations SSO-identifikator kræves." }, @@ -3607,14 +3668,6 @@ "trustUser": { "message": "Trust user" }, - "sendsNoItemsTitle": { - "message": "Ingen aktive Sends", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendsNoItemsMessage": { - "message": "Brug Send til at dele krypterede oplysninger sikkert med nogen.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "sendsTitleNoItems": { "message": "Send sensitive information safely", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -4209,6 +4262,26 @@ "message": "Almindelige formater", "description": "Label indicating the most common import formats" }, + "uriMatchDefaultStrategyHint": { + "message": "URI match detection is how Bitwarden identifies autofill suggestions.", + "description": "Explains to the user that URI match detection determines how Bitwarden suggests autofill options, and clarifies that this default strategy applies when no specific match detection is set for a login item." + }, + "regExAdvancedOptionWarning": { + "message": "\"Regular expression\" is an advanced option with increased risk of exposing credentials.", + "description": "Content for dialog which warns a user when selecting 'regular expression' matching strategy as a cipher match strategy" + }, + "startsWithAdvancedOptionWarning": { + "message": "\"Starts with\" is an advanced option with increased risk of exposing credentials.", + "description": "Content for dialog which warns a user when selecting 'starts with' matching strategy as a cipher match strategy" + }, + "uriMatchWarningDialogLink": { + "message": "More about match detection", + "description": "Link to match detection docs on warning dialog for advance match strategy" + }, + "uriAdvancedOption": { + "message": "Advanced options", + "description": "Advanced option placeholder for uri option component" + }, "confirmContinueToBrowserSettingsTitle": { "message": "Fortsæt til Browserindstillinger?", "description": "Title for dialog which asks if the user wants to proceed to a relevant browser settings page" @@ -5036,6 +5109,9 @@ "unlockPinSet": { "message": "Unlock PIN set" }, + "unlockWithBiometricSet": { + "message": "Unlock with biometrics set" + }, "authenticating": { "message": "Godkender" }, @@ -5377,5 +5453,9 @@ }, "noPermissionsViewPage": { "message": "You do not have permissions to view this page. Try logging in with a different account." + }, + "wasmNotSupported": { + "message": "WebAssembly is not supported on your browser or is not enabled. WebAssembly is required to use the Bitwarden app.", + "description": "'WebAssembly' is a technical term and should not be translated." } } diff --git a/apps/browser/src/_locales/de/messages.json b/apps/browser/src/_locales/de/messages.json index f7303885551..352705ec281 100644 --- a/apps/browser/src/_locales/de/messages.json +++ b/apps/browser/src/_locales/de/messages.json @@ -1060,7 +1060,7 @@ "message": "Soll Bitwarden sich dieses Passwort merken?" }, "notificationAddSave": { - "message": "Ja, jetzt speichern" + "message": "Speichern" }, "notificationViewAria": { "message": "$ITEMNAME$ anzeigen, öffnet sich in neuem Fenster", @@ -1173,6 +1173,12 @@ "message": "Oh nein! Das konnten wir nicht speichern. Versuch, die Details manuell einzugeben.", "description": "Detailed error message shown when saving login details fails." }, + "changePasswordWarning": { + "message": "After changing your password, you will need to log in with your new password. Active sessions on other devices will be logged out within one hour." + }, + "accountRecoveryUpdateMasterPasswordSubtitle": { + "message": "Change your master password to complete account recovery." + }, "enableChangedPasswordNotification": { "message": "Nach dem Aktualisieren bestehender Zugangsdaten fragen" }, @@ -1365,8 +1371,8 @@ "featureUnavailable": { "message": "Funktion nicht verfügbar" }, - "encryptionKeyMigrationRequired": { - "message": "Verschlüsselungscode-Migration erforderlich. Bitte melde dich über den Web-Tresor an, um deinen Verschlüsselungscode zu aktualisieren." + "legacyEncryptionUnsupported": { + "message": "Die veraltete Verschlüsselung wird nicht mehr unterstützt. Bitte kontaktiere den Support, um dein Konto wiederherzustellen." }, "premiumMembership": { "message": "Premium-Mitgliedschaft" @@ -1922,6 +1928,9 @@ "typeSshKey": { "message": "SSH-Schlüssel" }, + "typeNote": { + "message": "Notiz" + }, "newItemHeader": { "message": "Neue $TYPE$", "placeholders": { @@ -2153,8 +2162,8 @@ "setYourPinCode": { "message": "Gebe deinen PIN-Code für das Entsperren von Bitwarden ein. Deine PIN-Einstellungen werden zurückgesetzt, wenn du dich vollständig von der Anwendung abmeldest." }, - "setYourPinCode1": { - "message": "Deine PIN wird verwendet, um Bitwarden anstatt deines Master-Passworts zu entsperren. Deine PIN wird zurückgesetzt, wenn du dich jemals vollständig von Bitwarden abgemeldet hast." + "setPinCode": { + "message": "Du kannst diese PIN verwenden, um Bitwarden zu entsperren. Deine PIN wird zurückgesetzt, wenn du dich vollständig aus der Anwendung abmeldest." }, "pinRequired": { "message": "PIN-Code ist erforderlich." @@ -2204,6 +2213,9 @@ "useThisPassword": { "message": "Dieses Passwort verwenden" }, + "useThisPassphrase": { + "message": "Diese Passphrase verwenden" + }, "useThisUsername": { "message": "Diesen Benutzernamen verwenden" }, @@ -2481,6 +2493,12 @@ "personalOwnershipPolicyInEffectImports": { "message": "Eine Organisationsrichtlinie hat das Importieren von Einträgen in deinen persönlichen Tresor deaktiviert." }, + "restrictCardTypeImport": { + "message": "Karten-Eintragstypen können nicht importiert werden" + }, + "restrictCardTypeImportDesc": { + "message": "Eine von einer oder mehreren Organisationen festgelegte Richtlinie verhindert, dass du Karten in deinen Tresor importieren kannst." + }, "domainsTitle": { "message": "Domains", "description": "A category title describing the concept of web domains" @@ -2512,6 +2530,10 @@ "change": { "message": "Ändern" }, + "changePassword": { + "message": "Passwort ändern", + "description": "Change password button for browser at risk notification on login." + }, "changeButtonTitle": { "message": "Passwort ändern - $ITEMNAME$", "placeholders": { @@ -2521,6 +2543,9 @@ } } }, + "atRiskPassword": { + "message": "Gefährdetes Passwort" + }, "atRiskPasswords": { "message": "Gefährdete Passwörter" }, @@ -2555,6 +2580,26 @@ } } }, + "atRiskChangePrompt": { + "message": "Dein Passwort für diese Website ist gefährdet. $ORGANIZATION$ hat darum gebeten, dass du es änderst.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + }, + "description": "Notification body when a login triggers an at-risk password change request and the change password domain is known." + }, + "atRiskNavigatePrompt": { + "message": "$ORGANIZATION$ möchte, dass du dieses Passwort änderst, da es gefährdet ist. Wechsel zu deinen Kontoeinstellungen, um das Passwort zu ändern.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + }, + "description": "Notification body when a login triggers an at-risk password change request and no change password domain is provided." + }, "reviewAndChangeAtRiskPassword": { "message": "Überprüfe und ändere ein gefährdetes Passwort" }, @@ -2674,6 +2719,10 @@ "message": "Alle Sends", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "maxAccessCountReached": { + "message": "Maximale Zugriffsanzahl erreicht", + "description": "This text will be displayed after a Send has been accessed the maximum amount of times." + }, "hideTextByDefault": { "message": "Text standardmäßig ausblenden" }, @@ -2876,6 +2925,9 @@ "emailVerificationRequiredDesc": { "message": "Du musst deine E-Mail Adresse verifizieren, um diese Funktion nutzen zu können. Du kannst deine E-Mail im Web-Tresor verifizieren." }, + "masterPasswordSuccessfullySet": { + "message": "Master-Passwort erfolgreich eingerichtet" + }, "updatedMasterPassword": { "message": "Master-Passwort aktualisiert" }, @@ -3408,6 +3460,9 @@ "logInRequestSent": { "message": "Anfrage gesendet" }, + "masterPasswordChanged": { + "message": "Master password saved" + }, "exposedMasterPassword": { "message": "Kompromittiertes Master-Passwort" }, @@ -3522,6 +3577,12 @@ "requestAdminApproval": { "message": "Admin-Genehmigung anfragen" }, + "unableToCompleteLogin": { + "message": "Unable to complete login" + }, + "loginOnTrustedDeviceOrAskAdminToAssignPassword": { + "message": "You need to log in on a trusted device or ask your administrator to assign you a password." + }, "ssoIdentifierRequired": { "message": "SSO-Kennung der Organisation erforderlich." }, @@ -3607,20 +3668,12 @@ "trustUser": { "message": "Benutzer vertrauen" }, - "sendsNoItemsTitle": { - "message": "Keine aktiven Sends", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendsNoItemsMessage": { - "message": "Verwende Send, um verschlüsselte Informationen sicher mit anderen zu teilen.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "sendsTitleNoItems": { "message": "Sensible Informationen sicher versenden", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "sendsBodyNoItems": { - "message": "Teile Dateien und Daten sicher mit jedem auf jeder Plattform. Deine Informationen bleiben Ende-zu-Ende-Verschlüsselt, während die Verbreitung begrenzt wird.", + "message": "Teile Dateien und Daten sicher mit jedem auf jeder Plattform. Deine Informationen bleiben Ende-zu-Ende-verschlüsselt, während die Verbreitung begrenzt wird.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "inputRequired": { @@ -4209,6 +4262,26 @@ "message": "Gängigste Formate", "description": "Label indicating the most common import formats" }, + "uriMatchDefaultStrategyHint": { + "message": "URI match detection is how Bitwarden identifies autofill suggestions.", + "description": "Explains to the user that URI match detection determines how Bitwarden suggests autofill options, and clarifies that this default strategy applies when no specific match detection is set for a login item." + }, + "regExAdvancedOptionWarning": { + "message": "\"Regular expression\" is an advanced option with increased risk of exposing credentials.", + "description": "Content for dialog which warns a user when selecting 'regular expression' matching strategy as a cipher match strategy" + }, + "startsWithAdvancedOptionWarning": { + "message": "\"Starts with\" is an advanced option with increased risk of exposing credentials.", + "description": "Content for dialog which warns a user when selecting 'starts with' matching strategy as a cipher match strategy" + }, + "uriMatchWarningDialogLink": { + "message": "More about match detection", + "description": "Link to match detection docs on warning dialog for advance match strategy" + }, + "uriAdvancedOption": { + "message": "Advanced options", + "description": "Advanced option placeholder for uri option component" + }, "confirmContinueToBrowserSettingsTitle": { "message": "Weiter zu den Browsereinstellungen?", "description": "Title for dialog which asks if the user wants to proceed to a relevant browser settings page" @@ -5036,6 +5109,9 @@ "unlockPinSet": { "message": "Entsperr-PIN festgelegt" }, + "unlockWithBiometricSet": { + "message": "Mit Biometrie entsperren eingerichtet" + }, "authenticating": { "message": "Authentifizierung" }, @@ -5256,7 +5332,7 @@ "message": "Tresoroptionen" }, "emptyVaultDescription": { - "message": "Der Tresor schützt mehr als nur deine Passwörter. Speicher hier sicher Zugangsdaten, Ausweise, Karten und Notizen." + "message": "Der Tresor schützt mehr als nur deine Passwörter. Speicher hier sicher Zugangsdaten, Identitäten, Karten und Notizen." }, "introCarouselLabel": { "message": "Willkommen bei Bitwarden" @@ -5367,15 +5443,19 @@ "example": "Easily create strong and unique passwords by clicking on {icon} to help you keep your logins secure." }, "generatorNudgeBodyTwo": { - "message": ", um deine Zugangsdaten sicher aufzubewahren.", + "message": ", um dir zu helfen, deine Zugangsdaten sicher zu halten.", "description": "Two part message", "example": "Easily create strong and unique passwords by clicking on {icon} to help you keep your logins secure." }, "generatorNudgeBodyAria": { - "message": "Generiere ganz einfach starke und einzigartige Passwörter, indem du auf den \"Passwort generieren\"-Button klickst, um deine Zugangsdaten sicher aufzubewahren.", + "message": "Generiere ganz einfach starke und einzigartige Passwörter, indem du auf den \"Passwort generieren\"-Button klickst, um dir zu helfen, deine Zugangsdaten sicher zu halten.", "description": "Aria label for the body content of the generator nudge" }, "noPermissionsViewPage": { "message": "Du hast keine Berechtigung, diese Seite anzuzeigen. Versuche dich mit einem anderen Konto anzumelden." + }, + "wasmNotSupported": { + "message": "WebAssembly wird von deinem Browser nicht unterstützt oder ist nicht aktiviert. WebAssembly wird benötigt, um die Bitwarden-App nutzen zu können.", + "description": "'WebAssembly' is a technical term and should not be translated." } } diff --git a/apps/browser/src/_locales/el/messages.json b/apps/browser/src/_locales/el/messages.json index ed81dfa744e..960de6670d5 100644 --- a/apps/browser/src/_locales/el/messages.json +++ b/apps/browser/src/_locales/el/messages.json @@ -1173,6 +1173,12 @@ "message": "Oh no! We couldn't save this. Try entering the details manually.", "description": "Detailed error message shown when saving login details fails." }, + "changePasswordWarning": { + "message": "After changing your password, you will need to log in with your new password. Active sessions on other devices will be logged out within one hour." + }, + "accountRecoveryUpdateMasterPasswordSubtitle": { + "message": "Change your master password to complete account recovery." + }, "enableChangedPasswordNotification": { "message": "Ζητήστε να ενημερώσετε την υπάρχουσα σύνδεση" }, @@ -1365,8 +1371,8 @@ "featureUnavailable": { "message": "Μη διαθέσιμη λειτουργία" }, - "encryptionKeyMigrationRequired": { - "message": "Απαιτείται μεταφορά κλειδιού κρυπτογράφησης. Παρακαλούμε συνδεθείτε μέσω του διαδικτυακού θησαυ/κίου για να ενημερώσετε το κλειδί κρυπτογράφησης." + "legacyEncryptionUnsupported": { + "message": "Legacy encryption is no longer supported. Please contact support to recover your account." }, "premiumMembership": { "message": "Συνδρομή Premium" @@ -1922,6 +1928,9 @@ "typeSshKey": { "message": "Κλειδί SSH" }, + "typeNote": { + "message": "Note" + }, "newItemHeader": { "message": "Νέα $TYPE$", "placeholders": { @@ -2153,8 +2162,8 @@ "setYourPinCode": { "message": "Ορίστε τον κωδικό PIN για να ξεκλειδώσετε το Bitwarden. Οι ρυθμίσεις PIN θα επαναρυθμιστούν αν αποσυνδεθείτε πλήρως από την εφαρμογή." }, - "setYourPinCode1": { - "message": "Το PIN σας θα χρησιμοποιείται για το ξεκλείδωμα του Bitwarden αντί του κύριου κωδικού πρόσβασης. Αν αποσυνδεθείτε εντελώς από το Bitwarden, θα γίνει επαναφορά του PIN σας." + "setPinCode": { + "message": "You can use this PIN to unlock Bitwarden. Your PIN will be reset if you ever fully log out of the application." }, "pinRequired": { "message": "Απαιτείται κωδικός PIN." @@ -2204,6 +2213,9 @@ "useThisPassword": { "message": "Χρήση αυτού του κωδικού πρόσβασης" }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, "useThisUsername": { "message": "Χρήση αυτού του ονόματος χρήστη" }, @@ -2481,6 +2493,12 @@ "personalOwnershipPolicyInEffectImports": { "message": "Μια οργανωτική πολιτική έχει αποτρέψει την εισαγωγή στοιχείων στο προσωπικό θησαυ/κιο σας." }, + "restrictCardTypeImport": { + "message": "Cannot import card item types" + }, + "restrictCardTypeImportDesc": { + "message": "A policy set by 1 or more organizations prevents you from importing cards to your vaults." + }, "domainsTitle": { "message": "Τομείς", "description": "A category title describing the concept of web domains" @@ -2512,6 +2530,10 @@ "change": { "message": "Αλλαγή" }, + "changePassword": { + "message": "Change password", + "description": "Change password button for browser at risk notification on login." + }, "changeButtonTitle": { "message": "Αλλαγή κωδικού πρόσβασης - $ITEMNAME$", "placeholders": { @@ -2521,6 +2543,9 @@ } } }, + "atRiskPassword": { + "message": "At-risk password" + }, "atRiskPasswords": { "message": "Κωδικοί πρόσβασης σε κίνδυνο" }, @@ -2555,6 +2580,26 @@ } } }, + "atRiskChangePrompt": { + "message": "Your password for this site is at-risk. $ORGANIZATION$ has requested that you change it.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + }, + "description": "Notification body when a login triggers an at-risk password change request and the change password domain is known." + }, + "atRiskNavigatePrompt": { + "message": "$ORGANIZATION$ wants you to change this password because it is at-risk. Navigate to your account settings to change the password.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + }, + "description": "Notification body when a login triggers an at-risk password change request and no change password domain is provided." + }, "reviewAndChangeAtRiskPassword": { "message": "Review and change one at-risk password" }, @@ -2674,6 +2719,10 @@ "message": "Όλα τα Sends", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "maxAccessCountReached": { + "message": "Max access count reached", + "description": "This text will be displayed after a Send has been accessed the maximum amount of times." + }, "hideTextByDefault": { "message": "Απόκρυψη κειμένου από προεπιλογή" }, @@ -2876,6 +2925,9 @@ "emailVerificationRequiredDesc": { "message": "Πρέπει να επαληθεύσετε το email σας για να χρησιμοποιήσετε αυτή τη δυνατότητα. Μπορείτε να επαληθεύσετε το email σας στο web vault." }, + "masterPasswordSuccessfullySet": { + "message": "Master password successfully set" + }, "updatedMasterPassword": { "message": "Ενημερώθηκε ο κύριος κωδικός πρόσβασης" }, @@ -3408,6 +3460,9 @@ "logInRequestSent": { "message": "Request sent" }, + "masterPasswordChanged": { + "message": "Master password saved" + }, "exposedMasterPassword": { "message": "Εκτεθειμένος Κύριος Κωδικός Πρόσβασης" }, @@ -3522,6 +3577,12 @@ "requestAdminApproval": { "message": "Αίτηση έγκρισης διαχειριστή" }, + "unableToCompleteLogin": { + "message": "Unable to complete login" + }, + "loginOnTrustedDeviceOrAskAdminToAssignPassword": { + "message": "You need to log in on a trusted device or ask your administrator to assign you a password." + }, "ssoIdentifierRequired": { "message": "Απαιτείται αναγνωριστικό οργανισμού SSO." }, @@ -3607,14 +3668,6 @@ "trustUser": { "message": "Trust user" }, - "sendsNoItemsTitle": { - "message": "Κανένα ενεργό Send", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendsNoItemsMessage": { - "message": "Χρήση Send για ασφαλή κοινοποίηση κρυπτογραφημένων πληροφοριών με οποιονδήποτε.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "sendsTitleNoItems": { "message": "Send sensitive information safely", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -4209,6 +4262,26 @@ "message": "Κοινοί τύποι", "description": "Label indicating the most common import formats" }, + "uriMatchDefaultStrategyHint": { + "message": "URI match detection is how Bitwarden identifies autofill suggestions.", + "description": "Explains to the user that URI match detection determines how Bitwarden suggests autofill options, and clarifies that this default strategy applies when no specific match detection is set for a login item." + }, + "regExAdvancedOptionWarning": { + "message": "\"Regular expression\" is an advanced option with increased risk of exposing credentials.", + "description": "Content for dialog which warns a user when selecting 'regular expression' matching strategy as a cipher match strategy" + }, + "startsWithAdvancedOptionWarning": { + "message": "\"Starts with\" is an advanced option with increased risk of exposing credentials.", + "description": "Content for dialog which warns a user when selecting 'starts with' matching strategy as a cipher match strategy" + }, + "uriMatchWarningDialogLink": { + "message": "More about match detection", + "description": "Link to match detection docs on warning dialog for advance match strategy" + }, + "uriAdvancedOption": { + "message": "Advanced options", + "description": "Advanced option placeholder for uri option component" + }, "confirmContinueToBrowserSettingsTitle": { "message": "Συνεχίστε στις ρυθμίσεις περιηγητή;", "description": "Title for dialog which asks if the user wants to proceed to a relevant browser settings page" @@ -5036,6 +5109,9 @@ "unlockPinSet": { "message": "Unlock PIN set" }, + "unlockWithBiometricSet": { + "message": "Unlock with biometrics set" + }, "authenticating": { "message": "Ταυτοποίηση" }, @@ -5223,16 +5299,16 @@ "message": "Enter password" }, "invalidSshKey": { - "message": "The SSH key is invalid" + "message": "Το κλειδί SSH δεν είναι έγκυρο" }, "sshKeyTypeUnsupported": { - "message": "The SSH key type is not supported" + "message": "Ο τύπος κλειδιού SSH δεν υποστηρίζεται" }, "importSshKeyFromClipboard": { - "message": "Import key from clipboard" + "message": "Εισαγωγή κλειδιού από το πρόχειρο" }, "sshKeyImported": { - "message": "SSH key imported successfully" + "message": "Επιτυχής εισαγωγή κλειδιού SSH" }, "cannotRemoveViewOnlyCollections": { "message": "Δεν μπορείτε να αφαιρέσετε συλλογές που έχουν μόνο δικαιώματα Προβολής: $COLLECTIONS$", @@ -5286,10 +5362,10 @@ "message": "Save unlimited passwords across unlimited devices with Bitwarden mobile, browser, and desktop apps." }, "nudgeBadgeAria": { - "message": "1 notification" + "message": "1 ειδοποίηση" }, "emptyVaultNudgeTitle": { - "message": "Import existing passwords" + "message": "Εισαγωγή υπαρχόντων κωδικών πρόσβασης" }, "emptyVaultNudgeBody": { "message": "Use the importer to quickly transfer logins to Bitwarden without manually adding them." @@ -5377,5 +5453,9 @@ }, "noPermissionsViewPage": { "message": "You do not have permissions to view this page. Try logging in with a different account." + }, + "wasmNotSupported": { + "message": "WebAssembly is not supported on your browser or is not enabled. WebAssembly is required to use the Bitwarden app.", + "description": "'WebAssembly' is a technical term and should not be translated." } } diff --git a/apps/browser/src/_locales/en/messages.json b/apps/browser/src/_locales/en/messages.json index feb5a7706f3..ee8cd412625 100644 --- a/apps/browser/src/_locales/en/messages.json +++ b/apps/browser/src/_locales/en/messages.json @@ -1173,6 +1173,12 @@ "message": "Oh no! We couldn't save this. Try entering the details manually.", "description": "Detailed error message shown when saving login details fails." }, + "changePasswordWarning": { + "message": "After changing your password, you will need to log in with your new password. Active sessions on other devices will be logged out within one hour." + }, + "accountRecoveryUpdateMasterPasswordSubtitle": { + "message": "Change your master password to complete account recovery." + }, "enableChangedPasswordNotification": { "message": "Ask to update existing login" }, @@ -1365,8 +1371,8 @@ "featureUnavailable": { "message": "Feature unavailable" }, - "encryptionKeyMigrationRequired": { - "message": "Encryption key migration required. Please login through the web vault to update your encryption key." + "legacyEncryptionUnsupported": { + "message": "Legacy encryption is no longer supported. Please contact support to recover your account." }, "premiumMembership": { "message": "Premium membership" @@ -1922,6 +1928,9 @@ "typeSshKey": { "message": "SSH key" }, + "typeNote": { + "message": "Note" + }, "newItemHeader": { "message": "New $TYPE$", "placeholders": { @@ -2153,8 +2162,8 @@ "setYourPinCode": { "message": "Set your PIN code for unlocking Bitwarden. Your PIN settings will be reset if you ever fully log out of the application." }, - "setYourPinCode1": { - "message": "Your PIN will be used to unlock Bitwarden instead of your master password. Your PIN will reset if you ever fully log out of Bitwarden." + "setPinCode": { + "message": "You can use this PIN to unlock Bitwarden. Your PIN will be reset if you ever fully log out of the application." }, "pinRequired": { "message": "PIN code is required." @@ -2484,6 +2493,12 @@ "personalOwnershipPolicyInEffectImports": { "message": "An organization policy has blocked importing items into your individual vault." }, + "restrictCardTypeImport": { + "message": "Cannot import card item types" + }, + "restrictCardTypeImportDesc": { + "message": "A policy set by 1 or more organizations prevents you from importing cards to your vaults." + }, "domainsTitle": { "message": "Domains", "description": "A category title describing the concept of web domains" @@ -2515,6 +2530,10 @@ "change": { "message": "Change" }, + "changePassword": { + "message": "Change password", + "description": "Change password button for browser at risk notification on login." + }, "changeButtonTitle": { "message": "Change password - $ITEMNAME$", "placeholders": { @@ -2524,6 +2543,9 @@ } } }, + "atRiskPassword": { + "message": "At-risk password" + }, "atRiskPasswords": { "message": "At-risk passwords" }, @@ -2558,6 +2580,26 @@ } } }, + "atRiskChangePrompt": { + "message": "Your password for this site is at-risk. $ORGANIZATION$ has requested that you change it.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + }, + "description": "Notification body when a login triggers an at-risk password change request and the change password domain is known." + }, + "atRiskNavigatePrompt": { + "message": "$ORGANIZATION$ wants you to change this password because it is at-risk. Navigate to your account settings to change the password.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + }, + "description": "Notification body when a login triggers an at-risk password change request and no change password domain is provided." + }, "reviewAndChangeAtRiskPassword": { "message": "Review and change one at-risk password" }, @@ -2677,6 +2719,10 @@ "message": "All Sends", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "maxAccessCountReached": { + "message": "Max access count reached", + "description": "This text will be displayed after a Send has been accessed the maximum amount of times." + }, "hideTextByDefault": { "message": "Hide text by default" }, @@ -2879,6 +2925,9 @@ "emailVerificationRequiredDesc": { "message": "You must verify your email to use this feature. You can verify your email in the web vault." }, + "masterPasswordSuccessfullySet": { + "message": "Master password successfully set" + }, "updatedMasterPassword": { "message": "Updated master password" }, @@ -3411,6 +3460,9 @@ "logInRequestSent": { "message": "Request sent" }, + "masterPasswordChanged": { + "message": "Master password saved" + }, "exposedMasterPassword": { "message": "Exposed Master Password" }, @@ -3525,6 +3577,12 @@ "requestAdminApproval": { "message": "Request admin approval" }, + "unableToCompleteLogin": { + "message": "Unable to complete login" + }, + "loginOnTrustedDeviceOrAskAdminToAssignPassword": { + "message": "You need to log in on a trusted device or ask your administrator to assign you a password." + }, "ssoIdentifierRequired": { "message": "Organization SSO identifier is required." }, @@ -3610,14 +3668,6 @@ "trustUser": { "message": "Trust user" }, - "sendsNoItemsTitle": { - "message": "No active Sends", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendsNoItemsMessage": { - "message": "Use Send to securely share encrypted information with anyone.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "sendsTitleNoItems": { "message": "Send sensitive information safely", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -4211,6 +4261,26 @@ "commonImportFormats": { "message": "Common formats", "description": "Label indicating the most common import formats" + }, + "uriMatchDefaultStrategyHint": { + "message": "URI match detection is how Bitwarden identifies autofill suggestions.", + "description": "Explains to the user that URI match detection determines how Bitwarden suggests autofill options, and clarifies that this default strategy applies when no specific match detection is set for a login item." + }, + "regExAdvancedOptionWarning": { + "message": "\"Regular expression\" is an advanced option with increased risk of exposing credentials.", + "description": "Content for dialog which warns a user when selecting 'regular expression' matching strategy as a cipher match strategy" + }, + "startsWithAdvancedOptionWarning": { + "message": "\"Starts with\" is an advanced option with increased risk of exposing credentials.", + "description": "Content for dialog which warns a user when selecting 'starts with' matching strategy as a cipher match strategy" + }, + "uriMatchWarningDialogLink": { + "message": "More about match detection", + "description": "Link to match detection docs on warning dialog for advance match strategy" + }, + "uriAdvancedOption":{ + "message": "Advanced options", + "description": "Advanced option placeholder for uri option component" }, "confirmContinueToBrowserSettingsTitle": { "message": "Continue to browser settings?", @@ -5039,6 +5109,9 @@ "unlockPinSet": { "message": "Unlock PIN set" }, + "unlockWithBiometricSet": { + "message": "Unlock with biometrics set" + }, "authenticating": { "message": "Authenticating" }, @@ -5380,5 +5453,9 @@ }, "noPermissionsViewPage": { "message": "You do not have permissions to view this page. Try logging in with a different account." + }, + "wasmNotSupported": { + "message": "WebAssembly is not supported on your browser or is not enabled. WebAssembly is required to use the Bitwarden app.", + "description": "'WebAssembly' is a technical term and should not be translated." } } diff --git a/apps/browser/src/_locales/en_GB/messages.json b/apps/browser/src/_locales/en_GB/messages.json index 5eecf989894..aab61eca30e 100644 --- a/apps/browser/src/_locales/en_GB/messages.json +++ b/apps/browser/src/_locales/en_GB/messages.json @@ -1173,6 +1173,12 @@ "message": "Oh no! We couldn't save this. Try entering the details manually.", "description": "Detailed error message shown when saving login details fails." }, + "changePasswordWarning": { + "message": "After changing your password, you will need to log in with your new password. Active sessions on other devices will be logged out within one hour." + }, + "accountRecoveryUpdateMasterPasswordSubtitle": { + "message": "Change your master password to complete account recovery." + }, "enableChangedPasswordNotification": { "message": "Ask to update existing login" }, @@ -1365,8 +1371,8 @@ "featureUnavailable": { "message": "Feature unavailable" }, - "encryptionKeyMigrationRequired": { - "message": "Encryption key migration required. Please login through the web vault to update your encryption key." + "legacyEncryptionUnsupported": { + "message": "Legacy encryption is no longer supported. Please contact support to recover your account." }, "premiumMembership": { "message": "Premium membership" @@ -1922,6 +1928,9 @@ "typeSshKey": { "message": "SSH key" }, + "typeNote": { + "message": "Note" + }, "newItemHeader": { "message": "New $TYPE$", "placeholders": { @@ -2153,8 +2162,8 @@ "setYourPinCode": { "message": "Set your PIN code for unlocking Bitwarden. Your PIN settings will be reset if you ever fully log out of the application." }, - "setYourPinCode1": { - "message": "Your PIN will be used to unlock Bitwarden instead of your master password. Your PIN will reset if you ever fully log out of Bitwarden." + "setPinCode": { + "message": "You can use this PIN to unlock Bitwarden. Your PIN will be reset if you ever fully log out of the application." }, "pinRequired": { "message": "PIN code is required." @@ -2204,6 +2213,9 @@ "useThisPassword": { "message": "Use this password" }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, "useThisUsername": { "message": "Use this username" }, @@ -2481,6 +2493,12 @@ "personalOwnershipPolicyInEffectImports": { "message": "An organisation policy has blocked importing items into your individual vault." }, + "restrictCardTypeImport": { + "message": "Cannot import card item types" + }, + "restrictCardTypeImportDesc": { + "message": "A policy set by 1 or more organisations prevents you from importing cards to your vaults." + }, "domainsTitle": { "message": "Domains", "description": "A category title describing the concept of web domains" @@ -2512,6 +2530,10 @@ "change": { "message": "Change" }, + "changePassword": { + "message": "Change password", + "description": "Change password button for browser at risk notification on login." + }, "changeButtonTitle": { "message": "Change password - $ITEMNAME$", "placeholders": { @@ -2521,6 +2543,9 @@ } } }, + "atRiskPassword": { + "message": "At-risk password" + }, "atRiskPasswords": { "message": "At-risk passwords" }, @@ -2555,6 +2580,26 @@ } } }, + "atRiskChangePrompt": { + "message": "Your password for this site is at-risk. $ORGANIZATION$ has requested that you change it.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + }, + "description": "Notification body when a login triggers an at-risk password change request and the change password domain is known." + }, + "atRiskNavigatePrompt": { + "message": "$ORGANIZATION$ wants you to change this password because it is at-risk. Navigate to your account settings to change the password.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + }, + "description": "Notification body when a login triggers an at-risk password change request and no change password domain is provided." + }, "reviewAndChangeAtRiskPassword": { "message": "Review and change one at-risk password" }, @@ -2674,6 +2719,10 @@ "message": "All Sends", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "maxAccessCountReached": { + "message": "Max access count reached", + "description": "This text will be displayed after a Send has been accessed the maximum amount of times." + }, "hideTextByDefault": { "message": "Hide text by default" }, @@ -2876,6 +2925,9 @@ "emailVerificationRequiredDesc": { "message": "You must verify your email to use this feature. You can verify your email in the web vault." }, + "masterPasswordSuccessfullySet": { + "message": "Master password successfully set" + }, "updatedMasterPassword": { "message": "Updated master password" }, @@ -3408,6 +3460,9 @@ "logInRequestSent": { "message": "Request sent" }, + "masterPasswordChanged": { + "message": "Master password saved" + }, "exposedMasterPassword": { "message": "Exposed Master Password" }, @@ -3522,6 +3577,12 @@ "requestAdminApproval": { "message": "Request admin approval" }, + "unableToCompleteLogin": { + "message": "Unable to complete login" + }, + "loginOnTrustedDeviceOrAskAdminToAssignPassword": { + "message": "You need to log in on a trusted device or ask your administrator to assign you a password." + }, "ssoIdentifierRequired": { "message": "Organisation SSO identifier is required." }, @@ -3607,14 +3668,6 @@ "trustUser": { "message": "Trust user" }, - "sendsNoItemsTitle": { - "message": "No active Sends", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendsNoItemsMessage": { - "message": "Use Send to securely share encrypted information with anyone.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "sendsTitleNoItems": { "message": "Send sensitive information safely", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -4209,6 +4262,26 @@ "message": "Common formats", "description": "Label indicating the most common import formats" }, + "uriMatchDefaultStrategyHint": { + "message": "URI match detection is how Bitwarden identifies autofill suggestions.", + "description": "Explains to the user that URI match detection determines how Bitwarden suggests autofill options, and clarifies that this default strategy applies when no specific match detection is set for a login item." + }, + "regExAdvancedOptionWarning": { + "message": "\"Regular expression\" is an advanced option with increased risk of exposing credentials.", + "description": "Content for dialog which warns a user when selecting 'regular expression' matching strategy as a cipher match strategy" + }, + "startsWithAdvancedOptionWarning": { + "message": "\"Starts with\" is an advanced option with increased risk of exposing credentials.", + "description": "Content for dialog which warns a user when selecting 'starts with' matching strategy as a cipher match strategy" + }, + "uriMatchWarningDialogLink": { + "message": "More about match detection", + "description": "Link to match detection docs on warning dialog for advance match strategy" + }, + "uriAdvancedOption": { + "message": "Advanced options", + "description": "Advanced option placeholder for uri option component" + }, "confirmContinueToBrowserSettingsTitle": { "message": "Continue to browser settings?", "description": "Title for dialog which asks if the user wants to proceed to a relevant browser settings page" @@ -5036,6 +5109,9 @@ "unlockPinSet": { "message": "Unlock PIN set" }, + "unlockWithBiometricSet": { + "message": "Unlock with biometrics set" + }, "authenticating": { "message": "Authenticating" }, @@ -5377,5 +5453,9 @@ }, "noPermissionsViewPage": { "message": "You do not have permissions to view this page. Try logging in with a different account." + }, + "wasmNotSupported": { + "message": "WebAssembly is not supported on your browser or is not enabled. WebAssembly is required to use the Bitwarden app.", + "description": "'WebAssembly' is a technical term and should not be translated." } } diff --git a/apps/browser/src/_locales/en_IN/messages.json b/apps/browser/src/_locales/en_IN/messages.json index adb3cf6ec32..eaf11a04e57 100644 --- a/apps/browser/src/_locales/en_IN/messages.json +++ b/apps/browser/src/_locales/en_IN/messages.json @@ -1173,6 +1173,12 @@ "message": "Oh no! We couldn't save this. Try entering the details manually.", "description": "Detailed error message shown when saving login details fails." }, + "changePasswordWarning": { + "message": "After changing your password, you will need to log in with your new password. Active sessions on other devices will be logged out within one hour." + }, + "accountRecoveryUpdateMasterPasswordSubtitle": { + "message": "Change your master password to complete account recovery." + }, "enableChangedPasswordNotification": { "message": "Ask to update existing login" }, @@ -1365,8 +1371,8 @@ "featureUnavailable": { "message": "Feature unavailable" }, - "encryptionKeyMigrationRequired": { - "message": "Encryption key migration required. Please login through the web vault to update your encryption key." + "legacyEncryptionUnsupported": { + "message": "Legacy encryption is no longer supported. Please contact support to recover your account." }, "premiumMembership": { "message": "Premium membership" @@ -1922,6 +1928,9 @@ "typeSshKey": { "message": "SSH key" }, + "typeNote": { + "message": "Note" + }, "newItemHeader": { "message": "New $TYPE$", "placeholders": { @@ -2153,8 +2162,8 @@ "setYourPinCode": { "message": "Set your PIN code for unlocking Bitwarden. Your PIN settings will be reset if you ever fully log out of the application." }, - "setYourPinCode1": { - "message": "Your PIN will be used to unlock Bitwarden instead of your master password. Your PIN will reset if you ever fully log out of Bitwarden." + "setPinCode": { + "message": "You can use this PIN to unlock Bitwarden. Your PIN will be reset if you ever fully log out of the application." }, "pinRequired": { "message": "PIN code is required." @@ -2204,6 +2213,9 @@ "useThisPassword": { "message": "Use this password" }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, "useThisUsername": { "message": "Use this username" }, @@ -2481,6 +2493,12 @@ "personalOwnershipPolicyInEffectImports": { "message": "An organisation policy has blocked importing items into your individual vault." }, + "restrictCardTypeImport": { + "message": "Cannot import card item types" + }, + "restrictCardTypeImportDesc": { + "message": "A policy set by 1 or more organisations prevents you from importing cards to your vaults." + }, "domainsTitle": { "message": "Domains", "description": "A category title describing the concept of web domains" @@ -2512,6 +2530,10 @@ "change": { "message": "Change" }, + "changePassword": { + "message": "Change password", + "description": "Change password button for browser at risk notification on login." + }, "changeButtonTitle": { "message": "Change password - $ITEMNAME$", "placeholders": { @@ -2521,6 +2543,9 @@ } } }, + "atRiskPassword": { + "message": "At-risk password" + }, "atRiskPasswords": { "message": "At-risk passwords" }, @@ -2555,6 +2580,26 @@ } } }, + "atRiskChangePrompt": { + "message": "Your password for this site is at-risk. $ORGANIZATION$ has requested that you change it.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + }, + "description": "Notification body when a login triggers an at-risk password change request and the change password domain is known." + }, + "atRiskNavigatePrompt": { + "message": "$ORGANIZATION$ wants you to change this password because it is at-risk. Navigate to your account settings to change the password.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + }, + "description": "Notification body when a login triggers an at-risk password change request and no change password domain is provided." + }, "reviewAndChangeAtRiskPassword": { "message": "Review and change one at-risk password" }, @@ -2674,6 +2719,10 @@ "message": "All Sends", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "maxAccessCountReached": { + "message": "Max access count reached", + "description": "This text will be displayed after a Send has been accessed the maximum amount of times." + }, "hideTextByDefault": { "message": "Hide text by default" }, @@ -2876,6 +2925,9 @@ "emailVerificationRequiredDesc": { "message": "You must verify your email to use this feature. You can verify your email in the web vault." }, + "masterPasswordSuccessfullySet": { + "message": "Master password successfully set" + }, "updatedMasterPassword": { "message": "Updated Master Password" }, @@ -3408,6 +3460,9 @@ "logInRequestSent": { "message": "Request sent" }, + "masterPasswordChanged": { + "message": "Master password saved" + }, "exposedMasterPassword": { "message": "Exposed Master Password" }, @@ -3522,6 +3577,12 @@ "requestAdminApproval": { "message": "Request admin approval" }, + "unableToCompleteLogin": { + "message": "Unable to complete login" + }, + "loginOnTrustedDeviceOrAskAdminToAssignPassword": { + "message": "You need to log in on a trusted device or ask your administrator to assign you a password." + }, "ssoIdentifierRequired": { "message": "Organisation SSO identifier is required." }, @@ -3607,14 +3668,6 @@ "trustUser": { "message": "Trust user" }, - "sendsNoItemsTitle": { - "message": "No active Sends", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendsNoItemsMessage": { - "message": "Use Send to securely share encrypted information with anyone.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "sendsTitleNoItems": { "message": "Send sensitive information safely", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -4209,6 +4262,26 @@ "message": "Common formats", "description": "Label indicating the most common import formats" }, + "uriMatchDefaultStrategyHint": { + "message": "URI match detection is how Bitwarden identifies autofill suggestions.", + "description": "Explains to the user that URI match detection determines how Bitwarden suggests autofill options, and clarifies that this default strategy applies when no specific match detection is set for a login item." + }, + "regExAdvancedOptionWarning": { + "message": "\"Regular expression\" is an advanced option with increased risk of exposing credentials.", + "description": "Content for dialog which warns a user when selecting 'regular expression' matching strategy as a cipher match strategy" + }, + "startsWithAdvancedOptionWarning": { + "message": "\"Starts with\" is an advanced option with increased risk of exposing credentials.", + "description": "Content for dialog which warns a user when selecting 'starts with' matching strategy as a cipher match strategy" + }, + "uriMatchWarningDialogLink": { + "message": "More about match detection", + "description": "Link to match detection docs on warning dialog for advance match strategy" + }, + "uriAdvancedOption": { + "message": "Advanced options", + "description": "Advanced option placeholder for uri option component" + }, "confirmContinueToBrowserSettingsTitle": { "message": "Continue to browser settings?", "description": "Title for dialog which asks if the user wants to proceed to a relevant browser settings page" @@ -5036,6 +5109,9 @@ "unlockPinSet": { "message": "Unlock PIN set" }, + "unlockWithBiometricSet": { + "message": "Unlock with biometrics set" + }, "authenticating": { "message": "Authenticating" }, @@ -5377,5 +5453,9 @@ }, "noPermissionsViewPage": { "message": "You do not have permissions to view this page. Try logging in with a different account." + }, + "wasmNotSupported": { + "message": "WebAssembly is not supported on your browser or is not enabled. WebAssembly is required to use the Bitwarden app.", + "description": "'WebAssembly' is a technical term and should not be translated." } } diff --git a/apps/browser/src/_locales/es/messages.json b/apps/browser/src/_locales/es/messages.json index 94d02848b5f..724d07f4404 100644 --- a/apps/browser/src/_locales/es/messages.json +++ b/apps/browser/src/_locales/es/messages.json @@ -881,13 +881,13 @@ "message": "Pulsa tu YubiKey para identificarte" }, "duoTwoFactorRequiredPageSubtitle": { - "message": "Se requiere inicio de sesión en dos pasos para tu cuenta. Sigue los pasos siguientes para terminar de iniciar sesión." + "message": "Se requiere el inicio de sesión en dos pasos de Duo en tu cuenta. Sigue los siguientes pasos para terminar de iniciar sesión." }, "followTheStepsBelowToFinishLoggingIn": { - "message": "Follow the steps below to finish logging in." + "message": "Sigue los pasos de abajo para terminar de iniciar sesión." }, "followTheStepsBelowToFinishLoggingInWithSecurityKey": { - "message": "Follow the steps below to finish logging in with your security key." + "message": "Sigue los siguientes pasos para terminar de iniciar sesión con tu clave de seguridad." }, "restartRegistration": { "message": "Reiniciar registro" @@ -1076,14 +1076,14 @@ "description": "Aria label for the new item button in notification bar confirmation message when error is prompted" }, "notificationEditTooltip": { - "message": "Edit before saving", + "message": "Editar antes de guardar", "description": "Tooltip and Aria label for edit button on cipher item" }, "newNotification": { - "message": "New notification" + "message": "Nueva notificación" }, "labelWithNotification": { - "message": "$LABEL$: New notification", + "message": "$LABEL$: Nueva notificación", "description": "Label for the notification with a new login suggestion.", "placeholders": { "label": { @@ -1093,15 +1093,15 @@ } }, "notificationLoginSaveConfirmation": { - "message": "saved to Bitwarden.", + "message": "guardado en Bitwarden.", "description": "Shown to user after item is saved." }, "notificationLoginUpdatedConfirmation": { - "message": "updated in Bitwarden.", + "message": "actualizado en Bitwarden.", "description": "Shown to user after item is updated." }, "selectItemAriaLabel": { - "message": "Select $ITEMTYPE$, $ITEMNAME$", + "message": "Seleccionar $ITEMTYPE$, $ITEMNAME$", "description": "Used by screen readers. $1 is the item type (like vault or folder), $2 is the selected item name.", "placeholders": { "itemType": { @@ -1113,27 +1113,27 @@ } }, "saveAsNewLoginAction": { - "message": "Save as new login", + "message": "Guardar como nuevo inicio de sesión", "description": "Button text for saving login details as a new entry." }, "updateLoginAction": { - "message": "Update login", + "message": "Actualizar inicio de sesión", "description": "Button text for updating an existing login entry." }, "unlockToSave": { - "message": "Unlock to save this login", + "message": "Desbloquea para guardar este inicio de sesión", "description": "User prompt to take action in order to save the login they just entered." }, "saveLogin": { - "message": "Save login", + "message": "Guardar inicio de sesión", "description": "Prompt asking the user if they want to save their login details." }, "updateLogin": { - "message": "Update existing login", + "message": "Actualizar inicio de sesión existente", "description": "Prompt asking the user if they want to update an existing login entry." }, "loginSaveSuccess": { - "message": "Login saved", + "message": "Inicio de sesión guardado", "description": "Message displayed when login details are successfully saved." }, "loginUpdateSuccess": { @@ -1141,7 +1141,7 @@ "description": "Message displayed when login details are successfully updated." }, "loginUpdateTaskSuccess": { - "message": "Great job! You took the steps to make you and $ORGANIZATION$ more secure.", + "message": "¡Buen trabajo! Has dado los pasos para que tú y $ORGANIZATION$ seáis más seguros.", "placeholders": { "organization": { "content": "$1" @@ -1150,7 +1150,7 @@ "description": "Shown to user after login is updated." }, "loginUpdateTaskSuccessAdditional": { - "message": "Thank you for making $ORGANIZATION$ more secure. You have $TASK_COUNT$ more passwords to update.", + "message": "Gracias por hacer $ORGANIZATION$ más seguro. Tienes $TASK_COUNT$ contraseñas más que actualizar.", "placeholders": { "organization": { "content": "$1" @@ -1162,7 +1162,7 @@ "description": "Shown to user after login is updated." }, "nextSecurityTaskAction": { - "message": "Change next password", + "message": "Cambiar siguiente contraseña", "description": "Message prompting user to undertake completion of another security task." }, "saveFailure": { @@ -1170,9 +1170,15 @@ "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.", + "message": "¡Oh no! No pudimos guardar esto. Intenta introducir los datos manualmente.", "description": "Detailed error message shown when saving login details fails." }, + "changePasswordWarning": { + "message": "After changing your password, you will need to log in with your new password. Active sessions on other devices will be logged out within one hour." + }, + "accountRecoveryUpdateMasterPasswordSubtitle": { + "message": "Change your master password to complete account recovery." + }, "enableChangedPasswordNotification": { "message": "Solicitar la actualización de los datos de inicio de sesión existentes" }, @@ -1365,8 +1371,8 @@ "featureUnavailable": { "message": "Característica no disponible" }, - "encryptionKeyMigrationRequired": { - "message": "Se requiere migración de la clave de cifrado. Por favor, inicie sesión a través de la caja fuerte para actualizar su clave de cifrado." + "legacyEncryptionUnsupported": { + "message": "La encriptación antigua ya no está soportada. Por favor, contacta con soporte para recuperar tu cuenta." }, "premiumMembership": { "message": "Membresía Premium" @@ -1411,7 +1417,7 @@ "message": "Comprar Premium" }, "premiumPurchaseAlertV2": { - "message": "You can purchase Premium from your account settings on the Bitwarden web app." + "message": "Puedes comprar el Premium desde los ajustes de tu cuenta en la aplicación web de Bitwarden." }, "premiumCurrentMember": { "message": "¡Eres un miembro Premium!" @@ -1474,14 +1480,14 @@ } }, "dontAskAgainOnThisDeviceFor30Days": { - "message": "Don't ask again on this device for 30 days" + "message": "No volver a preguntar en este dispositivo durante 30 días" }, "selectAnotherMethod": { - "message": "Select another method", + "message": "Selecciona otro método", "description": "Select another two-step login method" }, "useYourRecoveryCode": { - "message": "Use your recovery code" + "message": "Usa tu código de recuperación" }, "insertU2f": { "message": "Inserta tu llave de seguridad en el puerto USB de tu equipo. Si tiene un botón, púlsalo." @@ -1493,10 +1499,10 @@ "message": "Autenticar WebAuthn" }, "readSecurityKey": { - "message": "Read security key" + "message": "Leer clave de seguridad" }, "awaitingSecurityKeyInteraction": { - "message": "Awaiting security key interaction..." + "message": "Esperando interacción de la clave de seguridad..." }, "loginUnavailable": { "message": "Entrada no disponible" @@ -1511,7 +1517,7 @@ "message": "Opciones de la autenticación en dos pasos" }, "selectTwoStepLoginMethod": { - "message": "Select two-step login method" + "message": "Selecciona un método de inicio de sesión en dos pasos" }, "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." @@ -1600,13 +1606,13 @@ "message": "Sugerencias de autocompletar" }, "autofillSpotlightTitle": { - "message": "Easily find autofill suggestions" + "message": "Encuentra fácilmente sugerencias de autocompletado" }, "autofillSpotlightDesc": { - "message": "Turn off your browser's autofill settings, so they don't conflict with Bitwarden." + "message": "Desactiva los ajustes de autocompletado de tu navegador para que no entren en conflicto con Bitwarden." }, "turnOffBrowserAutofill": { - "message": "Turn off $BROWSER$ autofill", + "message": "Desactivar autocompletado de $BROWSER$", "placeholders": { "browser": { "content": "$1", @@ -1615,22 +1621,22 @@ } }, "turnOffAutofill": { - "message": "Turn off autofill" + "message": "Desactivar autocompletado" }, "showInlineMenuLabel": { - "message": "Show autofill suggestions on form fields" + "message": "Mostrar sugerencias de autocompletado en campos de formulario" }, "showInlineMenuIdentitiesLabel": { - "message": "Display identities as suggestions" + "message": "Mostrar identidades como sugerencias" }, "showInlineMenuCardsLabel": { "message": "Mostrar tarjetas como sugerencias" }, "showInlineMenuOnIconSelectionLabel": { - "message": "Display suggestions when icon is selected" + "message": "Mostrar sugerencias cuando el icono esté seleccionado" }, "showInlineMenuOnFormFieldsDescAlt": { - "message": "Applies to all logged in accounts." + "message": "Se aplica a todas las cuentas a las que se haya iniciado sesión." }, "turnOffBrowserBuiltInPasswordManagerSettings": { "message": "Desactive la configuración del gestor de contraseñas del navegador para evitar conflictos." @@ -1693,13 +1699,13 @@ "message": "Abrir caja fuerte en la barra lateral" }, "commandAutofillLoginDesc": { - "message": "Autofill the last used login for the current website" + "message": "Autocompletar el último inicio de sesión usado para el sitio web actual" }, "commandAutofillCardDesc": { - "message": "Autofill the last used card for the current website" + "message": "Autocompletar la última tarjeta usada para el sitio web actual" }, "commandAutofillIdentityDesc": { - "message": "Autofill the last used identity for the current website" + "message": "Autocompletar la última identidad usada para el sitio web actual" }, "commandGeneratePasswordDesc": { "message": "Generar y copiar una nueva contraseña aleatoria al portapapeles." @@ -1922,6 +1928,9 @@ "typeSshKey": { "message": "Llave SSH" }, + "typeNote": { + "message": "Nota" + }, "newItemHeader": { "message": "Nuevo $TYPE$", "placeholders": { @@ -1959,7 +1968,7 @@ "message": "Borrar historial del generador" }, "cleargGeneratorHistoryDescription": { - "message": "If you continue, all entries will be permanently deleted from generator's history. Are you sure you want to continue?" + "message": "Si continúas, todas las entradas se eliminarán permanentemente del historial del generador. ¿Estás seguro de que quieres continuar?" }, "back": { "message": "Atrás" @@ -2024,7 +2033,7 @@ "description": "Domain name. Ex. website.com" }, "baseDomainOptionRecommended": { - "message": "Base domain (recommended)", + "message": "Dominio base (recomendado)", "description": "Domain name. Ex. website.com" }, "domainName": { @@ -2153,8 +2162,8 @@ "setYourPinCode": { "message": "Establece tu código PIN para desbloquear Bitwarden. Tus ajustes de PIN se reiniciarán si alguna vez cierras tu sesión completamente de la aplicación." }, - "setYourPinCode1": { - "message": "Su PIN se utilizará para desbloquear Bitwarden en lugar de su contraseña maestra. Su PIN se restablecerá si alguna vez cierra completamente la sesión de Bitwarden." + "setPinCode": { + "message": "Puedes usar este PIN para desbloquear Bitwarden. Tu PIN se reiniciará si alguna vez cierras la sesión de la aplicación por completo." }, "pinRequired": { "message": "Código PIN requerido." @@ -2204,6 +2213,9 @@ "useThisPassword": { "message": "Usar esta contraseña" }, + "useThisPassphrase": { + "message": "Usar esta frase de contraseña" + }, "useThisUsername": { "message": "Usar este nombre de usuario" }, @@ -2374,7 +2386,7 @@ "message": "Política de privacidad" }, "yourNewPasswordCannotBeTheSameAsYourCurrentPassword": { - "message": "Your new password cannot be the same as your current password." + "message": "Tu nueva contraseña no puede ser igual a tu contraseña actual." }, "hintEqualsPassword": { "message": "Tu contraseña no puede ser idéntica a la pista de contraseña." @@ -2481,6 +2493,12 @@ "personalOwnershipPolicyInEffectImports": { "message": "Una política organizacional ha bloqueado la importación de elementos a su caja fuerte personal." }, + "restrictCardTypeImport": { + "message": "Cannot import card item types" + }, + "restrictCardTypeImportDesc": { + "message": "Una política establecida en 1 o más organizaciones te impide importar tarjetas a tus cajas fuertes." + }, "domainsTitle": { "message": "Dominios", "description": "A category title describing the concept of web domains" @@ -2512,6 +2530,10 @@ "change": { "message": "Cambiar" }, + "changePassword": { + "message": "Cambiar contraseña", + "description": "Change password button for browser at risk notification on login." + }, "changeButtonTitle": { "message": "Cambiar contraseña - $ITEMNAME$", "placeholders": { @@ -2521,6 +2543,9 @@ } } }, + "atRiskPassword": { + "message": "Contraseña en riesgo" + }, "atRiskPasswords": { "message": "Contraseñas de riesgo" }, @@ -2547,7 +2572,7 @@ } }, "atRiskPasswordsDescMultiOrgPlural": { - "message": "Your organizations are requesting you change the $COUNT$ passwords because they are at-risk.", + "message": "Tus organizaciones te están solicitando que cambies las $COUNT$ contraseñas porque están en riesgo.", "placeholders": { "count": { "content": "$1", @@ -2555,11 +2580,31 @@ } } }, + "atRiskChangePrompt": { + "message": "La contraseña para este sitio está en riesgo. $ORGANIZATION$ ha solicitado que la cambies.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + }, + "description": "Notification body when a login triggers an at-risk password change request and the change password domain is known." + }, + "atRiskNavigatePrompt": { + "message": "$ORGANIZATION$ quiere que cambies esta contraseña porque está en riesgo. Navega a los ajustes de tu cuenta para cambiar la contraseña.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + }, + "description": "Notification body when a login triggers an at-risk password change request and no change password domain is provided." + }, "reviewAndChangeAtRiskPassword": { - "message": "Review and change one at-risk password" + "message": "Revisa y cambia una contraseña en riesgo" }, "reviewAndChangeAtRiskPasswordsPlural": { - "message": "Review and change $COUNT$ at-risk passwords", + "message": "Revisa y cambia $COUNT$ contraseñas en riesgo", "placeholders": { "count": { "content": "$1", @@ -2574,7 +2619,7 @@ "message": "Update your settings so you can quickly autofill your passwords and generate new ones" }, "reviewAtRiskLogins": { - "message": "Review at-risk logins" + "message": "Revisar inicios de sesión en riesgo" }, "reviewAtRiskPasswords": { "message": "Revisar contraseñas de riesgo" @@ -2587,7 +2632,7 @@ "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.", + "message": "Genera rápidamente una contraseña segura y única con el menú de autocompletado de Bitwarden en el sitio en riesgo.", "description": "Description of the generate password slide on the at-risk password page carousel" }, "generatePasswordSlideImgAltPeriod": { @@ -2644,7 +2689,7 @@ "description": "Displayed under the limit views field on Send" }, "limitSendViewsCount": { - "message": "$ACCESSCOUNT$ views left", + "message": "$ACCESSCOUNT$ visualizaciones restantes", "description": "Displayed under the limit views field on Send", "placeholders": { "accessCount": { @@ -2674,8 +2719,12 @@ "message": "Todos los Sends", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "maxAccessCountReached": { + "message": "Número máximo de accesos alcanzado", + "description": "This text will be displayed after a Send has been accessed the maximum amount of times." + }, "hideTextByDefault": { - "message": "Hide text by default" + "message": "Ocultar texto por defecto" }, "expired": { "message": "Caducado" @@ -2722,7 +2771,7 @@ "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "deleteSendPermanentConfirmation": { - "message": "Are you sure you want to permanently delete this Send?", + "message": "¿Estás seguro de que quieres eliminar permanentemente este Send?", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "editSend": { @@ -2733,7 +2782,7 @@ "message": "Fecha de eliminación" }, "deletionDateDescV2": { - "message": "The Send will be permanently deleted on this date.", + "message": "El Send se borrará permanentemente en esta fecha.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "expirationDate": { @@ -2755,7 +2804,7 @@ "message": "Personalizado" }, "sendPasswordDescV3": { - "message": "Add an optional password for recipients to access this Send.", + "message": "Añade una contraseña opcional para que los destinatarios accedan a este Send.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "createSend": { @@ -2778,15 +2827,15 @@ "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "createdSendSuccessfully": { - "message": "Send created successfully!", + "message": "¡Send creado con éxito!", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "sendExpiresInHoursSingle": { - "message": "The Send will be available to anyone with the link for the next 1 hour.", + "message": "El Send estará disponible a cualquiera que tenga el enlace durante la próxima hora.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "sendExpiresInHours": { - "message": "The Send will be available to anyone with the link for the next $HOURS$ hours.", + "message": "El Send estará disponible a cualquier que tenga el enlace durante las próximas $HOURS$ horas.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.", "placeholders": { "hours": { @@ -2796,11 +2845,11 @@ } }, "sendExpiresInDaysSingle": { - "message": "The Send will be available to anyone with the link for the next 1 day.", + "message": "El Send estará disponible a cualquier que tenga el enlace durante el próximo día.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "sendExpiresInDays": { - "message": "The Send will be available to anyone with the link for the next $DAYS$ days.", + "message": "El Send estará disponible a cualquier que tenga el enlace durante los próximos $DAYS$ días.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.", "placeholders": { "days": { @@ -2810,7 +2859,7 @@ } }, "sendLinkCopied": { - "message": "Send link copied", + "message": "Enlace del Send copiado", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "editedSend": { @@ -2876,6 +2925,9 @@ "emailVerificationRequiredDesc": { "message": "Debes verificar tu correo electrónico para usar esta función. Puedes verificar tu correo electrónico en la caja fuerte web." }, + "masterPasswordSuccessfullySet": { + "message": "Master password successfully set" + }, "updatedMasterPassword": { "message": "Contraseña maestra actualizada" }, @@ -2948,7 +3000,7 @@ } }, "vaultTimeoutPolicyInEffect1": { - "message": "$HOURS$ hour(s) and $MINUTES$ minute(s) maximum.", + "message": "$HOURS$ hora(s) y $MINUTES$ minuto(s) como máximo.", "placeholders": { "hours": { "content": "$1", @@ -3125,7 +3177,7 @@ } }, "passphraseNumWordsRecommendationHint": { - "message": " Use $RECOMMENDED$ words or more to generate a strong passphrase.", + "message": " Usa $RECOMMENDED$ palabras o más para generar una frase de contraseña segura.", "description": "Appended to `spinboxBoundariesHint` to recommend a number of words to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", "placeholders": { "recommended": { @@ -3170,7 +3222,7 @@ "description": "Labels the domain name email forwarder service option" }, "forwarderDomainNameHint": { - "message": "Choose a domain that is supported by the selected service", + "message": "Elige un dominio que esté soportado por el servicio seleccionado", "description": "Guidance provided for email forwarding services that support multiple email domains." }, "forwarderError": { @@ -3226,7 +3278,7 @@ } }, "forwaderInvalidOperation": { - "message": "$SERVICENAME$ refused your request. Please contact your service provider for assistance.", + "message": "$SERVICENAME$ ha rechazado tu solicitud. Por favor, contacta con tu proveedor del servicio para obtener asistencia.", "description": "Displayed when the user is forbidden from using the API by the forwarding service.", "placeholders": { "servicename": { @@ -3236,7 +3288,7 @@ } }, "forwaderInvalidOperationWithMessage": { - "message": "$SERVICENAME$ refused your request: $ERRORMESSAGE$", + "message": "$SERVICENAME$ ha rechazado tu solicitud $ERRORMESSAGE$", "description": "Displayed when the user is forbidden from using the API by the forwarding service with an error message.", "placeholders": { "servicename": { @@ -3408,6 +3460,9 @@ "logInRequestSent": { "message": "Solicitud enviada" }, + "masterPasswordChanged": { + "message": "Master password saved" + }, "exposedMasterPassword": { "message": "Contraseña maestra comprometida" }, @@ -3505,10 +3560,10 @@ "message": "Se requiere aprobación del dispositivo. Seleccione una opción de aprobación a continuación:" }, "deviceApprovalRequiredV2": { - "message": "Device approval required" + "message": "Aprobación del dispositivo requerida" }, "selectAnApprovalOptionBelow": { - "message": "Select an approval option below" + "message": "Selecciona una opción de aprobación abajo" }, "rememberThisDevice": { "message": "Recordar este dispositivo" @@ -3522,6 +3577,12 @@ "requestAdminApproval": { "message": "Solicitar aprobación del administrador" }, + "unableToCompleteLogin": { + "message": "Unable to complete login" + }, + "loginOnTrustedDeviceOrAskAdminToAssignPassword": { + "message": "You need to log in on a trusted device or ask your administrator to assign you a password." + }, "ssoIdentifierRequired": { "message": "Se requiere un identificador único de inicio de sesión de la organización." }, @@ -3578,22 +3639,22 @@ "message": "Falta el correo electrónico del usuario" }, "activeUserEmailNotFoundLoggingYouOut": { - "message": "Active user email not found. Logging you out." + "message": "Correo electrónico del usuario activo no encontrado. Cerrando sesión." }, "deviceTrusted": { "message": "Dispositivo de confianza" }, "trustOrganization": { - "message": "Trust organization" + "message": "Confiar en la organización" }, "trust": { - "message": "Trust" + "message": "Confiar" }, "doNotTrust": { - "message": "Do not trust" + "message": "No confiar" }, "organizationNotTrusted": { - "message": "Organization is not trusted" + "message": "La organización no es de confianza" }, "emergencyAccessTrustWarning": { "message": "For the security of your account, only confirm if you have granted emergency access to this user and their fingerprint matches what is displayed in their account" @@ -3605,22 +3666,14 @@ "message": "This organization has an Enterprise policy that will enroll you in account recovery. Enrollment will allow organization administrators to change your password. Only proceed if you recognize this organization and the fingerprint phrase displayed below matches the organization's fingerprint." }, "trustUser": { - "message": "Trust user" - }, - "sendsNoItemsTitle": { - "message": "No active Sends", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendsNoItemsMessage": { - "message": "Use Send to securely share encrypted information with anyone.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + "message": "Confiar con el usuario" }, "sendsTitleNoItems": { - "message": "Send sensitive information safely", + "message": "Envía información sensible de forma segura", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "sendsBodyNoItems": { - "message": "Share files and data securely with anyone, on any platform. Your information will remain end-to-end encrypted while limiting exposure.", + "message": "Comparte archivos y datos de forma segura con cualquiera, en cualquier plataforma. Tu información permanecerá encriptada de extremo a extremo, limitando su exposición.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "inputRequired": { @@ -3777,7 +3830,7 @@ "description": "Text to display in overlay when the account is locked." }, "unlockYourAccountToViewAutofillSuggestions": { - "message": "Unlock your account to view autofill suggestions", + "message": "Desbloquea tu cuenta para ver sugerencias de autocompletado", "description": "Text to display in overlay when the account is locked." }, "unlockAccount": { @@ -3785,7 +3838,7 @@ "description": "Button text to display in overlay when the account is locked." }, "unlockAccountAria": { - "message": "Unlock your account, opens in a new window", + "message": "Desbloquea tu cuenta, se abre en una nueva ventana", "description": "Screen reader text (aria-label) for unlock account button in overlay" }, "totpCodeAria": { @@ -3793,7 +3846,7 @@ "description": "Aria label for the totp code displayed in the inline menu for autofill" }, "totpSecondsSpanAria": { - "message": "Time remaining before current TOTP expires", + "message": "Tiempo restante antes de que el TOTP actual expire", "description": "Aria label for the totp seconds displayed in the inline menu for autofill" }, "fillCredentialsFor": { @@ -3817,11 +3870,11 @@ "description": "Screen reader text (aria-label) for new item button in overlay" }, "newLogin": { - "message": "New login", + "message": "Nuevo inicio de sesión", "description": "Button text to display within inline menu when there are no matching items on a login field" }, "addNewLoginItemAria": { - "message": "Add new vault login item, opens in a new window", + "message": "Añadir nuevo elemento de inicio de sesión a la caja fuerte, se abre en una nueva ventana", "description": "Screen reader text (aria-label) for new login button within inline menu" }, "newCard": { @@ -4016,10 +4069,10 @@ "message": "Clave de acceso" }, "accessing": { - "message": "Accessing" + "message": "Accediendo" }, "loggedInExclamation": { - "message": "Logged in!" + "message": "¡Sesión iniciada!" }, "passkeyNotCopied": { "message": "La clave de acceso no se copiará" @@ -4031,7 +4084,7 @@ "message": "Verificación requerida por el sitio inicial. Esta característica aún no está implementada para cuentas sin contraseña maestra." }, "logInWithPasskeyQuestion": { - "message": "Log in with passkey?" + "message": "¿Iniciar sesión con clave de acceso?" }, "passkeyAlreadyExists": { "message": "Ya existe una clave de acceso para esta aplicación." @@ -4043,10 +4096,10 @@ "message": "No tiene un inicio de sesión que coincida para este sitio." }, "noMatchingLoginsForSite": { - "message": "No matching logins for this site" + "message": "No hay inicios de sesión coincidentes para este sitio" }, "searchSavePasskeyNewLogin": { - "message": "Search or save passkey as new login" + "message": "Busca o guarda la clave de acceso como nuevo inicio de sesión" }, "confirm": { "message": "Confirmar" @@ -4058,10 +4111,10 @@ "message": "Guardar clave de acceso como nuevo inicio de sesión" }, "chooseCipherForPasskeySave": { - "message": "Choose a login to save this passkey to" + "message": "Elige un inicio de sesión al que guardar esta clave de acceso" }, "chooseCipherForPasskeyAuth": { - "message": "Choose a passkey to log in with" + "message": "Elige una clave de acceso para iniciar sesión en" }, "passkeyItem": { "message": "Elemento de clave de acceso" @@ -4209,12 +4262,32 @@ "message": "Formatos comunes", "description": "Label indicating the most common import formats" }, + "uriMatchDefaultStrategyHint": { + "message": "URI match detection is how Bitwarden identifies autofill suggestions.", + "description": "Explains to the user that URI match detection determines how Bitwarden suggests autofill options, and clarifies that this default strategy applies when no specific match detection is set for a login item." + }, + "regExAdvancedOptionWarning": { + "message": "\"Regular expression\" is an advanced option with increased risk of exposing credentials.", + "description": "Content for dialog which warns a user when selecting 'regular expression' matching strategy as a cipher match strategy" + }, + "startsWithAdvancedOptionWarning": { + "message": "\"Starts with\" is an advanced option with increased risk of exposing credentials.", + "description": "Content for dialog which warns a user when selecting 'starts with' matching strategy as a cipher match strategy" + }, + "uriMatchWarningDialogLink": { + "message": "More about match detection", + "description": "Link to match detection docs on warning dialog for advance match strategy" + }, + "uriAdvancedOption": { + "message": "Advanced options", + "description": "Advanced option placeholder for uri option component" + }, "confirmContinueToBrowserSettingsTitle": { - "message": "Continue to browser settings?", + "message": "¿Continuar a los ajustes del navegador?", "description": "Title for dialog which asks if the user wants to proceed to a relevant browser settings page" }, "confirmContinueToHelpCenter": { - "message": "Continue to Help Center?", + "message": "¿Continuar al Centro de Ayuda?", "description": "Title for dialog which asks if the user wants to proceed to a relevant Help Center page" }, "confirmContinueToHelpCenterPasswordManagementContent": { @@ -4287,10 +4360,10 @@ "message": "Clave de acceso eliminada" }, "autofillSuggestions": { - "message": "Autofill suggestions" + "message": "Sugerencias de autocompletado" }, "itemSuggestions": { - "message": "Suggested items" + "message": "Elementos sugeridos" }, "autofillSuggestionsTip": { "message": "Guarda un elemento de inicio de sesión para este sitio para autocompletar" @@ -4355,7 +4428,7 @@ } }, "viewItemTitleWithField": { - "message": "View item - $ITEMNAME$ - $FIELD$", + "message": "Ver elemento - $ITEMNAME$ - $FIELD$", "description": "Title for a link that opens a view for an item.", "placeholders": { "itemname": { @@ -4379,7 +4452,7 @@ } }, "autofillTitleWithField": { - "message": "Autofill - $ITEMNAME$ - $FIELD$", + "message": "Autocompletar - $ITEMNAME$ - $FIELD$", "description": "Title for a button that autofills a login item.", "placeholders": { "itemname": { @@ -4393,7 +4466,7 @@ } }, "copyFieldValue": { - "message": "Copy $FIELD$, $VALUE$", + "message": "Copiar $FIELD$, $VALUE$", "description": "Title for a button that copies a field value to the clipboard.", "placeholders": { "field": { @@ -4410,7 +4483,7 @@ "message": "No hay valores para copiar" }, "assignToCollections": { - "message": "Assign to collections" + "message": "Asignar a colecciones" }, "copyEmail": { "message": "Copiar correo electrónico" @@ -4540,25 +4613,25 @@ } }, "downloadBitwarden": { - "message": "Download Bitwarden" + "message": "Descargar Bitwarden" }, "downloadBitwardenOnAllDevices": { - "message": "Download Bitwarden on all devices" + "message": "Descargar Bitwarden en todos los dispositivos" }, "getTheMobileApp": { - "message": "Get the mobile app" + "message": "Obtén la aplicación móvil" }, "getTheMobileAppDesc": { "message": "Access your passwords on the go with the Bitwarden mobile app." }, "getTheDesktopApp": { - "message": "Get the desktop app" + "message": "Obtén la aplicación de escritorio" }, "getTheDesktopAppDesc": { "message": "Access your vault without a browser, then set up unlock with biometrics to expedite unlocking in both the desktop app and browser extension." }, "downloadFromBitwardenNow": { - "message": "Download from bitwarden.com now" + "message": "Descarga desde bitwarden.com ahora" }, "getItOnGooglePlay": { "message": "Consíguela en Google Play" @@ -4582,10 +4655,10 @@ "message": "Filter vault" }, "filterApplied": { - "message": "One filter applied" + "message": "Un filtro aplicado" }, "filterAppliedPlural": { - "message": "$COUNT$ filters applied", + "message": "$COUNT$ filtros aplicados", "placeholders": { "count": { "content": "$1", @@ -4619,10 +4692,10 @@ "message": "Credenciales de inicio de sesión" }, "authenticatorKey": { - "message": "Authenticator key" + "message": "Clave de autenticador" }, "autofillOptions": { - "message": "Autofill options" + "message": "Opciones de autocompletado" }, "websiteUri": { "message": "Página web (URI)" @@ -4638,7 +4711,7 @@ } }, "websiteAdded": { - "message": "Website added" + "message": "Sitio web añadido" }, "addWebsite": { "message": "Añadir página web" @@ -4681,7 +4754,7 @@ "message": "Tarjeta caducada" }, "cardExpiredMessage": { - "message": "If you've renewed it, update the card's information" + "message": "Si la has renovado, actualiza la información de la tarjeta" }, "cardDetails": { "message": "Datos de la tarjeta" @@ -4711,7 +4784,7 @@ "message": "Datos" }, "passkeys": { - "message": "Passkeys", + "message": "Claves de acceso", "description": "A section header for a list of passkeys." }, "passwords": { @@ -4726,13 +4799,13 @@ "message": "Asignar" }, "bulkCollectionAssignmentDialogDescriptionSingular": { - "message": "Only organization members with access to these collections will be able to see the item." + "message": "Solo los miembros de la organización con acceso a estas colecciones podrán ver el elemento." }, "bulkCollectionAssignmentDialogDescriptionPlural": { - "message": "Only organization members with access to these collections will be able to see the items." + "message": "Solo los miembros de la organización con acceso a estas colecciones podrán ver los elementos." }, "bulkCollectionAssignmentWarning": { - "message": "You have selected $TOTAL_COUNT$ items. You cannot update $READONLY_COUNT$ of the items because you do not have edit permissions.", + "message": "Has seleccionado $TOTAL_COUNT$ elementos. No puedes actualizar $READONLY_COUNT$ de los elementos porque no tienes permisos de edición.", "placeholders": { "total_count": { "content": "$1", @@ -4756,10 +4829,10 @@ "message": "Etiqueta de campo" }, "textHelpText": { - "message": "Use text fields for data like security questions" + "message": "Usa campos de texto para datos como preguntas de seguridad" }, "hiddenHelpText": { - "message": "Use hidden fields for sensitive data like a password" + "message": "Usa campos ocultos para datos sensibles como una contraseña" }, "checkBoxHelpText": { "message": "Use checkboxes if you'd like to autofill a form's checkbox, like a remember email" @@ -4830,10 +4903,10 @@ } }, "selectCollectionsToAssign": { - "message": "Select collections to assign" + "message": "Selecciona colecciones para asignar" }, "personalItemTransferWarningSingular": { - "message": "1 item will be permanently transferred to the selected organization. You will no longer own this item." + "message": "1 elemento será transferido permanentemente a la organización seleccionada. Ya no serás el propietario de este elemento." }, "personalItemsTransferWarningPlural": { "message": "$PERSONAL_ITEMS_COUNT$ items will be permanently transferred to the selected organization. You will no longer own these items.", @@ -4867,13 +4940,13 @@ } }, "successfullyAssignedCollections": { - "message": "Successfully assigned collections" + "message": "Colecciones asignadas correctamente" }, "nothingSelected": { - "message": "You have not selected anything." + "message": "No has seleccionado nada." }, "itemsMovedToOrg": { - "message": "Items moved to $ORGNAME$", + "message": "Elementos movidos a $ORGNAME$", "placeholders": { "orgname": { "content": "$1", @@ -4882,7 +4955,7 @@ } }, "itemMovedToOrg": { - "message": "Item moved to $ORGNAME$", + "message": "Elemento movido a $ORGNAME$", "placeholders": { "orgname": { "content": "$1", @@ -4926,13 +4999,13 @@ "message": "Acciones de cuenta" }, "showNumberOfAutofillSuggestions": { - "message": "Show number of login autofill suggestions on extension icon" + "message": "Mostrar número de sugerencias de autocompletado de inicios de sesión en el icono de la extensión" }, "showQuickCopyActions": { "message": "Show quick copy actions on Vault" }, "systemDefault": { - "message": "System default" + "message": "Predeterminado del sistema" }, "enterprisePolicyRequirementsApplied": { "message": "Enterprise policy requirements have been applied to this setting" @@ -4974,10 +5047,10 @@ "message": "File saved to device. Manage from your device downloads." }, "showCharacterCount": { - "message": "Show character count" + "message": "Mostrar número de caracteres" }, "hideCharacterCount": { - "message": "Hide character count" + "message": "Ocultar número de caracteres" }, "itemsInTrash": { "message": "Elementos en la papelera" @@ -5001,10 +5074,10 @@ "message": "No tiene permiso de editar este elemento" }, "biometricsStatusHelptextUnlockNeeded": { - "message": "Biometric unlock is unavailable because PIN or password unlock is required first." + "message": "El desbloqueo biométrico no está disponible porque primero es necesario desbloquear con PIN o contraseña." }, "biometricsStatusHelptextHardwareUnavailable": { - "message": "Biometric unlock is currently unavailable." + "message": "El desbloqueo biométrico no está disponible actualmente." }, "biometricsStatusHelptextAutoSetupNeeded": { "message": "Biometric unlock is unavailable due to misconfigured system files." @@ -5013,10 +5086,10 @@ "message": "Biometric unlock is unavailable due to misconfigured system files." }, "biometricsStatusHelptextDesktopDisconnected": { - "message": "Biometric unlock is unavailable because the Bitwarden desktop app is closed." + "message": "El desbloqueo biométrico no está disponible porque la aplicación de escritorio de Bitwarden está cerrada." }, "biometricsStatusHelptextNotEnabledInDesktop": { - "message": "Biometric unlock is unavailable because it is not enabled for $EMAIL$ in the Bitwarden desktop app.", + "message": "El desbloqueo biométrico no está disponible porque no está habilitado para $EMAIL$ en la aplicación de escritorio Bitwarden.", "placeholders": { "email": { "content": "$1", @@ -5025,16 +5098,19 @@ } }, "biometricsStatusHelptextUnavailableReasonUnknown": { - "message": "Biometric unlock is currently unavailable for an unknown reason." + "message": "El desbloqueo biométrico no está disponible actualmente por una razón desconocida." }, "unlockVault": { - "message": "Unlock your vault in seconds" + "message": "Desbloquea tu caja fuete en segundos" }, "unlockVaultDesc": { "message": "You can customize your unlock and timeout settings to more quickly access your vault." }, "unlockPinSet": { - "message": "Unlock PIN set" + "message": "Desbloqueo con PIN establecido" + }, + "unlockWithBiometricSet": { + "message": "Desbloqueo con biometría establecido" }, "authenticating": { "message": "Autenticando" @@ -5223,16 +5299,16 @@ "message": "Introduzca la contraseña" }, "invalidSshKey": { - "message": "The SSH key is invalid" + "message": "La clave SSH es inválida" }, "sshKeyTypeUnsupported": { - "message": "The SSH key type is not supported" + "message": "El tipo de clave SSH no está soportado" }, "importSshKeyFromClipboard": { - "message": "Import key from clipboard" + "message": "Importar clave desde el portapapeles" }, "sshKeyImported": { - "message": "SSH key imported successfully" + "message": "Clave SSH importada con éxito" }, "cannotRemoveViewOnlyCollections": { "message": "No puedes eliminar colecciones con permisos de solo visualización: $COLLECTIONS$", @@ -5253,16 +5329,16 @@ "message": "Cambiar contraseña de riesgo" }, "settingsVaultOptions": { - "message": "Vault options" + "message": "Opciones de la caja fuerte" }, "emptyVaultDescription": { "message": "The vault protects more than just your passwords. Store secure logins, IDs, cards and notes securely here." }, "introCarouselLabel": { - "message": "Welcome to Bitwarden" + "message": "Bienvenido a Bitwarden" }, "securityPrioritized": { - "message": "Security, prioritized" + "message": "Seguridad, priorizada" }, "securityPrioritizedBody": { "message": "Save logins, cards, and identities to your secure vault. Bitwarden uses zero-knowledge, end-to-end encryption to protect what’s important to you." @@ -5271,7 +5347,7 @@ "message": "Quick and easy login" }, "quickLoginBody": { - "message": "Set up biometric unlock and autofill to log into your accounts without typing a single letter." + "message": "Configura el desbloqueo biométrico y el autocompletado para iniciar sesión en tus cuentas sin tener que escribir ni una sola letra." }, "secureUser": { "message": "Level up your logins" @@ -5280,25 +5356,25 @@ "message": "Utilice el generador para crear y guardar contraseñas fuertes y únicas para todas sus cuentas." }, "secureDevices": { - "message": "Your data, when and where you need it" + "message": "Tus datos, dónde y cuándo los necesites" }, "secureDevicesBody": { "message": "Guarda contraseñas ilimitadas a través de dispositivos ilimitados con aplicaciones móviles, de navegador y de escritorio de Bitwarden." }, "nudgeBadgeAria": { - "message": "1 notification" + "message": "1 notificación" }, "emptyVaultNudgeTitle": { - "message": "Import existing passwords" + "message": "Importar contraseñas existentes" }, "emptyVaultNudgeBody": { - "message": "Use the importer to quickly transfer logins to Bitwarden without manually adding them." + "message": "Usa el importador para transferir rápidamente inicios de sesión a Bitwarden sin añadirlos manualmente." }, "emptyVaultNudgeButton": { - "message": "Import now" + "message": "Importar ahora" }, "hasItemsVaultNudgeTitle": { - "message": "Welcome to your vault!" + "message": "¡Bienvenido a tu caja fuerte!" }, "hasItemsVaultNudgeBodyOne": { "message": "Autofill items for the current page" @@ -5310,7 +5386,7 @@ "message": "Search your vault for something else" }, "newLoginNudgeTitle": { - "message": "Save time with autofill" + "message": "Ahorra tiempo con el autocompletado" }, "newLoginNudgeBodyOne": { "message": "Include a", @@ -5318,7 +5394,7 @@ "example": "Include a Website so this login appears as an autofill suggestion." }, "newLoginNudgeBodyBold": { - "message": "Website", + "message": "Sitio web", "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", "example": "Include a Website so this login appears as an autofill suggestion." }, @@ -5334,16 +5410,16 @@ "message": "With cards, easily autofill payment forms securely and accurately." }, "newIdentityNudgeTitle": { - "message": "Simplify creating accounts" + "message": "Simplifica la creación de cuentas" }, "newIdentityNudgeBody": { "message": "With identities, quickly autofill long registration or contact forms." }, "newNoteNudgeTitle": { - "message": "Keep your sensitive data safe" + "message": "Mantén tus datos sensibles seguros" }, "newNoteNudgeBody": { - "message": "With notes, securely store sensitive data like banking or insurance details." + "message": "Con las notas, almacena de forma segura datos sensibles como datos bancarios o de seguros." }, "newSshNudgeTitle": { "message": "Developer-friendly SSH access" @@ -5354,20 +5430,20 @@ "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, "newSshNudgeBodyTwo": { - "message": "Learn more about SSH agent", + "message": "Más información sobre el agente SSH", "description": "Two part message", "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, "generatorNudgeTitle": { - "message": "Quickly create passwords" + "message": "Crea contraseñas rápidamente" }, "generatorNudgeBodyOne": { - "message": "Easily create strong and unique passwords by clicking on", + "message": "Crea fácilmente contraseñas seguras y únicas haciendo clic en", "description": "Two part message", "example": "Easily create strong and unique passwords by clicking on {icon} to help you keep your logins secure." }, "generatorNudgeBodyTwo": { - "message": "to help you keep your logins secure.", + "message": "para ayudarte a mantener tus inicios de sesión seguros.", "description": "Two part message", "example": "Easily create strong and unique passwords by clicking on {icon} to help you keep your logins secure." }, @@ -5376,6 +5452,10 @@ "description": "Aria label for the body content of the generator nudge" }, "noPermissionsViewPage": { - "message": "You do not have permissions to view this page. Try logging in with a different account." + "message": "No tienes permisos para ver esta página. Intenta iniciar sesión con otra cuenta." + }, + "wasmNotSupported": { + "message": "WebAssembly is not supported on your browser or is not enabled. WebAssembly is required to use the Bitwarden app.", + "description": "'WebAssembly' is a technical term and should not be translated." } } diff --git a/apps/browser/src/_locales/et/messages.json b/apps/browser/src/_locales/et/messages.json index 26b4bf69fb4..99e7b72a524 100644 --- a/apps/browser/src/_locales/et/messages.json +++ b/apps/browser/src/_locales/et/messages.json @@ -1173,6 +1173,12 @@ "message": "Oh no! We couldn't save this. Try entering the details manually.", "description": "Detailed error message shown when saving login details fails." }, + "changePasswordWarning": { + "message": "After changing your password, you will need to log in with your new password. Active sessions on other devices will be logged out within one hour." + }, + "accountRecoveryUpdateMasterPasswordSubtitle": { + "message": "Change your master password to complete account recovery." + }, "enableChangedPasswordNotification": { "message": "Paku olemasolevate andmete uuendamist" }, @@ -1365,8 +1371,8 @@ "featureUnavailable": { "message": "Funktsioon pole saadaval" }, - "encryptionKeyMigrationRequired": { - "message": "Encryption key migration required. Please login through the web vault to update your encryption key." + "legacyEncryptionUnsupported": { + "message": "Legacy encryption is no longer supported. Please contact support to recover your account." }, "premiumMembership": { "message": "Premium versioon" @@ -1922,6 +1928,9 @@ "typeSshKey": { "message": "SSH key" }, + "typeNote": { + "message": "Note" + }, "newItemHeader": { "message": "Uus $TYPE$", "placeholders": { @@ -2153,8 +2162,8 @@ "setYourPinCode": { "message": "Määra Bitwardeni lahtilukustamiseks PIN kood. Rakendusest täielikult välja logides nullitakse ka PIN koodi seaded." }, - "setYourPinCode1": { - "message": "Your PIN will be used to unlock Bitwarden instead of your master password. Your PIN will reset if you ever fully log out of Bitwarden." + "setPinCode": { + "message": "You can use this PIN to unlock Bitwarden. Your PIN will be reset if you ever fully log out of the application." }, "pinRequired": { "message": "Nõutakse PIN koodi." @@ -2204,6 +2213,9 @@ "useThisPassword": { "message": "Kasuta seda parooli" }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, "useThisUsername": { "message": "Kasuta seda kasutajanime" }, @@ -2481,6 +2493,12 @@ "personalOwnershipPolicyInEffectImports": { "message": "An organization policy has blocked importing items into your individual vault." }, + "restrictCardTypeImport": { + "message": "Cannot import card item types" + }, + "restrictCardTypeImportDesc": { + "message": "A policy set by 1 or more organizations prevents you from importing cards to your vaults." + }, "domainsTitle": { "message": "Domains", "description": "A category title describing the concept of web domains" @@ -2512,6 +2530,10 @@ "change": { "message": "Change" }, + "changePassword": { + "message": "Change password", + "description": "Change password button for browser at risk notification on login." + }, "changeButtonTitle": { "message": "Change password - $ITEMNAME$", "placeholders": { @@ -2521,6 +2543,9 @@ } } }, + "atRiskPassword": { + "message": "At-risk password" + }, "atRiskPasswords": { "message": "At-risk passwords" }, @@ -2555,6 +2580,26 @@ } } }, + "atRiskChangePrompt": { + "message": "Your password for this site is at-risk. $ORGANIZATION$ has requested that you change it.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + }, + "description": "Notification body when a login triggers an at-risk password change request and the change password domain is known." + }, + "atRiskNavigatePrompt": { + "message": "$ORGANIZATION$ wants you to change this password because it is at-risk. Navigate to your account settings to change the password.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + }, + "description": "Notification body when a login triggers an at-risk password change request and no change password domain is provided." + }, "reviewAndChangeAtRiskPassword": { "message": "Review and change one at-risk password" }, @@ -2674,6 +2719,10 @@ "message": "Kõik Sendid", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "maxAccessCountReached": { + "message": "Max access count reached", + "description": "This text will be displayed after a Send has been accessed the maximum amount of times." + }, "hideTextByDefault": { "message": "Hide text by default" }, @@ -2876,6 +2925,9 @@ "emailVerificationRequiredDesc": { "message": "Selle funktsiooni kasutamiseks pead kinnitama oma e-posti aadressi. Saad seda teha veebihoidlas." }, + "masterPasswordSuccessfullySet": { + "message": "Master password successfully set" + }, "updatedMasterPassword": { "message": "Uuendas ülemparooli" }, @@ -3408,6 +3460,9 @@ "logInRequestSent": { "message": "Request sent" }, + "masterPasswordChanged": { + "message": "Master password saved" + }, "exposedMasterPassword": { "message": "Ülemparool on haavatav" }, @@ -3522,6 +3577,12 @@ "requestAdminApproval": { "message": "Küsi admini kinnitust" }, + "unableToCompleteLogin": { + "message": "Unable to complete login" + }, + "loginOnTrustedDeviceOrAskAdminToAssignPassword": { + "message": "You need to log in on a trusted device or ask your administrator to assign you a password." + }, "ssoIdentifierRequired": { "message": "Nõutav on organisatsiooni SSO identifikaator." }, @@ -3607,14 +3668,6 @@ "trustUser": { "message": "Trust user" }, - "sendsNoItemsTitle": { - "message": "No active Sends", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendsNoItemsMessage": { - "message": "Use Send to securely share encrypted information with anyone.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "sendsTitleNoItems": { "message": "Send sensitive information safely", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -4209,6 +4262,26 @@ "message": "Common formats", "description": "Label indicating the most common import formats" }, + "uriMatchDefaultStrategyHint": { + "message": "URI match detection is how Bitwarden identifies autofill suggestions.", + "description": "Explains to the user that URI match detection determines how Bitwarden suggests autofill options, and clarifies that this default strategy applies when no specific match detection is set for a login item." + }, + "regExAdvancedOptionWarning": { + "message": "\"Regular expression\" is an advanced option with increased risk of exposing credentials.", + "description": "Content for dialog which warns a user when selecting 'regular expression' matching strategy as a cipher match strategy" + }, + "startsWithAdvancedOptionWarning": { + "message": "\"Starts with\" is an advanced option with increased risk of exposing credentials.", + "description": "Content for dialog which warns a user when selecting 'starts with' matching strategy as a cipher match strategy" + }, + "uriMatchWarningDialogLink": { + "message": "More about match detection", + "description": "Link to match detection docs on warning dialog for advance match strategy" + }, + "uriAdvancedOption": { + "message": "Advanced options", + "description": "Advanced option placeholder for uri option component" + }, "confirmContinueToBrowserSettingsTitle": { "message": "Continue to browser settings?", "description": "Title for dialog which asks if the user wants to proceed to a relevant browser settings page" @@ -5036,6 +5109,9 @@ "unlockPinSet": { "message": "Unlock PIN set" }, + "unlockWithBiometricSet": { + "message": "Unlock with biometrics set" + }, "authenticating": { "message": "Authenticating" }, @@ -5377,5 +5453,9 @@ }, "noPermissionsViewPage": { "message": "You do not have permissions to view this page. Try logging in with a different account." + }, + "wasmNotSupported": { + "message": "WebAssembly is not supported on your browser or is not enabled. WebAssembly is required to use the Bitwarden app.", + "description": "'WebAssembly' is a technical term and should not be translated." } } diff --git a/apps/browser/src/_locales/eu/messages.json b/apps/browser/src/_locales/eu/messages.json index b3f525d7be5..393f922463e 100644 --- a/apps/browser/src/_locales/eu/messages.json +++ b/apps/browser/src/_locales/eu/messages.json @@ -6,7 +6,7 @@ "message": "Bitwarden logo" }, "extName": { - "message": "Bitwarden Password Manager", + "message": "Bitwarden pasahitz kudeatzailea", "description": "Extension name, MUST be less than 40 characters (Safari restriction)" }, "extDesc": { @@ -17,7 +17,7 @@ "message": "Saioa hasi edo sortu kontu berri bat zure kutxa gotorrera sartzeko." }, "inviteAccepted": { - "message": "Invitation accepted" + "message": "Gonbidapena onartua" }, "createAccount": { "message": "Sortu kontua" @@ -32,13 +32,13 @@ "message": "Use single sign-on" }, "welcomeBack": { - "message": "Welcome back" + "message": "Ongi etorri berriro ere" }, "setAStrongPassword": { - "message": "Set a strong password" + "message": "Pasahitz sendo bat ezarri" }, "finishCreatingYourAccountBySettingAPassword": { - "message": "Finish creating your account by setting a password" + "message": "Amaitu zure kontua sortzen pasahitza ezarriz" }, "enterpriseSingleSignOn": { "message": "Enpresentzako saio hasiera bakarra" @@ -150,7 +150,7 @@ "message": "Kopiatu segurtasun-kodea" }, "copyName": { - "message": "Copy name" + "message": "Izena kopiatu" }, "copyCompany": { "message": "Copy company" @@ -186,14 +186,14 @@ "message": "Copy website" }, "copyNotes": { - "message": "Copy notes" + "message": "Kopiatu oharrak" }, "copy": { - "message": "Copy", + "message": "Kopiatu", "description": "Copy to clipboard" }, "fill": { - "message": "Fill", + "message": "Bete", "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": { @@ -209,10 +209,10 @@ "message": "Auto-bete nortasuna" }, "fillVerificationCode": { - "message": "Fill verification code" + "message": "Bete egiaztapen-kodea" }, "fillVerificationCodeAria": { - "message": "Fill Verification Code", + "message": "Bete egiaztapen-kodea", "description": "Aria label for the heading displayed the inline menu for totp code autofill" }, "generatePasswordCopied": { @@ -231,7 +231,7 @@ "message": "Nortasunik ez" }, "addLoginMenu": { - "message": "Add login" + "message": "Gehitu logina" }, "addCardMenu": { "message": "Gehitu txartela" @@ -1173,6 +1173,12 @@ "message": "Oh no! We couldn't save this. Try entering the details manually.", "description": "Detailed error message shown when saving login details fails." }, + "changePasswordWarning": { + "message": "After changing your password, you will need to log in with your new password. Active sessions on other devices will be logged out within one hour." + }, + "accountRecoveryUpdateMasterPasswordSubtitle": { + "message": "Change your master password to complete account recovery." + }, "enableChangedPasswordNotification": { "message": "Galdetu uneko saio-hasiera eguneratzeko" }, @@ -1365,8 +1371,8 @@ "featureUnavailable": { "message": "Ezaugarria ez dago erabilgarri" }, - "encryptionKeyMigrationRequired": { - "message": "Encryption key migration required. Please login through the web vault to update your encryption key." + "legacyEncryptionUnsupported": { + "message": "Legacy encryption is no longer supported. Please contact support to recover your account." }, "premiumMembership": { "message": "Premium bazkidea" @@ -1922,6 +1928,9 @@ "typeSshKey": { "message": "SSH key" }, + "typeNote": { + "message": "Note" + }, "newItemHeader": { "message": "New $TYPE$", "placeholders": { @@ -2153,8 +2162,8 @@ "setYourPinCode": { "message": "Ezarri zure PIN kodea Bitwarden desblokeatzeko. Zure PIN-aren konfigurazioa berrezarriko da, noizbait aplikaziotik erabat saioa ixten baduzu." }, - "setYourPinCode1": { - "message": "Your PIN will be used to unlock Bitwarden instead of your master password. Your PIN will reset if you ever fully log out of Bitwarden." + "setPinCode": { + "message": "You can use this PIN to unlock Bitwarden. Your PIN will be reset if you ever fully log out of the application." }, "pinRequired": { "message": "PIN-a beharrezkoa da." @@ -2204,6 +2213,9 @@ "useThisPassword": { "message": "Use this password" }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, "useThisUsername": { "message": "Use this username" }, @@ -2481,6 +2493,12 @@ "personalOwnershipPolicyInEffectImports": { "message": "An organization policy has blocked importing items into your individual vault." }, + "restrictCardTypeImport": { + "message": "Cannot import card item types" + }, + "restrictCardTypeImportDesc": { + "message": "A policy set by 1 or more organizations prevents you from importing cards to your vaults." + }, "domainsTitle": { "message": "Domains", "description": "A category title describing the concept of web domains" @@ -2512,6 +2530,10 @@ "change": { "message": "Change" }, + "changePassword": { + "message": "Change password", + "description": "Change password button for browser at risk notification on login." + }, "changeButtonTitle": { "message": "Change password - $ITEMNAME$", "placeholders": { @@ -2521,6 +2543,9 @@ } } }, + "atRiskPassword": { + "message": "At-risk password" + }, "atRiskPasswords": { "message": "At-risk passwords" }, @@ -2555,6 +2580,26 @@ } } }, + "atRiskChangePrompt": { + "message": "Your password for this site is at-risk. $ORGANIZATION$ has requested that you change it.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + }, + "description": "Notification body when a login triggers an at-risk password change request and the change password domain is known." + }, + "atRiskNavigatePrompt": { + "message": "$ORGANIZATION$ wants you to change this password because it is at-risk. Navigate to your account settings to change the password.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + }, + "description": "Notification body when a login triggers an at-risk password change request and no change password domain is provided." + }, "reviewAndChangeAtRiskPassword": { "message": "Review and change one at-risk password" }, @@ -2674,6 +2719,10 @@ "message": "Send guztiak", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "maxAccessCountReached": { + "message": "Max access count reached", + "description": "This text will be displayed after a Send has been accessed the maximum amount of times." + }, "hideTextByDefault": { "message": "Hide text by default" }, @@ -2876,6 +2925,9 @@ "emailVerificationRequiredDesc": { "message": "Emaila egiaztatu behar duzu funtzio hau erabiltzeko. Emaila web-eko kutxa gotorrean egiazta dezakezu." }, + "masterPasswordSuccessfullySet": { + "message": "Master password successfully set" + }, "updatedMasterPassword": { "message": "Pasahitz nagusia eguneratuta" }, @@ -3408,6 +3460,9 @@ "logInRequestSent": { "message": "Request sent" }, + "masterPasswordChanged": { + "message": "Master password saved" + }, "exposedMasterPassword": { "message": "Exposed Master Password" }, @@ -3522,6 +3577,12 @@ "requestAdminApproval": { "message": "Eskatu administratzailearen onarpena" }, + "unableToCompleteLogin": { + "message": "Unable to complete login" + }, + "loginOnTrustedDeviceOrAskAdminToAssignPassword": { + "message": "You need to log in on a trusted device or ask your administrator to assign you a password." + }, "ssoIdentifierRequired": { "message": "Organization SSO identifier is required." }, @@ -3607,14 +3668,6 @@ "trustUser": { "message": "Trust user" }, - "sendsNoItemsTitle": { - "message": "No active Sends", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendsNoItemsMessage": { - "message": "Use Send to securely share encrypted information with anyone.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "sendsTitleNoItems": { "message": "Send sensitive information safely", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -4209,6 +4262,26 @@ "message": "Common formats", "description": "Label indicating the most common import formats" }, + "uriMatchDefaultStrategyHint": { + "message": "URI match detection is how Bitwarden identifies autofill suggestions.", + "description": "Explains to the user that URI match detection determines how Bitwarden suggests autofill options, and clarifies that this default strategy applies when no specific match detection is set for a login item." + }, + "regExAdvancedOptionWarning": { + "message": "\"Regular expression\" is an advanced option with increased risk of exposing credentials.", + "description": "Content for dialog which warns a user when selecting 'regular expression' matching strategy as a cipher match strategy" + }, + "startsWithAdvancedOptionWarning": { + "message": "\"Starts with\" is an advanced option with increased risk of exposing credentials.", + "description": "Content for dialog which warns a user when selecting 'starts with' matching strategy as a cipher match strategy" + }, + "uriMatchWarningDialogLink": { + "message": "More about match detection", + "description": "Link to match detection docs on warning dialog for advance match strategy" + }, + "uriAdvancedOption": { + "message": "Advanced options", + "description": "Advanced option placeholder for uri option component" + }, "confirmContinueToBrowserSettingsTitle": { "message": "Continue to browser settings?", "description": "Title for dialog which asks if the user wants to proceed to a relevant browser settings page" @@ -5036,6 +5109,9 @@ "unlockPinSet": { "message": "Unlock PIN set" }, + "unlockWithBiometricSet": { + "message": "Unlock with biometrics set" + }, "authenticating": { "message": "Authenticating" }, @@ -5187,13 +5263,13 @@ "message": "Lowercase" }, "uppercaseAriaLabel": { - "message": "Uppercase" + "message": "Maiuskulak" }, "generatedPassword": { - "message": "Generated password" + "message": "Sortutako pasahitza" }, "compactMode": { - "message": "Compact mode" + "message": "Modu trinkoa" }, "beta": { "message": "Beta" @@ -5377,5 +5453,9 @@ }, "noPermissionsViewPage": { "message": "You do not have permissions to view this page. Try logging in with a different account." + }, + "wasmNotSupported": { + "message": "WebAssembly is not supported on your browser or is not enabled. WebAssembly is required to use the Bitwarden app.", + "description": "'WebAssembly' is a technical term and should not be translated." } } diff --git a/apps/browser/src/_locales/fa/messages.json b/apps/browser/src/_locales/fa/messages.json index 33a779a7909..fb9380d5317 100644 --- a/apps/browser/src/_locales/fa/messages.json +++ b/apps/browser/src/_locales/fa/messages.json @@ -41,7 +41,7 @@ "message": "ایجاد حساب کاربری خود را با تنظیم کلمه عبور تکمیل کنید" }, "enterpriseSingleSignOn": { - "message": "ورود به سیستم پروژه" + "message": "ورود یکپارچه سازمانی" }, "cancel": { "message": "انصراف" @@ -258,13 +258,13 @@ "message": "حساب ایمیل" }, "requestHint": { - "message": "درخواست راهنمایی" + "message": "درخواست یادآور" }, "requestPasswordHint": { "message": "درخواست یادآور کلمه عبور" }, "enterYourAccountEmailAddressAndYourPasswordHintWillBeSentToYou": { - "message": "نشانی ایمیل حساب کاربری خود را وارد کنید تا راهنمای کلمه عبور برای شما ارسال شود" + "message": "نشانی ایمیل حساب کاربری خود را وارد کنید تا یادآور کلمه عبور برای شما ارسال شود" }, "getMasterPasswordHint": { "message": "دریافت یادآور کلمه عبور اصلی" @@ -294,7 +294,7 @@ "message": "با برنامه وب ادامه می‌دهید؟" }, "continueToWebAppDesc": { - "message": "ویژگی‌های بیشتر حساب Bitwarden خود را در برنامه وب کاوش کنید." + "message": "ویژگی‌های بیشتر حساب کاربری Bitwarden خود را در برنامه وب کاوش کنید." }, "continueToHelpCenter": { "message": "به مرکز راهنمایی ادامه می‌دهید؟" @@ -316,11 +316,11 @@ "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." }, "yourAccountsFingerprint": { - "message": "عبارت اثر انگشت حساب شما", + "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." }, "twoStepLogin": { - "message": "ورود دو مرحله ای" + "message": "ورود دو مرحله‌ای" }, "logOut": { "message": "خروج" @@ -407,7 +407,7 @@ "message": "برای سامان‌دهی موردهای گاوصندوق خود پوشه ایجاد کنید" }, "deleteFolderPermanently": { - "message": "مطمئنید می‌خواهید این پوشه را برای همیشه پاک کنید؟" + "message": "آیا مطمئنید می‌خواهید این پوشه را برای همیشه پاک کنید؟" }, "deleteFolder": { "message": "حذف پوشه" @@ -428,7 +428,7 @@ "message": "انجمن‌های Bitwarden را کاوش کنید" }, "contactSupport": { - "message": "پیام به پشتیبانیBitwarden" + "message": "پیام به پشتیبانی Bitwarden" }, "sync": { "message": "همگام‌سازی" @@ -575,13 +575,13 @@ "message": "مورد علاقه" }, "unfavorite": { - "message": "حذف از علایق" + "message": "حذف از مورد علاقه" }, "itemAddedToFavorites": { "message": "به موارد مورد علاقه افزوده شد" }, "itemRemovedFromFavorites": { - "message": "از علایق حذف شد" + "message": "از مورد علاقه حذف شد" }, "notes": { "message": "یادداشت‌ها" @@ -635,7 +635,7 @@ "message": "باز کردن امکانات" }, "unlockMethodNeededToChangeTimeoutActionDesc": { - "message": "یک روش بازگشایی برای پایان زمان مجاز تنظیم کنید." + "message": "یک روش باز کردن قفل برای پایان زمان مجاز راه‌اندازی کنید." }, "unlockMethodNeeded": { "message": "یک روش باز کردن قفل را در تنظیمات راه‌اندازی کنید" @@ -653,7 +653,7 @@ "message": "به این افزونه امتیاز دهید" }, "browserNotSupportClipboard": { - "message": "مرورگر شما از کپی کلیپ بورد آسان پشتیبانی نمی‌کند. به جای آن به صورت دستی کپی کنید." + "message": "مرورگر شما از کپی حافظه موقت آسان پشتیبانی نمی‌کند. به جای آن به صورت دستی کپی کنید." }, "verifyYourIdentity": { "message": "هویت خود را تأیید کنید" @@ -741,10 +741,10 @@ "message": "4 ساعت" }, "onLocked": { - "message": "در قفل سیستم" + "message": "هنگام قفل سیستم" }, "onRestart": { - "message": "هنگام راه اندازی مجدد" + "message": "هنگام راه‌اندازی مجدد" }, "never": { "message": "هرگز" @@ -799,7 +799,7 @@ "message": "حساب کاربری جدید شما ایجاد شده است!" }, "youHaveBeenLoggedIn": { - "message": "شما با موفقیت وارد شدید!" + "message": "شما وارد شدید!" }, "youSuccessfullyLoggedIn": { "message": "شما با موفقیت وارد شدید" @@ -808,7 +808,7 @@ "message": "می‌توانید این پنجره را ببندید" }, "masterPassSent": { - "message": "ما یک ایمیل همراه با راهنمای کلمه عبور اصلی برایتان ارسال کردیم." + "message": "ما یک ایمیل همراه با یادآور کلمه عبور اصلی برایتان ارسال کردیم." }, "verificationCodeRequired": { "message": "کد تأیید مورد نیاز است." @@ -820,7 +820,7 @@ "message": "کد تأیید نامعتبر است" }, "valueCopied": { - "message": " کپی شده", + "message": "$VALUE$ کپی شد", "description": "Value has been copied to the clipboard.", "placeholders": { "value": { @@ -848,7 +848,7 @@ "message": "Bitwarden می‌تواند کدهای تأیید دو مرحله‌ای را ذخیره و پر کند. کلید را کپی کرده و در این فیلد قرار دهید." }, "totpHelperWithCapture": { - "message": "Bitwarden می‌تواند کدهای تأیید دو مرحله‌ای را ذخیره و پر کند. برای اسکن کد QR احراز هویت کننده این وب‌سایت، روی آیکون دوربین کلیک کنید یا کلید را کپی کرده و در این فیلد قرار دهید." + "message": "Bitwarden می‌تواند کدهای تأیید دو مرحله‌ای را ذخیره و پر کند. برای اسکن کد QR احراز هویت کننده این وب‌سایت، روی نماد دوربین کلیک کنید یا کلید را کپی کرده و در این فیلد قرار دهید." }, "learnMoreAboutAuthenticators": { "message": "درباره احراز هویت کننده‌ها بیشتر بدانید" @@ -860,7 +860,7 @@ "message": "خارج شد" }, "loggedOutDesc": { - "message": "شما از حساب خود خارج شده‌اید." + "message": "شما از حساب کاربری خود خارج شده‌اید." }, "loginExpired": { "message": "نشست ورود شما منقضی شده است." @@ -923,7 +923,7 @@ "message": "پوشه اضافه شد" }, "twoStepLoginConfirmation": { - "message": "ورود دو مرحله ای باعث می‌شود که حساب کاربری شما با استفاده از یک دستگاه دیگر مانند کلید امنیتی، برنامه احراز هویت، پیامک، تماس تلفنی و یا ایمیل، اعتبار خود را با ایمنی بیشتر اثبات کند. ورود دو مرحله ای می تواند در bitwarden.com فعال شود. آیا می‌خواهید از سایت بازدید کنید؟" + "message": "ورود دو مرحله‌ای باعث می شود که حساب کاربری شما با استفاده از یک دستگاه دیگر مانند کلید امنیتی، برنامه احراز هویت، پیامک، تماس تلفنی و یا رایانامه، اعتبار خود را با ایمنی بیشتر اثبات کند. ورود دو مرحله‌ای می‌تواند در bitwarden.com راه‌اندازی شود. آیا می‌خواهید از سایت بازدید کنید؟" }, "twoStepLoginConfirmationContent": { "message": "با راه‌اندازی ورود دو مرحله‌ای در برنامه وب Bitwarden، حساب کاربری خود را ایمن‌تر کنید." @@ -982,16 +982,16 @@ "message": "مورد ذخیره شد" }, "deleteItemConfirmation": { - "message": "واقعاً می‌خواهید این آیتم را به سطل زباله ارسال کنید؟" + "message": "واقعاً می‌خواهید این مورد را به سطل زباله ارسال کنید؟" }, "deletedItem": { - "message": "مورد به زباله‌ها فرستاده شد" + "message": "مورد به سطل زباله فرستاده شد" }, "overwritePassword": { "message": "بازنویسی کلمه عبور" }, "overwritePasswordConfirmation": { - "message": "آیا از بازنویسی بر روی پسورد فعلی مطمئن هستید؟" + "message": "آیا از بازنویسی بر روی کلمه عبور فعلی مطمئن هستید؟" }, "overwriteUsername": { "message": "بازنویسی نام کاربری" @@ -1022,7 +1022,7 @@ "message": "در صورتی که موردی در گاوصندوق شما یافت نشد، درخواست افزودن کنید." }, "addLoginNotificationDescAlt": { - "message": "اگر موردی در گاوصندوق شما یافت نشد، درخواست افزودن آن را بدهید. این مورد برای همه حساب‌های وارد شده اعمال می‌شود." + "message": "اگر موردی در گاوصندوق شما یافت نشد، درخواست افزودن آن را بدهید. این مورد برای همه حساب‌های کاربری وارد شده اعمال می‌شود." }, "showCardsInVaultViewV2": { "message": "همیشه کارت‌ها را به‌عنوان پیشنهادهای پر کردن خودکار در نمای گاوصندوق نمایش بده" @@ -1049,11 +1049,11 @@ "message": "برای پر کردن، روی موردها در پیشنهادهای پرکردن خودکار کلیک کنید" }, "clearClipboard": { - "message": "پاکسازی کلیپ بورد", + "message": "پاکسازی حافظه موقت", "description": "Clipboard is the operating system thing where you copy/paste data to on your device." }, "clearClipboardDesc": { - "message": "به صورت خودکار، مقادیر کپی شده را از کلیپ بورد پاک کن.", + "message": "به صورت خودکار، مقادیر کپی شده را از حافظه موقت پاک کن.", "description": "Clipboard is the operating system thing where you copy/paste data to on your device." }, "notificationAddDesc": { @@ -1173,6 +1173,12 @@ "message": "اوه نه! نتوانستیم این را ذخیره کنیم. لطفاً جزئیات را به‌صورت دستی وارد کنید.", "description": "Detailed error message shown when saving login details fails." }, + "changePasswordWarning": { + "message": "After changing your password, you will need to log in with your new password. Active sessions on other devices will be logged out within one hour." + }, + "accountRecoveryUpdateMasterPasswordSubtitle": { + "message": "Change your master password to complete account recovery." + }, "enableChangedPasswordNotification": { "message": "درخواست برای به‌روزرسانی ورود به سیستم موجود" }, @@ -1180,13 +1186,13 @@ "message": "هنگامی که تغییری در یک وب‌سایت شناسایی شد، درخواست به‌روزرسانی کلمه عبور ورود کن." }, "changedPasswordNotificationDescAlt": { - "message": "هنگامی که تغییری در کلمه عبور یک ورود در وب‌سایت شناسایی شود، درخواست به‌روزرسانی آن را بده. این مورد برای همه حساب‌های وارد شده اعمال می‌شود." + "message": "هنگامی که تغییری در کلمه عبور یک ورود در وب‌سایت شناسایی شود، درخواست به‌روزرسانی آن را بده. این مورد برای همه حساب‌های کاربری وارد شده اعمال می‌شود." }, "enableUsePasskeys": { - "message": "برای ذخیره و استفاده از passkey اجازه بگیر" + "message": "درخواست برای ذخیره و استفاده از کلیدهای عبور" }, "usePasskeysDesc": { - "message": "درخواست ذخیره کلیدهای عبور جدید یا ورود با کلیدهای عبوری که در گاوصندوق شما ذخیره شده‌اند. این مورد برای همه حساب‌های وارد شده اعمال می‌شود." + "message": "درخواست ذخیره کلیدهای عبور جدید یا ورود با کلیدهای عبوری که در گاوصندوق شما ذخیره شده‌اند. این مورد برای همه حساب‌های کاربری وارد شده اعمال می‌شود." }, "notificationChangeDesc": { "message": "آیا مایل به به‌روزرسانی این کلمه عبور در Bitwarden هستید؟" @@ -1207,7 +1213,7 @@ "message": "نمایش گزینه‌های منوی زمینه" }, "contextMenuItemDesc": { - "message": "از یک کلیک ثانویه برای دسترسی به تولید کلمه عبور و ورودهای منطبق برای وب سایت استفاده کن." + "message": "از یک کلیک ثانویه برای دسترسی به تولید کلمه عبور و ورودهای منطبق برای وب‌سایت استفاده کن." }, "contextMenuItemDescAlt": { "message": "برای دسترسی به تولید کلمه عبور و ورودهای منطبق با وب‌سایت، از کلیک ثانویه استفاده کنید. این مورد برای همه حساب‌های کاربری وارد شده اعمال می‌شود." @@ -1226,7 +1232,7 @@ "message": "تغییر رنگ پوسته برنامه." }, "themeDescAlt": { - "message": "تغییر تم رنگی برنامه. این مورد برای همه حساب‌های کاربری وارد شده اعمال می‌شود." + "message": "تغییر پوسته رنگی برنامه. این مورد برای همه حساب‌های کاربری وارد شده اعمال می‌شود." }, "dark": { "message": "تاریک", @@ -1255,7 +1261,7 @@ "message": "این کلمه عبور برای برون ریزی و درون ریزی این پرونده استفاده می‌شود" }, "accountRestrictedOptionDescription": { - "message": "برای رمزگذاری برون ریزی و محدود کردن درون ریزی فقط به حساب کاربری فعلی Bitwarden، از کلید رمزگذاری حساب خود که از نام کاربری و کلمه عبور اصلی حساب شما مشتق شده است استفاده کنید." + "message": "برای رمزگذاری برون ریزی و محدود کردن درون ریزی فقط به حساب کاربری فعلی Bitwarden، از کلید رمزگذاری حساب کاربری خود که از نام کاربری و کلمه عبور اصلی حساب کاربری شما مشتق شده است استفاده کنید." }, "passwordProtectedOptionDescription": { "message": "یک کلمه عبور برای پرونده به‌منظور رمزگذاری تنظیم کنید تا برون ریزی و درون ریزی آن به هر حساب Bitwarden با استفاده از کلمه عبور رمزگشایی شود." @@ -1270,7 +1276,7 @@ "message": "عدم تطابق \"کلمه عبور پرونده\" و \"تأیید کلمه عبور پرونده\" با یکدیگر." }, "warning": { - "message": "اخطار", + "message": "هشدار", "description": "WARNING (should stay in capitalized letters if the language permits)" }, "warningCapitalized": { @@ -1284,7 +1290,7 @@ "message": "این برون ریزی شامل داده‌های گاوصندوق در یک قالب رمزنگاری نشده است. شما نباید آن را از طریق یک راه ارتباطی نا امن (مثل ایمیل) ذخیره یا ارسال کنید. به محض اینکه کارتان با آن تمام شد، آن را حذف کنید." }, "encExportKeyWarningDesc": { - "message": "این برون ریزی با استفاده از کلید رمزگذاری حساب شما، اطلاعاتتان را رمزگذاری می کند. اگر زمانی کلید رمزگذاری حساب خود را بچرخانید، باید دوباره خروجی بگیرید، چون قادر به رمزگشایی این پرونده برون ریزی نخواهید بود." + "message": "این برون ریزی با استفاده از کلید رمزگذاری حساب کاربری شما، اطلاعاتتان را رمزگذاری می کند. اگر زمانی کلید رمزگذاری حساب کاربری خود را تغییر دهید، باید دوباره خروجی بگیرید، چون قادر به رمزگشایی این پرونده برون ریزی نخواهید بود." }, "encExportAccountWarningDesc": { "message": "کلیدهای رمزگذاری حساب برای هر حساب کاربری Bitwarden منحصر به فرد است، بنابراین نمی‌توانید برون ریزی رمزگذاری شده را به حساب دیگری وارد کنید." @@ -1330,7 +1336,7 @@ "message": "کپی کد تأیید" }, "attachments": { - "message": "پیوست ها" + "message": "پیوست‌ها" }, "deleteAttachment": { "message": "حذف پیوست" @@ -1365,8 +1371,8 @@ "featureUnavailable": { "message": "ویژگی موجود نیست" }, - "encryptionKeyMigrationRequired": { - "message": "انتقال کلید رمزگذاری مورد نیاز است. لطفاً از طریق گاوصندوق وب وارد شوید تا کلید رمزگذاری خود را به روز کنید." + "legacyEncryptionUnsupported": { + "message": "رمزنگاری قدیمی دیگر پشتیبانی نمی‌شود. لطفاً برای بازیابی حساب کاربری خود با پشتیبانی تماس بگیرید." }, "premiumMembership": { "message": "عضویت پرمیوم" @@ -1387,16 +1393,16 @@ "message": "برای عضویت پرمیوم ثبت نام کنید و دریافت کنید:" }, "ppremiumSignUpStorage": { - "message": "۱ گیگابایت فضای ذخیره سازی رمزگذاری شده برای پیوست های پرونده." + "message": "۱ گیگابایت فضای ذخیره‌سازی رمزگذاری شده برای پیوست‌های پرونده." }, "premiumSignUpEmergency": { "message": "دسترسی اضطراری." }, "premiumSignUpTwoStepOptions": { - "message": "گزینه های ورود اضافی دو مرحله ای مانند YubiKey و Duo." + "message": "گزینه‌های ورود اضافی دو مرحله‌ای مانند YubiKey و Duo." }, "ppremiumSignUpReports": { - "message": "گزارش‌های بهداشت کلمه عبور، سلامت حساب و نقض داده‌ها برای ایمن نگهداشتن گاوصندوق شما." + "message": "گزارش‌های بهداشت کلمه عبور، سلامت حساب کاربری و نقض داده‌ها برای ایمن نگهداشتن گاوصندوق شما." }, "ppremiumSignUpTotp": { "message": "تولید کننده کد تأیید (2FA) از نوع TOTP برای ورودهای در گاوصندوقتان." @@ -1411,7 +1417,7 @@ "message": "خرید پرمیوم" }, "premiumPurchaseAlertV2": { - "message": "می‌توانید نسخه پرمیوم را از تنظیمات حساب کاربری خود در اپلیکیشن وب Bitwarden خریداری کنید." + "message": "می‌توانید نسخه پرمیوم را از تنظیمات حساب کاربری خود در برنامه وب Bitwarden خریداری کنید." }, "premiumCurrentMember": { "message": "شما یک عضو پرمیوم هستید!" @@ -1423,7 +1429,7 @@ "message": "ارتقا به نسخه پرمیوم و دریافت:" }, "premiumPrice": { - "message": "تمامش فقط $PRICE$ در سال!", + "message": "تمامش فقط $PRICE$ /سال!", "placeholders": { "price": { "content": "$1", @@ -1447,10 +1453,10 @@ "message": "TOTP را به صورت خودکار کپی کن" }, "disableAutoTotpCopyDesc": { - "message": "اگر یک ورود دارای یک کلید احراز هویت باشد، هنگام پر کردن خودکار ورود، کد تأیید TOTP را در کلیپ بورد خود کپی کن." + "message": "اگر یک ورود دارای یک کلید احراز هویت باشد، هنگام پر کردن خودکار ورود، کد تأیید TOTP را در حافظه موقت خود کپی کن." }, "enableAutoBiometricsPrompt": { - "message": "درخواست بیومتریک هنگام راه اندازی" + "message": "درخواست بیومتریک هنگام راه‌اندازی" }, "premiumRequired": { "message": "در نسخه پرمیوم کار می‌کند" @@ -1484,7 +1490,7 @@ "message": "از کد بازیابی‌تان استفاده کنید" }, "insertU2f": { - "message": "کلید امنیتی خود را وارد پورت USB رایانه کنید، اگر دکمه ای دارد آن را بفشارید." + "message": "کلید امنیتی خود را وارد پورت USB رایانه کنید، اگر دکمه‌ای دارد آن را بفشارید." }, "openInNewTab": { "message": "گشودن در زبانهٔ جدید" @@ -1502,7 +1508,7 @@ "message": "ورود به سیستم در دسترس نیست" }, "noTwoStepProviders": { - "message": "ورود دو مرحله‌ای برای این حساب فعال است، با این حال، هیچ یک از ارائه‌دهندگان دو مرحله‌ای پیکربندی شده توسط این مرورگر وب پشتیبانی نمی‌شوند." + "message": "ورود دو مرحله‌ای برای این حساب کاربری فعال است، با این حال، هیچ یک از ارائه‌دهندگان دو مرحله‌ای پیکربندی شده توسط این مرورگر وب پشتیبانی نمی‌شوند." }, "noTwoStepProviders2": { "message": "لطفاً از یک مرورگر وب پشتیبانی شده (مانند کروم) استفاده کنید و یا ارائه دهندگان اضافی را که از مرورگر وب بهتر پشتیانی می‌کنند را اضافه کنید (مانند یک برنامه احراز هویت)." @@ -1541,10 +1547,10 @@ "description": "'Duo Security' and 'Duo Mobile' are product names and should not be translated." }, "webAuthnTitle": { - "message": "FIDO2 WebAuthn\n" + "message": "FIDO2 WebAuthn" }, "webAuthnDesc": { - "message": "برای دسترسی به حساب خود از هر کلید امنیتی فعال شده WebAuthn استفاده کنید." + "message": "برای دسترسی به حساب کاربری خود از هر کلید امنیتی فعال شده WebAuthn استفاده کنید." }, "emailTitle": { "message": "ایمیل" @@ -1587,7 +1593,7 @@ "message": "نشانی سرور اعلان‌ها" }, "iconsUrl": { - "message": "نشانی سرور آیکون ها" + "message": "نشانی سرور نمادها" }, "environmentSaved": { "message": "نشانی‌های اینترنتی محیط ذخیره شد" @@ -1627,7 +1633,7 @@ "message": "نمایش کارت‌ها به‌عنوان پیشنهاد" }, "showInlineMenuOnIconSelectionLabel": { - "message": "نمایش پیشنهادها هنگام انتخاب آیکون" + "message": "نمایش پیشنهادها هنگام انتخاب نماد" }, "showInlineMenuOnFormFieldsDescAlt": { "message": "برای تمام حساب‌های کاربری وارد شده اعمال می‌شود." @@ -1647,7 +1653,7 @@ "description": "Overlay appearance select option for showing the field on focus of the input element" }, "autofillOverlayVisibilityOnButtonClick": { - "message": "وقتی آیکون پر کردن خودکار انتخاب شود", + "message": "وقتی نماد پر کردن خودکار انتخاب شود", "description": "Overlay appearance select option for showing the field on click of the overlay icon" }, "enableAutoFillOnPageLoadSectionTitle": { @@ -1675,7 +1681,7 @@ "message": "می‌توانید پر کردن خودکار هنگام بارگیری صفحه را برای موارد ورود به سیستم از نمای ویرایش مورد خاموش کنید." }, "itemAutoFillOnPageLoad": { - "message": "پر کردن خودکار بارگذاری صفحه (درصورت فعال بودن در گزینه ها)" + "message": "پر کردن خودکار بارگذاری صفحه (درصورت فعال بودن در گزینه‌ها)" }, "autoFillOnPageLoadUseDefault": { "message": "استفاده از تنظیمات پیش‌فرض" @@ -1693,16 +1699,16 @@ "message": "باز کردن گاوصندوق در نوار کناری" }, "commandAutofillLoginDesc": { - "message": "آخرین ورودی مورد استفاده برای وب سایت فعلی را به صورت خودکار پر کنید" + "message": "آخرین ورودی مورد استفاده برای وب‌سایت فعلی را به صورت خودکار پر کنید" }, "commandAutofillCardDesc": { - "message": "آخرین کارت مورد استفاده برای وب سایت فعلی را به صورت خودکار پر کنید" + "message": "آخرین کارت مورد استفاده برای وب‌سایت فعلی را به صورت خودکار پر کنید" }, "commandAutofillIdentityDesc": { - "message": "آخرین هویت مورد استفاده برای وب سایت فعلی را به صورت خودکار پر کنید" + "message": "آخرین هویت مورد استفاده برای وب‌سایت فعلی را به صورت خودکار پر کنید" }, "commandGeneratePasswordDesc": { - "message": "یک کلمه عبور تصادفی جدید ایجاد کنید و آن را در کلیپ بورد کپی کنید" + "message": "یک کلمه عبور تصادفی جدید ایجاد کنید و آن را در حافظه موقت کپی کنید" }, "commandLockVaultDesc": { "message": "قفل گاوصندوق" @@ -1806,7 +1812,7 @@ "message": "جولای" }, "august": { - "message": "آگوست‌" + "message": "اوت‌" }, "september": { "message": "سپتامبر" @@ -1842,7 +1848,7 @@ "message": "دکتر" }, "mx": { - "message": "عنوان" + "message": "بی جنسیت" }, "firstName": { "message": "نام" @@ -1890,7 +1896,7 @@ "message": "نشانی ۳" }, "cityTown": { - "message": "شهر / شهرک" + "message": "شهر / شهرستان" }, "stateProvince": { "message": "ایالت / استان" @@ -1922,6 +1928,9 @@ "typeSshKey": { "message": "کلید SSH" }, + "typeNote": { + "message": "یادداشت" + }, "newItemHeader": { "message": "$TYPE$ جدید", "placeholders": { @@ -1980,7 +1989,7 @@ "message": "مورد علاقه‌ها" }, "popOutNewWindow": { - "message": "به یک پنجره جدید پاپ بزن" + "message": "در پنجره‌ای جدید باز کن" }, "refresh": { "message": "تازه کردن" @@ -2008,7 +2017,7 @@ "message": "بررسی کنید که آیا کلمه عبور افشا شده است." }, "passwordExposed": { - "message": "این کلمه عبور $VALUE$ بار در رخنه داده‌ها افشا شده است. باید آن را تغییر دهید.", + "message": "این کلمه عبور $VALUE$ بار در نقض داده‌ها افشا شده است. باید آن را تغییر دهید.", "placeholders": { "value": { "content": "$1", @@ -2017,7 +2026,7 @@ } }, "passwordSafe": { - "message": "این کلمه عبور در هیچ رخنه داده ای شناخته نشده است. استفاده از آن باید ایمن باشد." + "message": "این کلمه عبور در هیچ یک از نقض‌های داده شناخته شده یافت نشد. استفاده از آن باید ایمن باشد." }, "baseDomain": { "message": "دامنه پایه", @@ -2054,10 +2063,10 @@ "description": "Default URI match detection for autofill." }, "toggleOptions": { - "message": "گزینه های تبدیل" + "message": "سوئیچ گزینه‌ها" }, "toggleCurrentUris": { - "message": "تغییر وضعیت نشانی های اینترنتی فعلی", + "message": "تغییر وضعیت نشانی‌های اینترنتی فعلی", "description": "Toggle the display of the URIs of the currently open tabs in the browser." }, "currentUri": { @@ -2142,7 +2151,7 @@ "description": "PIN code. Ex. The short code (often numeric) that you use to unlock a device." }, "unlockWithPin": { - "message": "باز کردن با پین" + "message": "باز کردن با کد پین" }, "setYourPinTitle": { "message": "تنظیم کد پین" @@ -2153,8 +2162,8 @@ "setYourPinCode": { "message": "کد پین خود را برای باز کردن Bitwarden تنظیم کنید. اگر به طور کامل از برنامه خارج شوید، تنظیمات پین شما از بین می‌رود." }, - "setYourPinCode1": { - "message": "کد پین شما برای باز کردن Bitwarden به جای کلمه عبور اصلی استفاده خواهد شد. در صورتی که کاملاً از Bitwarden خارج شوید، کد پین شما ریست خواهد شد." + "setPinCode": { + "message": "شما می‌توانید از این کد پین برای باز کردن قفل Bitwarden استفاده کنید. در صورتی که کامل از برنامه خارج شوید، کد پین شما مجدداً تنظیم خواهد شد." }, "pinRequired": { "message": "کد پین الزامیست." @@ -2163,10 +2172,10 @@ "message": "کد پین معتبر نیست." }, "tooManyInvalidPinEntryAttemptsLoggingOut": { - "message": "تعداد تلاش‌های ناموفق پین زیاد شد. خارج می‌شوید." + "message": "تعداد تلاش‌های ناموفق کد پین زیاد شد. خارج می‌شوید." }, "unlockWithBiometrics": { - "message": "با استفاده از بیومتریک باز کنید" + "message": "باز کردن قفل با بیومتریک" }, "unlockWithMasterPassword": { "message": "باز کردن قفل با کلمه عبور اصلی" @@ -2190,7 +2199,7 @@ "message": "مورد شبیه" }, "clone": { - "message": "شبیه سازی" + "message": "شبیه‌سازی" }, "passwordGenerator": { "message": "تولید کننده کلمه عبور" @@ -2199,11 +2208,14 @@ "message": "تولید کننده نام کاربری" }, "useThisEmail": { - "message": "از این ایمیل استفاده شود" + "message": "از این ایمیل استفاده کن" }, "useThisPassword": { "message": "از این کلمه عبور استفاده کن" }, + "useThisPassphrase": { + "message": "از این عبارت عبور استفاده کن" + }, "useThisUsername": { "message": "از این نام کاربری استفاده کن" }, @@ -2232,17 +2244,17 @@ "description": "Verb form: to make secure or inaccessible by" }, "trash": { - "message": "زباله‌ها", + "message": "سطل زباله", "description": "Noun: a special folder to hold deleted items" }, "searchTrash": { - "message": "جستجوی زباله‌ها" + "message": "جستجوی سطل زباله" }, "permanentlyDeleteItem": { "message": "حذف دائمی مورد" }, "permanentlyDeleteItemConfirmation": { - "message": "مطمئن هستید که می‌خواهید این مورد را برای همیشه پاک کنید؟" + "message": "آیا مطمئن هستید که می‌خواهید این مورد را برای همیشه پاک کنید؟" }, "permanentlyDeletedItem": { "message": "مورد برای همیشه حذف شد" @@ -2281,7 +2293,7 @@ "message": "آیا هنوز می‌خواهید این ورود را پر کنید؟" }, "autofillIframeWarning": { - "message": "فرم توسط دامنه ای متفاوت از نشانی اینترنتی ورود به سیستم ذخیره شده شما میزبانی می‌شود. به هر حال برای پر کردن خودکار، تأیید را انتخاب کنید یا برای توقف، لغو را انتخاب کنید." + "message": "فرم توسط دامنه‌ای متفاوت از نشانی اینترنتی ورود به سیستم ذخیره شده شما میزبانی می‌شود. به هر حال برای پر کردن خودکار، تأیید را انتخاب کنید یا برای توقف، لغو را انتخاب کنید." }, "autofillIframeWarningTip": { "message": "برای جلوگیری از این هشدار در آینده، این نشانی اینترنتی، $HOSTNAME$، را در مورد ورود Bitwarden خود برای این سایت ذخیره کنید.", @@ -2377,7 +2389,7 @@ "message": "کلمه عبور جدید شما نمی‌تواند با کلمه عبور فعلی‌تان یکسان باشد." }, "hintEqualsPassword": { - "message": "اشاره به کلمه عبور شما نمی‌تواند همان کلمه عبور شما باشد." + "message": "یادآور کلمه عبور شما نمی‌تواند همان کلمه عبور شما باشد." }, "ok": { "message": "تأیید" @@ -2419,10 +2431,10 @@ "message": "ارتباط دسکتاپ قطع شد" }, "nativeMessagingWrongUserDesc": { - "message": "برنامه دسکتاپ به یک حساب دیگر وارد شده است. لطفاً اطمینان حاصل کنید که هر دو برنامه به یک حساب وارد شده اند." + "message": "برنامه دسکتاپ به یک حساب کاربری دیگر وارد شده است. لطفاً اطمینان حاصل کنید که هر دو برنامه به یک حساب کاربری وارد شده اند." }, "nativeMessagingWrongUserTitle": { - "message": "عدم مطابقت حساب کاربری" + "message": "عدم تطابق حساب کاربری" }, "nativeMessagingWrongUserKeyTitle": { "message": "عدم تطابق کلید بیومتریک" @@ -2431,10 +2443,10 @@ "message": "باز کردن قفل بیومتریک ناموفق بود. کلید مخفی بیومتریک نتوانست گاوصندوق را باز کند. لطفاً دوباره تنظیمات بیومتریک را انجام دهید." }, "biometricsNotEnabledTitle": { - "message": "بیومتریک برپا نشده" + "message": "بیومتریک راه‌اندازی نشده" }, "biometricsNotEnabledDesc": { - "message": "بیومتریک مرورگر ابتدا نیاز به فعالسازی بیومتریک دسکتاپ در تنظیمات دارد." + "message": "بیومتریک مرورگر ابتدا نیاز به فعال‌سازی بیومتریک دسکتاپ در تنظیمات دارد." }, "biometricsNotSupportedTitle": { "message": "بیومتریک پشتیبانی نمی‌شود" @@ -2473,7 +2485,7 @@ "message": "این عمل را نمی‌توان در نوار کناری انجام داد، لطفاً اقدام را در پنجره بازشو بازخوانی کنید." }, "personalOwnershipSubmitError": { - "message": "به دلیل سیاست پرمیوم، برای ذخیره موارد در گاوصندوق شخصی خود محدود شده اید. گزینه مالکیت را به یک سازمان تغییر دهید و مجموعه های موجود را انتخاب کنید." + "message": "به دلیل سیاست پرمیوم، برای ذخیره موارد در گاوصندوق شخصی خود محدود شده‌اید. گزینه مالکیت را به یک سازمان تغییر دهید و مجموعه‌های موجود را انتخاب کنید." }, "personalOwnershipPolicyInEffect": { "message": "سیاست سازمانی بر تنظیمات مالکیت شما تأثیر می‌گذارد." @@ -2481,6 +2493,12 @@ "personalOwnershipPolicyInEffectImports": { "message": "یک سیاست سازمانی، درون ریزی موارد به گاوصندوق فردی شما را مسدود کرده است." }, + "restrictCardTypeImport": { + "message": "نمی‌توان انواع مورد کارت را درون ریزی کرد" + }, + "restrictCardTypeImportDesc": { + "message": "یک سیاست تعیین شده توسط یک یا چند سازمان، مانع از درون ریزی کارت‌ها به گاوصندوق‌های شما شده است." + }, "domainsTitle": { "message": "دامنه‌ها", "description": "A category title describing the concept of web domains" @@ -2492,10 +2510,10 @@ "message": "اطلاعات بیشتر درباره دامنه‌های مسدود شده" }, "excludedDomains": { - "message": "دامنه های مستثنی" + "message": "دامنه‌های مستثنی" }, "excludedDomainsDesc": { - "message": "Bitwarden برای ذخیره جزئیات ورود به سیستم این دامنه ها سوال نمی‌کند. برای اینکه تغییرات اعمال شود باید صفحه را تازه کنید." + "message": "Bitwarden برای ذخیره جزئیات ورود به سیستم این دامنه‌ها سوال نمی‌کند. برای اینکه تغییرات اعمال شود باید صفحه را تازه کنید." }, "excludedDomainsDescAlt": { "message": "Bitwarden برای هیچ یک از حساب‌های کاربری وارد شده، درخواست ذخیره اطلاعات ورود برای این دامنه‌ها را نخواهد داد. برای اعمال تغییرات باید صفحه را تازه‌سازی کنید." @@ -2512,6 +2530,10 @@ "change": { "message": "تغییر" }, + "changePassword": { + "message": "تغییر رمز عبور", + "description": "Change password button for browser at risk notification on login." + }, "changeButtonTitle": { "message": "تغییر کلمه عبور - $ITEMNAME$", "placeholders": { @@ -2521,6 +2543,9 @@ } } }, + "atRiskPassword": { + "message": "کلمه عبور در معرض خطر" + }, "atRiskPasswords": { "message": "کلمات عبور در معرض خطر" }, @@ -2555,6 +2580,26 @@ } } }, + "atRiskChangePrompt": { + "message": "کلمه عبور شما برای این سایت در معرض خطر است. $ORGANIZATION$ درخواست کرده است که آن را تغییر دهید.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + }, + "description": "Notification body when a login triggers an at-risk password change request and the change password domain is known." + }, + "atRiskNavigatePrompt": { + "message": "$ORGANIZATION$ از شما می‌خواهد این کلمه عبور را تغییر دهید چون در معرض خطر است. برای تغییر کلمه عبور به تنظیمات حساب کاربری خود مراجعه کنید.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + }, + "description": "Notification body when a login triggers an at-risk password change request and no change password domain is provided." + }, "reviewAndChangeAtRiskPassword": { "message": "بررسی و تغییر یک کلمه عبور در معرض خطر" }, @@ -2671,9 +2716,13 @@ "message": "پرونده" }, "allSends": { - "message": "همه ارسال ها", + "message": "همه ارسال‌ها", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "maxAccessCountReached": { + "message": "به حداکثر تعداد دسترسی رسیده است", + "description": "This text will be displayed after a Send has been accessed the maximum amount of times." + }, "hideTextByDefault": { "message": "متن را به‌صورت پیش‌فرض مخفی کن" }, @@ -2711,7 +2760,7 @@ "message": "غیرفعال شد" }, "removePasswordConfirmation": { - "message": "مطمئنید که می‌خواهید کلمه عبور حذف شود؟" + "message": "آیا مطمئنید که می‌خواهید کلمه عبور حذف شود؟" }, "deleteSend": { "message": "ارسال حذف شد", @@ -2829,10 +2878,10 @@ "message": "برای انتخاب پرونده، پسوند را در نوار کناری باز کنید (در صورت امکان) یا با کلیک بر روی این بنر پنجره جدیدی باز کنید." }, "sendFirefoxFileWarning": { - "message": "برای انتخاب یک پرونده با استفاده از Firefox، افزونه را در نوار کناری باز کنید یا با کلیک بر روی این بنر پنجره جدیدی باز کنید." + "message": "برای انتخاب یک پرونده با استفاده از فایرفاکس، افزونه را در نوار کناری باز کنید یا با کلیک بر روی این بنر پنجره جدیدی باز کنید." }, "sendSafariFileWarning": { - "message": "برای انتخاب پرونده ای با استفاده از Safari، با کلیک روی این بنر پنجره جدیدی باز کنید." + "message": "برای انتخاب پرونده‌ای با استفاده از سافاری، با کلیک روی این بنر پنجره جدیدی باز کنید." }, "popOut": { "message": "باز کردن در پنجره جداگانه" @@ -2876,17 +2925,20 @@ "emailVerificationRequiredDesc": { "message": "برای استفاده از این ویژگی باید ایمیل خود را تأیید کنید. می‌توانید ایمیل خود را در گاوصندوق وب تأیید کنید." }, + "masterPasswordSuccessfullySet": { + "message": "کلمه عبور اصلی با موفقیت تنظیم شد" + }, "updatedMasterPassword": { - "message": "کلمه عبور اصلی به‌روز شد" + "message": "کلمه عبور اصلی به‌روزرسانی شد" }, "updateMasterPassword": { "message": "به‌روزرسانی کلمه عبور اصلی" }, "updateMasterPasswordWarning": { - "message": "کلمه عبور اصلی شما اخیراً توسط سرپرست سازمان‌تان تغییر کرده است. برای دسترسی به گاوصندوق، باید همین حالا کلمه عبور اصلی خود را به‌روز کنید. در صورت ادامه، شما از نشست فعلی خود خارج می‌شوید و باید دوباره وارد سیستم شوید. نشست فعال در دستگاه های دیگر ممکن است تا یک ساعت همچنان فعال باقی بمانند." + "message": "کلمه عبور اصلی شما اخیراً توسط مدیر سازمان‌تان تغییر کرده است. برای دسترسی به گاوصندوق، باید همین حالا کلمه عبور اصلی خود را به‌روزرسانی کنید. در صورت ادامه، شما از نشست فعلی خود خارج می‌شوید و باید دوباره وارد سیستم شوید. نشست فعال در دستگاه‌های دیگر ممکن است تا یک ساعت همچنان فعال باقی بمانند." }, "updateWeakMasterPasswordWarning": { - "message": "کلمه عبور اصلی شما با یک یا چند سیاست سازمان‌تان مطابقت ندارد. برای دسترسی به گاوصندوق، باید همین حالا کلمه عبور اصلی خود را به‌روز کنید. در صورت ادامه، شما از نشست فعلی خود خارج می‌شوید و باید دوباره وارد سیستم شوید. نشست فعال در دستگاه های دیگر ممکن است تا یک ساعت همچنان فعال باقی بمانند." + "message": "کلمه عبور اصلی شما با یک یا چند سیاست سازمان‌تان مطابقت ندارد. برای دسترسی به گاوصندوق، باید همین حالا کلمه عبور اصلی خود را به‌روزرسانی کنید. در صورت ادامه، شما از نشست فعلی خود خارج می‌شوید و باید دوباره وارد سیستم شوید. نشست فعال در دستگاه‌های دیگر ممکن است تا یک ساعت همچنان فعال باقی بمانند." }, "tdeDisabledMasterPasswordRequired": { "message": "سازمان شما رمزگذاری دستگاه‌های مورد اعتماد را غیرفعال کرده است. لطفاً برای دسترسی به گاوصندوق خود یک کلمه عبور اصلی تنظیم کنید." @@ -2895,7 +2947,7 @@ "message": "ثبت نام خودکار" }, "resetPasswordAutoEnrollInviteWarning": { - "message": "این سازمان دارای سیاست سازمانی ای است که به طور خودکار شما را در بازنشانی کلمه عبور ثبت نام می‌کند. این ثبت نام به مدیران سازمان اجازه می‌دهد تا کلمه عبور اصلی شما را تغییر دهند." + "message": "این سازمان دارای سیاست سازمانی است که به طور خودکار شما را در بازیابی کلمه عبور ثبت نام می‌کند. این ثبت نام به مدیران سازمان اجازه می‌دهد تا کلمه عبور اصلی شما را تغییر دهند." }, "selectFolder": { "message": "پوشه را انتخاب کنید..." @@ -2922,7 +2974,7 @@ } }, "verificationRequired": { - "message": "تایید لازم است", + "message": "تأیید لازم است", "description": "Default title for the user verification dialog." }, "hours": { @@ -2935,7 +2987,7 @@ "message": "نیازمندی‌های سیاست سازمانی بر گزینه‌های زمان پایان نشست شما اعمال شده است" }, "vaultTimeoutPolicyInEffect": { - "message": "سیاست‌های سازمانتان بر مهلت زمانی گاوصندوق شما تأثیر می‌گذارد. حداکثر زمان مجاز گاوصندوق $HOURS$ ساعت و $MINUTES$ دقیقه است", + "message": "سیاست‌های سازمان‌تان بر مهلت زمانی گاوصندوق شما تأثیر می‌گذارد. حداکثر زمان مجاز گاوصندوق $HOURS$ ساعت و $MINUTES$ دقیقه است.", "placeholders": { "hours": { "content": "$1", @@ -2974,7 +3026,7 @@ } }, "vaultTimeoutPolicyWithActionInEffect": { - "message": "سیاست‌های سازمانتان بر مهلت زمانی گاوصندوق شما تأثیر می‌گذارد. حداکثر زمان مجاز گاوصندوق $HOURS$ ساعت و $MINUTES$ دقیقه است. عملگر مهلت زمانی گاوصندوق شما روی $ACTION$ تنظیم شده است.", + "message": "سیاست‌های سازمان‌تان بر مهلت زمانی گاوصندوق شما تأثیر می‌گذارد. حداکثر زمان مجاز گاوصندوق $HOURS$ ساعت و $MINUTES$ دقیقه است. عملگر مهلت زمانی گاوصندوق شما روی $ACTION$ تنظیم شده است.", "placeholders": { "hours": { "content": "$1", @@ -3000,7 +3052,7 @@ } }, "vaultTimeoutTooLarge": { - "message": "مهلت زمانی شما بیش از محدودیت های تعیین شده توسط سازمانتان است." + "message": "مهلت زمانی شما بیش از محدودیت‌های تعیین شده توسط سازمان‌تان است." }, "vaultExportDisabled": { "message": "برون ریزی گاوصندوق غیرفعال شده است" @@ -3033,10 +3085,10 @@ "message": "کلمه عبور اصلی حذف شد" }, "leaveOrganizationConfirmation": { - "message": "آيا مطمئن هستيد که می خواهيد سازمان های انتخاب شده را ترک کنيد؟" + "message": "آيا مطمئنید که می‌خواهيد سازمان انتخاب شده را ترک کنيد؟" }, "leftOrganization": { - "message": "شما از سازمان خارج شده اید." + "message": "شما از سازمان خارج شده‌اید." }, "toggleCharacterCount": { "message": "تغییر تعداد کاراکترها" @@ -3139,7 +3191,7 @@ "description": "Username generator option that appends a random sub-address to the username. For example: address+subaddress@email.com" }, "plusAddressedEmailDesc": { - "message": "از قابلیت های آدرس دهی فرعی ارائه دهنده ایمیل خود استفاده کنید." + "message": "از قابلیت‌های آدرس دهی فرعی ارائه دهنده ایمیل خود استفاده کنید." }, "catchallEmail": { "message": "دریافت همه ایمیل‌ها" @@ -3270,7 +3322,7 @@ } }, "forwarderNoUrl": { - "message": "آدرس $SERVICENAME$ نامعتبر.", + "message": "نشانی $SERVICENAME$ نامعتبر.", "description": "Displayed when the url of the forwarding service wasn't supplied.", "placeholders": { "servicename": { @@ -3385,7 +3437,7 @@ "message": "یک اعلان به دستگاه شما ارسال شده است." }, "notificationSentDevicePart1": { - "message": "قفل Bitwarden را در دستگاه خود یا در... باز کنید" + "message": "قفل Bitwarden را روی دستگاه خود باز کنید یا روی" }, "notificationSentDeviceAnchor": { "message": "برنامه وب" @@ -3408,20 +3460,23 @@ "logInRequestSent": { "message": "درخواست ارسال شد" }, + "masterPasswordChanged": { + "message": "Master password saved" + }, "exposedMasterPassword": { "message": "کلمه عبور اصلی افشا شده" }, "exposedMasterPasswordDesc": { - "message": "کلمه عبور در نقض داده پیدا شد. از یک کلمه عبور منحصر به فرد برای محافظت از حساب خود استفاده کنید. آیا مطمئنید که می‌خواهید از یک کلمه عبور افشا شده استفاده کنید؟" + "message": "کلمه عبور در افشای داده پیدا شد. از یک کلمه عبور منحصربه‌فرد برای محافظت از حساب کاربری خود استفاده کنید. آیا مطمئنید که می‌خواهید از یک کلمه عبور افشا شده استفاده کنید؟" }, "weakAndExposedMasterPassword": { "message": "کلمه عبور اصلی ضعیف و افشا شده" }, "weakAndBreachedMasterPasswordDesc": { - "message": "کلمه عبور ضعیف شناسایی و در یک نقض داده پیدا شد. از یک کلمه عبور قوی و منحصر به فرد برای محافظت از حساب خود استفاده کنید. آیا مطمئنید که می‌خواهید از این کلمه عبور استفاده کنید؟" + "message": "کلمه عبور ضعیف شناسایی و در یک افشای داده پیدا شد. از یک کلمه عبور قوی و منحصربه‌فرد برای محافظت از حساب کاربری خود استفاده کنید. آیا مطمئنید که می‌خواهید از این کلمه عبور استفاده کنید؟" }, "checkForBreaches": { - "message": "نقض اطلاعات شناخته شده برای این کلمه عبور را بررسی کنید" + "message": "بررسی نقض‌های داده شناخته شده برای این کلمه عبور" }, "important": { "message": "مهم:" @@ -3472,7 +3527,7 @@ "message": "مدیریت میان‌برها" }, "autofillShortcut": { - "message": "میانبر صفحه کلید پر کردن خودکار" + "message": "میان‌بر صفحه کلید پر کردن خودکار" }, "autofillLoginShortcutNotSet": { "message": "میان‌بر ورود خودکار تنظیم نشده است. این مورد را در تنظیمات مرورگر تغییر دهید." @@ -3487,7 +3542,7 @@ } }, "autofillShortcutTextSafari": { - "message": "میانبر پر کردن خودکار پیش‌فرض: $COMMAND$.", + "message": "میان‌بر پر کردن خودکار پیش‌فرض: $COMMAND$.", "placeholders": { "command": { "content": "$1", @@ -3522,11 +3577,17 @@ "requestAdminApproval": { "message": "درخواست تأیید مدیر" }, + "unableToCompleteLogin": { + "message": "Unable to complete login" + }, + "loginOnTrustedDeviceOrAskAdminToAssignPassword": { + "message": "You need to log in on a trusted device or ask your administrator to assign you a password." + }, "ssoIdentifierRequired": { "message": "شناسه سازمان SSO مورد نیاز است." }, "creatingAccountOn": { - "message": "در حال ساخت حساب روی" + "message": "در حال ساخت حساب کاربری روی" }, "checkYourEmail": { "message": "ایمیل خود را چک کنید" @@ -3587,7 +3648,7 @@ "message": "اعتماد به سازمان" }, "trust": { - "message": "اطمینان" + "message": "اعتماد" }, "doNotTrust": { "message": "اعتماد نکنید" @@ -3607,14 +3668,6 @@ "trustUser": { "message": "به کاربر اعتماد کنید" }, - "sendsNoItemsTitle": { - "message": "ارسال‌های فعالی نیست", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendsNoItemsMessage": { - "message": "از ارسال برای اشتراک‌گذاری امن اطلاعات رمزگذاری شده با هر کسی استفاده کنید.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "sendsTitleNoItems": { "message": "اطلاعات حساس را به‌صورت ایمن ارسال کنید", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -3858,7 +3911,7 @@ "message": "خطای درون ریزی" }, "importErrorDesc": { - "message": "مشکلی با داده‌هایی که سعی کردید وارد کنید وجود داشت. لطفاً خطاهای فهرست شده زیر را در فایل منبع خود برطرف کرده و دوباره امتحان کنید." + "message": "مشکلی با داده‌هایی که سعی کردید درون ریزی کنید وجود داشت. لطفاً خطاهای فهرست شده در زیر را در پرونده منبع خود برطرف کرده و دوباره امتحان کنید." }, "resolveTheErrorsBelowAndTryAgain": { "message": "خطاهای زیر را برطرف کرده و دوباره امتحان کنید." @@ -3930,7 +3983,7 @@ "message": "خطا در اتصال به سرویس Duo. از روش ورود دو مرحله‌ای دیگری استفاده کنید یا برای دریافت کمک با Duo تماس بگیرید." }, "duoRequiredForAccount": { - "message": "ورود دو مرحله ای Duo برای حساب کاربری شما لازم است." + "message": "ورود دو مرحله‌ای Duo برای حساب کاربری شما لازم است." }, "popoutExtension": { "message": "باز کردن پنجره جداگانه افزونه" @@ -3939,10 +3992,10 @@ "message": "اجرای Duo" }, "importFormatError": { - "message": "داده‌ها به درستی قالب‌بندی نشده‌اند. لطفا فایل وارد شده خود را بررسی و دوباره امتحان کنید." + "message": "داده‌ها به درستی قالب‌بندی نشده‌اند. لطفاً پرونده درون ریزی شده خود را بررسی و دوباره امتحان کنید." }, "importNothingError": { - "message": "چیزی وارد نشد." + "message": "چیزی درون ریزی نشد." }, "importEncKeyError": { "message": "خطا در رمزگشایی پرونده‌ی درون ریزی شده. کلید رمزگذاری شما با کلید رمزگذاری استفاده شده برای درون ریزی داده‌ها مطابقت ندارد." @@ -3954,7 +4007,7 @@ "message": "مقصد" }, "learnAboutImportOptions": { - "message": "درباره گزینه‌های برون ریزی خود بیاموزید" + "message": "درباره گزینه‌های درون ریزی خود بیاموزید" }, "selectImportFolder": { "message": "یک پوشه انتخاب کنید" @@ -3963,7 +4016,7 @@ "message": "انتخاب یک مجموعه" }, "importTargetHint": { - "message": "اگر می‌خواهید محتوای فایل وارد شده به $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": { @@ -4025,10 +4078,10 @@ "message": "کلید عبور کپی نمی‌شود" }, "passkeyNotCopiedAlert": { - "message": "کلید عبور در مورد شبیه سازی شده کپی نمی‌شود. آیا می‌خواهید به شبیه سازی این مورد ادامه دهید؟" + "message": "کلید عبور در مورد شبیه‌سازی شده کپی نمی‌شود. آیا می‌خواهید به شبیه‌سازی این مورد ادامه دهید؟" }, "passkeyFeatureIsNotImplementedForAccountsWithoutMasterPassword": { - "message": "تأیید توسط سایت آغازگر الزامی است. این ویژگی هنوز برای حساب‌های بدون کلمه عبور اصلی اجرا نشده است." + "message": "تأیید توسط سایت آغازگر الزامی است. این ویژگی هنوز برای حساب‌های کاربری بدون کلمه عبور اصلی اجرا نشده است." }, "logInWithPasskeyQuestion": { "message": "با کلید عبور وارد می‌شوید؟" @@ -4040,10 +4093,10 @@ "message": "هیچ کلمه عبوری برای این برنامه یافت نشد." }, "noMatchingPasskeyLogin": { - "message": "شما هیچ ورود مشابهی برای این سایت ندارید." + "message": "شما هیچ ورود مشابهی برای این وب‌سایت ندارید." }, "noMatchingLoginsForSite": { - "message": "ورود منطبق برای این سایت یافت نشد" + "message": "ورود منطبق برای این وب‌سایت یافت نشد" }, "searchSavePasskeyNewLogin": { "message": "جستجو یا ذخیره کلید عبور به عنوان ورود جدید" @@ -4133,7 +4186,7 @@ "message": "لطفاً برای ورود، از اطلاعات کاربری شرکت خود استفاده کنید." }, "seeDetailedInstructions": { - "message": "دستورالعمل‌های کامل را در سایت راهنمای ما مشاهده کنید در", + "message": "دستورالعمل‌های کامل را در وب‌سایت راهنمای ما مشاهده کنید در", "description": "This is followed a by a hyperlink to the help website." }, "importDirectlyFromLastPass": { @@ -4155,7 +4208,7 @@ "message": "تعویض حساب کاربری" }, "switchAccounts": { - "message": "تعویض حساب‌ها" + "message": "تعویض حساب‌های کاربری" }, "switchToAccount": { "message": "تعویض به حساب کاربری" @@ -4170,7 +4223,7 @@ "message": "حساب کاربری در درسترس" }, "accountLimitReached": { - "message": "محدودیت حساب کاربری تکمیل شد. برای افزودن حساب کاربری دیگر، از یک حساب خارج شوید." + "message": "محدودیت حساب کاربری تکمیل شد. برای افزودن حساب کاربری دیگر، از یک حساب کاربری خارج شوید." }, "active": { "message": "فعال" @@ -4194,7 +4247,7 @@ "message": "فقط یک بار" }, "alwaysForThisSite": { - "message": "همیشه برای این سایت" + "message": "همیشه برای این وب‌سایت" }, "domainAddedToExcludedDomains": { "message": "دامنه $DOMAIN$ به دامنه‌های مستثنی اضافه شد.", @@ -4209,6 +4262,26 @@ "message": "فرمت‌های رایج", "description": "Label indicating the most common import formats" }, + "uriMatchDefaultStrategyHint": { + "message": "تشخیص تطابق نشانی اینترنتی روشی است که Bitwarden برای شناسایی پیشنهادهای پر کردن خودکار استفاده می‌کند.", + "description": "Explains to the user that URI match detection determines how Bitwarden suggests autofill options, and clarifies that this default strategy applies when no specific match detection is set for a login item." + }, + "regExAdvancedOptionWarning": { + "message": "\"عبارت منظم\" یک گزینه پیشرفته است که خطر افشای اطلاعات ورود را افزایش می‌دهد.", + "description": "Content for dialog which warns a user when selecting 'regular expression' matching strategy as a cipher match strategy" + }, + "startsWithAdvancedOptionWarning": { + "message": "\"شروع با\" یک گزینه پیشرفته است که خطر افشای اطلاعات ورود را افزایش می‌دهد.", + "description": "Content for dialog which warns a user when selecting 'starts with' matching strategy as a cipher match strategy" + }, + "uriMatchWarningDialogLink": { + "message": "اطلاعات بیشتر درباره‌ی تشخیص تطابق", + "description": "Link to match detection docs on warning dialog for advance match strategy" + }, + "uriAdvancedOption": { + "message": "تنظیمات پیشرفته", + "description": "Advanced option placeholder for uri option component" + }, "confirmContinueToBrowserSettingsTitle": { "message": "ادامه به تنظیمات مرورگر؟", "description": "Title for dialog which asks if the user wants to proceed to a relevant browser settings page" @@ -4293,7 +4366,7 @@ "message": "موارد پیشنهادی" }, "autofillSuggestionsTip": { - "message": "یک مورد ورود برای این سایت ذخیره کنید تا به‌صورت خودکار پر شود" + "message": "یک مورد ورود برای این وب‌سایت ذخیره کنید تا به‌صورت خودکار پر شود" }, "yourVaultIsEmpty": { "message": "گاوصندوق‌تان خالی است" @@ -4345,7 +4418,7 @@ } }, "viewItemTitle": { - "message": "مشاهده آیتم - $ITEMNAME$", + "message": "مشاهده مورد - $ITEMNAME$", "description": "Title for a link that opens a view for an item.", "placeholders": { "itemname": { @@ -4419,7 +4492,7 @@ "message": "کپی تلفن" }, "copyAddress": { - "message": "کپی آدرس" + "message": "کپی نشانی" }, "adminConsole": { "message": "کنسول مدیر" @@ -4644,7 +4717,7 @@ "message": "افزودن وب‌سایت" }, "deleteWebsite": { - "message": "حذف وبسایت" + "message": "حذف وب‌سایت" }, "defaultLabel": { "message": "پیش‌فرض ($VALUE$)", @@ -4657,7 +4730,7 @@ } }, "showMatchDetection": { - "message": "نمایش تطبیق سایت $WEBSITE$", + "message": "نمایش شناسایی تطابق برای $WEBSITE$", "placeholders": { "website": { "content": "$1", @@ -4666,7 +4739,7 @@ } }, "hideMatchDetection": { - "message": "مخفی کردن تطبیق سایت $WEBSITE$", + "message": "مخفی کردن شناسایی تطابق $WEBSITE$", "placeholders": { "website": { "content": "$1", @@ -4768,7 +4841,7 @@ "message": "وقتی در پر کردن خودکار برای یک وب‌سایت خاص به مشکل برخوردید، از فیلد مرتبط استفاده کنید." }, "linkedLabelHelpText": { - "message": "شناسه Html، نام، aria-label یا محل نگهدار فیلد را وارد کنید." + "message": "شناسه html، نام، aria-label یا محل نگهدار فیلد را وارد کنید." }, "editField": { "message": "ویرایش فیلد" @@ -4870,7 +4943,7 @@ "message": "مجموعه‌ها با موفقیت اختصاص داده شدند" }, "nothingSelected": { - "message": "شما چیزی را انتخاب نکرده اید." + "message": "شما چیزی را انتخاب نکرده‌اید." }, "itemsMovedToOrg": { "message": "موارد به $ORGNAME$ منتقل شدند", @@ -4926,7 +4999,7 @@ "message": "فعالیت‌های حساب کاربری" }, "showNumberOfAutofillSuggestions": { - "message": "نمایش تعداد پیشنهادهای پر کردن خودکار ورود در آیکون افزونه" + "message": "نمایش تعداد پیشنهادهای پر کردن خودکار ورود در نماد افزونه" }, "showQuickCopyActions": { "message": "نمایش عملیات کپی سریع در گاوصندوق" @@ -5036,6 +5109,9 @@ "unlockPinSet": { "message": "بازکردن قفل کد پین تنظیم شد" }, + "unlockWithBiometricSet": { + "message": "باز کردن قفل با بیومتریک تنظیم شد" + }, "authenticating": { "message": "در حال احراز هویت" }, @@ -5271,7 +5347,7 @@ "message": "ورود سریع و آسان" }, "quickLoginBody": { - "message": "قفل بیومتریک و پر کردن خودکار را تنظیم کنید تا بدون وارد کردن حتی یک حرف وارد حساب‌های خود شوید." + "message": "قفل بیومتریک و پر کردن خودکار را تنظیم کنید تا بدون وارد کردن حتی یک حرف وارد حساب‌های کاربری خود شوید." }, "secureUser": { "message": "ورودهای خود را ارتقا دهید" @@ -5283,7 +5359,7 @@ "message": "داده‌های شما، زمانی که نیاز دارید و در جایی که نیاز دارید" }, "secureDevicesBody": { - "message": "کلمه‌های عبور نامحدود را در دستگاه‌های نامحدود با اپلیکیشن‌های موبایل، مرورگر و دسکتاپ Bitwarden ذخیره کنید." + "message": "کلمه‌های عبور نامحدود را در دستگاه‌های نامحدود با برنامه‌های موبایل، مرورگر و دسکتاپ Bitwarden ذخیره کنید." }, "nudgeBadgeAria": { "message": "۱ اعلان" @@ -5372,10 +5448,14 @@ "example": "Easily create strong and unique passwords by clicking on {icon} to help you keep your logins secure." }, "generatorNudgeBodyAria": { - "message": "با کلیک روی دکمه تولید رمز عبور، به‌راحتی کلمات عبور قوی و منحصر به‌ فرد ایجاد کنید تا ورودهای شما ایمن باقی بمانند.", + "message": "با کلیک روی دکمه تولید کلمه عبور، به‌راحتی کلمات عبور قوی و منحصر به‌ فرد ایجاد کنید تا ورودهای شما ایمن باقی بمانند.", "description": "Aria label for the body content of the generator nudge" }, "noPermissionsViewPage": { "message": "شما اجازه دسترسی به این صفحه را ندارید. لطفاً با حساب کاربری دیگری وارد شوید." + }, + "wasmNotSupported": { + "message": "WebAssembly در مرورگر شما پشتیبانی نمی‌شود یا فعال نیست. برای استفاده از برنامه Bitwarden، فعال بودن WebAssembly الزامی است.", + "description": "'WebAssembly' is a technical term and should not be translated." } } diff --git a/apps/browser/src/_locales/fi/messages.json b/apps/browser/src/_locales/fi/messages.json index 8e5eede202a..85c47f2733b 100644 --- a/apps/browser/src/_locales/fi/messages.json +++ b/apps/browser/src/_locales/fi/messages.json @@ -1173,6 +1173,12 @@ "message": "Voi ei! Emme voineet tallentaa tätä. Yritä syöttää tiedot manuaalisesti.", "description": "Detailed error message shown when saving login details fails." }, + "changePasswordWarning": { + "message": "After changing your password, you will need to log in with your new password. Active sessions on other devices will be logged out within one hour." + }, + "accountRecoveryUpdateMasterPasswordSubtitle": { + "message": "Change your master password to complete account recovery." + }, "enableChangedPasswordNotification": { "message": "Kysy päivitetäänkö kirjautumistieto" }, @@ -1365,8 +1371,8 @@ "featureUnavailable": { "message": "Ominaisuus ei ole käytettävissä" }, - "encryptionKeyMigrationRequired": { - "message": "Salausavaimen siirto vaaditaan. Päivitä salausavaimesi kirjautumalla verkkoholviin." + "legacyEncryptionUnsupported": { + "message": "Legacy encryption is no longer supported. Please contact support to recover your account." }, "premiumMembership": { "message": "Premium-jäsenyys" @@ -1922,6 +1928,9 @@ "typeSshKey": { "message": "SSH-avain" }, + "typeNote": { + "message": "Note" + }, "newItemHeader": { "message": "Uusi $TYPE$", "placeholders": { @@ -2153,8 +2162,8 @@ "setYourPinCode": { "message": "Aseta PIN-koodi Bitwardenin avaukselle. PIN-asetukset tyhjentyvät, jos kirjaudut laajennuksesta kokonaan ulos." }, - "setYourPinCode1": { - "message": "PIN-koodia käytetään pääsalasanasi sijasta Bitwarenin avaukseen. Määritetty PIN-koodi tyhjennetään, jos kirjaudut kokonaan ulos Bitwardenista." + "setPinCode": { + "message": "You can use this PIN to unlock Bitwarden. Your PIN will be reset if you ever fully log out of the application." }, "pinRequired": { "message": "PIN-koodi vaaditaan." @@ -2204,6 +2213,9 @@ "useThisPassword": { "message": "Käytä tätä salasanaa" }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, "useThisUsername": { "message": "Käytä tätä käyttäjätunnusta" }, @@ -2481,6 +2493,12 @@ "personalOwnershipPolicyInEffectImports": { "message": "Organisaatiokäytäntö estää kohteiden tuonnin yksityiseen holviisi." }, + "restrictCardTypeImport": { + "message": "Cannot import card item types" + }, + "restrictCardTypeImportDesc": { + "message": "A policy set by 1 or more organizations prevents you from importing cards to your vaults." + }, "domainsTitle": { "message": "Verkkotunnukset", "description": "A category title describing the concept of web domains" @@ -2512,6 +2530,10 @@ "change": { "message": "Vaihda" }, + "changePassword": { + "message": "Change password", + "description": "Change password button for browser at risk notification on login." + }, "changeButtonTitle": { "message": "Vaihda salasana - $ITEMNAME$", "placeholders": { @@ -2521,6 +2543,9 @@ } } }, + "atRiskPassword": { + "message": "At-risk password" + }, "atRiskPasswords": { "message": "Vaarantuneet salasanat" }, @@ -2555,6 +2580,26 @@ } } }, + "atRiskChangePrompt": { + "message": "Your password for this site is at-risk. $ORGANIZATION$ has requested that you change it.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + }, + "description": "Notification body when a login triggers an at-risk password change request and the change password domain is known." + }, + "atRiskNavigatePrompt": { + "message": "$ORGANIZATION$ wants you to change this password because it is at-risk. Navigate to your account settings to change the password.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + }, + "description": "Notification body when a login triggers an at-risk password change request and no change password domain is provided." + }, "reviewAndChangeAtRiskPassword": { "message": "Tarkasta ja vaihda yksi vaarantunut salasana" }, @@ -2674,6 +2719,10 @@ "message": "Kaikki Sendit", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "maxAccessCountReached": { + "message": "Max access count reached", + "description": "This text will be displayed after a Send has been accessed the maximum amount of times." + }, "hideTextByDefault": { "message": "Piilota teksti oletuksena" }, @@ -2876,6 +2925,9 @@ "emailVerificationRequiredDesc": { "message": "Sinun on vahvistettava sähköpostiosoitteesi käyttääksesi ominaisuutta. Voit vahvistaa osoitteesi verkkoholvissa." }, + "masterPasswordSuccessfullySet": { + "message": "Master password successfully set" + }, "updatedMasterPassword": { "message": "Pääsalasanasi on vaihdettu" }, @@ -3018,7 +3070,7 @@ "message": "A master password is no longer required for members of the following organization. Please confirm the domain below with your organization administrator." }, "organizationName": { - "message": "Organization name" + "message": "Organisaation nimi" }, "keyConnectorDomain": { "message": "Key Connector domain" @@ -3408,6 +3460,9 @@ "logInRequestSent": { "message": "Pyyntö lähetetty" }, + "masterPasswordChanged": { + "message": "Master password saved" + }, "exposedMasterPassword": { "message": "Paljastunut pääsalasana" }, @@ -3522,6 +3577,12 @@ "requestAdminApproval": { "message": "Pyydä hyväksyntää ylläpidolta" }, + "unableToCompleteLogin": { + "message": "Unable to complete login" + }, + "loginOnTrustedDeviceOrAskAdminToAssignPassword": { + "message": "You need to log in on a trusted device or ask your administrator to assign you a password." + }, "ssoIdentifierRequired": { "message": "Organisaation kertakirjautumistunniste tarvitaan." }, @@ -3607,14 +3668,6 @@ "trustUser": { "message": "Luota käyttäjään" }, - "sendsNoItemsTitle": { - "message": "Aktiivisia Sendejä ei ole", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendsNoItemsMessage": { - "message": "Sendillä voit jakaa salattuja tietoja turvallisesti kenelle tahansa.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "sendsTitleNoItems": { "message": "Send sensitive information safely", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -4209,6 +4262,26 @@ "message": "Yleiset muodot", "description": "Label indicating the most common import formats" }, + "uriMatchDefaultStrategyHint": { + "message": "URI match detection is how Bitwarden identifies autofill suggestions.", + "description": "Explains to the user that URI match detection determines how Bitwarden suggests autofill options, and clarifies that this default strategy applies when no specific match detection is set for a login item." + }, + "regExAdvancedOptionWarning": { + "message": "\"Regular expression\" is an advanced option with increased risk of exposing credentials.", + "description": "Content for dialog which warns a user when selecting 'regular expression' matching strategy as a cipher match strategy" + }, + "startsWithAdvancedOptionWarning": { + "message": "\"Starts with\" is an advanced option with increased risk of exposing credentials.", + "description": "Content for dialog which warns a user when selecting 'starts with' matching strategy as a cipher match strategy" + }, + "uriMatchWarningDialogLink": { + "message": "More about match detection", + "description": "Link to match detection docs on warning dialog for advance match strategy" + }, + "uriAdvancedOption": { + "message": "Advanced options", + "description": "Advanced option placeholder for uri option component" + }, "confirmContinueToBrowserSettingsTitle": { "message": "Avataanko selaimen asetukset?", "description": "Title for dialog which asks if the user wants to proceed to a relevant browser settings page" @@ -5036,6 +5109,9 @@ "unlockPinSet": { "message": "Unlock PIN set" }, + "unlockWithBiometricSet": { + "message": "Unlock with biometrics set" + }, "authenticating": { "message": "Todennetaan" }, @@ -5377,5 +5453,9 @@ }, "noPermissionsViewPage": { "message": "You do not have permissions to view this page. Try logging in with a different account." + }, + "wasmNotSupported": { + "message": "WebAssembly is not supported on your browser or is not enabled. WebAssembly is required to use the Bitwarden app.", + "description": "'WebAssembly' is a technical term and should not be translated." } } diff --git a/apps/browser/src/_locales/fil/messages.json b/apps/browser/src/_locales/fil/messages.json index e8e45249773..4e3f94cb474 100644 --- a/apps/browser/src/_locales/fil/messages.json +++ b/apps/browser/src/_locales/fil/messages.json @@ -1173,6 +1173,12 @@ "message": "Oh no! We couldn't save this. Try entering the details manually.", "description": "Detailed error message shown when saving login details fails." }, + "changePasswordWarning": { + "message": "After changing your password, you will need to log in with your new password. Active sessions on other devices will be logged out within one hour." + }, + "accountRecoveryUpdateMasterPasswordSubtitle": { + "message": "Change your master password to complete account recovery." + }, "enableChangedPasswordNotification": { "message": "Tanungin ang update ng umiiral na login" }, @@ -1365,8 +1371,8 @@ "featureUnavailable": { "message": "Hindi magagamit ang tampok" }, - "encryptionKeyMigrationRequired": { - "message": "Kinakailangan ang paglilipat ng encryption key. Mangyaring mag-login sa pamamagitan ng web vault upang i-update ang iyong encryption key." + "legacyEncryptionUnsupported": { + "message": "Legacy encryption is no longer supported. Please contact support to recover your account." }, "premiumMembership": { "message": "Pagiging miyembro ng premium" @@ -1922,6 +1928,9 @@ "typeSshKey": { "message": "SSH key" }, + "typeNote": { + "message": "Note" + }, "newItemHeader": { "message": "New $TYPE$", "placeholders": { @@ -2153,8 +2162,8 @@ "setYourPinCode": { "message": "Itakda ang iyong PIN code para sa pag-unlock ng Bitwarden. Ang iyong mga setting ng PIN ay ma-reset kung kailanman ay lubusang lumabas ka mula sa application." }, - "setYourPinCode1": { - "message": "Your PIN will be used to unlock Bitwarden instead of your master password. Your PIN will reset if you ever fully log out of Bitwarden." + "setPinCode": { + "message": "You can use this PIN to unlock Bitwarden. Your PIN will be reset if you ever fully log out of the application." }, "pinRequired": { "message": "Kinakailangan ang PIN code." @@ -2204,6 +2213,9 @@ "useThisPassword": { "message": "Use this password" }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, "useThisUsername": { "message": "Use this username" }, @@ -2481,6 +2493,12 @@ "personalOwnershipPolicyInEffectImports": { "message": "Hinarang ng isang patakaran ng organisasyon ang pag-import ng mga item sa iyong vault." }, + "restrictCardTypeImport": { + "message": "Cannot import card item types" + }, + "restrictCardTypeImportDesc": { + "message": "A policy set by 1 or more organizations prevents you from importing cards to your vaults." + }, "domainsTitle": { "message": "Domains", "description": "A category title describing the concept of web domains" @@ -2512,6 +2530,10 @@ "change": { "message": "Change" }, + "changePassword": { + "message": "Change password", + "description": "Change password button for browser at risk notification on login." + }, "changeButtonTitle": { "message": "Change password - $ITEMNAME$", "placeholders": { @@ -2521,6 +2543,9 @@ } } }, + "atRiskPassword": { + "message": "At-risk password" + }, "atRiskPasswords": { "message": "At-risk passwords" }, @@ -2555,6 +2580,26 @@ } } }, + "atRiskChangePrompt": { + "message": "Your password for this site is at-risk. $ORGANIZATION$ has requested that you change it.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + }, + "description": "Notification body when a login triggers an at-risk password change request and the change password domain is known." + }, + "atRiskNavigatePrompt": { + "message": "$ORGANIZATION$ wants you to change this password because it is at-risk. Navigate to your account settings to change the password.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + }, + "description": "Notification body when a login triggers an at-risk password change request and no change password domain is provided." + }, "reviewAndChangeAtRiskPassword": { "message": "Review and change one at-risk password" }, @@ -2674,6 +2719,10 @@ "message": "Lahat ng Mga Padala", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "maxAccessCountReached": { + "message": "Max access count reached", + "description": "This text will be displayed after a Send has been accessed the maximum amount of times." + }, "hideTextByDefault": { "message": "Hide text by default" }, @@ -2876,6 +2925,9 @@ "emailVerificationRequiredDesc": { "message": "Kailangan mong i-verify ang iyong email upang gamitin ang tampok na ito. Maaari mong i-verify ang iyong email sa web vault." }, + "masterPasswordSuccessfullySet": { + "message": "Master password successfully set" + }, "updatedMasterPassword": { "message": "I-update ang master password" }, @@ -3408,6 +3460,9 @@ "logInRequestSent": { "message": "Request sent" }, + "masterPasswordChanged": { + "message": "Master password saved" + }, "exposedMasterPassword": { "message": "Nakalantad na Master Password" }, @@ -3522,6 +3577,12 @@ "requestAdminApproval": { "message": "Request admin approval" }, + "unableToCompleteLogin": { + "message": "Unable to complete login" + }, + "loginOnTrustedDeviceOrAskAdminToAssignPassword": { + "message": "You need to log in on a trusted device or ask your administrator to assign you a password." + }, "ssoIdentifierRequired": { "message": "Organization SSO identifier is required." }, @@ -3607,14 +3668,6 @@ "trustUser": { "message": "Trust user" }, - "sendsNoItemsTitle": { - "message": "No active Sends", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendsNoItemsMessage": { - "message": "Use Send to securely share encrypted information with anyone.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "sendsTitleNoItems": { "message": "Send sensitive information safely", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -4209,6 +4262,26 @@ "message": "Common formats", "description": "Label indicating the most common import formats" }, + "uriMatchDefaultStrategyHint": { + "message": "URI match detection is how Bitwarden identifies autofill suggestions.", + "description": "Explains to the user that URI match detection determines how Bitwarden suggests autofill options, and clarifies that this default strategy applies when no specific match detection is set for a login item." + }, + "regExAdvancedOptionWarning": { + "message": "\"Regular expression\" is an advanced option with increased risk of exposing credentials.", + "description": "Content for dialog which warns a user when selecting 'regular expression' matching strategy as a cipher match strategy" + }, + "startsWithAdvancedOptionWarning": { + "message": "\"Starts with\" is an advanced option with increased risk of exposing credentials.", + "description": "Content for dialog which warns a user when selecting 'starts with' matching strategy as a cipher match strategy" + }, + "uriMatchWarningDialogLink": { + "message": "More about match detection", + "description": "Link to match detection docs on warning dialog for advance match strategy" + }, + "uriAdvancedOption": { + "message": "Advanced options", + "description": "Advanced option placeholder for uri option component" + }, "confirmContinueToBrowserSettingsTitle": { "message": "Continue to browser settings?", "description": "Title for dialog which asks if the user wants to proceed to a relevant browser settings page" @@ -5036,6 +5109,9 @@ "unlockPinSet": { "message": "Unlock PIN set" }, + "unlockWithBiometricSet": { + "message": "Unlock with biometrics set" + }, "authenticating": { "message": "Authenticating" }, @@ -5377,5 +5453,9 @@ }, "noPermissionsViewPage": { "message": "You do not have permissions to view this page. Try logging in with a different account." + }, + "wasmNotSupported": { + "message": "WebAssembly is not supported on your browser or is not enabled. WebAssembly is required to use the Bitwarden app.", + "description": "'WebAssembly' is a technical term and should not be translated." } } diff --git a/apps/browser/src/_locales/fr/messages.json b/apps/browser/src/_locales/fr/messages.json index 736fd21349e..efcc28ddcea 100644 --- a/apps/browser/src/_locales/fr/messages.json +++ b/apps/browser/src/_locales/fr/messages.json @@ -3,7 +3,7 @@ "message": "Bitwarden" }, "appLogoLabel": { - "message": "Bitwarden logo" + "message": "Logo de Bitwarden" }, "extName": { "message": "Gestionnaire de mots de passe Bitwarden", @@ -887,7 +887,7 @@ "message": "Suivez les étapes ci-dessous afin de réussir à vous connecter." }, "followTheStepsBelowToFinishLoggingInWithSecurityKey": { - "message": "Follow the steps below to finish logging in with your security key." + "message": "Suivez les étapes ci-dessous pour terminer la connexion avec votre clé de sécurité." }, "restartRegistration": { "message": "Redémarrer l'inscription" @@ -1080,7 +1080,7 @@ "description": "Tooltip and Aria label for edit button on cipher item" }, "newNotification": { - "message": "New notification" + "message": "Nouvelle notification" }, "labelWithNotification": { "message": "$LABEL$: New notification", @@ -1093,11 +1093,11 @@ } }, "notificationLoginSaveConfirmation": { - "message": "saved to Bitwarden.", + "message": "enregistré dans Bitwarden.", "description": "Shown to user after item is saved." }, "notificationLoginUpdatedConfirmation": { - "message": "updated in Bitwarden.", + "message": "mis à jour dans Bitwarden.", "description": "Shown to user after item is updated." }, "selectItemAriaLabel": { @@ -1121,15 +1121,15 @@ "description": "Button text for updating an existing login entry." }, "unlockToSave": { - "message": "Unlock to save this login", + "message": "Déverrouiller pour enregistrer l'identifiant", "description": "User prompt to take action in order to save the login they just entered." }, "saveLogin": { - "message": "Save login", + "message": "Enregistrer l'identifiant", "description": "Prompt asking the user if they want to save their login details." }, "updateLogin": { - "message": "Update existing login", + "message": "Mettre à jour de l'identifiant existant", "description": "Prompt asking the user if they want to update an existing login entry." }, "loginSaveSuccess": { @@ -1162,7 +1162,7 @@ "description": "Shown to user after login is updated." }, "nextSecurityTaskAction": { - "message": "Change next password", + "message": "Changer le mot de passe suivant", "description": "Message prompting user to undertake completion of another security task." }, "saveFailure": { @@ -1173,6 +1173,12 @@ "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." }, + "changePasswordWarning": { + "message": "After changing your password, you will need to log in with your new password. Active sessions on other devices will be logged out within one hour." + }, + "accountRecoveryUpdateMasterPasswordSubtitle": { + "message": "Change your master password to complete account recovery." + }, "enableChangedPasswordNotification": { "message": "Demander de mettre à jour un identifiant existant" }, @@ -1365,8 +1371,8 @@ "featureUnavailable": { "message": "Fonctionnalité indisponible" }, - "encryptionKeyMigrationRequired": { - "message": "Migration de la clé de chiffrement nécessaire. Veuillez vous connecter sur le coffre web pour mettre à jour votre clé de chiffrement." + "legacyEncryptionUnsupported": { + "message": "Legacy encryption is no longer supported. Please contact support to recover your account." }, "premiumMembership": { "message": "Adhésion Premium" @@ -1606,7 +1612,7 @@ "message": "Turn off your browser's autofill settings, so they don't conflict with Bitwarden." }, "turnOffBrowserAutofill": { - "message": "Turn off $BROWSER$ autofill", + "message": "Désactiver le remplissage automatique de $BROWSER$", "placeholders": { "browser": { "content": "$1", @@ -1615,7 +1621,7 @@ } }, "turnOffAutofill": { - "message": "Turn off autofill" + "message": "Désactiver la saisie automatique" }, "showInlineMenuLabel": { "message": "Afficher les suggestions de saisie automatique dans les champs d'un formulaire" @@ -1922,6 +1928,9 @@ "typeSshKey": { "message": "Clé SSH" }, + "typeNote": { + "message": "Note" + }, "newItemHeader": { "message": "Créer un(e) $TYPE$", "placeholders": { @@ -2153,8 +2162,8 @@ "setYourPinCode": { "message": "Définissez votre code PIN pour déverrouiller Bitwarden. Les paramètres relatifs à votre code PIN seront réinitialisés si vous vous déconnectez complètement de l'application." }, - "setYourPinCode1": { - "message": "Votre code PIN sera utilisé pour déverrouiller Bitwarden au lieu de votre mot de passe principal. Votre code PIN sera réinitialisé si vous vous déconnectez complètement de Bitwarden." + "setPinCode": { + "message": "You can use this PIN to unlock Bitwarden. Your PIN will be reset if you ever fully log out of the application." }, "pinRequired": { "message": "Le code PIN est requis." @@ -2204,6 +2213,9 @@ "useThisPassword": { "message": "Utiliser ce mot de passe" }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, "useThisUsername": { "message": "Utiliser ce nom d'utilisateur" }, @@ -2374,7 +2386,7 @@ "message": "Politique de confidentialité" }, "yourNewPasswordCannotBeTheSameAsYourCurrentPassword": { - "message": "Your new password cannot be the same as your current password." + "message": "Votre nouveau mot de passe ne peut être le même que votre mot de passe actuel." }, "hintEqualsPassword": { "message": "Votre indice de mot de passe ne peut pas être identique à votre mot de passe." @@ -2481,6 +2493,12 @@ "personalOwnershipPolicyInEffectImports": { "message": "Une politique d'organisation a bloqué l'import d'éléments dans votre coffre personel." }, + "restrictCardTypeImport": { + "message": "Cannot import card item types" + }, + "restrictCardTypeImportDesc": { + "message": "A policy set by 1 or more organizations prevents you from importing cards to your vaults." + }, "domainsTitle": { "message": "Domaines", "description": "A category title describing the concept of web domains" @@ -2512,6 +2530,10 @@ "change": { "message": "Modifier" }, + "changePassword": { + "message": "Changer le mot de passe", + "description": "Change password button for browser at risk notification on login." + }, "changeButtonTitle": { "message": "Modifier le mot de passe - $ITEMNAME$", "placeholders": { @@ -2521,6 +2543,9 @@ } } }, + "atRiskPassword": { + "message": "Mot de passe à risque" + }, "atRiskPasswords": { "message": "Mots de passe à risque" }, @@ -2555,6 +2580,26 @@ } } }, + "atRiskChangePrompt": { + "message": "Your password for this site is at-risk. $ORGANIZATION$ has requested that you change it.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + }, + "description": "Notification body when a login triggers an at-risk password change request and the change password domain is known." + }, + "atRiskNavigatePrompt": { + "message": "$ORGANIZATION$ wants you to change this password because it is at-risk. Navigate to your account settings to change the password.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + }, + "description": "Notification body when a login triggers an at-risk password change request and no change password domain is provided." + }, "reviewAndChangeAtRiskPassword": { "message": "Examiner et modifier un mot de passe à risque" }, @@ -2674,6 +2719,10 @@ "message": "Tous les Sends", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "maxAccessCountReached": { + "message": "Max access count reached", + "description": "This text will be displayed after a Send has been accessed the maximum amount of times." + }, "hideTextByDefault": { "message": "Masquer le texte par défaut" }, @@ -2876,6 +2925,9 @@ "emailVerificationRequiredDesc": { "message": "Vous devez vérifier votre courriel pour utiliser cette fonctionnalité. Vous pouvez vérifier votre courriel dans le coffre web." }, + "masterPasswordSuccessfullySet": { + "message": "Master password successfully set" + }, "updatedMasterPassword": { "message": "Mot de passe principal mis à jour" }, @@ -3018,7 +3070,7 @@ "message": "A master password is no longer required for members of the following organization. Please confirm the domain below with your organization administrator." }, "organizationName": { - "message": "Organization name" + "message": "Nom de l'organisation" }, "keyConnectorDomain": { "message": "Key Connector domain" @@ -3408,6 +3460,9 @@ "logInRequestSent": { "message": "Demande envoyée" }, + "masterPasswordChanged": { + "message": "Master password saved" + }, "exposedMasterPassword": { "message": "Mot de passe principal exposé" }, @@ -3522,6 +3577,12 @@ "requestAdminApproval": { "message": "Demander l'approbation de l'administrateur" }, + "unableToCompleteLogin": { + "message": "Unable to complete login" + }, + "loginOnTrustedDeviceOrAskAdminToAssignPassword": { + "message": "You need to log in on a trusted device or ask your administrator to assign you a password." + }, "ssoIdentifierRequired": { "message": "Identifiant SSO de l'organisation requis." }, @@ -3584,13 +3645,13 @@ "message": "Appareil de confiance" }, "trustOrganization": { - "message": "Trust organization" + "message": "Faire confiance à l'organisation" }, "trust": { - "message": "Trust" + "message": "Faire confiance" }, "doNotTrust": { - "message": "Do not trust" + "message": "Ne pas faire confiance" }, "organizationNotTrusted": { "message": "Organization is not trusted" @@ -3605,15 +3666,7 @@ "message": "This organization has an Enterprise policy that will enroll you in account recovery. Enrollment will allow organization administrators to change your password. Only proceed if you recognize this organization and the fingerprint phrase displayed below matches the organization's fingerprint." }, "trustUser": { - "message": "Trust user" - }, - "sendsNoItemsTitle": { - "message": "Pas de Send actif", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendsNoItemsMessage": { - "message": "Utilisez Send pour partager en toute sécurité des informations chiffrées avec tout le monde.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + "message": "Faire confiance à l'utilisateur" }, "sendsTitleNoItems": { "message": "Send sensitive information safely", @@ -3751,7 +3804,7 @@ "description": "Toast message for informing the user that autofill on page load has been set to the default setting." }, "turnOffMasterPasswordPromptToEditField": { - "message": "Désactivez la resaisie du mot de passe maître pour éditer ce champ", + "message": "Désactivez la ressaisie du mot de passe principal pour modifier ce champ", "description": "Message appearing below the autofill on load message when master password reprompt is set for a vault item." }, "toggleSideNavigation": { @@ -4209,6 +4262,26 @@ "message": "Formats communs", "description": "Label indicating the most common import formats" }, + "uriMatchDefaultStrategyHint": { + "message": "URI match detection is how Bitwarden identifies autofill suggestions.", + "description": "Explains to the user that URI match detection determines how Bitwarden suggests autofill options, and clarifies that this default strategy applies when no specific match detection is set for a login item." + }, + "regExAdvancedOptionWarning": { + "message": "\"Regular expression\" is an advanced option with increased risk of exposing credentials.", + "description": "Content for dialog which warns a user when selecting 'regular expression' matching strategy as a cipher match strategy" + }, + "startsWithAdvancedOptionWarning": { + "message": "\"Starts with\" is an advanced option with increased risk of exposing credentials.", + "description": "Content for dialog which warns a user when selecting 'starts with' matching strategy as a cipher match strategy" + }, + "uriMatchWarningDialogLink": { + "message": "More about match detection", + "description": "Link to match detection docs on warning dialog for advance match strategy" + }, + "uriAdvancedOption": { + "message": "Options avancées", + "description": "Advanced option placeholder for uri option component" + }, "confirmContinueToBrowserSettingsTitle": { "message": "Continuer vers les paramètres du navigateur ?", "description": "Title for dialog which asks if the user wants to proceed to a relevant browser settings page" @@ -4540,19 +4613,19 @@ } }, "downloadBitwarden": { - "message": "Download Bitwarden" + "message": "Télécharger Bitwarden" }, "downloadBitwardenOnAllDevices": { - "message": "Download Bitwarden on all devices" + "message": "Télécharger Bitwarden sur tous les appareils" }, "getTheMobileApp": { - "message": "Get the mobile app" + "message": "Télécharger l'application mobile" }, "getTheMobileAppDesc": { "message": "Access your passwords on the go with the Bitwarden mobile app." }, "getTheDesktopApp": { - "message": "Get the desktop app" + "message": "Télécharger l'application de bureau" }, "getTheDesktopAppDesc": { "message": "Access your vault without a browser, then set up unlock with biometrics to expedite unlocking in both the desktop app and browser extension." @@ -4564,7 +4637,7 @@ "message": "Get it on Google Play" }, "downloadOnTheAppStore": { - "message": "Download on the App Store" + "message": "Télécharger depuis l’App Store" }, "permanentlyDeleteAttachmentConfirmation": { "message": "Êtes-vous sûr de vouloir supprimer définitivement cette pièce jointe ?" @@ -4771,10 +4844,10 @@ "message": "Entrez l'identifiant html, le nom, l'étiquette aria ou l'espace réservé du champ." }, "editField": { - "message": "Éditer le champ" + "message": "Modifier le champ" }, "editFieldLabel": { - "message": "Éditer $LABEL$", + "message": "Modifier $LABEL$", "placeholders": { "label": { "content": "$1", @@ -5028,7 +5101,7 @@ "message": "Le déverrouillage par biométrie n'est pas disponible actuellement pour une raison inconnue." }, "unlockVault": { - "message": "Unlock your vault in seconds" + "message": "Déverouillez votre coffre en quelques secondes" }, "unlockVaultDesc": { "message": "You can customize your unlock and timeout settings to more quickly access your vault." @@ -5036,6 +5109,9 @@ "unlockPinSet": { "message": "Unlock PIN set" }, + "unlockWithBiometricSet": { + "message": "Unlock with biometrics set" + }, "authenticating": { "message": "Authentification" }, @@ -5253,22 +5329,22 @@ "message": "Changer le mot de passe à risque" }, "settingsVaultOptions": { - "message": "Vault options" + "message": "Options du coffre" }, "emptyVaultDescription": { "message": "The vault protects more than just your passwords. Store secure logins, IDs, cards and notes securely here." }, "introCarouselLabel": { - "message": "Welcome to Bitwarden" + "message": "Bienvenue sur Bitwarden" }, "securityPrioritized": { - "message": "Security, prioritized" + "message": "Priorité à la sécurité" }, "securityPrioritizedBody": { "message": "Save logins, cards, and identities to your secure vault. Bitwarden uses zero-knowledge, end-to-end encryption to protect what’s important to you." }, "quickLogin": { - "message": "Quick and easy login" + "message": "Connexion rapide et facile" }, "quickLoginBody": { "message": "Set up biometric unlock and autofill to log into your accounts without typing a single letter." @@ -5295,10 +5371,10 @@ "message": "Use the importer to quickly transfer logins to Bitwarden without manually adding them." }, "emptyVaultNudgeButton": { - "message": "Import now" + "message": "Importer maintenant" }, "hasItemsVaultNudgeTitle": { - "message": "Welcome to your vault!" + "message": "Bienvenue dans votre coffre !" }, "hasItemsVaultNudgeBodyOne": { "message": "Autofill items for the current page" @@ -5310,7 +5386,7 @@ "message": "Search your vault for something else" }, "newLoginNudgeTitle": { - "message": "Save time with autofill" + "message": "Gagnez du temps avec le remplissage automatique" }, "newLoginNudgeBodyOne": { "message": "Include a", @@ -5318,7 +5394,7 @@ "example": "Include a Website so this login appears as an autofill suggestion." }, "newLoginNudgeBodyBold": { - "message": "Website", + "message": "Site internet", "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", "example": "Include a Website so this login appears as an autofill suggestion." }, @@ -5354,7 +5430,7 @@ "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, "newSshNudgeBodyTwo": { - "message": "Learn more about SSH agent", + "message": "En savoir plus sur l'agent SSH", "description": "Two part message", "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, @@ -5377,5 +5453,9 @@ }, "noPermissionsViewPage": { "message": "You do not have permissions to view this page. Try logging in with a different account." + }, + "wasmNotSupported": { + "message": "WebAssembly is not supported on your browser or is not enabled. WebAssembly is required to use the Bitwarden app.", + "description": "'WebAssembly' is a technical term and should not be translated." } } diff --git a/apps/browser/src/_locales/gl/messages.json b/apps/browser/src/_locales/gl/messages.json index e10287f3e7b..71841239698 100644 --- a/apps/browser/src/_locales/gl/messages.json +++ b/apps/browser/src/_locales/gl/messages.json @@ -1173,6 +1173,12 @@ "message": "Oh no! We couldn't save this. Try entering the details manually.", "description": "Detailed error message shown when saving login details fails." }, + "changePasswordWarning": { + "message": "After changing your password, you will need to log in with your new password. Active sessions on other devices will be logged out within one hour." + }, + "accountRecoveryUpdateMasterPasswordSubtitle": { + "message": "Change your master password to complete account recovery." + }, "enableChangedPasswordNotification": { "message": "Ofrecer actualizar as credenciais xa gardadas" }, @@ -1365,8 +1371,8 @@ "featureUnavailable": { "message": "Función non dispoñible" }, - "encryptionKeyMigrationRequired": { - "message": "Requírese mudar a clave de cifrado. Por favor, inicia sesión na aplicación web para actualizala." + "legacyEncryptionUnsupported": { + "message": "Legacy encryption is no longer supported. Please contact support to recover your account." }, "premiumMembership": { "message": "Plan Prémium" @@ -1922,6 +1928,9 @@ "typeSshKey": { "message": "Clave SSH" }, + "typeNote": { + "message": "Note" + }, "newItemHeader": { "message": "Novo $TYPE$", "placeholders": { @@ -2153,8 +2162,8 @@ "setYourPinCode": { "message": "Crea un PIN para abrir a caixa forte. Se algunha vez pechas a sesión en Bitwarden perderase a configuración deste PIN." }, - "setYourPinCode1": { - "message": "O PIN empregarase no lugar do contrasinal mestre para abrir a caixa forte. Se pechas a sesión en Bitwarden perderase a configuración do PIN." + "setPinCode": { + "message": "You can use this PIN to unlock Bitwarden. Your PIN will be reset if you ever fully log out of the application." }, "pinRequired": { "message": "PIN requirido." @@ -2204,6 +2213,9 @@ "useThisPassword": { "message": "Usar este contrasinal" }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, "useThisUsername": { "message": "Usar este nome de usuario" }, @@ -2481,6 +2493,12 @@ "personalOwnershipPolicyInEffectImports": { "message": "Unha directiva da empresa impide importar entradas á túa caixa forte individual." }, + "restrictCardTypeImport": { + "message": "Cannot import card item types" + }, + "restrictCardTypeImportDesc": { + "message": "A policy set by 1 or more organizations prevents you from importing cards to your vaults." + }, "domainsTitle": { "message": "Dominios", "description": "A category title describing the concept of web domains" @@ -2512,6 +2530,10 @@ "change": { "message": "Change" }, + "changePassword": { + "message": "Change password", + "description": "Change password button for browser at risk notification on login." + }, "changeButtonTitle": { "message": "Change password - $ITEMNAME$", "placeholders": { @@ -2521,6 +2543,9 @@ } } }, + "atRiskPassword": { + "message": "At-risk password" + }, "atRiskPasswords": { "message": "At-risk passwords" }, @@ -2555,6 +2580,26 @@ } } }, + "atRiskChangePrompt": { + "message": "Your password for this site is at-risk. $ORGANIZATION$ has requested that you change it.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + }, + "description": "Notification body when a login triggers an at-risk password change request and the change password domain is known." + }, + "atRiskNavigatePrompt": { + "message": "$ORGANIZATION$ wants you to change this password because it is at-risk. Navigate to your account settings to change the password.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + }, + "description": "Notification body when a login triggers an at-risk password change request and no change password domain is provided." + }, "reviewAndChangeAtRiskPassword": { "message": "Review and change one at-risk password" }, @@ -2674,6 +2719,10 @@ "message": "Todos os Sends", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "maxAccessCountReached": { + "message": "Max access count reached", + "description": "This text will be displayed after a Send has been accessed the maximum amount of times." + }, "hideTextByDefault": { "message": "Ocultar texto por defecto" }, @@ -2876,6 +2925,9 @@ "emailVerificationRequiredDesc": { "message": "Debes verificar o teu correo electrónico para empregar esta función. Podes facelo dende a aplicación web." }, + "masterPasswordSuccessfullySet": { + "message": "Master password successfully set" + }, "updatedMasterPassword": { "message": "Contrasinal mestre actualizado" }, @@ -3408,6 +3460,9 @@ "logInRequestSent": { "message": "Request sent" }, + "masterPasswordChanged": { + "message": "Master password saved" + }, "exposedMasterPassword": { "message": "Contrasinal mestre filtrado" }, @@ -3522,6 +3577,12 @@ "requestAdminApproval": { "message": "Solicitar aprobación do administrador" }, + "unableToCompleteLogin": { + "message": "Unable to complete login" + }, + "loginOnTrustedDeviceOrAskAdminToAssignPassword": { + "message": "You need to log in on a trusted device or ask your administrator to assign you a password." + }, "ssoIdentifierRequired": { "message": "Identificador SSO da organización requirido." }, @@ -3607,14 +3668,6 @@ "trustUser": { "message": "Trust user" }, - "sendsNoItemsTitle": { - "message": "Sen Sends activos", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendsNoItemsMessage": { - "message": "Usar send para compartir información cifrada con quen queiras.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "sendsTitleNoItems": { "message": "Send sensitive information safely", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -4209,6 +4262,26 @@ "message": "Formatos comúns", "description": "Label indicating the most common import formats" }, + "uriMatchDefaultStrategyHint": { + "message": "URI match detection is how Bitwarden identifies autofill suggestions.", + "description": "Explains to the user that URI match detection determines how Bitwarden suggests autofill options, and clarifies that this default strategy applies when no specific match detection is set for a login item." + }, + "regExAdvancedOptionWarning": { + "message": "\"Regular expression\" is an advanced option with increased risk of exposing credentials.", + "description": "Content for dialog which warns a user when selecting 'regular expression' matching strategy as a cipher match strategy" + }, + "startsWithAdvancedOptionWarning": { + "message": "\"Starts with\" is an advanced option with increased risk of exposing credentials.", + "description": "Content for dialog which warns a user when selecting 'starts with' matching strategy as a cipher match strategy" + }, + "uriMatchWarningDialogLink": { + "message": "More about match detection", + "description": "Link to match detection docs on warning dialog for advance match strategy" + }, + "uriAdvancedOption": { + "message": "Advanced options", + "description": "Advanced option placeholder for uri option component" + }, "confirmContinueToBrowserSettingsTitle": { "message": "Ir ós axustes do navegador?", "description": "Title for dialog which asks if the user wants to proceed to a relevant browser settings page" @@ -5036,6 +5109,9 @@ "unlockPinSet": { "message": "Unlock PIN set" }, + "unlockWithBiometricSet": { + "message": "Unlock with biometrics set" + }, "authenticating": { "message": "Autenticando" }, @@ -5377,5 +5453,9 @@ }, "noPermissionsViewPage": { "message": "You do not have permissions to view this page. Try logging in with a different account." + }, + "wasmNotSupported": { + "message": "WebAssembly is not supported on your browser or is not enabled. WebAssembly is required to use the Bitwarden app.", + "description": "'WebAssembly' is a technical term and should not be translated." } } diff --git a/apps/browser/src/_locales/he/messages.json b/apps/browser/src/_locales/he/messages.json index 1b264d9a70a..b9a0a3dada4 100644 --- a/apps/browser/src/_locales/he/messages.json +++ b/apps/browser/src/_locales/he/messages.json @@ -3,7 +3,7 @@ "message": "Bitwarden" }, "appLogoLabel": { - "message": "Bitwarden logo" + "message": "הלוגו של Bitwarden" }, "extName": { "message": "מנהל הסיסמאות Bitwarden", @@ -1173,6 +1173,12 @@ "message": "או לא! לא יכלנו לשמור זאת. נסה להזין את הפרטים באופן ידני.", "description": "Detailed error message shown when saving login details fails." }, + "changePasswordWarning": { + "message": "After changing your password, you will need to log in with your new password. Active sessions on other devices will be logged out within one hour." + }, + "accountRecoveryUpdateMasterPasswordSubtitle": { + "message": "Change your master password to complete account recovery." + }, "enableChangedPasswordNotification": { "message": "שאל אם לעדכן פרטי כניסה קיימת" }, @@ -1365,8 +1371,8 @@ "featureUnavailable": { "message": "התכונה אינה זמינה" }, - "encryptionKeyMigrationRequired": { - "message": "נדרשת הגירת מפתח הצפנה. נא להיכנס דרך כספת הרשת כדי לעדכן את מפתח ההצפנה שלך." + "legacyEncryptionUnsupported": { + "message": "Legacy encryption is no longer supported. Please contact support to recover your account." }, "premiumMembership": { "message": "חברות פרימיום" @@ -1922,6 +1928,9 @@ "typeSshKey": { "message": "מפתח SSH" }, + "typeNote": { + "message": "Note" + }, "newItemHeader": { "message": "$TYPE$ חדש", "placeholders": { @@ -2153,8 +2162,8 @@ "setYourPinCode": { "message": "קבע קוד PIN לביטול נעילת Bitwarden. הגדרות הPIN יאופסו אם תבצע יציאה מהתוכנה." }, - "setYourPinCode1": { - "message": "ה־PIN שלך ישמש לביטול נעילת Bitwarden במקום הסיסמה הראשית שלך. ה־PIN שלך יאופס אם אי פעם תצא באופן מלא מ־Bitwarden." + "setPinCode": { + "message": "You can use this PIN to unlock Bitwarden. Your PIN will be reset if you ever fully log out of the application." }, "pinRequired": { "message": "נדרש קוד PIN." @@ -2204,6 +2213,9 @@ "useThisPassword": { "message": "השתמש בסיסמה זו" }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, "useThisUsername": { "message": "השתמש בשם משתמש זה" }, @@ -2481,6 +2493,12 @@ "personalOwnershipPolicyInEffectImports": { "message": "מדיניות ארגון חסמה ייבוא פריטים אל תוך הכספת האישית שלך." }, + "restrictCardTypeImport": { + "message": "Cannot import card item types" + }, + "restrictCardTypeImportDesc": { + "message": "A policy set by 1 or more organizations prevents you from importing cards to your vaults." + }, "domainsTitle": { "message": "דומיינים", "description": "A category title describing the concept of web domains" @@ -2512,6 +2530,10 @@ "change": { "message": "שינוי" }, + "changePassword": { + "message": "Change password", + "description": "Change password button for browser at risk notification on login." + }, "changeButtonTitle": { "message": "שנה סיסמה - $ITEMNAME$", "placeholders": { @@ -2521,6 +2543,9 @@ } } }, + "atRiskPassword": { + "message": "At-risk password" + }, "atRiskPasswords": { "message": "סיסמאות בסיכון" }, @@ -2555,6 +2580,26 @@ } } }, + "atRiskChangePrompt": { + "message": "Your password for this site is at-risk. $ORGANIZATION$ has requested that you change it.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + }, + "description": "Notification body when a login triggers an at-risk password change request and the change password domain is known." + }, + "atRiskNavigatePrompt": { + "message": "$ORGANIZATION$ wants you to change this password because it is at-risk. Navigate to your account settings to change the password.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + }, + "description": "Notification body when a login triggers an at-risk password change request and no change password domain is provided." + }, "reviewAndChangeAtRiskPassword": { "message": "סקור ושנה סיסמה אחת בסיכון" }, @@ -2674,6 +2719,10 @@ "message": "כל הסֵנְדים", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "maxAccessCountReached": { + "message": "מספר הגישות המרבי הושג", + "description": "This text will be displayed after a Send has been accessed the maximum amount of times." + }, "hideTextByDefault": { "message": "הסתר טקסט כברירת מחדל" }, @@ -2876,6 +2925,9 @@ "emailVerificationRequiredDesc": { "message": "עליך לאמת את הדוא\"ל שלך כדי להשתמש בתכונה זו. ניתן לאמת את הדוא\"ל שלך בכספת הרשת." }, + "masterPasswordSuccessfullySet": { + "message": "Master password successfully set" + }, "updatedMasterPassword": { "message": "סיסמה ראשית עודכנה" }, @@ -3408,6 +3460,9 @@ "logInRequestSent": { "message": "בקשה נשלחה" }, + "masterPasswordChanged": { + "message": "Master password saved" + }, "exposedMasterPassword": { "message": "סיסמה ראשית חשופה" }, @@ -3522,6 +3577,12 @@ "requestAdminApproval": { "message": "בקש אישור מנהל" }, + "unableToCompleteLogin": { + "message": "Unable to complete login" + }, + "loginOnTrustedDeviceOrAskAdminToAssignPassword": { + "message": "You need to log in on a trusted device or ask your administrator to assign you a password." + }, "ssoIdentifierRequired": { "message": "נדרש מזהה SSO של הארגון." }, @@ -3607,14 +3668,6 @@ "trustUser": { "message": "Trust user" }, - "sendsNoItemsTitle": { - "message": "אין סֵנְדים פעילים", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendsNoItemsMessage": { - "message": "השתמש בסֵנְד כדי לשתף באופן מאובטח מידע מוצפן עם כל אחד.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "sendsTitleNoItems": { "message": "Send sensitive information safely", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -4209,6 +4262,26 @@ "message": "פורמטים נפוצים", "description": "Label indicating the most common import formats" }, + "uriMatchDefaultStrategyHint": { + "message": "URI match detection is how Bitwarden identifies autofill suggestions.", + "description": "Explains to the user that URI match detection determines how Bitwarden suggests autofill options, and clarifies that this default strategy applies when no specific match detection is set for a login item." + }, + "regExAdvancedOptionWarning": { + "message": "\"Regular expression\" is an advanced option with increased risk of exposing credentials.", + "description": "Content for dialog which warns a user when selecting 'regular expression' matching strategy as a cipher match strategy" + }, + "startsWithAdvancedOptionWarning": { + "message": "\"Starts with\" is an advanced option with increased risk of exposing credentials.", + "description": "Content for dialog which warns a user when selecting 'starts with' matching strategy as a cipher match strategy" + }, + "uriMatchWarningDialogLink": { + "message": "More about match detection", + "description": "Link to match detection docs on warning dialog for advance match strategy" + }, + "uriAdvancedOption": { + "message": "Advanced options", + "description": "Advanced option placeholder for uri option component" + }, "confirmContinueToBrowserSettingsTitle": { "message": "להמשיך אל הגדרות הדפדפן?", "description": "Title for dialog which asks if the user wants to proceed to a relevant browser settings page" @@ -5036,6 +5109,9 @@ "unlockPinSet": { "message": "Unlock PIN set" }, + "unlockWithBiometricSet": { + "message": "Unlock with biometrics set" + }, "authenticating": { "message": "מאמת" }, @@ -5377,5 +5453,9 @@ }, "noPermissionsViewPage": { "message": "You do not have permissions to view this page. Try logging in with a different account." + }, + "wasmNotSupported": { + "message": "WebAssembly is not supported on your browser or is not enabled. WebAssembly is required to use the Bitwarden app.", + "description": "'WebAssembly' is a technical term and should not be translated." } } diff --git a/apps/browser/src/_locales/hi/messages.json b/apps/browser/src/_locales/hi/messages.json index 61c0fbe9963..74fc419d7f1 100644 --- a/apps/browser/src/_locales/hi/messages.json +++ b/apps/browser/src/_locales/hi/messages.json @@ -1173,6 +1173,12 @@ "message": "Oh no! We couldn't save this. Try entering the details manually.", "description": "Detailed error message shown when saving login details fails." }, + "changePasswordWarning": { + "message": "After changing your password, you will need to log in with your new password. Active sessions on other devices will be logged out within one hour." + }, + "accountRecoveryUpdateMasterPasswordSubtitle": { + "message": "Change your master password to complete account recovery." + }, "enableChangedPasswordNotification": { "message": "मौजूदा लॉगिन को अपडेट करने के लिए कहें" }, @@ -1365,8 +1371,8 @@ "featureUnavailable": { "message": "Feature Unavailable" }, - "encryptionKeyMigrationRequired": { - "message": "Encryption key migration required. Please login through the web vault to update your encryption key." + "legacyEncryptionUnsupported": { + "message": "Legacy encryption is no longer supported. Please contact support to recover your account." }, "premiumMembership": { "message": "Premium Membership" @@ -1922,6 +1928,9 @@ "typeSshKey": { "message": "SSH key" }, + "typeNote": { + "message": "नोट" + }, "newItemHeader": { "message": "नया $TYPE$", "placeholders": { @@ -2153,8 +2162,8 @@ "setYourPinCode": { "message": "बिटवर्डन को अनलॉक करने के लिए अपना पिन कोड सेट करें यदि आप कभी भी आवेदन से पूरी तरह लॉग आउट करते हैं तो आपकी पिन सेटिंग्स रीसेट हो जाएंगी।" }, - "setYourPinCode1": { - "message": "बिटवर्डन को अनलॉक करने के लिए आपके मास्टर पासवर्ड के बजाय आपके पिन का उपयोग किया जाएगा। यदि आप कभी भी बिटवर्डन से पूरी तरह लॉग आउट हो जाते हैं तो आपका पिन रीसेट हो जाएगा।" + "setPinCode": { + "message": "You can use this PIN to unlock Bitwarden. Your PIN will be reset if you ever fully log out of the application." }, "pinRequired": { "message": "पिन-कोड आवश्यक है |" @@ -2204,6 +2213,9 @@ "useThisPassword": { "message": "Use this password" }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, "useThisUsername": { "message": "Use this username" }, @@ -2481,6 +2493,12 @@ "personalOwnershipPolicyInEffectImports": { "message": "An organization policy has blocked importing items into your individual vault." }, + "restrictCardTypeImport": { + "message": "Cannot import card item types" + }, + "restrictCardTypeImportDesc": { + "message": "A policy set by 1 or more organizations prevents you from importing cards to your vaults." + }, "domainsTitle": { "message": "Domains", "description": "A category title describing the concept of web domains" @@ -2512,6 +2530,10 @@ "change": { "message": "Change" }, + "changePassword": { + "message": "Change password", + "description": "Change password button for browser at risk notification on login." + }, "changeButtonTitle": { "message": "Change password - $ITEMNAME$", "placeholders": { @@ -2521,6 +2543,9 @@ } } }, + "atRiskPassword": { + "message": "At-risk password" + }, "atRiskPasswords": { "message": "At-risk passwords" }, @@ -2555,6 +2580,26 @@ } } }, + "atRiskChangePrompt": { + "message": "Your password for this site is at-risk. $ORGANIZATION$ has requested that you change it.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + }, + "description": "Notification body when a login triggers an at-risk password change request and the change password domain is known." + }, + "atRiskNavigatePrompt": { + "message": "$ORGANIZATION$ wants you to change this password because it is at-risk. Navigate to your account settings to change the password.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + }, + "description": "Notification body when a login triggers an at-risk password change request and no change password domain is provided." + }, "reviewAndChangeAtRiskPassword": { "message": "Review and change one at-risk password" }, @@ -2674,6 +2719,10 @@ "message": "सभी Sends", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "maxAccessCountReached": { + "message": "Max access count reached", + "description": "This text will be displayed after a Send has been accessed the maximum amount of times." + }, "hideTextByDefault": { "message": "Hide text by default" }, @@ -2876,6 +2925,9 @@ "emailVerificationRequiredDesc": { "message": "इस सुविधा का उपयोग करने के लिए आपको अपने ईमेल को सत्यापित करना होगा। आप वेब वॉल्ट में अपने ईमेल को सत्यापित कर सकते हैं।" }, + "masterPasswordSuccessfullySet": { + "message": "Master password successfully set" + }, "updatedMasterPassword": { "message": "अपडेट किया गया मास्टर पासवर्ड" }, @@ -3408,6 +3460,9 @@ "logInRequestSent": { "message": "Request sent" }, + "masterPasswordChanged": { + "message": "Master password saved" + }, "exposedMasterPassword": { "message": "Exposed Master Password" }, @@ -3522,6 +3577,12 @@ "requestAdminApproval": { "message": "Request admin approval" }, + "unableToCompleteLogin": { + "message": "Unable to complete login" + }, + "loginOnTrustedDeviceOrAskAdminToAssignPassword": { + "message": "You need to log in on a trusted device or ask your administrator to assign you a password." + }, "ssoIdentifierRequired": { "message": "Organization SSO identifier is required." }, @@ -3607,14 +3668,6 @@ "trustUser": { "message": "उपयोगकर्ता पर भरोसा रखें" }, - "sendsNoItemsTitle": { - "message": "No active Sends", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendsNoItemsMessage": { - "message": "Use Send to securely share encrypted information with anyone.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "sendsTitleNoItems": { "message": "Send sensitive information safely", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -4209,6 +4262,26 @@ "message": "Common formats", "description": "Label indicating the most common import formats" }, + "uriMatchDefaultStrategyHint": { + "message": "URI match detection is how Bitwarden identifies autofill suggestions.", + "description": "Explains to the user that URI match detection determines how Bitwarden suggests autofill options, and clarifies that this default strategy applies when no specific match detection is set for a login item." + }, + "regExAdvancedOptionWarning": { + "message": "\"Regular expression\" is an advanced option with increased risk of exposing credentials.", + "description": "Content for dialog which warns a user when selecting 'regular expression' matching strategy as a cipher match strategy" + }, + "startsWithAdvancedOptionWarning": { + "message": "\"Starts with\" is an advanced option with increased risk of exposing credentials.", + "description": "Content for dialog which warns a user when selecting 'starts with' matching strategy as a cipher match strategy" + }, + "uriMatchWarningDialogLink": { + "message": "More about match detection", + "description": "Link to match detection docs on warning dialog for advance match strategy" + }, + "uriAdvancedOption": { + "message": "Advanced options", + "description": "Advanced option placeholder for uri option component" + }, "confirmContinueToBrowserSettingsTitle": { "message": "Continue to browser settings?", "description": "Title for dialog which asks if the user wants to proceed to a relevant browser settings page" @@ -5036,6 +5109,9 @@ "unlockPinSet": { "message": "Unlock PIN set" }, + "unlockWithBiometricSet": { + "message": "Unlock with biometrics set" + }, "authenticating": { "message": "Authenticating" }, @@ -5377,5 +5453,9 @@ }, "noPermissionsViewPage": { "message": "You do not have permissions to view this page. Try logging in with a different account." + }, + "wasmNotSupported": { + "message": "WebAssembly is not supported on your browser or is not enabled. WebAssembly is required to use the Bitwarden app.", + "description": "'WebAssembly' is a technical term and should not be translated." } } diff --git a/apps/browser/src/_locales/hr/messages.json b/apps/browser/src/_locales/hr/messages.json index ad32937c740..6434a09bcfb 100644 --- a/apps/browser/src/_locales/hr/messages.json +++ b/apps/browser/src/_locales/hr/messages.json @@ -887,7 +887,7 @@ "message": "Prati korake za dovršetak prijave." }, "followTheStepsBelowToFinishLoggingInWithSecurityKey": { - "message": "Follow the steps below to finish logging in with your security key." + "message": "Prati korake za dovršetak prijave svojim sigurnosnim ključem." }, "restartRegistration": { "message": "Ponovno pokreni registraciju" @@ -1063,7 +1063,7 @@ "message": "Spremi" }, "notificationViewAria": { - "message": "View $ITEMNAME$, opens in new window", + "message": "Pogledaj $ITEMNAME$, otvara u novom prozoru", "placeholders": { "itemName": { "content": "$1" @@ -1072,18 +1072,18 @@ "description": "Aria label for the view button in notification bar confirmation message" }, "notificationNewItemAria": { - "message": "New Item, opens in new window", + "message": "Nova stavka, otvara u novom prozoru", "description": "Aria label for the new item button in notification bar confirmation message when error is prompted" }, "notificationEditTooltip": { - "message": "Edit before saving", + "message": "Uredi prije spremanja", "description": "Tooltip and Aria label for edit button on cipher item" }, "newNotification": { - "message": "New notification" + "message": "Nova obavijest" }, "labelWithNotification": { - "message": "$LABEL$: New notification", + "message": "$LABEL$: Nova obavijest", "description": "Label for the notification with a new login suggestion.", "placeholders": { "label": { @@ -1093,15 +1093,15 @@ } }, "notificationLoginSaveConfirmation": { - "message": "saved to Bitwarden.", + "message": "spremljeno u Bitwarden.", "description": "Shown to user after item is saved." }, "notificationLoginUpdatedConfirmation": { - "message": "updated in Bitwarden.", + "message": "ažurirano u Bitwarenu.", "description": "Shown to user after item is updated." }, "selectItemAriaLabel": { - "message": "Select $ITEMTYPE$, $ITEMNAME$", + "message": "Odaberi $ITEMTYPE$, $ITEMNAME$", "description": "Used by screen readers. $1 is the item type (like vault or folder), $2 is the selected item name.", "placeholders": { "itemType": { @@ -1121,15 +1121,15 @@ "description": "Button text for updating an existing login entry." }, "unlockToSave": { - "message": "Unlock to save this login", + "message": "Otključaj za spremanje ove prijave", "description": "User prompt to take action in order to save the login they just entered." }, "saveLogin": { - "message": "Save login", + "message": "Spremi prijavu", "description": "Prompt asking the user if they want to save their login details." }, "updateLogin": { - "message": "Update existing login", + "message": "Ažuriraj postojeću prijavu", "description": "Prompt asking the user if they want to update an existing login entry." }, "loginSaveSuccess": { @@ -1141,7 +1141,7 @@ "description": "Message displayed when login details are successfully updated." }, "loginUpdateTaskSuccess": { - "message": "Great job! You took the steps to make you and $ORGANIZATION$ more secure.", + "message": "Odlično! Ti i $ORGANIZATION$ ste sada sigurniji.", "placeholders": { "organization": { "content": "$1" @@ -1150,7 +1150,7 @@ "description": "Shown to user after login is updated." }, "loginUpdateTaskSuccessAdditional": { - "message": "Thank you for making $ORGANIZATION$ more secure. You have $TASK_COUNT$ more passwords to update.", + "message": "Hvala što je $ORGANIZATION$ sada sigurnija. Imaš još $TASK_COUNT$ lozinku za ažuriranje.", "placeholders": { "organization": { "content": "$1" @@ -1162,7 +1162,7 @@ "description": "Shown to user after login is updated." }, "nextSecurityTaskAction": { - "message": "Change next password", + "message": "Promjeni sljedeću lozinku", "description": "Message prompting user to undertake completion of another security task." }, "saveFailure": { @@ -1173,6 +1173,12 @@ "message": "Ups! Nismo mogli ovo spasiti. Pokušaj ručno unijeti detalje.", "description": "Detailed error message shown when saving login details fails." }, + "changePasswordWarning": { + "message": "Nakon promjene lozinke, moraš se prijaviti s novom lozinkom. Aktivne sesije na drugim uređajima bit će odjavljene u roku od jednog sata." + }, + "accountRecoveryUpdateMasterPasswordSubtitle": { + "message": "Promijeni svoju glavnu lozinku za dovršetak oporavka računa." + }, "enableChangedPasswordNotification": { "message": "Upitaj za ažuriranje trenutne prijave" }, @@ -1365,8 +1371,8 @@ "featureUnavailable": { "message": "Značajka nije dostupna" }, - "encryptionKeyMigrationRequired": { - "message": "Potrebna je migracija ključa za šifriranje. Prijavi se na web trezoru za ažuriranje ključa za šifriranje." + "legacyEncryptionUnsupported": { + "message": "Zastarjelo šifriranje više nije podržano. Obrati se podršci za oporavak računa." }, "premiumMembership": { "message": "Premium članstvo" @@ -1600,13 +1606,13 @@ "message": "Prijedlozi auto-ispune" }, "autofillSpotlightTitle": { - "message": "Easily find autofill suggestions" + "message": "Jednostavno pronađi prijedloge auto-ispune" }, "autofillSpotlightDesc": { - "message": "Turn off your browser's autofill settings, so they don't conflict with Bitwarden." + "message": "Isključi postavke auto-ispune preglenika kako se ne bi kosile s Bitwardenom." }, "turnOffBrowserAutofill": { - "message": "Turn off $BROWSER$ autofill", + "message": "Isključi auto-ispunu za $BROWSER$", "placeholders": { "browser": { "content": "$1", @@ -1615,7 +1621,7 @@ } }, "turnOffAutofill": { - "message": "Turn off autofill" + "message": "Isključi auto-ispunu" }, "showInlineMenuLabel": { "message": "Prikaži prijedloge auto-ispune na poljima obrazaca" @@ -1922,6 +1928,9 @@ "typeSshKey": { "message": "SSH ključ" }, + "typeNote": { + "message": "Bilješka" + }, "newItemHeader": { "message": "Novi $TYPE$", "placeholders": { @@ -2153,8 +2162,8 @@ "setYourPinCode": { "message": "Postavi svoj PIN kôd za otključavanje Bitwardena. Postavke PIN-a se resetiraju ako se potpuno odjaviš iz aplikacije." }, - "setYourPinCode1": { - "message": "Tvoj PIN će se koristiti za otključavanje Bitwardena umjesto glavne lozinke. PIN će se restirati ukoliko se odjaviš iz Bitwardena. " + "setPinCode": { + "message": "Ovim PIN-om možeš otključati Bitwarden. Tvoj PIN će se resetirati ako se ikada potpuno odjaviš iz aplikacije." }, "pinRequired": { "message": "Potreban je PIN." @@ -2204,6 +2213,9 @@ "useThisPassword": { "message": "Koristi ovu lozinku" }, + "useThisPassphrase": { + "message": "Koristi ovu fraznu lozinku" + }, "useThisUsername": { "message": "Koristi ovo korisničko ime" }, @@ -2374,7 +2386,7 @@ "message": "Pravila privatnosti" }, "yourNewPasswordCannotBeTheSameAsYourCurrentPassword": { - "message": "Your new password cannot be the same as your current password." + "message": "Tvoja nova lozinka ne može biti ista kao tvoja trenutna lozinka." }, "hintEqualsPassword": { "message": "Podsjetnik za lozinku ne može biti isti kao lozinka." @@ -2481,6 +2493,12 @@ "personalOwnershipPolicyInEffectImports": { "message": "Organizacijsko pravilo onemogućuje uvoz stavki u tvoj osobni trezor." }, + "restrictCardTypeImport": { + "message": "Ne mogu uvesti stavke vrste Platna kartica" + }, + "restrictCardTypeImportDesc": { + "message": "Pravila jedne ili više organizacija onemogućuju uvoz stavke vrste Platna kartica u tvoj trezor." + }, "domainsTitle": { "message": "Domene", "description": "A category title describing the concept of web domains" @@ -2512,6 +2530,10 @@ "change": { "message": "Promijeni" }, + "changePassword": { + "message": "Promijeni lozinku", + "description": "Change password button for browser at risk notification on login." + }, "changeButtonTitle": { "message": "Promijeni lozinku - $ITEMNAME$", "placeholders": { @@ -2521,6 +2543,9 @@ } } }, + "atRiskPassword": { + "message": "Rizična lozinka" + }, "atRiskPasswords": { "message": "Rizične lozinke" }, @@ -2555,6 +2580,26 @@ } } }, + "atRiskChangePrompt": { + "message": "Tvoja lozinka za ovo mjesto je rizična. $ORGANIZATION$ zahtijeva da ju promijeniš.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + }, + "description": "Notification body when a login triggers an at-risk password change request and the change password domain is known." + }, + "atRiskNavigatePrompt": { + "message": "$ORGANIZATION$ želi da promjeniš ovu lozinku jer je rizična. Promijeni lozinku u postavkama računa.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + }, + "description": "Notification body when a login triggers an at-risk password change request and no change password domain is provided." + }, "reviewAndChangeAtRiskPassword": { "message": "Pregledaj i promijeni jednu rizičnu lozinku" }, @@ -2584,14 +2629,14 @@ "description": "Description of the review at-risk login slide on the at-risk password page carousel" }, "reviewAtRiskLoginSlideImgAltPeriod": { - "message": "Illustration of a list of logins that are at-risk." + "message": "Ilustracija liste rizičnih prijava." }, "generatePasswordSlideDesc": { "message": "Brzo generiraj jake, jedinstvene lozinke koristeći Bitwarden dijalog auto-ispune direktno na stranici.", "description": "Description of the generate password slide on the at-risk password page carousel" }, "generatePasswordSlideImgAltPeriod": { - "message": "Illustration of the Bitwarden autofill menu displaying a generated password." + "message": "Ilustracija Bitwarden dijaloga auto-ispune s prikazom generirane lozinke." }, "updateInBitwarden": { "message": "Ažuriraj u Bitwardenu" @@ -2601,7 +2646,7 @@ "description": "Description of the update in Bitwarden slide on the at-risk password page carousel" }, "updateInBitwardenSlideImgAltPeriod": { - "message": "Illustration of a Bitwarden’s notification prompting the user to update the login." + "message": "Ilustracija Bitwarden upita za ažuriranje prijave." }, "turnOnAutofill": { "message": "Uključi auto-ispunu" @@ -2674,6 +2719,10 @@ "message": "Svi Sendovi", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "maxAccessCountReached": { + "message": "Dostignut najveći broj pristupanja", + "description": "This text will be displayed after a Send has been accessed the maximum amount of times." + }, "hideTextByDefault": { "message": "Zadano sakrij tekst" }, @@ -2876,6 +2925,9 @@ "emailVerificationRequiredDesc": { "message": "Moraš ovjeriti svoju e-poštu u mrežnom trezoru za koritšenje ove značajke." }, + "masterPasswordSuccessfullySet": { + "message": "Glavna lozinka uspješno postavljena" + }, "updatedMasterPassword": { "message": "Glavna lozinka ažurirana" }, @@ -3015,13 +3067,13 @@ "message": "Nije nađen jedinstveni identifikator." }, "removeMasterPasswordForOrganizationUserKeyConnector": { - "message": "A master password is no longer required for members of the following organization. Please confirm the domain below with your organization administrator." + "message": "Glavna lozinka više nije obavezna za članove sljedeće organizacije. Provjeri prikazanu domenu sa svojim administratorom." }, "organizationName": { - "message": "Organization name" + "message": "Naziv Organizacije" }, "keyConnectorDomain": { - "message": "Key Connector domain" + "message": "Domena konektora ključa" }, "leaveOrganization": { "message": "Napusti organizaciju" @@ -3408,6 +3460,9 @@ "logInRequestSent": { "message": "Zahtjev poslan" }, + "masterPasswordChanged": { + "message": "Glavna lozinka promijenjena" + }, "exposedMasterPassword": { "message": "Ukradena glavna lozinka" }, @@ -3522,6 +3577,12 @@ "requestAdminApproval": { "message": "Zatraži odobrenje administratora" }, + "unableToCompleteLogin": { + "message": "Nije moguće dovršiti prijavu" + }, + "loginOnTrustedDeviceOrAskAdminToAssignPassword": { + "message": "Moraš se prijaviti na pouzdanom uređaju ili zamoliti administratora da ti dodijeli lozinku." + }, "ssoIdentifierRequired": { "message": "Potreban je identifikator organizacije." }, @@ -3584,43 +3645,35 @@ "message": "Uređaj pouzdan" }, "trustOrganization": { - "message": "Trust organization" + "message": "Vjeruj organizaciji" }, "trust": { - "message": "Trust" + "message": "Vjeruj" }, "doNotTrust": { - "message": "Do not trust" + "message": "Nemoj vjerovati" }, "organizationNotTrusted": { - "message": "Organization is not trusted" + "message": "Organizacija nije pouzdana" }, "emergencyAccessTrustWarning": { - "message": "For the security of your account, only confirm if you have granted emergency access to this user and their fingerprint matches what is displayed in their account" + "message": "Radi sigurnosti tvojeg računa, potvrdi samo ako je ovom korisniku odobren pristup u nuždi i ako se otisak prsta podudara s onim prikazanim u računu" }, "orgTrustWarning": { - "message": "For the security of your account, only proceed if you are a member of this organization, have account recovery enabled, and the fingerprint displayed below matches the organization's fingerprint." + "message": "Radi sigurnosti tvojeg računa, nastavi samo ako si član ove organizacije, imaš omogućen oporavak računa i otisak prsta prikazan u nastavku odgovara otisku prsta organizacije." }, "orgTrustWarning1": { - "message": "This organization has an Enterprise policy that will enroll you in account recovery. Enrollment will allow organization administrators to change your password. Only proceed if you recognize this organization and the fingerprint phrase displayed below matches the organization's fingerprint." + "message": "Ova organizacija ima poslovno pravilo koje će te prijaviti za oporavak računa. Prijava će omogućiti administratorima organizacije da promijene tvoju lozinku. Nastavi samo ako prepoznaješ ovu organizaciju i ako se fraza otiska prsta prikazana u nastavku podudara s otiskom prsta organizacije." }, "trustUser": { - "message": "Trust user" - }, - "sendsNoItemsTitle": { - "message": "Nema aktivnih Sendova", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendsNoItemsMessage": { - "message": "Koristi Send za sigurno slanje šifriranih podataka bilo kome.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + "message": "Vjeruj korisniku" }, "sendsTitleNoItems": { - "message": "Send sensitive information safely", + "message": "Sigurno pošalji osjetljive podatke", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "sendsBodyNoItems": { - "message": "Share files and data securely with anyone, on any platform. Your information will remain end-to-end encrypted while limiting exposure.", + "message": "Sigurno dijeli datoteke i podatke s bilo kime, na bilo kojoj platformi. Tvoji podaci ostaju kriptirani uz ograničenje izloženosti.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "inputRequired": { @@ -4209,6 +4262,26 @@ "message": "Uobičajeni oblici", "description": "Label indicating the most common import formats" }, + "uriMatchDefaultStrategyHint": { + "message": "Otkrivanje podudaranja URI-ja je način na koji Bitwarden identificira prijedloge za auto-ispunu.", + "description": "Explains to the user that URI match detection determines how Bitwarden suggests autofill options, and clarifies that this default strategy applies when no specific match detection is set for a login item." + }, + "regExAdvancedOptionWarning": { + "message": "„Regularni izraz” je napredna mogućnost s povećanim rizikom od otkrivanja vjerodajnica.", + "description": "Content for dialog which warns a user when selecting 'regular expression' matching strategy as a cipher match strategy" + }, + "startsWithAdvancedOptionWarning": { + "message": "„Počinje s” je napredna mogućnost s povećnim rizikom od otkrivanja vjerodajnica.", + "description": "Content for dialog which warns a user when selecting 'starts with' matching strategy as a cipher match strategy" + }, + "uriMatchWarningDialogLink": { + "message": "Više o otkrivanju podudaranja", + "description": "Link to match detection docs on warning dialog for advance match strategy" + }, + "uriAdvancedOption": { + "message": "Napredne mogućnosti", + "description": "Advanced option placeholder for uri option component" + }, "confirmContinueToBrowserSettingsTitle": { "message": "Nastavi na postavke preglednika?", "description": "Title for dialog which asks if the user wants to proceed to a relevant browser settings page" @@ -4355,7 +4428,7 @@ } }, "viewItemTitleWithField": { - "message": "View item - $ITEMNAME$ - $FIELD$", + "message": "Pogledaj stavku - $ITEMNAME$ - $FIELD$", "description": "Title for a link that opens a view for an item.", "placeholders": { "itemname": { @@ -4379,7 +4452,7 @@ } }, "autofillTitleWithField": { - "message": "Autofill - $ITEMNAME$ - $FIELD$", + "message": "Auto-ispuna - $ITEMNAME$ - $FIELD$", "description": "Title for a button that autofills a login item.", "placeholders": { "itemname": { @@ -4540,31 +4613,31 @@ } }, "downloadBitwarden": { - "message": "Download Bitwarden" + "message": "Preuzmi Bitwarden" }, "downloadBitwardenOnAllDevices": { - "message": "Download Bitwarden on all devices" + "message": "Preuzmi Bitwarden na svim uređajima" }, "getTheMobileApp": { - "message": "Get the mobile app" + "message": "Nabavi mobilnu aplikaciju" }, "getTheMobileAppDesc": { - "message": "Access your passwords on the go with the Bitwarden mobile app." + "message": "Pristupi svojim lozinkama bilo gdje s Bitwarden mobilnom aplikacijom." }, "getTheDesktopApp": { - "message": "Get the desktop app" + "message": "Nabavi aplikaciju za stolna računala" }, "getTheDesktopAppDesc": { - "message": "Access your vault without a browser, then set up unlock with biometrics to expedite unlocking in both the desktop app and browser extension." + "message": "Pristupi svojem trezoru bez preglednika, a zatim postavi otključavanje biometrijom za brže otključavanje aplikacije za stolna računala i prošitenja preglednika." }, "downloadFromBitwardenNow": { - "message": "Download from bitwarden.com now" + "message": "Odmah preusmi s bitwarden.com" }, "getItOnGooglePlay": { - "message": "Get it on Google Play" + "message": "Nabavi u Google Play" }, "downloadOnTheAppStore": { - "message": "Download on the App Store" + "message": "Nabavi u App Store" }, "permanentlyDeleteAttachmentConfirmation": { "message": "Sigurno želiš trajno izbrisati ovaj privitak?" @@ -5028,13 +5101,16 @@ "message": "Biometrijsko otključavanje trenutno nije dostupno iz nepoznatog razloga." }, "unlockVault": { - "message": "Unlock your vault in seconds" + "message": "Otključaj svoj trezor u trenu" }, "unlockVaultDesc": { - "message": "You can customize your unlock and timeout settings to more quickly access your vault." + "message": "Možeš prilagoditi postavke otključavanja i vremena isteka za brže pristupanje svojem trezoru." }, "unlockPinSet": { - "message": "Unlock PIN set" + "message": "PIN za otključavanje podešen" + }, + "unlockWithBiometricSet": { + "message": "Otključavanje biometrijom postavljeno" }, "authenticating": { "message": "Autentifikacija" @@ -5048,7 +5124,7 @@ "description": "Notification message for when a password has been regenerated" }, "saveToBitwarden": { - "message": "Save to Bitwarden", + "message": "Spremi u Bitwarden", "description": "Confirmation message for saving a login to Bitwarden" }, "spaceCharacterDescriptor": { @@ -5253,129 +5329,133 @@ "message": "Promijeni rizičnu lozinku" }, "settingsVaultOptions": { - "message": "Vault options" + "message": "Mogućnosti trezora" }, "emptyVaultDescription": { - "message": "The vault protects more than just your passwords. Store secure logins, IDs, cards and notes securely here." + "message": "Trezor štiti više od lozinki. Sigurno spremi prijave, identitete, kartice i bilješke." }, "introCarouselLabel": { - "message": "Welcome to Bitwarden" + "message": "Dobrodošli u Bitwarden" }, "securityPrioritized": { - "message": "Security, prioritized" + "message": "Sigurnost je imperativ" }, "securityPrioritizedBody": { - "message": "Save logins, cards, and identities to your secure vault. Bitwarden uses zero-knowledge, end-to-end encryption to protect what’s important to you." + "message": "Spremi prijave, kartice i identitete u svoj sigurni trezor. Bitwarden koristi end-to-end enkripciju bez znanja kako bi zaštitio ono što ti je važno." }, "quickLogin": { - "message": "Quick and easy login" + "message": "Brza i jednostavna prijava" }, "quickLoginBody": { - "message": "Set up biometric unlock and autofill to log into your accounts without typing a single letter." + "message": "Uključi biometrijsko otključavanje i auto-ispunu za prijavu bez utipkavanja ijednog slova." }, "secureUser": { - "message": "Level up your logins" + "message": "Podigni svoje prijave na višu razinu" }, "secureUserBody": { - "message": "Use the generator to create and save strong, unique passwords for all your accounts." + "message": "Koristi generator za stvaranje i spremanje jakih, jedinstvenih lozinki za sve svoje račune." }, "secureDevices": { - "message": "Your data, when and where you need it" + "message": "Tvoji podaci kada god i gdje god su ti potrebni" }, "secureDevicesBody": { - "message": "Save unlimited passwords across unlimited devices with Bitwarden mobile, browser, and desktop apps." + "message": "Spremi neograničen broj lozinki na neograničenom broju uređaja s Bitwarden mobilnom aplikacijom, proširenjem za preglednik i aplikacijom za stolna računala." }, "nudgeBadgeAria": { - "message": "1 notification" + "message": "1 obavijest" }, "emptyVaultNudgeTitle": { - "message": "Import existing passwords" + "message": "Uvezi postojeće lozinke" }, "emptyVaultNudgeBody": { - "message": "Use the importer to quickly transfer logins to Bitwarden without manually adding them." + "message": "Koristi uvoz za brzi prijenos prijava u Bitwarden bez ručnog dodavanja." }, "emptyVaultNudgeButton": { - "message": "Import now" + "message": "Uvezi odmah" }, "hasItemsVaultNudgeTitle": { - "message": "Welcome to your vault!" + "message": "Dobrodošli u svoj trezor!" }, "hasItemsVaultNudgeBodyOne": { - "message": "Autofill items for the current page" + "message": "Auto-ispuni stavke za trenutnu stranicu" }, "hasItemsVaultNudgeBodyTwo": { - "message": "Favorite items for easy access" + "message": "Favoriti za brzi pristup" }, "hasItemsVaultNudgeBodyThree": { - "message": "Search your vault for something else" + "message": "Nađi nešto drugo u svom trezoru" }, "newLoginNudgeTitle": { - "message": "Save time with autofill" + "message": "Uštedi vrijeme s auto-ispunom" }, "newLoginNudgeBodyOne": { - "message": "Include a", + "message": "Uključi", "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", "example": "Include a Website so this login appears as an autofill suggestion." }, "newLoginNudgeBodyBold": { - "message": "Website", + "message": "web stranicu", "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", "example": "Include a Website so this login appears as an autofill suggestion." }, "newLoginNudgeBodyTwo": { - "message": "so this login appears as an autofill suggestion.", + "message": "kako bi ova prijava bila predložena u auto-ispuni.", "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { - "message": "Seamless online checkout" + "message": "Jednostavna online kupnja" }, "newCardNudgeBody": { - "message": "With cards, easily autofill payment forms securely and accurately." + "message": "S karticama jednostavno i sigurno automatski ispunjavaš obrasce za plaćanje." }, "newIdentityNudgeTitle": { - "message": "Simplify creating accounts" + "message": "Pojednostavi stvaranje računa" }, "newIdentityNudgeBody": { - "message": "With identities, quickly autofill long registration or contact forms." + "message": "S identitetima brzo automatski ispunjavaš duge registracijske i kontaktne obrasce." }, "newNoteNudgeTitle": { - "message": "Keep your sensitive data safe" + "message": "Čuvaj svoje osjetljive podatke na sigurnom" }, "newNoteNudgeBody": { - "message": "With notes, securely store sensitive data like banking or insurance details." + "message": "S bilješkama sigurno pohrani svoje osjetljive podatke poput podataka o banci ili osiguranju." }, "newSshNudgeTitle": { - "message": "Developer-friendly SSH access" + "message": "SSH pristup prilagođen programerima" }, "newSshNudgeBodyOne": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "message": "Pohrani svoje ključeve i poveži se sa SSH agentom za brzu, šifriranu autentifikaciju.", "description": "Two part message", "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, "newSshNudgeBodyTwo": { - "message": "Learn more about SSH agent", + "message": "Saznaj više o SSH agentu", "description": "Two part message", "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, "generatorNudgeTitle": { - "message": "Quickly create passwords" + "message": "Brzo stvori lozinke" }, "generatorNudgeBodyOne": { - "message": "Easily create strong and unique passwords by clicking on", + "message": "Jednostavno stvori jake i jedinstvene lozinke odabirom tipke", "description": "Two part message", "example": "Easily create strong and unique passwords by clicking on {icon} to help you keep your logins secure." }, "generatorNudgeBodyTwo": { - "message": "to help you keep your logins secure.", + "message": "kako bi tvoje prijave ostale sigurne.", "description": "Two part message", "example": "Easily create strong and unique passwords by clicking on {icon} to help you keep your logins secure." }, "generatorNudgeBodyAria": { - "message": "Easily create strong and unique passwords by clicking on the Generate password button to help you keep your logins secure.", + "message": "Jednostavno stvori jake i sigurne lozinke odabirom tipke Generiraj lozinku kako bi tvoje prijave ostale sigurne.", "description": "Aria label for the body content of the generator nudge" }, "noPermissionsViewPage": { - "message": "You do not have permissions to view this page. Try logging in with a different account." + "message": "Nemaš dozvolu za pregled ove stranice. Pokušaj se prijaviti s drugim računom." + }, + "wasmNotSupported": { + "message": "WebAssembly ili nije podržan ili nije omogućen u tvom pregledniku. WebAssembly je potreban za korištenje Bitwarden aplikacije.", + "description": "'WebAssembly' is a technical term and should not be translated." } } diff --git a/apps/browser/src/_locales/hu/messages.json b/apps/browser/src/_locales/hu/messages.json index 50607787cd7..5391b266a93 100644 --- a/apps/browser/src/_locales/hu/messages.json +++ b/apps/browser/src/_locales/hu/messages.json @@ -1173,6 +1173,12 @@ "message": "Oh no! We couldn't save this. Try entering the details manually.", "description": "Detailed error message shown when saving login details fails." }, + "changePasswordWarning": { + "message": "A jelszó megváltoztatása után be kell jelentkezni az új jelszóval. Az aktív munkamenetek más eszközökön egy órán belül kijelentkeznek." + }, + "accountRecoveryUpdateMasterPasswordSubtitle": { + "message": "Módosítsuk a mesterjelszót a fiók helyreállításának befejezéséhez." + }, "enableChangedPasswordNotification": { "message": "Létező bejelentkezés frissítés kérése" }, @@ -1365,8 +1371,8 @@ "featureUnavailable": { "message": "A funkció nem érhető el." }, - "encryptionKeyMigrationRequired": { - "message": "Titkosítási kulcs migráció szükséges. Jelentkezzünk be a webes széfen keresztül a titkosítási kulcs frissítéséhez." + "legacyEncryptionUnsupported": { + "message": "A régi titkosítás már nem támogatott. Lépjünk kapcsolatba a támogatással a fiók helyreállításához." }, "premiumMembership": { "message": "Prémium tagság" @@ -1922,6 +1928,9 @@ "typeSshKey": { "message": "SSH kulcs" }, + "typeNote": { + "message": "Jegyzet" + }, "newItemHeader": { "message": "Új $TYPE$", "placeholders": { @@ -2153,8 +2162,8 @@ "setYourPinCode": { "message": "A pinkód beállítása a Bitwarden feloldásához. A pinkód beállítás alaphelyzetbe kerül, ha teljesen kijelentkezünk az alkalmazásból." }, - "setYourPinCode1": { - "message": "A Bitwarden feloldásához a PIN kódot használjuk a mesterjelszó helyett. A PIN kód alaphelyzetbe kerül, ha teljesen kijelentkezünk a Bitwardenből." + "setPinCode": { + "message": "Ezt a PIN kódot használhatjuk a Bitwarden feloldásához. A PIN kód alaphelyzetbe kerül, ha valaha is teljesen kijelentkezünk az alkalmazásból." }, "pinRequired": { "message": "A pinkód szükséges." @@ -2204,6 +2213,9 @@ "useThisPassword": { "message": "Jelszó használata" }, + "useThisPassphrase": { + "message": "Jelmondat használata" + }, "useThisUsername": { "message": "Felhasználónév használata" }, @@ -2481,6 +2493,12 @@ "personalOwnershipPolicyInEffectImports": { "message": "A szervezeti politika blokkolta az elemek importálását az egyedi széfbe." }, + "restrictCardTypeImport": { + "message": "A kártya elem típusokat nem lehet importálni." + }, + "restrictCardTypeImportDesc": { + "message": "Egy vagy több szervezet által beállított szabályzat megakadályozza a kártyák importálását a széfekbe." + }, "domainsTitle": { "message": "Tartomány", "description": "A category title describing the concept of web domains" @@ -2512,6 +2530,10 @@ "change": { "message": "Módosítás" }, + "changePassword": { + "message": "Jelszó módosítása", + "description": "Change password button for browser at risk notification on login." + }, "changeButtonTitle": { "message": "Jelszó módosítás - $ITEMNAME$", "placeholders": { @@ -2521,6 +2543,9 @@ } } }, + "atRiskPassword": { + "message": "Veszélyes jelszó" + }, "atRiskPasswords": { "message": "Veszélyes jelszavak" }, @@ -2555,6 +2580,26 @@ } } }, + "atRiskChangePrompt": { + "message": "A webhely jelszava veszélyben van. $ORGANIZATION$ kérte a megváltoztatását.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + }, + "description": "Notification body when a login triggers an at-risk password change request and the change password domain is known." + }, + "atRiskNavigatePrompt": { + "message": "$ORGANIZATION$ azt akarja, hogy változtassuk meg ezt a jelszót, mert veszélyben van. A jelszó módosításához navigáljunk fiók beállításokhoz.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + }, + "description": "Notification body when a login triggers an at-risk password change request and no change password domain is provided." + }, "reviewAndChangeAtRiskPassword": { "message": "Tekintsük át és módosítsuk az egyik veszélyeztetett jelszót." }, @@ -2674,6 +2719,10 @@ "message": "Összes Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "maxAccessCountReached": { + "message": "A maximális hozzáférések száma elérésre került.", + "description": "This text will be displayed after a Send has been accessed the maximum amount of times." + }, "hideTextByDefault": { "message": "Szöveg elrejtése alapértelmezetten" }, @@ -2876,6 +2925,9 @@ "emailVerificationRequiredDesc": { "message": "A funkció használatához igazolni kell email címet. Az email cím a webtárban ellenőrizhető." }, + "masterPasswordSuccessfullySet": { + "message": "A mesterjelszó sikeresen beállításra került." + }, "updatedMasterPassword": { "message": "A mesterjelszó frissítésre került." }, @@ -3408,6 +3460,9 @@ "logInRequestSent": { "message": "A kérés elküldésre került." }, + "masterPasswordChanged": { + "message": "A mesterjelszó mentésre került." + }, "exposedMasterPassword": { "message": "Kiszivárgott mesterjelszó" }, @@ -3522,6 +3577,12 @@ "requestAdminApproval": { "message": "Adminisztrátori jóváhagyás kérés" }, + "unableToCompleteLogin": { + "message": "Nem lehet befejezni a bejelentkezést." + }, + "loginOnTrustedDeviceOrAskAdminToAssignPassword": { + "message": "Be kell jelentkezni egy megbízható eszközön vagy meg kell kérni az adminisztrátort, hogy rendeljen hozzá egy jelszót." + }, "ssoIdentifierRequired": { "message": "A szervezeti SSO azonosító megadása szükséges." }, @@ -3607,14 +3668,6 @@ "trustUser": { "message": "Megbízható felhasználó" }, - "sendsNoItemsTitle": { - "message": "Nincsenek natív Send elemek.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendsNoItemsMessage": { - "message": "A Send használatával biztonságosan megoszthatjuk a titkosított információkat bárkivel.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "sendsTitleNoItems": { "message": "Érzékeny információt küldése biztonságosan", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -4209,6 +4262,26 @@ "message": "Általános formátumok", "description": "Label indicating the most common import formats" }, + "uriMatchDefaultStrategyHint": { + "message": "Az URI egyezés észlelése az, ahogyan a Bitwarden azonosítja az automatikus kitöltési javaslatokat.", + "description": "Explains to the user that URI match detection determines how Bitwarden suggests autofill options, and clarifies that this default strategy applies when no specific match detection is set for a login item." + }, + "regExAdvancedOptionWarning": { + "message": "A \"Normál kifejezés“ egy fejlett opció, amely a hitelesítő adatok növekvő kiszivárgásának kockázatával.", + "description": "Content for dialog which warns a user when selecting 'regular expression' matching strategy as a cipher match strategy" + }, + "startsWithAdvancedOptionWarning": { + "message": "A \"Kezdés\" egy fejlett opció, amely a hitelesítő adatok kiszivárgásának növekvő kockázatával.", + "description": "Content for dialog which warns a user when selecting 'starts with' matching strategy as a cipher match strategy" + }, + "uriMatchWarningDialogLink": { + "message": "Bővebben az egyezés felismerésről", + "description": "Link to match detection docs on warning dialog for advance match strategy" + }, + "uriAdvancedOption": { + "message": "Haladó opciók", + "description": "Advanced option placeholder for uri option component" + }, "confirmContinueToBrowserSettingsTitle": { "message": "Continue to browser settings?", "description": "Title for dialog which asks if the user wants to proceed to a relevant browser settings page" @@ -5036,6 +5109,9 @@ "unlockPinSet": { "message": "PIN beállítás feloldása" }, + "unlockWithBiometricSet": { + "message": "Feloldás biometrikusan" + }, "authenticating": { "message": "Authenticating" }, @@ -5377,5 +5453,9 @@ }, "noPermissionsViewPage": { "message": "Nincs jogosultság az oldal megtekintéséhez. Próbáljunk meg másik fiókkal bejelentkezni." + }, + "wasmNotSupported": { + "message": "A WebAssembly nem támogatott a böngészőben vagy nincs engedélyezve. A WebAssembly szükséges a Bitwarden alkalmazás használatához.", + "description": "'WebAssembly' is a technical term and should not be translated." } } diff --git a/apps/browser/src/_locales/id/messages.json b/apps/browser/src/_locales/id/messages.json index a12137d696a..dc1ec15cede 100644 --- a/apps/browser/src/_locales/id/messages.json +++ b/apps/browser/src/_locales/id/messages.json @@ -1072,7 +1072,7 @@ "description": "Aria label for the view button in notification bar confirmation message" }, "notificationNewItemAria": { - "message": "New Item, opens in new window", + "message": "Benda baru, buka di jendela baru", "description": "Aria label for the new item button in notification bar confirmation message when error is prompted" }, "notificationEditTooltip": { @@ -1093,15 +1093,15 @@ } }, "notificationLoginSaveConfirmation": { - "message": "saved to Bitwarden.", + "message": "telah disimpan ke Bitwarden.", "description": "Shown to user after item is saved." }, "notificationLoginUpdatedConfirmation": { - "message": "updated in Bitwarden.", + "message": "telah diperbarui di Bitwarden.", "description": "Shown to user after item is updated." }, "selectItemAriaLabel": { - "message": "Select $ITEMTYPE$, $ITEMNAME$", + "message": "Pilih $ITEMTYPE$, $ITEMNAME$", "description": "Used by screen readers. $1 is the item type (like vault or folder), $2 is the selected item name.", "placeholders": { "itemType": { @@ -1121,7 +1121,7 @@ "description": "Button text for updating an existing login entry." }, "unlockToSave": { - "message": "Unlock to save this login", + "message": "Buka untuk menyimpan login ini", "description": "User prompt to take action in order to save the login they just entered." }, "saveLogin": { @@ -1173,6 +1173,12 @@ "message": "Oh tidak! Kami tidak bisa menyimpan ini. Cobalah memasukkan rincian secara manual.", "description": "Detailed error message shown when saving login details fails." }, + "changePasswordWarning": { + "message": "After changing your password, you will need to log in with your new password. Active sessions on other devices will be logged out within one hour." + }, + "accountRecoveryUpdateMasterPasswordSubtitle": { + "message": "Change your master password to complete account recovery." + }, "enableChangedPasswordNotification": { "message": "Tanyakan untuk memperbarui masuk yang sudah ada" }, @@ -1365,8 +1371,8 @@ "featureUnavailable": { "message": "Fitur Tidak Tersedia" }, - "encryptionKeyMigrationRequired": { - "message": "Kunci enkripsi migrasi dibutuhkan. Silakan masuk melalui brankas web untuk memperbarui kunci enkripsi Anda." + "legacyEncryptionUnsupported": { + "message": "Enkripsi usang tidak lagi didukung. Silakan hubungi pendukung untuk memulihkan akun Anda." }, "premiumMembership": { "message": "Keanggotaan Premium" @@ -1600,13 +1606,13 @@ "message": "Saran isi otomatis" }, "autofillSpotlightTitle": { - "message": "Easily find autofill suggestions" + "message": "Temukan saran isi otomatis dengan mudah" }, "autofillSpotlightDesc": { - "message": "Turn off your browser's autofill settings, so they don't conflict with Bitwarden." + "message": "Matikan pengaturan isi otomatis peramban Anda, sehingga tidak bertentangan dengan Bitwarden." }, "turnOffBrowserAutofill": { - "message": "Turn off $BROWSER$ autofill", + "message": "Matikan isi otomatis $BROWSER$", "placeholders": { "browser": { "content": "$1", @@ -1615,7 +1621,7 @@ } }, "turnOffAutofill": { - "message": "Turn off autofill" + "message": "Matikan isi otomatis" }, "showInlineMenuLabel": { "message": "Tampilkan saran isi otomatis pada kolom formulir" @@ -1922,6 +1928,9 @@ "typeSshKey": { "message": "Kunci SSH" }, + "typeNote": { + "message": "Catatan" + }, "newItemHeader": { "message": "$TYPE$ baru", "placeholders": { @@ -2153,8 +2162,8 @@ "setYourPinCode": { "message": "Setel kode PIN Anda untuk membuka kunci Bitwarden. Pengaturan PIN Anda akan diatur ulang jika Anda pernah keluar sepenuhnya dari aplikasi." }, - "setYourPinCode1": { - "message": "PIN Anda akan digunakan untuk membuka Bitwarden alih-alih dengan kata sandi utama Anda. PIN Anda akan diatur ulang apabila Anda pernah keluar sepenuhnya dari Bitwarden." + "setPinCode": { + "message": "Anda dapat menggunakan PIN ini untuk membuka Bitwarden. PIN Anda akan diatur ulang jika Anda keluar dari semua sesi aplikasi." }, "pinRequired": { "message": "Membutuhkan kode PIN." @@ -2204,6 +2213,9 @@ "useThisPassword": { "message": "Gunakan kata sandi ini" }, + "useThisPassphrase": { + "message": "Gunakan frasa sandi ini" + }, "useThisUsername": { "message": "Gunakan nama pengguna ini" }, @@ -2481,6 +2493,12 @@ "personalOwnershipPolicyInEffectImports": { "message": "Sebuah kebijakan organisasi telah menghalangi mengimpor benda-benda ke brankas pribadi Anda." }, + "restrictCardTypeImport": { + "message": "Cannot import card item types" + }, + "restrictCardTypeImportDesc": { + "message": "A policy set by 1 or more organizations prevents you from importing cards to your vaults." + }, "domainsTitle": { "message": "Domain", "description": "A category title describing the concept of web domains" @@ -2512,6 +2530,10 @@ "change": { "message": "Ubah" }, + "changePassword": { + "message": "Ubah kata sandi", + "description": "Change password button for browser at risk notification on login." + }, "changeButtonTitle": { "message": "Ubah kata sandi - $ITEMNAME$", "placeholders": { @@ -2521,6 +2543,9 @@ } } }, + "atRiskPassword": { + "message": "Kata sandi yang berisiko" + }, "atRiskPasswords": { "message": "Kata sandi yang berrisiko" }, @@ -2555,6 +2580,26 @@ } } }, + "atRiskChangePrompt": { + "message": "Kata sandi Anda untuk situs ini dalam bahaya. $ORGANIZATION$ telah meminta Anda untuk mengubahnya.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + }, + "description": "Notification body when a login triggers an at-risk password change request and the change password domain is known." + }, + "atRiskNavigatePrompt": { + "message": "$ORGANIZATION$ ingin Anda untuk mengubah kata sandi ini karena kata sandi itu dalam bahaya. Pergi ke pengaturan akun Anda untuk mengubah kata sandinya.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + }, + "description": "Notification body when a login triggers an at-risk password change request and no change password domain is provided." + }, "reviewAndChangeAtRiskPassword": { "message": "Tinjau dan ubah satu kata sandi berrisiko" }, @@ -2674,6 +2719,10 @@ "message": "Semua Sends", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "maxAccessCountReached": { + "message": "Jumlah akses maksimum tercapai", + "description": "This text will be displayed after a Send has been accessed the maximum amount of times." + }, "hideTextByDefault": { "message": "Sembunyikan teks secara bawaan" }, @@ -2876,6 +2925,9 @@ "emailVerificationRequiredDesc": { "message": "Anda harus memverifikasi email Anda untuk menggunakan fitur ini. Anda dapat memverifikasi email Anda di brankas web." }, + "masterPasswordSuccessfullySet": { + "message": "Master password successfully set" + }, "updatedMasterPassword": { "message": "Kata Sandi Utama Telah Diperbarui" }, @@ -3015,13 +3067,13 @@ "message": "Tidak ada pengidentifikasi unik yang ditemukan." }, "removeMasterPasswordForOrganizationUserKeyConnector": { - "message": "A master password is no longer required for members of the following organization. Please confirm the domain below with your organization administrator." + "message": "Sebuah kata sandi utama tidak lagi dibutuhkan untuk para anggota dari organisasi berikut. Silakan konfirmasi domain berikut kepada pengelola organisasi Anda." }, "organizationName": { - "message": "Organization name" + "message": "Nama organisasi" }, "keyConnectorDomain": { - "message": "Key Connector domain" + "message": "Domain penghubung kunci" }, "leaveOrganization": { "message": "Tinggalkan Organisasi" @@ -3408,6 +3460,9 @@ "logInRequestSent": { "message": "Permintaan terkirim" }, + "masterPasswordChanged": { + "message": "Master password saved" + }, "exposedMasterPassword": { "message": "Kata Sandi Utama yang Terpapar" }, @@ -3522,6 +3577,12 @@ "requestAdminApproval": { "message": "Minta persetujuan admin" }, + "unableToCompleteLogin": { + "message": "Unable to complete login" + }, + "loginOnTrustedDeviceOrAskAdminToAssignPassword": { + "message": "You need to log in on a trusted device or ask your administrator to assign you a password." + }, "ssoIdentifierRequired": { "message": "Pengenal SSO organisasi diperlukan." }, @@ -3607,20 +3668,12 @@ "trustUser": { "message": "Percayai pengguna" }, - "sendsNoItemsTitle": { - "message": "Tidak ada Send yang aktif", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendsNoItemsMessage": { - "message": "Gunakan Send untuk membagikan informasi terenkripsi secara aman dengan siapapun.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "sendsTitleNoItems": { - "message": "Send sensitive information safely", + "message": "Kirim informasi sensitif dengan aman", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "sendsBodyNoItems": { - "message": "Share files and data securely with anyone, on any platform. Your information will remain end-to-end encrypted while limiting exposure.", + "message": "Bagikan berkas-berkas dan data secara aman dengan siapa saja, pada platform apapun. Informasi Anda akan tetap terenkripsi dari ujung-ke-ujung sembari membatasi paparan.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "inputRequired": { @@ -4209,6 +4262,26 @@ "message": "Format umum", "description": "Label indicating the most common import formats" }, + "uriMatchDefaultStrategyHint": { + "message": "URI match detection is how Bitwarden identifies autofill suggestions.", + "description": "Explains to the user that URI match detection determines how Bitwarden suggests autofill options, and clarifies that this default strategy applies when no specific match detection is set for a login item." + }, + "regExAdvancedOptionWarning": { + "message": "\"Regular expression\" is an advanced option with increased risk of exposing credentials.", + "description": "Content for dialog which warns a user when selecting 'regular expression' matching strategy as a cipher match strategy" + }, + "startsWithAdvancedOptionWarning": { + "message": "\"Starts with\" is an advanced option with increased risk of exposing credentials.", + "description": "Content for dialog which warns a user when selecting 'starts with' matching strategy as a cipher match strategy" + }, + "uriMatchWarningDialogLink": { + "message": "More about match detection", + "description": "Link to match detection docs on warning dialog for advance match strategy" + }, + "uriAdvancedOption": { + "message": "Advanced options", + "description": "Advanced option placeholder for uri option component" + }, "confirmContinueToBrowserSettingsTitle": { "message": "Lanjutkan ke pengaturan peramban?", "description": "Title for dialog which asks if the user wants to proceed to a relevant browser settings page" @@ -4561,10 +4634,10 @@ "message": "Unduh dari bitwarden.com sekarang" }, "getItOnGooglePlay": { - "message": "Get it on Google Play" + "message": "Dapatkan di Google Play" }, "downloadOnTheAppStore": { - "message": "Download on the App Store" + "message": "Unduh di App Store" }, "permanentlyDeleteAttachmentConfirmation": { "message": "Apakah Anda yakin ingin menghapus lampiran ini selamanya?" @@ -4867,13 +4940,13 @@ } }, "successfullyAssignedCollections": { - "message": "Successfully assigned collections" + "message": "Berhasil menetapkan koleksi" }, "nothingSelected": { - "message": "You have not selected anything." + "message": "Anda belum memilih apa pun." }, "itemsMovedToOrg": { - "message": "Items moved to $ORGNAME$", + "message": "Benda dipindah ke $ORGNAME$", "placeholders": { "orgname": { "content": "$1", @@ -4882,7 +4955,7 @@ } }, "itemMovedToOrg": { - "message": "Item moved to $ORGNAME$", + "message": "Benda dipindah ke $ORGNAME$", "placeholders": { "orgname": { "content": "$1", @@ -4891,7 +4964,7 @@ } }, "reorderFieldDown": { - "message": "$LABEL$ moved down, position $INDEX$ of $LENGTH$", + "message": "$LABEL$ dipindah ke bawah, posisi $INDEX$ dari $LENGTH$", "placeholders": { "label": { "content": "$1", @@ -4911,25 +4984,25 @@ "message": "Lokasi Item" }, "fileSend": { - "message": "File Send" + "message": "Berkas Send" }, "fileSends": { - "message": "File Sends" + "message": "Berkas-berkas Send" }, "textSend": { - "message": "Text Send" + "message": "Teks Send" }, "textSends": { - "message": "Text Sends" + "message": "Teks Send" }, "accountActions": { "message": "Tindakan akun" }, "showNumberOfAutofillSuggestions": { - "message": "Show number of login autofill suggestions on extension icon" + "message": "Tampilkan jumlah saran isi otomatis login pada ikon pengaya" }, "showQuickCopyActions": { - "message": "Show quick copy actions on Vault" + "message": "Tampilkan tindakan salin cepat pada Vault" }, "systemDefault": { "message": "Baku sistem" @@ -4965,58 +5038,58 @@ "message": "Coba lagi" }, "vaultCustomTimeoutMinimum": { - "message": "Minimum custom timeout is 1 minute." + "message": "Minimal tenggat waktu ubahsuai adalah 1 menit." }, "additionalContentAvailable": { - "message": "Additional content is available" + "message": "Konten tambahan telah tersedia" }, "fileSavedToDevice": { - "message": "File saved to device. Manage from your device downloads." + "message": "Berkas tersimpan di perangkat. Kelola dari unduhan perangkat Anda." }, "showCharacterCount": { "message": "Tunjukkan cacah karakter" }, "hideCharacterCount": { - "message": "Hide character count" + "message": "Sembunyikan jumlah karakter" }, "itemsInTrash": { - "message": "Items in trash" + "message": "Benda-benda di tempat sampah" }, "noItemsInTrash": { - "message": "No items in trash" + "message": "Tidak ada benda di tempat sampah" }, "noItemsInTrashDesc": { - "message": "Items you delete will appear here and be permanently deleted after 30 days" + "message": "Benda-benda yang Anda hapus akan muncul di sini dan akan dihapus selamanya setelah 30 hari" }, "trashWarning": { - "message": "Items that have been in trash more than 30 days will automatically be deleted" + "message": "Benda-benda yang berada di tempat sampah lebih dari 30 hari akan dihapus secara otomatis" }, "restore": { - "message": "Restore" + "message": "Pulihkan" }, "deleteForever": { - "message": "Delete forever" + "message": "Hapus selamanya" }, "noEditPermissions": { - "message": "You don't have permission to edit this item" + "message": "Anda tidak memiliki izin untuk menyunting benda ini" }, "biometricsStatusHelptextUnlockNeeded": { - "message": "Biometric unlock is unavailable because PIN or password unlock is required first." + "message": "Buka dengan biometrik tidak tersedia karena memerlukan PIN atau kata sandi untuk membuka terlebih dahulu." }, "biometricsStatusHelptextHardwareUnavailable": { - "message": "Biometric unlock is currently unavailable." + "message": "Buka dengan biometrik tidak tersedia untuk saat ini." }, "biometricsStatusHelptextAutoSetupNeeded": { - "message": "Biometric unlock is unavailable due to misconfigured system files." + "message": "Buka dengan biometrik tidak tersedia karena pengaturan berkas-berkas sistem yang tidak sesuai." }, "biometricsStatusHelptextManualSetupNeeded": { - "message": "Biometric unlock is unavailable due to misconfigured system files." + "message": "Buka dengan biometrik tidak tersedia karena pengaturan berkas-berkas sistem yang tidak sesuai." }, "biometricsStatusHelptextDesktopDisconnected": { - "message": "Biometric unlock is unavailable because the Bitwarden desktop app is closed." + "message": "Buka dengan biometrik tidak tersedia karena aplikasi destop Bitwarden tertutup." }, "biometricsStatusHelptextNotEnabledInDesktop": { - "message": "Biometric unlock is unavailable because it is not enabled for $EMAIL$ in the Bitwarden desktop app.", + "message": "Buka dengan biometrik tidak tersedia karena tidak dinyalakan untuk $EMAIL$ pada aplikasi destop Bitwarden.", "placeholders": { "email": { "content": "$1", @@ -5025,22 +5098,25 @@ } }, "biometricsStatusHelptextUnavailableReasonUnknown": { - "message": "Biometric unlock is currently unavailable for an unknown reason." + "message": "Buka dengan biometrik tidak tersedia untuk saat ini karena alasan yang tidak diketahui." }, "unlockVault": { - "message": "Unlock your vault in seconds" + "message": "Buka brankas Anda dalam hitungan detik" }, "unlockVaultDesc": { - "message": "You can customize your unlock and timeout settings to more quickly access your vault." + "message": "Anda dapat mengubahsuai pengaturan membuka dan waktu tenggat Anda agar dapat lebih cepat mengakses brankas Anda." }, "unlockPinSet": { - "message": "Unlock PIN set" + "message": "PIN untuk membuka telah diatur" + }, + "unlockWithBiometricSet": { + "message": "Unlock with biometrics set" }, "authenticating": { - "message": "Authenticating" + "message": "Sedang memeriksa keaslian" }, "fillGeneratedPassword": { - "message": "Fill generated password", + "message": "Isi kata sandi yang dihasilkan", "description": "Heading for the password generator within the inline menu" }, "passwordRegenerated": { @@ -5048,7 +5124,7 @@ "description": "Notification message for when a password has been regenerated" }, "saveToBitwarden": { - "message": "Save to Bitwarden", + "message": "Simpan ke Bitwarden", "description": "Confirmation message for saving a login to Bitwarden" }, "spaceCharacterDescriptor": { @@ -5253,67 +5329,67 @@ "message": "Ubah kata sandi yang berrisiko" }, "settingsVaultOptions": { - "message": "Vault options" + "message": "Pilihan brankas" }, "emptyVaultDescription": { - "message": "The vault protects more than just your passwords. Store secure logins, IDs, cards and notes securely here." + "message": "Brankas melindungi lebih dari kata sandi Anda. Simpan login aman, pengenal, kartu dan catatan secara aman di sini." }, "introCarouselLabel": { - "message": "Welcome to Bitwarden" + "message": "Selamat datang ke Bitwarden" }, "securityPrioritized": { - "message": "Security, prioritized" + "message": "Keamanan, diutamakan" }, "securityPrioritizedBody": { - "message": "Save logins, cards, and identities to your secure vault. Bitwarden uses zero-knowledge, end-to-end encryption to protect what’s important to you." + "message": "Simpan login, kartu, dan pengenal ke brankas aman Anda. Bitwarden menggunakan ketidaktahuan, enkripsi dari ujung-ke-ujung untuk melindungi apa yang penting bagi Anda." }, "quickLogin": { - "message": "Quick and easy login" + "message": "Masuk dengan cepat dan mudah" }, "quickLoginBody": { - "message": "Set up biometric unlock and autofill to log into your accounts without typing a single letter." + "message": "Atur buka dengan biometrik dan isi otomatis untuk masuk ke akun-akun Anda tanpa mengetik sebuah huruf." }, "secureUser": { - "message": "Level up your logins" + "message": "Tingkatkan login Anda" }, "secureUserBody": { - "message": "Use the generator to create and save strong, unique passwords for all your accounts." + "message": "Gunakan penghasil untuk membuat dan menyimpan kata sandi yang kuat dan unit untuk semua akun Anda." }, "secureDevices": { - "message": "Your data, when and where you need it" + "message": "Data Anda, kapanpun dan dimanapun Anda membutuhkannya" }, "secureDevicesBody": { - "message": "Save unlimited passwords across unlimited devices with Bitwarden mobile, browser, and desktop apps." + "message": "Simpan kata sandi tak terbatas lintas perangkat tak terbatas dengan Bitwarden untuk ponsel, peramban, dan aplikasi destop." }, "nudgeBadgeAria": { - "message": "1 notification" + "message": "1 pemberitahuan" }, "emptyVaultNudgeTitle": { - "message": "Import existing passwords" + "message": "Impor kata sandi yang sudah ada" }, "emptyVaultNudgeBody": { - "message": "Use the importer to quickly transfer logins to Bitwarden without manually adding them." + "message": "Gunakan pengimpor untuk memindakan login dengan cepat ke Bitwarden tanpa menambahkannya secara manual." }, "emptyVaultNudgeButton": { - "message": "Import now" + "message": "Impor sekarang" }, "hasItemsVaultNudgeTitle": { - "message": "Welcome to your vault!" + "message": "Selamat datang di brankas Anda!" }, "hasItemsVaultNudgeBodyOne": { - "message": "Autofill items for the current page" + "message": "Benda-benda isi otomatis untuk halaman saat ini" }, "hasItemsVaultNudgeBodyTwo": { - "message": "Favorite items for easy access" + "message": "Benda yang disukai untuk akses cepat" }, "hasItemsVaultNudgeBodyThree": { - "message": "Search your vault for something else" + "message": "Cari brankas Anda untuk sesuatu yang lain" }, "newLoginNudgeTitle": { - "message": "Save time with autofill" + "message": "Hemat waktu dengan isi otomatis" }, "newLoginNudgeBodyOne": { - "message": "Include a", + "message": "Sertakan", "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", "example": "Include a Website so this login appears as an autofill suggestion." }, @@ -5359,23 +5435,27 @@ "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, "generatorNudgeTitle": { - "message": "Quickly create passwords" + "message": "Buat kata sandi dengan cepat" }, "generatorNudgeBodyOne": { - "message": "Easily create strong and unique passwords by clicking on", + "message": "Buat kata sandi yang kuat dan unik dengan mudah dengan menekan pada", "description": "Two part message", "example": "Easily create strong and unique passwords by clicking on {icon} to help you keep your logins secure." }, "generatorNudgeBodyTwo": { - "message": "to help you keep your logins secure.", + "message": "untuk membantu Anda menyimpan login Anda dengan aman.", "description": "Two part message", "example": "Easily create strong and unique passwords by clicking on {icon} to help you keep your logins secure." }, "generatorNudgeBodyAria": { - "message": "Easily create strong and unique passwords by clicking on the Generate password button to help you keep your logins secure.", + "message": "Buat kata sandi yang kuat dan unik dengan mudah dengan menekan pada tombol Buat kata sandi untuk membantu Anda menyimpan login Anda dengan aman.", "description": "Aria label for the body content of the generator nudge" }, "noPermissionsViewPage": { - "message": "You do not have permissions to view this page. Try logging in with a different account." + "message": "Anda tidak memiliki izin untuk melihat halaman ini. Coba masuk dengan akun yang berbeda." + }, + "wasmNotSupported": { + "message": "WebAssembly tidak didukung atau tidak dinyalakan oleh peramban Anda. Web Assembly diperlukan untuk menggunakan aplikasi Bitwarden.", + "description": "'WebAssembly' is a technical term and should not be translated." } } diff --git a/apps/browser/src/_locales/it/messages.json b/apps/browser/src/_locales/it/messages.json index 9a5d2c65bb6..f4829ecabec 100644 --- a/apps/browser/src/_locales/it/messages.json +++ b/apps/browser/src/_locales/it/messages.json @@ -3,7 +3,7 @@ "message": "Bitwarden" }, "appLogoLabel": { - "message": "Bitwarden logo" + "message": "Logo di Bitwarden" }, "extName": { "message": "Bitwarden Password Manager", @@ -23,7 +23,7 @@ "message": "Crea account" }, "newToBitwarden": { - "message": "Sei un nuovo utente?" + "message": "Sei nuovo su Bitwarden?" }, "logInWithPasskey": { "message": "Accedi con passkey" @@ -32,7 +32,7 @@ "message": "Usa il Single Sign-On" }, "welcomeBack": { - "message": "Bentornat*" + "message": "Bentornato/a" }, "setAStrongPassword": { "message": "Imposta una password robusta" @@ -132,7 +132,7 @@ "message": "Copia password" }, "copyPassphrase": { - "message": "Copia passphrase" + "message": "Copia frase segreta" }, "copyNote": { "message": "Copia nota" @@ -462,13 +462,13 @@ "message": "Genera password" }, "generatePassphrase": { - "message": "Genera passphrase" + "message": "Genera frase segreta" }, "passwordGenerated": { "message": "Parola d'accesso generata" }, "passphraseGenerated": { - "message": "Frase d'accesso generata" + "message": "Frase segreta generata" }, "usernameGenerated": { "message": "Nome utente generato" @@ -887,7 +887,7 @@ "message": "Segui i passaggi qui sotto per completare l'accesso." }, "followTheStepsBelowToFinishLoggingInWithSecurityKey": { - "message": "Follow the steps below to finish logging in with your security key." + "message": "Segui i passaggi seguenti per finire di accedere con la tua chiave di sicurezza." }, "restartRegistration": { "message": "Ricomincia la registrazione" @@ -1063,7 +1063,7 @@ "message": "Salva" }, "notificationViewAria": { - "message": "View $ITEMNAME$, opens in new window", + "message": "Visualizza $ITEMNAME$, si apre in una nuova finestra", "placeholders": { "itemName": { "content": "$1" @@ -1072,18 +1072,18 @@ "description": "Aria label for the view button in notification bar confirmation message" }, "notificationNewItemAria": { - "message": "New Item, opens in new window", + "message": "Nuovo elemento, si apre in una nuova finestra", "description": "Aria label for the new item button in notification bar confirmation message when error is prompted" }, "notificationEditTooltip": { - "message": "Edit before saving", + "message": "Modifica prima di salvare", "description": "Tooltip and Aria label for edit button on cipher item" }, "newNotification": { - "message": "New notification" + "message": "Nuova notifica" }, "labelWithNotification": { - "message": "$LABEL$: New notification", + "message": "$LABEL$: Nuova notifica", "description": "Label for the notification with a new login suggestion.", "placeholders": { "label": { @@ -1093,15 +1093,15 @@ } }, "notificationLoginSaveConfirmation": { - "message": "saved to Bitwarden.", + "message": "salvato in Bitwarden.", "description": "Shown to user after item is saved." }, "notificationLoginUpdatedConfirmation": { - "message": "updated in Bitwarden.", + "message": "aggiornato in Bitwarden.", "description": "Shown to user after item is updated." }, "selectItemAriaLabel": { - "message": "Select $ITEMTYPE$, $ITEMNAME$", + "message": "Seleziona $ITEMTYPE$, $ITEMNAME$", "description": "Used by screen readers. $1 is the item type (like vault or folder), $2 is the selected item name.", "placeholders": { "itemType": { @@ -1113,35 +1113,35 @@ } }, "saveAsNewLoginAction": { - "message": "Salva come nuovo accesso", + "message": "Salva come nuovo login", "description": "Button text for saving login details as a new entry." }, "updateLoginAction": { - "message": "Aggiorna accesso", + "message": "Aggiorna login", "description": "Button text for updating an existing login entry." }, "unlockToSave": { - "message": "Unlock to save this login", + "message": "Sblocca per salvare questo login", "description": "User prompt to take action in order to save the login they just entered." }, "saveLogin": { - "message": "Save login", + "message": "Salva il login", "description": "Prompt asking the user if they want to save their login details." }, "updateLogin": { - "message": "Update existing login", + "message": "Aggiorna login esistente", "description": "Prompt asking the user if they want to update an existing login entry." }, "loginSaveSuccess": { - "message": "Accesso salvato", + "message": "Login salvato", "description": "Message displayed when login details are successfully saved." }, "loginUpdateSuccess": { - "message": "Accesso aggiornato", + "message": "Login aggiornato", "description": "Message displayed when login details are successfully updated." }, "loginUpdateTaskSuccess": { - "message": "Great job! You took the steps to make you and $ORGANIZATION$ more secure.", + "message": "Congratulazioni! Hai reso $ORGANIZATION$ e te stesso più sicuri.", "placeholders": { "organization": { "content": "$1" @@ -1150,7 +1150,7 @@ "description": "Shown to user after login is updated." }, "loginUpdateTaskSuccessAdditional": { - "message": "Thank you for making $ORGANIZATION$ more secure. You have $TASK_COUNT$ more passwords to update.", + "message": "Grazie per aver reso $ORGANIZATION$ più sicuro. Hai altre $TASK_COUNT$ password da aggiornare.", "placeholders": { "organization": { "content": "$1" @@ -1162,7 +1162,7 @@ "description": "Shown to user after login is updated." }, "nextSecurityTaskAction": { - "message": "Change next password", + "message": "Cambia la prossima password", "description": "Message prompting user to undertake completion of another security task." }, "saveFailure": { @@ -1170,9 +1170,15 @@ "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.", + "message": "Oh no! Il salvataggio non è riuscito. Prova a inserire i dati manualmente.", "description": "Detailed error message shown when saving login details fails." }, + "changePasswordWarning": { + "message": "After changing your password, you will need to log in with your new password. Active sessions on other devices will be logged out within one hour." + }, + "accountRecoveryUpdateMasterPasswordSubtitle": { + "message": "Change your master password to complete account recovery." + }, "enableChangedPasswordNotification": { "message": "Chiedi di aggiornare il login esistente" }, @@ -1365,8 +1371,8 @@ "featureUnavailable": { "message": "Funzionalità non disponibile" }, - "encryptionKeyMigrationRequired": { - "message": "Migrazione della chiave di crittografia obbligatoria. Accedi tramite la cassaforte web per aggiornare la tua chiave di crittografia." + "legacyEncryptionUnsupported": { + "message": "La crittografia legacy non è più supportata. Contatta l'assistenza per recuperare il tuo account." }, "premiumMembership": { "message": "Abbonamento Premium" @@ -1600,13 +1606,13 @@ "message": "Suggerimenti per il riempimento automatico" }, "autofillSpotlightTitle": { - "message": "Easily find autofill suggestions" + "message": "Trova facilmente suggerimenti di riempimento automatico" }, "autofillSpotlightDesc": { - "message": "Turn off your browser's autofill settings, so they don't conflict with Bitwarden." + "message": "Disattiva le impostazioni di riempimento automatico del tuo browser, in modo da non entrare in conflitto con Bitwarden." }, "turnOffBrowserAutofill": { - "message": "Turn off $BROWSER$ autofill", + "message": "Disattiva il riempimento automatico di $BROWSER$", "placeholders": { "browser": { "content": "$1", @@ -1615,7 +1621,7 @@ } }, "turnOffAutofill": { - "message": "Turn off autofill" + "message": "Disattiva il riempimento automatico" }, "showInlineMenuLabel": { "message": "Mostra suggerimenti di riempimento automatico nei campi del modulo" @@ -1922,6 +1928,9 @@ "typeSshKey": { "message": "Chiave SSH" }, + "typeNote": { + "message": "Nota" + }, "newItemHeader": { "message": "Nuovo $TYPE$", "placeholders": { @@ -2153,8 +2162,8 @@ "setYourPinCode": { "message": "Imposta il tuo codice PIN per sbloccare Bitwarden. Le tue impostazioni PIN saranno resettate se esci completamente dall'app." }, - "setYourPinCode1": { - "message": "Il tuo PIN sarà usato per sbloccare Bitwarden invece della password principale. Il PIN sarà ripristinato se ti disconnetterai completamente da Bitwarden." + "setPinCode": { + "message": "Puoi usare il PIN per sbloccare Bitwarden. Il PIN sarà disattivato ogni volta che ti scolleghi dall'account." }, "pinRequired": { "message": "Codice PIN obbligatorio." @@ -2204,6 +2213,9 @@ "useThisPassword": { "message": "Usa questa password" }, + "useThisPassphrase": { + "message": "Usa questa frase segreta" + }, "useThisUsername": { "message": "Usa questo nome utente" }, @@ -2374,7 +2386,7 @@ "message": "Informativa sulla Privacy" }, "yourNewPasswordCannotBeTheSameAsYourCurrentPassword": { - "message": "Your new password cannot be the same as your current password." + "message": "La tua nuova password non può essere la stessa della tua password attuale." }, "hintEqualsPassword": { "message": "Il suggerimento della password non può essere uguale alla password." @@ -2481,6 +2493,12 @@ "personalOwnershipPolicyInEffectImports": { "message": "Una politica dell'organizzazione ti impedisce di importare elementi nella tua cassaforte individuale." }, + "restrictCardTypeImport": { + "message": "Impossibile importare elementi di tipo carta" + }, + "restrictCardTypeImportDesc": { + "message": "Non puoi importare carte nelle tue casseforti a causa di una politica impostata da una o più organizzazioni." + }, "domainsTitle": { "message": "Domini", "description": "A category title describing the concept of web domains" @@ -2512,6 +2530,10 @@ "change": { "message": "Cambia" }, + "changePassword": { + "message": "Cambia password", + "description": "Change password button for browser at risk notification on login." + }, "changeButtonTitle": { "message": "Cambia parola d'accesso - $ITEMNAME$", "placeholders": { @@ -2521,6 +2543,9 @@ } } }, + "atRiskPassword": { + "message": "Password a rischio" + }, "atRiskPasswords": { "message": "Parola d'accesso a rischio" }, @@ -2555,6 +2580,26 @@ } } }, + "atRiskChangePrompt": { + "message": "La tua password per questo sito è a rischio. $ORGANIZATION$ ha richiesto di modificarla.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + }, + "description": "Notification body when a login triggers an at-risk password change request and the change password domain is known." + }, + "atRiskNavigatePrompt": { + "message": "$ORGANIZATION$ ti chiede di cambiare la tua password perché è a rischio. Vai alle impostazioni del tuo account per la modifica.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + }, + "description": "Notification body when a login triggers an at-risk password change request and no change password domain is provided." + }, "reviewAndChangeAtRiskPassword": { "message": "Rivedi e modifica una parola d'accesso a rischio" }, @@ -2580,18 +2625,18 @@ "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.", + "message": "Le password 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" }, "reviewAtRiskLoginSlideImgAltPeriod": { - "message": "Illustration of a list of logins that are at-risk." + "message": "Illustrazione di una lista di login 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" }, "generatePasswordSlideImgAltPeriod": { - "message": "Illustration of the Bitwarden autofill menu displaying a generated password." + "message": "Illustrazione del menu di riempimento automatico Bitwarden che mostra una password generata." }, "updateInBitwarden": { "message": "Aggiorna in Bitwarden" @@ -2601,7 +2646,7 @@ "description": "Description of the update in Bitwarden slide on the at-risk password page carousel" }, "updateInBitwardenSlideImgAltPeriod": { - "message": "Illustration of a Bitwarden’s notification prompting the user to update the login." + "message": "Illustrazione di una notifica Bitwarden che richiede all'utente di aggiornare il login." }, "turnOnAutofill": { "message": "Attiva riempimento automatico" @@ -2674,6 +2719,10 @@ "message": "Tutti i Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "maxAccessCountReached": { + "message": "Raggiunto il limite massimo degli accessi", + "description": "This text will be displayed after a Send has been accessed the maximum amount of times." + }, "hideTextByDefault": { "message": "Nascondi testo come default" }, @@ -2876,6 +2925,9 @@ "emailVerificationRequiredDesc": { "message": "Devi verificare la tua email per usare questa funzionalità. Puoi verificare la tua email nella cassaforte web." }, + "masterPasswordSuccessfullySet": { + "message": "Master password successfully set" + }, "updatedMasterPassword": { "message": "Password principale aggiornata" }, @@ -3015,13 +3067,13 @@ "message": "Nessun identificatore univoco trovato." }, "removeMasterPasswordForOrganizationUserKeyConnector": { - "message": "A master password is no longer required for members of the following organization. Please confirm the domain below with your organization administrator." + "message": "La password principale non è più richiesta per i membri dell'organizzazione. Per favore, conferma il dominio qui sotto con l'amministratore." }, "organizationName": { - "message": "Organization name" + "message": "Nome organizzazione" }, "keyConnectorDomain": { - "message": "Key Connector domain" + "message": "Dominio Key Connector" }, "leaveOrganization": { "message": "Lascia organizzazione" @@ -3057,7 +3109,7 @@ } }, "exportingIndividualVaultWithAttachmentsDescription": { - "message": "Only the individual vault items including attachments associated with $EMAIL$ will be exported. Organization vault items will not be included", + "message": "Solo gli elementi della cassaforte personale associati a $EMAIL$, includendo gli allegati, saranno esportati. Gli elementi della cassaforte dell'organizzazione non saranno inclusi", "placeholders": { "email": { "content": "$1", @@ -3125,7 +3177,7 @@ } }, "passphraseNumWordsRecommendationHint": { - "message": " Usa $RECOMMENDED$ parole o più per generare una passphrase forte.", + "message": " Usa $RECOMMENDED$ parole o più per generare una frase segreta forte.", "description": "Appended to `spinboxBoundariesHint` to recommend a number of words to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", "placeholders": { "recommended": { @@ -3408,6 +3460,9 @@ "logInRequestSent": { "message": "Richiesta inviata" }, + "masterPasswordChanged": { + "message": "Master password saved" + }, "exposedMasterPassword": { "message": "Password principale violata" }, @@ -3522,6 +3577,12 @@ "requestAdminApproval": { "message": "Richiedi approvazione dell'amministratore" }, + "unableToCompleteLogin": { + "message": "Unable to complete login" + }, + "loginOnTrustedDeviceOrAskAdminToAssignPassword": { + "message": "You need to log in on a trusted device or ask your administrator to assign you a password." + }, "ssoIdentifierRequired": { "message": "Identificatore SSO dell'organizzazione obbligatorio." }, @@ -3584,43 +3645,35 @@ "message": "Dispositivo fidato" }, "trustOrganization": { - "message": "Trust organization" + "message": "Fidati dell'organizzazione" }, "trust": { - "message": "Trust" + "message": "Fidati" }, "doNotTrust": { - "message": "Do not trust" + "message": "Non considerare affidabile" }, "organizationNotTrusted": { - "message": "Organization is not trusted" + "message": "L'organizzazione non è fidata" }, "emergencyAccessTrustWarning": { - "message": "For the security of your account, only confirm if you have granted emergency access to this user and their fingerprint matches what is displayed in their account" + "message": "Per la sicurezza del tuo account, conferma solo se hai concesso l'accesso di emergenza a questo utente e le loro impronte digitali corrispondono a quelle contenute nel loro account" }, "orgTrustWarning": { - "message": "For the security of your account, only proceed if you are a member of this organization, have account recovery enabled, and the fingerprint displayed below matches the organization's fingerprint." + "message": "Per la sicurezza del tuo account, procedi solo se sei un membro di questa organizzazione, il recupero dell'account è abilitato e l'impronta digitale visualizzata di seguito corrisponde all'impronta digitale dell'organizzazione." }, "orgTrustWarning1": { - "message": "This organization has an Enterprise policy that will enroll you in account recovery. Enrollment will allow organization administrators to change your password. Only proceed if you recognize this organization and the fingerprint phrase displayed below matches the organization's fingerprint." + "message": "Questa organizzazione ha una politica Enterprise che ti iscriverà al recupero dell'account. La registrazione consentirà agli amministratori dell'organizzazione di modificare la password. Procedi solo se riconosci questa organizzazione e la frase di impronta digitale mostrata di seguito corrisponde all'impronta digitale dell'organizzazione." }, "trustUser": { - "message": "Trust user" - }, - "sendsNoItemsTitle": { - "message": "Nessun Send attivo", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendsNoItemsMessage": { - "message": "Utilizza un Send per condividere in modo sicuro le informazioni con qualsiasi utente.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + "message": "Fidati dell'utente" }, "sendsTitleNoItems": { - "message": "Send sensitive information safely", + "message": "Invia informazioni sensibili in modo sicuro", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "sendsBodyNoItems": { - "message": "Share files and data securely with anyone, on any platform. Your information will remain end-to-end encrypted while limiting exposure.", + "message": "Condividi file e dati in modo sicuro con chiunque, su qualsiasi piattaforma. Le tue informazioni saranno crittografate end-to-end.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "inputRequired": { @@ -3821,7 +3874,7 @@ "description": "Button text to display within inline menu when there are no matching items on a login field" }, "addNewLoginItemAria": { - "message": "Aggiungi un nuovo elemento \"login\" alla cassaforte, apri in una nuova finestra", + "message": "Aggiungi un nuovo elemento 'login' alla cassaforte (si apre in una nuova finestra)", "description": "Screen reader text (aria-label) for new login button within inline menu" }, "newCard": { @@ -4209,6 +4262,26 @@ "message": "Formati comuni", "description": "Label indicating the most common import formats" }, + "uriMatchDefaultStrategyHint": { + "message": "URI match detection is how Bitwarden identifies autofill suggestions.", + "description": "Explains to the user that URI match detection determines how Bitwarden suggests autofill options, and clarifies that this default strategy applies when no specific match detection is set for a login item." + }, + "regExAdvancedOptionWarning": { + "message": "\"Regular expression\" is an advanced option with increased risk of exposing credentials.", + "description": "Content for dialog which warns a user when selecting 'regular expression' matching strategy as a cipher match strategy" + }, + "startsWithAdvancedOptionWarning": { + "message": "\"Starts with\" is an advanced option with increased risk of exposing credentials.", + "description": "Content for dialog which warns a user when selecting 'starts with' matching strategy as a cipher match strategy" + }, + "uriMatchWarningDialogLink": { + "message": "More about match detection", + "description": "Link to match detection docs on warning dialog for advance match strategy" + }, + "uriAdvancedOption": { + "message": "Advanced options", + "description": "Advanced option placeholder for uri option component" + }, "confirmContinueToBrowserSettingsTitle": { "message": "Continua sulle impostazioni del browser?", "description": "Title for dialog which asks if the user wants to proceed to a relevant browser settings page" @@ -4355,7 +4428,7 @@ } }, "viewItemTitleWithField": { - "message": "View item - $ITEMNAME$ - $FIELD$", + "message": "Visualizza elemento - $ITEMNAME$ - $FIELD$", "description": "Title for a link that opens a view for an item.", "placeholders": { "itemname": { @@ -4379,7 +4452,7 @@ } }, "autofillTitleWithField": { - "message": "Autofill - $ITEMNAME$ - $FIELD$", + "message": "Riempimento automatico - $ITEMNAME$ - $FIELD$", "description": "Title for a button that autofills a login item.", "placeholders": { "itemname": { @@ -4540,31 +4613,31 @@ } }, "downloadBitwarden": { - "message": "Download Bitwarden" + "message": "Scarica Bitwarden" }, "downloadBitwardenOnAllDevices": { - "message": "Download Bitwarden on all devices" + "message": "Scarica Bitwarden su tutti i dispositivi" }, "getTheMobileApp": { - "message": "Get the mobile app" + "message": "Scarica l'app mobile" }, "getTheMobileAppDesc": { - "message": "Access your passwords on the go with the Bitwarden mobile app." + "message": "Accedi alle tue password ovunque con l'app Bitwarden per dispositivi mobili." }, "getTheDesktopApp": { - "message": "Get the desktop app" + "message": "Scarica l'app desktop" }, "getTheDesktopAppDesc": { - "message": "Access your vault without a browser, then set up unlock with biometrics to expedite unlocking in both the desktop app and browser extension." + "message": "Accedi alla tua cassaforte senza browser, quindi imposta lo sblocco biometrico per accelerare l'accesso sia all'app desktop che all'estensione." }, "downloadFromBitwardenNow": { - "message": "Download from bitwarden.com now" + "message": "Scarica ora da bitwarden.com" }, "getItOnGooglePlay": { - "message": "Get it on Google Play" + "message": "Disponible su Google Play" }, "downloadOnTheAppStore": { - "message": "Download on the App Store" + "message": "Scarica dall'App Store" }, "permanentlyDeleteAttachmentConfirmation": { "message": "Sei sicuro di voler eliminare definitivamente questo allegato?" @@ -5028,13 +5101,16 @@ "message": "Lo sblocco biometrico non è attualmente disponibile per un motivo sconosciuto." }, "unlockVault": { - "message": "Unlock your vault in seconds" + "message": "Sblocca la cassaforte in secondi" }, "unlockVaultDesc": { - "message": "You can customize your unlock and timeout settings to more quickly access your vault." + "message": "Puoi personalizzare le impostazioni di sblocco e timeout per accedere più rapidamente alla tua cassaforte." }, "unlockPinSet": { - "message": "Unlock PIN set" + "message": "Sblocca PIN impostato" + }, + "unlockWithBiometricSet": { + "message": "Sblocca con i dati biometrici" }, "authenticating": { "message": "Autenticazione" @@ -5048,7 +5124,7 @@ "description": "Notification message for when a password has been regenerated" }, "saveToBitwarden": { - "message": "Save to Bitwarden", + "message": "Salva su Bitwarden", "description": "Confirmation message for saving a login to Bitwarden" }, "spaceCharacterDescriptor": { @@ -5253,129 +5329,133 @@ "message": "Cambia parola d'accesso a rischio" }, "settingsVaultOptions": { - "message": "Vault options" + "message": "Opzioni cassaforte" }, "emptyVaultDescription": { - "message": "The vault protects more than just your passwords. Store secure logins, IDs, cards and notes securely here." + "message": "La cassaforte protegge e tiene al sicuro non solo le password, ma anche le passkey, i nomi utente, le identità, le carte e le note." }, "introCarouselLabel": { - "message": "Welcome to Bitwarden" + "message": "Benvenuto su Bitwarden" }, "securityPrioritized": { - "message": "Security, prioritized" + "message": "Sicurezza alla massima priorità" }, "securityPrioritizedBody": { - "message": "Save logins, cards, and identities to your secure vault. Bitwarden uses zero-knowledge, end-to-end encryption to protect what’s important to you." + "message": "Salva login, carte e identità nella tua cassaforte sicura. Bitwarden usa la crittografia end-to-end e zero-knowledge per proteggere i tuoi dati." }, "quickLogin": { - "message": "Quick and easy login" + "message": "Autenticazione facile e veloce" }, "quickLoginBody": { - "message": "Set up biometric unlock and autofill to log into your accounts without typing a single letter." + "message": "Imposta lo sblocco biometrico e il riempimento automatico per accedere ai tuoi account senza digitare una sola lettera." }, "secureUser": { - "message": "Level up your logins" + "message": "Porta i tuoi login al livello successivo" }, "secureUserBody": { - "message": "Use the generator to create and save strong, unique passwords for all your accounts." + "message": "Usa il generatore per creare e salvare password forti e uniche per tutti i tuoi account." }, "secureDevices": { - "message": "Your data, when and where you need it" + "message": "I tuoi dati, dove e quando ti servono" }, "secureDevicesBody": { - "message": "Save unlimited passwords across unlimited devices with Bitwarden mobile, browser, and desktop apps." + "message": "Salva tutte le password che vuoi su un numero illimitato di dispositivi con le app Bitwarden per browser, mobile e desktop." }, "nudgeBadgeAria": { - "message": "1 notification" + "message": "1 notifica" }, "emptyVaultNudgeTitle": { - "message": "Import existing passwords" + "message": "Importa password esistenti" }, "emptyVaultNudgeBody": { - "message": "Use the importer to quickly transfer logins to Bitwarden without manually adding them." + "message": "Usa l'importatore per trasferire rapidamente i login su Bitwarden senza aggiungerli manualmente." }, "emptyVaultNudgeButton": { - "message": "Import now" + "message": "Importa ora" }, "hasItemsVaultNudgeTitle": { - "message": "Welcome to your vault!" + "message": "Benvenuto nella tua cassaforte!" }, "hasItemsVaultNudgeBodyOne": { - "message": "Autofill items for the current page" + "message": "Riempimento automatico per questa pagina" }, "hasItemsVaultNudgeBodyTwo": { - "message": "Favorite items for easy access" + "message": "Trova facilmente gli elementi più usati grazie ai Preferiti" }, "hasItemsVaultNudgeBodyThree": { - "message": "Search your vault for something else" + "message": "Cerca altro nella tua cassaforte" }, "newLoginNudgeTitle": { - "message": "Save time with autofill" + "message": "Accedi in un attimo grazie al riempimento automatico" }, "newLoginNudgeBodyOne": { - "message": "Include a", + "message": "Includi", "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", "example": "Include a Website so this login appears as an autofill suggestion." }, "newLoginNudgeBodyBold": { - "message": "Website", + "message": "Sito", "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", "example": "Include a Website so this login appears as an autofill suggestion." }, "newLoginNudgeBodyTwo": { - "message": "so this login appears as an autofill suggestion.", + "message": "questo login appare come suggerimento per il riempimento automatico.", "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { - "message": "Seamless online checkout" + "message": "Accesso e pagamento online semplificati" }, "newCardNudgeBody": { - "message": "With cards, easily autofill payment forms securely and accurately." + "message": "Con le carte memorizzate, riempi i campi di pagamento in modo facile e veloce." }, "newIdentityNudgeTitle": { - "message": "Simplify creating accounts" + "message": "Semplifica la creazione di account" }, "newIdentityNudgeBody": { - "message": "With identities, quickly autofill long registration or contact forms." + "message": "Con le identità, riempi in un attimo i moduli di registrazione per la creazione di account." }, "newNoteNudgeTitle": { - "message": "Keep your sensitive data safe" + "message": "Mantieni al sicuro i tuoi dati sensibili" }, "newNoteNudgeBody": { - "message": "With notes, securely store sensitive data like banking or insurance details." + "message": "Usa le note per memorizzare in modo sicuro i dati sensibili come i dettagli bancari o assicurativi." }, "newSshNudgeTitle": { - "message": "Developer-friendly SSH access" + "message": "Accesso SSH ideale per gli sviluppatori" }, "newSshNudgeBodyOne": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "message": "Memorizza le chiavi e connettiti con l'agente SSH per un'autenticazione crittografata veloce.", "description": "Two part message", "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, "newSshNudgeBodyTwo": { - "message": "Learn more about SSH agent", + "message": "Scopri di più sull'agente SSH", "description": "Two part message", "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, "generatorNudgeTitle": { - "message": "Quickly create passwords" + "message": "Crea rapidamente password sicure" }, "generatorNudgeBodyOne": { - "message": "Easily create strong and unique passwords by clicking on", + "message": "Crea facilmente password forti e uniche cliccando su", "description": "Two part message", "example": "Easily create strong and unique passwords by clicking on {icon} to help you keep your logins secure." }, "generatorNudgeBodyTwo": { - "message": "to help you keep your logins secure.", + "message": "per aiutarti a mantenere i tuoi login al sicuro.", "description": "Two part message", "example": "Easily create strong and unique passwords by clicking on {icon} to help you keep your logins secure." }, "generatorNudgeBodyAria": { - "message": "Easily create strong and unique passwords by clicking on the Generate password button to help you keep your logins secure.", + "message": "Crea facilmente password forti e uniche cliccando sul pulsante 'Genera password' per aiutarti a mantenere al sicuro i tuoi login.", "description": "Aria label for the body content of the generator nudge" }, "noPermissionsViewPage": { - "message": "You do not have permissions to view this page. Try logging in with a different account." + "message": "Non hai i permessi per visualizzare questa pagina. Prova ad accedere con un altro account." + }, + "wasmNotSupported": { + "message": "WebAssembly non è supportato dal browser o non è abilitato. WebAssembly è richiesto per utilizzare l'app Bitwarden.", + "description": "'WebAssembly' is a technical term and should not be translated." } } diff --git a/apps/browser/src/_locales/ja/messages.json b/apps/browser/src/_locales/ja/messages.json index 5c235bdea43..783a9ff0eb1 100644 --- a/apps/browser/src/_locales/ja/messages.json +++ b/apps/browser/src/_locales/ja/messages.json @@ -1173,6 +1173,12 @@ "message": "保存できませんでした。詳細を手動で入力してください。", "description": "Detailed error message shown when saving login details fails." }, + "changePasswordWarning": { + "message": "After changing your password, you will need to log in with your new password. Active sessions on other devices will be logged out within one hour." + }, + "accountRecoveryUpdateMasterPasswordSubtitle": { + "message": "Change your master password to complete account recovery." + }, "enableChangedPasswordNotification": { "message": "既存のログイン情報の更新を尋ねる" }, @@ -1365,8 +1371,8 @@ "featureUnavailable": { "message": "サービスが利用できません" }, - "encryptionKeyMigrationRequired": { - "message": "暗号化キーの移行が必要です。暗号化キーを更新するには、ウェブ保管庫からログインしてください。" + "legacyEncryptionUnsupported": { + "message": "Legacy encryption is no longer supported. Please contact support to recover your account." }, "premiumMembership": { "message": "プレミアム会員" @@ -1922,6 +1928,9 @@ "typeSshKey": { "message": "SSH 鍵" }, + "typeNote": { + "message": "Note" + }, "newItemHeader": { "message": "$TYPE$ を新規作成", "placeholders": { @@ -2153,8 +2162,8 @@ "setYourPinCode": { "message": "Bitwarden のロックを解除するための PIN コードを設定します。アプリから完全にログアウトすると、PIN 設定はリセットされます。" }, - "setYourPinCode1": { - "message": "あなたの PIN はマスターパスワードの代わりに Bitwarden のロックを解除するために使用されます。Bitwarden から完全にログアウトすると PIN がリセットされます。" + "setPinCode": { + "message": "You can use this PIN to unlock Bitwarden. Your PIN will be reset if you ever fully log out of the application." }, "pinRequired": { "message": "PIN コードが必要です。" @@ -2204,6 +2213,9 @@ "useThisPassword": { "message": "このパスワードを使用する" }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, "useThisUsername": { "message": "このユーザー名を使用する" }, @@ -2481,6 +2493,12 @@ "personalOwnershipPolicyInEffectImports": { "message": "組織のポリシーにより、個々の保管庫へのアイテムのインポートがブロックされました。" }, + "restrictCardTypeImport": { + "message": "Cannot import card item types" + }, + "restrictCardTypeImportDesc": { + "message": "A policy set by 1 or more organizations prevents you from importing cards to your vaults." + }, "domainsTitle": { "message": "ドメイン", "description": "A category title describing the concept of web domains" @@ -2512,6 +2530,10 @@ "change": { "message": "変更" }, + "changePassword": { + "message": "Change password", + "description": "Change password button for browser at risk notification on login." + }, "changeButtonTitle": { "message": "パスワードの変更 - $ITEMNAME$", "placeholders": { @@ -2521,6 +2543,9 @@ } } }, + "atRiskPassword": { + "message": "At-risk password" + }, "atRiskPasswords": { "message": "リスクがあるパスワード" }, @@ -2555,6 +2580,26 @@ } } }, + "atRiskChangePrompt": { + "message": "Your password for this site is at-risk. $ORGANIZATION$ has requested that you change it.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + }, + "description": "Notification body when a login triggers an at-risk password change request and the change password domain is known." + }, + "atRiskNavigatePrompt": { + "message": "$ORGANIZATION$ wants you to change this password because it is at-risk. Navigate to your account settings to change the password.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + }, + "description": "Notification body when a login triggers an at-risk password change request and no change password domain is provided." + }, "reviewAndChangeAtRiskPassword": { "message": "1 件の危険なパスワードを確認・変更する" }, @@ -2674,6 +2719,10 @@ "message": "すべての Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "maxAccessCountReached": { + "message": "Max access count reached", + "description": "This text will be displayed after a Send has been accessed the maximum amount of times." + }, "hideTextByDefault": { "message": "デフォルトでテキストを隠す" }, @@ -2876,6 +2925,9 @@ "emailVerificationRequiredDesc": { "message": "この機能を使用するにはメールアドレスを確認する必要があります。ウェブ保管庫でメールアドレスを確認できます。" }, + "masterPasswordSuccessfullySet": { + "message": "Master password successfully set" + }, "updatedMasterPassword": { "message": "マスターパスワードを更新しました" }, @@ -3408,6 +3460,9 @@ "logInRequestSent": { "message": "リクエストが送信されました" }, + "masterPasswordChanged": { + "message": "Master password saved" + }, "exposedMasterPassword": { "message": "流出したマスターパスワード" }, @@ -3522,6 +3577,12 @@ "requestAdminApproval": { "message": "管理者の承認を要求する" }, + "unableToCompleteLogin": { + "message": "Unable to complete login" + }, + "loginOnTrustedDeviceOrAskAdminToAssignPassword": { + "message": "You need to log in on a trusted device or ask your administrator to assign you a password." + }, "ssoIdentifierRequired": { "message": "組織の SSO ID が必要です。" }, @@ -3607,14 +3668,6 @@ "trustUser": { "message": "Trust user" }, - "sendsNoItemsTitle": { - "message": "アクティブな Send なし", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendsNoItemsMessage": { - "message": "Send を使用すると暗号化された情報を誰とでも安全に共有できます。", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "sendsTitleNoItems": { "message": "Send sensitive information safely", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -4209,6 +4262,26 @@ "message": "一般的な形式", "description": "Label indicating the most common import formats" }, + "uriMatchDefaultStrategyHint": { + "message": "URI match detection is how Bitwarden identifies autofill suggestions.", + "description": "Explains to the user that URI match detection determines how Bitwarden suggests autofill options, and clarifies that this default strategy applies when no specific match detection is set for a login item." + }, + "regExAdvancedOptionWarning": { + "message": "\"Regular expression\" is an advanced option with increased risk of exposing credentials.", + "description": "Content for dialog which warns a user when selecting 'regular expression' matching strategy as a cipher match strategy" + }, + "startsWithAdvancedOptionWarning": { + "message": "\"Starts with\" is an advanced option with increased risk of exposing credentials.", + "description": "Content for dialog which warns a user when selecting 'starts with' matching strategy as a cipher match strategy" + }, + "uriMatchWarningDialogLink": { + "message": "More about match detection", + "description": "Link to match detection docs on warning dialog for advance match strategy" + }, + "uriAdvancedOption": { + "message": "Advanced options", + "description": "Advanced option placeholder for uri option component" + }, "confirmContinueToBrowserSettingsTitle": { "message": "ブラウザの設定に進みますか?", "description": "Title for dialog which asks if the user wants to proceed to a relevant browser settings page" @@ -5036,6 +5109,9 @@ "unlockPinSet": { "message": "Unlock PIN set" }, + "unlockWithBiometricSet": { + "message": "Unlock with biometrics set" + }, "authenticating": { "message": "認証中" }, @@ -5253,7 +5329,7 @@ "message": "危険なパスワードの変更" }, "settingsVaultOptions": { - "message": "Vault options" + "message": "保管庫オプション" }, "emptyVaultDescription": { "message": "The vault protects more than just your passwords. Store secure logins, IDs, cards and notes securely here." @@ -5377,5 +5453,9 @@ }, "noPermissionsViewPage": { "message": "You do not have permissions to view this page. Try logging in with a different account." + }, + "wasmNotSupported": { + "message": "WebAssembly is not supported on your browser or is not enabled. WebAssembly is required to use the Bitwarden app.", + "description": "'WebAssembly' is a technical term and should not be translated." } } diff --git a/apps/browser/src/_locales/ka/messages.json b/apps/browser/src/_locales/ka/messages.json index 7f36bb3568f..efbf97e9a92 100644 --- a/apps/browser/src/_locales/ka/messages.json +++ b/apps/browser/src/_locales/ka/messages.json @@ -1173,6 +1173,12 @@ "message": "Oh no! We couldn't save this. Try entering the details manually.", "description": "Detailed error message shown when saving login details fails." }, + "changePasswordWarning": { + "message": "After changing your password, you will need to log in with your new password. Active sessions on other devices will be logged out within one hour." + }, + "accountRecoveryUpdateMasterPasswordSubtitle": { + "message": "Change your master password to complete account recovery." + }, "enableChangedPasswordNotification": { "message": "Ask to update existing login" }, @@ -1365,8 +1371,8 @@ "featureUnavailable": { "message": "Feature unavailable" }, - "encryptionKeyMigrationRequired": { - "message": "Encryption key migration required. Please login through the web vault to update your encryption key." + "legacyEncryptionUnsupported": { + "message": "Legacy encryption is no longer supported. Please contact support to recover your account." }, "premiumMembership": { "message": "Premium membership" @@ -1922,6 +1928,9 @@ "typeSshKey": { "message": "SSH key" }, + "typeNote": { + "message": "Note" + }, "newItemHeader": { "message": "New $TYPE$", "placeholders": { @@ -2153,8 +2162,8 @@ "setYourPinCode": { "message": "Set your PIN code for unlocking Bitwarden. Your PIN settings will be reset if you ever fully log out of the application." }, - "setYourPinCode1": { - "message": "Your PIN will be used to unlock Bitwarden instead of your master password. Your PIN will reset if you ever fully log out of Bitwarden." + "setPinCode": { + "message": "You can use this PIN to unlock Bitwarden. Your PIN will be reset if you ever fully log out of the application." }, "pinRequired": { "message": "PIN code is required." @@ -2204,6 +2213,9 @@ "useThisPassword": { "message": "Use this password" }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, "useThisUsername": { "message": "Use this username" }, @@ -2481,6 +2493,12 @@ "personalOwnershipPolicyInEffectImports": { "message": "An organization policy has blocked importing items into your individual vault." }, + "restrictCardTypeImport": { + "message": "Cannot import card item types" + }, + "restrictCardTypeImportDesc": { + "message": "A policy set by 1 or more organizations prevents you from importing cards to your vaults." + }, "domainsTitle": { "message": "დომენები", "description": "A category title describing the concept of web domains" @@ -2512,6 +2530,10 @@ "change": { "message": "Change" }, + "changePassword": { + "message": "Change password", + "description": "Change password button for browser at risk notification on login." + }, "changeButtonTitle": { "message": "Change password - $ITEMNAME$", "placeholders": { @@ -2521,6 +2543,9 @@ } } }, + "atRiskPassword": { + "message": "At-risk password" + }, "atRiskPasswords": { "message": "At-risk passwords" }, @@ -2555,6 +2580,26 @@ } } }, + "atRiskChangePrompt": { + "message": "Your password for this site is at-risk. $ORGANIZATION$ has requested that you change it.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + }, + "description": "Notification body when a login triggers an at-risk password change request and the change password domain is known." + }, + "atRiskNavigatePrompt": { + "message": "$ORGANIZATION$ wants you to change this password because it is at-risk. Navigate to your account settings to change the password.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + }, + "description": "Notification body when a login triggers an at-risk password change request and no change password domain is provided." + }, "reviewAndChangeAtRiskPassword": { "message": "Review and change one at-risk password" }, @@ -2674,6 +2719,10 @@ "message": "All Sends", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "maxAccessCountReached": { + "message": "Max access count reached", + "description": "This text will be displayed after a Send has been accessed the maximum amount of times." + }, "hideTextByDefault": { "message": "Hide text by default" }, @@ -2876,6 +2925,9 @@ "emailVerificationRequiredDesc": { "message": "You must verify your email to use this feature. You can verify your email in the web vault." }, + "masterPasswordSuccessfullySet": { + "message": "Master password successfully set" + }, "updatedMasterPassword": { "message": "Updated master password" }, @@ -3408,6 +3460,9 @@ "logInRequestSent": { "message": "Request sent" }, + "masterPasswordChanged": { + "message": "Master password saved" + }, "exposedMasterPassword": { "message": "Exposed Master Password" }, @@ -3522,6 +3577,12 @@ "requestAdminApproval": { "message": "Request admin approval" }, + "unableToCompleteLogin": { + "message": "Unable to complete login" + }, + "loginOnTrustedDeviceOrAskAdminToAssignPassword": { + "message": "You need to log in on a trusted device or ask your administrator to assign you a password." + }, "ssoIdentifierRequired": { "message": "Organization SSO identifier is required." }, @@ -3607,14 +3668,6 @@ "trustUser": { "message": "Trust user" }, - "sendsNoItemsTitle": { - "message": "No active Sends", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendsNoItemsMessage": { - "message": "Use Send to securely share encrypted information with anyone.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "sendsTitleNoItems": { "message": "Send sensitive information safely", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -4209,6 +4262,26 @@ "message": "Common formats", "description": "Label indicating the most common import formats" }, + "uriMatchDefaultStrategyHint": { + "message": "URI match detection is how Bitwarden identifies autofill suggestions.", + "description": "Explains to the user that URI match detection determines how Bitwarden suggests autofill options, and clarifies that this default strategy applies when no specific match detection is set for a login item." + }, + "regExAdvancedOptionWarning": { + "message": "\"Regular expression\" is an advanced option with increased risk of exposing credentials.", + "description": "Content for dialog which warns a user when selecting 'regular expression' matching strategy as a cipher match strategy" + }, + "startsWithAdvancedOptionWarning": { + "message": "\"Starts with\" is an advanced option with increased risk of exposing credentials.", + "description": "Content for dialog which warns a user when selecting 'starts with' matching strategy as a cipher match strategy" + }, + "uriMatchWarningDialogLink": { + "message": "More about match detection", + "description": "Link to match detection docs on warning dialog for advance match strategy" + }, + "uriAdvancedOption": { + "message": "Advanced options", + "description": "Advanced option placeholder for uri option component" + }, "confirmContinueToBrowserSettingsTitle": { "message": "Continue to browser settings?", "description": "Title for dialog which asks if the user wants to proceed to a relevant browser settings page" @@ -5036,6 +5109,9 @@ "unlockPinSet": { "message": "Unlock PIN set" }, + "unlockWithBiometricSet": { + "message": "Unlock with biometrics set" + }, "authenticating": { "message": "ავთენტიკაცია" }, @@ -5377,5 +5453,9 @@ }, "noPermissionsViewPage": { "message": "You do not have permissions to view this page. Try logging in with a different account." + }, + "wasmNotSupported": { + "message": "WebAssembly is not supported on your browser or is not enabled. WebAssembly is required to use the Bitwarden app.", + "description": "'WebAssembly' is a technical term and should not be translated." } } diff --git a/apps/browser/src/_locales/km/messages.json b/apps/browser/src/_locales/km/messages.json index 4775d1f7af0..ecc7da63e79 100644 --- a/apps/browser/src/_locales/km/messages.json +++ b/apps/browser/src/_locales/km/messages.json @@ -1173,6 +1173,12 @@ "message": "Oh no! We couldn't save this. Try entering the details manually.", "description": "Detailed error message shown when saving login details fails." }, + "changePasswordWarning": { + "message": "After changing your password, you will need to log in with your new password. Active sessions on other devices will be logged out within one hour." + }, + "accountRecoveryUpdateMasterPasswordSubtitle": { + "message": "Change your master password to complete account recovery." + }, "enableChangedPasswordNotification": { "message": "Ask to update existing login" }, @@ -1365,8 +1371,8 @@ "featureUnavailable": { "message": "Feature unavailable" }, - "encryptionKeyMigrationRequired": { - "message": "Encryption key migration required. Please login through the web vault to update your encryption key." + "legacyEncryptionUnsupported": { + "message": "Legacy encryption is no longer supported. Please contact support to recover your account." }, "premiumMembership": { "message": "Premium membership" @@ -1922,6 +1928,9 @@ "typeSshKey": { "message": "SSH key" }, + "typeNote": { + "message": "Note" + }, "newItemHeader": { "message": "New $TYPE$", "placeholders": { @@ -2153,8 +2162,8 @@ "setYourPinCode": { "message": "Set your PIN code for unlocking Bitwarden. Your PIN settings will be reset if you ever fully log out of the application." }, - "setYourPinCode1": { - "message": "Your PIN will be used to unlock Bitwarden instead of your master password. Your PIN will reset if you ever fully log out of Bitwarden." + "setPinCode": { + "message": "You can use this PIN to unlock Bitwarden. Your PIN will be reset if you ever fully log out of the application." }, "pinRequired": { "message": "PIN code is required." @@ -2204,6 +2213,9 @@ "useThisPassword": { "message": "Use this password" }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, "useThisUsername": { "message": "Use this username" }, @@ -2481,6 +2493,12 @@ "personalOwnershipPolicyInEffectImports": { "message": "An organization policy has blocked importing items into your individual vault." }, + "restrictCardTypeImport": { + "message": "Cannot import card item types" + }, + "restrictCardTypeImportDesc": { + "message": "A policy set by 1 or more organizations prevents you from importing cards to your vaults." + }, "domainsTitle": { "message": "Domains", "description": "A category title describing the concept of web domains" @@ -2512,6 +2530,10 @@ "change": { "message": "Change" }, + "changePassword": { + "message": "Change password", + "description": "Change password button for browser at risk notification on login." + }, "changeButtonTitle": { "message": "Change password - $ITEMNAME$", "placeholders": { @@ -2521,6 +2543,9 @@ } } }, + "atRiskPassword": { + "message": "At-risk password" + }, "atRiskPasswords": { "message": "At-risk passwords" }, @@ -2555,6 +2580,26 @@ } } }, + "atRiskChangePrompt": { + "message": "Your password for this site is at-risk. $ORGANIZATION$ has requested that you change it.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + }, + "description": "Notification body when a login triggers an at-risk password change request and the change password domain is known." + }, + "atRiskNavigatePrompt": { + "message": "$ORGANIZATION$ wants you to change this password because it is at-risk. Navigate to your account settings to change the password.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + }, + "description": "Notification body when a login triggers an at-risk password change request and no change password domain is provided." + }, "reviewAndChangeAtRiskPassword": { "message": "Review and change one at-risk password" }, @@ -2674,6 +2719,10 @@ "message": "All Sends", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "maxAccessCountReached": { + "message": "Max access count reached", + "description": "This text will be displayed after a Send has been accessed the maximum amount of times." + }, "hideTextByDefault": { "message": "Hide text by default" }, @@ -2876,6 +2925,9 @@ "emailVerificationRequiredDesc": { "message": "You must verify your email to use this feature. You can verify your email in the web vault." }, + "masterPasswordSuccessfullySet": { + "message": "Master password successfully set" + }, "updatedMasterPassword": { "message": "Updated master password" }, @@ -3408,6 +3460,9 @@ "logInRequestSent": { "message": "Request sent" }, + "masterPasswordChanged": { + "message": "Master password saved" + }, "exposedMasterPassword": { "message": "Exposed Master Password" }, @@ -3522,6 +3577,12 @@ "requestAdminApproval": { "message": "Request admin approval" }, + "unableToCompleteLogin": { + "message": "Unable to complete login" + }, + "loginOnTrustedDeviceOrAskAdminToAssignPassword": { + "message": "You need to log in on a trusted device or ask your administrator to assign you a password." + }, "ssoIdentifierRequired": { "message": "Organization SSO identifier is required." }, @@ -3607,14 +3668,6 @@ "trustUser": { "message": "Trust user" }, - "sendsNoItemsTitle": { - "message": "No active Sends", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendsNoItemsMessage": { - "message": "Use Send to securely share encrypted information with anyone.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "sendsTitleNoItems": { "message": "Send sensitive information safely", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -4209,6 +4262,26 @@ "message": "Common formats", "description": "Label indicating the most common import formats" }, + "uriMatchDefaultStrategyHint": { + "message": "URI match detection is how Bitwarden identifies autofill suggestions.", + "description": "Explains to the user that URI match detection determines how Bitwarden suggests autofill options, and clarifies that this default strategy applies when no specific match detection is set for a login item." + }, + "regExAdvancedOptionWarning": { + "message": "\"Regular expression\" is an advanced option with increased risk of exposing credentials.", + "description": "Content for dialog which warns a user when selecting 'regular expression' matching strategy as a cipher match strategy" + }, + "startsWithAdvancedOptionWarning": { + "message": "\"Starts with\" is an advanced option with increased risk of exposing credentials.", + "description": "Content for dialog which warns a user when selecting 'starts with' matching strategy as a cipher match strategy" + }, + "uriMatchWarningDialogLink": { + "message": "More about match detection", + "description": "Link to match detection docs on warning dialog for advance match strategy" + }, + "uriAdvancedOption": { + "message": "Advanced options", + "description": "Advanced option placeholder for uri option component" + }, "confirmContinueToBrowserSettingsTitle": { "message": "Continue to browser settings?", "description": "Title for dialog which asks if the user wants to proceed to a relevant browser settings page" @@ -5036,6 +5109,9 @@ "unlockPinSet": { "message": "Unlock PIN set" }, + "unlockWithBiometricSet": { + "message": "Unlock with biometrics set" + }, "authenticating": { "message": "Authenticating" }, @@ -5377,5 +5453,9 @@ }, "noPermissionsViewPage": { "message": "You do not have permissions to view this page. Try logging in with a different account." + }, + "wasmNotSupported": { + "message": "WebAssembly is not supported on your browser or is not enabled. WebAssembly is required to use the Bitwarden app.", + "description": "'WebAssembly' is a technical term and should not be translated." } } diff --git a/apps/browser/src/_locales/kn/messages.json b/apps/browser/src/_locales/kn/messages.json index ac36d911e89..d4e4498a322 100644 --- a/apps/browser/src/_locales/kn/messages.json +++ b/apps/browser/src/_locales/kn/messages.json @@ -1173,6 +1173,12 @@ "message": "Oh no! We couldn't save this. Try entering the details manually.", "description": "Detailed error message shown when saving login details fails." }, + "changePasswordWarning": { + "message": "After changing your password, you will need to log in with your new password. Active sessions on other devices will be logged out within one hour." + }, + "accountRecoveryUpdateMasterPasswordSubtitle": { + "message": "Change your master password to complete account recovery." + }, "enableChangedPasswordNotification": { "message": "Ask to update existing login" }, @@ -1365,8 +1371,8 @@ "featureUnavailable": { "message": "ವೈಶಿಷ್ಟ್ಯ ಲಭ್ಯವಿಲ್ಲ" }, - "encryptionKeyMigrationRequired": { - "message": "Encryption key migration required. Please login through the web vault to update your encryption key." + "legacyEncryptionUnsupported": { + "message": "Legacy encryption is no longer supported. Please contact support to recover your account." }, "premiumMembership": { "message": "ಪ್ರೀಮಿಯಂ ಸದಸ್ಯತ್ವ" @@ -1922,6 +1928,9 @@ "typeSshKey": { "message": "SSH key" }, + "typeNote": { + "message": "Note" + }, "newItemHeader": { "message": "New $TYPE$", "placeholders": { @@ -2153,8 +2162,8 @@ "setYourPinCode": { "message": "ಬಿಟ್‌ವಾರ್ಡೆನ್ ಅನ್ಲಾಕ್ ಮಾಡಲು ನಿಮ್ಮ ಪಿನ್ ಕೋಡ್ ಅನ್ನು ಹೊಂದಿಸಿ. ನೀವು ಎಂದಾದರೂ ಅಪ್ಲಿಕೇಶನ್‌ನಿಂದ ಸಂಪೂರ್ಣವಾಗಿ ಲಾಗ್ out ಟ್ ಆಗಿದ್ದರೆ ನಿಮ್ಮ ಪಿನ್ ಸೆಟ್ಟಿಂಗ್‌ಗಳನ್ನು ಮರುಹೊಂದಿಸಲಾಗುತ್ತದೆ." }, - "setYourPinCode1": { - "message": "Your PIN will be used to unlock Bitwarden instead of your master password. Your PIN will reset if you ever fully log out of Bitwarden." + "setPinCode": { + "message": "You can use this PIN to unlock Bitwarden. Your PIN will be reset if you ever fully log out of the application." }, "pinRequired": { "message": "ಪಿನ್ ಕೋಡ್ ಅಗತ್ಯವಿದೆ." @@ -2204,6 +2213,9 @@ "useThisPassword": { "message": "Use this password" }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, "useThisUsername": { "message": "Use this username" }, @@ -2481,6 +2493,12 @@ "personalOwnershipPolicyInEffectImports": { "message": "An organization policy has blocked importing items into your individual vault." }, + "restrictCardTypeImport": { + "message": "Cannot import card item types" + }, + "restrictCardTypeImportDesc": { + "message": "A policy set by 1 or more organizations prevents you from importing cards to your vaults." + }, "domainsTitle": { "message": "Domains", "description": "A category title describing the concept of web domains" @@ -2512,6 +2530,10 @@ "change": { "message": "Change" }, + "changePassword": { + "message": "Change password", + "description": "Change password button for browser at risk notification on login." + }, "changeButtonTitle": { "message": "Change password - $ITEMNAME$", "placeholders": { @@ -2521,6 +2543,9 @@ } } }, + "atRiskPassword": { + "message": "At-risk password" + }, "atRiskPasswords": { "message": "At-risk passwords" }, @@ -2555,6 +2580,26 @@ } } }, + "atRiskChangePrompt": { + "message": "Your password for this site is at-risk. $ORGANIZATION$ has requested that you change it.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + }, + "description": "Notification body when a login triggers an at-risk password change request and the change password domain is known." + }, + "atRiskNavigatePrompt": { + "message": "$ORGANIZATION$ wants you to change this password because it is at-risk. Navigate to your account settings to change the password.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + }, + "description": "Notification body when a login triggers an at-risk password change request and no change password domain is provided." + }, "reviewAndChangeAtRiskPassword": { "message": "Review and change one at-risk password" }, @@ -2674,6 +2719,10 @@ "message": "ಎಲ್ಲಾ ಕಳುಹಿಸುತ್ತದೆ", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "maxAccessCountReached": { + "message": "Max access count reached", + "description": "This text will be displayed after a Send has been accessed the maximum amount of times." + }, "hideTextByDefault": { "message": "Hide text by default" }, @@ -2876,6 +2925,9 @@ "emailVerificationRequiredDesc": { "message": "ಈ ವೈಶಿಷ್ಟ್ಯವನ್ನು ಬಳಸಲು ನಿಮ್ಮ ಇಮೇಲ್ ಅನ್ನು ನೀವು ಪರಿಶೀಲಿಸಬೇಕು. ವೆಬ್ ವಾಲ್ಟ್ನಲ್ಲಿ ನಿಮ್ಮ ಇಮೇಲ್ ಅನ್ನು ನೀವು ಪರಿಶೀಲಿಸಬಹುದು." }, + "masterPasswordSuccessfullySet": { + "message": "Master password successfully set" + }, "updatedMasterPassword": { "message": "Updated master password" }, @@ -3408,6 +3460,9 @@ "logInRequestSent": { "message": "Request sent" }, + "masterPasswordChanged": { + "message": "Master password saved" + }, "exposedMasterPassword": { "message": "Exposed Master Password" }, @@ -3522,6 +3577,12 @@ "requestAdminApproval": { "message": "Request admin approval" }, + "unableToCompleteLogin": { + "message": "Unable to complete login" + }, + "loginOnTrustedDeviceOrAskAdminToAssignPassword": { + "message": "You need to log in on a trusted device or ask your administrator to assign you a password." + }, "ssoIdentifierRequired": { "message": "Organization SSO identifier is required." }, @@ -3607,14 +3668,6 @@ "trustUser": { "message": "Trust user" }, - "sendsNoItemsTitle": { - "message": "No active Sends", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendsNoItemsMessage": { - "message": "Use Send to securely share encrypted information with anyone.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "sendsTitleNoItems": { "message": "Send sensitive information safely", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -4209,6 +4262,26 @@ "message": "Common formats", "description": "Label indicating the most common import formats" }, + "uriMatchDefaultStrategyHint": { + "message": "URI match detection is how Bitwarden identifies autofill suggestions.", + "description": "Explains to the user that URI match detection determines how Bitwarden suggests autofill options, and clarifies that this default strategy applies when no specific match detection is set for a login item." + }, + "regExAdvancedOptionWarning": { + "message": "\"Regular expression\" is an advanced option with increased risk of exposing credentials.", + "description": "Content for dialog which warns a user when selecting 'regular expression' matching strategy as a cipher match strategy" + }, + "startsWithAdvancedOptionWarning": { + "message": "\"Starts with\" is an advanced option with increased risk of exposing credentials.", + "description": "Content for dialog which warns a user when selecting 'starts with' matching strategy as a cipher match strategy" + }, + "uriMatchWarningDialogLink": { + "message": "More about match detection", + "description": "Link to match detection docs on warning dialog for advance match strategy" + }, + "uriAdvancedOption": { + "message": "Advanced options", + "description": "Advanced option placeholder for uri option component" + }, "confirmContinueToBrowserSettingsTitle": { "message": "Continue to browser settings?", "description": "Title for dialog which asks if the user wants to proceed to a relevant browser settings page" @@ -5036,6 +5109,9 @@ "unlockPinSet": { "message": "Unlock PIN set" }, + "unlockWithBiometricSet": { + "message": "Unlock with biometrics set" + }, "authenticating": { "message": "Authenticating" }, @@ -5377,5 +5453,9 @@ }, "noPermissionsViewPage": { "message": "You do not have permissions to view this page. Try logging in with a different account." + }, + "wasmNotSupported": { + "message": "WebAssembly is not supported on your browser or is not enabled. WebAssembly is required to use the Bitwarden app.", + "description": "'WebAssembly' is a technical term and should not be translated." } } diff --git a/apps/browser/src/_locales/ko/messages.json b/apps/browser/src/_locales/ko/messages.json index 5a496cde98a..d5eba5ccbd8 100644 --- a/apps/browser/src/_locales/ko/messages.json +++ b/apps/browser/src/_locales/ko/messages.json @@ -1173,6 +1173,12 @@ "message": "Oh no! We couldn't save this. Try entering the details manually.", "description": "Detailed error message shown when saving login details fails." }, + "changePasswordWarning": { + "message": "After changing your password, you will need to log in with your new password. Active sessions on other devices will be logged out within one hour." + }, + "accountRecoveryUpdateMasterPasswordSubtitle": { + "message": "Change your master password to complete account recovery." + }, "enableChangedPasswordNotification": { "message": "현재 로그인으로 업데이트할 건지 묻기" }, @@ -1365,8 +1371,8 @@ "featureUnavailable": { "message": "기능 사용할 수 없음" }, - "encryptionKeyMigrationRequired": { - "message": "암호화 키 마이그레이션이 필요합니다. 웹 볼트를 통해 로그인하여 암호화 키를 업데이트하세요." + "legacyEncryptionUnsupported": { + "message": "Legacy encryption is no longer supported. Please contact support to recover your account." }, "premiumMembership": { "message": "프리미엄 멤버십" @@ -1922,6 +1928,9 @@ "typeSshKey": { "message": "SSH 키" }, + "typeNote": { + "message": "Note" + }, "newItemHeader": { "message": "새 $TYPE$", "placeholders": { @@ -2153,8 +2162,8 @@ "setYourPinCode": { "message": "Bitwarden 잠금해제에 사용될 PIN 코드를 설정합니다. 이 애플리케이션에서 완전히 로그아웃할 경우 PIN 설정이 초기화됩니다." }, - "setYourPinCode1": { - "message": "PIN은 마스터 비밀번호 대신 Bitwarden 잠금해제에 사용됩니다. Bitwarden에서 완전히 로그아웃하면 PIN이 재설정됩니다." + "setPinCode": { + "message": "You can use this PIN to unlock Bitwarden. Your PIN will be reset if you ever fully log out of the application." }, "pinRequired": { "message": "PIN 코드가 필요합니다." @@ -2204,6 +2213,9 @@ "useThisPassword": { "message": "이 비밀번호 사용" }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, "useThisUsername": { "message": "이 사용자 이름 사용" }, @@ -2481,6 +2493,12 @@ "personalOwnershipPolicyInEffectImports": { "message": "조직 정책으로 인해 개별 보관함으로 항목을 가져오는 것이 차단되었습니다." }, + "restrictCardTypeImport": { + "message": "Cannot import card item types" + }, + "restrictCardTypeImportDesc": { + "message": "A policy set by 1 or more organizations prevents you from importing cards to your vaults." + }, "domainsTitle": { "message": "도메인", "description": "A category title describing the concept of web domains" @@ -2512,6 +2530,10 @@ "change": { "message": "Change" }, + "changePassword": { + "message": "Change password", + "description": "Change password button for browser at risk notification on login." + }, "changeButtonTitle": { "message": "Change password - $ITEMNAME$", "placeholders": { @@ -2521,6 +2543,9 @@ } } }, + "atRiskPassword": { + "message": "At-risk password" + }, "atRiskPasswords": { "message": "At-risk passwords" }, @@ -2555,6 +2580,26 @@ } } }, + "atRiskChangePrompt": { + "message": "Your password for this site is at-risk. $ORGANIZATION$ has requested that you change it.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + }, + "description": "Notification body when a login triggers an at-risk password change request and the change password domain is known." + }, + "atRiskNavigatePrompt": { + "message": "$ORGANIZATION$ wants you to change this password because it is at-risk. Navigate to your account settings to change the password.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + }, + "description": "Notification body when a login triggers an at-risk password change request and no change password domain is provided." + }, "reviewAndChangeAtRiskPassword": { "message": "Review and change one at-risk password" }, @@ -2674,6 +2719,10 @@ "message": "모든 Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "maxAccessCountReached": { + "message": "Max access count reached", + "description": "This text will be displayed after a Send has been accessed the maximum amount of times." + }, "hideTextByDefault": { "message": "기본적으로 텍스트 숨기기" }, @@ -2876,6 +2925,9 @@ "emailVerificationRequiredDesc": { "message": "이 기능을 사용하려면 이메일 인증이 필요합니다. 웹 보관함에서 이메일을 인증할 수 있습니다." }, + "masterPasswordSuccessfullySet": { + "message": "Master password successfully set" + }, "updatedMasterPassword": { "message": "마스터 비밀번호 변경됨" }, @@ -3408,6 +3460,9 @@ "logInRequestSent": { "message": "Request sent" }, + "masterPasswordChanged": { + "message": "Master password saved" + }, "exposedMasterPassword": { "message": "노출된 마스터 비밀번호" }, @@ -3522,6 +3577,12 @@ "requestAdminApproval": { "message": "관리자 인증 필요" }, + "unableToCompleteLogin": { + "message": "Unable to complete login" + }, + "loginOnTrustedDeviceOrAskAdminToAssignPassword": { + "message": "You need to log in on a trusted device or ask your administrator to assign you a password." + }, "ssoIdentifierRequired": { "message": "조직의 SSO 식별자가 필요합니다" }, @@ -3607,14 +3668,6 @@ "trustUser": { "message": "Trust user" }, - "sendsNoItemsTitle": { - "message": "활성화된 Send없음", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendsNoItemsMessage": { - "message": "Send를 사용하여 암호화된 정보를 어느 사람과도 안전하게 공유합니다.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "sendsTitleNoItems": { "message": "Send sensitive information safely", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -4209,6 +4262,26 @@ "message": "일반적인 형식", "description": "Label indicating the most common import formats" }, + "uriMatchDefaultStrategyHint": { + "message": "URI match detection is how Bitwarden identifies autofill suggestions.", + "description": "Explains to the user that URI match detection determines how Bitwarden suggests autofill options, and clarifies that this default strategy applies when no specific match detection is set for a login item." + }, + "regExAdvancedOptionWarning": { + "message": "\"Regular expression\" is an advanced option with increased risk of exposing credentials.", + "description": "Content for dialog which warns a user when selecting 'regular expression' matching strategy as a cipher match strategy" + }, + "startsWithAdvancedOptionWarning": { + "message": "\"Starts with\" is an advanced option with increased risk of exposing credentials.", + "description": "Content for dialog which warns a user when selecting 'starts with' matching strategy as a cipher match strategy" + }, + "uriMatchWarningDialogLink": { + "message": "More about match detection", + "description": "Link to match detection docs on warning dialog for advance match strategy" + }, + "uriAdvancedOption": { + "message": "Advanced options", + "description": "Advanced option placeholder for uri option component" + }, "confirmContinueToBrowserSettingsTitle": { "message": "브라우저 설정으로 이동하시겠습니까?", "description": "Title for dialog which asks if the user wants to proceed to a relevant browser settings page" @@ -5036,6 +5109,9 @@ "unlockPinSet": { "message": "Unlock PIN set" }, + "unlockWithBiometricSet": { + "message": "Unlock with biometrics set" + }, "authenticating": { "message": "인증 중" }, @@ -5377,5 +5453,9 @@ }, "noPermissionsViewPage": { "message": "You do not have permissions to view this page. Try logging in with a different account." + }, + "wasmNotSupported": { + "message": "WebAssembly is not supported on your browser or is not enabled. WebAssembly is required to use the Bitwarden app.", + "description": "'WebAssembly' is a technical term and should not be translated." } } diff --git a/apps/browser/src/_locales/lt/messages.json b/apps/browser/src/_locales/lt/messages.json index f790c226437..33f3b0f0ed6 100644 --- a/apps/browser/src/_locales/lt/messages.json +++ b/apps/browser/src/_locales/lt/messages.json @@ -1173,6 +1173,12 @@ "message": "Oh no! We couldn't save this. Try entering the details manually.", "description": "Detailed error message shown when saving login details fails." }, + "changePasswordWarning": { + "message": "After changing your password, you will need to log in with your new password. Active sessions on other devices will be logged out within one hour." + }, + "accountRecoveryUpdateMasterPasswordSubtitle": { + "message": "Change your master password to complete account recovery." + }, "enableChangedPasswordNotification": { "message": "Paprašyti atnaujinti esamą prisijungimą" }, @@ -1365,8 +1371,8 @@ "featureUnavailable": { "message": "Funkcija neprieinama" }, - "encryptionKeyMigrationRequired": { - "message": "Reikalinga šifravimo rakto migracija. Prisijunkite per žiniatinklio saugyklą, kad atnaujintumėte šifravimo raktą." + "legacyEncryptionUnsupported": { + "message": "Legacy encryption is no longer supported. Please contact support to recover your account." }, "premiumMembership": { "message": "Premium narystė" @@ -1922,6 +1928,9 @@ "typeSshKey": { "message": "SSH key" }, + "typeNote": { + "message": "Note" + }, "newItemHeader": { "message": "Naujas $TYPE$", "placeholders": { @@ -2153,8 +2162,8 @@ "setYourPinCode": { "message": "Nustatykite savo PIN kodą, kad atrakintumėte „Bitwarden“. Jūsų PIN nustatymai bus nustatyti iš naujo, jei kada nors visiškai atsijungsite nuo programos." }, - "setYourPinCode1": { - "message": "Your PIN will be used to unlock Bitwarden instead of your master password. Your PIN will reset if you ever fully log out of Bitwarden." + "setPinCode": { + "message": "You can use this PIN to unlock Bitwarden. Your PIN will be reset if you ever fully log out of the application." }, "pinRequired": { "message": "PIN kodas yra privalomas." @@ -2204,6 +2213,9 @@ "useThisPassword": { "message": "Use this password" }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, "useThisUsername": { "message": "Use this username" }, @@ -2481,6 +2493,12 @@ "personalOwnershipPolicyInEffectImports": { "message": "Organizacijos politika blokavo elementų importavimą į Jūsų individualią saugyklą." }, + "restrictCardTypeImport": { + "message": "Cannot import card item types" + }, + "restrictCardTypeImportDesc": { + "message": "A policy set by 1 or more organizations prevents you from importing cards to your vaults." + }, "domainsTitle": { "message": "Domenai", "description": "A category title describing the concept of web domains" @@ -2512,6 +2530,10 @@ "change": { "message": "Change" }, + "changePassword": { + "message": "Change password", + "description": "Change password button for browser at risk notification on login." + }, "changeButtonTitle": { "message": "Change password - $ITEMNAME$", "placeholders": { @@ -2521,6 +2543,9 @@ } } }, + "atRiskPassword": { + "message": "At-risk password" + }, "atRiskPasswords": { "message": "At-risk passwords" }, @@ -2555,6 +2580,26 @@ } } }, + "atRiskChangePrompt": { + "message": "Your password for this site is at-risk. $ORGANIZATION$ has requested that you change it.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + }, + "description": "Notification body when a login triggers an at-risk password change request and the change password domain is known." + }, + "atRiskNavigatePrompt": { + "message": "$ORGANIZATION$ wants you to change this password because it is at-risk. Navigate to your account settings to change the password.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + }, + "description": "Notification body when a login triggers an at-risk password change request and no change password domain is provided." + }, "reviewAndChangeAtRiskPassword": { "message": "Review and change one at-risk password" }, @@ -2674,6 +2719,10 @@ "message": "Visi siuntimai", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "maxAccessCountReached": { + "message": "Max access count reached", + "description": "This text will be displayed after a Send has been accessed the maximum amount of times." + }, "hideTextByDefault": { "message": "Hide text by default" }, @@ -2876,6 +2925,9 @@ "emailVerificationRequiredDesc": { "message": "Turite patvirtinti savo el. paštą, kad galėtumėte naudotis šia funkcija. Savo el. pašto adresą galite patvirtinti žiniatinklio saugykloje." }, + "masterPasswordSuccessfullySet": { + "message": "Master password successfully set" + }, "updatedMasterPassword": { "message": "Naujasis pagrindinis slaptažodis" }, @@ -3408,6 +3460,9 @@ "logInRequestSent": { "message": "Request sent" }, + "masterPasswordChanged": { + "message": "Master password saved" + }, "exposedMasterPassword": { "message": "Exposed Master Password" }, @@ -3522,6 +3577,12 @@ "requestAdminApproval": { "message": "Prašyti administratoriaus patvirtinimo" }, + "unableToCompleteLogin": { + "message": "Unable to complete login" + }, + "loginOnTrustedDeviceOrAskAdminToAssignPassword": { + "message": "You need to log in on a trusted device or ask your administrator to assign you a password." + }, "ssoIdentifierRequired": { "message": "Organizacijos SSO identifikatorius yra reikalingas." }, @@ -3607,14 +3668,6 @@ "trustUser": { "message": "Trust user" }, - "sendsNoItemsTitle": { - "message": "Nėra aktyvų „Sends“", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendsNoItemsMessage": { - "message": "Naudokite „Send“, kad saugiai bendrintumėte užšifruotą informaciją su bet kuriuo asmeniu.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "sendsTitleNoItems": { "message": "Send sensitive information safely", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -4209,6 +4262,26 @@ "message": "Common formats", "description": "Label indicating the most common import formats" }, + "uriMatchDefaultStrategyHint": { + "message": "URI match detection is how Bitwarden identifies autofill suggestions.", + "description": "Explains to the user that URI match detection determines how Bitwarden suggests autofill options, and clarifies that this default strategy applies when no specific match detection is set for a login item." + }, + "regExAdvancedOptionWarning": { + "message": "\"Regular expression\" is an advanced option with increased risk of exposing credentials.", + "description": "Content for dialog which warns a user when selecting 'regular expression' matching strategy as a cipher match strategy" + }, + "startsWithAdvancedOptionWarning": { + "message": "\"Starts with\" is an advanced option with increased risk of exposing credentials.", + "description": "Content for dialog which warns a user when selecting 'starts with' matching strategy as a cipher match strategy" + }, + "uriMatchWarningDialogLink": { + "message": "More about match detection", + "description": "Link to match detection docs on warning dialog for advance match strategy" + }, + "uriAdvancedOption": { + "message": "Advanced options", + "description": "Advanced option placeholder for uri option component" + }, "confirmContinueToBrowserSettingsTitle": { "message": "Continue to browser settings?", "description": "Title for dialog which asks if the user wants to proceed to a relevant browser settings page" @@ -5036,6 +5109,9 @@ "unlockPinSet": { "message": "Unlock PIN set" }, + "unlockWithBiometricSet": { + "message": "Unlock with biometrics set" + }, "authenticating": { "message": "Authenticating" }, @@ -5377,5 +5453,9 @@ }, "noPermissionsViewPage": { "message": "You do not have permissions to view this page. Try logging in with a different account." + }, + "wasmNotSupported": { + "message": "WebAssembly is not supported on your browser or is not enabled. WebAssembly is required to use the Bitwarden app.", + "description": "'WebAssembly' is a technical term and should not be translated." } } diff --git a/apps/browser/src/_locales/lv/messages.json b/apps/browser/src/_locales/lv/messages.json index f47b5f7645e..2235baef2ab 100644 --- a/apps/browser/src/_locales/lv/messages.json +++ b/apps/browser/src/_locales/lv/messages.json @@ -1173,6 +1173,12 @@ "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." }, + "changePasswordWarning": { + "message": "Pēc savas paroles nomainīšanas būs nepieciešams pieteikties ar jauno paroli. Spēkā esošajās sesijās citās ierīcēs stundas laikā notiks atteikšanās." + }, + "accountRecoveryUpdateMasterPasswordSubtitle": { + "message": "Jānomaina sava galvenā'parole, lai pabeigtu konta atkopi." + }, "enableChangedPasswordNotification": { "message": "Vaicāt atjaunināt esošu pieteikšanās vienumu" }, @@ -1365,8 +1371,8 @@ "featureUnavailable": { "message": "Iespēja nav pieejama" }, - "encryptionKeyMigrationRequired": { - "message": "Nepieciešama šifrēšanas atslēgas nomaiņa. Lūgums pieteikties tīmekļa glabātavā, lai atjauninātu savu šifrēšanas atslēgu." + "legacyEncryptionUnsupported": { + "message": "Mantota šifrēšana vairs netiek atbalstīta. Lūgums sazināties ar atbalstu, lai atkoptu savu kontu." }, "premiumMembership": { "message": "Premium dalība" @@ -1922,6 +1928,9 @@ "typeSshKey": { "message": "SSH atslēga" }, + "typeNote": { + "message": "Piezīme" + }, "newItemHeader": { "message": "Jauns/a $TYPE$", "placeholders": { @@ -2153,8 +2162,8 @@ "setYourPinCode": { "message": "Iestatīt PIN kodu Bitwarden atslēgšanai. PIN iestatījumi tiks atiestatīti pēc pilnīgas izrakstīšanās no lietotnes." }, - "setYourPinCode1": { - "message": "PIN būs izmantojams galvenās paroles vietā, lai atslēgtu Bitwarden. PIN tiks atiestatīts, ja kādreiz notiks pilnīga izrakstīšanās no Bitwarden." + "setPinCode": { + "message": "Šo PIN var izmantot, lai atslēgtu Bitwarden. PIN tiks atiestatīts pēc pilnīgas atteikšanās lietotnē." }, "pinRequired": { "message": "Ir nepieciešams PIN kods." @@ -2204,6 +2213,9 @@ "useThisPassword": { "message": "Izmantot šo paroli" }, + "useThisPassphrase": { + "message": "Izmantot šo paroles vārdkopu" + }, "useThisUsername": { "message": "Izmantot šo lietotājvārdu" }, @@ -2481,6 +2493,12 @@ "personalOwnershipPolicyInEffectImports": { "message": "Apvienības nosacījums neļauj ievietot ārējos vienumus savā personīgajā glabātavā." }, + "restrictCardTypeImport": { + "message": "Nevar ievietot karšu vienumu veidus" + }, + "restrictCardTypeImportDesc": { + "message": "Pamatnostādne, ko ir iestatījusi viena vai vairākas apvienības, liedz karšu ievietošanu savās glabātavās." + }, "domainsTitle": { "message": "Domēna vārdi", "description": "A category title describing the concept of web domains" @@ -2512,6 +2530,10 @@ "change": { "message": "Mainīt" }, + "changePassword": { + "message": "Mainīt paroli", + "description": "Change password button for browser at risk notification on login." + }, "changeButtonTitle": { "message": "Mainīt paroli - $ITEMNAME$", "placeholders": { @@ -2521,6 +2543,9 @@ } } }, + "atRiskPassword": { + "message": "Riskam pakļauta parole" + }, "atRiskPasswords": { "message": "Riskam pakļautās paroles" }, @@ -2555,6 +2580,26 @@ } } }, + "atRiskChangePrompt": { + "message": "Šīs vietnes parole ir pakļauta riskam. $ORGANIZATION$ pieprasīja, lai tā tiktu nomainīta.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + }, + "description": "Notification body when a login triggers an at-risk password change request and the change password domain is known." + }, + "atRiskNavigatePrompt": { + "message": "$ORGANIZATION$ vēlas, lai šī parole tiktu nomainīta, jo tā ir pakļauta riskam. Jādodas uz sava konta iestatījumiem, lai nomainītu paroli.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + }, + "description": "Notification body when a login triggers an at-risk password change request and no change password domain is provided." + }, "reviewAndChangeAtRiskPassword": { "message": "Pārskatīt un mainīt vienu riskam pakļautu paroli" }, @@ -2674,6 +2719,10 @@ "message": "Visi Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "maxAccessCountReached": { + "message": "Sasniegts lielākais pieļaujamais piekļuves reižu skaits", + "description": "This text will be displayed after a Send has been accessed the maximum amount of times." + }, "hideTextByDefault": { "message": "Pēc noklusējuma paslēpt tekstu" }, @@ -2876,6 +2925,9 @@ "emailVerificationRequiredDesc": { "message": "Ir nepieciešams apliecināt savu e-pasta adresi, lai būtu iespējams izmantot šo iespēju. To var izdarīt tīmekļa glabātavā." }, + "masterPasswordSuccessfullySet": { + "message": "Galvenā parole sekmīgi iestatīta" + }, "updatedMasterPassword": { "message": "Galvenā parole atjaunināta" }, @@ -3408,6 +3460,9 @@ "logInRequestSent": { "message": "Pieprasījums nosūtīts" }, + "masterPasswordChanged": { + "message": "Galvenā parole saglabāta" + }, "exposedMasterPassword": { "message": "Noplūdusi galvenā parole" }, @@ -3522,6 +3577,12 @@ "requestAdminApproval": { "message": "Pieprasīt pārvaldītāja apstiprinājumu" }, + "unableToCompleteLogin": { + "message": "Nevar pabeigt pieteikšanos" + }, + "loginOnTrustedDeviceOrAskAdminToAssignPassword": { + "message": "Nepieciešams pieteikties uzticamā ierīcē vai vaicāt pārvaldītājam, lai piešķir paroli." + }, "ssoIdentifierRequired": { "message": "Ir nepieciešams apvienības SSO identifikators." }, @@ -3607,14 +3668,6 @@ "trustUser": { "message": "Uzticēties lietotājam" }, - "sendsNoItemsTitle": { - "message": "Nav spēkā esošu Send", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendsNoItemsMessage": { - "message": "Send ir izmantojams, lai ar ikvienu droši kopīgotu šifrētu informāciju.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "sendsTitleNoItems": { "message": "Drošā veidā nosūti jūtīgu informāciju", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -4209,6 +4262,26 @@ "message": "Izplatīti veidoli", "description": "Label indicating the most common import formats" }, + "uriMatchDefaultStrategyHint": { + "message": "URI atbilstības noteikšana ir veids, kā Bitwarden atpazīst automātiskās aizpildes ieteikumus.", + "description": "Explains to the user that URI match detection determines how Bitwarden suggests autofill options, and clarifies that this default strategy applies when no specific match detection is set for a login item." + }, + "regExAdvancedOptionWarning": { + "message": "\"Regulārā izteiksme\" ir lietpratējiem paredzēta iespēja ar paaugstinātu piekļuves datu atklāšanas bīstamību.", + "description": "Content for dialog which warns a user when selecting 'regular expression' matching strategy as a cipher match strategy" + }, + "startsWithAdvancedOptionWarning": { + "message": "\"Sākas ar' ir lietpratējiem paredzēta iespēja ar paaugstinātu piekļuves datu atklāšanas bīstamību.", + "description": "Content for dialog which warns a user when selecting 'starts with' matching strategy as a cipher match strategy" + }, + "uriMatchWarningDialogLink": { + "message": "Vairāk par atbilstības noteikšanu", + "description": "Link to match detection docs on warning dialog for advance match strategy" + }, + "uriAdvancedOption": { + "message": "Papildu iespējas", + "description": "Advanced option placeholder for uri option component" + }, "confirmContinueToBrowserSettingsTitle": { "message": "Pāriet uz pārlūka iestatījumiem?", "description": "Title for dialog which asks if the user wants to proceed to a relevant browser settings page" @@ -5036,6 +5109,9 @@ "unlockPinSet": { "message": "Atslēgšanas PIN iestatīts" }, + "unlockWithBiometricSet": { + "message": "Atslēgt ar biometriju" + }, "authenticating": { "message": "Autentificē" }, @@ -5362,7 +5438,7 @@ "message": "Ātra paroļu izveidošana" }, "generatorNudgeBodyOne": { - "message": "Vienkārša spēcīgu un neatkārtojamu paroļu izveidošana ar pogu", + "message": "Vienkārša spēcīgu un neatkārtojamu paroļu izveidošana ar", "description": "Two part message", "example": "Easily create strong and unique passwords by clicking on {icon} to help you keep your logins secure." }, @@ -5377,5 +5453,9 @@ }, "noPermissionsViewPage": { "message": "Nav atļaujas apskatīt šo lapu. Jāmēģina pieteikties ar citu kontu." + }, + "wasmNotSupported": { + "message": "WebAssembly šajā pārlūkā netiek atbalstīts vai nav iespējots. WebAssebly ir nepieciešams, lai izmantotu Bitwarden lietotni.", + "description": "'WebAssembly' is a technical term and should not be translated." } } diff --git a/apps/browser/src/_locales/ml/messages.json b/apps/browser/src/_locales/ml/messages.json index ab0120a40e2..7c0050906b0 100644 --- a/apps/browser/src/_locales/ml/messages.json +++ b/apps/browser/src/_locales/ml/messages.json @@ -1173,6 +1173,12 @@ "message": "Oh no! We couldn't save this. Try entering the details manually.", "description": "Detailed error message shown when saving login details fails." }, + "changePasswordWarning": { + "message": "After changing your password, you will need to log in with your new password. Active sessions on other devices will be logged out within one hour." + }, + "accountRecoveryUpdateMasterPasswordSubtitle": { + "message": "Change your master password to complete account recovery." + }, "enableChangedPasswordNotification": { "message": "Ask to update existing login" }, @@ -1365,8 +1371,8 @@ "featureUnavailable": { "message": "സവിശേഷത ലഭ്യമല്ല" }, - "encryptionKeyMigrationRequired": { - "message": "Encryption key migration required. Please login through the web vault to update your encryption key." + "legacyEncryptionUnsupported": { + "message": "Legacy encryption is no longer supported. Please contact support to recover your account." }, "premiumMembership": { "message": "പ്രീമിയം അംഗത്വം" @@ -1922,6 +1928,9 @@ "typeSshKey": { "message": "SSH key" }, + "typeNote": { + "message": "Note" + }, "newItemHeader": { "message": "New $TYPE$", "placeholders": { @@ -2153,8 +2162,8 @@ "setYourPinCode": { "message": "Bitwarden അൺലോക്കുചെയ്യുന്നതിന് തങ്ങളുടെ പിൻ കോഡ് സജ്ജമാക്കുക. തങ്ങൾ എപ്പോഴെങ്കിലും അപ്ലിക്കേഷനിൽ നിന്ന് പൂർണ്ണമായി ലോഗ് ഔട്ട് ചെയ്യുകയാണെങ്കിൽ, പിൻ ക്രമീകരണങ്ങൾ പുനസജ്ജമാക്കും." }, - "setYourPinCode1": { - "message": "Your PIN will be used to unlock Bitwarden instead of your master password. Your PIN will reset if you ever fully log out of Bitwarden." + "setPinCode": { + "message": "You can use this PIN to unlock Bitwarden. Your PIN will be reset if you ever fully log out of the application." }, "pinRequired": { "message": "പിൻ കോഡ് നിർബന്ധമാണ്." @@ -2204,6 +2213,9 @@ "useThisPassword": { "message": "Use this password" }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, "useThisUsername": { "message": "Use this username" }, @@ -2481,6 +2493,12 @@ "personalOwnershipPolicyInEffectImports": { "message": "An organization policy has blocked importing items into your individual vault." }, + "restrictCardTypeImport": { + "message": "Cannot import card item types" + }, + "restrictCardTypeImportDesc": { + "message": "A policy set by 1 or more organizations prevents you from importing cards to your vaults." + }, "domainsTitle": { "message": "Domains", "description": "A category title describing the concept of web domains" @@ -2512,6 +2530,10 @@ "change": { "message": "Change" }, + "changePassword": { + "message": "Change password", + "description": "Change password button for browser at risk notification on login." + }, "changeButtonTitle": { "message": "Change password - $ITEMNAME$", "placeholders": { @@ -2521,6 +2543,9 @@ } } }, + "atRiskPassword": { + "message": "At-risk password" + }, "atRiskPasswords": { "message": "At-risk passwords" }, @@ -2555,6 +2580,26 @@ } } }, + "atRiskChangePrompt": { + "message": "Your password for this site is at-risk. $ORGANIZATION$ has requested that you change it.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + }, + "description": "Notification body when a login triggers an at-risk password change request and the change password domain is known." + }, + "atRiskNavigatePrompt": { + "message": "$ORGANIZATION$ wants you to change this password because it is at-risk. Navigate to your account settings to change the password.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + }, + "description": "Notification body when a login triggers an at-risk password change request and no change password domain is provided." + }, "reviewAndChangeAtRiskPassword": { "message": "Review and change one at-risk password" }, @@ -2674,6 +2719,10 @@ "message": "All Sends", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "maxAccessCountReached": { + "message": "Max access count reached", + "description": "This text will be displayed after a Send has been accessed the maximum amount of times." + }, "hideTextByDefault": { "message": "Hide text by default" }, @@ -2876,6 +2925,9 @@ "emailVerificationRequiredDesc": { "message": "You must verify your email to use this feature. You can verify your email in the web vault." }, + "masterPasswordSuccessfullySet": { + "message": "Master password successfully set" + }, "updatedMasterPassword": { "message": "Updated master password" }, @@ -3408,6 +3460,9 @@ "logInRequestSent": { "message": "Request sent" }, + "masterPasswordChanged": { + "message": "Master password saved" + }, "exposedMasterPassword": { "message": "Exposed Master Password" }, @@ -3522,6 +3577,12 @@ "requestAdminApproval": { "message": "Request admin approval" }, + "unableToCompleteLogin": { + "message": "Unable to complete login" + }, + "loginOnTrustedDeviceOrAskAdminToAssignPassword": { + "message": "You need to log in on a trusted device or ask your administrator to assign you a password." + }, "ssoIdentifierRequired": { "message": "Organization SSO identifier is required." }, @@ -3607,14 +3668,6 @@ "trustUser": { "message": "Trust user" }, - "sendsNoItemsTitle": { - "message": "No active Sends", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendsNoItemsMessage": { - "message": "Use Send to securely share encrypted information with anyone.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "sendsTitleNoItems": { "message": "Send sensitive information safely", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -4209,6 +4262,26 @@ "message": "Common formats", "description": "Label indicating the most common import formats" }, + "uriMatchDefaultStrategyHint": { + "message": "URI match detection is how Bitwarden identifies autofill suggestions.", + "description": "Explains to the user that URI match detection determines how Bitwarden suggests autofill options, and clarifies that this default strategy applies when no specific match detection is set for a login item." + }, + "regExAdvancedOptionWarning": { + "message": "\"Regular expression\" is an advanced option with increased risk of exposing credentials.", + "description": "Content for dialog which warns a user when selecting 'regular expression' matching strategy as a cipher match strategy" + }, + "startsWithAdvancedOptionWarning": { + "message": "\"Starts with\" is an advanced option with increased risk of exposing credentials.", + "description": "Content for dialog which warns a user when selecting 'starts with' matching strategy as a cipher match strategy" + }, + "uriMatchWarningDialogLink": { + "message": "More about match detection", + "description": "Link to match detection docs on warning dialog for advance match strategy" + }, + "uriAdvancedOption": { + "message": "Advanced options", + "description": "Advanced option placeholder for uri option component" + }, "confirmContinueToBrowserSettingsTitle": { "message": "Continue to browser settings?", "description": "Title for dialog which asks if the user wants to proceed to a relevant browser settings page" @@ -5036,6 +5109,9 @@ "unlockPinSet": { "message": "Unlock PIN set" }, + "unlockWithBiometricSet": { + "message": "Unlock with biometrics set" + }, "authenticating": { "message": "Authenticating" }, @@ -5377,5 +5453,9 @@ }, "noPermissionsViewPage": { "message": "You do not have permissions to view this page. Try logging in with a different account." + }, + "wasmNotSupported": { + "message": "WebAssembly is not supported on your browser or is not enabled. WebAssembly is required to use the Bitwarden app.", + "description": "'WebAssembly' is a technical term and should not be translated." } } diff --git a/apps/browser/src/_locales/mr/messages.json b/apps/browser/src/_locales/mr/messages.json index 625bf093ba9..feb3377a2f1 100644 --- a/apps/browser/src/_locales/mr/messages.json +++ b/apps/browser/src/_locales/mr/messages.json @@ -1173,6 +1173,12 @@ "message": "Oh no! We couldn't save this. Try entering the details manually.", "description": "Detailed error message shown when saving login details fails." }, + "changePasswordWarning": { + "message": "After changing your password, you will need to log in with your new password. Active sessions on other devices will be logged out within one hour." + }, + "accountRecoveryUpdateMasterPasswordSubtitle": { + "message": "Change your master password to complete account recovery." + }, "enableChangedPasswordNotification": { "message": "Ask to update existing login" }, @@ -1365,8 +1371,8 @@ "featureUnavailable": { "message": "Feature unavailable" }, - "encryptionKeyMigrationRequired": { - "message": "Encryption key migration required. Please login through the web vault to update your encryption key." + "legacyEncryptionUnsupported": { + "message": "Legacy encryption is no longer supported. Please contact support to recover your account." }, "premiumMembership": { "message": "Premium membership" @@ -1922,6 +1928,9 @@ "typeSshKey": { "message": "SSH key" }, + "typeNote": { + "message": "Note" + }, "newItemHeader": { "message": "New $TYPE$", "placeholders": { @@ -2153,8 +2162,8 @@ "setYourPinCode": { "message": "Set your PIN code for unlocking Bitwarden. Your PIN settings will be reset if you ever fully log out of the application." }, - "setYourPinCode1": { - "message": "Your PIN will be used to unlock Bitwarden instead of your master password. Your PIN will reset if you ever fully log out of Bitwarden." + "setPinCode": { + "message": "You can use this PIN to unlock Bitwarden. Your PIN will be reset if you ever fully log out of the application." }, "pinRequired": { "message": "PIN code is required." @@ -2204,6 +2213,9 @@ "useThisPassword": { "message": "Use this password" }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, "useThisUsername": { "message": "Use this username" }, @@ -2481,6 +2493,12 @@ "personalOwnershipPolicyInEffectImports": { "message": "An organization policy has blocked importing items into your individual vault." }, + "restrictCardTypeImport": { + "message": "Cannot import card item types" + }, + "restrictCardTypeImportDesc": { + "message": "A policy set by 1 or more organizations prevents you from importing cards to your vaults." + }, "domainsTitle": { "message": "Domains", "description": "A category title describing the concept of web domains" @@ -2512,6 +2530,10 @@ "change": { "message": "Change" }, + "changePassword": { + "message": "Change password", + "description": "Change password button for browser at risk notification on login." + }, "changeButtonTitle": { "message": "Change password - $ITEMNAME$", "placeholders": { @@ -2521,6 +2543,9 @@ } } }, + "atRiskPassword": { + "message": "At-risk password" + }, "atRiskPasswords": { "message": "At-risk passwords" }, @@ -2555,6 +2580,26 @@ } } }, + "atRiskChangePrompt": { + "message": "Your password for this site is at-risk. $ORGANIZATION$ has requested that you change it.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + }, + "description": "Notification body when a login triggers an at-risk password change request and the change password domain is known." + }, + "atRiskNavigatePrompt": { + "message": "$ORGANIZATION$ wants you to change this password because it is at-risk. Navigate to your account settings to change the password.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + }, + "description": "Notification body when a login triggers an at-risk password change request and no change password domain is provided." + }, "reviewAndChangeAtRiskPassword": { "message": "Review and change one at-risk password" }, @@ -2674,6 +2719,10 @@ "message": "All Sends", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "maxAccessCountReached": { + "message": "Max access count reached", + "description": "This text will be displayed after a Send has been accessed the maximum amount of times." + }, "hideTextByDefault": { "message": "Hide text by default" }, @@ -2876,6 +2925,9 @@ "emailVerificationRequiredDesc": { "message": "You must verify your email to use this feature. You can verify your email in the web vault." }, + "masterPasswordSuccessfullySet": { + "message": "Master password successfully set" + }, "updatedMasterPassword": { "message": "Updated master password" }, @@ -3408,6 +3460,9 @@ "logInRequestSent": { "message": "Request sent" }, + "masterPasswordChanged": { + "message": "Master password saved" + }, "exposedMasterPassword": { "message": "Exposed Master Password" }, @@ -3522,6 +3577,12 @@ "requestAdminApproval": { "message": "Request admin approval" }, + "unableToCompleteLogin": { + "message": "Unable to complete login" + }, + "loginOnTrustedDeviceOrAskAdminToAssignPassword": { + "message": "You need to log in on a trusted device or ask your administrator to assign you a password." + }, "ssoIdentifierRequired": { "message": "Organization SSO identifier is required." }, @@ -3607,14 +3668,6 @@ "trustUser": { "message": "Trust user" }, - "sendsNoItemsTitle": { - "message": "No active Sends", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendsNoItemsMessage": { - "message": "Use Send to securely share encrypted information with anyone.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "sendsTitleNoItems": { "message": "Send sensitive information safely", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -4209,6 +4262,26 @@ "message": "Common formats", "description": "Label indicating the most common import formats" }, + "uriMatchDefaultStrategyHint": { + "message": "URI match detection is how Bitwarden identifies autofill suggestions.", + "description": "Explains to the user that URI match detection determines how Bitwarden suggests autofill options, and clarifies that this default strategy applies when no specific match detection is set for a login item." + }, + "regExAdvancedOptionWarning": { + "message": "\"Regular expression\" is an advanced option with increased risk of exposing credentials.", + "description": "Content for dialog which warns a user when selecting 'regular expression' matching strategy as a cipher match strategy" + }, + "startsWithAdvancedOptionWarning": { + "message": "\"Starts with\" is an advanced option with increased risk of exposing credentials.", + "description": "Content for dialog which warns a user when selecting 'starts with' matching strategy as a cipher match strategy" + }, + "uriMatchWarningDialogLink": { + "message": "More about match detection", + "description": "Link to match detection docs on warning dialog for advance match strategy" + }, + "uriAdvancedOption": { + "message": "Advanced options", + "description": "Advanced option placeholder for uri option component" + }, "confirmContinueToBrowserSettingsTitle": { "message": "Continue to browser settings?", "description": "Title for dialog which asks if the user wants to proceed to a relevant browser settings page" @@ -5036,6 +5109,9 @@ "unlockPinSet": { "message": "Unlock PIN set" }, + "unlockWithBiometricSet": { + "message": "Unlock with biometrics set" + }, "authenticating": { "message": "Authenticating" }, @@ -5377,5 +5453,9 @@ }, "noPermissionsViewPage": { "message": "You do not have permissions to view this page. Try logging in with a different account." + }, + "wasmNotSupported": { + "message": "WebAssembly is not supported on your browser or is not enabled. WebAssembly is required to use the Bitwarden app.", + "description": "'WebAssembly' is a technical term and should not be translated." } } diff --git a/apps/browser/src/_locales/my/messages.json b/apps/browser/src/_locales/my/messages.json index 4775d1f7af0..ecc7da63e79 100644 --- a/apps/browser/src/_locales/my/messages.json +++ b/apps/browser/src/_locales/my/messages.json @@ -1173,6 +1173,12 @@ "message": "Oh no! We couldn't save this. Try entering the details manually.", "description": "Detailed error message shown when saving login details fails." }, + "changePasswordWarning": { + "message": "After changing your password, you will need to log in with your new password. Active sessions on other devices will be logged out within one hour." + }, + "accountRecoveryUpdateMasterPasswordSubtitle": { + "message": "Change your master password to complete account recovery." + }, "enableChangedPasswordNotification": { "message": "Ask to update existing login" }, @@ -1365,8 +1371,8 @@ "featureUnavailable": { "message": "Feature unavailable" }, - "encryptionKeyMigrationRequired": { - "message": "Encryption key migration required. Please login through the web vault to update your encryption key." + "legacyEncryptionUnsupported": { + "message": "Legacy encryption is no longer supported. Please contact support to recover your account." }, "premiumMembership": { "message": "Premium membership" @@ -1922,6 +1928,9 @@ "typeSshKey": { "message": "SSH key" }, + "typeNote": { + "message": "Note" + }, "newItemHeader": { "message": "New $TYPE$", "placeholders": { @@ -2153,8 +2162,8 @@ "setYourPinCode": { "message": "Set your PIN code for unlocking Bitwarden. Your PIN settings will be reset if you ever fully log out of the application." }, - "setYourPinCode1": { - "message": "Your PIN will be used to unlock Bitwarden instead of your master password. Your PIN will reset if you ever fully log out of Bitwarden." + "setPinCode": { + "message": "You can use this PIN to unlock Bitwarden. Your PIN will be reset if you ever fully log out of the application." }, "pinRequired": { "message": "PIN code is required." @@ -2204,6 +2213,9 @@ "useThisPassword": { "message": "Use this password" }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, "useThisUsername": { "message": "Use this username" }, @@ -2481,6 +2493,12 @@ "personalOwnershipPolicyInEffectImports": { "message": "An organization policy has blocked importing items into your individual vault." }, + "restrictCardTypeImport": { + "message": "Cannot import card item types" + }, + "restrictCardTypeImportDesc": { + "message": "A policy set by 1 or more organizations prevents you from importing cards to your vaults." + }, "domainsTitle": { "message": "Domains", "description": "A category title describing the concept of web domains" @@ -2512,6 +2530,10 @@ "change": { "message": "Change" }, + "changePassword": { + "message": "Change password", + "description": "Change password button for browser at risk notification on login." + }, "changeButtonTitle": { "message": "Change password - $ITEMNAME$", "placeholders": { @@ -2521,6 +2543,9 @@ } } }, + "atRiskPassword": { + "message": "At-risk password" + }, "atRiskPasswords": { "message": "At-risk passwords" }, @@ -2555,6 +2580,26 @@ } } }, + "atRiskChangePrompt": { + "message": "Your password for this site is at-risk. $ORGANIZATION$ has requested that you change it.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + }, + "description": "Notification body when a login triggers an at-risk password change request and the change password domain is known." + }, + "atRiskNavigatePrompt": { + "message": "$ORGANIZATION$ wants you to change this password because it is at-risk. Navigate to your account settings to change the password.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + }, + "description": "Notification body when a login triggers an at-risk password change request and no change password domain is provided." + }, "reviewAndChangeAtRiskPassword": { "message": "Review and change one at-risk password" }, @@ -2674,6 +2719,10 @@ "message": "All Sends", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "maxAccessCountReached": { + "message": "Max access count reached", + "description": "This text will be displayed after a Send has been accessed the maximum amount of times." + }, "hideTextByDefault": { "message": "Hide text by default" }, @@ -2876,6 +2925,9 @@ "emailVerificationRequiredDesc": { "message": "You must verify your email to use this feature. You can verify your email in the web vault." }, + "masterPasswordSuccessfullySet": { + "message": "Master password successfully set" + }, "updatedMasterPassword": { "message": "Updated master password" }, @@ -3408,6 +3460,9 @@ "logInRequestSent": { "message": "Request sent" }, + "masterPasswordChanged": { + "message": "Master password saved" + }, "exposedMasterPassword": { "message": "Exposed Master Password" }, @@ -3522,6 +3577,12 @@ "requestAdminApproval": { "message": "Request admin approval" }, + "unableToCompleteLogin": { + "message": "Unable to complete login" + }, + "loginOnTrustedDeviceOrAskAdminToAssignPassword": { + "message": "You need to log in on a trusted device or ask your administrator to assign you a password." + }, "ssoIdentifierRequired": { "message": "Organization SSO identifier is required." }, @@ -3607,14 +3668,6 @@ "trustUser": { "message": "Trust user" }, - "sendsNoItemsTitle": { - "message": "No active Sends", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendsNoItemsMessage": { - "message": "Use Send to securely share encrypted information with anyone.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "sendsTitleNoItems": { "message": "Send sensitive information safely", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -4209,6 +4262,26 @@ "message": "Common formats", "description": "Label indicating the most common import formats" }, + "uriMatchDefaultStrategyHint": { + "message": "URI match detection is how Bitwarden identifies autofill suggestions.", + "description": "Explains to the user that URI match detection determines how Bitwarden suggests autofill options, and clarifies that this default strategy applies when no specific match detection is set for a login item." + }, + "regExAdvancedOptionWarning": { + "message": "\"Regular expression\" is an advanced option with increased risk of exposing credentials.", + "description": "Content for dialog which warns a user when selecting 'regular expression' matching strategy as a cipher match strategy" + }, + "startsWithAdvancedOptionWarning": { + "message": "\"Starts with\" is an advanced option with increased risk of exposing credentials.", + "description": "Content for dialog which warns a user when selecting 'starts with' matching strategy as a cipher match strategy" + }, + "uriMatchWarningDialogLink": { + "message": "More about match detection", + "description": "Link to match detection docs on warning dialog for advance match strategy" + }, + "uriAdvancedOption": { + "message": "Advanced options", + "description": "Advanced option placeholder for uri option component" + }, "confirmContinueToBrowserSettingsTitle": { "message": "Continue to browser settings?", "description": "Title for dialog which asks if the user wants to proceed to a relevant browser settings page" @@ -5036,6 +5109,9 @@ "unlockPinSet": { "message": "Unlock PIN set" }, + "unlockWithBiometricSet": { + "message": "Unlock with biometrics set" + }, "authenticating": { "message": "Authenticating" }, @@ -5377,5 +5453,9 @@ }, "noPermissionsViewPage": { "message": "You do not have permissions to view this page. Try logging in with a different account." + }, + "wasmNotSupported": { + "message": "WebAssembly is not supported on your browser or is not enabled. WebAssembly is required to use the Bitwarden app.", + "description": "'WebAssembly' is a technical term and should not be translated." } } diff --git a/apps/browser/src/_locales/nb/messages.json b/apps/browser/src/_locales/nb/messages.json index a11d5de6e2a..59a8ca94c9d 100644 --- a/apps/browser/src/_locales/nb/messages.json +++ b/apps/browser/src/_locales/nb/messages.json @@ -1173,6 +1173,12 @@ "message": "Oh no! We couldn't save this. Try entering the details manually.", "description": "Detailed error message shown when saving login details fails." }, + "changePasswordWarning": { + "message": "After changing your password, you will need to log in with your new password. Active sessions on other devices will be logged out within one hour." + }, + "accountRecoveryUpdateMasterPasswordSubtitle": { + "message": "Change your master password to complete account recovery." + }, "enableChangedPasswordNotification": { "message": "Spør om å oppdatere eksisterende innlogginger" }, @@ -1365,8 +1371,8 @@ "featureUnavailable": { "message": "Egenskapen er utilgjengelig" }, - "encryptionKeyMigrationRequired": { - "message": "Encryption key migration required. Please login through the web vault to update your encryption key." + "legacyEncryptionUnsupported": { + "message": "Legacy encryption is no longer supported. Please contact support to recover your account." }, "premiumMembership": { "message": "Premium-medlemskap" @@ -1922,6 +1928,9 @@ "typeSshKey": { "message": "SSH-nøkkel" }, + "typeNote": { + "message": "Note" + }, "newItemHeader": { "message": "Ny $TYPE$", "placeholders": { @@ -2153,8 +2162,8 @@ "setYourPinCode": { "message": "Angi PIN-koden din for å låse opp Bitwarden. PIN-innstillingene tilbakestilles hvis du logger deg helt ut av programmet." }, - "setYourPinCode1": { - "message": "PIN-koden din vil bli brukt til å låse opp Bitwarden i stedet for hovedpassordet ditt. PIN-koden din tilbakestilles hvis du noen gang logger deg helt ut av Bitwarden." + "setPinCode": { + "message": "You can use this PIN to unlock Bitwarden. Your PIN will be reset if you ever fully log out of the application." }, "pinRequired": { "message": "PIN-kode er påkrevd." @@ -2204,6 +2213,9 @@ "useThisPassword": { "message": "Bruk dette passordet" }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, "useThisUsername": { "message": "Bruk dette brukernavnet" }, @@ -2481,6 +2493,12 @@ "personalOwnershipPolicyInEffectImports": { "message": "En organisasjonsretningslinje har blokkert import av gjenstander til ditt individuelle hvelv." }, + "restrictCardTypeImport": { + "message": "Cannot import card item types" + }, + "restrictCardTypeImportDesc": { + "message": "A policy set by 1 or more organizations prevents you from importing cards to your vaults." + }, "domainsTitle": { "message": "Domener", "description": "A category title describing the concept of web domains" @@ -2512,6 +2530,10 @@ "change": { "message": "Endre" }, + "changePassword": { + "message": "Change password", + "description": "Change password button for browser at risk notification on login." + }, "changeButtonTitle": { "message": "Endre passord - $ITEMNAME$", "placeholders": { @@ -2521,6 +2543,9 @@ } } }, + "atRiskPassword": { + "message": "At-risk password" + }, "atRiskPasswords": { "message": "At-risk passwords" }, @@ -2555,6 +2580,26 @@ } } }, + "atRiskChangePrompt": { + "message": "Your password for this site is at-risk. $ORGANIZATION$ has requested that you change it.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + }, + "description": "Notification body when a login triggers an at-risk password change request and the change password domain is known." + }, + "atRiskNavigatePrompt": { + "message": "$ORGANIZATION$ wants you to change this password because it is at-risk. Navigate to your account settings to change the password.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + }, + "description": "Notification body when a login triggers an at-risk password change request and no change password domain is provided." + }, "reviewAndChangeAtRiskPassword": { "message": "Review and change one at-risk password" }, @@ -2674,6 +2719,10 @@ "message": "Alle Send-er", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "maxAccessCountReached": { + "message": "Max access count reached", + "description": "This text will be displayed after a Send has been accessed the maximum amount of times." + }, "hideTextByDefault": { "message": "Skjul tekst som standard" }, @@ -2876,6 +2925,9 @@ "emailVerificationRequiredDesc": { "message": "Du må bekrefte e-posten din for å bruke denne funksjonen. Du kan bekrefte e-postadressen din i netthvelvet." }, + "masterPasswordSuccessfullySet": { + "message": "Master password successfully set" + }, "updatedMasterPassword": { "message": "Oppdaterte hovedpassordet" }, @@ -3408,6 +3460,9 @@ "logInRequestSent": { "message": "Forespørsel sendt" }, + "masterPasswordChanged": { + "message": "Master password saved" + }, "exposedMasterPassword": { "message": "Eksponert hovedpassord" }, @@ -3522,6 +3577,12 @@ "requestAdminApproval": { "message": "Be om administratorgodkjennelse" }, + "unableToCompleteLogin": { + "message": "Unable to complete login" + }, + "loginOnTrustedDeviceOrAskAdminToAssignPassword": { + "message": "You need to log in on a trusted device or ask your administrator to assign you a password." + }, "ssoIdentifierRequired": { "message": "Organization SSO identifier is required." }, @@ -3607,14 +3668,6 @@ "trustUser": { "message": "Stol på brukler" }, - "sendsNoItemsTitle": { - "message": "Ingen aktive Send", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendsNoItemsMessage": { - "message": "Bruk Send til å dele kryptert informasjon med noen.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "sendsTitleNoItems": { "message": "Send sensitive information safely", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -4209,6 +4262,26 @@ "message": "Vanlige formater", "description": "Label indicating the most common import formats" }, + "uriMatchDefaultStrategyHint": { + "message": "URI match detection is how Bitwarden identifies autofill suggestions.", + "description": "Explains to the user that URI match detection determines how Bitwarden suggests autofill options, and clarifies that this default strategy applies when no specific match detection is set for a login item." + }, + "regExAdvancedOptionWarning": { + "message": "\"Regular expression\" is an advanced option with increased risk of exposing credentials.", + "description": "Content for dialog which warns a user when selecting 'regular expression' matching strategy as a cipher match strategy" + }, + "startsWithAdvancedOptionWarning": { + "message": "\"Starts with\" is an advanced option with increased risk of exposing credentials.", + "description": "Content for dialog which warns a user when selecting 'starts with' matching strategy as a cipher match strategy" + }, + "uriMatchWarningDialogLink": { + "message": "More about match detection", + "description": "Link to match detection docs on warning dialog for advance match strategy" + }, + "uriAdvancedOption": { + "message": "Advanced options", + "description": "Advanced option placeholder for uri option component" + }, "confirmContinueToBrowserSettingsTitle": { "message": "Vil du fortsette til nettleserinnstillingene?", "description": "Title for dialog which asks if the user wants to proceed to a relevant browser settings page" @@ -5036,6 +5109,9 @@ "unlockPinSet": { "message": "Unlock PIN set" }, + "unlockWithBiometricSet": { + "message": "Unlock with biometrics set" + }, "authenticating": { "message": "Autentiserer" }, @@ -5377,5 +5453,9 @@ }, "noPermissionsViewPage": { "message": "You do not have permissions to view this page. Try logging in with a different account." + }, + "wasmNotSupported": { + "message": "WebAssembly is not supported on your browser or is not enabled. WebAssembly is required to use the Bitwarden app.", + "description": "'WebAssembly' is a technical term and should not be translated." } } diff --git a/apps/browser/src/_locales/ne/messages.json b/apps/browser/src/_locales/ne/messages.json index 4775d1f7af0..ecc7da63e79 100644 --- a/apps/browser/src/_locales/ne/messages.json +++ b/apps/browser/src/_locales/ne/messages.json @@ -1173,6 +1173,12 @@ "message": "Oh no! We couldn't save this. Try entering the details manually.", "description": "Detailed error message shown when saving login details fails." }, + "changePasswordWarning": { + "message": "After changing your password, you will need to log in with your new password. Active sessions on other devices will be logged out within one hour." + }, + "accountRecoveryUpdateMasterPasswordSubtitle": { + "message": "Change your master password to complete account recovery." + }, "enableChangedPasswordNotification": { "message": "Ask to update existing login" }, @@ -1365,8 +1371,8 @@ "featureUnavailable": { "message": "Feature unavailable" }, - "encryptionKeyMigrationRequired": { - "message": "Encryption key migration required. Please login through the web vault to update your encryption key." + "legacyEncryptionUnsupported": { + "message": "Legacy encryption is no longer supported. Please contact support to recover your account." }, "premiumMembership": { "message": "Premium membership" @@ -1922,6 +1928,9 @@ "typeSshKey": { "message": "SSH key" }, + "typeNote": { + "message": "Note" + }, "newItemHeader": { "message": "New $TYPE$", "placeholders": { @@ -2153,8 +2162,8 @@ "setYourPinCode": { "message": "Set your PIN code for unlocking Bitwarden. Your PIN settings will be reset if you ever fully log out of the application." }, - "setYourPinCode1": { - "message": "Your PIN will be used to unlock Bitwarden instead of your master password. Your PIN will reset if you ever fully log out of Bitwarden." + "setPinCode": { + "message": "You can use this PIN to unlock Bitwarden. Your PIN will be reset if you ever fully log out of the application." }, "pinRequired": { "message": "PIN code is required." @@ -2204,6 +2213,9 @@ "useThisPassword": { "message": "Use this password" }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, "useThisUsername": { "message": "Use this username" }, @@ -2481,6 +2493,12 @@ "personalOwnershipPolicyInEffectImports": { "message": "An organization policy has blocked importing items into your individual vault." }, + "restrictCardTypeImport": { + "message": "Cannot import card item types" + }, + "restrictCardTypeImportDesc": { + "message": "A policy set by 1 or more organizations prevents you from importing cards to your vaults." + }, "domainsTitle": { "message": "Domains", "description": "A category title describing the concept of web domains" @@ -2512,6 +2530,10 @@ "change": { "message": "Change" }, + "changePassword": { + "message": "Change password", + "description": "Change password button for browser at risk notification on login." + }, "changeButtonTitle": { "message": "Change password - $ITEMNAME$", "placeholders": { @@ -2521,6 +2543,9 @@ } } }, + "atRiskPassword": { + "message": "At-risk password" + }, "atRiskPasswords": { "message": "At-risk passwords" }, @@ -2555,6 +2580,26 @@ } } }, + "atRiskChangePrompt": { + "message": "Your password for this site is at-risk. $ORGANIZATION$ has requested that you change it.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + }, + "description": "Notification body when a login triggers an at-risk password change request and the change password domain is known." + }, + "atRiskNavigatePrompt": { + "message": "$ORGANIZATION$ wants you to change this password because it is at-risk. Navigate to your account settings to change the password.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + }, + "description": "Notification body when a login triggers an at-risk password change request and no change password domain is provided." + }, "reviewAndChangeAtRiskPassword": { "message": "Review and change one at-risk password" }, @@ -2674,6 +2719,10 @@ "message": "All Sends", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "maxAccessCountReached": { + "message": "Max access count reached", + "description": "This text will be displayed after a Send has been accessed the maximum amount of times." + }, "hideTextByDefault": { "message": "Hide text by default" }, @@ -2876,6 +2925,9 @@ "emailVerificationRequiredDesc": { "message": "You must verify your email to use this feature. You can verify your email in the web vault." }, + "masterPasswordSuccessfullySet": { + "message": "Master password successfully set" + }, "updatedMasterPassword": { "message": "Updated master password" }, @@ -3408,6 +3460,9 @@ "logInRequestSent": { "message": "Request sent" }, + "masterPasswordChanged": { + "message": "Master password saved" + }, "exposedMasterPassword": { "message": "Exposed Master Password" }, @@ -3522,6 +3577,12 @@ "requestAdminApproval": { "message": "Request admin approval" }, + "unableToCompleteLogin": { + "message": "Unable to complete login" + }, + "loginOnTrustedDeviceOrAskAdminToAssignPassword": { + "message": "You need to log in on a trusted device or ask your administrator to assign you a password." + }, "ssoIdentifierRequired": { "message": "Organization SSO identifier is required." }, @@ -3607,14 +3668,6 @@ "trustUser": { "message": "Trust user" }, - "sendsNoItemsTitle": { - "message": "No active Sends", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendsNoItemsMessage": { - "message": "Use Send to securely share encrypted information with anyone.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "sendsTitleNoItems": { "message": "Send sensitive information safely", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -4209,6 +4262,26 @@ "message": "Common formats", "description": "Label indicating the most common import formats" }, + "uriMatchDefaultStrategyHint": { + "message": "URI match detection is how Bitwarden identifies autofill suggestions.", + "description": "Explains to the user that URI match detection determines how Bitwarden suggests autofill options, and clarifies that this default strategy applies when no specific match detection is set for a login item." + }, + "regExAdvancedOptionWarning": { + "message": "\"Regular expression\" is an advanced option with increased risk of exposing credentials.", + "description": "Content for dialog which warns a user when selecting 'regular expression' matching strategy as a cipher match strategy" + }, + "startsWithAdvancedOptionWarning": { + "message": "\"Starts with\" is an advanced option with increased risk of exposing credentials.", + "description": "Content for dialog which warns a user when selecting 'starts with' matching strategy as a cipher match strategy" + }, + "uriMatchWarningDialogLink": { + "message": "More about match detection", + "description": "Link to match detection docs on warning dialog for advance match strategy" + }, + "uriAdvancedOption": { + "message": "Advanced options", + "description": "Advanced option placeholder for uri option component" + }, "confirmContinueToBrowserSettingsTitle": { "message": "Continue to browser settings?", "description": "Title for dialog which asks if the user wants to proceed to a relevant browser settings page" @@ -5036,6 +5109,9 @@ "unlockPinSet": { "message": "Unlock PIN set" }, + "unlockWithBiometricSet": { + "message": "Unlock with biometrics set" + }, "authenticating": { "message": "Authenticating" }, @@ -5377,5 +5453,9 @@ }, "noPermissionsViewPage": { "message": "You do not have permissions to view this page. Try logging in with a different account." + }, + "wasmNotSupported": { + "message": "WebAssembly is not supported on your browser or is not enabled. WebAssembly is required to use the Bitwarden app.", + "description": "'WebAssembly' is a technical term and should not be translated." } } diff --git a/apps/browser/src/_locales/nl/messages.json b/apps/browser/src/_locales/nl/messages.json index 67a784459b2..71134c7a33b 100644 --- a/apps/browser/src/_locales/nl/messages.json +++ b/apps/browser/src/_locales/nl/messages.json @@ -468,7 +468,7 @@ "message": "Wachtwoord gegenereerd" }, "passphraseGenerated": { - "message": "Wachtwoorden gegenereerd" + "message": "Wachtwoordzin gegenereerd" }, "usernameGenerated": { "message": "Gebruikersnaam gegenereerd" @@ -1173,6 +1173,12 @@ "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." }, + "changePasswordWarning": { + "message": "Na het wijzigen van je wachtwoord moet je inloggen met je nieuwe wachtwoord. Actieve sessies op andere apparaten worden binnen één uur uitgelogd." + }, + "accountRecoveryUpdateMasterPasswordSubtitle": { + "message": "Wijzig je hoofdwachtwoord om je account te herstellen." + }, "enableChangedPasswordNotification": { "message": "Vraag om bijwerken bestaande login" }, @@ -1365,8 +1371,8 @@ "featureUnavailable": { "message": "Functionaliteit niet beschikbaar" }, - "encryptionKeyMigrationRequired": { - "message": "Migratie van de encryptiesleutel vereist. Login via de website om je sleutel te bij te werken." + "legacyEncryptionUnsupported": { + "message": "Oude versleuteling wordt niet langer ondersteund. Neem contact op voor ondersteuning om je account te herstellen." }, "premiumMembership": { "message": "Premium-abonnement" @@ -1922,6 +1928,9 @@ "typeSshKey": { "message": "SSH-sleutel" }, + "typeNote": { + "message": "Notitie" + }, "newItemHeader": { "message": "Nieuwe $TYPE$", "placeholders": { @@ -2153,8 +2162,8 @@ "setYourPinCode": { "message": "Stel je PIN-code in voor het ontgrendelen van Bitwarden. Je PIN-code wordt opnieuw ingesteld als je je ooit volledig afmeldt bij de applicatie." }, - "setYourPinCode1": { - "message": "Je pincode wordt gebruikt om Bitwarden te ontgrendelen in plaats van je hoofdwachtwoord. Je pincode wordt opnieuw ingesteld als je ooit volledig uitlogt op Bitwarden." + "setPinCode": { + "message": "Je kunt deze PIN gebruiken voor het ontgrendelen van Bitwarden. Je PIN wordt opnieuw ingesteld als je je ooit volledig afmeldt bij de applicatie." }, "pinRequired": { "message": "PIN-code is vereist." @@ -2204,6 +2213,9 @@ "useThisPassword": { "message": "Dit wachtwoord gebruiken" }, + "useThisPassphrase": { + "message": "Deze wachtwoordzin gebruiken" + }, "useThisUsername": { "message": "Deze gebruikersnaam gebruiken" }, @@ -2481,6 +2493,12 @@ "personalOwnershipPolicyInEffectImports": { "message": "Organisatiebeleid heeft het importeren van items in je persoonlijke kluis geblokkeerd." }, + "restrictCardTypeImport": { + "message": "Kan kaart item types niet importeren" + }, + "restrictCardTypeImportDesc": { + "message": "Een beleid ingesteld door 1 of meer organisaties voorkomt dat je kaarten naar je kluizen kunt importeren." + }, "domainsTitle": { "message": "Domeinen", "description": "A category title describing the concept of web domains" @@ -2512,6 +2530,10 @@ "change": { "message": "Wijzigen" }, + "changePassword": { + "message": "Wachtwoord wijzigen", + "description": "Change password button for browser at risk notification on login." + }, "changeButtonTitle": { "message": "Wachtwoord wijzigen - $ITEMNAME$", "placeholders": { @@ -2521,6 +2543,9 @@ } } }, + "atRiskPassword": { + "message": "Risicovolle wachtwoorden" + }, "atRiskPasswords": { "message": "Risicovolle wachtwoorden" }, @@ -2555,6 +2580,26 @@ } } }, + "atRiskChangePrompt": { + "message": "Je wachtwoord voor deze website is een risico. $ORGANIZATION$ vraagt je deze te veranderen.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + }, + "description": "Notification body when a login triggers an at-risk password change request and the change password domain is known." + }, + "atRiskNavigatePrompt": { + "message": "$ORGANIZATION$ wil dat je dit wachtwoord verandert omdat het in gevaar is. Navigeer naar je accountinstellingen om het wachtwoord te wijzigen.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + }, + "description": "Notification body when a login triggers an at-risk password change request and no change password domain is provided." + }, "reviewAndChangeAtRiskPassword": { "message": "Eén risicovol wachtwoord beoordelen en wijzigen" }, @@ -2674,6 +2719,10 @@ "message": "Alle Sends", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "maxAccessCountReached": { + "message": "Maximum aantal keren benaderd", + "description": "This text will be displayed after a Send has been accessed the maximum amount of times." + }, "hideTextByDefault": { "message": "Tekst standaard verbergen" }, @@ -2876,6 +2925,9 @@ "emailVerificationRequiredDesc": { "message": "Je moet je e-mailadres verifiëren om deze functie te gebruiken. Je kunt je e-mailadres verifiëren in de kluis." }, + "masterPasswordSuccessfullySet": { + "message": "Hoofdwachtwoord succesvol ingesteld" + }, "updatedMasterPassword": { "message": "Hoofdwachtwoord bijgewerkt" }, @@ -3408,6 +3460,9 @@ "logInRequestSent": { "message": "Verzoek verzonden" }, + "masterPasswordChanged": { + "message": "Hoofdwachtwoord gewijzigd" + }, "exposedMasterPassword": { "message": "Gelekt hoofdwachtwoord" }, @@ -3522,6 +3577,12 @@ "requestAdminApproval": { "message": "Goedkeuring van beheerder vragen" }, + "unableToCompleteLogin": { + "message": "Kan login niet voltooien" + }, + "loginOnTrustedDeviceOrAskAdminToAssignPassword": { + "message": "Je moet inloggen op een vertrouwd apparaat of je beheerder vragen om je een wachtwoord toe te wijzen." + }, "ssoIdentifierRequired": { "message": "Organisatie SSO-identificatie vereist." }, @@ -3607,14 +3668,6 @@ "trustUser": { "message": "Gebruiker vertrouwen" }, - "sendsNoItemsTitle": { - "message": "Geen actieve Sends", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendsNoItemsMessage": { - "message": "Gebruik Send voor het veilig delen van versleutelde informatie met wie dan ook.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "sendsTitleNoItems": { "message": "Gevoelige informatie veilig versturen", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -4209,6 +4262,26 @@ "message": "Veelvoorkomende formaten", "description": "Label indicating the most common import formats" }, + "uriMatchDefaultStrategyHint": { + "message": "URI-matche-detectie is hoe Bitwarden invulsuggesties herkent.", + "description": "Explains to the user that URI match detection determines how Bitwarden suggests autofill options, and clarifies that this default strategy applies when no specific match detection is set for a login item." + }, + "regExAdvancedOptionWarning": { + "message": "\"Reguliere expressie\" is een geavanceerde optie met een verhoogd risico op het blootstellen van inloggegevens.", + "description": "Content for dialog which warns a user when selecting 'regular expression' matching strategy as a cipher match strategy" + }, + "startsWithAdvancedOptionWarning": { + "message": "\"Begint met\" is een geavanceerde optie met een verhoogd risico op het blootstellen van inloggegevens.", + "description": "Content for dialog which warns a user when selecting 'starts with' matching strategy as a cipher match strategy" + }, + "uriMatchWarningDialogLink": { + "message": "Lees meer over overeenkomstdetectie", + "description": "Link to match detection docs on warning dialog for advance match strategy" + }, + "uriAdvancedOption": { + "message": "Geavanceerde opties", + "description": "Advanced option placeholder for uri option component" + }, "confirmContinueToBrowserSettingsTitle": { "message": "Doorgaan naar browserinstellingen?", "description": "Title for dialog which asks if the user wants to proceed to a relevant browser settings page" @@ -5036,6 +5109,9 @@ "unlockPinSet": { "message": "PIN-code ontgrendelen instellen" }, + "unlockWithBiometricSet": { + "message": "Met biometrische set ontgrendelen" + }, "authenticating": { "message": "Aan het inloggen" }, @@ -5377,5 +5453,9 @@ }, "noPermissionsViewPage": { "message": "Je hebt geen rechten om deze pagina te bekijken. Probeer in te loggen met een ander account." + }, + "wasmNotSupported": { + "message": "WebAssembly wordt niet ondersteund in je browser of is niet ingeschakeld. WebAssembly is vereist om de Bitwarden-app te gebruiken.", + "description": "'WebAssembly' is a technical term and should not be translated." } } diff --git a/apps/browser/src/_locales/nn/messages.json b/apps/browser/src/_locales/nn/messages.json index 4775d1f7af0..ecc7da63e79 100644 --- a/apps/browser/src/_locales/nn/messages.json +++ b/apps/browser/src/_locales/nn/messages.json @@ -1173,6 +1173,12 @@ "message": "Oh no! We couldn't save this. Try entering the details manually.", "description": "Detailed error message shown when saving login details fails." }, + "changePasswordWarning": { + "message": "After changing your password, you will need to log in with your new password. Active sessions on other devices will be logged out within one hour." + }, + "accountRecoveryUpdateMasterPasswordSubtitle": { + "message": "Change your master password to complete account recovery." + }, "enableChangedPasswordNotification": { "message": "Ask to update existing login" }, @@ -1365,8 +1371,8 @@ "featureUnavailable": { "message": "Feature unavailable" }, - "encryptionKeyMigrationRequired": { - "message": "Encryption key migration required. Please login through the web vault to update your encryption key." + "legacyEncryptionUnsupported": { + "message": "Legacy encryption is no longer supported. Please contact support to recover your account." }, "premiumMembership": { "message": "Premium membership" @@ -1922,6 +1928,9 @@ "typeSshKey": { "message": "SSH key" }, + "typeNote": { + "message": "Note" + }, "newItemHeader": { "message": "New $TYPE$", "placeholders": { @@ -2153,8 +2162,8 @@ "setYourPinCode": { "message": "Set your PIN code for unlocking Bitwarden. Your PIN settings will be reset if you ever fully log out of the application." }, - "setYourPinCode1": { - "message": "Your PIN will be used to unlock Bitwarden instead of your master password. Your PIN will reset if you ever fully log out of Bitwarden." + "setPinCode": { + "message": "You can use this PIN to unlock Bitwarden. Your PIN will be reset if you ever fully log out of the application." }, "pinRequired": { "message": "PIN code is required." @@ -2204,6 +2213,9 @@ "useThisPassword": { "message": "Use this password" }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, "useThisUsername": { "message": "Use this username" }, @@ -2481,6 +2493,12 @@ "personalOwnershipPolicyInEffectImports": { "message": "An organization policy has blocked importing items into your individual vault." }, + "restrictCardTypeImport": { + "message": "Cannot import card item types" + }, + "restrictCardTypeImportDesc": { + "message": "A policy set by 1 or more organizations prevents you from importing cards to your vaults." + }, "domainsTitle": { "message": "Domains", "description": "A category title describing the concept of web domains" @@ -2512,6 +2530,10 @@ "change": { "message": "Change" }, + "changePassword": { + "message": "Change password", + "description": "Change password button for browser at risk notification on login." + }, "changeButtonTitle": { "message": "Change password - $ITEMNAME$", "placeholders": { @@ -2521,6 +2543,9 @@ } } }, + "atRiskPassword": { + "message": "At-risk password" + }, "atRiskPasswords": { "message": "At-risk passwords" }, @@ -2555,6 +2580,26 @@ } } }, + "atRiskChangePrompt": { + "message": "Your password for this site is at-risk. $ORGANIZATION$ has requested that you change it.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + }, + "description": "Notification body when a login triggers an at-risk password change request and the change password domain is known." + }, + "atRiskNavigatePrompt": { + "message": "$ORGANIZATION$ wants you to change this password because it is at-risk. Navigate to your account settings to change the password.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + }, + "description": "Notification body when a login triggers an at-risk password change request and no change password domain is provided." + }, "reviewAndChangeAtRiskPassword": { "message": "Review and change one at-risk password" }, @@ -2674,6 +2719,10 @@ "message": "All Sends", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "maxAccessCountReached": { + "message": "Max access count reached", + "description": "This text will be displayed after a Send has been accessed the maximum amount of times." + }, "hideTextByDefault": { "message": "Hide text by default" }, @@ -2876,6 +2925,9 @@ "emailVerificationRequiredDesc": { "message": "You must verify your email to use this feature. You can verify your email in the web vault." }, + "masterPasswordSuccessfullySet": { + "message": "Master password successfully set" + }, "updatedMasterPassword": { "message": "Updated master password" }, @@ -3408,6 +3460,9 @@ "logInRequestSent": { "message": "Request sent" }, + "masterPasswordChanged": { + "message": "Master password saved" + }, "exposedMasterPassword": { "message": "Exposed Master Password" }, @@ -3522,6 +3577,12 @@ "requestAdminApproval": { "message": "Request admin approval" }, + "unableToCompleteLogin": { + "message": "Unable to complete login" + }, + "loginOnTrustedDeviceOrAskAdminToAssignPassword": { + "message": "You need to log in on a trusted device or ask your administrator to assign you a password." + }, "ssoIdentifierRequired": { "message": "Organization SSO identifier is required." }, @@ -3607,14 +3668,6 @@ "trustUser": { "message": "Trust user" }, - "sendsNoItemsTitle": { - "message": "No active Sends", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendsNoItemsMessage": { - "message": "Use Send to securely share encrypted information with anyone.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "sendsTitleNoItems": { "message": "Send sensitive information safely", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -4209,6 +4262,26 @@ "message": "Common formats", "description": "Label indicating the most common import formats" }, + "uriMatchDefaultStrategyHint": { + "message": "URI match detection is how Bitwarden identifies autofill suggestions.", + "description": "Explains to the user that URI match detection determines how Bitwarden suggests autofill options, and clarifies that this default strategy applies when no specific match detection is set for a login item." + }, + "regExAdvancedOptionWarning": { + "message": "\"Regular expression\" is an advanced option with increased risk of exposing credentials.", + "description": "Content for dialog which warns a user when selecting 'regular expression' matching strategy as a cipher match strategy" + }, + "startsWithAdvancedOptionWarning": { + "message": "\"Starts with\" is an advanced option with increased risk of exposing credentials.", + "description": "Content for dialog which warns a user when selecting 'starts with' matching strategy as a cipher match strategy" + }, + "uriMatchWarningDialogLink": { + "message": "More about match detection", + "description": "Link to match detection docs on warning dialog for advance match strategy" + }, + "uriAdvancedOption": { + "message": "Advanced options", + "description": "Advanced option placeholder for uri option component" + }, "confirmContinueToBrowserSettingsTitle": { "message": "Continue to browser settings?", "description": "Title for dialog which asks if the user wants to proceed to a relevant browser settings page" @@ -5036,6 +5109,9 @@ "unlockPinSet": { "message": "Unlock PIN set" }, + "unlockWithBiometricSet": { + "message": "Unlock with biometrics set" + }, "authenticating": { "message": "Authenticating" }, @@ -5377,5 +5453,9 @@ }, "noPermissionsViewPage": { "message": "You do not have permissions to view this page. Try logging in with a different account." + }, + "wasmNotSupported": { + "message": "WebAssembly is not supported on your browser or is not enabled. WebAssembly is required to use the Bitwarden app.", + "description": "'WebAssembly' is a technical term and should not be translated." } } diff --git a/apps/browser/src/_locales/or/messages.json b/apps/browser/src/_locales/or/messages.json index 4775d1f7af0..ecc7da63e79 100644 --- a/apps/browser/src/_locales/or/messages.json +++ b/apps/browser/src/_locales/or/messages.json @@ -1173,6 +1173,12 @@ "message": "Oh no! We couldn't save this. Try entering the details manually.", "description": "Detailed error message shown when saving login details fails." }, + "changePasswordWarning": { + "message": "After changing your password, you will need to log in with your new password. Active sessions on other devices will be logged out within one hour." + }, + "accountRecoveryUpdateMasterPasswordSubtitle": { + "message": "Change your master password to complete account recovery." + }, "enableChangedPasswordNotification": { "message": "Ask to update existing login" }, @@ -1365,8 +1371,8 @@ "featureUnavailable": { "message": "Feature unavailable" }, - "encryptionKeyMigrationRequired": { - "message": "Encryption key migration required. Please login through the web vault to update your encryption key." + "legacyEncryptionUnsupported": { + "message": "Legacy encryption is no longer supported. Please contact support to recover your account." }, "premiumMembership": { "message": "Premium membership" @@ -1922,6 +1928,9 @@ "typeSshKey": { "message": "SSH key" }, + "typeNote": { + "message": "Note" + }, "newItemHeader": { "message": "New $TYPE$", "placeholders": { @@ -2153,8 +2162,8 @@ "setYourPinCode": { "message": "Set your PIN code for unlocking Bitwarden. Your PIN settings will be reset if you ever fully log out of the application." }, - "setYourPinCode1": { - "message": "Your PIN will be used to unlock Bitwarden instead of your master password. Your PIN will reset if you ever fully log out of Bitwarden." + "setPinCode": { + "message": "You can use this PIN to unlock Bitwarden. Your PIN will be reset if you ever fully log out of the application." }, "pinRequired": { "message": "PIN code is required." @@ -2204,6 +2213,9 @@ "useThisPassword": { "message": "Use this password" }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, "useThisUsername": { "message": "Use this username" }, @@ -2481,6 +2493,12 @@ "personalOwnershipPolicyInEffectImports": { "message": "An organization policy has blocked importing items into your individual vault." }, + "restrictCardTypeImport": { + "message": "Cannot import card item types" + }, + "restrictCardTypeImportDesc": { + "message": "A policy set by 1 or more organizations prevents you from importing cards to your vaults." + }, "domainsTitle": { "message": "Domains", "description": "A category title describing the concept of web domains" @@ -2512,6 +2530,10 @@ "change": { "message": "Change" }, + "changePassword": { + "message": "Change password", + "description": "Change password button for browser at risk notification on login." + }, "changeButtonTitle": { "message": "Change password - $ITEMNAME$", "placeholders": { @@ -2521,6 +2543,9 @@ } } }, + "atRiskPassword": { + "message": "At-risk password" + }, "atRiskPasswords": { "message": "At-risk passwords" }, @@ -2555,6 +2580,26 @@ } } }, + "atRiskChangePrompt": { + "message": "Your password for this site is at-risk. $ORGANIZATION$ has requested that you change it.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + }, + "description": "Notification body when a login triggers an at-risk password change request and the change password domain is known." + }, + "atRiskNavigatePrompt": { + "message": "$ORGANIZATION$ wants you to change this password because it is at-risk. Navigate to your account settings to change the password.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + }, + "description": "Notification body when a login triggers an at-risk password change request and no change password domain is provided." + }, "reviewAndChangeAtRiskPassword": { "message": "Review and change one at-risk password" }, @@ -2674,6 +2719,10 @@ "message": "All Sends", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "maxAccessCountReached": { + "message": "Max access count reached", + "description": "This text will be displayed after a Send has been accessed the maximum amount of times." + }, "hideTextByDefault": { "message": "Hide text by default" }, @@ -2876,6 +2925,9 @@ "emailVerificationRequiredDesc": { "message": "You must verify your email to use this feature. You can verify your email in the web vault." }, + "masterPasswordSuccessfullySet": { + "message": "Master password successfully set" + }, "updatedMasterPassword": { "message": "Updated master password" }, @@ -3408,6 +3460,9 @@ "logInRequestSent": { "message": "Request sent" }, + "masterPasswordChanged": { + "message": "Master password saved" + }, "exposedMasterPassword": { "message": "Exposed Master Password" }, @@ -3522,6 +3577,12 @@ "requestAdminApproval": { "message": "Request admin approval" }, + "unableToCompleteLogin": { + "message": "Unable to complete login" + }, + "loginOnTrustedDeviceOrAskAdminToAssignPassword": { + "message": "You need to log in on a trusted device or ask your administrator to assign you a password." + }, "ssoIdentifierRequired": { "message": "Organization SSO identifier is required." }, @@ -3607,14 +3668,6 @@ "trustUser": { "message": "Trust user" }, - "sendsNoItemsTitle": { - "message": "No active Sends", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendsNoItemsMessage": { - "message": "Use Send to securely share encrypted information with anyone.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "sendsTitleNoItems": { "message": "Send sensitive information safely", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -4209,6 +4262,26 @@ "message": "Common formats", "description": "Label indicating the most common import formats" }, + "uriMatchDefaultStrategyHint": { + "message": "URI match detection is how Bitwarden identifies autofill suggestions.", + "description": "Explains to the user that URI match detection determines how Bitwarden suggests autofill options, and clarifies that this default strategy applies when no specific match detection is set for a login item." + }, + "regExAdvancedOptionWarning": { + "message": "\"Regular expression\" is an advanced option with increased risk of exposing credentials.", + "description": "Content for dialog which warns a user when selecting 'regular expression' matching strategy as a cipher match strategy" + }, + "startsWithAdvancedOptionWarning": { + "message": "\"Starts with\" is an advanced option with increased risk of exposing credentials.", + "description": "Content for dialog which warns a user when selecting 'starts with' matching strategy as a cipher match strategy" + }, + "uriMatchWarningDialogLink": { + "message": "More about match detection", + "description": "Link to match detection docs on warning dialog for advance match strategy" + }, + "uriAdvancedOption": { + "message": "Advanced options", + "description": "Advanced option placeholder for uri option component" + }, "confirmContinueToBrowserSettingsTitle": { "message": "Continue to browser settings?", "description": "Title for dialog which asks if the user wants to proceed to a relevant browser settings page" @@ -5036,6 +5109,9 @@ "unlockPinSet": { "message": "Unlock PIN set" }, + "unlockWithBiometricSet": { + "message": "Unlock with biometrics set" + }, "authenticating": { "message": "Authenticating" }, @@ -5377,5 +5453,9 @@ }, "noPermissionsViewPage": { "message": "You do not have permissions to view this page. Try logging in with a different account." + }, + "wasmNotSupported": { + "message": "WebAssembly is not supported on your browser or is not enabled. WebAssembly is required to use the Bitwarden app.", + "description": "'WebAssembly' is a technical term and should not be translated." } } diff --git a/apps/browser/src/_locales/pl/messages.json b/apps/browser/src/_locales/pl/messages.json index eb391f5e34b..b4b62d7968c 100644 --- a/apps/browser/src/_locales/pl/messages.json +++ b/apps/browser/src/_locales/pl/messages.json @@ -3,18 +3,18 @@ "message": "Bitwarden" }, "appLogoLabel": { - "message": "Bitwarden logo" + "message": "Logo Bitwarden" }, "extName": { - "message": "Menedżer Haseł Bitwarden", + "message": "Menedżer haseł Bitwarden", "description": "Extension name, MUST be less than 40 characters (Safari restriction)" }, "extDesc": { - "message": "W domu, w pracy, lub w ruchu, Bitwarden z łatwością zabezpiecza Twoje hasła, passkeys i poufne informacje", + "message": "W domu, w pracy lub w podróży Bitwarden zabezpiecza wszystkie hasła, klucze dostępu i poufne informacje.", "description": "Extension description, MUST be less than 112 characters (Safari restriction)" }, "loginOrCreateNewAccount": { - "message": "Zaloguj się lub utwórz nowe konto, aby uzyskać dostęp do Twojego bezpiecznego sejfu." + "message": "Zaloguj się lub utwórz nowe konto, aby uzyskać dostęp do bezpiecznego sejfu." }, "inviteAccepted": { "message": "Zaproszenie zostało zaakceptowane" @@ -23,13 +23,13 @@ "message": "Utwórz konto" }, "newToBitwarden": { - "message": "Nowy użytkownik Bitwarden?" + "message": "Nowy w Bitwarden?" }, "logInWithPasskey": { - "message": "Zaloguj się używając klucza dostępu" + "message": "Logowaniem kluczem dostępu" }, "useSingleSignOn": { - "message": "Użyj jednokrotnego logowania" + "message": "Użyj logowania jednokrotnego" }, "welcomeBack": { "message": "Witaj ponownie" @@ -38,7 +38,7 @@ "message": "Ustaw silne hasło" }, "finishCreatingYourAccountBySettingAPassword": { - "message": "Ukończ tworzenie konta poprzez ustawienie hasła" + "message": "Zakończ tworzenie konta poprzez ustawienie hasła" }, "enterpriseSingleSignOn": { "message": "Logowanie jednokrotne" @@ -65,7 +65,7 @@ "message": "Podpowiedź do hasła głównego może pomóc Ci przypomnieć hasło, jeśli je zapomnisz." }, "masterPassHintText": { - "message": "Jeśli zapomnisz hasła, podpowiedź hasła może zostać wysłana na Twój adres e-mail. $CURRENT$ z $MAXIMUM$ znaków.", + "message": "Podpowiedź do hasła zostanie wysłana na adres e-mail, jeśli je zapomnisz. Liczba znaków: $CURRENT$ / $MAXIMUM$.", "placeholders": { "current": { "content": "$1", @@ -84,7 +84,7 @@ "message": "Podpowiedź do hasła głównego (opcjonalnie)" }, "passwordStrengthScore": { - "message": "Siła hasła: $SCORE$", + "message": "Siła hasła wynosi $SCORE$", "placeholders": { "score": { "content": "$1", @@ -105,7 +105,7 @@ } }, "finishJoiningThisOrganizationBySettingAMasterPassword": { - "message": "Zakończ dołączanie do tej organizacji przez ustawienie hasła głównego." + "message": "Zakończ dołączanie do organizacji poprzez ustawienie hasła głównego." }, "tab": { "message": "Karta" @@ -132,7 +132,7 @@ "message": "Kopiuj hasło" }, "copyPassphrase": { - "message": "Skopiuj hasło wyrazowe" + "message": "Kopiuj hasło wyrazowe" }, "copyNote": { "message": "Kopiuj notatkę" @@ -159,19 +159,19 @@ "message": "Kopiuj numer PESEL" }, "copyPassportNumber": { - "message": "Skopiuj numer paszportu" + "message": "Kopiuj numer paszportu" }, "copyLicenseNumber": { - "message": "Kopiuj numer licencji" + "message": "Kopiuj numer prawa jazdy" }, "copyPrivateKey": { - "message": "Skopiuj klucz prywatny" + "message": "Kopiuj klucz prywatny" }, "copyPublicKey": { - "message": "Skopiuj klucz publiczny" + "message": "Kopiuj klucz publiczny" }, "copyFingerprint": { - "message": "Skopiuj odcisk palca" + "message": "Kopiuj odcisk klucza" }, "copyCustomField": { "message": "Kopiuj $FIELD$", @@ -193,26 +193,26 @@ "description": "Copy to clipboard" }, "fill": { - "message": "Wypełnij", + "message": "Uzupełnij", "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": { "message": "Autouzupełnianie" }, "autoFillLogin": { - "message": "Autouzupełnianie logowania" + "message": "Uzupełnij dane logowania" }, "autoFillCard": { - "message": "Autouzupełnianie karty" + "message": "Uzupełnij kartę" }, "autoFillIdentity": { - "message": "Autouzupełnianie tożsamości" + "message": "Uzupełnij tożsamość" }, "fillVerificationCode": { - "message": "Wypełnij kod weryfikacyjny" + "message": "Uzupełnij kod weryfikacyjny" }, "fillVerificationCodeAria": { - "message": "Wypełnij kod weryfikacyjny", + "message": "Uzupełnij kod weryfikacyjny", "description": "Aria label for the heading displayed the inline menu for totp code autofill" }, "generatePasswordCopied": { @@ -246,7 +246,7 @@ "message": "Zaloguj się do sejfu" }, "autoFillInfo": { - "message": "Brak danych logowania do użycia przez autouzupełnienie na obecnej karcie przeglądarki." + "message": "Brak dostępnych danych logowania dla obecnej karty przeglądarki." }, "addLogin": { "message": "Dodaj dane logowania" @@ -258,13 +258,13 @@ "message": "Adres e-mail konta" }, "requestHint": { - "message": "Poproś o podpowiedź" + "message": "Uzyskaj podpowiedź" }, "requestPasswordHint": { - "message": "Poproś o podpowiedź do hasła" + "message": "Uzyskaj podpowiedź do hasła" }, "enterYourAccountEmailAddressAndYourPasswordHintWillBeSentToYou": { - "message": "Wprowadź adres e-mail swojego konta, a podpowiedź hasła zostanie wysłana do Ciebie" + "message": "Wpisz adres e-mail konta. Podpowiedź do hasła zostanie wysłana na adres e-mail" }, "getMasterPasswordHint": { "message": "Uzyskaj podpowiedź do hasła głównego" @@ -291,32 +291,32 @@ "message": "Zmień hasło główne" }, "continueToWebApp": { - "message": "Kontynuować do aplikacji internetowej?" + "message": "Przejść do aplikacji internetowej?" }, "continueToWebAppDesc": { - "message": "Odkryj więcej funkcji swojego konta Bitwarden w aplikacji internetowej." + "message": "Odkryj więcej funkcji konta Bitwarden w aplikacji internetowej." }, "continueToHelpCenter": { - "message": "Kontynuować do centrum pomocy?" + "message": "Przejść do centrum pomocy?" }, "continueToHelpCenterDesc": { "message": "Dowiedz się więcej o tym, jak korzystać z centrum pomocy Bitwarden." }, "continueToBrowserExtensionStore": { - "message": "Kontynuować do sklepu z rozszerzeniami przeglądarki?" + "message": "Przejść do sklepu z rozszerzeniami przeglądarki?" }, "continueToBrowserExtensionStoreDesc": { - "message": "Pomóż innym dowiedzieć się, czy Bitwarden jest dla nich odpowiedni. Odwiedź swój sklep z rozszerzeniami do przeglądarki i zostaw ocenę." + "message": "Pomóż innym sprawdzić, czy Bitwarden jest dla nich odpowiedni. Odwiedź sklep z rozszerzeniami przeglądarki i zostaw ocenę." }, "changeMasterPasswordOnWebConfirmation": { - "message": "Możesz zmienić swoje hasło główne w aplikacji internetowej Bitwarden." + "message": "Możesz zmienić hasło główne w aplikacji internetowej Bitwarden." }, "fingerprintPhrase": { "message": "Unikalny identyfikator konta", "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." }, "yourAccountsFingerprint": { - "message": "Unikalny identyfikator Twojego konta", + "message": "Twój unikalny identyfikator konta", "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": { @@ -335,7 +335,7 @@ "message": "Więcej od Bitwarden" }, "continueToBitwardenDotCom": { - "message": "Kontynuować do bitwarden.com?" + "message": "Przejść do bitwarden.com?" }, "bitwardenForBusiness": { "message": "Bitwarden dla biznesu" @@ -344,7 +344,7 @@ "message": "Bitwarden Authenticator" }, "continueToAuthenticatorPageDesc": { - "message": "Bitwarden Authenticator pozwala na przechowywanie kluczy uwierzytelniających i generowanie kodów TOTP do dwuetapowego procesu weryfikacji. Dowiedz się więcej na stronie bitwarden.com" + "message": "Bitwarden Authenticator umożliwia przechowywanie kluczy uwierzytelniających i generowanie kodów TOTP dla weryfikacji dwustopniowej. Dowiedz się wiecej na bitwarden.com" }, "bitwardenSecretsManager": { "message": "Menedżer sekretów Bitwarden" @@ -362,7 +362,7 @@ "message": "Darmowy plan rodzinny" }, "freeBitwardenFamiliesPageDesc": { - "message": "Masz prawo do bezpłatengo planu rodzinnego Bitwarden. Zrealizuj tę ofertę już dziś w aplikacji internetowej." + "message": "Kwalifikujesz się do bezpłatnego planu rodzinnego. Skorzystaj z oferty już dziś w aplikacji internetowej." }, "version": { "message": "Wersja" @@ -398,16 +398,16 @@ "message": "Nazwa folderu" }, "folderHintText": { - "message": "Zagnieżdżaj foldery dodając nazwę folderu nadrzędnego, a następnie “/”. Przykład: Społeczne/Fora" + "message": "Utwórz podfolder, dodając nazwę folderu nadrzędnego przed znakiem „/”. Przykład: Social/Forums" }, "noFoldersAdded": { "message": "Nie dodano folderów" }, "createFoldersToOrganize": { - "message": "Twórz foldery, aby zorganizować elementy swojego sejfu" + "message": "Twórz foldery, aby zorganizować elementy sejfu" }, "deleteFolderPermanently": { - "message": "Czy na pewno chcesz trwale usunąć ten folder?" + "message": "Czy na pewno chcesz usunąć trwale folder?" }, "deleteFolder": { "message": "Usuń folder" @@ -425,7 +425,7 @@ "message": "Centrum pomocy Bitwarden" }, "communityForums": { - "message": "Przeglądaj fora społeczności Bitwarden" + "message": "Odwiedź forum społeczności Bitwarden" }, "contactSupport": { "message": "Skontaktuj się z pomocą techniczną Bitwarden" @@ -447,7 +447,7 @@ "description": "Short for 'credential generator'." }, "passGenInfo": { - "message": "Automatycznie wygeneruj silne, unikatowe hasła dla swoich loginów." + "message": "Automatycznie generuj silne i unikalne hasła." }, "bitWebVaultApp": { "message": "Aplikacja internetowa Bitwarden" @@ -474,7 +474,7 @@ "message": "Nazwa użytkownika została wygenerowana" }, "emailGenerated": { - "message": "E-mail został wygenerowany" + "message": "Adres e-mail został wygenerowany" }, "regeneratePassword": { "message": "Wygeneruj ponownie hasło" @@ -490,7 +490,7 @@ "description": "Card header for password generator include block" }, "uppercaseDescription": { - "message": "Uwzględnij wielkie litery", + "message": "Wielkie litery", "description": "Tooltip for the password generator uppercase character checkbox" }, "uppercaseLabel": { @@ -498,7 +498,7 @@ "description": "Label for the password generator uppercase character checkbox" }, "lowercaseDescription": { - "message": "Uwzględnij małe litery", + "message": "Małe litery", "description": "Full description for the password generator lowercase character checkbox" }, "lowercaseLabel": { @@ -506,7 +506,7 @@ "description": "Label for the password generator lowercase character checkbox" }, "numbersDescription": { - "message": "Uwzględnij cyfry", + "message": "Cyfry", "description": "Full description for the password generator numbers checkbox" }, "numbersLabel": { @@ -514,7 +514,7 @@ "description": "Label for the password generator numbers checkbox" }, "specialCharactersDescription": { - "message": "Uwzględnij znaki specjalne", + "message": "Znaki specjalne", "description": "Full description for the password generator special characters checkbox" }, "numWords": { @@ -531,10 +531,10 @@ "message": "Uwzględnij cyfry" }, "minNumbers": { - "message": "Minimalna liczba cyfr" + "message": "Min. liczba cyfr" }, "minSpecial": { - "message": "Minimalna liczba znaków specjalnych" + "message": "Min. liczba znaków specjalnych" }, "avoidAmbiguous": { "message": "Unikaj niejednoznacznych znaków", @@ -551,10 +551,10 @@ "message": "Edytuj" }, "view": { - "message": "Zobacz" + "message": "Pokaż" }, "noItemsInList": { - "message": "Brak elementów." + "message": "Brak elementów do wyświetlenia." }, "itemInformation": { "message": "Informacje o elemencie" @@ -566,22 +566,22 @@ "message": "Hasło" }, "totp": { - "message": "Sekret uwierzytelniania" + "message": "Klucz uwierzytelniający" }, "passphrase": { "message": "Hasło wyrazowe" }, "favorite": { - "message": "Ulubione" + "message": "Dodaj do ulubionych" }, "unfavorite": { "message": "Usuń z ulubionych" }, "itemAddedToFavorites": { - "message": "Element dodany do ulubionych" + "message": "Element został dodany do ulubionych" }, "itemRemovedFromFavorites": { - "message": "Element usunięty z ulubionych" + "message": "Element został usunięty z ulubionych" }, "notes": { "message": "Notatki" @@ -602,16 +602,16 @@ "message": "Usuń element" }, "viewItem": { - "message": "Zobacz element" + "message": "Pokaż element" }, "launch": { "message": "Uruchom" }, "launchWebsite": { - "message": "Otwórz stronę" + "message": "Uruchom stronę internetową" }, "launchWebsiteName": { - "message": "Otwórz stronę internetową $ITEMNAME$", + "message": "Uruchom stronę internetową $ITEMNAME$", "placeholders": { "itemname": { "content": "$1", @@ -620,10 +620,10 @@ } }, "website": { - "message": "Strona" + "message": "Strona internetowa" }, "toggleVisibility": { - "message": "Pokaż / Ukryj" + "message": "Pokaż / ukryj" }, "manage": { "message": "Zarządzaj" @@ -635,13 +635,13 @@ "message": "Opcje odblokowania" }, "unlockMethodNeededToChangeTimeoutActionDesc": { - "message": "Ustaw metodę odblokowania, aby zmienić czas blokowania sejfu." + "message": "Ustaw metodę odblokowania, aby zmienić sposób blokowania sejfu." }, "unlockMethodNeeded": { - "message": "Ustaw metodę odblokowania w Ustawieniach" + "message": "Ustaw metodę odblokowania w ustawieniach" }, "sessionTimeoutHeader": { - "message": "Limit czasu sesji" + "message": "Blokada aplikacji" }, "vaultTimeoutHeader": { "message": "Blokowanie sejfu" @@ -656,7 +656,7 @@ "message": "Przeglądarka nie obsługuje łatwego kopiowania schowka. Skopiuj element ręcznie." }, "verifyYourIdentity": { - "message": "Potwierdź swoją tożsamość" + "message": "Zweryfikuj tożsamość" }, "weDontRecognizeThisDevice": { "message": "Nie rozpoznajemy tego urządzenia. Wpisz kod wysłany na Twój e-mail, aby zweryfikować tożsamość." @@ -668,10 +668,10 @@ "message": "Sejf jest zablokowany. Zweryfikuj swoją tożsamość, aby kontynuować." }, "yourVaultIsLockedV2": { - "message": "Twój sejf jest zablokowany" + "message": "Sejf jest zablokowany" }, "yourAccountIsLocked": { - "message": "Twoje konto jest zablokowane" + "message": "Konto jest zablokowane" }, "or": { "message": "lub" @@ -699,13 +699,13 @@ "message": "Blokowanie sejfu" }, "vaultTimeout1": { - "message": "Limit czasu" + "message": "Blokada aplikacji" }, "lockNow": { "message": "Zablokuj" }, "lockAll": { - "message": "Zablokuj wszystkie" + "message": "Zablokuj wszystko" }, "immediately": { "message": "Natychmiast" @@ -759,7 +759,7 @@ "message": "Hasło główne" }, "masterPassImportant": { - "message": "Twoje hasło główne nie może zostać odzyskane, jeśli je zapomnisz!" + "message": "Zapomniane hasło główne nie może zostać odzyskane!" }, "masterPassHintLabel": { "message": "Podpowiedź do hasła głównego" @@ -780,7 +780,7 @@ "message": "Wymagane jest ponowne wpisanie hasła głównego." }, "masterPasswordMinlength": { - "message": "Hasło główne musi zawierać co najmniej $VALUE$ znaki(-ów).", + "message": "Hasło główne musi składać się z co najmniej $VALUE$ znaków.", "description": "The Master Password must be at least a specific number of characters long.", "placeholders": { "value": { @@ -796,10 +796,10 @@ "message": "Konto zostało utworzone! Teraz możesz się zalogować." }, "newAccountCreated2": { - "message": "Twoje nowe konto zostało utworzone!" + "message": "Nowe konto zostało utworzone!" }, "youHaveBeenLoggedIn": { - "message": "Zalogowano Cię!" + "message": "Zalogowano!" }, "youSuccessfullyLoggedIn": { "message": "Zalogowałeś się pomyślnie" @@ -808,7 +808,7 @@ "message": "Możesz zamknąć to okno" }, "masterPassSent": { - "message": "Wysłaliśmy Tobie wiadomość e-mail z podpowiedzią do hasła głównego." + "message": "Wysłaliśmy wiadomość z podpowiedzią do hasła głównego." }, "verificationCodeRequired": { "message": "Kod weryfikacyjny jest wymagany." @@ -833,25 +833,25 @@ "message": "Nie można zastosować autouzupełnienia na tej stronie. Skopiuj i wklej informacje ręcznie." }, "totpCaptureError": { - "message": "Nie można zeskanować kodu QR z bieżącej strony" + "message": "Nie można zeskanować kodu QR z obecnej strony" }, "totpCaptureSuccess": { "message": "Klucz uwierzytelniający został dodany" }, "totpCapture": { - "message": "Zeskanuj kod QR z bieżącej strony" + "message": "Zeskanuj kod QR z obecnej strony" }, "totpHelperTitle": { - "message": "Spraw, aby dwuetapowa weryfikacja była bezproblemowa" + "message": "Bezproblemowa weryfikacja dwustopniowa" }, "totpHelper": { - "message": "Bitwarden może przechowywać i wypełniać kody weryfikacyjne. Skopiuj i wklej klucz do tego pola." + "message": "Bitwarden może przechowywać i uzupełniać kody weryfikacyjne. Skopiuj i wklej klucz do tego pola." }, "totpHelperWithCapture": { - "message": "Bitwarden może przechowywać i wypełniać kody weryfikacyjne. Wybierz ikonę aparatu, aby zrobić zrzut ekranu z kodem QR lub skopiuj i wklej klucz do tego pola." + "message": "Bitwarden może przechowywać i uzupełniać kody weryfikacyjne. Wybierz ikonę aparatu, aby zrobić zrzut ekranu z kodem QR lub skopiuj i wklej klucz do tego pola." }, "learnMoreAboutAuthenticators": { - "message": "Dowiedz się więcej o uwierzytelniaczach" + "message": "Dowiedz się więcej o uwierzytelnianiu" }, "copyTOTP": { "message": "Kopiuj klucz uwierzytelniający (TOTP)" @@ -872,25 +872,25 @@ "message": "Zaloguj się do Bitwarden" }, "enterTheCodeSentToYourEmail": { - "message": "Wpisz kod wysłany na Twój adres e-mail" + "message": "Wpisz kod został wysłany na adres e-mail" }, "enterTheCodeFromYourAuthenticatorApp": { "message": "Wpisz kod z aplikacji uwierzytelniającej" }, "pressYourYubiKeyToAuthenticate": { - "message": "Naciśnij YubiKey aby uwierzytelnić" + "message": "Naciśnij klucz YubiKey, aby uwierzytelnić" }, "duoTwoFactorRequiredPageSubtitle": { - "message": "Logowanie dwustopniowe Duo jest wymagane dla twojego konta. Wykonaj poniższe kroki, by dokończyć logowanie" + "message": "Logowanie dwustopniowe Duo jest wymagane. Wykonaj poniższe kroki, aby zakończyć logowanie." }, "followTheStepsBelowToFinishLoggingIn": { - "message": "Wykonaj poniższe kroki, by dokończyć logowanie" + "message": "Wykonaj poniższe kroki, by zakończyć logowanie." }, "followTheStepsBelowToFinishLoggingInWithSecurityKey": { "message": "Wykonaj poniższe kroki, aby zakończyć logowanie za pomocą klucza bezpieczeństwa." }, "restartRegistration": { - "message": "Zrestartuj rejestrację" + "message": "Zacznij rejestrację od początku" }, "expiredLink": { "message": "Link wygasł" @@ -923,19 +923,19 @@ "message": "Folder został dodany" }, "twoStepLoginConfirmation": { - "message": "Logowanie dwustopniowe sprawia, że konto jest bardziej bezpieczne poprzez wymuszenie potwierdzenia logowania z innego urządzenia, takiego jak z klucza bezpieczeństwa, aplikacji uwierzytelniającej, wiadomości SMS, telefonu lub adresu e-mail. Logowanie dwustopniowe możesz włączyć w sejfie internetowym bitwarden.com. Czy chcesz przejść do tej strony?" + "message": "Logowanie dwustopniowe zwiększa bezpieczeństwo konta, wymagając weryfikacji logowania za pomocą innego urządzenia, takiego jak klucz bezpieczeństwa, aplikacja uwierzytelniająca, wiadomość SMS, połączenie telefoniczne lub wiadomość e-mail. Logowanie dwustopniowe możesz skonfigurować w sejfie internetowym bitwarden.com. Czy chcesz przejść do strony?" }, "twoStepLoginConfirmationContent": { "message": "Spraw, aby Twoje konto było bezpieczniejsze poprzez skonfigurowanie dwustopniowego logowania w aplikacji internetowej Bitwarden." }, "twoStepLoginConfirmationTitle": { - "message": "Kontynuować do aplikacji internetowej?" + "message": "Przejść do aplikacji internetowej?" }, "editedFolder": { "message": "Folder został zapisany" }, "deleteFolderConfirmation": { - "message": "Czy na pewno chcesz usunąć ten folder?" + "message": "Czy na pewno chcesz usunąć folder?" }, "deletedFolder": { "message": "Folder został usunięty" @@ -944,7 +944,7 @@ "message": "Samouczek" }, "gettingStartedTutorialVideo": { - "message": "Obejrzyj samouczek, aby dowiedzieć się, jak najlepiej wykorzystać rozszerzenie przeglądarki." + "message": "Zobacz samouczek, aby dowiedzieć się, jak najlepiej wykorzystać rozszerzenie przeglądarki." }, "syncingComplete": { "message": "Synchronizacja została zakończona" @@ -982,7 +982,7 @@ "message": "Element został zapisany" }, "deleteItemConfirmation": { - "message": "Czy na pewno chcesz to usunąć?" + "message": "Czy na pewno chcesz usunąć?" }, "deletedItem": { "message": "Element został przeniesiony do kosza" @@ -1013,19 +1013,19 @@ "description": "This is the folder for uncategorized items" }, "enableAddLoginNotification": { - "message": "Poproś o dodanie danych logowania" + "message": "Proponuj zapisywanie danych logowania" }, "vaultSaveOptionsTitle": { "message": "Opcje zapisywania w sejfie" }, "addLoginNotificationDesc": { - "message": "\"Dodaj powiadomienia logowania\" automatycznie wyświetla monit o zapisanie nowych danych logowania do sejfu przy każdym pierwszym logowaniu." + "message": "Proponuj dodanie elementu, jeśli nie ma go w sejfie." }, "addLoginNotificationDescAlt": { - "message": "Poproś o dodanie elementu, jeśli nie zostanie znaleziony w Twoim sejfie. Dotyczy wszystkich zalogowanych kont." + "message": "Proponuj dodanie elementu, jeśli nie ma go w sejfie. Dotyczy wszystkich zalogowanych kont." }, "showCardsInVaultViewV2": { - "message": "Zawsze pokazuj karty jako sugestie autouzupełniania w widoku sejfu" + "message": "Pokazuj zawsze karty w sugestiach autouzupełniania" }, "showCardsCurrentTab": { "message": "Pokaż karty na stronie głównej" @@ -1034,7 +1034,7 @@ "message": "Pokaż elementy karty na stronie głównej, aby ułatwić autouzupełnianie." }, "showIdentitiesInVaultViewV2": { - "message": "Zawsze pokazuj tożsamości jako sugestie autouzupełniania w widoku sejfu" + "message": "Pokazuj zawsze tożsamości w sugestiach autouzupełniania" }, "showIdentitiesCurrentTab": { "message": "Pokaż tożsamości na stronie głównej" @@ -1043,10 +1043,10 @@ "message": "Pokaż elementy tożsamości na stronie głównej, aby ułatwić autouzupełnianie." }, "clickToAutofillOnVault": { - "message": "Kliknij na dane logowania, aby autouzupełnić w widoku Sejfu" + "message": "Kliknij na elementy, aby je uzupełnić" }, "clickToAutofill": { - "message": "Kliknij elementy w sugestii autouzupełniania, aby wypełnić" + "message": "Kliknij na elementy w sugestiach, aby je uzupełnić" }, "clearClipboard": { "message": "Wyczyść schowek", @@ -1057,7 +1057,7 @@ "description": "Clipboard is the operating system thing where you copy/paste data to on your device." }, "notificationAddDesc": { - "message": "Czy Bitwarden powinien zapisać to hasło?" + "message": "Zapisać hasło?" }, "notificationAddSave": { "message": "Zapisz" @@ -1113,7 +1113,7 @@ } }, "saveAsNewLoginAction": { - "message": "Zapisz jako nowy login", + "message": "Zapisz jako nowy dane logowania", "description": "Button text for saving login details as a new entry." }, "updateLoginAction": { @@ -1121,7 +1121,7 @@ "description": "Button text for updating an existing login entry." }, "unlockToSave": { - "message": "Odblokuj, aby zapisać ten login", + "message": "Odblokuj, aby zapisać dane logowania", "description": "User prompt to take action in order to save the login they just entered." }, "saveLogin": { @@ -1129,11 +1129,11 @@ "description": "Prompt asking the user if they want to save their login details." }, "updateLogin": { - "message": "Zaktualizować istniejące dane logowania?", + "message": "Zaktualizuj obecne dane logowania", "description": "Prompt asking the user if they want to update an existing login entry." }, "loginSaveSuccess": { - "message": "Dane logowania zapisane", + "message": "Dane logowania zostały zapisane", "description": "Message displayed when login details are successfully saved." }, "loginUpdateSuccess": { @@ -1141,7 +1141,7 @@ "description": "Message displayed when login details are successfully updated." }, "loginUpdateTaskSuccess": { - "message": "Świetna robota! Podjęto kroki mające na celu zwiększenie bezpieczeństwa Twojego oraz $ORGANIZATION$.", + "message": "Dobra robota! Twoje konto i organizacja $ORGANIZATION$ jest bezpieczniejsza.", "placeholders": { "organization": { "content": "$1" @@ -1166,30 +1166,36 @@ "description": "Message prompting user to undertake completion of another security task." }, "saveFailure": { - "message": "Błąd podczas zapisywania", + "message": "Wystąpił 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.", + "message": "O nie! Nie mogliśmy tego zapisać. Wpisz szczegóły ręcznie.", "description": "Detailed error message shown when saving login details fails." }, + "changePasswordWarning": { + "message": "Po zmianie hasła musisz się zalogować przy użyciu nowego hasła. Aktywne sesje na innych urządzeniach zostaną wylogowane w ciągu jednej godziny." + }, + "accountRecoveryUpdateMasterPasswordSubtitle": { + "message": "Zmień hasło główne, aby zakończyć odzyskiwanie konta." + }, "enableChangedPasswordNotification": { - "message": "Poproś o aktualizację istniejących danych logowania" + "message": "Proponuj aktualizuję obecnych danych logowania" }, "changedPasswordNotificationDesc": { - "message": "Poproś o aktualizację hasła danych logowania po wykryciu zmiany w witrynie." + "message": "Proponuj aktualizację hasła po wykryciu zmiany na stronie internetowej." }, "changedPasswordNotificationDescAlt": { - "message": "Poproś o aktualizację hasła, gdy zmiana zostanie wykryta na stronie. Dotyczy wszystkich zalogowanych kont." + "message": "Proponuj aktualizację hasła po wykryciu zmiany na stronie internetowej. Dotyczy wszystkich zalogowanych kont." }, "enableUsePasskeys": { - "message": "Pytaj o zapisywanie i używanie kluczy dostępu" + "message": "Proponuj zapisywanie i używanie kluczy dostępu" }, "usePasskeysDesc": { - "message": "Pytaj o zapisywanie nowych kluczy dostępu albo danych logowania z kluczy w Twoim sejfie. Dotyczy wszystkich zalogowanych kont." + "message": "Pytaj o zapisywanie nowych kluczy dostępu i używanie obecnych. Dotyczy wszystkich zalogowanych kont." }, "notificationChangeDesc": { - "message": "Czy chcesz zaktualizować to hasło w Bitwarden?" + "message": "Czy chcesz zaktualizować hasło w Bitwarden?" }, "notificationChangeSave": { "message": "Zaktualizuj" @@ -1204,7 +1210,7 @@ "message": "Dodatkowe opcje" }, "enableContextMenuItem": { - "message": "Pokaż opcje menu kontekstowego" + "message": "Pokaż opcje w menu kontekstowym" }, "contextMenuItemDesc": { "message": "Użyj drugiego kliknięcia, aby uzyskać dostęp do generowania haseł i pasujących danych logowania do witryny." @@ -1226,7 +1232,7 @@ "message": "Zmień motyw kolorystyczny aplikacji." }, "themeDescAlt": { - "message": "Zmień kolor motywu aplikacji. Dotyczy wszystkich zalogowanych kont." + "message": "Zmień motyw kolorystyczny aplikacji. Dotyczy wszystkich zalogowanych kont." }, "dark": { "message": "Ciemny", @@ -1249,16 +1255,16 @@ "message": "Plik będzie chroniony hasłem, które będzie wymagane do odszyfrowania pliku." }, "filePassword": { - "message": "Hasło do pliku" + "message": "Hasło pliku" }, "exportPasswordDescription": { "message": "Hasło będzie używane do eksportowania i importowania pliku" }, "accountRestrictedOptionDescription": { - "message": "Użyj klucza szyfrowania konta, pochodzącego z nazwy użytkownika konta i hasła głównego, aby zaszyfrować eksport i ograniczyć import tylko do bieżącego konta Bitwarden." + "message": "Użyj klucza szyfrowania konta, pochodzącego z nazwy użytkownika konta i hasła głównego, aby zaszyfrować eksport i ograniczyć import tylko do obecnego konta Bitwarden." }, "passwordProtectedOptionDescription": { - "message": "Ustaw hasło dla pliku, aby zaszyfrować eksport i zaimportować je na dowolne konto Bitwarden przy użyciu hasła do odszyfrowania." + "message": "Ustaw hasło pliku, aby zaszyfrować eksport i zaimportować je na dowolne konto Bitwarden przy użyciu hasła do odszyfrowania." }, "exportTypeHeading": { "message": "Rodzaj eksportu" @@ -1267,10 +1273,10 @@ "message": "Konto ograniczone" }, "filePasswordAndConfirmFilePasswordDoNotMatch": { - "message": "“Hasło pliku” i “Potwierdź hasło pliku“ nie pasują do siebie." + "message": "Hasła pliku nie pasują do siebie." }, "warning": { - "message": "UWAGA", + "message": "OSTRZEŻENIE", "description": "WARNING (should stay in capitalized letters if the language permits)" }, "warningCapitalized": { @@ -1296,13 +1302,13 @@ "message": "Udostępnione" }, "bitwardenForBusinessPageDesc": { - "message": "Bitwarden dla biznesu pozwala na udostępnianie zawartości sejfu innym osobom za pośrednictwem organizacji. Dowiedz się wiecej na bitwarden.com." + "message": "Bitwarden dla biznesu pozwala na udostępnianie zawartości sejfu innym użytkownikom za pośrednictwem organizacji. Dowiedz się więcej na stronie bitwarden.com." }, "moveToOrganization": { "message": "Przenieś do organizacji" }, "movedItemToOrg": { - "message": "Element $ITEMNAME$ został przeniesiony do organizacji $ORGNAME$", + "message": "Przeniesiono $ITEMNAME$ do $ORGNAME$", "placeholders": { "itemname": { "content": "$1", @@ -1315,7 +1321,7 @@ } }, "moveToOrgDesc": { - "message": "Wybierz organizację, do której chcesz przenieść ten element. Ta czynność spowoduje utratę własności elementu i przenosi te uprawnienia do organizacji." + "message": "Wybierz organizację, do której chcesz przenieść element. Przeniesienie spowoduje zmianę własności elementu na organizację." }, "learnMore": { "message": "Dowiedz się więcej" @@ -1336,7 +1342,7 @@ "message": "Usuń załącznik" }, "deleteAttachmentConfirmation": { - "message": "Czy na pewno chcesz usunąć ten załącznik?" + "message": "Czy na pewno chcesz usunąć załącznik?" }, "deletedAttachment": { "message": "Załącznik został usunięty" @@ -1354,7 +1360,7 @@ "message": "Plik" }, "fileToShare": { - "message": "Plik do udostępnienia" + "message": "Plik wysyłki" }, "selectFile": { "message": "Wybierz plik" @@ -1365,26 +1371,26 @@ "featureUnavailable": { "message": "Funkcja jest niedostępna" }, - "encryptionKeyMigrationRequired": { - "message": "Wymagana jest migracja klucza szyfrowania. Zaloguj się przez sejf internetowy, aby zaktualizować klucz szyfrowania." + "legacyEncryptionUnsupported": { + "message": "Starsze szyfrowanie nie jest już obsługiwane. Skontaktuj się z pomocą techniczną, aby odzyskać swoje konto." }, "premiumMembership": { - "message": "Konto Premium" + "message": "Konto premium" }, "premiumManage": { - "message": "Zarządzaj kontem Premium" + "message": "Zarządzaj kontem premium" }, "premiumManageAlert": { - "message": "Kontem Premium możesz zarządzać na stronie sejfu bitwarden.com. Czy chcesz otworzyć tę stronę?" + "message": "Zarządzaj kontem premium na stronie internetowej bitwarden.com. Czy chcesz otworzyć stronę?" }, "premiumRefresh": { - "message": "Odśwież konto Premium" + "message": "Odśwież konto premium" }, "premiumNotCurrentMember": { - "message": "Nie posiadasz obecnie konta Premium." + "message": "Nie masz konta premium." }, "premiumSignUpAndGet": { - "message": "Zarejestruj konto Premium, aby otrzymać:" + "message": "Ulepsz konto do wersji premium, aby otrzymać:" }, "ppremiumSignUpStorage": { "message": "1 GB miejsca na zaszyfrowane załączniki." @@ -1393,13 +1399,13 @@ "message": "Dostęp awaryjny." }, "premiumSignUpTwoStepOptions": { - "message": "Własnościowe opcje logowania dwuetapowego, takie jak YubiKey i Duo." + "message": "Specjalne opcje logowania dwustopniowego, takie jak YubiKey i Duo." }, "ppremiumSignUpReports": { "message": "Raporty bezpieczeństwa haseł, stanu konta i raporty wycieków danych, aby Twoje dane były bezpieczne." }, "ppremiumSignUpTotp": { - "message": "Generator kodów weryfikacyjnych TOTP (2FA) dla danych logowania w Twoim sejfie." + "message": "Generator kodów weryfikacyjnych TOTP dla danych logowania w sejfie." }, "ppremiumSignUpSupport": { "message": "Priorytetowe wsparcie klienta." @@ -1408,22 +1414,22 @@ "message": "Wszystkie przyszłe funkcje premium. Więcej już wkrótce!" }, "premiumPurchase": { - "message": "Kup konto Premium" + "message": "Kup konto premium" }, "premiumPurchaseAlertV2": { - "message": "Możesz kupić Premium w ustawieniach konta w aplikacji internetowej Bitwarden." + "message": "Możesz kupić konto premium w aplikacji internetowej Bitwarden." }, "premiumCurrentMember": { - "message": "Posiadasz konto Premium!" + "message": "Masz konto premium!" }, "premiumCurrentMemberThanks": { "message": "Dziękujemy za wspieranie Bitwarden." }, "premiumFeatures": { - "message": "Uaktualnij do wersji Premium i otrzymaj:" + "message": "Ulepsz konto do wersji premium i otrzymaj:" }, "premiumPrice": { - "message": "Wszystko to jedynie za $PRICE$ /rok!", + "message": "Tylko $PRICE$ / rok!", "placeholders": { "price": { "content": "$1", @@ -1432,7 +1438,7 @@ } }, "premiumPriceV2": { - "message": "Wszystko tylko za $PRICE$ rocznie!", + "message": "Tylko $PRICE$ rocznie!", "placeholders": { "price": { "content": "$1", @@ -1447,16 +1453,16 @@ "message": "Kopiuj kod TOTP automatycznie" }, "disableAutoTotpCopyDesc": { - "message": "Jeśli dane logowania posiadają dołączony klucz uwierzytelniający TOTP, kod weryfikacyjny jest automatycznie kopiowany do schowka przy każdym autouzupełnianiu danych logowania." + "message": "Automatycznie kopiuje kod TOTP do schowka podczas autouzupełniania." }, "enableAutoBiometricsPrompt": { "message": "Poproś o dane biometryczne przy uruchomieniu" }, "premiumRequired": { - "message": "Konto Premium jest wymagane" + "message": "Konto premium jest wymagane" }, "premiumRequiredDesc": { - "message": "Konto Premium jest wymagane, aby skorzystać z tej funkcji." + "message": "Konto premium jest wymagane, aby skorzystać z tej funkcji." }, "authenticationTimeout": { "message": "Limit czasu uwierzytelniania" @@ -1465,7 +1471,7 @@ "message": "Upłynął limit czasu uwierzytelniania. Uruchom ponownie proces logowania." }, "verificationCodeEmailSent": { - "message": "Kod weryfikacyjny został wysłany na adres $EMAIL$.", + "message": "Wiadomość weryfikacyjna została wysłana na adres $EMAIL$.", "placeholders": { "email": { "content": "$1", @@ -1523,21 +1529,21 @@ "message": "Aplikacja uwierzytelniająca" }, "authenticatorAppDescV2": { - "message": "Wprowadź kod wygenerowany przez aplikację uwierzytelniającą, jak Bitwarden Authenticator.", + "message": "Wpisz kod wygenerowany przez aplikację uwierzytelniającą, taką jak Bitwarden Authenticator.", "description": "'Bitwarden Authenticator' is a product name and should not be translated." }, "yubiKeyTitleV2": { "message": "Klucz bezpieczeństwa Yubico OTP" }, "yubiKeyDesc": { - "message": "Użyj YubiKey jako metody dostępu do konta. Działa z YubiKey 4, 4 Nano, 4C i urządzeniami NEO." + "message": "Użyj klucza YubiKey, aby uzyskać dostęp do konta. Działa z urządzeniami YubiKey 4, 4 Nano, 4C i NEO." }, "duoDescV2": { - "message": "Wprowadź kod wygenerowany przez Duo Security.", + "message": "Wpisz kod wygenerowany przez Duo Security.", "description": "'Duo Security' and 'Duo Mobile' are product names and should not be translated." }, "duoOrganizationDesc": { - "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.", + "message": "Weryfikacja Duo Security za pomocą aplikacji Duo Mobile, wiadomości SMS, połączenia telefonicznego lub klucza bezpieczeństwa U2F.", "description": "'Duo Security' and 'Duo Mobile' are product names and should not be translated." }, "webAuthnTitle": { @@ -1556,7 +1562,7 @@ "message": "Samodzielnie hostowane środowisko" }, "selfHostedBaseUrlHint": { - "message": "Określ bazowy adres URL swojej instalacji Bitwarden. Przykład: https://bitwarden.company.com" + "message": "Określ podstawowy adres URL instalacji Bitwarden. Przykład: https://bitwarden.mojafirma.pl" }, "selfHostedCustomEnvHeader": { "message": "Dla zaawansowanych konfiguracji możesz określić podstawowy adres URL niezależnie dla każdej usługi." @@ -1571,7 +1577,7 @@ "message": "Adres URL serwera" }, "selfHostBaseUrl": { - "message": "URL samodzielnie hostowanego serwera", + "message": "Adres URL hostowanego serwera", "description": "Label for field requesting a self-hosted integration service URL" }, "apiUrl": { @@ -1593,7 +1599,7 @@ "message": "Adresy URL środowiska zostały zapisane" }, "showAutoFillMenuOnFormFields": { - "message": "Pokaż menu autouzupełniania na polach formularza", + "message": "Pokaż menu autouzupełniania w polach formularza", "description": "Represents the message for allowing the user to enable the autofill overlay" }, "autofillSuggestionsSectionTitle": { @@ -1615,19 +1621,19 @@ } }, "turnOffAutofill": { - "message": "Wyłącz autouzupełnienie" + "message": "Wyłącz autouzupełnianie" }, "showInlineMenuLabel": { "message": "Pokaż sugestie autouzupełniania na polach formularza" }, "showInlineMenuIdentitiesLabel": { - "message": "Pokazuj tożsamości jako sugestie" + "message": "Pokaż tożsamości w sugestiach" }, "showInlineMenuCardsLabel": { - "message": "Pokazuj karty jako sugestie" + "message": "Pokaż karty w sugestiach" }, "showInlineMenuOnIconSelectionLabel": { - "message": "Wyświetlaj sugestie, kiedy ikona jest zaznaczona" + "message": "Pokaż sugestie po kliknięciu ikony" }, "showInlineMenuOnFormFieldsDescAlt": { "message": "Dotyczy wszystkich zalogowanych kont." @@ -1651,16 +1657,16 @@ "description": "Overlay appearance select option for showing the field on click of the overlay icon" }, "enableAutoFillOnPageLoadSectionTitle": { - "message": "Włącz autouzupełnianie po załadowaniu strony" + "message": "Autouzupełnianie po załadowaniu strony" }, "enableAutoFillOnPageLoad": { - "message": "Włącz autouzupełnianie po załadowaniu strony" + "message": "Uzupełniaj po załadowaniu strony" }, "enableAutoFillOnPageLoadDesc": { - "message": "Jeśli zostanie wykryty formularz logowania, automatycznie uzupełnij dane logowania po załadowaniu strony." + "message": "Dane logowania zostaną uzupełnione po wykryciu formularza logowania na stronie." }, "experimentalFeature": { - "message": "Zaatakowane lub niezaufane witryny internetowe mogą wykorzystać funkcję autouzupełniania podczas wczytywania strony, aby wyrządzić szkody." + "message": "Zaatakowane strony internetowe mogą wykorzystywać autouzupełnianie do przejęcia danych logowania." }, "learnMoreAboutAutofillOnPageLoadLinkText": { "message": "Dowiedz się więcej o ryzyku" @@ -1681,10 +1687,10 @@ "message": "Użyj domyślnego ustawienia" }, "autoFillOnPageLoadYes": { - "message": "Automatycznie uzupełniaj po załadowaniu strony" + "message": "Uzupełniaj po załadowaniu strony" }, "autoFillOnPageLoadNo": { - "message": "Nie uzupełniaj automatycznie po załadowaniu strony" + "message": "Nie uzupełniaj po załadowaniu strony" }, "commandOpenPopup": { "message": "Otwórz sejf w oknie" @@ -1696,13 +1702,13 @@ "message": "Autouzupełnianie korzysta z ostatnio używanych danych logowania na tej stronie" }, "commandAutofillCardDesc": { - "message": "Autouzupełnianie korzysta z ostatnio używanych danych karty na tej stronie" + "message": "Autouzupełnianie korzysta z ostatnio używanej karty na tej stronie" }, "commandAutofillIdentityDesc": { "message": "Autouzupełnianie korzysta z ostatnio używanej tożsamości na tej stronie" }, "commandGeneratePasswordDesc": { - "message": "Wygeneruj nowe losowe hasło i skopiuj je do schowka." + "message": "Wygeneruj nowe hasło i skopiuj je do schowka" }, "commandLockVaultDesc": { "message": "Zablokuj sejf" @@ -1729,7 +1735,7 @@ "message": "Tekst" }, "cfTypeHidden": { - "message": "Pole maskowane" + "message": "Ukryty tekst" }, "cfTypeBoolean": { "message": "Wartość logiczna" @@ -1749,16 +1755,16 @@ "message": "Kliknięcie poza okno, w celu sprawdzenia wiadomość z kodem weryfikacyjnym spowoduje, że zostanie ono zamknięte. Czy chcesz otworzyć nowe okno tak, aby się nie zamknęło?" }, "popupU2fCloseMessage": { - "message": "Ta przeglądarka nie może przetworzyć żądania U2F w tym oknie. Czy chcesz otworzyć nowe okno przeglądarki, aby zalogować się przy pomocy klucza U2F?" + "message": "Ta przeglądarka nie może przetworzyć żądania U2F w wyskakującym oknie. Czy chcesz otworzyć nowe okno przeglądarki, aby zalogować się przy pomocy klucza U2F?" }, "enableFavicon": { - "message": "Pokaż ikony witryn" + "message": "Pokaż ikony stron internetowych" }, "faviconDesc": { "message": "Pokaż rozpoznawalny obraz obok danych logowania." }, "faviconDescAlt": { - "message": "Pokaż rozpoznawalny obraz obok każdego logowania. Dotyczy wszystkich zalogowanych kont." + "message": "Pokaż rozpoznawalny obraz obok danych logowania. Dotyczy wszystkich zalogowanych kont." }, "enableBadgeCounter": { "message": "Pokaż licznik na ikonie" @@ -1833,7 +1839,7 @@ "message": "Pan" }, "mrs": { - "message": "Mrs" + "message": "Pani (Mrs)" }, "ms": { "message": "Pani" @@ -1857,7 +1863,7 @@ "message": "Imię i nazwisko" }, "identityName": { - "message": "Nazwa profilu" + "message": "Nowa tożsamość" }, "company": { "message": "Firma" @@ -1875,7 +1881,7 @@ "message": "Adres e-mail" }, "phone": { - "message": "Telefon" + "message": "Numer telefonu" }, "address": { "message": "Adres" @@ -1911,7 +1917,7 @@ "message": "Dane logowania" }, "typeSecureNote": { - "message": "Bezpieczna notatka" + "message": "Notatka" }, "typeCard": { "message": "Karta" @@ -1922,8 +1928,11 @@ "typeSshKey": { "message": "Klucz SSH" }, + "typeNote": { + "message": "Notatka" + }, "newItemHeader": { - "message": "Nowy $TYPE$", + "message": "$TYPE$", "placeholders": { "type": { "content": "$1", @@ -1932,7 +1941,7 @@ } }, "editItemHeader": { - "message": "Edytuj $TYPE$", + "message": "$TYPE$", "placeholders": { "type": { "content": "$1", @@ -1941,7 +1950,7 @@ } }, "viewItemHeader": { - "message": "Zobacz $TYPE$", + "message": "Pokaż $TYPE$", "placeholders": { "type": { "content": "$1", @@ -1962,7 +1971,7 @@ "message": "Jeśli zatwierdzisz, wszystkie wygenerowane hasła zostaną usunięte z historii generatora. Czy chcesz kontynuować mimo to?" }, "back": { - "message": "Powrót" + "message": "Wstecz" }, "collections": { "message": "Kolekcje" @@ -1980,7 +1989,7 @@ "message": "Ulubione" }, "popOutNewWindow": { - "message": "Wyświetl w nowym oknie" + "message": "Otwórz w nowym oknie" }, "refresh": { "message": "Odśwież" @@ -1995,7 +2004,7 @@ "message": "Dane logowania" }, "secureNotes": { - "message": "Bezpieczne notatki" + "message": "Notatki" }, "sshKeys": { "message": "Klucze SSH" @@ -2008,7 +2017,7 @@ "message": "Sprawdź, czy hasło zostało ujawnione." }, "passwordExposed": { - "message": "To hasło znajduje się w $VALUE$ wykradzionej(ych) bazie(ach) danych. Należy je zmienić.", + "message": "Hasło zostało ujawnione $VALUE$ raz(y) w wyciekach danych. Zmień je.", "placeholders": { "value": { "content": "$1", @@ -2017,14 +2026,14 @@ } }, "passwordSafe": { - "message": "To hasło nie znajduje się w żadnej znanej wykradzionej bazie danych. Powinno być bezpieczne." + "message": "Hasło nie znajduje się w żadnym znanym wycieku danych. Powinno być bezpieczne." }, "baseDomain": { "message": "Domena podstawowa", "description": "Domain name. Ex. website.com" }, "baseDomainOptionRecommended": { - "message": "Domena podstawowa (rekomendowana)", + "message": "Domena podstawowa (domyślne)", "description": "Domain name. Ex. website.com" }, "domainName": { @@ -2075,7 +2084,7 @@ "message": "Wszystkie elementy" }, "noPasswordsInList": { - "message": "Brak haseł." + "message": "Brak haseł do wyświetlenia." }, "clearHistory": { "message": "Wyczyść historię" @@ -2090,7 +2099,7 @@ "message": "Usuń" }, "default": { - "message": "Domyślny" + "message": "Domyślne" }, "dateUpdated": { "message": "Zaktualizowano", @@ -2105,7 +2114,7 @@ "description": "ex. Date this password was updated" }, "neverLockWarning": { - "message": "Czy na pewno chcesz użyć opcji \"Nigdy\"? Ustawienie opcji blokady na \"Nigdy\" przechowuje klucz szyfrowania Twojego sejfu na urządzeniu. Jeśli używasz tej opcji upewnij się, że odpowiednio zabezpieczasz swoje urządzenie." + "message": "Czy na pewno chcesz użyć opcji „Nigdy”? Ustawienie blokady na „Nigdy” spowoduje przechowywanie klucza szyfrowania sejfu na urządzeniu. Upewnij się, że urządzenie jest odpowiednio chronione." }, "noOrganizationsList": { "message": "Nie należysz do żadnej organizacji. Organizacje pozwalają na bezpieczne udostępnianie elementów innym użytkownikom." @@ -2117,7 +2126,7 @@ "message": "Właściciel" }, "whoOwnsThisItem": { - "message": "Kto jest właścicielem tego elementu?" + "message": "Kto jest właścicielem elementu?" }, "strong": { "message": "Silne", @@ -2132,7 +2141,7 @@ "description": "ex. A weak password. Scale: Weak -> Good -> Strong" }, "weakMasterPassword": { - "message": "Słabe hasło główne" + "message": "Hasło główne jest słabe" }, "weakMasterPasswordDesc": { "message": "Wybrane przez Ciebie hasło główne jest słabe. Powinieneś użyć silniejszego hasła (lub frazy), aby właściwie chronić swoje konto Bitwarden. Czy na pewno chcesz użyć tego hasła głównego?" @@ -2153,8 +2162,8 @@ "setYourPinCode": { "message": "Ustaw kod PIN do odblokowywania aplikacji Bitwarden. Ustawienia odblokowywania kodem PIN zostaną zresetowane po wylogowaniu." }, - "setYourPinCode1": { - "message": "Twój PIN będzie używany do odblokowania Bitwardena zamiast hasła głównego. Twój kod PIN zostanie zresetowany jeśli kiedykolwiek wylogujesz się z Bitwarden." + "setPinCode": { + "message": "Możesz użyć tego kodu PIN, aby odblokować Bitwarden. Twój kod PIN zostanie zresetowany, jeśli kiedykolwiek wylogujesz się z aplikacji." }, "pinRequired": { "message": "Kod PIN jest wymagany." @@ -2166,10 +2175,10 @@ "message": "Zbyt wiele nieprawidłowych prób wpisywania PIN. Wylogowywanie." }, "unlockWithBiometrics": { - "message": "Odblokuj danymi biometrycznymi" + "message": "Odblokuj biometrią" }, "unlockWithMasterPassword": { - "message": "Odblokuj za pomocą głównego hasła" + "message": "Odblokuj hasłem głównym" }, "awaitDesktop": { "message": "Oczekiwanie na potwierdzenie z aplikacji desktopowej" @@ -2196,7 +2205,7 @@ "message": "Generator hasła" }, "usernameGenerator": { - "message": "Generator nazw użytkownika" + "message": "Generator nazwy użytkownika" }, "useThisEmail": { "message": "Użyj tego adresu e-mail" @@ -2204,6 +2213,9 @@ "useThisPassword": { "message": "Użyj tego hasła" }, + "useThisPassphrase": { + "message": "Użyj tego hasła wyrazowego" + }, "useThisUsername": { "message": "Użyj tej nazwy użytkownika" }, @@ -2225,7 +2237,7 @@ "message": "Sposób blokowania sejfu" }, "vaultTimeoutAction1": { - "message": "Akcja po przekroczeniu limitu czasu" + "message": "Sposób blokady" }, "lock": { "message": "Zablokuj", @@ -2242,7 +2254,7 @@ "message": "Usuń trwale element" }, "permanentlyDeleteItemConfirmation": { - "message": "Czy na pewno chcesz usunąć trwale ten element?" + "message": "Czy na pewno chcesz usunąć trwale element?" }, "permanentlyDeletedItem": { "message": "Element został trwale usunięty" @@ -2260,25 +2272,25 @@ "message": "Po wylogowaniu się z sejfu musisz ponownie zalogować się, aby uzyskać do niego dostęp. Czy na pewno chcesz użyć tego ustawienia?" }, "vaultTimeoutLogOutConfirmationTitle": { - "message": "Potwierdź sposób blokowania sejfu" + "message": "Potwierdź sposób blokady" }, "autoFillAndSave": { - "message": "Automatycznie uzupełnij i zapisz" + "message": "Uzupełnij i zapisz" }, "fillAndSave": { - "message": "Wypełnij i zapisz" + "message": "Uzupełnij i zapisz" }, "autoFillSuccessAndSavedUri": { "message": "URI został zapisany i automatycznie uzupełniony" }, "autoFillSuccess": { - "message": "Element został automatycznie uzupełniony " + "message": "Element został automatycznie uzupełniony" }, "insecurePageWarning": { - "message": "Ostrzeżenie: Jest to niezabezpieczona strona HTTP i wszelkie przekazane informacje mogą być potencjalnie widoczne i zmienione przez innych. Ten login został pierwotnie zapisany na stronie bezpiecznej (HTTPS)." + "message": "Ostrzeżenie: Jest to niezabezpieczona strona HTTP, to wszelkie przesłane informacje mogą być potencjalnie widoczne i zmienione przez inne osoby. Logowanie zostało pierwotnie zapisane na bezpiecznej stronie (HTTPS)." }, "insecurePageWarningFillPrompt": { - "message": "Nadal chcesz uzupełnić ten login?" + "message": "Czy chcesz uzupełnić dane logowania?" }, "autofillIframeWarning": { "message": "Formularz jest hostowany przez inną domenę niż zapisany adres URI dla tego loginu. Wybierz OK, aby i tak automatycznie wypełnić lub anuluj, aby zatrzymać." @@ -2296,7 +2308,7 @@ "message": "Ustaw hasło główne" }, "currentMasterPass": { - "message": "Aktualne hasło główne" + "message": "Obecne hasło główne" }, "newMasterPass": { "message": "Nowe hasło główne" @@ -2347,7 +2359,7 @@ "message": "Nowe hasło główne nie spełnia wymaganych zasad." }, "receiveMarketingEmailsV2": { - "message": "Uzyskaj poradę, ogłoszenia i możliwości badawcze od Bitwarden w swojej skrzynce odbiorczej." + "message": "Otrzymuj porady, ogłoszenia i możliwości badawcze od Bitwarden na swoją skrzynkę odbiorczą." }, "unsubscribe": { "message": "Anuluj subskrypcję" @@ -2356,7 +2368,7 @@ "message": "w każdej chwili." }, "byContinuingYouAgreeToThe": { - "message": "Kontynuując, zgadzasz się na" + "message": "Kontynuując, akceptujesz" }, "and": { "message": "i" @@ -2374,7 +2386,7 @@ "message": "Polityka prywatności" }, "yourNewPasswordCannotBeTheSameAsYourCurrentPassword": { - "message": "Twoje nowe hasło nie może być takie samo jak Twoje aktualne hasło." + "message": "Nowe hasło nie może być takie samo jak obecne." }, "hintEqualsPassword": { "message": "Podpowiedź do hasła nie może być taka sama jak hasło." @@ -2383,16 +2395,16 @@ "message": "Ok" }, "errorRefreshingAccessToken": { - "message": "Błąd podczas odświeżania tokenu" + "message": "Wystąpił błąd podczas odświeżania tokena" }, "errorRefreshingAccessTokenDesc": { - "message": "Nie znaleziono tokenu odświeżającego ani kluczy API. Spróbuj wylogować się i zalogować ponownie." + "message": "Nie znaleziono tokena odświeżania ani kluczy API. Zaloguj się ponownie." }, "desktopSyncVerificationTitle": { "message": "Weryfikacja synchronizacji z aplikacją desktopową" }, "desktopIntegrationVerificationText": { - "message": "Zweryfikuj aplikację desktopową z wyświetlonym identyfikatorem: " + "message": "Zweryfikuj aplikację desktopową z odciskiem klucza: " }, "desktopIntegrationDisabledTitle": { "message": "Połączenie z przeglądarką jest wyłączone" @@ -2407,7 +2419,7 @@ "message": "Aplikacja desktopowa Bitwarden, przed odblokowaniem danymi biometrycznymi, musi zostać ponownie uruchomiona." }, "errorEnableBiometricTitle": { - "message": "Nie można włączyć danych biometrycznych" + "message": "Nie można włączyć biometrii" }, "errorEnableBiometricDesc": { "message": "Operacja została anulowana przez aplikację desktopową" @@ -2425,37 +2437,37 @@ "message": "Konto jest niezgodne" }, "nativeMessagingWrongUserKeyTitle": { - "message": "Klucz biometryczny jest niepoprawny" + "message": "Klucz biometrii jest nieprawidłowy" }, "nativeMessagingWrongUserKeyDesc": { "message": "Odblokowanie biometryczne się nie powiodło. Sekretny klucz biometryczny nie odblokował sejfu. Spróbuj skonfigurować biometrię ponownie." }, "biometricsNotEnabledTitle": { - "message": "Dane biometryczne są wyłączone" + "message": "Biometria jest wyłączona" }, "biometricsNotEnabledDesc": { "message": "Aby włączyć dane biometryczne w przeglądarce, musisz włączyć tę samą funkcję w ustawianiach aplikacji desktopowej." }, "biometricsNotSupportedTitle": { - "message": "Dane biometryczne nie są obsługiwane" + "message": "Biometria nie jest obsługiwana" }, "biometricsNotSupportedDesc": { - "message": "Dane biometryczne przeglądarki nie są obsługiwane na tym urządzeniu." + "message": "Biometria przeglądarki nie jest obsługiwana na tym urządzeniu." }, "biometricsNotUnlockedTitle": { - "message": "Użytkownik zablokowany lub wylogowany" + "message": "Użytkownik jest zablokowany lub wylogowany" }, "biometricsNotUnlockedDesc": { - "message": "Odblokuj tego użytkownika w aplikacji desktopowej i spróbuj ponownie." + "message": "Odblokuj użytkownika w aplikacji desktopowej i spróbuj ponownie." }, "biometricsNotAvailableTitle": { - "message": "Odblokowanie biometryczne jest niedostępne" + "message": "Odblokowanie biometrią jest niedostępne" }, "biometricsNotAvailableDesc": { - "message": "Odblokowanie biometryczne jest obecnie niedostępne. Spróbuj ponownie później." + "message": "Odblokowanie biometrią jest obecnie niedostępne. Spróbuj ponownie później." }, "biometricsFailedTitle": { - "message": "Dane biometryczne są błędne" + "message": "Logowanie biometrią nie powiodło się" }, "biometricsFailedDesc": { "message": "Dane biometryczne nie mogę być użyte, rozważ użycie hasła głównego lub wylogowanie. Jeśli się to powtarza, skontaktuj się z pomocą techniczną Bitwarden." @@ -2473,7 +2485,7 @@ "message": "Ta operacja nie może zostać wykonana na pasku bocznym. Spróbuj ponownie w nowym oknie." }, "personalOwnershipSubmitError": { - "message": "Ze względu na zasadę przedsiębiorstwa, nie możesz zapisywać elementów w osobistym sejfie. Zmień właściciela elementu na organizację i wybierz jedną z dostępnych kolekcji." + "message": "Ze względu na zasadę organizacji, nie możesz zapisywać elementów w osobistym sejfie. Zmień właściciela elementu na organizację i wybierz jedną z dostępnych kolekcji." }, "personalOwnershipPolicyInEffect": { "message": "Zasada organizacji ma wpływ na opcję własności elementów." @@ -2481,30 +2493,36 @@ "personalOwnershipPolicyInEffectImports": { "message": "Polityka organizacji zablokowała importowanie elementów do Twojego sejfu." }, + "restrictCardTypeImport": { + "message": "Nie można zaimportować karty" + }, + "restrictCardTypeImportDesc": { + "message": "Polityka ustawiona przez 1 lub więcej organizacji uniemożliwia importowanie kart do sejfów." + }, "domainsTitle": { "message": "Domeny", "description": "A category title describing the concept of web domains" }, "blockedDomains": { - "message": "Zablokowane domeny" + "message": "Blokowane domeny" }, "learnMoreAboutBlockedDomains": { - "message": "Dowiedz się więcej o zablokowanych domenach" + "message": "Dowiedz się więcej o blokowanych domenach" }, "excludedDomains": { "message": "Wykluczone domeny" }, "excludedDomainsDesc": { - "message": "Aplikacja Bitwarden nie będzie proponować zapisywania danych logowania dla tych domen. Musisz odświeżyć stronę, aby zastosowywać zmiany." + "message": "Bitwarden nie będzie proponował zapisywania danych logowania dla tych domen. Odśwież stronę, aby zastosowywać zmiany." }, "excludedDomainsDescAlt": { - "message": "Aplikacja Bitwarden nie będzie proponować zapisywania danych logowania dla tych domen dla wszystkich zalogowanych kont. Musisz odświeżyć stronę, aby zastosowywać zmiany." + "message": "Bitwarden nie będzie proponował zapisywania danych logowania dla tych domen dla wszystkich zalogowanych kont. Odśwież stronę, aby zastosowywać zmiany." }, "blockedDomainsDesc": { - "message": "Autouzupełnianie i inne powiązane funkcje nie będą oferowane dla tych stron. Aby zmiany zaczęły obowiązywać, musisz odświeżyć stronę." + "message": "Autouzupełnianie będzie zablokowane dla tych stron internetowych. Zmiany zaczną obowiązywać po odświeżeniu strony." }, "autofillBlockedNoticeV2": { - "message": "Autouzupełnianie jest zablokowane dla tej witryny." + "message": "Autouzupełnianie będzie zablokowane dla tych stron intenretowych." }, "autofillBlockedNoticeGuidance": { "message": "Zmień to w ustawieniach" @@ -2512,6 +2530,10 @@ "change": { "message": "Zmień" }, + "changePassword": { + "message": "Zmień hasło", + "description": "Change password button for browser at risk notification on login." + }, "changeButtonTitle": { "message": "Zmień hasło - $ITEMNAME$", "placeholders": { @@ -2521,11 +2543,14 @@ } } }, + "atRiskPassword": { + "message": "Zagrożone hasło" + }, "atRiskPasswords": { "message": "Zagrożone hasła" }, "atRiskPasswordDescSingleOrg": { - "message": "$ORGANIZATION$ prosi o zmianę jednego hasła, ponieważ jest ono zagrożone.", + "message": "Organizacja $ORGANIZATION$ prosi o zmianę 1 hasła, ponieważ jest ono zagrożone.", "placeholders": { "organization": { "content": "$1", @@ -2534,7 +2559,7 @@ } }, "atRiskPasswordsDescSingleOrgPlural": { - "message": "$ORGANIZATION$ prosi o zmianę $COUNT$ haseł, ponieważ są one zagrożone.", + "message": "Organizacja $ORGANIZATION$ prosi o zmianę $COUNT$ haseł, ponieważ są one zagrożone.", "placeholders": { "organization": { "content": "$1", @@ -2547,7 +2572,7 @@ } }, "atRiskPasswordsDescMultiOrgPlural": { - "message": "Twoje organizacje proszą o zmianę $COUNT$ haseł, ponieważ są one zagrożone.", + "message": "Twoja organizacja prosi o zmianę $COUNT$ haseł, ponieważ są one zagrożone.", "placeholders": { "count": { "content": "$1", @@ -2555,8 +2580,28 @@ } } }, + "atRiskChangePrompt": { + "message": "Hasło dla tej strony internetowej jest zagrożone. Organizacja $ORGANIZATION$ prosi o jego zmianę.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + }, + "description": "Notification body when a login triggers an at-risk password change request and the change password domain is known." + }, + "atRiskNavigatePrompt": { + "message": "Organizacja $ORGANIZATION$ prosi o zmianę hasła, ponieważ jest ono zagrożone. Przejdź do ustawień konta, aby zmienić hasło.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + }, + "description": "Notification body when a login triggers an at-risk password change request and no change password domain is provided." + }, "reviewAndChangeAtRiskPassword": { - "message": "Przejrzyj i zmień jedno zagrożone hasło" + "message": "Sprawdź i zmień 1 zagrożone hasło" }, "reviewAndChangeAtRiskPasswordsPlural": { "message": "Przejrzyj i zmień $COUNT$ zagrożonych haseł ", @@ -2574,10 +2619,10 @@ "message": "Zaktualizuj swoje ustawienia, aby szybko autouzupełniać hasła i generować nowe" }, "reviewAtRiskLogins": { - "message": "Przejrzyj zagrożone loginy" + "message": "Sprawdź zagrożone dane logowania" }, "reviewAtRiskPasswords": { - "message": "Przejrzyj zagrożone hasła" + "message": "Sprawdź zagrożone hasła" }, "reviewAtRiskLoginsSlideDesc": { "message": "Twoje hasła organizacji są zagrożone, ponieważ są słabe, ponownie używane i/lub narażone.", @@ -2591,10 +2636,10 @@ "description": "Description of the generate password slide on the at-risk password page carousel" }, "generatePasswordSlideImgAltPeriod": { - "message": "Ilustracja menu autouzupełniania Bitwardena pokazująca wygenerowane hasło." + "message": "Ilustracja menu autouzupełniania Bitwarden pokazująca wygenerowane hasło." }, "updateInBitwarden": { - "message": "Aktualizacja w Bitwarden" + "message": "Zaktualizuj w Bitwarden" }, "updateInBitwardenSlideDesc": { "message": "Bitwarden poprosi Cię o aktualizację hasła w menedżerze haseł.", @@ -2604,7 +2649,7 @@ "message": "Ilustracja powiadomienia Bitwardena, skłaniająca użytkownika do zaktualizowania danych logowania." }, "turnOnAutofill": { - "message": "Włącz autouzupełnienie" + "message": "Włącz autouzupełnianie" }, "turnedOnAutofill": { "message": "Włączono autouzupełnianie" @@ -2622,7 +2667,7 @@ } }, "excludedDomainsInvalidDomain": { - "message": "$DOMAIN$ nie jest prawidłową nazwą domeny", + "message": "Domena $DOMAIN$ nie jest prawidłowa", "placeholders": { "domain": { "content": "$1", @@ -2631,16 +2676,16 @@ } }, "blockedDomainsSavedSuccess": { - "message": "Zmiany w zablokowanych domenach zapisane" + "message": "Blokowane domeny zostały zapisane" }, "excludedDomainsSavedSuccess": { - "message": "Zmiany w wykluczonych domenach zapisane" + "message": "Wykluczone domeny zostały zapisane" }, "limitSendViews": { - "message": "Limit wyświetleń" + "message": "Maksymalna liczba wyświetleń" }, "limitSendViewsHint": { - "message": "Nikt nie może wyświetlić Send po osiągnieciu limitu.", + "message": "Po osiągnięciu limitu wysyłka będzie niedostępna.", "description": "Displayed under the limit views field on Send" }, "limitSendViewsCount": { @@ -2654,18 +2699,18 @@ } }, "send": { - "message": "Wyślij", + "message": "Wysyłki", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "sendDetails": { - "message": "Szczegóły Send", + "message": "Szczegóły wysyłki", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "sendTypeText": { "message": "Tekst" }, "sendTypeTextToShare": { - "message": "Tekst do udostępnienia" + "message": "Tekst wysyłki" }, "sendTypeFile": { "message": "Plik" @@ -2674,14 +2719,18 @@ "message": "Wszystkie wysyłki", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "maxAccessCountReached": { + "message": "Maksymalna liczba dostępów została osiągnięta", + "description": "This text will be displayed after a Send has been accessed the maximum amount of times." + }, "hideTextByDefault": { - "message": "Domyślnie ukryj tekst" + "message": "Ukryj domyślnie tekst wysyłki" }, "expired": { "message": "Wygasła" }, "passwordProtected": { - "message": "Chroniona hasłem" + "message": "Zabezpieczone hasłem" }, "copyLink": { "message": "Kopiuj link" @@ -2708,7 +2757,7 @@ "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "disabled": { - "message": "Wyłączona" + "message": "Wyłączone" }, "removePasswordConfirmation": { "message": "Czy na pewno chcesz usunąć hasło?" @@ -2718,11 +2767,11 @@ "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ę?", + "message": "Czy na pewno chcesz usunąć wysyłkę?", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "deleteSendPermanentConfirmation": { - "message": "Czy na pewno chcesz trwale usunąć to Send?", + "message": "Czy na pewno chcesz usunąć trwale wysyłkę?", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "editSend": { @@ -2733,7 +2782,7 @@ "message": "Data usunięcia" }, "deletionDateDescV2": { - "message": "Send zostanie trwale usunięte w tej dacie.", + "message": "W tym dniu wysyłka zostanie trwale usunięta.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "expirationDate": { @@ -2752,10 +2801,10 @@ } }, "custom": { - "message": "Niestandardowe" + "message": "Niestandardowa" }, "sendPasswordDescV3": { - "message": "Zabezpiecz tę wiadomość hasłem, które będzie wymagane, aby uzyskać do niej dostęp.", + "message": "Zabezpiecz wysyłkę opcjonalnym hasłem.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "createSend": { @@ -2770,7 +2819,7 @@ "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "sendDisabledWarning": { - "message": "Ze względu na zasadę przedsiębiorstwa, tylko Ty możesz usunąć obecną wysyłkę.", + "message": "Ze względu na zasadę organizacji, tylko Ty możesz usunąć obecną wysyłkę.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "createdSend": { @@ -2778,15 +2827,15 @@ "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "createdSendSuccessfully": { - "message": "Send został stworzony!", + "message": "Wysyłka została utworzona!", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "sendExpiresInHoursSingle": { - "message": "Wiadomość będzie dostępna dla każdego z dostępem do tego linku przez następną godzinę.", + "message": "Wysyłka będzie dostępna przez 1 godz.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "sendExpiresInHours": { - "message": "Wiadomość będzie dostępna dla każdego z dostępem do tego linku przez następne $HOURS$ godzin.", + "message": "Wysyłka będzie dostępna przez $HOURS$ godz.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.", "placeholders": { "hours": { @@ -2796,11 +2845,11 @@ } }, "sendExpiresInDaysSingle": { - "message": "Wiadomość będzie dostępna dla każdego z dostępem do tego linku przez 1 dzień.", + "message": "Wysyłka będzie dostępna przez 1 dzień.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "sendExpiresInDays": { - "message": "Wiadomość będzie dostępna dla każdego z dostępem do tego linku przez następne $DAYS$ dni.", + "message": "Wysyłka będzie dostępna przez $DAYS$ dni.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.", "placeholders": { "days": { @@ -2810,7 +2859,7 @@ } }, "sendLinkCopied": { - "message": "Link Send został skopiowany", + "message": "Link wysyłki został skopiowany", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "editedSend": { @@ -2818,21 +2867,21 @@ "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "sendFilePopoutDialogText": { - "message": "Otworzyć rozszerzenie w nowym oknie?", + "message": "Otworzyć rozszerzenie w oknie?", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "sendFilePopoutDialogDesc": { - "message": "Aby utworzyć plik Send, musisz wysunąć rozszerzenie do nowego okna.", + "message": "Otwórz okno rozszerzenia, aby utworzyć wysyłkę pliku.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "sendLinuxChromiumFileWarning": { - "message": "Aby wybrać plik, otwórz rozszerzenie na pasku bocznym (jeśli to możliwe) lub w nowym oknie." + "message": "Aby wybrać plik, otwórz rozszerzenie na pasku bocznym lub w oknie." }, "sendFirefoxFileWarning": { - "message": "Aby wybrać plik za pomocą przeglądarki Firefox, otwórz rozszerzenie w nowym oknie." + "message": "Aby wybrać plik, otwórz rozszerzenie na pasku bocznym lub w oknie." }, "sendSafariFileWarning": { - "message": "Aby wybrać plik za pomocą przeglądarki Safari, otwórz rozszerzenie w nowym oknie." + "message": "Aby wybrać plik, otwórz rozszerzenie w oknie." }, "popOut": { "message": "Odepnij" @@ -2853,10 +2902,10 @@ "message": "Data i czas usunięcia są wymagane." }, "dateParsingError": { - "message": "Wystąpił błąd podczas zapisywania dat usunięcia i wygaśnięcia." + "message": "Wystąpił błąd podczas zapisywania daty usunięcia i wygaśnięcia." }, "hideYourEmail": { - "message": "Ukryj mój adres e-mail przed oglądającymi." + "message": "Ukryj mój adres e-mail przed odbiorcami." }, "passwordPrompt": { "message": "Potwierdź hasłem głównym" @@ -2865,16 +2914,19 @@ "message": "Potwierdź hasło główne" }, "passwordConfirmationDesc": { - "message": "Ta operacja jest chroniona. Aby kontynuować, wpisz ponownie hasło główne." + "message": "Operacja jest chroniona. Aby kontynuować, wpisz ponownie hasło główne." }, "emailVerificationRequired": { "message": "Weryfikacja adresu e-mail jest wymagana" }, "emailVerifiedV2": { - "message": "E-mail zweryfikowany" + "message": "Adres e-mail został zweryfikowany" }, "emailVerificationRequiredDesc": { - "message": "Musisz zweryfikować adres e-mail, aby korzystać z tej funkcji. Adres możesz zweryfikować w sejfie internetowym." + "message": "Musisz zweryfikować adres e-mail, aby skorzystać z tej funkcji. Adres możesz zweryfikować w sejfie internetowym." + }, + "masterPasswordSuccessfullySet": { + "message": "Hasło główne zostało ustawione" }, "updatedMasterPassword": { "message": "Hasło główne zostało zaktualizowane" @@ -2883,10 +2935,10 @@ "message": "Zaktualizuj hasło główne" }, "updateMasterPasswordWarning": { - "message": "Hasło główne zostało zmienione przez administratora Twojej organizacji. Musisz je zaktualizować, aby uzyskać dostęp do sejfu. Ta czynność spowoduje wylogowanie z bieżącej sesji, przez co konieczne będzie ponowne zalogowanie się. Aktywne sesje na innych urządzeniach mogą pozostać aktywne przez maksymalnie godzinę." + "message": "Hasło główne zostało zmienione przez administratora Twojej organizacji. Aby uzyskać dostęp do sejfu, zaktualizuj hasło główne. Kontynuowanie spowoduje wylogowanie z obecnej sesji i konieczność ponownego zalogowania się. Aktywne sesje na innych urządzeniach mogą pozostać aktywne przez maksymalnie godzinę." }, "updateWeakMasterPasswordWarning": { - "message": "Twoje hasło główne nie spełnia jednej lub kilku zasad organizacji. Aby uzyskać dostęp do sejfu, musisz teraz zaktualizować swoje hasło główne. Kontynuacja wyloguje Cię z bieżącej sesji, wymagając zalogowania się ponownie. Aktywne sesje na innych urządzeniach mogą pozostać aktywne przez maksymalnie jedną godzinę." + "message": "Hasło główne nie spełnia co najmniej jednej zasady organizacji. Aby uzyskać dostęp do sejfu, zaktualizuj hasło główne. Kontynuowanie spowoduje wylogowanie z obecnej sesji i konieczność ponownego zalogowania się. Aktywne sesje na innych urządzeniach mogą pozostać aktywne przez maksymalnie godzinę." }, "tdeDisabledMasterPasswordRequired": { "message": "Twoja organizacja wyłączyła szyfrowanie zaufanego urządzenia. Ustaw hasło główne, aby uzyskać dostęp do sejfu." @@ -2895,7 +2947,7 @@ "message": "Automatyczne rejestrowanie użytkowników" }, "resetPasswordAutoEnrollInviteWarning": { - "message": "Ta organizacja posługuje się zasadą, która automatycznie rejestruje użytkowników do resetowania hasła. Rejestracja umożliwia administratorom organizacji zmianę Twojego hasła głównego." + "message": "Zasada organizacji umożliwia administratorom organizacji zmianę Twojego hasła głównego." }, "selectFolder": { "message": "Wybierz folder..." @@ -2913,7 +2965,7 @@ "description": "Used as a card title description on the set password page to explain why the user is there" }, "cardMetrics": { - "message": "z $TOTAL$ elementów", + "message": "z $TOTAL$", "placeholders": { "total": { "content": "$1", @@ -2922,7 +2974,7 @@ } }, "verificationRequired": { - "message": "Wymagana weryfikacja", + "message": "Weryfikacja jest wymagana", "description": "Default title for the user verification dialog." }, "hours": { @@ -2932,10 +2984,10 @@ "message": "Minuty" }, "vaultTimeoutPolicyAffectingOptions": { - "message": "Wymagania polityki przedsiębiorstwa zostały zastosowane do twoich opcji przekrocznia limitu czasu" + "message": "Zasady organizacji zostały zastosowane do opcji blokowania sejfu" }, "vaultTimeoutPolicyInEffect": { - "message": "Zasady organizacji mają wpływ czas blokowania sejfu. Maksymalny dozwolony czas wynosi $HOURS$ godz. i $MINUTES$ min.", + "message": "Zasady organizacji mają wpływ na czas blokowania sejfu. Maksymalny dozwolony czas wynosi $HOURS$ godz. i $MINUTES$ min.", "placeholders": { "hours": { "content": "$1", @@ -2948,7 +3000,7 @@ } }, "vaultTimeoutPolicyInEffect1": { - "message": "$HOURS$ godzin(y) i $MINUTES$ minut(y) maksymalnie.", + "message": "Maksymalnie $HOURS$ godz. i $MINUTES$ min.", "placeholders": { "hours": { "content": "$1", @@ -2961,7 +3013,7 @@ } }, "vaultTimeoutPolicyMaximumError": { - "message": "Limit czasu przekracza ograniczenie ustawione przez Twoją organizację: $HOURS$ godzin(y) i $MINUTES$ minut(y) maksymalnie", + "message": "Czas blokowania sejfu przekracza zasady organizacji. Maksymalny dozwolony czas wynosi $HOURS$ godz. i $MINUTES$ min.", "placeholders": { "hours": { "content": "$1", @@ -2991,7 +3043,7 @@ } }, "vaultTimeoutActionPolicyInEffect": { - "message": "Zasady organizacji ustawiły czas blokowania sejfu na $ACTION$.", + "message": "Zasady organizacji wymuszają sposób blokowania sejfu na $ACTION$.", "placeholders": { "action": { "content": "$1", @@ -3000,7 +3052,7 @@ } }, "vaultTimeoutTooLarge": { - "message": "Czas blokowania sejfu przekracza limit określony przez organizację." + "message": "Czas blokowania aplikacji przekracza limit określony przez organizację." }, "vaultExportDisabled": { "message": "Eksportowanie sejfu jest niedostępne" @@ -3009,19 +3061,19 @@ "message": "Co najmniej jedna zasada organizacji uniemożliwia wyeksportowanie osobistego sejfu." }, "copyCustomFieldNameInvalidElement": { - "message": "Nie można zidentyfikować poprawnego elementu formularza. Spróbuj sprawdzić kod HTML." + "message": "Nie można zidentyfikować prawidłowego elementu formularza. Sprawdź kod HTML." }, "copyCustomFieldNameNotUnique": { "message": "Nie znaleziono unikatowego identyfikatora." }, "removeMasterPasswordForOrganizationUserKeyConnector": { - "message": "Hasło główne nie jest już wymagane dla członków następującej organizacji. Proszę potwierdzić poniższą domenę u administratora organizacji." + "message": "Hasło główne nie jest już wymagane dla członków następującej organizacji. Potwierdź poniższą domenę z administratorem organizacji." }, "organizationName": { "message": "Nazwa organizacji" }, "keyConnectorDomain": { - "message": "Domena Key Connector'a" + "message": "Domena Key Connector" }, "leaveOrganization": { "message": "Opuść organizację" @@ -3033,13 +3085,13 @@ "message": "Hasło główne zostało usunięte" }, "leaveOrganizationConfirmation": { - "message": "Czy na pewno chcesz opuścić tę organizację?" + "message": "Czy na pewno chcesz opuścić organizację?" }, "leftOrganization": { - "message": "Nie należysz już do tej organizacji." + "message": "Opuszczono organizację." }, "toggleCharacterCount": { - "message": "Pokaż / Ukryj licznik znaków" + "message": "Pokaż / ukryj licznik znaków" }, "sessionTimeout": { "message": "Twoja sesja wygasła. Zaloguj się ponownie." @@ -3048,7 +3100,7 @@ "message": "Eksportowanie osobistego sejfu" }, "exportingIndividualVaultDescription": { - "message": "Z sejfu zostaną wyeksportowane tylko elementy powiązane z $EMAIL$. Elementy z sejfu organizacji nie będą uwzględnione. Tylko informacje o elemencie zostaną wyeksportowane i nie będą zawierać powiązanych załączników.", + "message": "Wyeksportowane zostaną tylko osobiste elementy konta $EMAIL$. Elementy organizacji nie zostaną uwzględnione. Wyeksportowane zostaną tylko informacje o elementach sejfu i nie będą one zawierać powiązanych załączników.", "placeholders": { "email": { "content": "$1", @@ -3098,7 +3150,7 @@ "message": "Wygeneruj nazwę użytkownika" }, "generateEmail": { - "message": "Wygeneruj e-mail" + "message": "Wygeneruj adres e-mail" }, "spinboxBoundariesHint": { "message": "Wartość musi być pomiędzy $MIN$ a $MAX$.", @@ -3115,7 +3167,7 @@ } }, "passwordLengthRecommendationHint": { - "message": " Użyj $RECOMMENDED$ znaków lub więcej, aby wygenerować silne hasło.", + "message": "Użyj co najmniej $RECOMMENDED$ znaków, aby utworzyć silne hasło.", "description": "Appended to `spinboxBoundariesHint` to recommend a length to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", "placeholders": { "recommended": { @@ -3125,7 +3177,7 @@ } }, "passphraseNumWordsRecommendationHint": { - "message": " Użyj $RECOMMENDED$ słów lub więcej, aby wygenerować silne hasło.", + "message": "Użyj co najmniej $RECOMMENDED$ słów, aby wygenerować silne hasło wyrazowe.", "description": "Appended to `spinboxBoundariesHint` to recommend a number of words to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", "placeholders": { "recommended": { @@ -3148,13 +3200,13 @@ "message": "Użyj skonfigurowanej skrzynki catch-all w swojej domenie." }, "random": { - "message": "Losowa" + "message": "Losowe" }, "randomWord": { "message": "Losowe słowo" }, "websiteName": { - "message": "Nazwa strony" + "message": "Nazwa strony internetowej" }, "service": { "message": "Usługa" @@ -3163,7 +3215,7 @@ "message": "Alias przekierowania" }, "forwardedEmailDesc": { - "message": "Wygeneruj alias adresu e-mail z zewnętrznej usługi przekierowania." + "message": "Wygeneruj alias za pomocą zewnętrznej usługi." }, "forwarderDomainName": { "message": "Domena adresu e-mail", @@ -3202,7 +3254,7 @@ } }, "forwaderInvalidToken": { - "message": "Nieprawidłowy token API dla $SERVICENAME$", + "message": "Token API $SERVICENAME$ jest nieprawidłowy", "description": "Displayed when the user's API token is empty or rejected by the forwarding service.", "placeholders": { "servicename": { @@ -3212,7 +3264,7 @@ } }, "forwaderInvalidTokenWithMessage": { - "message": "Nieprawidłowy token API dla $SERVICENAME$, błąd: $ERRORMESSAGE$", + "message": "Token API $SERVICENAME$ jest nieprawidłowy: $ERRORMESSAGE$", "description": "Displayed when the user's API token is rejected by the forwarding service with an error message.", "placeholders": { "servicename": { @@ -3226,7 +3278,7 @@ } }, "forwaderInvalidOperation": { - "message": "$SERVICENAME$ odrzucił Twoje żądanie. Skontaktuj się z dostawcą usług w celu uzyskania pomocy.", + "message": "$SERVICENAME$ odrzucił żądanie. Skontaktuj się z dostawcą usługi w celu uzyskania pomocy.", "description": "Displayed when the user is forbidden from using the API by the forwarding service.", "placeholders": { "servicename": { @@ -3236,7 +3288,7 @@ } }, "forwaderInvalidOperationWithMessage": { - "message": "$SERVICENAME$ odrzucił Twoje żądanie: $ERRORMESSAGE$", + "message": "$SERVICENAME$ odrzucił żądanie: $ERRORMESSAGE$", "description": "Displayed when the user is forbidden from using the API by the forwarding service with an error message.", "placeholders": { "servicename": { @@ -3250,7 +3302,7 @@ } }, "forwarderNoAccountId": { - "message": "Nie można uzyskać ID maskowanego konta e-mail dla $SERVICENAME$.", + "message": "Nie można uzyskać identyfikatora konta e-mail $SERVICENAME$.", "description": "Displayed when the forwarding service fails to return an account ID.", "placeholders": { "servicename": { @@ -3260,7 +3312,7 @@ } }, "forwarderNoDomain": { - "message": "Nieprawidłowa domena $SERVICENAME$.", + "message": "Domena $SERVICENAME$ jest nieprawidłowa.", "description": "Displayed when the domain is empty or domain authorization failed at the forwarding service.", "placeholders": { "servicename": { @@ -3270,7 +3322,7 @@ } }, "forwarderNoUrl": { - "message": "Nieprawidłowy adres URL $SERVICENAME$.", + "message": "Adres URL $SERVICENAME$ jest nieprawidłowy.", "description": "Displayed when the url of the forwarding service wasn't supplied.", "placeholders": { "servicename": { @@ -3280,7 +3332,7 @@ } }, "forwarderUnknownError": { - "message": "Wystąpił nieznany błąd w $SERVICENAME$.", + "message": "Wystąpił nieznany błąd $SERVICENAME$.", "description": "Displayed when the forwarding service failed due to an unknown error.", "placeholders": { "servicename": { @@ -3313,7 +3365,7 @@ "message": "Błąd serwera Key Connector: upewnij się, że serwer Key Connector jest dostępny i działa poprawnie." }, "premiumSubcriptionRequired": { - "message": "Wymagana jest subskrypcja Premium" + "message": "Wymagana jest subskrypcja premium" }, "organizationIsDisabled": { "message": "Organizacja została zawieszona." @@ -3322,7 +3374,7 @@ "message": "Nie można uzyskać dostępu do elementów w zawieszonych organizacjach. Skontaktuj się z właścicielem organizacji, aby uzyskać pomoc." }, "loggingInTo": { - "message": "Logowanie do $DOMAIN$", + "message": "Logowanie na $DOMAIN$", "placeholders": { "domain": { "content": "$1", @@ -3385,7 +3437,7 @@ "message": "Powiadomienie zostało wysłane na urządzenie." }, "notificationSentDevicePart1": { - "message": "Odblokuj Bitwarden na swoim urządzeniu lub w" + "message": "Odblokuj Bitwarden na urządzeniu lub w" }, "notificationSentDeviceAnchor": { "message": "aplikacji internetowej" @@ -3394,13 +3446,13 @@ "message": "Upewnij się, że fraza odcisku palca zgadza się z tą poniżej, zanim zatwierdzisz." }, "aNotificationWasSentToYourDevice": { - "message": "Powiadomienie zostało wysłane na twoje urządzenie" + "message": "Powiadomienie zostało wysłane na urządzenie" }, "youWillBeNotifiedOnceTheRequestIsApproved": { "message": "Zostaniesz powiadomiony po zatwierdzeniu prośby" }, "needAnotherOptionV1": { - "message": "Potrzebujesz innego sposobu?" + "message": "Potrzebujesz innej opcji?" }, "loginInitiated": { "message": "Logowanie rozpoczęte" @@ -3408,17 +3460,20 @@ "logInRequestSent": { "message": "Żądanie wysłane" }, + "masterPasswordChanged": { + "message": "Hasło główne zostało zapisane" + }, "exposedMasterPassword": { - "message": "Ujawnione hasło główne" + "message": "Hasło główne zostało ujawnione" }, "exposedMasterPasswordDesc": { "message": "Hasło ujawnione w wyniku naruszenia ochrony danych. Użyj unikalnego hasła, aby chronić swoje konto. Czy na pewno chcesz użyć ujawnionego hasła?" }, "weakAndExposedMasterPassword": { - "message": "Słabe i ujawnione hasło główne" + "message": "Hasło główne jest słabe i ujawnione" }, "weakAndBreachedMasterPasswordDesc": { - "message": "Słabe hasło ujawnione w wyniku naruszenia ochrony danych. Użyj silnego i unikalnego hasła, aby chronić swoje konto. Czy na pewno chcesz użyć tego hasła?" + "message": "Hasło jest słabe i zostało ujawnione w wycieku danych. Użyj mocnego i unikalnego hasła, aby chronić konto. Czy na pewno chcesz użyć tego hasła?" }, "checkForBreaches": { "message": "Sprawdź znane naruszenia ochrony danych tego hasła" @@ -3427,7 +3482,7 @@ "message": "Ważne:" }, "masterPasswordHint": { - "message": "Twoje hasło główne nie może zostać odzyskane, jeśli je zapomnisz!" + "message": "Zapomniane hasło główne nie może zostać odzyskane!" }, "characterMinimum": { "message": "Minimum znaków: $LENGTH$", @@ -3445,7 +3500,7 @@ "message": "Jak autouzupełniać" }, "autofillSelectInfoWithCommand": { - "message": "Wybierz element z tego ekranu, użyj skrótu $COMMAND$ lub zobacz inne opcje w ustawieniach.", + "message": "Wybierz element, użyj skrótu $COMMAND$ lub zobacz inne opcje w ustawieniach.", "placeholders": { "command": { "content": "$1", @@ -3457,7 +3512,7 @@ "message": "Wybierz element z tego ekranu lub zobacz inne opcje w ustawieniach." }, "gotIt": { - "message": "Rozumiem" + "message": "Ok" }, "autofillSettings": { "message": "Ustawienia autouzupełniania" @@ -3472,13 +3527,13 @@ "message": "Zarządzaj skrótami" }, "autofillShortcut": { - "message": "Skrót klawiaturowy autouzupełniania" + "message": "Skrót klawiszowy autouzupełniania" }, "autofillLoginShortcutNotSet": { "message": "Skrót autouzupełniania nie jest ustawiony. Zmień to w ustawieniach przeglądarki." }, "autofillLoginShortcutText": { - "message": "Skrót autouzupełniania to: $COMMAND$. Zmień to w ustawieniach przeglądarki.", + "message": "Skrót autouzupełniania to $COMMAND$. Zmień skróty w ustawieniach przeglądarki.", "placeholders": { "command": { "content": "$1", @@ -3511,7 +3566,7 @@ "message": "Wybierz opcję zatwierdzenia poniżej" }, "rememberThisDevice": { - "message": "Zapamiętaj to urządzenie" + "message": "Zapamiętaj urządzenie" }, "uncheckIfPublicDevice": { "message": "Odznacz, jeśli używasz publicznego urządzenia" @@ -3522,6 +3577,12 @@ "requestAdminApproval": { "message": "Poproś administratora o zatwierdzenie" }, + "unableToCompleteLogin": { + "message": "Nie można ukończyć logowania" + }, + "loginOnTrustedDeviceOrAskAdminToAssignPassword": { + "message": "Musisz zalogować się na zaufanym urządzeniu lub poprosić administratora o przypisanie hasła." + }, "ssoIdentifierRequired": { "message": "Identyfikator organizacji jest wymagany." }, @@ -3538,13 +3599,13 @@ "message": "i kontynuuj tworzenie konta." }, "noEmail": { - "message": "Brak wiadomości e-mail?" + "message": "Brak wiadomości?" }, "goBack": { "message": "Wróć" }, "toEditYourEmailAddress": { - "message": "aby edytować swój adres e-mail." + "message": ", aby edytować adres e-mail." }, "eu": { "message": "UE", @@ -3560,7 +3621,7 @@ "message": "Wyświetl" }, "accountSuccessfullyCreated": { - "message": "Konto pomyślnie utworzone!" + "message": "Konto zostało utworzone!" }, "adminApprovalRequested": { "message": "Poproszono administratora o zatwierdzenie" @@ -3569,10 +3630,10 @@ "message": "Twoja prośba została wysłana do Twojego administratora." }, "troubleLoggingIn": { - "message": "Problem z zalogowaniem?" + "message": "Problem z logowaniem?" }, "loginApproved": { - "message": "Logowanie zatwierdzone" + "message": "Logowanie zostało potwierdzone" }, "userEmailMissing": { "message": "Brak adresu e-mail użytkownika" @@ -3602,25 +3663,17 @@ "message": "Dla zapewnienia bezpieczeństwa konta kontynuuj tylko wtedy, gdy jesteś członkiem tej organizacji, włączono odzyskiwanie konta, a odcisk palca wyświetlany poniżej pasuje do odcisku palca organizacji." }, "orgTrustWarning1": { - "message": "Polityka korporacyjna tej organizacji umożliwia zapisanie Cię do programu odzyskiwania kont. Rejestracja umożliwi administratorom organizacji zmianę Twojego hasła. Możesz kontynuować tylko wtedy, gdy znasz tę organizację, a odcisk palca pokazany poniżej pasuje do odcisku palca tej organizacji." + "message": "Zasada organizacji pozwala administratorom organizacji na zmianę Twojego hasła. Kontynuuj tylko wtedy, gdy rozpoznajesz organizację, a unikalny identyfikator pasuje do organizacji." }, "trustUser": { "message": "Zaufaj użytkownikowi" }, - "sendsNoItemsTitle": { - "message": "Brak aktywnych wysyłek", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendsNoItemsMessage": { - "message": "Użyj wysyłki, aby bezpiecznie dzielić się zaszyfrowanymi informacjami ze wszystkimi.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "sendsTitleNoItems": { - "message": "Wysyłaj bezpiecznie poufne informacje", + "message": "Wysyłaj poufne informacje w bezpieczny sposób", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "sendsBodyNoItems": { - "message": "Udostępniaj pliki i dane bezpiecznie każdemu, na każdej platformie. Twoje dane pozostaną zaszyfrowane end-to-end przy jednoczesnym ograniczeniu narażenia.", + "message": "Udostępniaj pliki i teksty każdemu, na dowolnej platformie. Informacje będę szyfrowane end-to-end, zapewniając poufność.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "inputRequired": { @@ -3633,7 +3686,7 @@ "message": "Szukaj" }, "inputMinLength": { - "message": "Dane wejściowe muszą zawierać co najmniej $COUNT$ znaki(-ów).", + "message": "Dane wejściowe muszą składać się z co najmniej $COUNT$ znaków.", "placeholders": { "count": { "content": "$1", @@ -3678,17 +3731,17 @@ } }, "multipleInputEmails": { - "message": "Co najmniej 1 e-mail jest nieprawidłowy" + "message": "Co najmniej 1 adres e-mail jest nieprawidłowy" }, "inputTrimValidator": { "message": "Tekst nie może zawierać tylko spacji.", "description": "Notification to inform the user that a form's input can't contain only whitespace." }, "inputEmail": { - "message": "Dane wejściowe nie są adresem e-mail." + "message": "To nie jest adres e-mail." }, "fieldsNeedAttention": { - "message": "Pola powyżej wymagające Twojej uwagi: $COUNT$.", + "message": "Pola wymagające uwagi: $COUNT$.", "placeholders": { "count": { "content": "$1", @@ -3697,10 +3750,10 @@ } }, "singleFieldNeedsAttention": { - "message": "1 pole wymaga Twojej uwagi." + "message": "1 pole wymaga uwagi." }, "multipleFieldsNeedAttention": { - "message": "Pola wymagające Twojej uwagi: $COUNT$.", + "message": "Pola wymagające uwagi: $COUNT$.", "placeholders": { "count": { "content": "$1", @@ -3718,7 +3771,7 @@ "message": "Pobieranie opcji..." }, "multiSelectNotFound": { - "message": "Nie znaleziono żadnych pozycji" + "message": "Nie znaleziono elementów" }, "multiSelectClearAll": { "message": "Wyczyść wszystko" @@ -3777,7 +3830,7 @@ "description": "Text to display in overlay when the account is locked." }, "unlockYourAccountToViewAutofillSuggestions": { - "message": "Odblokuj swoje konto, aby zobaczyć sugestie autouzupełniania", + "message": "Odblokuj konto, aby zobaczyć sugestie autouzupełniania", "description": "Text to display in overlay when the account is locked." }, "unlockAccount": { @@ -3789,7 +3842,7 @@ "description": "Screen reader text (aria-label) for unlock account button in overlay" }, "totpCodeAria": { - "message": "Kod weryfikacyjny jednorazowego hasła oparty na czasie", + "message": "Kod weryfikacyjny TOTP", "description": "Aria label for the totp code displayed in the inline menu for autofill" }, "totpSecondsSpanAria": { @@ -3797,7 +3850,7 @@ "description": "Aria label for the totp seconds displayed in the inline menu for autofill" }, "fillCredentialsFor": { - "message": "Wypełnij dane logowania dla", + "message": "Uzupełnij dane logowania dla", "description": "Screen reader text for when overlay item is in focused" }, "partialUsername": { @@ -3841,7 +3894,7 @@ "description": "Screen reader text (aria-label) for new identity button within inline menu" }, "bitwardenOverlayMenuAvailable": { - "message": "Dostępne menu autouzupełniania Bitwarden. Naciśnij przycisk strzałki w dół, aby wybrać.", + "message": "Dostępne menu autouzupełniania Bitwarden. Kliknij strzałkę w dół, aby wybrać.", "description": "Screen reader text for announcing when the overlay opens on the page" }, "turnOn": { @@ -3855,7 +3908,7 @@ "description": "Used for the header of the import dialog, the import button and within the file-password-prompt" }, "importError": { - "message": "Błąd importu" + "message": "Błąd importowania" }, "importErrorDesc": { "message": "Wystąpił problem z danymi, które chcesz zaimportować. Rozwiąż poniższe problemy w Twoim pliku i spróbuj ponownie." @@ -3867,7 +3920,7 @@ "message": "Opis" }, "importSuccess": { - "message": "Importowanie danych zakończone sukcesem" + "message": "Dane zostały zaimportowane" }, "importSuccessNumberOfItems": { "message": "Zaimportowano elementów: $AMOUNT$.", @@ -3885,10 +3938,10 @@ "message": "Weryfikacja dla tej akcji jest wymagana. Ustaw kod PIN, aby kontynuować." }, "setPin": { - "message": "Ustaw PIN" + "message": "Ustaw kod PIN" }, "verifyWithBiometrics": { - "message": "Weryfikuj za pomocą biometrii" + "message": "Zweryfikuj biometrią" }, "awaitingConfirmation": { "message": "Oczekiwanie na potwierdzenie" @@ -3903,16 +3956,16 @@ "message": "Użyj hasła głównego" }, "usePin": { - "message": "Użyj PINu" + "message": "Użyj kodu PIN" }, "useBiometrics": { "message": "Użyj biometrii" }, "enterVerificationCodeSentToEmail": { - "message": "Wpisz kod weryfikacyjny, który został wysłany na adres e-mail." + "message": "Wpisz kod weryfikacyjny wysłany na adres e-mail." }, "resendCode": { - "message": "Wysłać kod ponownie" + "message": "Wyślij ponownie kod" }, "total": { "message": "Łącznie" @@ -3927,16 +3980,16 @@ } }, "duoHealthCheckResultsInNullAuthUrlError": { - "message": "Wystąpił błąd podczas połączenia z usługą Duo. Aby uzyskać pomoc, użyj innej metody dwustopniowego logowania lub skontaktuj się z Duo." + "message": "Wystąpił błąd podczas połączenia z usługą Duo. Użyj innej metody logowania dwustopniowego lub skontaktuj się z Duo w celu uzyskania pomocy." }, "duoRequiredForAccount": { - "message": "Dwustopniowe logowanie Duo jest wymagane dla Twojego konta." + "message": "Konto wymaga logowania dwustopniowego Duo." }, "popoutExtension": { "message": "Otwórz rozszerzenie w nowym oknie" }, "launchDuo": { - "message": "Uruchom DUO" + "message": "Uruchom Duo" }, "importFormatError": { "message": "Dane nie są poprawnie sformatowane. Sprawdź importowany plik i spróbuj ponownie." @@ -3988,7 +4041,7 @@ "message": "Nie wybrano pliku" }, "orCopyPasteFileContents": { - "message": "lub skopiuj/wklej treść pliku" + "message": "lub wklej zawartość pliku" }, "instructionsFor": { "message": "Instrukcja dla $NAME$", @@ -4016,7 +4069,7 @@ "message": "Klucz dostępu" }, "accessing": { - "message": "Uzyskiwanie dostępu" + "message": "Logowanie na" }, "loggedInExclamation": { "message": "Zalogowano!" @@ -4025,28 +4078,28 @@ "message": "Klucz dostępu nie zostanie skopiowany" }, "passkeyNotCopiedAlert": { - "message": "Klucz dostępu nie zostanie skopiowany do sklonowanego elementu. Czy chcesz kontynuować klonowanie tego elementu?" + "message": "Klucz dostępu nie zostanie skopiowany do sklonowanego elementu. Czy chcesz kontynuować klonowanie elementu?" }, "passkeyFeatureIsNotImplementedForAccountsWithoutMasterPassword": { "message": "Weryfikacja jest wymagana przez stronę inicjującą. Ta funkcja nie jest jeszcze zaimplementowana dla kont bez hasła głównego." }, "logInWithPasskeyQuestion": { - "message": "Zalogować za pomocą klucza dostępu?" + "message": "Zalogować się kluczem dostępu?" }, "passkeyAlreadyExists": { - "message": "Klucz dostępu już istnieje dla tej aplikacji." + "message": "Klucz dostępu dla tej aplikacji już istnieje." }, "noPasskeysFoundForThisApplication": { "message": "Nie znaleziono klucza dostępu dla tej aplikacji." }, "noMatchingPasskeyLogin": { - "message": "Nie masz pasujących danych logowania do tej witryny." + "message": "Brak pasujących danych logowania do tej strony." }, "noMatchingLoginsForSite": { - "message": "Brak pasujących loginów dla tej witryny" + "message": "Brak pasujących danych logowania dla tej strony" }, "searchSavePasskeyNewLogin": { - "message": "Wyszukaj albo zapisz klucz dostępu jako nowy login" + "message": "Wyszukaj albo zapisz klucz dostępu jako nowe dane logowania" }, "confirm": { "message": "Potwierdź" @@ -4070,7 +4123,7 @@ "message": "Zastąpić klucz dostępu?" }, "overwritePasskeyAlert": { - "message": "Ten element zawiera już klucz dostępu. Czy na pewno chcesz nadpisać bieżący klucza dostępu?" + "message": "Element zawiera już klucz dostępu. Czy na pewno chcesz zastąpić obecny klucz dostępu?" }, "featureNotSupported": { "message": "Funkcja nie jest jeszcze obsługiwana" @@ -4088,13 +4141,13 @@ "message": "Nieprawidłowa nazwa użytkownika lub hasło" }, "incorrectPassword": { - "message": "Błędne hasło" + "message": "Hasło jest nieprawidłowe" }, "incorrectCode": { - "message": "Błędny kod" + "message": "Kod jest nieprawidłowy" }, "incorrectPin": { - "message": "Niepoprawny PIN" + "message": "Kod PIN jest nieprawidłowy" }, "multifactorAuthenticationFailed": { "message": "Uwierzytelnianie wieloskładnikowe nie powiodło się" @@ -4103,7 +4156,7 @@ "message": "Dołącz udostępnione foldery" }, "lastPassEmail": { - "message": "E-mail LastPass" + "message": "Adres e-mail LastPass" }, "importingYourAccount": { "message": "Importowanie konta..." @@ -4127,7 +4180,7 @@ "message": "Wymagane uwierzytelnianie LastPass" }, "awaitingSSO": { - "message": "Oczekiwanie na uwierzytelnianie SSO" + "message": "Oczekiwanie na logowanie jednokrotne" }, "awaitingSSODesc": { "message": "Kontynuuj logowanie przy użyciu danych firmowych." @@ -4149,7 +4202,7 @@ "message": "Kolekcja" }, "lastPassYubikeyDesc": { - "message": "Włóż YubiKey powiązany z Twoim kontem LastPass do portu USB komputera, a następnie naciśnij jego przycisk." + "message": "Włóż klucz YubiKey powiązany z kontem LastPass do portu USB urządzenia, a następnie dotknij jego przycisku." }, "switchAccount": { "message": "Przełącz konto" @@ -4197,7 +4250,7 @@ "message": "Zawsze dla tej witryny" }, "domainAddedToExcludedDomains": { - "message": "$DOMAIN$ dodana do wykluczonych domen.", + "message": "Domena $DOMAIN$ została dodana do wykluczonych domen.", "placeholders": { "domain": { "content": "$1", @@ -4209,32 +4262,52 @@ "message": "Popularne formaty", "description": "Label indicating the most common import formats" }, + "uriMatchDefaultStrategyHint": { + "message": "Wykrywanie URI polega na tym, jak Bitwarden identyfikuje sugestie autouzupełniania.", + "description": "Explains to the user that URI match detection determines how Bitwarden suggests autofill options, and clarifies that this default strategy applies when no specific match detection is set for a login item." + }, + "regExAdvancedOptionWarning": { + "message": "„Wyrażenie regularne” jest zaawansowaną opcją zwiększającą ryzyko ujawnienia danych logowania.", + "description": "Content for dialog which warns a user when selecting 'regular expression' matching strategy as a cipher match strategy" + }, + "startsWithAdvancedOptionWarning": { + "message": "„Rozpoczyna się od” jest zaawansowaną opcją zwiększającą ryzyko ujawnienia danych logowania.", + "description": "Content for dialog which warns a user when selecting 'starts with' matching strategy as a cipher match strategy" + }, + "uriMatchWarningDialogLink": { + "message": "Dowiedz się więcej o wykrywaniu dopasowania", + "description": "Link to match detection docs on warning dialog for advance match strategy" + }, + "uriAdvancedOption": { + "message": "Ustawienia zaawansowane", + "description": "Advanced option placeholder for uri option component" + }, "confirmContinueToBrowserSettingsTitle": { - "message": "Kontynuować do ustawień przeglądarki?", + "message": "Przejść do ustawień przeglądarki?", "description": "Title for dialog which asks if the user wants to proceed to a relevant browser settings page" }, "confirmContinueToHelpCenter": { - "message": "Kontynuować do centrum pomocy?", + "message": "Przejść do centrum pomocy?", "description": "Title for dialog which asks if the user wants to proceed to a relevant Help Center page" }, "confirmContinueToHelpCenterPasswordManagementContent": { - "message": "Zmień ustawienia autouzupełniania przeglądarki i zarządzania hasłami.", + "message": "Zmień ustawienia autouzupełniania i haseł przeglądarki.", "description": "Body content for dialog which asks if the user wants to proceed to the Help Center's page about browser password management settings" }, "confirmContinueToHelpCenterKeyboardShortcutsContent": { - "message": "Możesz przeglądać i ustawiać skróty klawiaturowe rozszerzeń w ustawieniach przeglądarki.", + "message": "Możesz zmieniać skróty rozszerzenia w ustawieniach przeglądarki.", "description": "Body content for dialog which asks if the user wants to proceed to the Help Center's page about browser keyboard shortcut settings" }, "confirmContinueToBrowserPasswordManagementSettingsContent": { - "message": "Zmień ustawienia autouzupełniania przeglądarki i zarządzania hasłami.", + "message": "Zmień ustawienia autouzupełniania i haseł przeglądarki.", "description": "Body content for dialog which asks if the user wants to proceed to the browser's password management settings page" }, "confirmContinueToBrowserKeyboardShortcutSettingsContent": { - "message": "Możesz przeglądać i ustawiać skróty klawiaturowe rozszerzeń w ustawieniach przeglądarki.", + "message": "Możesz zmieniać skróty rozszerzenia w ustawieniach przeglądarki.", "description": "Body content for dialog which asks if the user wants to proceed to the browser's keyboard shortcut settings page" }, "overrideDefaultBrowserAutofillTitle": { - "message": "Czy Bitwarden ma być domyślnym menadżerem haseł?", + "message": "Czy ustawić Bitwarden jako domyślny menadżer haseł?", "description": "Dialog title facilitating the ability to override a chrome browser's default autofill behavior" }, "overrideDefaultBrowserAutofillDescription": { @@ -4258,7 +4331,7 @@ "description": "Button text for the setting that allows overriding the default browser autofill settings" }, "saveCipherAttemptSuccess": { - "message": "Pomyślnie zapisano dane logowania!", + "message": "Dane logowania zostały zapisane!", "description": "Notification message for when saving credentials has succeeded." }, "passwordSaved": { @@ -4266,7 +4339,7 @@ "description": "Notification message for when saving credentials has succeeded." }, "updateCipherAttemptSuccess": { - "message": "Pomyślnie zaktualizowano dane logowania!", + "message": "Dane logowania zostały zaktualizowane!", "description": "Notification message for when updating credentials has succeeded." }, "passwordUpdated": { @@ -4274,7 +4347,7 @@ "description": "Notification message for when updating credentials has succeeded." }, "saveCipherAttemptFailed": { - "message": "Błąd podczas zapisywania danych logowania. Sprawdź konsolę, aby uzyskać szczegóły.", + "message": "Wystąpił błąd podczas zapisywania danych logowania. Sprawdź konsolę, aby sprawdzić szczegóły.", "description": "Notification message for when saving credentials has failed." }, "success": { @@ -4293,19 +4366,19 @@ "message": "Sugerowane elementy" }, "autofillSuggestionsTip": { - "message": "Zapisz element logowania dla tej witryny, aby automatycznie wypełnić" + "message": "Zapisz dane logowania" }, "yourVaultIsEmpty": { - "message": "Twój sejf jest pusty" + "message": "Sejf jest pusty" }, "noItemsMatchSearch": { - "message": "Żaden element nie pasuje do Twojego wyszukiwania" + "message": "Brak pasujących elementów" }, "clearFiltersOrTryAnother": { "message": "Wyczyść filtry lub użyj innej frazy" }, "copyInfoTitle": { - "message": "Skopiuj informacje - $ITEMNAME$", + "message": "Kopiuj informacje - $ITEMNAME$", "description": "Title for a button that opens a menu with options to copy information from an item.", "placeholders": { "itemname": { @@ -4315,7 +4388,7 @@ } }, "copyNoteTitle": { - "message": "Skopiuj notatkę - $ITEMNAME$", + "message": "Kopiuj notatkę - $ITEMNAME$", "description": "Title for a button copies a note to the clipboard.", "placeholders": { "itemname": { @@ -4345,7 +4418,7 @@ } }, "viewItemTitle": { - "message": "Zobacz element - $ITEMNAME$", + "message": "Pokaż element - $ITEMNAME$", "description": "Title for a link that opens a view for an item.", "placeholders": { "itemname": { @@ -4355,7 +4428,7 @@ } }, "viewItemTitleWithField": { - "message": "Zobacz element - $ITEMNAME$ - $FIELD$", + "message": "Pokaż element - $ITEMNAME$ - $FIELD$", "description": "Title for a link that opens a view for an item.", "placeholders": { "itemname": { @@ -4369,7 +4442,7 @@ } }, "autofillTitle": { - "message": "Autouzupełnij - $ITEMNAME$", + "message": "Uzupełnij - $ITEMNAME$", "description": "Title for a button that autofills a login item.", "placeholders": { "itemname": { @@ -4379,7 +4452,7 @@ } }, "autofillTitleWithField": { - "message": "Autouzupełnij - $ITEMNAME$ - $FIELD$", + "message": "Uzupełnij - $ITEMNAME$ - $FIELD$", "description": "Title for a button that autofills a login item.", "placeholders": { "itemname": { @@ -4413,16 +4486,16 @@ "message": "Przypisz do kolekcji" }, "copyEmail": { - "message": "Skopiuj e-mail" + "message": "Kopiuj adres e-mail" }, "copyPhone": { - "message": "Skopiuj telefon" + "message": "Kopiuj numer telefonu" }, "copyAddress": { - "message": "Skopiuj adres" + "message": "Kopiuj adres" }, "adminConsole": { - "message": "Konsola Administracyjna" + "message": "Konsola administratora" }, "accountSecurity": { "message": "Bezpieczeństwo konta" @@ -4440,7 +4513,7 @@ "message": "Wystąpił błąd podczas przypisywania folderu." }, "viewItemsIn": { - "message": "Zobacz elementy w $NAME$", + "message": "Pokaż elementy w $NAME$", "description": "Button to view the contents of a folder or collection", "placeholders": { "name": { @@ -4460,7 +4533,7 @@ } }, "new": { - "message": "Nowy" + "message": "Nowy element" }, "removeItem": { "message": "Usuń $NAME$", @@ -4473,7 +4546,7 @@ } }, "itemsWithNoFolder": { - "message": "Elementy bez folderu" + "message": "Nieprzypisane" }, "itemDetails": { "message": "Szczegóły elementu" @@ -4501,19 +4574,19 @@ "message": "Historia elementu" }, "lastEdited": { - "message": "Ostatnio edytowany" + "message": "Zaktualizowano" }, "ownerYou": { "message": "Właściciel: Ty" }, "linked": { - "message": "Powiązane" + "message": "Powiązane pole" }, "copySuccessful": { - "message": "Kopiowanie zakończone sukcesem" + "message": "Skopiowano" }, "upload": { - "message": "Wyślij" + "message": "Prześlij" }, "addAttachment": { "message": "Dodaj załącznik" @@ -4558,7 +4631,7 @@ "message": "Uzyskaj dostęp do sejfu bez przeglądarki, a następnie ustaw odblokowanie biometryczne, aby przyspieszyć odblokowanie zarówno w aplikacji desktopowej, jak i w rozszerzeniu przeglądarki." }, "downloadFromBitwardenNow": { - "message": "Pobierz teraz z bitwarden.com" + "message": "Pobierz z bitwarden.com" }, "getItOnGooglePlay": { "message": "Pobierz z Google Play" @@ -4567,7 +4640,7 @@ "message": "Pobierz z App Store" }, "permanentlyDeleteAttachmentConfirmation": { - "message": "Czy na pewno chcesz trwale usunąć ten załącznik?" + "message": "Czy na pewno chcesz usunąć trwale załącznik?" }, "premium": { "message": "Premium" @@ -4597,7 +4670,7 @@ "message": "Dane osobowe" }, "identification": { - "message": "Tożsamość" + "message": "Identyfikacja" }, "contactInfo": { "message": "Daje kontaktowe" @@ -4638,7 +4711,7 @@ } }, "websiteAdded": { - "message": "Strona dodana" + "message": "Strona internetowa została dodana" }, "addWebsite": { "message": "Dodaj stronę internetową" @@ -4647,7 +4720,7 @@ "message": "Usuń stronę internetową" }, "defaultLabel": { - "message": "Domyślnie ($VALUE$)", + "message": "Domyślne ($VALUE$)", "description": "A label that indicates the default value for a field with the current default value in parentheses.", "placeholders": { "value": { @@ -4657,7 +4730,7 @@ } }, "showMatchDetection": { - "message": "Pokaż wykrywanie dopasowań $WEBSITE$", + "message": "Pokaż wykrywanie dopasowania $WEBSITE$", "placeholders": { "website": { "content": "$1", @@ -4666,7 +4739,7 @@ } }, "hideMatchDetection": { - "message": "Ukryj wykrywanie dopasowań $WEBSITE$", + "message": "Ukryj wykrywanie dopasowania $WEBSITE$", "placeholders": { "website": { "content": "$1", @@ -4675,7 +4748,7 @@ } }, "autoFillOnPageLoad": { - "message": "Włącz autouzupełnianie po załadowaniu strony?" + "message": "Włączyć autouzupełnianie po załadowaniu strony?" }, "cardExpiredTitle": { "message": "Karta wygasła" @@ -4705,7 +4778,7 @@ "message": "Dodaj konto" }, "loading": { - "message": "Wczytywanie" + "message": "Ładowanie" }, "data": { "message": "Dane" @@ -4719,7 +4792,7 @@ "description": "A section header for a list of passwords." }, "logInWithPasskeyAriaLabel": { - "message": "Zaloguj się za pomocą klucza dostępu", + "message": "Logowaniem kluczem dostępu", "description": "ARIA label for the inline menu button that logs in with a passkey." }, "assign": { @@ -4750,7 +4823,7 @@ "message": "Dodaj" }, "fieldType": { - "message": "Typ pola" + "message": "Rodzaj pola" }, "fieldLabel": { "message": "Etykieta pola" @@ -4833,7 +4906,7 @@ "message": "Wybierz kolekcje do przypisania" }, "personalItemTransferWarningSingular": { - "message": "1 element zostanie trwale przeniesiony do wybranej organizacji. Nie będziesz już posiadać tego elementu." + "message": "Element zostanie przeniesiony do organizacji. Nie będziesz już właścicielem elementu." }, "personalItemsTransferWarningPlural": { "message": "$PERSONAL_ITEMS_COUNT$ elementów zostanie trwale przeniesionych do wybranej organizacji. Nie będziesz już posiadać tych elementów.", @@ -4845,7 +4918,7 @@ } }, "personalItemWithOrgTransferWarningSingular": { - "message": "1 przedmiot zostanie trwale przeniesiony do $ORG$. Nie będziesz już posiadać tego przedmiotu.", + "message": "Element zostanie przeniesiony do organizacji $ORG$. Nie będziesz już właścicielem elementu.", "placeholders": { "org": { "content": "$1", @@ -4867,13 +4940,13 @@ } }, "successfullyAssignedCollections": { - "message": "Pomyślnie przypisano kolekcje" + "message": "Przypisano kolekcje" }, "nothingSelected": { "message": "Nie zaznaczyłeś żadnych elementów." }, "itemsMovedToOrg": { - "message": "Elementy przeniesione do $ORGNAME$", + "message": "Elementy zostały przeniesione do organizacji $ORGNAME$", "placeholders": { "orgname": { "content": "$1", @@ -4882,7 +4955,7 @@ } }, "itemMovedToOrg": { - "message": "Element przeniesiony do $ORGNAME$", + "message": "Element został przeniesiony do organizacji $ORGNAME$", "placeholders": { "orgname": { "content": "$1", @@ -4911,13 +4984,13 @@ "message": "Lokalizacja elementu" }, "fileSend": { - "message": "Wysyłka pliku" + "message": "Plik wysyłki" }, "fileSends": { "message": "Wysyłki plików" }, "textSend": { - "message": "Wysyłka tekstu" + "message": "Tekst wysyłki" }, "textSends": { "message": "Wysyłki tekstów" @@ -4926,16 +4999,16 @@ "message": "Akcje konta" }, "showNumberOfAutofillSuggestions": { - "message": "Pokaż liczbę sugestii autouzupełniania logowania na ikonie rozszerzenia" + "message": "Pokaż liczbę sugestii autouzupełniania na ikonie rozszerzenia" }, "showQuickCopyActions": { - "message": "Pokaż akcje szybkiego kopiowania w Sejfie" + "message": "Pokaż akcje szybkiego kopiowania w sejfie" }, "systemDefault": { "message": "Domyślny systemu" }, "enterprisePolicyRequirementsApplied": { - "message": "Do tego ustalenia zastosowano wymogi polityki przedsiębiorstw" + "message": "Zastosowano wymagania zasady organizacji" }, "sshPrivateKey": { "message": "Klucz prywatny" @@ -4944,28 +5017,28 @@ "message": "Klucz publiczny" }, "sshFingerprint": { - "message": "Odcisk palca" + "message": "Odcisk klucza" }, "sshKeyAlgorithm": { - "message": "Typ klucza" + "message": "Rodzaj klucza" }, "sshKeyAlgorithmED25519": { "message": "ED25519" }, "sshKeyAlgorithmRSA2048": { - "message": "RSA 2048-bitowy" + "message": "RSA 2048-bit" }, "sshKeyAlgorithmRSA3072": { - "message": "RSA 3072-bitowy" + "message": "RSA 3072-bit" }, "sshKeyAlgorithmRSA4096": { - "message": "RSA 4096-bitowy" + "message": "RSA 4096-bit" }, "retry": { "message": "Powtórz" }, "vaultCustomTimeoutMinimum": { - "message": "Minimalny limit czasu niestandardowego wynosi 1 minutę." + "message": "Minimalny niestandardowy czas to 1 minuta." }, "additionalContentAvailable": { "message": "Dostępna jest dodatkowa zawartość" @@ -5001,22 +5074,22 @@ "message": "Nie masz uprawnień do edycji tego elementu" }, "biometricsStatusHelptextUnlockNeeded": { - "message": "Odblokowanie odciskiem palca jest niedostępne, ponieważ najpierw wymagane jest odblokowanie kodem PIN lub hasłem." + "message": "Odblokowanie biometrią jest niedostępne, ponieważ najpierw wymagane jest odblokowanie kodem PIN lub hasłem." }, "biometricsStatusHelptextHardwareUnavailable": { - "message": "Odblokowanie biometryczne jest obecnie niedostępne." + "message": "Odblokowanie biometrią jest obecnie niedostępne." }, "biometricsStatusHelptextAutoSetupNeeded": { - "message": "Odblokowanie biometryczne jest niedostępne z powodu nieprawidłowej konfiguracji plików systemowych." + "message": "Odblokowanie biometrią jest niedostępne z powodu nieprawidłowej konfiguracji plików systemowych." }, "biometricsStatusHelptextManualSetupNeeded": { - "message": "Odblokowanie biometryczne jest niedostępne z powodu nieprawidłowej konfiguracji plików systemowych." + "message": "Odblokowanie biometrią jest niedostępne z powodu nieprawidłowej konfiguracji plików systemowych." }, "biometricsStatusHelptextDesktopDisconnected": { - "message": "Odblokowanie odciskiem palca jest niedostępne, ponieważ aplikacja desktopowa Bitwarden jest zamknięta." + "message": "Odblokowanie biometrią jest niedostępne z powodu zamkniętej aplikacji desktopowej Bitwarden." }, "biometricsStatusHelptextNotEnabledInDesktop": { - "message": "Odblokowanie biometryczne jest niedostępne, ponieważ nie jest włączone dla $EMAIL$ w aplikacji desktopowej Bitwarden.", + "message": "Odblokowanie biometrią jest niedostępne, ponieważ nie zostało włączone dla konta $EMAIL$ w aplikacji desktopowej Bitwarden.", "placeholders": { "email": { "content": "$1", @@ -5028,13 +5101,16 @@ "message": "Odblokowanie biometryczne jest obecnie niedostępne z nieznanego powodu." }, "unlockVault": { - "message": "Odblokuj swój sejf w kilka sekund" + "message": "Odblokuj sejf w kilka sekund" }, "unlockVaultDesc": { - "message": "Możesz dostosować ustawienia odblokowania i limitu czasu, aby szybciej uzyskać dostęp do sejfu." + "message": "Możesz dostosować sposób i czas blokowania sejfu, aby uzyskać szybszy dostęp do sejfu." }, "unlockPinSet": { - "message": "Ustaw kod PIN odblokowujący" + "message": "Kod PIN został ustawiony" + }, + "unlockWithBiometricSet": { + "message": "Odblokuj biometrią" }, "authenticating": { "message": "Uwierzytelnianie" @@ -5072,23 +5148,23 @@ "description": "Represents the @ key in screen reader content as a readable word" }, "hashSignCharacterDescriptor": { - "message": "Hashtag", + "message": "Kratka", "description": "Represents the # key in screen reader content as a readable word" }, "dollarSignCharacterDescriptor": { - "message": "Znak dolara", + "message": "Dolar", "description": "Represents the $ key in screen reader content as a readable word" }, "percentSignCharacterDescriptor": { - "message": "Znak procenta", + "message": "Procent", "description": "Represents the % key in screen reader content as a readable word" }, "caretCharacterDescriptor": { - "message": "Daszek", + "message": "Kareta", "description": "Represents the ^ key in screen reader content as a readable word" }, "ampersandCharacterDescriptor": { - "message": "Ampersand", + "message": "Et", "description": "Represents the & key in screen reader content as a readable word" }, "asteriskCharacterDescriptor": { @@ -5096,15 +5172,15 @@ "description": "Represents the * key in screen reader content as a readable word" }, "parenLeftCharacterDescriptor": { - "message": "Prawy nawias okrągły", + "message": "Lewy nawias", "description": "Represents the ( key in screen reader content as a readable word" }, "parenRightCharacterDescriptor": { - "message": "Prawy nawias okrągły", + "message": "Prawy nawias", "description": "Represents the ) key in screen reader content as a readable word" }, "hyphenCharacterDescriptor": { - "message": "Znak podkreślenia", + "message": "Podkreślnik", "description": "Represents the _ key in screen reader content as a readable word" }, "underscoreCharacterDescriptor": { @@ -5116,7 +5192,7 @@ "description": "Represents the + key in screen reader content as a readable word" }, "equalsCharacterDescriptor": { - "message": "Znak równości", + "message": "Równa się", "description": "Represents the = key in screen reader content as a readable word" }, "braceLeftCharacterDescriptor": { @@ -5136,11 +5212,11 @@ "description": "Represents the ] key in screen reader content as a readable word" }, "pipeCharacterDescriptor": { - "message": "Pionowa kreska", + "message": "Kreska pionowa", "description": "Represents the | key in screen reader content as a readable word" }, "backSlashCharacterDescriptor": { - "message": "Ukośnik wsteczny", + "message": "Ukośnik lewy", "description": "Represents the back slash key in screen reader content as a readable word" }, "colonCharacterDescriptor": { @@ -5160,11 +5236,11 @@ "description": "Represents the ' key in screen reader content as a readable word" }, "lessThanCharacterDescriptor": { - "message": "Mniejszy niż", + "message": "Mniej niż", "description": "Represents the < key in screen reader content as a readable word" }, "greaterThanCharacterDescriptor": { - "message": "Większy niż", + "message": "Więcej niż", "description": "Represents the > key in screen reader content as a readable word" }, "commaCharacterDescriptor": { @@ -5208,7 +5284,7 @@ "message": "Bardzo szerokie" }, "sshKeyWrongPassword": { - "message": "Wprowadzone hasło jest nieprawidłowe." + "message": "Hasło jest nieprawidłowe." }, "importSshKey": { "message": "Importuj" @@ -5217,22 +5293,22 @@ "message": "Potwierdź hasło" }, "enterSshKeyPasswordDesc": { - "message": "Wprowadź hasło dla klucza SSH." + "message": "Wpisz hasło klucza SSH." }, "enterSshKeyPassword": { - "message": "Wprowadź hasło" + "message": "Wpisz hasło" }, "invalidSshKey": { "message": "Klucz SSH jest nieprawidłowy" }, "sshKeyTypeUnsupported": { - "message": "Typ klucza SSH nie jest obsługiwany" + "message": "Ten klucz SSH nie jest obsługiwany" }, "importSshKeyFromClipboard": { "message": "Importuj klucz ze schowka" }, "sshKeyImported": { - "message": "Klucz SSH zaimportowano pomyślnie" + "message": "Klucz SSH został zaimportowany" }, "cannotRemoveViewOnlyCollections": { "message": "Nie można usunąć kolekcji z uprawnieniami tylko do przeglądania: $COLLECTIONS$", @@ -5244,13 +5320,13 @@ } }, "updateDesktopAppOrDisableFingerprintDialogTitle": { - "message": "Zaktualizuj aplikację na komputer" + "message": "Zaktualizuj aplikację desktopową" }, "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" + "message": "Zmień zagrożone hasło" }, "settingsVaultOptions": { "message": "Ustawienia Sejfu" @@ -5262,43 +5338,43 @@ "message": "Witaj w Bitwarden" }, "securityPrioritized": { - "message": "Bezpieczeństwo priorytetem" + "message": "Priorytetowe bezpieczeństwo" }, "securityPrioritizedBody": { - "message": "Zapisz dane logowania, karty i tożsamości w bezpiecznym sejfie. Bitwarden stosuje szyfrowanie end-to-end z wiedzą zerową, aby chronić to, co jest dla Ciebie ważne." + "message": "Zapisz dane logowania, karty i tożsamości w bezpiecznym sejfie. Bitwarden używa szyfrowania end-to-end w celu ochrony tego, co jest dla Ciebie ważne." }, "quickLogin": { "message": "Szybkie i łatwe logowanie" }, "quickLoginBody": { - "message": "Skonfiguruj odblokowanie i autouzupełnianie biometryczne, aby zalogować się na swoje konta bez wpisywania pojedynczej litery." + "message": "Skonfiguruj odblokowywanie biometryczne i autouzupełnianie, aby logować się do swoich kont bez wpisywania nawet jednej litery." }, "secureUser": { - "message": "Ulepsz swoje loginy" + "message": "Ulepsz swoje dane logowania" }, "secureUserBody": { - "message": "Użyj generatora do tworzenia i zapisywania silnych, unikalnych haseł dla wszystkich kont." + "message": "Użyj generatora, aby utworzyć i zapisać silne, unikalne hasła do wszystkich swoich kont." }, "secureDevices": { "message": "Twoje dane, kiedy i gdzie potrzebujesz" }, "secureDevicesBody": { - "message": "Zapisuj nieograniczoną liczbę haseł na nieograniczonej liczbie urządzeń dzięki aplikacjom Bitwarden na urządzenia mobilne, przeglądarki i komputery stacjonarne." + "message": "Zapisuj nieograniczoną liczbę haseł dzięki aplikacjom Bitwarden, które są dostępne na urządzeniach mobilnych, w przeglądarkach i na komputerach." }, "nudgeBadgeAria": { "message": "1 powiadomienie" }, "emptyVaultNudgeTitle": { - "message": "Importuj istniejące hasła" + "message": "Importuj obecne hasła" }, "emptyVaultNudgeBody": { - "message": "Użyj importera, aby szybko przenieść loginy do Bitwarden bez ręcznego dodawania ich." + "message": "Przenieś dane logowania do Bitwarden w sposób automatyczny." }, "emptyVaultNudgeButton": { "message": "Importuj teraz" }, "hasItemsVaultNudgeTitle": { - "message": "Witaj w Twoim Sejfie!" + "message": "Witaj w sejfie!" }, "hasItemsVaultNudgeBodyOne": { "message": "Autouzupełnianie elementów dla bieżącej strony" @@ -5307,23 +5383,23 @@ "message": "Ulubione elementy dla szybkiego dostępu" }, "hasItemsVaultNudgeBodyThree": { - "message": "Przeszukaj swój sejf w poszukiwaniu czegoś innego" + "message": "Przeszukaj sejf w poszukiwaniu czegoś innego" }, "newLoginNudgeTitle": { "message": "Oszczędzaj czas dzięki autouzupełnianiu" }, "newLoginNudgeBodyOne": { - "message": "Dołącz", + "message": "Dodaj", "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", "example": "Include a Website so this login appears as an autofill suggestion." }, "newLoginNudgeBodyBold": { - "message": "stronę internetową, ", + "message": "stronę internetową", "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", "example": "Include a Website so this login appears as an autofill suggestion." }, "newLoginNudgeBodyTwo": { - "message": "aby ten login pojawił się jako sugestia autouzupełniania.", + "message": ", aby dane logowania pojawiały się jako sugestia autouzupełniania.", "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", "example": "Include a Website so this login appears as an autofill suggestion." }, @@ -5331,25 +5407,25 @@ "message": "Bezproblemowe zamówienia online" }, "newCardNudgeBody": { - "message": "Z kartami łatwe autouzupełnianie formularzy płatności w sposób bezpieczny i dokładny." + "message": "Dzięki kartom możesz łatwo i bezpiecznie uzupełniać formularze płatności." }, "newIdentityNudgeTitle": { - "message": "Uprość tworzenie kont" + "message": "Łatwe tworzenie kont" }, "newIdentityNudgeBody": { - "message": "Z tożsamościami, szybko autouzupełnij długie formularze rejestracyjne lub kontaktowe." + "message": "Dzięki tożsamościom możesz szybko uzupełniać długie formularze rejestracyjne i kontaktowe." }, "newNoteNudgeTitle": { - "message": "Zachowaj bezpieczeństwo wrażliwych danych" + "message": "Chroń wrażliwe dane" }, "newNoteNudgeBody": { - "message": "Z notatkami bezpiecznie przechowuj dane szczególnie chronione, takie jak dane bankowe lub ubezpieczeniowe." + "message": "Dzięki notatkom możesz bezpiecznie przechowywać poufne dane, takie jak bankowe lub ubezpieczeniowe." }, "newSshNudgeTitle": { - "message": "Przyjazny dla deweloperów dostęp SSH" + "message": "Dostęp SSH przyjazny dla programistów" }, "newSshNudgeBodyOne": { - "message": "Przechowuj swoje klucze i połącz się z agentem SSH dla szybkiego, szyfrowanego uwierzytelniania.", + "message": "Przechowuj klucze i łącz się z agentem SSH w celu szybkiego, szyfrowanego uwierzytelniania.", "description": "Two part message", "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, @@ -5359,23 +5435,27 @@ "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, "generatorNudgeTitle": { - "message": "Szybko twórz hasła" + "message": "Szybkie tworzenie haseł" }, "generatorNudgeBodyOne": { - "message": "Łatwo twórz silne i unikalne hasła, klikając na", + "message": "Twórz silne i unikalne hasła, klikając przycisk", "description": "Two part message", "example": "Easily create strong and unique passwords by clicking on {icon} to help you keep your logins secure." }, "generatorNudgeBodyTwo": { - "message": ", aby pomóc Ci zachować bezpieczeństwo Twoich danych logowania.", + "message": ", aby zapewnić bezpieczeństwo danych logowania.", "description": "Two part message", "example": "Easily create strong and unique passwords by clicking on {icon} to help you keep your logins secure." }, "generatorNudgeBodyAria": { - "message": "Łatwo twórz silne i unikalne hasła, klikając na Wygeneruj Hasło, aby pomóc Ci zachować bezpieczeństwo Twoich danych logowania.", + "message": "Twórz silne i unikalne hasła, klikając przycisk Wygeneruj hasło, aby zapewnić bezpieczeństwo danych logowania.", "description": "Aria label for the body content of the generator nudge" }, "noPermissionsViewPage": { "message": "Nie masz uprawnień do przeglądania tej strony. Spróbuj zalogować się na inne konto." + }, + "wasmNotSupported": { + "message": "Zestaw WebAssembly nie jest obsługiwany w przeglądarce lub nie jest włączony. Do korzystania z aplikacji Bitwarden wymagany jest zestaw WebAssembre.", + "description": "'WebAssembly' is a technical term and should not be translated." } } diff --git a/apps/browser/src/_locales/pt_BR/messages.json b/apps/browser/src/_locales/pt_BR/messages.json index c0b83248edf..4d0e4148782 100644 --- a/apps/browser/src/_locales/pt_BR/messages.json +++ b/apps/browser/src/_locales/pt_BR/messages.json @@ -1173,6 +1173,12 @@ "message": "Ops! Não foi possível salvar isso. Tente digitar os detalhes manualmente.", "description": "Detailed error message shown when saving login details fails." }, + "changePasswordWarning": { + "message": "After changing your password, you will need to log in with your new password. Active sessions on other devices will be logged out within one hour." + }, + "accountRecoveryUpdateMasterPasswordSubtitle": { + "message": "Change your master password to complete account recovery." + }, "enableChangedPasswordNotification": { "message": "Pedir para atualizar os dados de login existentes" }, @@ -1365,8 +1371,8 @@ "featureUnavailable": { "message": "Funcionalidade Indisponível" }, - "encryptionKeyMigrationRequired": { - "message": "É necessário migrar sua chave de criptografia. Faça login através do cofre web para atualizar sua chave de criptografia." + "legacyEncryptionUnsupported": { + "message": "Legacy encryption is no longer supported. Please contact support to recover your account." }, "premiumMembership": { "message": "Assinatura Premium" @@ -1922,6 +1928,9 @@ "typeSshKey": { "message": "Chave SSH" }, + "typeNote": { + "message": "Note" + }, "newItemHeader": { "message": "Nova $TYPE$", "placeholders": { @@ -2153,8 +2162,8 @@ "setYourPinCode": { "message": "Defina o seu código PIN para desbloquear o Bitwarden. Suas configurações de PIN serão redefinidas se alguma vez você encerrar completamente toda a sessão do aplicativo." }, - "setYourPinCode1": { - "message": "O seu PIN será usado para desbloquear o Bitwarden em vez da sua senha mestra. O seu PIN será redefinido se terminar sessão completa do Bitwarden." + "setPinCode": { + "message": "You can use this PIN to unlock Bitwarden. Your PIN will be reset if you ever fully log out of the application." }, "pinRequired": { "message": "O código PIN é necessário." @@ -2204,6 +2213,9 @@ "useThisPassword": { "message": "Use esta senha" }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, "useThisUsername": { "message": "Use este nome de usuário" }, @@ -2481,6 +2493,12 @@ "personalOwnershipPolicyInEffectImports": { "message": "A política da organização bloqueou a importação de itens para o seu cofre." }, + "restrictCardTypeImport": { + "message": "Cannot import card item types" + }, + "restrictCardTypeImportDesc": { + "message": "A policy set by 1 or more organizations prevents you from importing cards to your vaults." + }, "domainsTitle": { "message": "Domínios", "description": "A category title describing the concept of web domains" @@ -2512,6 +2530,10 @@ "change": { "message": "Alterar" }, + "changePassword": { + "message": "Change password", + "description": "Change password button for browser at risk notification on login." + }, "changeButtonTitle": { "message": "Alterar senha - $ITEMNAME$", "placeholders": { @@ -2521,6 +2543,9 @@ } } }, + "atRiskPassword": { + "message": "At-risk password" + }, "atRiskPasswords": { "message": "Senhas em risco" }, @@ -2555,6 +2580,26 @@ } } }, + "atRiskChangePrompt": { + "message": "Your password for this site is at-risk. $ORGANIZATION$ has requested that you change it.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + }, + "description": "Notification body when a login triggers an at-risk password change request and the change password domain is known." + }, + "atRiskNavigatePrompt": { + "message": "$ORGANIZATION$ wants you to change this password because it is at-risk. Navigate to your account settings to change the password.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + }, + "description": "Notification body when a login triggers an at-risk password change request and no change password domain is provided." + }, "reviewAndChangeAtRiskPassword": { "message": "Revisar e alterar uma senha vulnerável" }, @@ -2674,6 +2719,10 @@ "message": "Todos os Sends", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "maxAccessCountReached": { + "message": "Max access count reached", + "description": "This text will be displayed after a Send has been accessed the maximum amount of times." + }, "hideTextByDefault": { "message": "Ocultar texto por padrão" }, @@ -2876,6 +2925,9 @@ "emailVerificationRequiredDesc": { "message": "Você precisa verificar o seu e-mail para usar este recurso. Você pode verificar seu e-mail no cofre web." }, + "masterPasswordSuccessfullySet": { + "message": "Master password successfully set" + }, "updatedMasterPassword": { "message": "Senha mestra atualizada" }, @@ -3408,6 +3460,9 @@ "logInRequestSent": { "message": "Pedido enviado" }, + "masterPasswordChanged": { + "message": "Master password saved" + }, "exposedMasterPassword": { "message": "Senha mestra comprometida" }, @@ -3522,6 +3577,12 @@ "requestAdminApproval": { "message": "Solicitar aprovação do administrador" }, + "unableToCompleteLogin": { + "message": "Unable to complete login" + }, + "loginOnTrustedDeviceOrAskAdminToAssignPassword": { + "message": "You need to log in on a trusted device or ask your administrator to assign you a password." + }, "ssoIdentifierRequired": { "message": "Identificador SSO da organização é necessário." }, @@ -3607,14 +3668,6 @@ "trustUser": { "message": "Trust user" }, - "sendsNoItemsTitle": { - "message": "Nenhum Send ativo", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendsNoItemsMessage": { - "message": "Use o Send para compartilhar informação criptografa com qualquer um.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "sendsTitleNoItems": { "message": "Send sensitive information safely", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -4209,6 +4262,26 @@ "message": "Formatos comuns", "description": "Label indicating the most common import formats" }, + "uriMatchDefaultStrategyHint": { + "message": "URI match detection is how Bitwarden identifies autofill suggestions.", + "description": "Explains to the user that URI match detection determines how Bitwarden suggests autofill options, and clarifies that this default strategy applies when no specific match detection is set for a login item." + }, + "regExAdvancedOptionWarning": { + "message": "\"Regular expression\" is an advanced option with increased risk of exposing credentials.", + "description": "Content for dialog which warns a user when selecting 'regular expression' matching strategy as a cipher match strategy" + }, + "startsWithAdvancedOptionWarning": { + "message": "\"Starts with\" is an advanced option with increased risk of exposing credentials.", + "description": "Content for dialog which warns a user when selecting 'starts with' matching strategy as a cipher match strategy" + }, + "uriMatchWarningDialogLink": { + "message": "More about match detection", + "description": "Link to match detection docs on warning dialog for advance match strategy" + }, + "uriAdvancedOption": { + "message": "Advanced options", + "description": "Advanced option placeholder for uri option component" + }, "confirmContinueToBrowserSettingsTitle": { "message": "Continuar nas configurações do navegador?", "description": "Title for dialog which asks if the user wants to proceed to a relevant browser settings page" @@ -5036,6 +5109,9 @@ "unlockPinSet": { "message": "Unlock PIN set" }, + "unlockWithBiometricSet": { + "message": "Unlock with biometrics set" + }, "authenticating": { "message": "Autenticando" }, @@ -5377,5 +5453,9 @@ }, "noPermissionsViewPage": { "message": "You do not have permissions to view this page. Try logging in with a different account." + }, + "wasmNotSupported": { + "message": "WebAssembly is not supported on your browser or is not enabled. WebAssembly is required to use the Bitwarden app.", + "description": "'WebAssembly' is a technical term and should not be translated." } } diff --git a/apps/browser/src/_locales/pt_PT/messages.json b/apps/browser/src/_locales/pt_PT/messages.json index a144f5767d4..8f06014b6b2 100644 --- a/apps/browser/src/_locales/pt_PT/messages.json +++ b/apps/browser/src/_locales/pt_PT/messages.json @@ -1173,6 +1173,12 @@ "message": "Oh não! Não conseguimos guardar isto. Tente introduzir os detalhes manualmente.", "description": "Detailed error message shown when saving login details fails." }, + "changePasswordWarning": { + "message": "Depois de ter alterado a sua palavra-passe, é necessário iniciar sessão com a sua nova palavra-passe. As sessões ativas noutros dispositivos serão interrompidas dentro de uma hora." + }, + "accountRecoveryUpdateMasterPasswordSubtitle": { + "message": "Altere a sua palavra-passe mestra para concluir a recuperação da conta." + }, "enableChangedPasswordNotification": { "message": "Pedir para atualizar credencial existente" }, @@ -1365,8 +1371,8 @@ "featureUnavailable": { "message": "Funcionalidade indisponível" }, - "encryptionKeyMigrationRequired": { - "message": "É necessária a migração da chave de encriptação. Inicie sessão através do cofre Web para atualizar a sua chave de encriptação." + "legacyEncryptionUnsupported": { + "message": "A encriptação herdada já não é suportada. Por favor, contacte o suporte para recuperar a sua conta." }, "premiumMembership": { "message": "Subscrição Premium" @@ -1922,6 +1928,9 @@ "typeSshKey": { "message": "Chave SSH" }, + "typeNote": { + "message": "Nota" + }, "newItemHeader": { "message": "Novo(a) $TYPE$", "placeholders": { @@ -2153,8 +2162,8 @@ "setYourPinCode": { "message": "Defina o seu código PIN para desbloquear o Bitwarden. As suas definições de PIN serão redefinidas se alguma vez terminar sessão por completo da aplicação." }, - "setYourPinCode1": { - "message": "O seu PIN será utilizado para desbloquear o Bitwarden em vez da sua palavra-passe mestra. O seu PIN será reposto se alguma vez terminar totalmente a sessão no Bitwarden." + "setPinCode": { + "message": "Pode utilizar este PIN para desbloquear o Bitwarden. O seu PIN será reposto se alguma vez terminar sessão completamente da aplicação." }, "pinRequired": { "message": "É necessário o código PIN." @@ -2204,6 +2213,9 @@ "useThisPassword": { "message": "Utilizar esta palavra-passe" }, + "useThisPassphrase": { + "message": "Utilizar esta frase de acesso" + }, "useThisUsername": { "message": "Utilizar este nome de utilizador" }, @@ -2481,6 +2493,12 @@ "personalOwnershipPolicyInEffectImports": { "message": "Uma política da organização bloqueou a importação de itens para o seu cofre individual." }, + "restrictCardTypeImport": { + "message": "Não é possível importar tipos de itens de cartão" + }, + "restrictCardTypeImportDesc": { + "message": "Uma política definida por 1 ou mais organizações impede-o de importar cartões para os seus cofres." + }, "domainsTitle": { "message": "Domínios", "description": "A category title describing the concept of web domains" @@ -2512,6 +2530,10 @@ "change": { "message": "Alterar" }, + "changePassword": { + "message": "Alterar palavra-passe", + "description": "Change password button for browser at risk notification on login." + }, "changeButtonTitle": { "message": "Alterar palavra-passe - $ITEMNAME$", "placeholders": { @@ -2521,6 +2543,9 @@ } } }, + "atRiskPassword": { + "message": "Palavra-passe em risco" + }, "atRiskPasswords": { "message": "Palavras-passe em risco" }, @@ -2555,6 +2580,26 @@ } } }, + "atRiskChangePrompt": { + "message": "A sua palavra-passe deste site está em risco. A $ORGANIZATION$ pediu-lhe que a alterasse.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + }, + "description": "Notification body when a login triggers an at-risk password change request and the change password domain is known." + }, + "atRiskNavigatePrompt": { + "message": "A $ORGANIZATION$ pretende que altere esta palavra-passe porque está em risco. Navegue até às definições da sua conta para alterar a palavra-passe.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + }, + "description": "Notification body when a login triggers an at-risk password change request and no change password domain is provided." + }, "reviewAndChangeAtRiskPassword": { "message": "Rever e alterar uma palavra-passe em risco" }, @@ -2674,6 +2719,10 @@ "message": "Todos os Sends", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "maxAccessCountReached": { + "message": "Número máximo de acessos atingido", + "description": "This text will be displayed after a Send has been accessed the maximum amount of times." + }, "hideTextByDefault": { "message": "Ocultar texto por predefinição" }, @@ -2876,6 +2925,9 @@ "emailVerificationRequiredDesc": { "message": "Tem de verificar o seu e-mail para utilizar esta funcionalidade. Pode verificar o seu e-mail no cofre Web." }, + "masterPasswordSuccessfullySet": { + "message": "Palavra-passe mestra definida com sucesso" + }, "updatedMasterPassword": { "message": "Palavra-passe mestra atualizada" }, @@ -3408,6 +3460,9 @@ "logInRequestSent": { "message": "Pedido enviado" }, + "masterPasswordChanged": { + "message": "Palavra-passe mestra guardada" + }, "exposedMasterPassword": { "message": "Palavra-passe mestra exposta" }, @@ -3522,6 +3577,12 @@ "requestAdminApproval": { "message": "Pedir aprovação do administrador" }, + "unableToCompleteLogin": { + "message": "Não é possível concluir o início de sessão" + }, + "loginOnTrustedDeviceOrAskAdminToAssignPassword": { + "message": "Tem de iniciar sessão num dispositivo de confiança ou pedir ao seu administrador que lhe atribua uma palavra-passe." + }, "ssoIdentifierRequired": { "message": "É necessário o identificador de SSO da organização." }, @@ -3607,14 +3668,6 @@ "trustUser": { "message": "Confiar no utilizador" }, - "sendsNoItemsTitle": { - "message": "Sem Sends ativos", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendsNoItemsMessage": { - "message": "Utilize o Send para partilhar de forma segura informações encriptadas com qualquer pessoa.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "sendsTitleNoItems": { "message": "Envie informações sensíveis com segurança", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -4209,6 +4262,26 @@ "message": "Formatos comuns", "description": "Label indicating the most common import formats" }, + "uriMatchDefaultStrategyHint": { + "message": "A deteção de correspondência de URI é a forma como o Bitwarden identifica sugestões de preenchimento automático.", + "description": "Explains to the user that URI match detection determines how Bitwarden suggests autofill options, and clarifies that this default strategy applies when no specific match detection is set for a login item." + }, + "regExAdvancedOptionWarning": { + "message": "A \"expressão regular\" é uma opção avançada com um risco acrescido de exposição de credenciais.", + "description": "Content for dialog which warns a user when selecting 'regular expression' matching strategy as a cipher match strategy" + }, + "startsWithAdvancedOptionWarning": { + "message": "\"Começa com\" é uma opção avançada com um risco acrescido de exposição de credenciais.", + "description": "Content for dialog which warns a user when selecting 'starts with' matching strategy as a cipher match strategy" + }, + "uriMatchWarningDialogLink": { + "message": "Mais informações sobre a deteção de correspondências", + "description": "Link to match detection docs on warning dialog for advance match strategy" + }, + "uriAdvancedOption": { + "message": "Opções avançadas", + "description": "Advanced option placeholder for uri option component" + }, "confirmContinueToBrowserSettingsTitle": { "message": "Continuar para as definições do navegador?", "description": "Title for dialog which asks if the user wants to proceed to a relevant browser settings page" @@ -4833,7 +4906,7 @@ "message": "Selecione as coleções a atribuir" }, "personalItemTransferWarningSingular": { - "message": "1 será permanentemente transferido para a organização selecionada. Este item deixará de lhe pertencer." + "message": "1 item será permanentemente transferido para a organização selecionada. Este item deixará de lhe pertencer." }, "personalItemsTransferWarningPlural": { "message": "$PERSONAL_ITEMS_COUNT$ itens serão permanentemente transferidos para a organização selecionada. Estes itens deixarão de lhe pertencer.", @@ -4845,7 +4918,7 @@ } }, "personalItemWithOrgTransferWarningSingular": { - "message": "1 será permanentemente transferido para a $ORG$. Este item deixará de lhe pertencer.", + "message": "1 item será permanentemente transferido para a $ORG$. Este item deixará de lhe pertencer.", "placeholders": { "org": { "content": "$1", @@ -5036,6 +5109,9 @@ "unlockPinSet": { "message": "Definição do PIN de desbloqueio" }, + "unlockWithBiometricSet": { + "message": "Desbloquear com conjunto biométrico" + }, "authenticating": { "message": "A autenticar" }, @@ -5377,5 +5453,9 @@ }, "noPermissionsViewPage": { "message": "Não tem permissões para ver esta página. Tente iniciar sessão com uma conta diferente." + }, + "wasmNotSupported": { + "message": "O WebAssembly não é suportado no seu navegador ou não está ativado. O WebAssembly é necessário para utilizar a app Bitwarden.", + "description": "'WebAssembly' is a technical term and should not be translated." } } diff --git a/apps/browser/src/_locales/ro/messages.json b/apps/browser/src/_locales/ro/messages.json index 2aabf825399..02fc0054e73 100644 --- a/apps/browser/src/_locales/ro/messages.json +++ b/apps/browser/src/_locales/ro/messages.json @@ -23,16 +23,16 @@ "message": "Creare cont" }, "newToBitwarden": { - "message": "New to Bitwarden?" + "message": "Nou pe Bitwarden?" }, "logInWithPasskey": { - "message": "Log in with passkey" + "message": "Autentificare cu parolă" }, "useSingleSignOn": { - "message": "Use single sign-on" + "message": "Autentificare unică" }, "welcomeBack": { - "message": "Welcome back" + "message": "Bine ați revenit" }, "setAStrongPassword": { "message": "Setați o parolă puternică" @@ -84,7 +84,7 @@ "message": "Indiciu pentru parola principală (opțional)" }, "passwordStrengthScore": { - "message": "Password strength score $SCORE$", + "message": "Nivelul de siguranța al parolei $SCORE$", "placeholders": { "score": { "content": "$1", @@ -132,7 +132,7 @@ "message": "Copiere parolă" }, "copyPassphrase": { - "message": "Copy passphrase" + "message": "Copiază întrebarea de siguranța" }, "copyNote": { "message": "Copiere notă" @@ -165,13 +165,13 @@ "message": "Copiați numărul de licență" }, "copyPrivateKey": { - "message": "Copy private key" + "message": "Copiază cheia de siguranța privată" }, "copyPublicKey": { - "message": "Copy public key" + "message": "Copiază cheia de siguranța publică" }, "copyFingerprint": { - "message": "Copy fingerprint" + "message": "Copiați amprenta" }, "copyCustomField": { "message": "Copiază $FIELD$", @@ -189,11 +189,11 @@ "message": "Copiază notițele" }, "copy": { - "message": "Copy", + "message": "Copiați", "description": "Copy to clipboard" }, "fill": { - "message": "Fill", + "message": "Completați", "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": { @@ -209,10 +209,10 @@ "message": "Autocompletare identitate" }, "fillVerificationCode": { - "message": "Fill verification code" + "message": "Completați codul de verificare" }, "fillVerificationCodeAria": { - "message": "Fill Verification Code", + "message": "Completați Codul de Verificare", "description": "Aria label for the heading displayed the inline menu for totp code autofill" }, "generatePasswordCopied": { @@ -407,7 +407,7 @@ "message": "Create folders to organize your vault items" }, "deleteFolderPermanently": { - "message": "Are you sure you want to permanently delete this folder?" + "message": "Ești sigur că dorești să ștergi permanent acest fișier?" }, "deleteFolder": { "message": "Ștergere dosar" @@ -462,19 +462,19 @@ "message": "Generare parolă" }, "generatePassphrase": { - "message": "Generate passphrase" + "message": "Creează întrebarea de siguranța" }, "passwordGenerated": { - "message": "Password generated" + "message": "Parola creată" }, "passphraseGenerated": { - "message": "Passphrase generated" + "message": "Întrebare de siguranța creată" }, "usernameGenerated": { - "message": "Username generated" + "message": "Nume de utilizator creat" }, "emailGenerated": { - "message": "Email generated" + "message": "E-mail creat" }, "regeneratePassword": { "message": "Regenerare parolă" @@ -490,7 +490,7 @@ "description": "Card header for password generator include block" }, "uppercaseDescription": { - "message": "Include uppercase characters", + "message": "Includeți caractere mari", "description": "Tooltip for the password generator uppercase character checkbox" }, "uppercaseLabel": { @@ -498,7 +498,7 @@ "description": "Label for the password generator uppercase character checkbox" }, "lowercaseDescription": { - "message": "Include lowercase characters", + "message": "Includeți caractere mici", "description": "Full description for the password generator lowercase character checkbox" }, "lowercaseLabel": { @@ -506,7 +506,7 @@ "description": "Label for the password generator lowercase character checkbox" }, "numbersDescription": { - "message": "Include numbers", + "message": "Includeți cifre", "description": "Full description for the password generator numbers checkbox" }, "numbersLabel": { @@ -514,7 +514,7 @@ "description": "Label for the password generator numbers checkbox" }, "specialCharactersDescription": { - "message": "Include special characters", + "message": "Includeți caractere speciale", "description": "Full description for the password generator special characters checkbox" }, "numWords": { @@ -537,7 +537,7 @@ "message": "Minim de caractere speciale" }, "avoidAmbiguous": { - "message": "Avoid ambiguous characters", + "message": "Evită caracterele ambigue", "description": "Label for the avoid ambiguous characters checkbox." }, "generatorPolicyInEffect": { @@ -587,7 +587,7 @@ "message": "Note" }, "privateNote": { - "message": "Private note" + "message": "Notă privată" }, "note": { "message": "Notă" @@ -656,7 +656,7 @@ "message": "Browserul dvs. nu acceptă copierea în clipboard. Transcrieți datele manual." }, "verifyYourIdentity": { - "message": "Verify your identity" + "message": "Verificați- vă identitatea" }, "weDontRecognizeThisDevice": { "message": "We don't recognize this device. Enter the code sent to your email to verify your identity." @@ -671,10 +671,10 @@ "message": "Your vault is locked" }, "yourAccountIsLocked": { - "message": "Your account is locked" + "message": "Contul dumneavoastră este blocat" }, "or": { - "message": "or" + "message": "sau" }, "unlock": { "message": "Deblocare" @@ -851,7 +851,7 @@ "message": "Bitwarden poate stoca și completa coduri de verificare în doi pași. Selectați pictograma camerei foto pentru a face o captură de ecran a codului QR de autentificare al acestui site, sau copiați și lipiți cheia în acest câmp." }, "learnMoreAboutAuthenticators": { - "message": "Learn more about authenticators" + "message": "Află mai multe despre autentificatori" }, "copyTOTP": { "message": "Copiați cheia de autentificare (TOTP)" @@ -875,7 +875,7 @@ "message": "Enter the code sent to your email" }, "enterTheCodeFromYourAuthenticatorApp": { - "message": "Enter the code from your authenticator app" + "message": "Introdu codul din aplicația de autentificare" }, "pressYourYubiKeyToAuthenticate": { "message": "Press your YubiKey to authenticate" @@ -1173,6 +1173,12 @@ "message": "Oh no! We couldn't save this. Try entering the details manually.", "description": "Detailed error message shown when saving login details fails." }, + "changePasswordWarning": { + "message": "After changing your password, you will need to log in with your new password. Active sessions on other devices will be logged out within one hour." + }, + "accountRecoveryUpdateMasterPasswordSubtitle": { + "message": "Change your master password to complete account recovery." + }, "enableChangedPasswordNotification": { "message": "Solicitați actualizarea autentificării existente" }, @@ -1365,8 +1371,8 @@ "featureUnavailable": { "message": "Funcție indisponibilă" }, - "encryptionKeyMigrationRequired": { - "message": "Este necesară migrarea cheilor de criptare. Autentificați-vă prin intermediul seifului web pentru a vă actualiza cheia de criptare." + "legacyEncryptionUnsupported": { + "message": "Legacy encryption is no longer supported. Please contact support to recover your account." }, "premiumMembership": { "message": "Abonament Premium" @@ -1922,6 +1928,9 @@ "typeSshKey": { "message": "SSH key" }, + "typeNote": { + "message": "Note" + }, "newItemHeader": { "message": "New $TYPE$", "placeholders": { @@ -2153,8 +2162,8 @@ "setYourPinCode": { "message": "Stabiliți codul PIN de deblocare Bitwarden. Setările codului PIN vor fi reinițializate dacă vă deconectați vreodată din aplicație." }, - "setYourPinCode1": { - "message": "Your PIN will be used to unlock Bitwarden instead of your master password. Your PIN will reset if you ever fully log out of Bitwarden." + "setPinCode": { + "message": "You can use this PIN to unlock Bitwarden. Your PIN will be reset if you ever fully log out of the application." }, "pinRequired": { "message": "Codul PIN este necesar." @@ -2204,6 +2213,9 @@ "useThisPassword": { "message": "Use this password" }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, "useThisUsername": { "message": "Use this username" }, @@ -2481,6 +2493,12 @@ "personalOwnershipPolicyInEffectImports": { "message": "An organization policy has blocked importing items into your individual vault." }, + "restrictCardTypeImport": { + "message": "Cannot import card item types" + }, + "restrictCardTypeImportDesc": { + "message": "A policy set by 1 or more organizations prevents you from importing cards to your vaults." + }, "domainsTitle": { "message": "Domains", "description": "A category title describing the concept of web domains" @@ -2512,6 +2530,10 @@ "change": { "message": "Change" }, + "changePassword": { + "message": "Change password", + "description": "Change password button for browser at risk notification on login." + }, "changeButtonTitle": { "message": "Change password - $ITEMNAME$", "placeholders": { @@ -2521,6 +2543,9 @@ } } }, + "atRiskPassword": { + "message": "At-risk password" + }, "atRiskPasswords": { "message": "At-risk passwords" }, @@ -2555,6 +2580,26 @@ } } }, + "atRiskChangePrompt": { + "message": "Your password for this site is at-risk. $ORGANIZATION$ has requested that you change it.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + }, + "description": "Notification body when a login triggers an at-risk password change request and the change password domain is known." + }, + "atRiskNavigatePrompt": { + "message": "$ORGANIZATION$ wants you to change this password because it is at-risk. Navigate to your account settings to change the password.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + }, + "description": "Notification body when a login triggers an at-risk password change request and no change password domain is provided." + }, "reviewAndChangeAtRiskPassword": { "message": "Review and change one at-risk password" }, @@ -2674,6 +2719,10 @@ "message": "Toate Send-urile", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "maxAccessCountReached": { + "message": "Max access count reached", + "description": "This text will be displayed after a Send has been accessed the maximum amount of times." + }, "hideTextByDefault": { "message": "Hide text by default" }, @@ -2876,6 +2925,9 @@ "emailVerificationRequiredDesc": { "message": "Trebuie să vă verificați e-mailul pentru a utiliza această caracteristică. Puteți verifica e-mailul în seiful web." }, + "masterPasswordSuccessfullySet": { + "message": "Master password successfully set" + }, "updatedMasterPassword": { "message": "Parola principală actualizată" }, @@ -3408,6 +3460,9 @@ "logInRequestSent": { "message": "Request sent" }, + "masterPasswordChanged": { + "message": "Master password saved" + }, "exposedMasterPassword": { "message": "Parolă principală compromisă" }, @@ -3522,6 +3577,12 @@ "requestAdminApproval": { "message": "Cereți aprobarea administratorului" }, + "unableToCompleteLogin": { + "message": "Unable to complete login" + }, + "loginOnTrustedDeviceOrAskAdminToAssignPassword": { + "message": "You need to log in on a trusted device or ask your administrator to assign you a password." + }, "ssoIdentifierRequired": { "message": "Identificatorul SSO al organizației este necesar." }, @@ -3607,14 +3668,6 @@ "trustUser": { "message": "Trust user" }, - "sendsNoItemsTitle": { - "message": "No active Sends", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendsNoItemsMessage": { - "message": "Use Send to securely share encrypted information with anyone.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "sendsTitleNoItems": { "message": "Send sensitive information safely", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -4209,6 +4262,26 @@ "message": "Common formats", "description": "Label indicating the most common import formats" }, + "uriMatchDefaultStrategyHint": { + "message": "URI match detection is how Bitwarden identifies autofill suggestions.", + "description": "Explains to the user that URI match detection determines how Bitwarden suggests autofill options, and clarifies that this default strategy applies when no specific match detection is set for a login item." + }, + "regExAdvancedOptionWarning": { + "message": "\"Regular expression\" is an advanced option with increased risk of exposing credentials.", + "description": "Content for dialog which warns a user when selecting 'regular expression' matching strategy as a cipher match strategy" + }, + "startsWithAdvancedOptionWarning": { + "message": "\"Starts with\" is an advanced option with increased risk of exposing credentials.", + "description": "Content for dialog which warns a user when selecting 'starts with' matching strategy as a cipher match strategy" + }, + "uriMatchWarningDialogLink": { + "message": "More about match detection", + "description": "Link to match detection docs on warning dialog for advance match strategy" + }, + "uriAdvancedOption": { + "message": "Advanced options", + "description": "Advanced option placeholder for uri option component" + }, "confirmContinueToBrowserSettingsTitle": { "message": "Continue to browser settings?", "description": "Title for dialog which asks if the user wants to proceed to a relevant browser settings page" @@ -5036,6 +5109,9 @@ "unlockPinSet": { "message": "Unlock PIN set" }, + "unlockWithBiometricSet": { + "message": "Unlock with biometrics set" + }, "authenticating": { "message": "Authenticating" }, @@ -5377,5 +5453,9 @@ }, "noPermissionsViewPage": { "message": "You do not have permissions to view this page. Try logging in with a different account." + }, + "wasmNotSupported": { + "message": "WebAssembly is not supported on your browser or is not enabled. WebAssembly is required to use the Bitwarden app.", + "description": "'WebAssembly' is a technical term and should not be translated." } } diff --git a/apps/browser/src/_locales/ru/messages.json b/apps/browser/src/_locales/ru/messages.json index a23ab4172f8..2c9aa0f4d45 100644 --- a/apps/browser/src/_locales/ru/messages.json +++ b/apps/browser/src/_locales/ru/messages.json @@ -1173,6 +1173,12 @@ "message": "О нет! Мы не смогли сохранить это. Попробуйте ввести данные вручную.", "description": "Detailed error message shown when saving login details fails." }, + "changePasswordWarning": { + "message": "После смены пароля потребуется авторизоваться с новым паролем. Активные сессии на других устройствах будут завершены в течение одного часа." + }, + "accountRecoveryUpdateMasterPasswordSubtitle": { + "message": "Измените мастер-пароль, чтобы завершить восстановление аккаунта." + }, "enableChangedPasswordNotification": { "message": "Спрашивать при обновлении существующего логина" }, @@ -1365,8 +1371,8 @@ "featureUnavailable": { "message": "Функция недоступна" }, - "encryptionKeyMigrationRequired": { - "message": "Требуется миграция ключа шифрования. Чтобы обновить ключ шифрования, войдите через веб-хранилище." + "legacyEncryptionUnsupported": { + "message": "Устаревшее шифрование больше не поддерживается. Для восстановления аккаунта обратитесь в службу поддержки." }, "premiumMembership": { "message": "Премиум" @@ -1922,6 +1928,9 @@ "typeSshKey": { "message": "Ключ SSH" }, + "typeNote": { + "message": "Заметка" + }, "newItemHeader": { "message": "Новый $TYPE$", "placeholders": { @@ -2153,8 +2162,8 @@ "setYourPinCode": { "message": "Установите PIN-код для разблокировки Bitwarden. Настройки PIN-кода будут сброшены, если вы когда-либо полностью выйдете из приложения." }, - "setYourPinCode1": { - "message": "Ваш PIN-код будет использоваться для разблокировки Bitwarden вместо мастер-пароля. PIN-код будет сброшен, если вы выйдете из Bitwarden." + "setPinCode": { + "message": "Вы можете использовать этот PIN-код для разблокировки Bitwarden. PIN-код будет сброшен, если вы когда-либо полностью выйдете из приложения." }, "pinRequired": { "message": "Необходим PIN-код." @@ -2204,6 +2213,9 @@ "useThisPassword": { "message": "Использовать этот пароль" }, + "useThisPassphrase": { + "message": "Использовать эту парольную фразу" + }, "useThisUsername": { "message": "Использовать это имя пользователя" }, @@ -2481,6 +2493,12 @@ "personalOwnershipPolicyInEffectImports": { "message": "Импорт элементов в ваше личное хранилище отключен политикой организации." }, + "restrictCardTypeImport": { + "message": "Невозможно импортировать элементы карт" + }, + "restrictCardTypeImportDesc": { + "message": "Политика, установленная 1 или более организациями, не позволяет импортировать карты в ваши хранилища." + }, "domainsTitle": { "message": "Домены", "description": "A category title describing the concept of web domains" @@ -2512,6 +2530,10 @@ "change": { "message": "Изменить" }, + "changePassword": { + "message": "Изменить пароль", + "description": "Change password button for browser at risk notification on login." + }, "changeButtonTitle": { "message": "Изменить пароль - $ITEMNAME$", "placeholders": { @@ -2521,6 +2543,9 @@ } } }, + "atRiskPassword": { + "message": "Пароль, подверженный риску" + }, "atRiskPasswords": { "message": "Пароли, подверженные риску" }, @@ -2555,6 +2580,26 @@ } } }, + "atRiskChangePrompt": { + "message": "Ваш пароль для этого сайта подвержен риску. Организация $ORGANIZATION$ попросила вас изменить его.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + }, + "description": "Notification body when a login triggers an at-risk password change request and the change password domain is known." + }, + "atRiskNavigatePrompt": { + "message": "Организация $ORGANIZATION$ просит вас изменить этот пароль, поскольку он подвержен риску. Перейдите в настройки аккаунта для изменения пароля.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + }, + "description": "Notification body when a login triggers an at-risk password change request and no change password domain is provided." + }, "reviewAndChangeAtRiskPassword": { "message": "Проверить и изменить один пароль, подверженный риску" }, @@ -2674,6 +2719,10 @@ "message": "Все Send’ы", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "maxAccessCountReached": { + "message": "Достигнут максимум обращений", + "description": "This text will be displayed after a Send has been accessed the maximum amount of times." + }, "hideTextByDefault": { "message": "Скрыть текст по умолчанию" }, @@ -2876,6 +2925,9 @@ "emailVerificationRequiredDesc": { "message": "Для использования этой функции необходимо подтвердить ваш email. Вы можете это сделать в веб-хранилище." }, + "masterPasswordSuccessfullySet": { + "message": "Мастер-пароль успешно установлен" + }, "updatedMasterPassword": { "message": "Мастер-пароль обновлен" }, @@ -3408,6 +3460,9 @@ "logInRequestSent": { "message": "Запрос отправлен" }, + "masterPasswordChanged": { + "message": "Мастер-пароль сохранен" + }, "exposedMasterPassword": { "message": "Мастер-пароль скомпрометирован" }, @@ -3522,6 +3577,12 @@ "requestAdminApproval": { "message": "Запросить одобрение администратора" }, + "unableToCompleteLogin": { + "message": "Не удалось завершить вход" + }, + "loginOnTrustedDeviceOrAskAdminToAssignPassword": { + "message": "Вам необходимо авторизоваться с доверенного устройства или попросить вашего администратора назначить вам пароль." + }, "ssoIdentifierRequired": { "message": "Требуется идентификатор SSO организации." }, @@ -3607,14 +3668,6 @@ "trustUser": { "message": "Доверенный пользователь" }, - "sendsNoItemsTitle": { - "message": "Нет активных Send", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendsNoItemsMessage": { - "message": "Используйте Send для безопасного обмена зашифрованной информацией с кем угодно.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "sendsTitleNoItems": { "message": "Безопасная отправка конфиденциальной информации", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -4209,6 +4262,26 @@ "message": "Основные форматы", "description": "Label indicating the most common import formats" }, + "uriMatchDefaultStrategyHint": { + "message": "Обнаружение совпадения URI - это способ, с помощью которого Bitwarden идентифицирует предложения по автозаполнению.", + "description": "Explains to the user that URI match detection determines how Bitwarden suggests autofill options, and clarifies that this default strategy applies when no specific match detection is set for a login item." + }, + "regExAdvancedOptionWarning": { + "message": "\"Регулярное выражение\" - это расширенный вариант с повышенным риском раскрытия учетных данных.", + "description": "Content for dialog which warns a user when selecting 'regular expression' matching strategy as a cipher match strategy" + }, + "startsWithAdvancedOptionWarning": { + "message": "\"Начинается с\" - это расширенный вариант с повышенным риском раскрытия учетных данных.", + "description": "Content for dialog which warns a user when selecting 'starts with' matching strategy as a cipher match strategy" + }, + "uriMatchWarningDialogLink": { + "message": "Подробнее об обнаружении совпадений", + "description": "Link to match detection docs on warning dialog for advance match strategy" + }, + "uriAdvancedOption": { + "message": "Расширенные настройки", + "description": "Advanced option placeholder for uri option component" + }, "confirmContinueToBrowserSettingsTitle": { "message": "Перейти к настройкам браузера?", "description": "Title for dialog which asks if the user wants to proceed to a relevant browser settings page" @@ -5036,6 +5109,9 @@ "unlockPinSet": { "message": "Установить PIN--код разблокировки" }, + "unlockWithBiometricSet": { + "message": "Разблокировать с помощью биометрии" + }, "authenticating": { "message": "Аутентификация" }, @@ -5377,5 +5453,9 @@ }, "noPermissionsViewPage": { "message": "У вас нет прав для просмотра этой страницы. Попробуйте авторизоваться под другим аккаунтом." + }, + "wasmNotSupported": { + "message": "WebAssembly не поддерживается вашим браузером или не включен. WebAssembly необходим для использования приложения Bitwarden.", + "description": "'WebAssembly' is a technical term and should not be translated." } } diff --git a/apps/browser/src/_locales/si/messages.json b/apps/browser/src/_locales/si/messages.json index eafbf9c584e..aa88e12ba39 100644 --- a/apps/browser/src/_locales/si/messages.json +++ b/apps/browser/src/_locales/si/messages.json @@ -1173,6 +1173,12 @@ "message": "Oh no! We couldn't save this. Try entering the details manually.", "description": "Detailed error message shown when saving login details fails." }, + "changePasswordWarning": { + "message": "After changing your password, you will need to log in with your new password. Active sessions on other devices will be logged out within one hour." + }, + "accountRecoveryUpdateMasterPasswordSubtitle": { + "message": "Change your master password to complete account recovery." + }, "enableChangedPasswordNotification": { "message": "Ask to update existing login" }, @@ -1365,8 +1371,8 @@ "featureUnavailable": { "message": "විශේෂාංගය ලබාගත නොහැක" }, - "encryptionKeyMigrationRequired": { - "message": "Encryption key migration required. Please login through the web vault to update your encryption key." + "legacyEncryptionUnsupported": { + "message": "Legacy encryption is no longer supported. Please contact support to recover your account." }, "premiumMembership": { "message": "වාරික සාමාජිකත්වය" @@ -1922,6 +1928,9 @@ "typeSshKey": { "message": "SSH key" }, + "typeNote": { + "message": "Note" + }, "newItemHeader": { "message": "New $TYPE$", "placeholders": { @@ -2153,8 +2162,8 @@ "setYourPinCode": { "message": "බිට්වර්ඩන් අගුළු ඇරීමට ඔබේ PIN අංකය කේතය සකසන්න. ඔබ කවදා හෝ යෙදුමෙන් සම්පූර්ණයෙන්ම පුරනය වී ඇත්නම් ඔබගේ PIN සැකසුම් නැවත සකසනු ඇත." }, - "setYourPinCode1": { - "message": "Your PIN will be used to unlock Bitwarden instead of your master password. Your PIN will reset if you ever fully log out of Bitwarden." + "setPinCode": { + "message": "You can use this PIN to unlock Bitwarden. Your PIN will be reset if you ever fully log out of the application." }, "pinRequired": { "message": "PIN කේතය අවශ්ය වේ." @@ -2204,6 +2213,9 @@ "useThisPassword": { "message": "Use this password" }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, "useThisUsername": { "message": "Use this username" }, @@ -2481,6 +2493,12 @@ "personalOwnershipPolicyInEffectImports": { "message": "An organization policy has blocked importing items into your individual vault." }, + "restrictCardTypeImport": { + "message": "Cannot import card item types" + }, + "restrictCardTypeImportDesc": { + "message": "A policy set by 1 or more organizations prevents you from importing cards to your vaults." + }, "domainsTitle": { "message": "Domains", "description": "A category title describing the concept of web domains" @@ -2512,6 +2530,10 @@ "change": { "message": "Change" }, + "changePassword": { + "message": "Change password", + "description": "Change password button for browser at risk notification on login." + }, "changeButtonTitle": { "message": "Change password - $ITEMNAME$", "placeholders": { @@ -2521,6 +2543,9 @@ } } }, + "atRiskPassword": { + "message": "At-risk password" + }, "atRiskPasswords": { "message": "At-risk passwords" }, @@ -2555,6 +2580,26 @@ } } }, + "atRiskChangePrompt": { + "message": "Your password for this site is at-risk. $ORGANIZATION$ has requested that you change it.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + }, + "description": "Notification body when a login triggers an at-risk password change request and the change password domain is known." + }, + "atRiskNavigatePrompt": { + "message": "$ORGANIZATION$ wants you to change this password because it is at-risk. Navigate to your account settings to change the password.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + }, + "description": "Notification body when a login triggers an at-risk password change request and no change password domain is provided." + }, "reviewAndChangeAtRiskPassword": { "message": "Review and change one at-risk password" }, @@ -2674,6 +2719,10 @@ "message": "සියලු යවයි", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "maxAccessCountReached": { + "message": "Max access count reached", + "description": "This text will be displayed after a Send has been accessed the maximum amount of times." + }, "hideTextByDefault": { "message": "Hide text by default" }, @@ -2876,6 +2925,9 @@ "emailVerificationRequiredDesc": { "message": "මෙම අංගය භාවිතා කිරීම සඳහා ඔබේ විද්යුත් තැපෑල සත්යාපනය කළ යුතුය. වෙබ් සුරක්ෂිතාගාරයේ ඔබගේ විද්යුත් තැපෑල සත්යාපනය කළ හැකිය." }, + "masterPasswordSuccessfullySet": { + "message": "Master password successfully set" + }, "updatedMasterPassword": { "message": "යාවත්කාලීන කරන ලද මාස්ටර් මුරපදය" }, @@ -3408,6 +3460,9 @@ "logInRequestSent": { "message": "Request sent" }, + "masterPasswordChanged": { + "message": "Master password saved" + }, "exposedMasterPassword": { "message": "Exposed Master Password" }, @@ -3522,6 +3577,12 @@ "requestAdminApproval": { "message": "Request admin approval" }, + "unableToCompleteLogin": { + "message": "Unable to complete login" + }, + "loginOnTrustedDeviceOrAskAdminToAssignPassword": { + "message": "You need to log in on a trusted device or ask your administrator to assign you a password." + }, "ssoIdentifierRequired": { "message": "Organization SSO identifier is required." }, @@ -3607,14 +3668,6 @@ "trustUser": { "message": "Trust user" }, - "sendsNoItemsTitle": { - "message": "No active Sends", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendsNoItemsMessage": { - "message": "Use Send to securely share encrypted information with anyone.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "sendsTitleNoItems": { "message": "Send sensitive information safely", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -4209,6 +4262,26 @@ "message": "Common formats", "description": "Label indicating the most common import formats" }, + "uriMatchDefaultStrategyHint": { + "message": "URI match detection is how Bitwarden identifies autofill suggestions.", + "description": "Explains to the user that URI match detection determines how Bitwarden suggests autofill options, and clarifies that this default strategy applies when no specific match detection is set for a login item." + }, + "regExAdvancedOptionWarning": { + "message": "\"Regular expression\" is an advanced option with increased risk of exposing credentials.", + "description": "Content for dialog which warns a user when selecting 'regular expression' matching strategy as a cipher match strategy" + }, + "startsWithAdvancedOptionWarning": { + "message": "\"Starts with\" is an advanced option with increased risk of exposing credentials.", + "description": "Content for dialog which warns a user when selecting 'starts with' matching strategy as a cipher match strategy" + }, + "uriMatchWarningDialogLink": { + "message": "More about match detection", + "description": "Link to match detection docs on warning dialog for advance match strategy" + }, + "uriAdvancedOption": { + "message": "Advanced options", + "description": "Advanced option placeholder for uri option component" + }, "confirmContinueToBrowserSettingsTitle": { "message": "Continue to browser settings?", "description": "Title for dialog which asks if the user wants to proceed to a relevant browser settings page" @@ -5036,6 +5109,9 @@ "unlockPinSet": { "message": "Unlock PIN set" }, + "unlockWithBiometricSet": { + "message": "Unlock with biometrics set" + }, "authenticating": { "message": "Authenticating" }, @@ -5377,5 +5453,9 @@ }, "noPermissionsViewPage": { "message": "You do not have permissions to view this page. Try logging in with a different account." + }, + "wasmNotSupported": { + "message": "WebAssembly is not supported on your browser or is not enabled. WebAssembly is required to use the Bitwarden app.", + "description": "'WebAssembly' is a technical term and should not be translated." } } diff --git a/apps/browser/src/_locales/sk/messages.json b/apps/browser/src/_locales/sk/messages.json index 016f4ca1f5a..356617ea25c 100644 --- a/apps/browser/src/_locales/sk/messages.json +++ b/apps/browser/src/_locales/sk/messages.json @@ -474,7 +474,7 @@ "message": "Používateľské meno vygenerované" }, "emailGenerated": { - "message": "E-mail vygenoravný" + "message": "E-mail vygenerovaný" }, "regeneratePassword": { "message": "Vygenerovať nové heslo" @@ -1173,6 +1173,12 @@ "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." }, + "changePasswordWarning": { + "message": "Po zmene hesla sa musíte prihlásiť pomocou nového hesla. Aktívne relácie na iných zariadeniach budú do jednej hodiny odhlásené." + }, + "accountRecoveryUpdateMasterPasswordSubtitle": { + "message": "Zmeňte hlavné heslo, aby ste dokončili obnovenie účtu." + }, "enableChangedPasswordNotification": { "message": "Požiadať o aktualizáciu existujúceho prihlasovania" }, @@ -1213,11 +1219,11 @@ "message": "Sekundárnym kliknutím získate prístup k vygenerovaniu hesiel a zodpovedajúcim prihláseniam pre webovú stránku. Platí pre všetky prihlásené účty." }, "defaultUriMatchDetection": { - "message": "Predvolené mapovanie", + "message": "Predvolený spôsob zisťovania zhody URI", "description": "Default URI match detection for autofill." }, "defaultUriMatchDetectionDesc": { - "message": "Vyberte si predvolený spôsob mapovania, ktorý bude použitý pre prihlasovacie údaje pri využití funkcí ako je napríklad automatické vypĺňanie hesiel." + "message": "Vyberte predvolený spôsob zisťovania zhody, ktorý bude použitý pre prihlasovacie údaje pri využití funkcií, ako je napríklad automatické vypĺňanie hesiel." }, "theme": { "message": "Motív" @@ -1365,8 +1371,8 @@ "featureUnavailable": { "message": "Funkcia nie je k dispozícii" }, - "encryptionKeyMigrationRequired": { - "message": "Vyžaduje sa migrácia šifrovacieho kľúča. Na aktualizáciu šifrovacieho kľúča sa prihláste cez webový trezor." + "legacyEncryptionUnsupported": { + "message": "Staršie šifrovanie už nie je podporované. Ak chcete obnoviť svoj účet, obráťte sa na podporu." }, "premiumMembership": { "message": "Prémiové členstvo" @@ -1922,6 +1928,9 @@ "typeSshKey": { "message": "Kľúč SSH" }, + "typeNote": { + "message": "Poznámka" + }, "newItemHeader": { "message": "Nové $TYPE$", "placeholders": { @@ -2046,11 +2055,11 @@ "description": "A programming term, also known as 'RegEx'." }, "matchDetection": { - "message": "Spôsob mapovania", + "message": "Zisťovanie zhody", "description": "URI match detection for autofill." }, "defaultMatchDetection": { - "message": "Predvolené mapovanie", + "message": "Predvolené zisťovanie zhody", "description": "Default URI match detection for autofill." }, "toggleOptions": { @@ -2153,8 +2162,8 @@ "setYourPinCode": { "message": "Nastaviť kód PIN na odomykanie Bitwardenu. Nastavenie PIN sa vynuluje, ak sa úplne odhlásite z aplikácie." }, - "setYourPinCode1": { - "message": "Na odomknutie Bitwardenu sa namiesto hlavného hesla použije váš PIN. Váš PIN sa resetuje, ak sa niekedy úplne odhlásite zo Bitwardenu." + "setPinCode": { + "message": "Tento PIN môžete použiť na odomknutie Bitwardenu. PIN sa resetuje, ak sa úplne odhlásite z aplikácie." }, "pinRequired": { "message": "Kód PIN je povinný." @@ -2204,6 +2213,9 @@ "useThisPassword": { "message": "Použiť toto heslo" }, + "useThisPassphrase": { + "message": "Použiť túto prístupovú frázu" + }, "useThisUsername": { "message": "Použiť toto používateľské meno" }, @@ -2481,6 +2493,12 @@ "personalOwnershipPolicyInEffectImports": { "message": "Zásady organizácie zablokovali importovanie položiek do vášho osobného trezoru." }, + "restrictCardTypeImport": { + "message": "Položky typu karta sa nedajú importovať" + }, + "restrictCardTypeImportDesc": { + "message": "Politika nastavená 1 alebo viacerými organizáciami vám bráni v importovaní kariet do vašich trezorov." + }, "domainsTitle": { "message": "Domény", "description": "A category title describing the concept of web domains" @@ -2512,6 +2530,10 @@ "change": { "message": "Zmeniť" }, + "changePassword": { + "message": "Zmeniť heslo", + "description": "Change password button for browser at risk notification on login." + }, "changeButtonTitle": { "message": "Zmeniť heslo - $ITEMNAME$", "placeholders": { @@ -2521,6 +2543,9 @@ } } }, + "atRiskPassword": { + "message": "Rizikové heslo" + }, "atRiskPasswords": { "message": "Rizikové heslá" }, @@ -2555,6 +2580,26 @@ } } }, + "atRiskChangePrompt": { + "message": "Vaše heslo pre túto stránku je rizikové. Organizácia $ORGANIZATION$ vás požiadala o jeho zmenu.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + }, + "description": "Notification body when a login triggers an at-risk password change request and the change password domain is known." + }, + "atRiskNavigatePrompt": { + "message": "$ORGANIZATION$ chce, aby ste toto heslo zmenili, pretože je rizikové. Prejdite do nastavení svojho účtu a zmeňte heslo.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + }, + "description": "Notification body when a login triggers an at-risk password change request and no change password domain is provided." + }, "reviewAndChangeAtRiskPassword": { "message": "Skontrolujte a zmeňte jedno ohrozené heslo" }, @@ -2674,6 +2719,10 @@ "message": "Všetky Sends", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "maxAccessCountReached": { + "message": "Bol dosiahnutý maximálny počet prístupov", + "description": "This text will be displayed after a Send has been accessed the maximum amount of times." + }, "hideTextByDefault": { "message": "V predvolenom nastavení skryť text" }, @@ -2859,7 +2908,7 @@ "message": "Skryť moju e-mailovú adresu pri zobrazení." }, "passwordPrompt": { - "message": "Znova zadajte hlavné heslo" + "message": "Vyzvať na zadanie hesla" }, "passwordConfirmation": { "message": "Potvrdenie hlavného hesla" @@ -2876,6 +2925,9 @@ "emailVerificationRequiredDesc": { "message": "Na použitie tejto funkcie musíte overiť svoj e-mail. Svoj e-mail môžete overiť vo webovom trezore." }, + "masterPasswordSuccessfullySet": { + "message": "Hlavné heslo bolo úspešne nastavené" + }, "updatedMasterPassword": { "message": "Hlavné heslo aktualizované" }, @@ -3408,6 +3460,9 @@ "logInRequestSent": { "message": "Požiadavka bola odoslaná" }, + "masterPasswordChanged": { + "message": "Hlavné heslo uložené" + }, "exposedMasterPassword": { "message": "Odhalené hlavné heslo" }, @@ -3522,6 +3577,12 @@ "requestAdminApproval": { "message": "Žiadosť o schválenie správcom" }, + "unableToCompleteLogin": { + "message": "Nepodarilo sa dokončiť prihlásenie" + }, + "loginOnTrustedDeviceOrAskAdminToAssignPassword": { + "message": "Musíte sa prihlásiť na dôveryhodnom zariadení alebo požiadať správcu o priradenie hesla." + }, "ssoIdentifierRequired": { "message": "Pole identifikátora SSO je povinné." }, @@ -3607,14 +3668,6 @@ "trustUser": { "message": "Dôverovať používateľovi" }, - "sendsNoItemsTitle": { - "message": "Žiadne aktívne Sendy", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendsNoItemsMessage": { - "message": "Použite Send na bezpečné zdieľanie zašifrovaných informácii s kýmkoľvek.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "sendsTitleNoItems": { "message": "Send, citlivé informácie bezpečne", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -4209,6 +4262,26 @@ "message": "Bežné formáty", "description": "Label indicating the most common import formats" }, + "uriMatchDefaultStrategyHint": { + "message": "Zisťovanie zhody URI je spôsob, akým Bitwarden identifikuje návrhy na automatické vypĺňanie.", + "description": "Explains to the user that URI match detection determines how Bitwarden suggests autofill options, and clarifies that this default strategy applies when no specific match detection is set for a login item." + }, + "regExAdvancedOptionWarning": { + "message": "\"Regulárny výraz\" je pokročilá možnosť so zvýšeným rizikom odhalenia prihlasovacích údajov.", + "description": "Content for dialog which warns a user when selecting 'regular expression' matching strategy as a cipher match strategy" + }, + "startsWithAdvancedOptionWarning": { + "message": "\"Začína na\" je rozšírená možnosť so zvýšeným rizikom odhalenia prihlasovacích údajov.", + "description": "Content for dialog which warns a user when selecting 'starts with' matching strategy as a cipher match strategy" + }, + "uriMatchWarningDialogLink": { + "message": "Viac informácií o zisťovaní zhody", + "description": "Link to match detection docs on warning dialog for advance match strategy" + }, + "uriAdvancedOption": { + "message": "Rozšírené možnosti", + "description": "Advanced option placeholder for uri option component" + }, "confirmContinueToBrowserSettingsTitle": { "message": "Pokračovať do nastavení prehliadača?", "description": "Title for dialog which asks if the user wants to proceed to a relevant browser settings page" @@ -4410,7 +4483,7 @@ "message": "Nie je čo kopírovať" }, "assignToCollections": { - "message": "Prideliť k zbierkam" + "message": "Priradiť ku zbierkam" }, "copyEmail": { "message": "Skopírovať e-mail" @@ -4657,7 +4730,7 @@ } }, "showMatchDetection": { - "message": "Zobraziť spôsob mapovania $WEBSITE$", + "message": "Zobraziť zisťovanie zhody $WEBSITE$", "placeholders": { "website": { "content": "$1", @@ -4666,7 +4739,7 @@ } }, "hideMatchDetection": { - "message": "Skryť spôsob mapovania $WEBSITE$", + "message": "Skryť spôsob zisťovania zhody $WEBSITE$", "placeholders": { "website": { "content": "$1", @@ -4732,7 +4805,7 @@ "message": "Položky si budú môcť pozrieť len členovia organizácie s prístupom k týmto zbierkam." }, "bulkCollectionAssignmentWarning": { - "message": "Vybrali ste $TOTAL_COUNT$ položky. Nemôžete aktualizovať $READONLY_COUNT$ položky(-iek), pretože nemáte oprávnenie na úpravu.", + "message": "Vybrali ste položky ($TOTAL_COUNT$). Nemôžete aktualizovať $READONLY_COUNT$ položky(-iek), pretože nemáte oprávnenie na úpravu.", "placeholders": { "total_count": { "content": "$1", @@ -5036,6 +5109,9 @@ "unlockPinSet": { "message": "PIN na odomknutie nastavený" }, + "unlockWithBiometricSet": { + "message": "Odomknutie biometrickými údajmi nastavené" + }, "authenticating": { "message": "Overuje sa" }, @@ -5372,10 +5448,14 @@ "example": "Easily create strong and unique passwords by clicking on {icon} to help you keep your logins secure." }, "generatorNudgeBodyAria": { - "message": "Jednoducho vytvorte silné a jedinečné heslá kliknutím na tlačidlo Generovať heslo, aby zabezpečili prihlasovacie údaje.", + "message": "Jednoducho vytvorte silné a jedinečné heslá kliknutím na tlačidlo Generovať heslo, aby ste zabezpečili prihlasovacie údaje.", "description": "Aria label for the body content of the generator nudge" }, "noPermissionsViewPage": { "message": "Nemáte oprávnenie na zobrazenie tejto stránky. Skúste sa prihlásiť pomocou iného účtu." + }, + "wasmNotSupported": { + "message": "WebAssembly nie je vo vašom prehliadači podporovaný alebo nie je povolený. Na používanie Bitwardenu sa vyžaduje WebAssembly.", + "description": "'WebAssembly' is a technical term and should not be translated." } } diff --git a/apps/browser/src/_locales/sl/messages.json b/apps/browser/src/_locales/sl/messages.json index 3f84455be88..72f058254e4 100644 --- a/apps/browser/src/_locales/sl/messages.json +++ b/apps/browser/src/_locales/sl/messages.json @@ -1173,6 +1173,12 @@ "message": "Oh no! We couldn't save this. Try entering the details manually.", "description": "Detailed error message shown when saving login details fails." }, + "changePasswordWarning": { + "message": "After changing your password, you will need to log in with your new password. Active sessions on other devices will be logged out within one hour." + }, + "accountRecoveryUpdateMasterPasswordSubtitle": { + "message": "Change your master password to complete account recovery." + }, "enableChangedPasswordNotification": { "message": "Predlagaj posodobitev obstoječe prijave" }, @@ -1365,8 +1371,8 @@ "featureUnavailable": { "message": "Funkcija ni na voljo." }, - "encryptionKeyMigrationRequired": { - "message": "Encryption key migration required. Please login through the web vault to update your encryption key." + "legacyEncryptionUnsupported": { + "message": "Legacy encryption is no longer supported. Please contact support to recover your account." }, "premiumMembership": { "message": "Premium članstvo" @@ -1922,6 +1928,9 @@ "typeSshKey": { "message": "SSH key" }, + "typeNote": { + "message": "Note" + }, "newItemHeader": { "message": "New $TYPE$", "placeholders": { @@ -2153,8 +2162,8 @@ "setYourPinCode": { "message": "Za odklep Bitwardna si nastavite PIN-kodo. PIN-koda bo ponastavljena, če se boste popolnoma odjavili iz aplikacije." }, - "setYourPinCode1": { - "message": "Your PIN will be used to unlock Bitwarden instead of your master password. Your PIN will reset if you ever fully log out of Bitwarden." + "setPinCode": { + "message": "You can use this PIN to unlock Bitwarden. Your PIN will be reset if you ever fully log out of the application." }, "pinRequired": { "message": "Potrebna je PIN-koda." @@ -2204,6 +2213,9 @@ "useThisPassword": { "message": "Use this password" }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, "useThisUsername": { "message": "Use this username" }, @@ -2481,6 +2493,12 @@ "personalOwnershipPolicyInEffectImports": { "message": "An organization policy has blocked importing items into your individual vault." }, + "restrictCardTypeImport": { + "message": "Cannot import card item types" + }, + "restrictCardTypeImportDesc": { + "message": "A policy set by 1 or more organizations prevents you from importing cards to your vaults." + }, "domainsTitle": { "message": "Domains", "description": "A category title describing the concept of web domains" @@ -2512,6 +2530,10 @@ "change": { "message": "Change" }, + "changePassword": { + "message": "Change password", + "description": "Change password button for browser at risk notification on login." + }, "changeButtonTitle": { "message": "Change password - $ITEMNAME$", "placeholders": { @@ -2521,6 +2543,9 @@ } } }, + "atRiskPassword": { + "message": "At-risk password" + }, "atRiskPasswords": { "message": "At-risk passwords" }, @@ -2555,6 +2580,26 @@ } } }, + "atRiskChangePrompt": { + "message": "Your password for this site is at-risk. $ORGANIZATION$ has requested that you change it.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + }, + "description": "Notification body when a login triggers an at-risk password change request and the change password domain is known." + }, + "atRiskNavigatePrompt": { + "message": "$ORGANIZATION$ wants you to change this password because it is at-risk. Navigate to your account settings to change the password.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + }, + "description": "Notification body when a login triggers an at-risk password change request and no change password domain is provided." + }, "reviewAndChangeAtRiskPassword": { "message": "Review and change one at-risk password" }, @@ -2674,6 +2719,10 @@ "message": "Vse pošiljke", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "maxAccessCountReached": { + "message": "Max access count reached", + "description": "This text will be displayed after a Send has been accessed the maximum amount of times." + }, "hideTextByDefault": { "message": "Hide text by default" }, @@ -2876,6 +2925,9 @@ "emailVerificationRequiredDesc": { "message": "Za uporabo te funkcionalnosti morate potrditi svoj e-naslov. To lahko storite v spletnem trezorju." }, + "masterPasswordSuccessfullySet": { + "message": "Master password successfully set" + }, "updatedMasterPassword": { "message": "Posodobi glavno geslo" }, @@ -3408,6 +3460,9 @@ "logInRequestSent": { "message": "Request sent" }, + "masterPasswordChanged": { + "message": "Master password saved" + }, "exposedMasterPassword": { "message": "Exposed Master Password" }, @@ -3522,6 +3577,12 @@ "requestAdminApproval": { "message": "Request admin approval" }, + "unableToCompleteLogin": { + "message": "Unable to complete login" + }, + "loginOnTrustedDeviceOrAskAdminToAssignPassword": { + "message": "You need to log in on a trusted device or ask your administrator to assign you a password." + }, "ssoIdentifierRequired": { "message": "Organization SSO identifier is required." }, @@ -3607,14 +3668,6 @@ "trustUser": { "message": "Trust user" }, - "sendsNoItemsTitle": { - "message": "No active Sends", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendsNoItemsMessage": { - "message": "Use Send to securely share encrypted information with anyone.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "sendsTitleNoItems": { "message": "Send sensitive information safely", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -4209,6 +4262,26 @@ "message": "Common formats", "description": "Label indicating the most common import formats" }, + "uriMatchDefaultStrategyHint": { + "message": "URI match detection is how Bitwarden identifies autofill suggestions.", + "description": "Explains to the user that URI match detection determines how Bitwarden suggests autofill options, and clarifies that this default strategy applies when no specific match detection is set for a login item." + }, + "regExAdvancedOptionWarning": { + "message": "\"Regular expression\" is an advanced option with increased risk of exposing credentials.", + "description": "Content for dialog which warns a user when selecting 'regular expression' matching strategy as a cipher match strategy" + }, + "startsWithAdvancedOptionWarning": { + "message": "\"Starts with\" is an advanced option with increased risk of exposing credentials.", + "description": "Content for dialog which warns a user when selecting 'starts with' matching strategy as a cipher match strategy" + }, + "uriMatchWarningDialogLink": { + "message": "More about match detection", + "description": "Link to match detection docs on warning dialog for advance match strategy" + }, + "uriAdvancedOption": { + "message": "Advanced options", + "description": "Advanced option placeholder for uri option component" + }, "confirmContinueToBrowserSettingsTitle": { "message": "Continue to browser settings?", "description": "Title for dialog which asks if the user wants to proceed to a relevant browser settings page" @@ -5036,6 +5109,9 @@ "unlockPinSet": { "message": "Unlock PIN set" }, + "unlockWithBiometricSet": { + "message": "Unlock with biometrics set" + }, "authenticating": { "message": "Authenticating" }, @@ -5377,5 +5453,9 @@ }, "noPermissionsViewPage": { "message": "You do not have permissions to view this page. Try logging in with a different account." + }, + "wasmNotSupported": { + "message": "WebAssembly is not supported on your browser or is not enabled. WebAssembly is required to use the Bitwarden app.", + "description": "'WebAssembly' is a technical term and should not be translated." } } diff --git a/apps/browser/src/_locales/sr/messages.json b/apps/browser/src/_locales/sr/messages.json index dae425fcfd3..4ac75bde569 100644 --- a/apps/browser/src/_locales/sr/messages.json +++ b/apps/browser/src/_locales/sr/messages.json @@ -1173,6 +1173,12 @@ "message": "Ох не! Нисмо могли да то сачувамо. Покушајте да ручно унесете детаље.", "description": "Detailed error message shown when saving login details fails." }, + "changePasswordWarning": { + "message": "Након промене лозинке, мораћете да се пријавите са новом лозинком. Активне сесије на другим уређајима биће одјављене у року од једног сата." + }, + "accountRecoveryUpdateMasterPasswordSubtitle": { + "message": "Промените главну лозинку да бисте завршили опоравак налога." + }, "enableChangedPasswordNotification": { "message": "Питај за ажурирање постојеће пријаве" }, @@ -1365,8 +1371,8 @@ "featureUnavailable": { "message": "Функција је недоступна" }, - "encryptionKeyMigrationRequired": { - "message": "Потребна је миграција кључа за шифровање. Пријавите се преко веб сефа да бисте ажурирали кључ за шифровање." + "legacyEncryptionUnsupported": { + "message": "Legacy енкрипција више није подржана. Молимо контактирајте подршку за повраћај налога." }, "premiumMembership": { "message": "Премијум чланство" @@ -1922,6 +1928,9 @@ "typeSshKey": { "message": "SSH кључ" }, + "typeNote": { + "message": "Белешка" + }, "newItemHeader": { "message": "Нови $TYPE$", "placeholders": { @@ -2153,8 +2162,8 @@ "setYourPinCode": { "message": "Поставите свој ПИН код за откључавање Bitwarden-а. Поставке ПИН-а ће се ресетовати ако се икада потпуно одјавите из апликације." }, - "setYourPinCode1": { - "message": "Ваш ПИН ће се користити за откључавање Bitwarden-а уместо ваше главне лозинке. Ваш ПИН ће се ресетовати ако се икада потпуно одјавите са Bitwarden-а." + "setPinCode": { + "message": "Можете употребити овај ПИН да би деблокирали Bitwarden. Ваш ПИН ће се ресетовати ако се икада у потпуности одјавите из апликације." }, "pinRequired": { "message": "ПИН је обавезан." @@ -2204,6 +2213,9 @@ "useThisPassword": { "message": "Употреби ову лозинку" }, + "useThisPassphrase": { + "message": "Употреби ову приступну фразу" + }, "useThisUsername": { "message": "Употреби ово корисничко име" }, @@ -2481,6 +2493,12 @@ "personalOwnershipPolicyInEffectImports": { "message": "Политика организације је блокирала увоз ставки у ваш појединачни сеф." }, + "restrictCardTypeImport": { + "message": "Не могу увозити врсте картица" + }, + "restrictCardTypeImportDesc": { + "message": "Политика која је поставила 1 или више организација спречава вас да се увозе картице у сефу." + }, "domainsTitle": { "message": "Домени", "description": "A category title describing the concept of web domains" @@ -2512,6 +2530,10 @@ "change": { "message": "Промени" }, + "changePassword": { + "message": "Промени лозинку", + "description": "Change password button for browser at risk notification on login." + }, "changeButtonTitle": { "message": "Промена лозинке - $ITEMNAME$", "placeholders": { @@ -2521,6 +2543,9 @@ } } }, + "atRiskPassword": { + "message": "Лозинка под ризиком" + }, "atRiskPasswords": { "message": "Лозинке под ризиком" }, @@ -2555,6 +2580,26 @@ } } }, + "atRiskChangePrompt": { + "message": "Ваша лозинка за ову страницу је ризична. $ORGANIZATION$ је затражио да је промените.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + }, + "description": "Notification body when a login triggers an at-risk password change request and the change password domain is known." + }, + "atRiskNavigatePrompt": { + "message": "$ORGANIZATION$ жели да промените ову лозинку јер је ризична. Идите до поставки вашег налога да бисте променили лозинку.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + }, + "description": "Notification body when a login triggers an at-risk password change request and no change password domain is provided." + }, "reviewAndChangeAtRiskPassword": { "message": "Прегледајте и промените једну лозинку за ризик" }, @@ -2674,6 +2719,10 @@ "message": "Све „Send“", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "maxAccessCountReached": { + "message": "Достигнут максималан број приступа", + "description": "This text will be displayed after a Send has been accessed the maximum amount of times." + }, "hideTextByDefault": { "message": "Сакриј текст подразумевано" }, @@ -2876,6 +2925,9 @@ "emailVerificationRequiredDesc": { "message": "Морате да потврдите е-пошту да бисте користили ову функцију. Можете да потврдите е-пошту у веб сефу." }, + "masterPasswordSuccessfullySet": { + "message": "Главна лозинка успешно постављена" + }, "updatedMasterPassword": { "message": "Главна лозинка ажурирана" }, @@ -3408,6 +3460,9 @@ "logInRequestSent": { "message": "Захтев је послат" }, + "masterPasswordChanged": { + "message": "Главна лозинка сачувана" + }, "exposedMasterPassword": { "message": "Изложена главна лозинка" }, @@ -3522,6 +3577,12 @@ "requestAdminApproval": { "message": "Затражити одобрење администратора" }, + "unableToCompleteLogin": { + "message": "Није могуће завршити пријаву" + }, + "loginOnTrustedDeviceOrAskAdminToAssignPassword": { + "message": "Потребно је да се пријавите на поузданом уређају или да замолите администратора да вам додели лозинку." + }, "ssoIdentifierRequired": { "message": "Потребан је SSO идентификатор организације." }, @@ -3607,20 +3668,12 @@ "trustUser": { "message": "Повери кориснику" }, - "sendsNoItemsTitle": { - "message": "Нема активних Sends", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendsNoItemsMessage": { - "message": "Употребите Send да безбедно делите шифроване информације са било ким.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "sendsTitleNoItems": { - "message": "Send sensitive information safely", + "message": "Шаљите безбедно осетљиве информације", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "sendsBodyNoItems": { - "message": "Share files and data securely with anyone, on any platform. Your information will remain end-to-end encrypted while limiting exposure.", + "message": "Делите датотеке и податке безбедно са било ким, на било којој платформи. Ваше информације ће остати шифроване од почетка-до-краја уз ограничење изложености.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "inputRequired": { @@ -4209,6 +4262,26 @@ "message": "Уобичајени формати", "description": "Label indicating the most common import formats" }, + "uriMatchDefaultStrategyHint": { + "message": "Детекција подударања URI-ја је начин на који Bitwarden идентификује предлоге за ауто-попуњавање.", + "description": "Explains to the user that URI match detection determines how Bitwarden suggests autofill options, and clarifies that this default strategy applies when no specific match detection is set for a login item." + }, + "regExAdvancedOptionWarning": { + "message": "„Регуларни израз“ је напредна опција са повећаним ризиком од откривања акредитива.", + "description": "Content for dialog which warns a user when selecting 'regular expression' matching strategy as a cipher match strategy" + }, + "startsWithAdvancedOptionWarning": { + "message": "„Почни са“ је напредна опција са повећаним ризиком од откривања акредитива.", + "description": "Content for dialog which warns a user when selecting 'starts with' matching strategy as a cipher match strategy" + }, + "uriMatchWarningDialogLink": { + "message": "Више о откривању подударања", + "description": "Link to match detection docs on warning dialog for advance match strategy" + }, + "uriAdvancedOption": { + "message": "Напредне опције", + "description": "Advanced option placeholder for uri option component" + }, "confirmContinueToBrowserSettingsTitle": { "message": "Желите ли да наставите на подешавања претраживача?", "description": "Title for dialog which asks if the user wants to proceed to a relevant browser settings page" @@ -5028,13 +5101,16 @@ "message": "Биометријско откључавање није доступно из непознатог разлога." }, "unlockVault": { - "message": "Unlock your vault in seconds" + "message": "Откључајте сеф у секунди" }, "unlockVaultDesc": { - "message": "You can customize your unlock and timeout settings to more quickly access your vault." + "message": "Можете да прилагодите своје поставке за откључавање и истек времена да бисте брзо приступили сефу." }, "unlockPinSet": { - "message": "Unlock PIN set" + "message": "Постављен ПИН деблокирања" + }, + "unlockWithBiometricSet": { + "message": "Откључај биометријом" }, "authenticating": { "message": "Аутентификација" @@ -5359,23 +5435,27 @@ "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, "generatorNudgeTitle": { - "message": "Quickly create passwords" + "message": "Брзо креирајте лозинке" }, "generatorNudgeBodyOne": { - "message": "Easily create strong and unique passwords by clicking on", + "message": "Лако креирајте снажне и јединствене лозинке кликом на", "description": "Two part message", "example": "Easily create strong and unique passwords by clicking on {icon} to help you keep your logins secure." }, "generatorNudgeBodyTwo": { - "message": "to help you keep your logins secure.", + "message": "да вам помогне да задржите своје пријаве сигурно.", "description": "Two part message", "example": "Easily create strong and unique passwords by clicking on {icon} to help you keep your logins secure." }, "generatorNudgeBodyAria": { - "message": "Easily create strong and unique passwords by clicking on the Generate password button to help you keep your logins secure.", + "message": "Лако креирајте снажне и јединствене лозинке кликом на дугме „Генерирате лозинку“ да вам помогне да чувате своје пријаве на сигурно.", "description": "Aria label for the body content of the generator nudge" }, "noPermissionsViewPage": { "message": "Немате дозволе за преглед ове странице. Покушајте да се пријавите са другим налогом." + }, + "wasmNotSupported": { + "message": "WebAssembly није подржано или није уапљено на вашем прегледачу. WebAssembly је потребно да би се користила апликација Bitwarden.", + "description": "'WebAssembly' is a technical term and should not be translated." } } diff --git a/apps/browser/src/_locales/sv/messages.json b/apps/browser/src/_locales/sv/messages.json index f57209122ef..ff20cdd2ed9 100644 --- a/apps/browser/src/_locales/sv/messages.json +++ b/apps/browser/src/_locales/sv/messages.json @@ -3,7 +3,7 @@ "message": "Bitwarden" }, "appLogoLabel": { - "message": "Bitwarden logo" + "message": "Bitwardens logotyp" }, "extName": { "message": "Bitwarden Lösenordshanterare", @@ -84,7 +84,7 @@ "message": "Huvudlösenordsledtråd (valfri)" }, "passwordStrengthScore": { - "message": "Password strength score $SCORE$", + "message": "Lösenordsstyrka $SCORE$ (score)", "placeholders": { "score": { "content": "$1", @@ -105,7 +105,7 @@ } }, "finishJoiningThisOrganizationBySettingAMasterPassword": { - "message": "Finish joining this organization by setting a master password." + "message": "Avsluta anslutningen till denna organisation genom att ange ett huvudlösenord." }, "tab": { "message": "Flik" @@ -246,7 +246,7 @@ "message": "Logga in i ditt valv" }, "autoFillInfo": { - "message": "Det finns inga inloggningar tillgängliga för automatisk ifyllnad på den nuvarande fliken." + "message": "Det finns inga inloggningar tillgängliga för autofyll på den nuvarande fliken." }, "addLogin": { "message": "Lägg till en inloggning" @@ -264,7 +264,7 @@ "message": "Begär lösenordsledtråd" }, "enterYourAccountEmailAddressAndYourPasswordHintWillBeSentToYou": { - "message": "Enter your account email address and your password hint will be sent to you" + "message": "Ange din e-postadress för kontot så skickas en lösenordshint till dig" }, "getMasterPasswordHint": { "message": "Hämta huvudlösenordsledtråd" @@ -350,7 +350,7 @@ "message": "Bitwarden Hemlighetshanterare" }, "continueToSecretsManagerPageDesc": { - "message": "Securely store, manage, and share developer secrets with Bitwarden Secrets Manager. Learn more on the bitwarden.com website." + "message": "Lagra, hantera och dela utvecklarhemligheter på ett säkert sätt med Bitwarden Secrets Manager. Läs mer på webbplatsen bitwarden.com." }, "passwordlessDotDev": { "message": "Passwordless.dev" @@ -359,10 +359,10 @@ "message": "Skapa smidiga och säkra inloggningsupplevelser fria från traditionella lösenord med Passwordless.dev. Läs mer på bitwarden.com hemsidan." }, "freeBitwardenFamilies": { - "message": "Free Bitwarden Families" + "message": "Gratis Bitwarden Familjer" }, "freeBitwardenFamiliesPageDesc": { - "message": "You are eligible for Free Bitwarden Families. Redeem this offer today in the web app." + "message": "Du är berättigad till gratis Bitwarden Families. Lös in erbjudandet idag i webbappen." }, "version": { "message": "Version" @@ -383,7 +383,7 @@ "message": "Redigera mapp" }, "editFolderWithName": { - "message": "Edit folder: $FOLDERNAME$", + "message": "Redigera mapp: $FOLDERNAME$", "placeholders": { "foldername": { "content": "$1", @@ -398,7 +398,7 @@ "message": "Mappnamn" }, "folderHintText": { - "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums" + "message": "Nästla en mapp genom att lägga till namnet på den överordnade mappen följt av \"/\". Exempel: Sociala/Forums" }, "noFoldersAdded": { "message": "Inga mappar tillagda" @@ -407,7 +407,7 @@ "message": "Skapa mappar för att organisera dina valvobjekt" }, "deleteFolderPermanently": { - "message": "Are you sure you want to permanently delete this folder?" + "message": "Är du säker på att du vill radera den här mappen permanent?" }, "deleteFolder": { "message": "Radera mapp" @@ -541,7 +541,7 @@ "description": "Label for the avoid ambiguous characters checkbox." }, "generatorPolicyInEffect": { - "message": "Enterprise policy requirements have been applied to your generator options.", + "message": "Företagets policykrav har tillämpats på dina generatoralternativ.", "description": "Indicates that a policy limits the credential generator screen." }, "searchVault": { @@ -566,7 +566,7 @@ "message": "Lösenord" }, "totp": { - "message": "Authenticator secret" + "message": "Autentiserarens hemlighet" }, "passphrase": { "message": "Lösenfras" @@ -575,7 +575,7 @@ "message": "Favorit" }, "unfavorite": { - "message": "Unfavorite" + "message": "Ta bort favorit" }, "itemAddedToFavorites": { "message": "Objekt tillagt i favoriter" @@ -635,7 +635,7 @@ "message": "Upplåsningsalternativ" }, "unlockMethodNeededToChangeTimeoutActionDesc": { - "message": "Set up an unlock method to change your vault timeout action." + "message": "Konfigurera en upplåsningsmetod för att ändra timeout-åtgärden för valvet." }, "unlockMethodNeeded": { "message": "Ställ in en upplåsningsmetod i Inställningar" @@ -659,7 +659,7 @@ "message": "Verifiera din identitet" }, "weDontRecognizeThisDevice": { - "message": "We don't recognize this device. Enter the code sent to your email to verify your identity." + "message": "Vi känner inte igen den här enheten. Ange koden som skickats till din e-post för att verifiera din identitet." }, "continueLoggingIn": { "message": "Fortsätt logga in" @@ -814,7 +814,7 @@ "message": "Verifieringskod krävs." }, "webauthnCancelOrTimeout": { - "message": "The authentication was cancelled or took too long. Please try again." + "message": "Autentiseringen avbröts eller tog för lång tid. Vänligen försök igen." }, "invalidVerificationCode": { "message": "Ogiltig verifieringskod" @@ -839,16 +839,16 @@ "message": "Autentiseringsnyckel tillagd" }, "totpCapture": { - "message": "Scan authenticator QR code from current webpage" + "message": "Skanna QR-koden för autentisering från aktuell webbsida" }, "totpHelperTitle": { - "message": "Make 2-step verification seamless" + "message": "Gör tvåstegsverifiering sömlös" }, "totpHelper": { - "message": "Bitwarden can store and fill 2-step verification codes. Copy and paste the key into this field." + "message": "Bitwarden kan lagra och fylla i 2-stegs verifieringskoder. Kopiera och klistra in nyckeln i detta fält." }, "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 kan lagra och fylla i 2-stegsverifieringskoder. Välj kameraikonen för att ta en skärmdump av den här webbplatsens QR-kod för autentisering, eller kopiera och klistra in nyckeln i det här fältet." }, "learnMoreAboutAuthenticators": { "message": "Läs mer om autentiserare" @@ -872,34 +872,34 @@ "message": "Logga in på Bitwarden" }, "enterTheCodeSentToYourEmail": { - "message": "Enter the code sent to your email" + "message": "Ange koden som skickats till din e-post" }, "enterTheCodeFromYourAuthenticatorApp": { - "message": "Enter the code from your authenticator app" + "message": "Ange koden från din autentiseringsapp" }, "pressYourYubiKeyToAuthenticate": { - "message": "Press your YubiKey to authenticate" + "message": "Tryck på din YubiKey för att autentisera" }, "duoTwoFactorRequiredPageSubtitle": { - "message": "Duo two-step login is required for your account. Follow the steps below to finish logging in." + "message": "Tvåstegsinloggning med Duo krävs för ditt konto. Följ stegen nedan för att slutföra inloggningen." }, "followTheStepsBelowToFinishLoggingIn": { - "message": "Follow the steps below to finish logging in." + "message": "Följ stegen nedan för att slutföra inloggningen." }, "followTheStepsBelowToFinishLoggingInWithSecurityKey": { - "message": "Follow the steps below to finish logging in with your security key." + "message": "Följ stegen nedan för att slutföra inloggningen med din säkerhetsnyckel." }, "restartRegistration": { - "message": "Restart registration" + "message": "Starta om registrering" }, "expiredLink": { - "message": "Expired link" + "message": "Utgången länk" }, "pleaseRestartRegistrationOrTryLoggingIn": { - "message": "Please restart registration or try logging in." + "message": "Starta om registreringen eller försök logga in." }, "youMayAlreadyHaveAnAccount": { - "message": "You may already have an account" + "message": "Du kanske redan har ett konto" }, "logOutConfirmation": { "message": "Är du säker på att du vill logga ut?" @@ -911,7 +911,7 @@ "message": "Nej" }, "location": { - "message": "Location" + "message": "Plats" }, "unexpectedError": { "message": "Ett okänt fel har inträffat." @@ -926,10 +926,10 @@ "message": "Tvåstegsverifiering gör ditt konto säkrare genom att kräva att du verifierar din inloggning med en annan enhet, t.ex. en säkerhetsnyckel, autentiseringsapp, SMS, telefonsamtal eller e-post. Tvåstegsverifiering kan aktiveras i Bitwardens webbvalv. Vill du besöka webbplatsen nu?" }, "twoStepLoginConfirmationContent": { - "message": "Make your account more secure by setting up two-step login in the Bitwarden web app." + "message": "Gör ditt konto säkrare genom att konfigurera tvåstegsverifiering i Bitwardens webbapp." }, "twoStepLoginConfirmationTitle": { - "message": "Continue to web app?" + "message": "Fortsätt till webbapp?" }, "editedFolder": { "message": "Mapp sparad" @@ -1016,37 +1016,37 @@ "message": "Be om att lägga till inloggning" }, "vaultSaveOptionsTitle": { - "message": "Save to vault options" + "message": "Alternativ för att spara i valvet" }, "addLoginNotificationDesc": { "message": "Be om att lägga till ett objekt om det inte finns i ditt valv." }, "addLoginNotificationDescAlt": { - "message": "Ask to add an item if one isn't found in your vault. Applies to all logged in accounts." + "message": "Be att få lägga till ett objekt om det inte finns i ditt valv. Gäller för alla inloggade konton." }, "showCardsInVaultViewV2": { - "message": "Always show cards as Autofill suggestions on Vault view" + "message": "Visa alltid kort som Autofyll-förslag i Vault-vyn" }, "showCardsCurrentTab": { "message": "Visa kort på fliksida" }, "showCardsCurrentTabDesc": { - "message": "Lista kortobjekt på fliksidan för enkel automatisk fyllning." + "message": "Lista kortobjekt på fliksidan för enkel autofyll." }, "showIdentitiesInVaultViewV2": { - "message": "Always show identities as Autofill suggestions on Vault view" + "message": "Visa alltid identiteter som Autofyll-förslag i Vault-vyn" }, "showIdentitiesCurrentTab": { "message": "Visa identiteter på fliksidan" }, "showIdentitiesCurrentTabDesc": { - "message": "Lista identitetsobjekt på fliksidan för enkel automatisk fyllning." + "message": "Lista identitetsobjekt på fliksidan för enkel autofyll." }, "clickToAutofillOnVault": { - "message": "Click items to autofill on Vault view" + "message": "Klicka på objekt som ska fyllas i automatiskt i Vault-vyn" }, "clickToAutofill": { - "message": "Click items in autofill suggestion to fill" + "message": "Klicka på objekt i autofyllförslaget för att fylla i" }, "clearClipboard": { "message": "Rensa urklipp", @@ -1063,7 +1063,7 @@ "message": "Spara" }, "notificationViewAria": { - "message": "View $ITEMNAME$, opens in new window", + "message": "Visa $ITEMNAME$, öppnas i nytt fönster", "placeholders": { "itemName": { "content": "$1" @@ -1072,18 +1072,18 @@ "description": "Aria label for the view button in notification bar confirmation message" }, "notificationNewItemAria": { - "message": "New Item, opens in new window", + "message": "Nytt föremål, öppnas i nytt fönster", "description": "Aria label for the new item button in notification bar confirmation message when error is prompted" }, "notificationEditTooltip": { - "message": "Edit before saving", + "message": "Redigera innan du sparar", "description": "Tooltip and Aria label for edit button on cipher item" }, "newNotification": { - "message": "New notification" + "message": "Nytt meddelande" }, "labelWithNotification": { - "message": "$LABEL$: New notification", + "message": "$LABEL$: Nytt meddelande", "description": "Label for the notification with a new login suggestion.", "placeholders": { "label": { @@ -1093,15 +1093,15 @@ } }, "notificationLoginSaveConfirmation": { - "message": "saved to Bitwarden.", + "message": "sparades till Bitwarden.", "description": "Shown to user after item is saved." }, "notificationLoginUpdatedConfirmation": { - "message": "updated in Bitwarden.", + "message": "uppdaterad i Bitwarden.", "description": "Shown to user after item is updated." }, "selectItemAriaLabel": { - "message": "Select $ITEMTYPE$, $ITEMNAME$", + "message": "Välj $ITEMTYPE$, $ITEMNAME$", "description": "Used by screen readers. $1 is the item type (like vault or folder), $2 is the selected item name.", "placeholders": { "itemType": { @@ -1113,35 +1113,35 @@ } }, "saveAsNewLoginAction": { - "message": "Save as new login", + "message": "Spara som ny inloggning", "description": "Button text for saving login details as a new entry." }, "updateLoginAction": { - "message": "Update login", + "message": "Uppdatera inloggning", "description": "Button text for updating an existing login entry." }, "unlockToSave": { - "message": "Unlock to save this login", + "message": "Lås upp för att spara denna inloggning", "description": "User prompt to take action in order to save the login they just entered." }, "saveLogin": { - "message": "Save login", + "message": "Spara inloggning", "description": "Prompt asking the user if they want to save their login details." }, "updateLogin": { - "message": "Update existing login", + "message": "Uppdatera befintlig inloggning", "description": "Prompt asking the user if they want to update an existing login entry." }, "loginSaveSuccess": { - "message": "Login saved", + "message": "Inloggning sparad", "description": "Message displayed when login details are successfully saved." }, "loginUpdateSuccess": { - "message": "Login updated", + "message": "Inloggning uppdaterad", "description": "Message displayed when login details are successfully updated." }, "loginUpdateTaskSuccess": { - "message": "Great job! You took the steps to make you and $ORGANIZATION$ more secure.", + "message": "Bra jobbat! Du tog stegen för att göra dig och $ORGANIZATION$ säkrare.", "placeholders": { "organization": { "content": "$1" @@ -1150,7 +1150,7 @@ "description": "Shown to user after login is updated." }, "loginUpdateTaskSuccessAdditional": { - "message": "Thank you for making $ORGANIZATION$ more secure. You have $TASK_COUNT$ more passwords to update.", + "message": "Tack för att du gör $ORGANIZATION$ säkrare. Du har $TASK_COUNT$ fler lösenord att uppdatera.", "placeholders": { "organization": { "content": "$1" @@ -1162,17 +1162,23 @@ "description": "Shown to user after login is updated." }, "nextSecurityTaskAction": { - "message": "Change next password", + "message": "Ändra nästa lösenord", "description": "Message prompting user to undertake completion of another security task." }, "saveFailure": { - "message": "Error saving", + "message": "Fel i sparandet", "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.", + "message": "Åh nej! Vi kunde inte spara detta. Försök att ange uppgifterna manuellt.", "description": "Detailed error message shown when saving login details fails." }, + "changePasswordWarning": { + "message": "När du har ändrat ditt lösenord måste du logga in med det nya lösenordet. Aktiva sessioner på andra enheter kommer att loggas ut inom en timme." + }, + "accountRecoveryUpdateMasterPasswordSubtitle": { + "message": "Ändra ditt huvudlösenord för att slutföra återställningen av kontot." + }, "enableChangedPasswordNotification": { "message": "Be om att uppdatera befintlig inloggning" }, @@ -1180,7 +1186,7 @@ "message": "Be om att uppdatera ett lösenord när en ändring upptäcks på en webbplats." }, "changedPasswordNotificationDescAlt": { - "message": "Ask to update a login's password when a change is detected on a website. Applies to all logged in accounts." + "message": "Be att få uppdatera lösenordet för en inloggning när en ändring upptäcks på en webbplats. Gäller för alla inloggade konton." }, "enableUsePasskeys": { "message": "Be om att spara och använda lösennycklar" @@ -1195,7 +1201,7 @@ "message": "Uppdatera" }, "notificationUnlockDesc": { - "message": "Lås upp ditt Bitwarden-valv för att slutföra begäran om automatisk ifyllnad." + "message": "Lås upp ditt Bitwarden-valv för att slutföra begäran om autofyll." }, "notificationUnlock": { "message": "Lås upp" @@ -1207,17 +1213,17 @@ "message": "Visa alternativ för snabbmenyn" }, "contextMenuItemDesc": { - "message": "Använd ett andra klick för att komma åt lösenordsgenerering och matchande inloggningar för webbplatsen. " + "message": "Använd ett andra klick för att komma åt lösenordsgenerering och matchande inloggningar för webbplatsen." }, "contextMenuItemDescAlt": { - "message": "Use a secondary click to access password generation and matching logins for the website. Applies to all logged in accounts." + "message": "Använd ett sekundärt klick för att få tillgång till lösenordsgenerering och matchande inloggningar för webbplatsen. Gäller för alla inloggade konton." }, "defaultUriMatchDetection": { "message": "Standardmatchning för URI", "description": "Default URI match detection for autofill." }, "defaultUriMatchDetectionDesc": { - "message": "Välj standardalternativet för hur matchning av URI är hanterat för inloggningar när du utför operationer såsom automatisk ifyllnad." + "message": "Välj standardalternativet för hur matchning av URI är hanterat för inloggningar när du utför operationer såsom autofyll." }, "theme": { "message": "Tema" @@ -1246,35 +1252,35 @@ "message": "Filformat" }, "fileEncryptedExportWarningDesc": { - "message": "This file export will be password protected and require the file password to decrypt." + "message": "Den här filexporten kommer att vara lösenordsskyddad och kräver filens lösenord för att dekryptera." }, "filePassword": { "message": "Fillösenord" }, "exportPasswordDescription": { - "message": "This password will be used to export and import this file" + "message": "Detta lösenord kommer att användas för att exportera och importera denna fil" }, "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": "Använd ditt kontos krypteringsnyckel, som härrör från ditt kontos användarnamn och huvudlösenord, för att kryptera exporten och begränsa importen till endast det aktuella Bitwarden-kontot." }, "passwordProtectedOptionDescription": { - "message": "Set a file password to encrypt the export and import it to any Bitwarden account using the password for decryption." + "message": "Ange ett lösenord för filen för att kryptera exporten och importera den till valfritt Bitwarden-konto med lösenordet för dekryptering." }, "exportTypeHeading": { "message": "Exporttyp" }, "accountRestricted": { - "message": "Account restricted" + "message": "Konto med restriktioner" }, "filePasswordAndConfirmFilePasswordDoNotMatch": { - "message": "“File password” and “Confirm file password“ do not match." + "message": "\"Fillösenord\" och \"Bekräfta fillösenord\" stämmer inte överens." }, "warning": { "message": "VARNING", "description": "WARNING (should stay in capitalized letters if the language permits)" }, "warningCapitalized": { - "message": "Warning", + "message": "Varning", "description": "Warning (should maintain locale-relevant capitalization)" }, "confirmVaultExport": { @@ -1296,7 +1302,7 @@ "message": "Delad" }, "bitwardenForBusinessPageDesc": { - "message": "Bitwarden for Business allows you to share your vault items with others by using an organization. Learn more on the bitwarden.com website." + "message": "Med Bitwarden for Business kan du dela dina valvobjekt med andra genom att använda en organisation. Läs mer på webbplatsen bitwarden.com." }, "moveToOrganization": { "message": "Flytta till organisation" @@ -1354,7 +1360,7 @@ "message": "Fil" }, "fileToShare": { - "message": "File to share" + "message": "Fil att dela" }, "selectFile": { "message": "Välj en fil" @@ -1365,8 +1371,8 @@ "featureUnavailable": { "message": "Funktion ej tillgänglig" }, - "encryptionKeyMigrationRequired": { - "message": "Migrering av krypteringsnyckel krävs. Logga in på webbvalvet för att uppdatera din krypteringsnyckel." + "legacyEncryptionUnsupported": { + "message": "Legacy-kryptering stöds inte längre. Vänligen kontakta support för att återställa ditt konto." }, "premiumMembership": { "message": "Premium-medlemskap" @@ -1411,7 +1417,7 @@ "message": "Köp Premium" }, "premiumPurchaseAlertV2": { - "message": "You can purchase Premium from your account settings on the Bitwarden web app." + "message": "Du kan köpa Premium från dina kontoinställningar i Bitwardens webbapp." }, "premiumCurrentMember": { "message": "Du är en premium-medlem!" @@ -1459,10 +1465,10 @@ "message": "Ett premium-medlemskap krävs för att använda den här funktionen." }, "authenticationTimeout": { - "message": "Authentication timeout" + "message": "Timeout för autentisering" }, "authenticationSessionTimedOut": { - "message": "The authentication session timed out. Please restart the login process." + "message": "Autentiseringssessionen timade ut. Vänligen starta om inloggningsprocessen." }, "verificationCodeEmailSent": { "message": "Verifieringsmeddelande har skickats till $EMAIL$.", @@ -1474,29 +1480,29 @@ } }, "dontAskAgainOnThisDeviceFor30Days": { - "message": "Don't ask again on this device for 30 days" + "message": "Fråga inte igen på den här enheten i 30 dagar" }, "selectAnotherMethod": { - "message": "Select another method", + "message": "Välj en annan metod", "description": "Select another two-step login method" }, "useYourRecoveryCode": { - "message": "Use your recovery code" + "message": "Använd din återställningskod" }, "insertU2f": { "message": "Sätt i din säkerhetsnyckel i en av datorns USB-portar. Om nyckeln har en knapp, sätt fingret på den." }, "openInNewTab": { - "message": "Open in new tab" + "message": "Öppna i ny flik" }, "webAuthnAuthenticate": { "message": "Autentisera WebAuthn" }, "readSecurityKey": { - "message": "Read security key" + "message": "Läs säkerhetsnyckel" }, "awaitingSecurityKeyInteraction": { - "message": "Awaiting security key interaction..." + "message": "Väntar på interaktion med säkerhetsnyckel..." }, "loginUnavailable": { "message": "Inloggning ej tillgänglig" @@ -1511,7 +1517,7 @@ "message": "Alternativ för tvåstegsverifiering" }, "selectTwoStepLoginMethod": { - "message": "Select two-step login method" + "message": "Välj metod för tvåstegsverifiering" }, "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." @@ -1523,7 +1529,7 @@ "message": "Autentiseringsapp" }, "authenticatorAppDescV2": { - "message": "Enter a code generated by an authenticator app like Bitwarden Authenticator.", + "message": "Ange en kod som genererats av en autentiseringsapp som Bitwarden Authenticator.", "description": "'Bitwarden Authenticator' is a product name and should not be translated." }, "yubiKeyTitleV2": { @@ -1556,13 +1562,13 @@ "message": "Egen-hostad miljö" }, "selfHostedBaseUrlHint": { - "message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com" + "message": "Ange bas-URL:en för din självhostade Bitwarden-installation. Exempel: https://bitwarden.company.com" }, "selfHostedCustomEnvHeader": { - "message": "For advanced configuration, you can specify the base URL of each service independently." + "message": "För avancerad konfiguration kan du ange bas-URL för varje tjänst separat." }, "selfHostedEnvFormInvalid": { - "message": "You must add either the base Server URL or at least one custom environment." + "message": "Du måste lägga till antingen serverns bas-URL eller minst en anpassad miljö." }, "customEnvironment": { "message": "Anpassad miljö" @@ -1571,7 +1577,7 @@ "message": "Server-URL" }, "selfHostBaseUrl": { - "message": "Self-host server URL", + "message": "Självhostad server-URL", "description": "Label for field requesting a self-hosted integration service URL" }, "apiUrl": { @@ -1593,20 +1599,20 @@ "message": "Miljö-URL:erna har sparats" }, "showAutoFillMenuOnFormFields": { - "message": "Visa menyn för automatisk ifyllnad på formulärfält", + "message": "Visa menyn för autofyll på formulärfält", "description": "Represents the message for allowing the user to enable the autofill overlay" }, "autofillSuggestionsSectionTitle": { "message": "Förslag för autofyll" }, "autofillSpotlightTitle": { - "message": "Easily find autofill suggestions" + "message": "Hitta förslag på autofyll enkelt" }, "autofillSpotlightDesc": { - "message": "Turn off your browser's autofill settings, so they don't conflict with Bitwarden." + "message": "Stäng av webbläsarens autofyllinställningar så att de inte orsakar konflikt med Bitwarden." }, "turnOffBrowserAutofill": { - "message": "Turn off $BROWSER$ autofill", + "message": "Stäng av $BROWSER$ autofyll", "placeholders": { "browser": { "content": "$1", @@ -1615,7 +1621,7 @@ } }, "turnOffAutofill": { - "message": "Turn off autofill" + "message": "Stäng av autofyll" }, "showInlineMenuLabel": { "message": "Visa förslag för autofyll i formulärfält" @@ -1627,13 +1633,13 @@ "message": "Visa kort som förslag" }, "showInlineMenuOnIconSelectionLabel": { - "message": "Display suggestions when icon is selected" + "message": "Visa förslag när ikonen markerats" }, "showInlineMenuOnFormFieldsDescAlt": { - "message": "Applies to all logged in accounts." + "message": "Gäller för alla inloggade konton." }, "turnOffBrowserBuiltInPasswordManagerSettings": { - "message": "Turn off your browser's built in password manager settings to avoid conflicts." + "message": "Stäng av webbläsarens inbyggda lösenordshanterarinställningar för att undvika konflikter." }, "turnOffBrowserBuiltInPasswordManagerSettingsLink": { "message": "Redigera webbläsarinställningar." @@ -1643,11 +1649,11 @@ "description": "Overlay setting select option for disabling autofill overlay" }, "autofillOverlayVisibilityOnFieldFocus": { - "message": "When field is selected (on focus)", + "message": "När fältet är markerat (i fokus)", "description": "Overlay appearance select option for showing the field on focus of the input element" }, "autofillOverlayVisibilityOnButtonClick": { - "message": "När ikonen för automatisk ifyllnad är vald", + "message": "När ikonen för autofyll är vald", "description": "Overlay appearance select option for showing the field on click of the overlay icon" }, "enableAutoFillOnPageLoadSectionTitle": { @@ -1693,13 +1699,13 @@ "message": "Öppna valvet i sidofältet" }, "commandAutofillLoginDesc": { - "message": "Autofill the last used login for the current website" + "message": "Autofyll den senast använda inloggningen för den aktuella webbplatsen" }, "commandAutofillCardDesc": { - "message": "Autofill the last used card for the current website" + "message": "Autofyll det senast använda kortet för den aktuella webbplatsen" }, "commandAutofillIdentityDesc": { - "message": "Autofill the last used identity for the current website" + "message": "Autofyll den senast använda identiteten för den aktuella webbplatsen" }, "commandGeneratePasswordDesc": { "message": "Skapa och kopiera ett nytt slumpmässigt lösenord till urklipp." @@ -1723,7 +1729,7 @@ "message": "Dra för att sortera" }, "dragToReorder": { - "message": "Drag to reorder" + "message": "Dra för att ändra ordning" }, "cfTypeText": { "message": "Text" @@ -1758,7 +1764,7 @@ "message": "Visa en identifierbar bild bredvid varje inloggning." }, "faviconDescAlt": { - "message": "Show a recognizable image next to each login. Applies to all logged in accounts." + "message": "Visa en igenkännbar bild bredvid varje inloggning. Gäller för alla inloggade konton." }, "enableBadgeCounter": { "message": "Visa aktivitetsräknaren" @@ -1922,6 +1928,9 @@ "typeSshKey": { "message": "SSH-nyckel" }, + "typeNote": { + "message": "Anteckning" + }, "newItemHeader": { "message": "Ny $TYPE$", "placeholders": { @@ -1959,7 +1968,7 @@ "message": "Rensa generatorhistorik" }, "cleargGeneratorHistoryDescription": { - "message": "If you continue, all entries will be permanently deleted from generator's history. Are you sure you want to continue?" + "message": "Om du fortsätter kommer alla poster att raderas permanent från generatorns historik. Är du säker på att du vill fortsätta?" }, "back": { "message": "Tillbaka" @@ -1998,7 +2007,7 @@ "message": "Säkra anteckningar" }, "sshKeys": { - "message": "SSH Keys" + "message": "SSH-nycklar" }, "clear": { "message": "Rensa", @@ -2081,10 +2090,10 @@ "message": "Rensa historik" }, "nothingToShow": { - "message": "Nothing to show" + "message": "Inget tillgängligt innehåll" }, "nothingGeneratedRecently": { - "message": "You haven't generated anything recently" + "message": "Du har inte genererat något nyligen" }, "remove": { "message": "Ta bort" @@ -2153,8 +2162,8 @@ "setYourPinCode": { "message": "Ange en PIN-kod för att låsa upp Bitwarden. Dina PIN-inställningar återställs om du någonsin loggar ut helt från programmet." }, - "setYourPinCode1": { - "message": "Your PIN will be used to unlock Bitwarden instead of your master password. Your PIN will reset if you ever fully log out of Bitwarden." + "setPinCode": { + "message": "Du kan använda denna PIN-kod för att låsa upp Bitwarden. Din PIN-kod kommer att återställas om du någonsin loggar ut helt från programmet." }, "pinRequired": { "message": "PIN-kod krävs." @@ -2181,7 +2190,7 @@ "message": "Lås med huvudlösenordet vid omstart av webbläsaren" }, "lockWithMasterPassOnRestart1": { - "message": "Require master password on browser restart" + "message": "Kräv huvudlösenord vid omstart av webbläsaren" }, "selectOneCollection": { "message": "Du måste markera minst en samling." @@ -2196,36 +2205,39 @@ "message": "Lösenordsgenerator" }, "usernameGenerator": { - "message": "Username generator" + "message": "Användarnamnsgenerator" }, "useThisEmail": { - "message": "Use this email" + "message": "Använd denna e-post" }, "useThisPassword": { - "message": "Use this password" + "message": "Använd detta lösenord" + }, + "useThisPassphrase": { + "message": "Använd denna lösenfras" }, "useThisUsername": { - "message": "Use this username" + "message": "Använd detta användarnamn" }, "securePasswordGenerated": { - "message": "Secure password generated! Don't forget to also update your password on the website." + "message": "Säkert lösenord genererat! Glöm inte att även uppdatera ditt lösenord på webbplatsen." }, "useGeneratorHelpTextPartOne": { - "message": "Use the generator", + "message": "Använd generatorn", "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'" }, "useGeneratorHelpTextPartTwo": { - "message": "to create a strong unique password", + "message": "för att skapa ett starkt unikt lösenord", "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": "Anpassning av valv" }, "vaultTimeoutAction": { "message": "Åtgärd när valvets tidsgräns överskrids" }, "vaultTimeoutAction1": { - "message": "Timeout action" + "message": "Åtgärd vid timeout" }, "lock": { "message": "Lås", @@ -2272,7 +2284,7 @@ "message": "Fyllde i objektet automatiskt och sparade URI:n" }, "autoFillSuccess": { - "message": "Fyllde i objektet automatiskt" + "message": "Fyllde i objektet automatiskt " }, "insecurePageWarning": { "message": "Varning: Detta är en icke säkrad HTTP-sida, och all information du skickar kan potentiellt ses och ändras av andra. Denna inloggning sparades ursprungligen på en säker (HTTPS) sida." @@ -2347,16 +2359,16 @@ "message": "Ditt nya huvudlösenord uppfyller inte kraven i policyn." }, "receiveMarketingEmailsV2": { - "message": "Get advice, announcements, and research opportunities from Bitwarden in your inbox." + "message": "Få råd, nyheter och forskningsmöjligheter från Bitwarden i din inkorg." }, "unsubscribe": { - "message": "Unsubscribe" + "message": "Avprenumerera" }, "atAnyTime": { "message": "när som helst." }, "byContinuingYouAgreeToThe": { - "message": "By continuing, you agree to the" + "message": "Genom att fortsätta godkänner du" }, "and": { "message": "och" @@ -2374,7 +2386,7 @@ "message": "Integritetspolicy" }, "yourNewPasswordCannotBeTheSameAsYourCurrentPassword": { - "message": "Your new password cannot be the same as your current password." + "message": "Ditt nya lösenord får inte vara samma som ditt nuvarande lösenord." }, "hintEqualsPassword": { "message": "Din lösenordsledtråd får inte vara samma som ditt lösenord." @@ -2383,10 +2395,10 @@ "message": "OK" }, "errorRefreshingAccessToken": { - "message": "Access Token Refresh Error" + "message": "Fel vid uppdatering av åtkomsttoken" }, "errorRefreshingAccessTokenDesc": { - "message": "No refresh token or API keys found. Please try logging out and logging back in." + "message": "Ingen uppdateringstoken eller API-nyckel hittades. Försök att logga ut och logga in igen." }, "desktopSyncVerificationTitle": { "message": "Verifiering av synkronisering med skrivbordsprogrammet" @@ -2425,10 +2437,10 @@ "message": "Kontoavvikelse" }, "nativeMessagingWrongUserKeyTitle": { - "message": "Biometric key missmatch" + "message": "Missmatchning av biometrisk nyckel" }, "nativeMessagingWrongUserKeyDesc": { - "message": "Biometric unlock failed. The biometric secret key failed to unlock the vault. Please try to set up biometrics again." + "message": "Biometrisk upplåsning misslyckades. Den biometriska hemliga nyckeln kunde inte låsa upp valvet. Försök att ställa in biometri igen." }, "biometricsNotEnabledTitle": { "message": "Biometri är inte aktiverat" @@ -2443,16 +2455,16 @@ "message": "Biometri i webbläsaren stöds inte på den här enheten." }, "biometricsNotUnlockedTitle": { - "message": "User locked or logged out" + "message": "Användaren är låst eller utloggad" }, "biometricsNotUnlockedDesc": { "message": "Lås upp den här användaren i skrivbordsprogrammet och försök igen." }, "biometricsNotAvailableTitle": { - "message": "Biometric unlock unavailable" + "message": "Biometrisk upplåsning ej tillgänglig" }, "biometricsNotAvailableDesc": { - "message": "Biometric unlock is currently unavailable. Please try again later." + "message": "Biometrisk upplåsning är för närvarande inte tillgänglig. Vänligen försök igen senare." }, "biometricsFailedTitle": { "message": "Biometri misslyckades" @@ -2479,17 +2491,23 @@ "message": "En organisationspolicy påverkar dina ägarskapsalternativ." }, "personalOwnershipPolicyInEffectImports": { - "message": "An organization policy has blocked importing items into your individual vault." + "message": "En organisationspolicy har blockerat import av objekt till ditt individuella valv." + }, + "restrictCardTypeImport": { + "message": "Det går inte att importera typer av kortposter" + }, + "restrictCardTypeImportDesc": { + "message": "En policy som har fastställts av en eller flera organisationer hindrar dig från att importera kort till dina valv." }, "domainsTitle": { "message": "Domäner", "description": "A category title describing the concept of web domains" }, "blockedDomains": { - "message": "Blocked domains" + "message": "Blockerade domäner" }, "learnMoreAboutBlockedDomains": { - "message": "Learn more about blocked domains" + "message": "Läs mer om blockerade domäner" }, "excludedDomains": { "message": "Exkluderade domäner" @@ -2498,22 +2516,26 @@ "message": "Bitwarden kommer inte att fråga om att få spara inloggningsuppgifter för dessa domäner. Du måste uppdatera sidan för att ändringarna ska träda i kraft." }, "excludedDomainsDescAlt": { - "message": "Bitwarden will not ask to save login details for these domains for all logged in accounts. You must refresh the page for changes to take effect." + "message": "Bitwarden kommer inte att be om att få spara inloggningsuppgifter för dessa domäner för alla inloggade konton. Du måste uppdatera sidan för att ändringarna ska träda i kraft." }, "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": "Autofyll och andra relaterade funktioner kommer inte att erbjudas för dessa webbplatser. Du måste uppdatera sidan för att ändringarna ska träda i kraft." }, "autofillBlockedNoticeV2": { - "message": "Autofill is blocked for this website." + "message": "Autofyll är blockerat för den här webbplatsen." }, "autofillBlockedNoticeGuidance": { "message": "Ändra detta i inställningar" }, "change": { - "message": "Change" + "message": "Ändra" + }, + "changePassword": { + "message": "Ändra lösenord", + "description": "Change password button for browser at risk notification on login." }, "changeButtonTitle": { - "message": "Change password - $ITEMNAME$", + "message": "Byt lösenord - $ITEMNAME$", "placeholders": { "itemname": { "content": "$1", @@ -2521,11 +2543,14 @@ } } }, + "atRiskPassword": { + "message": "Lösenord med risk" + }, "atRiskPasswords": { - "message": "At-risk passwords" + "message": "Lösenord i riskzonen" }, "atRiskPasswordDescSingleOrg": { - "message": "$ORGANIZATION$ is requesting you change one password because it is at-risk.", + "message": "$ORGANIZATION$ ber dig att ändra ett lösenord eftersom det är i riskzonen.", "placeholders": { "organization": { "content": "$1", @@ -2534,7 +2559,7 @@ } }, "atRiskPasswordsDescSingleOrgPlural": { - "message": "$ORGANIZATION$ is requesting you change the $COUNT$ passwords because they are at-risk.", + "message": "$ORGANIZATION$ begär att du ändrar $COUNT$-lösenorden eftersom de är i riskzonen.", "placeholders": { "organization": { "content": "$1", @@ -2547,7 +2572,7 @@ } }, "atRiskPasswordsDescMultiOrgPlural": { - "message": "Your organizations are requesting you change the $COUNT$ passwords because they are at-risk.", + "message": "Dina organisationer begär att du ändrar $COUNT$-lösenorden eftersom de är i riskzonen.", "placeholders": { "count": { "content": "$1", @@ -2555,11 +2580,31 @@ } } }, + "atRiskChangePrompt": { + "message": "Ditt lösenord för den här webbplatsen är i fara. $ORGANIZATION$ har begärt att du ändrar det.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + }, + "description": "Notification body when a login triggers an at-risk password change request and the change password domain is known." + }, + "atRiskNavigatePrompt": { + "message": "$ORGANIZATION$ vill att du ändrar det här lösenordet eftersom det är i riskzonen. Navigera till dina kontoinställningar för att ändra lösenordet.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + }, + "description": "Notification body when a login triggers an at-risk password change request and no change password domain is provided." + }, "reviewAndChangeAtRiskPassword": { - "message": "Review and change one at-risk password" + "message": "Granska och ändra ett risklösenord" }, "reviewAndChangeAtRiskPasswordsPlural": { - "message": "Review and change $COUNT$ at-risk passwords", + "message": "Granska och ändra $COUNT$ riskfyllda lösenord", "placeholders": { "count": { "content": "$1", @@ -2568,40 +2613,40 @@ } }, "changeAtRiskPasswordsFaster": { - "message": "Change at-risk passwords faster" + "message": "Ändra riskfyllda lösenord snabbare" }, "changeAtRiskPasswordsFasterDesc": { - "message": "Update your settings so you can quickly autofill your passwords and generate new ones" + "message": "Uppdatera dina inställningar så att du snabbt kan autofylla dina lösenord och generera nya" }, "reviewAtRiskLogins": { - "message": "Review at-risk logins" + "message": "Granska riskfyllda inloggningar" }, "reviewAtRiskPasswords": { - "message": "Review at-risk passwords" + "message": "Granska riskfyllda lösenord" }, "reviewAtRiskLoginsSlideDesc": { - "message": "Your organization passwords are at-risk because they are weak, reused, and/or exposed.", + "message": "Lösenorden i din organisation är i riskzonen eftersom de är svaga, återanvända och/eller exponerade.", "description": "Description of the review at-risk login slide on the at-risk password page carousel" }, "reviewAtRiskLoginSlideImgAltPeriod": { - "message": "Illustration of a list of logins that are at-risk." + "message": "Illustration av en lista över inloggningar som är i riskzonen." }, "generatePasswordSlideDesc": { - "message": "Quickly generate a strong, unique password with the Bitwarden autofill menu on the at-risk site.", + "message": "Skapa snabbt ett starkt, unikt lösenord med Bitwardens autofyllmeny på riskwebbplatsen.", "description": "Description of the generate password slide on the at-risk password page carousel" }, "generatePasswordSlideImgAltPeriod": { - "message": "Illustration of the Bitwarden autofill menu displaying a generated password." + "message": "Illustration av Bitwardens autofyllmeny som visar ett genererat lösenord." }, "updateInBitwarden": { - "message": "Update in Bitwarden" + "message": "Uppdatera i Bitwarden" }, "updateInBitwardenSlideDesc": { - "message": "Bitwarden will then prompt you to update the password in the password manager.", + "message": "Bitwarden kommer då att uppmana dig att uppdatera lösenordet i lösenordshanteraren.", "description": "Description of the update in Bitwarden slide on the at-risk password page carousel" }, "updateInBitwardenSlideImgAltPeriod": { - "message": "Illustration of a Bitwarden’s notification prompting the user to update the login." + "message": "Illustration av ett Bitwarden-meddelande som uppmanar användaren att uppdatera inloggningen." }, "turnOnAutofill": { "message": "Aktivera autofyll" @@ -2610,7 +2655,7 @@ "message": "Aktiverade autofyll" }, "dismiss": { - "message": "Dismiss" + "message": "Stäng" }, "websiteItemLabel": { "message": "Webbplats $number$ (URI)", @@ -2631,20 +2676,20 @@ } }, "blockedDomainsSavedSuccess": { - "message": "Blocked domain changes saved" + "message": "Blockerade domänändringar sparas" }, "excludedDomainsSavedSuccess": { - "message": "Excluded domain changes saved" + "message": "Ändringar för exkluderad domän sparas" }, "limitSendViews": { - "message": "Limit views" + "message": "Begränsa antalet visningar" }, "limitSendViewsHint": { - "message": "No one can view this Send after the limit is reached.", + "message": "Ingen kan se denna sändning efter att gränsen har nåtts.", "description": "Displayed under the limit views field on Send" }, "limitSendViewsCount": { - "message": "$ACCESSCOUNT$ views left", + "message": "$ACCESSCOUNT$ visningar kvar", "description": "Displayed under the limit views field on Send", "placeholders": { "accessCount": { @@ -2658,14 +2703,14 @@ "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "sendDetails": { - "message": "Send details", + "message": "Skicka information", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "sendTypeText": { "message": "Text" }, "sendTypeTextToShare": { - "message": "Text to share" + "message": "Text att dela" }, "sendTypeFile": { "message": "Fil" @@ -2674,8 +2719,12 @@ "message": "Alla Sends", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "maxAccessCountReached": { + "message": "Max antal åtkomster har uppnåtts", + "description": "This text will be displayed after a Send has been accessed the maximum amount of times." + }, "hideTextByDefault": { - "message": "Hide text by default" + "message": "Dölj text som standard" }, "expired": { "message": "Utgången" @@ -2722,7 +2771,7 @@ "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "deleteSendPermanentConfirmation": { - "message": "Are you sure you want to permanently delete this Send?", + "message": "Är du säker på att du vill ta bort det här meddelandet permanent?", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "editSend": { @@ -2733,7 +2782,7 @@ "message": "Raderingsdatum" }, "deletionDateDescV2": { - "message": "The Send will be permanently deleted on this date.", + "message": "Sändningen kommer att raderas permanent på detta datum.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "expirationDate": { @@ -2755,7 +2804,7 @@ "message": "Anpassad" }, "sendPasswordDescV3": { - "message": "Add an optional password for recipients to access this Send.", + "message": "Lägg till ett valfritt lösenord för att mottagarna ska få åtkomst till detta meddelande.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "createSend": { @@ -2778,15 +2827,15 @@ "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "createdSendSuccessfully": { - "message": "Send created successfully!", + "message": "Skicka skapad framgångsrikt!", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "sendExpiresInHoursSingle": { - "message": "The Send will be available to anyone with the link for the next 1 hour.", + "message": "Sändningen kommer att vara tillgänglig för alla med länken under den kommande 1 timmen.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "sendExpiresInHours": { - "message": "The Send will be available to anyone with the link for the next $HOURS$ hours.", + "message": "Sändningen kommer att vara tillgänglig för alla som har länken under de närmaste $HOURS$ timmarna.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.", "placeholders": { "hours": { @@ -2796,11 +2845,11 @@ } }, "sendExpiresInDaysSingle": { - "message": "The Send will be available to anyone with the link for the next 1 day.", + "message": "Sändningen kommer att vara tillgänglig för alla som har länken under den kommande 1 dagen.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "sendExpiresInDays": { - "message": "The Send will be available to anyone with the link for the next $DAYS$ days.", + "message": "Send kommer att vara tillgänglig för alla som har länken under de närmaste $DAYS$-dagarna.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.", "placeholders": { "days": { @@ -2810,7 +2859,7 @@ } }, "sendLinkCopied": { - "message": "Send link copied", + "message": "Skicka länk kopierad", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "editedSend": { @@ -2818,11 +2867,11 @@ "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "sendFilePopoutDialogText": { - "message": "Pop out extension?", + "message": "Pop out-förlängning?", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "sendFilePopoutDialogDesc": { - "message": "To create a file Send, you need to pop out the extension to a new window.", + "message": "För att skapa en fil Skicka, måste du popa ut förlängningen till ett nytt fönster.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "sendLinuxChromiumFileWarning": { @@ -2835,7 +2884,7 @@ "message": "För att välja en fil med Safari, öppna ett nytt fönster genom att klicka på denna banner." }, "popOut": { - "message": "Pop out" + "message": "Popa ut" }, "sendFileCalloutHeader": { "message": "Innan du börjar" @@ -2856,7 +2905,7 @@ "message": "Det gick inte att spara raderings- och utgångsdatum." }, "hideYourEmail": { - "message": "Hide your email address from viewers." + "message": "Dölj din e-postadress från tittarna." }, "passwordPrompt": { "message": "Återupprepa huvudlösenord" @@ -2871,11 +2920,14 @@ "message": "E-postverifiering krävs" }, "emailVerifiedV2": { - "message": "Email verified" + "message": "E-post verifierad" }, "emailVerificationRequiredDesc": { "message": "Du måste verifiera din e-postadress för att använda den här funktionen. Du kan verifiera din e-postadress i webbvalvet." }, + "masterPasswordSuccessfullySet": { + "message": "Masterlösenordet har ställts in" + }, "updatedMasterPassword": { "message": "Huvudlösenord uppdaterades" }, @@ -2889,7 +2941,7 @@ "message": "Ditt huvudlösenord följer inte ett eller flera av din organisations regler. För att komma åt ditt valv så måste du ändra ditt huvudlösenord nu. Om du gör det kommer du att loggas du ut ur din nuvarande session så du måste logga in på nytt. Aktiva sessioner på andra enheter kommer fortsatt vara aktiva i upp till en timme." }, "tdeDisabledMasterPasswordRequired": { - "message": "Your organization has disabled trusted device encryption. Please set a master password to access your vault." + "message": "Din organisation har inaktiverat betrodd enhetskryptering. Ange ett huvudlösenord för att komma åt ditt valv." }, "resetPasswordPolicyAutoEnroll": { "message": "Automatiskt deltagande" @@ -2932,10 +2984,10 @@ "message": "Minuter" }, "vaultTimeoutPolicyAffectingOptions": { - "message": "Enterprise policy requirements have been applied to your timeout options" + "message": "Företagets policykrav har tillämpats på dina timeout-alternativ" }, "vaultTimeoutPolicyInEffect": { - "message": "Dina organisationsprinciper påverkar ditt valvs tid för timeout. Maximal tillåten tid innan timeout är $HOURS$ timmar och $MINUTES$ minuter", + "message": "Dina organisationsprinciper påverkar ditt valvs tid för timeout. Maximal tillåten tid innan timeout är $HOURS$ timmar och $MINUTES$ minuter.", "placeholders": { "hours": { "content": "$1", @@ -2948,7 +3000,7 @@ } }, "vaultTimeoutPolicyInEffect1": { - "message": "$HOURS$ hour(s) and $MINUTES$ minute(s) maximum.", + "message": "$HOURS$ timme(n) och $MINUTES$ minut(er) maximalt.", "placeholders": { "hours": { "content": "$1", @@ -2961,7 +3013,7 @@ } }, "vaultTimeoutPolicyMaximumError": { - "message": "Timeout exceeds the restriction set by your organization: $HOURS$ hour(s) and $MINUTES$ minute(s) maximum", + "message": "Tidsgränsen överskrider den begränsning som har fastställts av din organisation: $HOURS$ timme(n) och $MINUTES$ minut(er) max", "placeholders": { "hours": { "content": "$1", @@ -2974,7 +3026,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": "Din organisations policyer påverkar valvets timeout. Högsta tillåtna timeout för valvet är $HOURS$ timme(n) och $MINUTES$ minut(er). Åtgärden för valvets timeout är inställd på $ACTION$.", "placeholders": { "hours": { "content": "$1", @@ -2991,7 +3043,7 @@ } }, "vaultTimeoutActionPolicyInEffect": { - "message": "Your organization policies have set your vault timeout action to $ACTION$.", + "message": "I organisationens policyer har timeoutåtgärden för valvet ställts in på $ACTION$.", "placeholders": { "action": { "content": "$1", @@ -3015,13 +3067,13 @@ "message": "Ingen unik identifierare hittades." }, "removeMasterPasswordForOrganizationUserKeyConnector": { - "message": "A master password is no longer required for members of the following organization. Please confirm the domain below with your organization administrator." + "message": "Ett huvudlösenord krävs inte längre för medlemmar i följande organisation. Vänligen bekräfta domänen nedan med din organisationsadministratör." }, "organizationName": { - "message": "Organization name" + "message": "Organisationsnamn" }, "keyConnectorDomain": { - "message": "Key Connector domain" + "message": "Key Connector-domän" }, "leaveOrganization": { "message": "Lämna organisation" @@ -3048,7 +3100,7 @@ "message": "Exporterar individuellt valv" }, "exportingIndividualVaultDescription": { - "message": "Only the individual vault items associated with $EMAIL$ will be exported. Organization vault items will not be included. Only vault item information will be exported and will not include associated attachments.", + "message": "Endast de enskilda valvobjekt som är associerade med $EMAIL$ exporteras. Valvobjekt för organisationer kommer inte att inkluderas. Endast information om valvobjektet exporteras och inkluderar inte tillhörande bilagor.", "placeholders": { "email": { "content": "$1", @@ -3057,7 +3109,7 @@ } }, "exportingIndividualVaultWithAttachmentsDescription": { - "message": "Only the individual vault items including attachments associated with $EMAIL$ will be exported. Organization vault items will not be included", + "message": "Endast de enskilda valvobjekten inklusive bilagor som är associerade med $EMAIL$ exporteras. Organisationens valvobjekt kommer inte att inkluderas", "placeholders": { "email": { "content": "$1", @@ -3066,10 +3118,10 @@ } }, "exportingOrganizationVaultTitle": { - "message": "Exporting organization vault" + "message": "Exportera organisationsvalv" }, "exportingOrganizationVaultDesc": { - "message": "Only the organization vault associated with $ORGANIZATION$ will be exported. Items in individual vaults or other organizations will not be included.", + "message": "Endast det organisationsvalv som är associerat med $ORGANIZATION$ exporteras. Objekt i enskilda valv eller andra organisationer kommer inte att inkluderas.", "placeholders": { "organization": { "content": "$1", @@ -3081,24 +3133,24 @@ "message": "Fel" }, "decryptionError": { - "message": "Decryption error" + "message": "Dekrypteringsfel" }, "couldNotDecryptVaultItemsBelow": { - "message": "Bitwarden could not decrypt the vault item(s) listed below." + "message": "Bitwarden kunde inte dekryptera valvföremålet/valvföremålen som listas nedan." }, "contactCSToAvoidDataLossPart1": { - "message": "Contact customer success", + "message": "Kontakta kundtjänst", "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": "för att undvika ytterligare dataförlust.", "description": "This is part of a larger sentence. The full sentence will read 'Contact customer success to avoid additional data loss.'" }, "generateUsername": { "message": "Generera användarnamn" }, "generateEmail": { - "message": "Generate email" + "message": "Generera e-post" }, "spinboxBoundariesHint": { "message": "Värde måste vara mellan $MIN$ och $MAX$.", @@ -3170,7 +3222,7 @@ "description": "Labels the domain name email forwarder service option" }, "forwarderDomainNameHint": { - "message": "Choose a domain that is supported by the selected service", + "message": "Välj en domän som stöds av den valda tjänsten", "description": "Guidance provided for email forwarding services that support multiple email domains." }, "forwarderError": { @@ -3226,7 +3278,7 @@ } }, "forwaderInvalidOperation": { - "message": "$SERVICENAME$ refused your request. Please contact your service provider for assistance.", + "message": "$SERVICENAME$ avvisade din begäran. Vänligen kontakta din tjänsteleverantör för hjälp.", "description": "Displayed when the user is forbidden from using the API by the forwarding service.", "placeholders": { "servicename": { @@ -3236,7 +3288,7 @@ } }, "forwaderInvalidOperationWithMessage": { - "message": "$SERVICENAME$ refused your request: $ERRORMESSAGE$", + "message": "$SERVICENAME$ avvisade din begäran: $ERRORMESSAGE$", "description": "Displayed when the user is forbidden from using the API by the forwarding service with an error message.", "placeholders": { "servicename": { @@ -3250,7 +3302,7 @@ } }, "forwarderNoAccountId": { - "message": "Unable to obtain $SERVICENAME$ masked email account ID.", + "message": "Det gick inte att få $SERVICENAME$ maskerat ID för e-postkonto.", "description": "Displayed when the forwarding service fails to return an account ID.", "placeholders": { "servicename": { @@ -3280,7 +3332,7 @@ } }, "forwarderUnknownError": { - "message": "Unknown $SERVICENAME$ error occurred.", + "message": "Okänt $SERVICENAME$-fel inträffade.", "description": "Displayed when the forwarding service failed due to an unknown error.", "placeholders": { "servicename": { @@ -3290,7 +3342,7 @@ } }, "forwarderUnknownForwarder": { - "message": "Unknown forwarder: '$SERVICENAME$'.", + "message": "Okänd vidarebefordrare: '$SERVICENAME$'.", "description": "Displayed when the forwarding service is not supported.", "placeholders": { "servicename": { @@ -3385,28 +3437,31 @@ "message": "En avisering har skickats till din enhet." }, "notificationSentDevicePart1": { - "message": "Unlock Bitwarden on your device or on the" + "message": "Lås upp Bitwarden på din enhet eller på" }, "notificationSentDeviceAnchor": { - "message": "web app" + "message": "webbapp" }, "notificationSentDevicePart2": { - "message": "Make sure the Fingerprint phrase matches the one below before approving." + "message": "Kontrollera att fingeravtrycksfrasen stämmer överens med den nedan innan du godkänner." }, "aNotificationWasSentToYourDevice": { - "message": "A notification was sent to your device" + "message": "Ett meddelande har skickats till din enhet" }, "youWillBeNotifiedOnceTheRequestIsApproved": { - "message": "You will be notified once the request is approved" + "message": "Du kommer att få ett meddelande när begäran har godkänts" }, "needAnotherOptionV1": { - "message": "Need another option?" + "message": "Behöver du ett annat alternativ?" }, "loginInitiated": { "message": "Inloggning påbörjad" }, "logInRequestSent": { - "message": "Request sent" + "message": "Begäran skickad" + }, + "masterPasswordChanged": { + "message": "Huvudlösenordet sparades" }, "exposedMasterPassword": { "message": "Huvudlösenordet har exponerats" @@ -3445,7 +3500,7 @@ "message": "Hur du fyller i automatiskt" }, "autofillSelectInfoWithCommand": { - "message": "Select an item from this screen, use the shortcut $COMMAND$, or explore other options in settings.", + "message": "Välj ett objekt från den här skärmen, använd genvägen $COMMAND$ eller utforska andra alternativ i inställningarna.", "placeholders": { "command": { "content": "$1", @@ -3454,7 +3509,7 @@ } }, "autofillSelectInfoWithoutCommand": { - "message": "Select an item from this screen, or explore other options in settings." + "message": "Välj ett objekt från den här skärmen eller utforska andra alternativ i inställningarna." }, "gotIt": { "message": "Förstått" @@ -3478,7 +3533,7 @@ "message": "Kortkommandot för autofyll av inloggning är inte inställt. Du kan ändra det i webbläsarens inställningar." }, "autofillLoginShortcutText": { - "message": "The autofill login shortcut is $COMMAND$. Manage all shortcuts in the browser's settings.", + "message": "Genvägen för autofyll-inloggning är $COMMAND$. Hantera alla genvägar i webbläsarens inställningar.", "placeholders": { "command": { "content": "$1", @@ -3499,22 +3554,22 @@ "message": "Öppnas i ett nytt fönster" }, "rememberThisDeviceToMakeFutureLoginsSeamless": { - "message": "Remember this device to make future logins seamless" + "message": "Kom ihåg den här enheten för att göra framtida inloggningar smidiga" }, "deviceApprovalRequired": { - "message": "Device approval required. Select an approval option below:" + "message": "Godkännande av enhet krävs. Välj ett alternativ för godkännande nedan:" }, "deviceApprovalRequiredV2": { - "message": "Device approval required" + "message": "Godkännande av utrustning krävs" }, "selectAnApprovalOptionBelow": { - "message": "Select an approval option below" + "message": "Välj ett godkännandealternativ nedan" }, "rememberThisDevice": { "message": "Kom ihåg denna enhet" }, "uncheckIfPublicDevice": { - "message": "Uncheck if using a public device" + "message": "Avmarkera om du använder en offentlig enhet" }, "approveFromYourOtherDevice": { "message": "Godkänn från din andra enhet" @@ -3522,6 +3577,12 @@ "requestAdminApproval": { "message": "Be om godkännande från administratör" }, + "unableToCompleteLogin": { + "message": "Kunde inte slutföra inloggningen" + }, + "loginOnTrustedDeviceOrAskAdminToAssignPassword": { + "message": "Du måste logga in på en betrodd enhet eller fråga din administratör att tilldela dig ett lösenord." + }, "ssoIdentifierRequired": { "message": "Organisationens SSO-identifierare krävs." }, @@ -3535,7 +3596,7 @@ "message": "Följ länken i e-postmeddelandet som skickats till" }, "andContinueCreatingYourAccount": { - "message": "and continue creating your account." + "message": "och fortsätt att skapa ditt konto." }, "noEmail": { "message": "Ingen e-post?" @@ -3557,7 +3618,7 @@ "message": "Allmänt" }, "display": { - "message": "Display" + "message": "Visa" }, "accountSuccessfullyCreated": { "message": "Ditt konto har skapats!" @@ -3578,49 +3639,41 @@ "message": "Användarens e-postadress saknas" }, "activeUserEmailNotFoundLoggingYouOut": { - "message": "Active user email not found. Logging you out." + "message": "E-postadressen för aktiv användare hittades inte. Loggar ut dig." }, "deviceTrusted": { "message": "Enhet betrodd" }, "trustOrganization": { - "message": "Trust organization" + "message": "Lita på organisation" }, "trust": { - "message": "Trust" + "message": "Förtroende" }, "doNotTrust": { - "message": "Do not trust" + "message": "Lita inte på" }, "organizationNotTrusted": { - "message": "Organization is not trusted" + "message": "Organisationen är inte betrodd" }, "emergencyAccessTrustWarning": { - "message": "For the security of your account, only confirm if you have granted emergency access to this user and their fingerprint matches what is displayed in their account" + "message": "För att skydda ditt konto ska du bara bekräfta om du har beviljat nödåtkomst till den här användaren och om fingeravtrycket matchar det som visas på användarens konto" }, "orgTrustWarning": { - "message": "For the security of your account, only proceed if you are a member of this organization, have account recovery enabled, and the fingerprint displayed below matches the organization's fingerprint." + "message": "För att skydda ditt konto ska du bara fortsätta om du är medlem i den här organisationen, har aktiverat kontoåterställning och om det fingeravtryck som visas nedan matchar organisationens fingeravtryck." }, "orgTrustWarning1": { - "message": "This organization has an Enterprise policy that will enroll you in account recovery. Enrollment will allow organization administrators to change your password. Only proceed if you recognize this organization and the fingerprint phrase displayed below matches the organization's fingerprint." + "message": "Den här organisationen har en företagspolicy som gör att du kan anmäla dig till kontoåterställning. Registreringen gör det möjligt för organisationens administratörer att ändra ditt lösenord. Fortsätt bara om du känner igen den här organisationen och om fingeravtrycksfrasen som visas nedan matchar organisationens fingeravtryck." }, "trustUser": { - "message": "Trust user" - }, - "sendsNoItemsTitle": { - "message": "Inga aktiva Sends", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendsNoItemsMessage": { - "message": "Use Send to securely share encrypted information with anyone.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + "message": "Lita på användare" }, "sendsTitleNoItems": { - "message": "Send sensitive information safely", + "message": "Skicka känslig information på ett säkert sätt", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "sendsBodyNoItems": { - "message": "Share files and data securely with anyone, on any platform. Your information will remain end-to-end encrypted while limiting exposure.", + "message": "Dela filer och data på ett säkert sätt med vem som helst, på vilken plattform som helst. Din information kommer att förbli krypterad från början till slut samtidigt som exponeringen begränsas.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "inputRequired": { @@ -3642,7 +3695,7 @@ } }, "inputMaxLength": { - "message": "Input must not exceed $COUNT$ characters in length.", + "message": "Inmatningen får inte vara längre än $COUNT$ tecken.", "placeholders": { "count": { "content": "$1", @@ -3660,7 +3713,7 @@ } }, "inputMinValue": { - "message": "Input value must be at least $MIN$.", + "message": "Inmatningsvärdet måste vara minst $MIN$.", "placeholders": { "min": { "content": "$1", @@ -3669,7 +3722,7 @@ } }, "inputMaxValue": { - "message": "Input value must not exceed $MAX$.", + "message": "Inmatningsvärdet får inte överstiga $MAX$.", "placeholders": { "max": { "content": "$1", @@ -3681,7 +3734,7 @@ "message": "En eller flera e-postadresser är ogiltiga" }, "inputTrimValidator": { - "message": "Input must not contain only whitespace.", + "message": "Inmatningen får inte innehålla enbart blanksteg.", "description": "Notification to inform the user that a form's input can't contain only whitespace." }, "inputEmail": { @@ -3697,10 +3750,10 @@ } }, "singleFieldNeedsAttention": { - "message": "1 field needs your attention." + "message": "1 fält behöver din uppmärksamhet." }, "multipleFieldsNeedAttention": { - "message": "$COUNT$ fields need your attention.", + "message": "$COUNT$-fälten behöver din uppmärksamhet.", "placeholders": { "count": { "content": "$1", @@ -3755,7 +3808,7 @@ "description": "Message appearing below the autofill on load message when master password reprompt is set for a vault item." }, "toggleSideNavigation": { - "message": "Toggle side navigation" + "message": "Växla sidonavigering" }, "skipToContent": { "message": "Hoppa till innehåll" @@ -3777,7 +3830,7 @@ "description": "Text to display in overlay when the account is locked." }, "unlockYourAccountToViewAutofillSuggestions": { - "message": "Unlock your account to view autofill suggestions", + "message": "Lås upp ditt konto för att visa förslag för autofyll", "description": "Text to display in overlay when the account is locked." }, "unlockAccount": { @@ -3785,15 +3838,15 @@ "description": "Button text to display in overlay when the account is locked." }, "unlockAccountAria": { - "message": "Unlock your account, opens in a new window", + "message": "Lås upp ditt konto, öppnas i ett nytt fönster", "description": "Screen reader text (aria-label) for unlock account button in overlay" }, "totpCodeAria": { - "message": "Time-based One-Time Password Verification Code", + "message": "Tidsbaserat engångslösenord Verifieringskod", "description": "Aria label for the totp code displayed in the inline menu for autofill" }, "totpSecondsSpanAria": { - "message": "Time remaining before current TOTP expires", + "message": "Återstående tid innan aktuell TOTP löper ut", "description": "Aria label for the totp seconds displayed in the inline menu for autofill" }, "fillCredentialsFor": { @@ -3801,7 +3854,7 @@ "description": "Screen reader text for when overlay item is in focused" }, "partialUsername": { - "message": "Partial username", + "message": "Delvis användarnamn", "description": "Screen reader text for when a login item is focused where a partial username is displayed. SR will announce this phrase before reading the text of the partial username" }, "noItemsToShow": { @@ -3821,7 +3874,7 @@ "description": "Button text to display within inline menu when there are no matching items on a login field" }, "addNewLoginItemAria": { - "message": "Add new vault login item, opens in a new window", + "message": "Lägg till nytt valvinloggningsobjekt, öppnas i ett nytt fönster", "description": "Screen reader text (aria-label) for new login button within inline menu" }, "newCard": { @@ -3829,7 +3882,7 @@ "description": "Button text to display within inline menu when there are no matching items on a credit card field" }, "addNewCardItemAria": { - "message": "Add new vault card item, opens in a new window", + "message": "Lägg till ny valvkortsartikel, öppnas i nytt fönster", "description": "Screen reader text (aria-label) for new card button within inline menu" }, "newIdentity": { @@ -3837,7 +3890,7 @@ "description": "Button text to display within inline menu when there are no matching items on an identity field" }, "addNewIdentityItemAria": { - "message": "Add new vault identity item, opens in a new window", + "message": "Lägg till ny valvidentitetsartikel, öppnas i nytt fönster", "description": "Screen reader text (aria-label) for new identity button within inline menu" }, "bitwardenOverlayMenuAvailable": { @@ -3927,13 +3980,13 @@ } }, "duoHealthCheckResultsInNullAuthUrlError": { - "message": "Error connecting with the Duo service. Use a different two-step login method or contact Duo for assistance." + "message": "Fel vid anslutning till Duo-tjänsten. Använd en annan tvåstegsinloggningsmetod eller kontakta Duo för hjälp." }, "duoRequiredForAccount": { - "message": "Duo two-step login is required for your account." + "message": "Tvåstegsinloggning med Duo krävs för ditt konto." }, "popoutExtension": { - "message": "Popout extension" + "message": "Popout-förlängning" }, "launchDuo": { "message": "Starta Duo" @@ -3963,7 +4016,7 @@ "message": "Välj en samling" }, "importTargetHint": { - "message": "Select this option if you want the imported file contents moved to a $DESTINATION$", + "message": "Välj det här alternativet om du vill att innehållet i den importerade filen ska flyttas till en $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": { @@ -4010,16 +4063,16 @@ "message": "Bekräfta fillösenord" }, "exportSuccess": { - "message": "Vault data exported" + "message": "Valvdata exporteras" }, "typePasskey": { "message": "Nyckel" }, "accessing": { - "message": "Accessing" + "message": "Åtkomst via" }, "loggedInExclamation": { - "message": "Logged in!" + "message": "Inloggad!" }, "passkeyNotCopied": { "message": "Lösennyckeln kommer inte kopieras" @@ -4043,7 +4096,7 @@ "message": "Det finns ingen matchande inloggning för denna webbplats." }, "noMatchingLoginsForSite": { - "message": "No matching logins for this site" + "message": "Inga matchande inloggningar för denna webbplats" }, "searchSavePasskeyNewLogin": { "message": "Sök eller spara nyckel som ny inloggning" @@ -4058,10 +4111,10 @@ "message": "Spara nyckel som ny inloggning" }, "chooseCipherForPasskeySave": { - "message": "Choose a login to save this passkey to" + "message": "Välj en inloggning som du vill spara nyckeln till" }, "chooseCipherForPasskeyAuth": { - "message": "Choose a passkey to log in with" + "message": "Välj en lösenordskod att logga in med" }, "passkeyItem": { "message": "Lösennyckelobjekt" @@ -4127,10 +4180,10 @@ "message": "LastPass autentisering krävs" }, "awaitingSSO": { - "message": "Awaiting SSO authentication" + "message": "Väntar på SSO-autentisering" }, "awaitingSSODesc": { - "message": "Please continue to log in using your company credentials." + "message": "Fortsätt att logga in med dina företagsuppgifter." }, "seeDetailedInstructions": { "message": "Se detaljerade instruktioner på vår hjälpsida på", @@ -4143,7 +4196,7 @@ "message": "Importera från CSV" }, "lastPassTryAgainCheckEmail": { - "message": "Try again or look for an email from LastPass to verify it's you." + "message": "Försök igen eller leta efter ett e-postmeddelande från LastPass för att verifiera att det är du." }, "collection": { "message": "Samling" @@ -4164,13 +4217,13 @@ "message": "Aktivt konto" }, "bitwardenAccount": { - "message": "Bitwarden account" + "message": "Bitwarden-konto" }, "availableAccounts": { "message": "Tillgängliga konton" }, "accountLimitReached": { - "message": "Account limit reached. Log out of an account to add another." + "message": "Kontogränsen har nåtts. Logga ut från ett konto för att lägga till ett annat." }, "active": { "message": "aktiv" @@ -4185,7 +4238,7 @@ "message": "server" }, "hostedAt": { - "message": "hosted at" + "message": "värd på" }, "useDeviceOrHardwareKey": { "message": "Använd din enhet eller hårdvarunyckel" @@ -4197,7 +4250,7 @@ "message": "Alltid för denna webbplats" }, "domainAddedToExcludedDomains": { - "message": "$DOMAIN$ added to excluded domains.", + "message": "$DOMAIN$ tillagd till uteslutna domäner.", "placeholders": { "domain": { "content": "$1", @@ -4209,8 +4262,28 @@ "message": "Vanliga format", "description": "Label indicating the most common import formats" }, + "uriMatchDefaultStrategyHint": { + "message": "Detektering av URI-matchning är hur Bitwarden identifierar autofyllförslag.", + "description": "Explains to the user that URI match detection determines how Bitwarden suggests autofill options, and clarifies that this default strategy applies when no specific match detection is set for a login item." + }, + "regExAdvancedOptionWarning": { + "message": "\"Reguljär uttryck\" är ett avancerat alternativ med ökad risk för att röja inloggningsuppgifter.", + "description": "Content for dialog which warns a user when selecting 'regular expression' matching strategy as a cipher match strategy" + }, + "startsWithAdvancedOptionWarning": { + "message": "\"Börjar med\" är ett avancerat alternativ med ökad risk för att röja inloggningsuppgifter.", + "description": "Content for dialog which warns a user when selecting 'starts with' matching strategy as a cipher match strategy" + }, + "uriMatchWarningDialogLink": { + "message": "Mer om matchdetektering", + "description": "Link to match detection docs on warning dialog for advance match strategy" + }, + "uriAdvancedOption": { + "message": "Avancerade inställningar", + "description": "Advanced option placeholder for uri option component" + }, "confirmContinueToBrowserSettingsTitle": { - "message": "Continue to browser settings?", + "message": "Fortsätt till webbläsarinställningar?", "description": "Title for dialog which asks if the user wants to proceed to a relevant browser settings page" }, "confirmContinueToHelpCenter": { @@ -4218,19 +4291,19 @@ "description": "Title for dialog which asks if the user wants to proceed to a relevant Help Center page" }, "confirmContinueToHelpCenterPasswordManagementContent": { - "message": "Change your browser's autofill and password management settings.", + "message": "Ändra inställningarna för autofyll och lösenordshantering i din webbläsare.", "description": "Body content for dialog which asks if the user wants to proceed to the Help Center's page about browser password management settings" }, "confirmContinueToHelpCenterKeyboardShortcutsContent": { - "message": "You can view and set extension shortcuts in your browser's settings.", + "message": "Du kan se och ställa in genvägar för tillägg i webbläsarens inställningar.", "description": "Body content for dialog which asks if the user wants to proceed to the Help Center's page about browser keyboard shortcut settings" }, "confirmContinueToBrowserPasswordManagementSettingsContent": { - "message": "Change your browser's autofill and password management settings.", + "message": "Ändra inställningarna för autofyll och lösenordshantering i din webbläsare.", "description": "Body content for dialog which asks if the user wants to proceed to the browser's password management settings page" }, "confirmContinueToBrowserKeyboardShortcutSettingsContent": { - "message": "You can view and set extension shortcuts in your browser's settings.", + "message": "Du kan se och ställa in genvägar för tillägg i webbläsarens inställningar.", "description": "Body content for dialog which asks if the user wants to proceed to the browser's keyboard shortcut settings page" }, "overrideDefaultBrowserAutofillTitle": { @@ -4238,7 +4311,7 @@ "description": "Dialog title facilitating the ability to override a chrome browser's default autofill behavior" }, "overrideDefaultBrowserAutofillDescription": { - "message": "Ignoring this option may cause conflicts between Bitwarden autofill suggestions and your browser's.", + "message": "Att ignorera det här alternativet kan orsaka konflikter mellan Bitwardens autofyllförslag och webbläsarens.", "description": "Dialog message facilitating the ability to override a chrome browser's default autofill behavior" }, "overrideDefaultBrowserAutoFillSettings": { @@ -4246,11 +4319,11 @@ "description": "Label for the setting that allows overriding the default browser autofill settings" }, "privacyPermissionAdditionNotGrantedTitle": { - "message": "Unable to set Bitwarden as the default password manager", + "message": "Det går inte att ställa in Bitwarden som standardlösenordshanterare", "description": "Title for the dialog that appears when the user has not granted the extension permission to set privacy settings" }, "privacyPermissionAdditionNotGrantedDescription": { - "message": "You must grant browser privacy permissions to Bitwarden to set it as the default password manager.", + "message": "Du måste ge Bitwarden sekretessbehörighet för webbläsaren för att kunna ange den som standardlösenordshanterare.", "description": "Description for the dialog that appears when the user has not granted the extension permission to set privacy settings" }, "makeDefault": { @@ -4258,27 +4331,27 @@ "description": "Button text for the setting that allows overriding the default browser autofill settings" }, "saveCipherAttemptSuccess": { - "message": "Credentials saved successfully!", + "message": "Legitimationen har sparats framgångsrikt!", "description": "Notification message for when saving credentials has succeeded." }, "passwordSaved": { - "message": "Password saved!", + "message": "Lösenordet sparat!", "description": "Notification message for when saving credentials has succeeded." }, "updateCipherAttemptSuccess": { - "message": "Credentials updated successfully!", + "message": "Legitimationen har uppdaterats!", "description": "Notification message for when updating credentials has succeeded." }, "passwordUpdated": { - "message": "Password updated!", + "message": "Lösenord uppdaterat!", "description": "Notification message for when updating credentials has succeeded." }, "saveCipherAttemptFailed": { - "message": "Error saving credentials. Check console for details.", + "message": "Fel vid sparande av inloggningsuppgifter. Kontrollera konsolen för detaljer.", "description": "Notification message for when saving credentials has failed." }, "success": { - "message": "Success" + "message": "Lyckades" }, "removePasskey": { "message": "Ta bort passkey" @@ -4287,13 +4360,13 @@ "message": "Passkey borttagen" }, "autofillSuggestions": { - "message": "Autofill suggestions" + "message": "Förslag för autofyll" }, "itemSuggestions": { - "message": "Suggested items" + "message": "Föreslagna föremål" }, "autofillSuggestionsTip": { - "message": "Save a login item for this site to autofill" + "message": "Spara ett inloggningsobjekt för den här webbplatsen för autofyll" }, "yourVaultIsEmpty": { "message": "Ditt valv är tomt" @@ -4302,10 +4375,10 @@ "message": "Inga objekt matchar din sökning" }, "clearFiltersOrTryAnother": { - "message": "Clear filters or try another search term" + "message": "Rensa filter eller försök med en annan sökterm" }, "copyInfoTitle": { - "message": "Copy info - $ITEMNAME$", + "message": "Kopiera information - $ITEMNAME$", "description": "Title for a button that opens a menu with options to copy information from an item.", "placeholders": { "itemname": { @@ -4325,7 +4398,7 @@ } }, "moreOptionsLabel": { - "message": "More options, $ITEMNAME$", + "message": "Fler alternativ, $ITEMNAME$", "description": "Aria label for a button that opens a menu with more options for an item.", "placeholders": { "itemname": { @@ -4335,7 +4408,7 @@ } }, "moreOptionsTitle": { - "message": "More options - $ITEMNAME$", + "message": "Fler alternativ - $ITEMNAME$", "description": "Title for a button that opens a menu with more options for an item.", "placeholders": { "itemname": { @@ -4355,7 +4428,7 @@ } }, "viewItemTitleWithField": { - "message": "View item - $ITEMNAME$ - $FIELD$", + "message": "Visa objekt - $ITEMNAME$ - $FIELD$", "description": "Title for a link that opens a view for an item.", "placeholders": { "itemname": { @@ -4369,7 +4442,7 @@ } }, "autofillTitle": { - "message": "Autofill - $ITEMNAME$", + "message": "Autofyll - $ITEMNAME$", "description": "Title for a button that autofills a login item.", "placeholders": { "itemname": { @@ -4379,7 +4452,7 @@ } }, "autofillTitleWithField": { - "message": "Autofill - $ITEMNAME$ - $FIELD$", + "message": "Autofyll - $ITEMNAME$ - $FIELD$", "description": "Title for a button that autofills a login item.", "placeholders": { "itemname": { @@ -4393,7 +4466,7 @@ } }, "copyFieldValue": { - "message": "Copy $FIELD$, $VALUE$", + "message": "Kopiera $FIELD$, $VALUE$", "description": "Title for a button that copies a field value to the clipboard.", "placeholders": { "field": { @@ -4407,10 +4480,10 @@ } }, "noValuesToCopy": { - "message": "No values to copy" + "message": "Inga värden att kopiera" }, "assignToCollections": { - "message": "Assign to collections" + "message": "Tilldela till samlingar" }, "copyEmail": { "message": "Kopiera e-postadress" @@ -4422,7 +4495,7 @@ "message": "Kopiera adress" }, "adminConsole": { - "message": "Admin Console" + "message": "Adminkonsol" }, "accountSecurity": { "message": "Kontosäkerhet" @@ -4434,10 +4507,10 @@ "message": "Utseende" }, "errorAssigningTargetCollection": { - "message": "Error assigning target collection." + "message": "Fel vid tilldelning av målsamling." }, "errorAssigningTargetFolder": { - "message": "Error assigning target folder." + "message": "Fel vid tilldelning av målmapp." }, "viewItemsIn": { "message": "Visa objekt i $NAME$", @@ -4482,7 +4555,7 @@ "message": "Objektnamn" }, "organizationIsDeactivated": { - "message": "Organization is deactivated" + "message": "Organisationen är avaktiverad" }, "owner": { "message": "Ägare" @@ -4492,7 +4565,7 @@ "description": "Used as a label to indicate that the user is the owner of an item." }, "contactYourOrgAdmin": { - "message": "Items in deactivated organizations cannot be accessed. Contact your organization owner for assistance." + "message": "Det går inte att komma åt objekt i inaktiverade organisationer. Kontakta din organisationsägare för hjälp." }, "additionalInformation": { "message": "Ytterligare information" @@ -4501,16 +4574,16 @@ "message": "Objekthistorik" }, "lastEdited": { - "message": "Last edited" + "message": "Senast ändrat" }, "ownerYou": { "message": "Ägare: Du" }, "linked": { - "message": "Linked" + "message": "Länkad" }, "copySuccessful": { - "message": "Copy Successful" + "message": "Kopiering lyckades" }, "upload": { "message": "Ladda upp" @@ -4540,52 +4613,52 @@ } }, "downloadBitwarden": { - "message": "Download Bitwarden" + "message": "Ladda ner Bitwarden" }, "downloadBitwardenOnAllDevices": { - "message": "Download Bitwarden on all devices" + "message": "Ladda ner Bitwarden på alla enheter" }, "getTheMobileApp": { - "message": "Get the mobile app" + "message": "Hämta mobilappen" }, "getTheMobileAppDesc": { - "message": "Access your passwords on the go with the Bitwarden mobile app." + "message": "Få tillgång till dina lösenord när du är på språng med Bitwardens mobilapp." }, "getTheDesktopApp": { - "message": "Get the desktop app" + "message": "Hämta skrivbordsappen" }, "getTheDesktopAppDesc": { - "message": "Access your vault without a browser, then set up unlock with biometrics to expedite unlocking in both the desktop app and browser extension." + "message": "Öppna ditt valv utan en webbläsare och ställ sedan in upplåsning med biometri för att påskynda upplåsningen i både skrivbordsappen och webbläsartillägget." }, "downloadFromBitwardenNow": { - "message": "Download from bitwarden.com now" + "message": "Ladda ner från bitwarden.com nu" }, "getItOnGooglePlay": { - "message": "Get it on Google Play" + "message": "Hämta den på Google Play" }, "downloadOnTheAppStore": { - "message": "Download on the App Store" + "message": "Ladda ner på App Store" }, "permanentlyDeleteAttachmentConfirmation": { - "message": "Are you sure you want to permanently delete this attachment?" + "message": "Är du säker på att du vill radera den här bilagan permanent?" }, "premium": { "message": "Premium" }, "freeOrgsCannotUseAttachments": { - "message": "Free organizations cannot use attachments" + "message": "Fria organisationer kan inte använda bilagor" }, "filters": { - "message": "Filters" + "message": "Filter" }, "filterVault": { "message": "Filtrera valv" }, "filterApplied": { - "message": "One filter applied" + "message": "Ett filter tillämpat" }, "filterAppliedPlural": { - "message": "$COUNT$ filters applied", + "message": "$COUNT$ filter tillämpas", "placeholders": { "count": { "content": "$1", @@ -4603,7 +4676,7 @@ "message": "Kontaktuppgifter" }, "downloadAttachment": { - "message": "Download - $ITEMNAME$", + "message": "Ladda ner - $ITEMNAME$", "placeholders": { "itemname": { "content": "$1", @@ -4612,7 +4685,7 @@ } }, "cardNumberEndsWith": { - "message": "card number ends with", + "message": "kortnummer slutar med", "description": "Used within the inline menu to provide an aria description when users are attempting to fill a card cipher." }, "loginCredentials": { @@ -4638,7 +4711,7 @@ } }, "websiteAdded": { - "message": "Website added" + "message": "Webbplats tillagd" }, "addWebsite": { "message": "Lägg till webbplats" @@ -4657,7 +4730,7 @@ } }, "showMatchDetection": { - "message": "Show match detection $WEBSITE$", + "message": "Visa matchningsdetektering $WEBSITE", "placeholders": { "website": { "content": "$1", @@ -4666,7 +4739,7 @@ } }, "hideMatchDetection": { - "message": "Hide match detection $WEBSITE$", + "message": "Detektering av dold matchning $WEBSITE$", "placeholders": { "website": { "content": "$1", @@ -4675,19 +4748,19 @@ } }, "autoFillOnPageLoad": { - "message": "Autofill on page load?" + "message": "Autofyll vid sidladdning?" }, "cardExpiredTitle": { - "message": "Expired card" + "message": "Utgått kort" }, "cardExpiredMessage": { - "message": "If you've renewed it, update the card's information" + "message": "Om du har förnyat kortet ska du uppdatera kortinformationen" }, "cardDetails": { - "message": "Card details" + "message": "Begär kort" }, "cardBrandDetails": { - "message": "$BRAND$ details", + "message": "$BRAND$ detaljer", "placeholders": { "brand": { "content": "$1", @@ -4726,13 +4799,13 @@ "message": "Tilldela" }, "bulkCollectionAssignmentDialogDescriptionSingular": { - "message": "Only organization members with access to these collections will be able to see the item." + "message": "Endast organisationsmedlemmar med tillgång till dessa samlingar kan se objektet." }, "bulkCollectionAssignmentDialogDescriptionPlural": { - "message": "Only organization members with access to these collections will be able to see the items." + "message": "Endast organisationsmedlemmar med tillgång till dessa samlingar kan se objekten." }, "bulkCollectionAssignmentWarning": { - "message": "You have selected $TOTAL_COUNT$ items. You cannot update $READONLY_COUNT$ of the items because you do not have edit permissions.", + "message": "Du har valt $TOTAL_COUNT$ artiklar. Du kan inte uppdatera $READONLY_COUNT$ av objekten eftersom du inte har redigeringsbehörighet.", "placeholders": { "total_count": { "content": "$1", @@ -4762,13 +4835,13 @@ "message": "Använd dolda fält för känslig data, som t. ex. ett lösenord" }, "checkBoxHelpText": { - "message": "Use checkboxes if you'd like to autofill a form's checkbox, like a remember email" + "message": "Använd kryssrutor om du vill fylla i en kryssruta i ett formulär automatiskt, t.ex. för att komma ihåg e-post" }, "linkedHelpText": { - "message": "Use a linked field when you are experiencing autofill issues for a specific website." + "message": "Använd ett länkat fält när du har problem med autofyll för en viss webbplats." }, "linkedLabelHelpText": { - "message": "Enter the the field's html id, name, aria-label, or placeholder." + "message": "Ange fältets html-id, namn, aria-label eller platshållare." }, "editField": { "message": "Redigera fält" @@ -4792,7 +4865,7 @@ } }, "fieldAdded": { - "message": "$LABEL$ added", + "message": "$LABEL$ tillagd", "placeholders": { "label": { "content": "$1", @@ -4801,7 +4874,7 @@ } }, "reorderToggleButton": { - "message": "Reorder $LABEL$. Use arrow key to move item up or down.", + "message": "Ordna om $LABEL$. Använd piltangenten för att flytta objektet uppåt eller nedåt.", "placeholders": { "label": { "content": "$1", @@ -4810,10 +4883,10 @@ } }, "reorderWebsiteUriButton": { - "message": "Reorder website URI. Use arrow key to move item up or down." + "message": "Ordna om webbplatsens URI. Använd piltangenten för att flytta objektet uppåt eller nedåt." }, "reorderFieldUp": { - "message": "$LABEL$ moved up, position $INDEX$ of $LENGTH$", + "message": "$LABEL$ flyttas upp, position $INDEX$ av $LENGTH$", "placeholders": { "label": { "content": "$1", @@ -4830,13 +4903,13 @@ } }, "selectCollectionsToAssign": { - "message": "Select collections to assign" + "message": "Välj samlingar som ska tilldelas" }, "personalItemTransferWarningSingular": { - "message": "1 item will be permanently transferred to the selected organization. You will no longer own this item." + "message": "1 objekt kommer att permanent överföras till den valda organisationen. Du kommer inte längre att äga detta objekt." }, "personalItemsTransferWarningPlural": { - "message": "$PERSONAL_ITEMS_COUNT$ items will be permanently transferred to the selected organization. You will no longer own these items.", + "message": "$PERSONAL_ITEMS_COUNT$ objekt kommer att överföras permanent till den valda organisationen. Du kommer inte längre att äga dessa objekt.", "placeholders": { "personal_items_count": { "content": "$1", @@ -4845,7 +4918,7 @@ } }, "personalItemWithOrgTransferWarningSingular": { - "message": "1 item will be permanently transferred to $ORG$. You will no longer own this item.", + "message": "1 objekt kommer att överföras permanent till $ORG$. Du kommer inte längre att äga det här objektet.", "placeholders": { "org": { "content": "$1", @@ -4854,7 +4927,7 @@ } }, "personalItemsWithOrgTransferWarningPlural": { - "message": "$PERSONAL_ITEMS_COUNT$ items will be permanently transferred to $ORG$. You will no longer own these items.", + "message": "$PERSONAL_ITEMS_COUNT$ objekt kommer att överföras permanent till $ORG$. Du kommer inte längre att äga dessa objekt.", "placeholders": { "personal_items_count": { "content": "$1", @@ -4867,13 +4940,13 @@ } }, "successfullyAssignedCollections": { - "message": "Successfully assigned collections" + "message": "Framgångsrikt tilldelade samlingar" }, "nothingSelected": { - "message": "You have not selected anything." + "message": "Du har inte valt något." }, "itemsMovedToOrg": { - "message": "Items moved to $ORGNAME$", + "message": "Objekt flyttade till $ORGNAME$", "placeholders": { "orgname": { "content": "$1", @@ -4882,7 +4955,7 @@ } }, "itemMovedToOrg": { - "message": "Item moved to $ORGNAME$", + "message": "Objektet flyttat till $ORGNAME$", "placeholders": { "orgname": { "content": "$1", @@ -4891,7 +4964,7 @@ } }, "reorderFieldDown": { - "message": "$LABEL$ moved down, position $INDEX$ of $LENGTH$", + "message": "$LABEL$ flyttas ner, position $INDEX$ av $LENGTH$", "placeholders": { "label": { "content": "$1", @@ -4908,34 +4981,34 @@ } }, "itemLocation": { - "message": "Item Location" + "message": "Föremålets placering" }, "fileSend": { - "message": "File Send" + "message": "Skicka fil" }, "fileSends": { - "message": "File Sends" + "message": "Skicka filer" }, "textSend": { - "message": "Text Send" + "message": "Skicka text" }, "textSends": { - "message": "Text Sends" + "message": "Text skickas" }, "accountActions": { "message": "Kontoåtgärder" }, "showNumberOfAutofillSuggestions": { - "message": "Show number of login autofill suggestions on extension icon" + "message": "Visa antal autofyllförslag för inloggning på tilläggsikonen" }, "showQuickCopyActions": { - "message": "Show quick copy actions on Vault" + "message": "Visa snabbkopieringsåtgärder på Vault" }, "systemDefault": { "message": "Systemstandard" }, "enterprisePolicyRequirementsApplied": { - "message": "Enterprise policy requirements have been applied to this setting" + "message": "Krav på företagspolicy har tillämpats på denna inställning" }, "sshPrivateKey": { "message": "Privat nyckel" @@ -4965,13 +5038,13 @@ "message": "Försök igen" }, "vaultCustomTimeoutMinimum": { - "message": "Minimum custom timeout is 1 minute." + "message": "Minsta anpassade timeout är 1 minut." }, "additionalContentAvailable": { - "message": "Additional content is available" + "message": "Ytterligare innehåll är tillgängligt" }, "fileSavedToDevice": { - "message": "File saved to device. Manage from your device downloads." + "message": "Fil sparad till enhet. Hantera nedladdningar från din enhet." }, "showCharacterCount": { "message": "Visa antal tecken" @@ -4980,43 +5053,43 @@ "message": "Dölj antal tecken" }, "itemsInTrash": { - "message": "Items in trash" + "message": "Föremål i papperskorgen" }, "noItemsInTrash": { - "message": "No items in trash" + "message": "Inga objekt i papperskorgen" }, "noItemsInTrashDesc": { - "message": "Items you delete will appear here and be permanently deleted after 30 days" + "message": "Objekt som du raderar kommer att visas här och raderas permanent efter 30 dagar" }, "trashWarning": { - "message": "Items that have been in trash more than 30 days will automatically be deleted" + "message": "Objekt som har legat i papperskorgen i mer än 30 dagar raderas automatiskt" }, "restore": { "message": "Återställ" }, "deleteForever": { - "message": "Delete forever" + "message": "Ta bort permanent" }, "noEditPermissions": { - "message": "You don't have permission to edit this item" + "message": "Du har inte behörighet att redigera detta objekt" }, "biometricsStatusHelptextUnlockNeeded": { - "message": "Biometric unlock is unavailable because PIN or password unlock is required first." + "message": "Biometrisk upplåsning är inte tillgänglig eftersom upplåsning med PIN-kod eller lösenord krävs först." }, "biometricsStatusHelptextHardwareUnavailable": { - "message": "Biometric unlock is currently unavailable." + "message": "Biometrisk upplåsning är för närvarande inte tillgänglig." }, "biometricsStatusHelptextAutoSetupNeeded": { - "message": "Biometric unlock is unavailable due to misconfigured system files." + "message": "Biometrisk upplåsning är inte tillgänglig på grund av felkonfigurerade systemfiler." }, "biometricsStatusHelptextManualSetupNeeded": { - "message": "Biometric unlock is unavailable due to misconfigured system files." + "message": "Biometrisk upplåsning är inte tillgänglig på grund av felkonfigurerade systemfiler." }, "biometricsStatusHelptextDesktopDisconnected": { - "message": "Biometric unlock is unavailable because the Bitwarden desktop app is closed." + "message": "Biometrisk upplåsning är inte tillgänglig eftersom Bitwardens skrivbordsapp är stängd." }, "biometricsStatusHelptextNotEnabledInDesktop": { - "message": "Biometric unlock is unavailable because it is not enabled for $EMAIL$ in the Bitwarden desktop app.", + "message": "Biometrisk upplåsning är inte tillgänglig eftersom den inte är aktiverad för $EMAIL$ i Bitwardens skrivbordsapp.", "placeholders": { "email": { "content": "$1", @@ -5025,34 +5098,37 @@ } }, "biometricsStatusHelptextUnavailableReasonUnknown": { - "message": "Biometric unlock is currently unavailable for an unknown reason." + "message": "Biometrisk upplåsning är för närvarande inte tillgänglig av okänd anledning." }, "unlockVault": { - "message": "Unlock your vault in seconds" + "message": "Lås upp ditt valv på några sekunder" }, "unlockVaultDesc": { - "message": "You can customize your unlock and timeout settings to more quickly access your vault." + "message": "Du kan anpassa dina inställningar för upplåsning och timeout för att snabbare komma åt ditt valv." }, "unlockPinSet": { - "message": "Unlock PIN set" + "message": "Lås upp PIN-koden" + }, + "unlockWithBiometricSet": { + "message": "Lås upp med biometriuppsättning" }, "authenticating": { - "message": "Authenticating" + "message": "Autentisering" }, "fillGeneratedPassword": { - "message": "Fill generated password", + "message": "Fyll i genererat lösenord", "description": "Heading for the password generator within the inline menu" }, "passwordRegenerated": { - "message": "Password regenerated", + "message": "Lösenord förnyat", "description": "Notification message for when a password has been regenerated" }, "saveToBitwarden": { - "message": "Save to Bitwarden", + "message": "Spara till Bitwarden", "description": "Confirmation message for saving a login to Bitwarden" }, "spaceCharacterDescriptor": { - "message": "Space", + "message": "Mellanslag", "description": "Represents the space key in screen reader content as a readable word" }, "tildeCharacterDescriptor": { @@ -5060,7 +5136,7 @@ "description": "Represents the ~ key in screen reader content as a readable word" }, "backtickCharacterDescriptor": { - "message": "Backtick", + "message": "Bakvänd apostrof", "description": "Represents the ` key in screen reader content as a readable word" }, "exclamationCharacterDescriptor": { @@ -5068,27 +5144,27 @@ "description": "Represents the ! key in screen reader content as a readable word" }, "atSignCharacterDescriptor": { - "message": "At sign", + "message": "Vid skylt", "description": "Represents the @ key in screen reader content as a readable word" }, "hashSignCharacterDescriptor": { - "message": "Hash sign", + "message": "Hash-tecken", "description": "Represents the # key in screen reader content as a readable word" }, "dollarSignCharacterDescriptor": { - "message": "Dollar sign", + "message": "Dollartecken", "description": "Represents the $ key in screen reader content as a readable word" }, "percentSignCharacterDescriptor": { - "message": "Percent sign", + "message": "Procenttecken", "description": "Represents the % key in screen reader content as a readable word" }, "caretCharacterDescriptor": { - "message": "Caret", + "message": "Cirkumflex", "description": "Represents the ^ key in screen reader content as a readable word" }, "ampersandCharacterDescriptor": { - "message": "Ampersand", + "message": "Och", "description": "Represents the & key in screen reader content as a readable word" }, "asteriskCharacterDescriptor": { @@ -5096,19 +5172,19 @@ "description": "Represents the * key in screen reader content as a readable word" }, "parenLeftCharacterDescriptor": { - "message": "Left parenthesis", + "message": "Vänster parentes", "description": "Represents the ( key in screen reader content as a readable word" }, "parenRightCharacterDescriptor": { - "message": "Right parenthesis", + "message": "Höger parentes", "description": "Represents the ) key in screen reader content as a readable word" }, "hyphenCharacterDescriptor": { - "message": "Underscore", + "message": "Understreck", "description": "Represents the _ key in screen reader content as a readable word" }, "underscoreCharacterDescriptor": { - "message": "Hyphen", + "message": "Bindestreck", "description": "Represents the - key in screen reader content as a readable word" }, "plusCharacterDescriptor": { @@ -5116,23 +5192,23 @@ "description": "Represents the + key in screen reader content as a readable word" }, "equalsCharacterDescriptor": { - "message": "Equals", + "message": "Lika med", "description": "Represents the = key in screen reader content as a readable word" }, "braceLeftCharacterDescriptor": { - "message": "Left brace", + "message": "Vänster stag", "description": "Represents the { key in screen reader content as a readable word" }, "braceRightCharacterDescriptor": { - "message": "Right brace", + "message": "Höger stag", "description": "Represents the } key in screen reader content as a readable word" }, "bracketLeftCharacterDescriptor": { - "message": "Left bracket", + "message": "Vänster konsol", "description": "Represents the [ key in screen reader content as a readable word" }, "bracketRightCharacterDescriptor": { - "message": "Right bracket", + "message": "Höger konsol", "description": "Represents the ] key in screen reader content as a readable word" }, "pipeCharacterDescriptor": { @@ -5140,39 +5216,39 @@ "description": "Represents the | key in screen reader content as a readable word" }, "backSlashCharacterDescriptor": { - "message": "Back slash", + "message": "Bakvänt snedstreck", "description": "Represents the back slash key in screen reader content as a readable word" }, "colonCharacterDescriptor": { - "message": "Colon", + "message": "Kolon", "description": "Represents the : key in screen reader content as a readable word" }, "semicolonCharacterDescriptor": { - "message": "Semicolon", + "message": "Semikolon", "description": "Represents the ; key in screen reader content as a readable word" }, "doubleQuoteCharacterDescriptor": { - "message": "Double quote", + "message": "Dubbla citat", "description": "Represents the double quote key in screen reader content as a readable word" }, "singleQuoteCharacterDescriptor": { - "message": "Single quote", + "message": "Enstaka offert", "description": "Represents the ' key in screen reader content as a readable word" }, "lessThanCharacterDescriptor": { - "message": "Less than", + "message": "Mindre än", "description": "Represents the < key in screen reader content as a readable word" }, "greaterThanCharacterDescriptor": { - "message": "Greater than", + "message": "Större än", "description": "Represents the > key in screen reader content as a readable word" }, "commaCharacterDescriptor": { - "message": "Comma", + "message": "Komma", "description": "Represents the , key in screen reader content as a readable word" }, "periodCharacterDescriptor": { - "message": "Period", + "message": "Punkt", "description": "Represents the . key in screen reader content as a readable word" }, "questionCharacterDescriptor": { @@ -5180,7 +5256,7 @@ "description": "Represents the ? key in screen reader content as a readable word" }, "forwardSlashCharacterDescriptor": { - "message": "Forward slash", + "message": "Framåtriktat snedstreck", "description": "Represents the / key in screen reader content as a readable word" }, "lowercaseAriaLabel": { @@ -5190,52 +5266,52 @@ "message": "Versal" }, "generatedPassword": { - "message": "Generated password" + "message": "Genererat lösenord" }, "compactMode": { - "message": "Compact mode" + "message": "Kompakt läge" }, "beta": { "message": "Beta" }, "extensionWidth": { - "message": "Extension width" + "message": "Förlängning bredd" }, "wide": { - "message": "Wide" + "message": "Bred" }, "extraWide": { - "message": "Extra wide" + "message": "Extra bred" }, "sshKeyWrongPassword": { - "message": "The password you entered is incorrect." + "message": "Lösenordet du har angett är felaktigt." }, "importSshKey": { - "message": "Import" + "message": "Importera" }, "confirmSshKeyPassword": { - "message": "Confirm password" + "message": "Bekräfta lösenord" }, "enterSshKeyPasswordDesc": { - "message": "Enter the password for the SSH key." + "message": "Ange lösenordet för SSH-nyckeln." }, "enterSshKeyPassword": { - "message": "Enter password" + "message": "Ange lösenord" }, "invalidSshKey": { - "message": "The SSH key is invalid" + "message": "SSH-nyckeln är ogiltig" }, "sshKeyTypeUnsupported": { - "message": "The SSH key type is not supported" + "message": "SSH-nyckeltypen stöds inte" }, "importSshKeyFromClipboard": { - "message": "Import key from clipboard" + "message": "Importera nyckel från urklipp" }, "sshKeyImported": { - "message": "SSH key imported successfully" + "message": "SSH-nyckel importerad framgångsrikt" }, "cannotRemoveViewOnlyCollections": { - "message": "You cannot remove collections with View only permissions: $COLLECTIONS$", + "message": "Du kan inte ta bort samlingar med behörigheten Visa endast: $COLLECTIONS$", "placeholders": { "collections": { "content": "$1", @@ -5244,138 +5320,142 @@ } }, "updateDesktopAppOrDisableFingerprintDialogTitle": { - "message": "Please update your desktop application" + "message": "Uppdatera din desktop-applikation" }, "updateDesktopAppOrDisableFingerprintDialogMessage": { - "message": "To use biometric unlock, please update your desktop application, or disable fingerprint unlock in the desktop settings." + "message": "Om du vill använda biometrisk upplåsning måste du uppdatera din skrivbordsapplikation eller inaktivera fingeravtrycksupplåsning i skrivbordsinställningarna." }, "changeAtRiskPassword": { - "message": "Change at-risk password" + "message": "Ändra lösenord för riskgrupper" }, "settingsVaultOptions": { - "message": "Vault options" + "message": "Alternativ för valv" }, "emptyVaultDescription": { - "message": "The vault protects more than just your passwords. Store secure logins, IDs, cards and notes securely here." + "message": "Valvet skyddar mer än bara dina lösenord. Förvara säkra inloggningar, ID-handlingar, kort och anteckningar säkert här." }, "introCarouselLabel": { - "message": "Welcome to Bitwarden" + "message": "Välkommen till Bitwarden" }, "securityPrioritized": { - "message": "Security, prioritized" + "message": "Säkerhet, prioriterad" }, "securityPrioritizedBody": { - "message": "Save logins, cards, and identities to your secure vault. Bitwarden uses zero-knowledge, end-to-end encryption to protect what’s important to you." + "message": "Spara inloggningar, kort och identiteter i ditt säkra valv. Bitwarden använder nollkännedom, end-to-end-kryptering för att skydda det som är viktigt för dig." }, "quickLogin": { - "message": "Quick and easy login" + "message": "Snabb och enkel inloggning" }, "quickLoginBody": { - "message": "Set up biometric unlock and autofill to log into your accounts without typing a single letter." + "message": "Ställ in biometrisk upplåsning och autofyll för att logga in på dina konton utan att skriva en enda bokstav." }, "secureUser": { - "message": "Level up your logins" + "message": "Höj nivån på dina inloggningar" }, "secureUserBody": { - "message": "Use the generator to create and save strong, unique passwords for all your accounts." + "message": "Använd generatorn för att skapa och spara starka, unika lösenord för alla dina konton." }, "secureDevices": { - "message": "Your data, when and where you need it" + "message": "Dina data, när och där du behöver dem" }, "secureDevicesBody": { - "message": "Save unlimited passwords across unlimited devices with Bitwarden mobile, browser, and desktop apps." + "message": "Spara obegränsat antal lösenord på obegränsat antal enheter med Bitwardens mobil-, webbläsar- och skrivbordsappar." }, "nudgeBadgeAria": { - "message": "1 notification" + "message": "1 meddelande" }, "emptyVaultNudgeTitle": { - "message": "Import existing passwords" + "message": "Importera befintliga lösenord" }, "emptyVaultNudgeBody": { - "message": "Use the importer to quickly transfer logins to Bitwarden without manually adding them." + "message": "Använd importören för att snabbt överföra inloggningar till Bitwarden utan att lägga till dem manuellt." }, "emptyVaultNudgeButton": { - "message": "Import now" + "message": "Importera nu" }, "hasItemsVaultNudgeTitle": { - "message": "Welcome to your vault!" + "message": "Välkommen till ditt valv!" }, "hasItemsVaultNudgeBodyOne": { - "message": "Autofill items for the current page" + "message": "Autofyll objekt för den aktuella sidan" }, "hasItemsVaultNudgeBodyTwo": { - "message": "Favorite items for easy access" + "message": "Favoritartiklar för enkel åtkomst" }, "hasItemsVaultNudgeBodyThree": { - "message": "Search your vault for something else" + "message": "Sök i ditt valv efter något annat" }, "newLoginNudgeTitle": { - "message": "Save time with autofill" + "message": "Spara tid med autofyll" }, "newLoginNudgeBodyOne": { - "message": "Include a", + "message": "Inkludera ett", "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", "example": "Include a Website so this login appears as an autofill suggestion." }, "newLoginNudgeBodyBold": { - "message": "Website", + "message": "Webbplats", "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", "example": "Include a Website so this login appears as an autofill suggestion." }, "newLoginNudgeBodyTwo": { - "message": "so this login appears as an autofill suggestion.", + "message": "så att den här inloggningen visas som ett förslag för autofyll.", "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { - "message": "Seamless online checkout" + "message": "Sömlös utcheckning online" }, "newCardNudgeBody": { - "message": "With cards, easily autofill payment forms securely and accurately." + "message": "Med kort kan du enkelt autofylla betalningsformulär på ett säkert och exakt sätt." }, "newIdentityNudgeTitle": { - "message": "Simplify creating accounts" + "message": "Förenkla skapandet av konton" }, "newIdentityNudgeBody": { - "message": "With identities, quickly autofill long registration or contact forms." + "message": "Med identiteter kan du snabbt autofylla långa registrerings- eller kontaktformulär." }, "newNoteNudgeTitle": { - "message": "Keep your sensitive data safe" + "message": "Håll dina känsliga uppgifter säkra" }, "newNoteNudgeBody": { - "message": "With notes, securely store sensitive data like banking or insurance details." + "message": "Med anteckningar kan du säkert lagra känslig information som bank- eller försäkringsuppgifter." }, "newSshNudgeTitle": { - "message": "Developer-friendly SSH access" + "message": "Utvecklarvänlig SSH-åtkomst" }, "newSshNudgeBodyOne": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "message": "Förvara dina nycklar och anslut till SSH-agenten för snabb, krypterad autentisering.", "description": "Two part message", "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, "newSshNudgeBodyTwo": { - "message": "Learn more about SSH agent", + "message": "Läs mer om SSH-agent", "description": "Two part message", "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, "generatorNudgeTitle": { - "message": "Quickly create passwords" + "message": "Skapa lösenord snabbt" }, "generatorNudgeBodyOne": { - "message": "Easily create strong and unique passwords by clicking on", + "message": "Skapa enkelt starka och unika lösenord genom att klicka på", "description": "Two part message", "example": "Easily create strong and unique passwords by clicking on {icon} to help you keep your logins secure." }, "generatorNudgeBodyTwo": { - "message": "to help you keep your logins secure.", + "message": "för att hjälpa dig att hålla dina inloggningar säkra.", "description": "Two part message", "example": "Easily create strong and unique passwords by clicking on {icon} to help you keep your logins secure." }, "generatorNudgeBodyAria": { - "message": "Easily create strong and unique passwords by clicking on the Generate password button to help you keep your logins secure.", + "message": "Skapa enkelt starka och unika lösenord genom att klicka på knappen Generera lösenord så att du kan hålla dina inloggningar säkra.", "description": "Aria label for the body content of the generator nudge" }, "noPermissionsViewPage": { - "message": "You do not have permissions to view this page. Try logging in with a different account." + "message": "Du har inte behörighet att visa den här sidan. Försök att logga in med ett annat konto." + }, + "wasmNotSupported": { + "message": "WebAssembly stöds inte av din webbläsare eller är inte aktiverat. WebAssembly krävs för att använda Bitwarden-appen.", + "description": "'WebAssembly' is a technical term and should not be translated." } } diff --git a/apps/browser/src/_locales/te/messages.json b/apps/browser/src/_locales/te/messages.json index 4775d1f7af0..ecc7da63e79 100644 --- a/apps/browser/src/_locales/te/messages.json +++ b/apps/browser/src/_locales/te/messages.json @@ -1173,6 +1173,12 @@ "message": "Oh no! We couldn't save this. Try entering the details manually.", "description": "Detailed error message shown when saving login details fails." }, + "changePasswordWarning": { + "message": "After changing your password, you will need to log in with your new password. Active sessions on other devices will be logged out within one hour." + }, + "accountRecoveryUpdateMasterPasswordSubtitle": { + "message": "Change your master password to complete account recovery." + }, "enableChangedPasswordNotification": { "message": "Ask to update existing login" }, @@ -1365,8 +1371,8 @@ "featureUnavailable": { "message": "Feature unavailable" }, - "encryptionKeyMigrationRequired": { - "message": "Encryption key migration required. Please login through the web vault to update your encryption key." + "legacyEncryptionUnsupported": { + "message": "Legacy encryption is no longer supported. Please contact support to recover your account." }, "premiumMembership": { "message": "Premium membership" @@ -1922,6 +1928,9 @@ "typeSshKey": { "message": "SSH key" }, + "typeNote": { + "message": "Note" + }, "newItemHeader": { "message": "New $TYPE$", "placeholders": { @@ -2153,8 +2162,8 @@ "setYourPinCode": { "message": "Set your PIN code for unlocking Bitwarden. Your PIN settings will be reset if you ever fully log out of the application." }, - "setYourPinCode1": { - "message": "Your PIN will be used to unlock Bitwarden instead of your master password. Your PIN will reset if you ever fully log out of Bitwarden." + "setPinCode": { + "message": "You can use this PIN to unlock Bitwarden. Your PIN will be reset if you ever fully log out of the application." }, "pinRequired": { "message": "PIN code is required." @@ -2204,6 +2213,9 @@ "useThisPassword": { "message": "Use this password" }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, "useThisUsername": { "message": "Use this username" }, @@ -2481,6 +2493,12 @@ "personalOwnershipPolicyInEffectImports": { "message": "An organization policy has blocked importing items into your individual vault." }, + "restrictCardTypeImport": { + "message": "Cannot import card item types" + }, + "restrictCardTypeImportDesc": { + "message": "A policy set by 1 or more organizations prevents you from importing cards to your vaults." + }, "domainsTitle": { "message": "Domains", "description": "A category title describing the concept of web domains" @@ -2512,6 +2530,10 @@ "change": { "message": "Change" }, + "changePassword": { + "message": "Change password", + "description": "Change password button for browser at risk notification on login." + }, "changeButtonTitle": { "message": "Change password - $ITEMNAME$", "placeholders": { @@ -2521,6 +2543,9 @@ } } }, + "atRiskPassword": { + "message": "At-risk password" + }, "atRiskPasswords": { "message": "At-risk passwords" }, @@ -2555,6 +2580,26 @@ } } }, + "atRiskChangePrompt": { + "message": "Your password for this site is at-risk. $ORGANIZATION$ has requested that you change it.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + }, + "description": "Notification body when a login triggers an at-risk password change request and the change password domain is known." + }, + "atRiskNavigatePrompt": { + "message": "$ORGANIZATION$ wants you to change this password because it is at-risk. Navigate to your account settings to change the password.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + }, + "description": "Notification body when a login triggers an at-risk password change request and no change password domain is provided." + }, "reviewAndChangeAtRiskPassword": { "message": "Review and change one at-risk password" }, @@ -2674,6 +2719,10 @@ "message": "All Sends", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "maxAccessCountReached": { + "message": "Max access count reached", + "description": "This text will be displayed after a Send has been accessed the maximum amount of times." + }, "hideTextByDefault": { "message": "Hide text by default" }, @@ -2876,6 +2925,9 @@ "emailVerificationRequiredDesc": { "message": "You must verify your email to use this feature. You can verify your email in the web vault." }, + "masterPasswordSuccessfullySet": { + "message": "Master password successfully set" + }, "updatedMasterPassword": { "message": "Updated master password" }, @@ -3408,6 +3460,9 @@ "logInRequestSent": { "message": "Request sent" }, + "masterPasswordChanged": { + "message": "Master password saved" + }, "exposedMasterPassword": { "message": "Exposed Master Password" }, @@ -3522,6 +3577,12 @@ "requestAdminApproval": { "message": "Request admin approval" }, + "unableToCompleteLogin": { + "message": "Unable to complete login" + }, + "loginOnTrustedDeviceOrAskAdminToAssignPassword": { + "message": "You need to log in on a trusted device or ask your administrator to assign you a password." + }, "ssoIdentifierRequired": { "message": "Organization SSO identifier is required." }, @@ -3607,14 +3668,6 @@ "trustUser": { "message": "Trust user" }, - "sendsNoItemsTitle": { - "message": "No active Sends", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendsNoItemsMessage": { - "message": "Use Send to securely share encrypted information with anyone.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "sendsTitleNoItems": { "message": "Send sensitive information safely", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -4209,6 +4262,26 @@ "message": "Common formats", "description": "Label indicating the most common import formats" }, + "uriMatchDefaultStrategyHint": { + "message": "URI match detection is how Bitwarden identifies autofill suggestions.", + "description": "Explains to the user that URI match detection determines how Bitwarden suggests autofill options, and clarifies that this default strategy applies when no specific match detection is set for a login item." + }, + "regExAdvancedOptionWarning": { + "message": "\"Regular expression\" is an advanced option with increased risk of exposing credentials.", + "description": "Content for dialog which warns a user when selecting 'regular expression' matching strategy as a cipher match strategy" + }, + "startsWithAdvancedOptionWarning": { + "message": "\"Starts with\" is an advanced option with increased risk of exposing credentials.", + "description": "Content for dialog which warns a user when selecting 'starts with' matching strategy as a cipher match strategy" + }, + "uriMatchWarningDialogLink": { + "message": "More about match detection", + "description": "Link to match detection docs on warning dialog for advance match strategy" + }, + "uriAdvancedOption": { + "message": "Advanced options", + "description": "Advanced option placeholder for uri option component" + }, "confirmContinueToBrowserSettingsTitle": { "message": "Continue to browser settings?", "description": "Title for dialog which asks if the user wants to proceed to a relevant browser settings page" @@ -5036,6 +5109,9 @@ "unlockPinSet": { "message": "Unlock PIN set" }, + "unlockWithBiometricSet": { + "message": "Unlock with biometrics set" + }, "authenticating": { "message": "Authenticating" }, @@ -5377,5 +5453,9 @@ }, "noPermissionsViewPage": { "message": "You do not have permissions to view this page. Try logging in with a different account." + }, + "wasmNotSupported": { + "message": "WebAssembly is not supported on your browser or is not enabled. WebAssembly is required to use the Bitwarden app.", + "description": "'WebAssembly' is a technical term and should not be translated." } } diff --git a/apps/browser/src/_locales/th/messages.json b/apps/browser/src/_locales/th/messages.json index fd9bac62391..c085b7557e0 100644 --- a/apps/browser/src/_locales/th/messages.json +++ b/apps/browser/src/_locales/th/messages.json @@ -3,42 +3,42 @@ "message": "bitwarden" }, "appLogoLabel": { - "message": "Bitwarden logo" + "message": "โลโก้ Bitwarden" }, "extName": { - "message": "Bitwarden Password Manager", + "message": "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": "ไม่ว่าจะอยู่ที่ไหน Bitwarden ก็สามารถปกป้องรหัสผ่าน พาสคีย์ และข้อมูลสำคัญของคุณได้อย่างง่ายดาย", "description": "Extension description, MUST be less than 112 characters (Safari restriction)" }, "loginOrCreateNewAccount": { "message": "ล็อกอิน หรือ สร้างบัญชีใหม่ เพื่อใช้งานตู้นิรภัยของคุณ" }, "inviteAccepted": { - "message": "Invitation accepted" + "message": "ตอบรับคำเชิญแล้ว" }, "createAccount": { "message": "สร้างบัญชี" }, "newToBitwarden": { - "message": "New to Bitwarden?" + "message": "เพิ่งเริ่มใช้ Bitwarden ใช่ไหม?" }, "logInWithPasskey": { - "message": "Log in with passkey" + "message": "เข้าสู่ระบบด้วยพาสคีย์" }, "useSingleSignOn": { - "message": "Use single sign-on" + "message": "ใช้การลงชื่อเพียงครั้งเดียว" }, "welcomeBack": { - "message": "Welcome back" + "message": "ยินดีต้อนรับกลับมา" }, "setAStrongPassword": { - "message": "Set a strong password" + "message": "ตั้งรหัสผ่านที่รัดกุม" }, "finishCreatingYourAccountBySettingAPassword": { - "message": "Finish creating your account by setting a password" + "message": "ดำเนินการสร้างบัญชีของคุณให้เสร็จสมบูรณ์โดยการตั้งรหัสผ่าน" }, "enterpriseSingleSignOn": { "message": "Enterprise Single Sign-On" @@ -65,7 +65,7 @@ "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", @@ -84,7 +84,7 @@ "message": "Master Password Hint (optional)" }, "passwordStrengthScore": { - "message": "Password strength score $SCORE$", + "message": "คะแนนความรัดกุมของรหัสผ่าน $SCORE$", "placeholders": { "score": { "content": "$1", @@ -264,7 +264,7 @@ "message": "Request password hint" }, "enterYourAccountEmailAddressAndYourPasswordHintWillBeSentToYou": { - "message": "Enter your account email address and your password hint will be sent to you" + "message": "กรอกที่อยู่อีเมลบัญชีของคุณ แล้วระบบจะส่งคำใบ้รหัสผ่านไปให้คุณ" }, "getMasterPasswordHint": { "message": "รับคำใบ้เกี่ยวกับรหัสผ่านหลักของคุณ" @@ -668,7 +668,7 @@ "message": "ตู้เซฟของคุณถูกล็อก ยืนยันตัวตนของคุณเพื่อดำเนินการต่อ" }, "yourVaultIsLockedV2": { - "message": "Your vault is locked" + "message": "ห้องนิรภัยของคุณถูกล็อก" }, "yourAccountIsLocked": { "message": "Your account is locked" @@ -1022,7 +1022,7 @@ "message": "The \"Add Login Notification\" automatically prompts you to save new logins to your vault whenever you log into them for the first time." }, "addLoginNotificationDescAlt": { - "message": "Ask to add an item if one isn't found in your vault. Applies to all logged in accounts." + "message": "หากไม่พบรายการในห้องนิรภัยของคุณ ระบบจะถามเพื่อเพิ่มรายการ มีผลกับทุกบัญชีที่ลงชื่อเข้าใช้" }, "showCardsInVaultViewV2": { "message": "Always show cards as Autofill suggestions on Vault view" @@ -1173,6 +1173,12 @@ "message": "Oh no! We couldn't save this. Try entering the details manually.", "description": "Detailed error message shown when saving login details fails." }, + "changePasswordWarning": { + "message": "After changing your password, you will need to log in with your new password. Active sessions on other devices will be logged out within one hour." + }, + "accountRecoveryUpdateMasterPasswordSubtitle": { + "message": "Change your master password to complete account recovery." + }, "enableChangedPasswordNotification": { "message": "ขอให้ปรับปรุงการเข้าสู่ระบบที่มีอยู่" }, @@ -1342,7 +1348,7 @@ "message": "ลบไฟล์แนบแล้ว" }, "newAttachment": { - "message": "Add New Attachment" + "message": "เพิ่มไฟล์แนบใหม่" }, "noAttachments": { "message": "ไม่มีไฟล์แนบ" @@ -1365,8 +1371,8 @@ "featureUnavailable": { "message": "Feature Unavailable" }, - "encryptionKeyMigrationRequired": { - "message": "Encryption key migration required. Please login through the web vault to update your encryption key." + "legacyEncryptionUnsupported": { + "message": "Legacy encryption is no longer supported. Please contact support to recover your account." }, "premiumMembership": { "message": "Premium Membership" @@ -1544,7 +1550,7 @@ "message": "FIDO2 WebAuthn" }, "webAuthnDesc": { - "message": "Use any WebAuthn compatible security key to access your account." + "message": "ใช้กุญแจความปลอดภัยที่รองรับ WebAuthn ใดก็ได้เพื่อเข้าถึงบัญชีของคุณ" }, "emailTitle": { "message": "อีเมล" @@ -1597,7 +1603,7 @@ "description": "Represents the message for allowing the user to enable the autofill overlay" }, "autofillSuggestionsSectionTitle": { - "message": "Autofill suggestions" + "message": "คำแนะนำการกรอกข้อมูลอัตโนมัติ" }, "autofillSpotlightTitle": { "message": "Easily find autofill suggestions" @@ -1922,6 +1928,9 @@ "typeSshKey": { "message": "SSH key" }, + "typeNote": { + "message": "Note" + }, "newItemHeader": { "message": "New $TYPE$", "placeholders": { @@ -2145,16 +2154,16 @@ "message": "ปลดล็อกด้วย PIN" }, "setYourPinTitle": { - "message": "Set PIN" + "message": "ตั้ง PIN" }, "setYourPinButton": { - "message": "Set PIN" + "message": "ตั้ง PIN" }, "setYourPinCode": { "message": "ตั้ง PIN เพื่อใช้ปลดล็อก Bitwarden ทั้งนี้ หากคุณล็อกเอาต์ออกจากแอปโดยสมบูรณ์จะเป็นการลบการตั้งค่า PIN ของคุณด้วย" }, - "setYourPinCode1": { - "message": "Your PIN will be used to unlock Bitwarden instead of your master password. Your PIN will reset if you ever fully log out of Bitwarden." + "setPinCode": { + "message": "ตั้ง PIN เพื่อใช้ปลดล็อก Bitwarden และหากคุณล็อกเอาต์ออกจากแอปโดยสมบูรณ์จะเป็นการลบการตั้งค่า PIN ของคุณ" }, "pinRequired": { "message": "ต้องระบุ PIN" @@ -2169,7 +2178,7 @@ "message": "ปลดล็อกด้วยไบโอเมตริก" }, "unlockWithMasterPassword": { - "message": "Unlock with master password" + "message": "เข้าสู่ระบบด้วยรหัสผ่านหลัก" }, "awaitDesktop": { "message": "Awaiting confirmation from desktop" @@ -2181,7 +2190,7 @@ "message": "ล็อคด้วยรหัสผ่านหลักเมื่อรีสตาร์ทเบราว์เซอร์" }, "lockWithMasterPassOnRestart1": { - "message": "Require master password on browser restart" + "message": "กำหนดให้ป้อนรหัสผ่านหลักเมื่อรีสตาร์ทเบราว์เซอร์" }, "selectOneCollection": { "message": "คุณต้องเลือกอย่างน้อยหนึ่งคอลเลกชัน" @@ -2204,6 +2213,9 @@ "useThisPassword": { "message": "Use this password" }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, "useThisUsername": { "message": "Use this username" }, @@ -2481,6 +2493,12 @@ "personalOwnershipPolicyInEffectImports": { "message": "An organization policy has blocked importing items into your individual vault." }, + "restrictCardTypeImport": { + "message": "Cannot import card item types" + }, + "restrictCardTypeImportDesc": { + "message": "A policy set by 1 or more organizations prevents you from importing cards to your vaults." + }, "domainsTitle": { "message": "Domains", "description": "A category title describing the concept of web domains" @@ -2512,6 +2530,10 @@ "change": { "message": "Change" }, + "changePassword": { + "message": "Change password", + "description": "Change password button for browser at risk notification on login." + }, "changeButtonTitle": { "message": "Change password - $ITEMNAME$", "placeholders": { @@ -2521,6 +2543,9 @@ } } }, + "atRiskPassword": { + "message": "At-risk password" + }, "atRiskPasswords": { "message": "At-risk passwords" }, @@ -2555,6 +2580,26 @@ } } }, + "atRiskChangePrompt": { + "message": "Your password for this site is at-risk. $ORGANIZATION$ has requested that you change it.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + }, + "description": "Notification body when a login triggers an at-risk password change request and the change password domain is known." + }, + "atRiskNavigatePrompt": { + "message": "$ORGANIZATION$ wants you to change this password because it is at-risk. Navigate to your account settings to change the password.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + }, + "description": "Notification body when a login triggers an at-risk password change request and no change password domain is provided." + }, "reviewAndChangeAtRiskPassword": { "message": "Review and change one at-risk password" }, @@ -2674,6 +2719,10 @@ "message": "Send ทั้งหมด", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "maxAccessCountReached": { + "message": "Max access count reached", + "description": "This text will be displayed after a Send has been accessed the maximum amount of times." + }, "hideTextByDefault": { "message": "Hide text by default" }, @@ -2859,7 +2908,7 @@ "message": "Hide your email address from viewers." }, "passwordPrompt": { - "message": "Master password re-prompt" + "message": "การยืนยันให้ป้อนรหัสผ่านหลักอีกครั้ง" }, "passwordConfirmation": { "message": "Master password confirmation" @@ -2876,6 +2925,9 @@ "emailVerificationRequiredDesc": { "message": "You must verify your email to use this feature. You can verify your email in the web vault." }, + "masterPasswordSuccessfullySet": { + "message": "Master password successfully set" + }, "updatedMasterPassword": { "message": "Updated master password" }, @@ -3373,7 +3425,7 @@ "message": "Fingerprint phrase" }, "fingerprintMatchInfo": { - "message": "Please make sure your vault is unlocked and the Fingerprint phrase matches on the other device." + "message": "โปรดตรวจสอบให้แน่ใจว่าห้องนิรภัยของคุณปลดล็อกอยู่ และลายนิ้วมือตรงกันบนอุปกรณ์อื่น" }, "resendNotification": { "message": "Resend notification" @@ -3408,6 +3460,9 @@ "logInRequestSent": { "message": "Request sent" }, + "masterPasswordChanged": { + "message": "Master password saved" + }, "exposedMasterPassword": { "message": "Exposed Master Password" }, @@ -3522,6 +3577,12 @@ "requestAdminApproval": { "message": "Request admin approval" }, + "unableToCompleteLogin": { + "message": "Unable to complete login" + }, + "loginOnTrustedDeviceOrAskAdminToAssignPassword": { + "message": "You need to log in on a trusted device or ask your administrator to assign you a password." + }, "ssoIdentifierRequired": { "message": "Organization SSO identifier is required." }, @@ -3596,10 +3657,10 @@ "message": "Organization is not trusted" }, "emergencyAccessTrustWarning": { - "message": "For the security of your account, only confirm if you have granted emergency access to this user and their fingerprint matches what is displayed in their account" + "message": "เพื่อความปลอดภัยของบัญชีของคุณ โปรดยืนยันว่าคุณได้ให้สิทธิ์การเข้าถึงในกรณีฉุกเฉินแก่ผู้ใช้นี้ และลายนิ้วมือของผู้ใช้ตรงกับที่แสดงในบัญชีของพวกเขาเท่านั้น" }, "orgTrustWarning": { - "message": "For the security of your account, only proceed if you are a member of this organization, have account recovery enabled, and the fingerprint displayed below matches the organization's fingerprint." + "message": "เพื่อความปลอดภัยของบัญชีของคุณ ให้ดำเนินการต่อเมื่อคุณเป็นสมาชิกขององค์กรนี้, ได้เปิดใช้งานการกู้คืนบัญชี, และลายนิ้วมือที่แสดงด้านล่างตรงกับลายนิ้วมือขององค์กรเท่านั้น" }, "orgTrustWarning1": { "message": "This organization has an Enterprise policy that will enroll you in account recovery. Enrollment will allow organization administrators to change your password. Only proceed if you recognize this organization and the fingerprint phrase displayed below matches the organization's fingerprint." @@ -3607,14 +3668,6 @@ "trustUser": { "message": "Trust user" }, - "sendsNoItemsTitle": { - "message": "No active Sends", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendsNoItemsMessage": { - "message": "Use Send to securely share encrypted information with anyone.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "sendsTitleNoItems": { "message": "Send sensitive information safely", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -3885,7 +3938,7 @@ "message": "Verification required for this action. Set a PIN to continue." }, "setPin": { - "message": "Set PIN" + "message": "ตั้ง PIN" }, "verifyWithBiometrics": { "message": "Verify with biometrics" @@ -3982,10 +4035,10 @@ "message": "Select the import file" }, "chooseFile": { - "message": "Choose File" + "message": "เลือกไฟล์" }, "noFileChosen": { - "message": "No file chosen" + "message": "ไม่มีไฟล์ที่เลือก" }, "orCopyPasteFileContents": { "message": "or copy/paste the import file contents" @@ -4016,7 +4069,7 @@ "message": "Passkey" }, "accessing": { - "message": "Accessing" + "message": "กำลังเข้าถึง" }, "loggedInExclamation": { "message": "Logged in!" @@ -4170,7 +4223,7 @@ "message": "Available accounts" }, "accountLimitReached": { - "message": "Account limit reached. Log out of an account to add another." + "message": "ถึงขีดจำกัดของบัญชีแล้ว กรุณาออกจากระบบบัญชีอื่นเพื่อเพิ่มบัญชีใหม่" }, "active": { "message": "active" @@ -4209,6 +4262,26 @@ "message": "Common formats", "description": "Label indicating the most common import formats" }, + "uriMatchDefaultStrategyHint": { + "message": "URI match detection is how Bitwarden identifies autofill suggestions.", + "description": "Explains to the user that URI match detection determines how Bitwarden suggests autofill options, and clarifies that this default strategy applies when no specific match detection is set for a login item." + }, + "regExAdvancedOptionWarning": { + "message": "\"Regular expression\" is an advanced option with increased risk of exposing credentials.", + "description": "Content for dialog which warns a user when selecting 'regular expression' matching strategy as a cipher match strategy" + }, + "startsWithAdvancedOptionWarning": { + "message": "\"Starts with\" is an advanced option with increased risk of exposing credentials.", + "description": "Content for dialog which warns a user when selecting 'starts with' matching strategy as a cipher match strategy" + }, + "uriMatchWarningDialogLink": { + "message": "More about match detection", + "description": "Link to match detection docs on warning dialog for advance match strategy" + }, + "uriAdvancedOption": { + "message": "Advanced options", + "description": "Advanced option placeholder for uri option component" + }, "confirmContinueToBrowserSettingsTitle": { "message": "Continue to browser settings?", "description": "Title for dialog which asks if the user wants to proceed to a relevant browser settings page" @@ -4425,7 +4498,7 @@ "message": "Admin Console" }, "accountSecurity": { - "message": "Account security" + "message": "ความปลอดภัยของบัญชี" }, "notifications": { "message": "Notifications" @@ -4498,10 +4571,10 @@ "message": "Additional information" }, "itemHistory": { - "message": "Item history" + "message": "ประวัติการแก้ไขรายการ" }, "lastEdited": { - "message": "Last edited" + "message": "แก้ไขล่าสุดเมื่อ" }, "ownerYou": { "message": "Owner: You" @@ -4513,13 +4586,13 @@ "message": "Copy Successful" }, "upload": { - "message": "Upload" + "message": "อัปโหลด" }, "addAttachment": { - "message": "Add attachment" + "message": "เพิ่มไฟล์แนบ" }, "maxFileSizeSansPunctuation": { - "message": "Maximum file size is 500 MB" + "message": "ขนาดไฟล์สูงสุด คือ 500 MB" }, "deleteAttachmentName": { "message": "Delete attachment $NAME$", @@ -4622,7 +4695,7 @@ "message": "Authenticator key" }, "autofillOptions": { - "message": "Autofill options" + "message": "ตัวเลือกในการป้อนอัตโนมัติ" }, "websiteUri": { "message": "Website (URI)" @@ -4702,7 +4775,7 @@ "message": "Show animations" }, "addAccount": { - "message": "Add account" + "message": "เพิ่มบัญชี" }, "loading": { "message": "Loading" @@ -4744,7 +4817,7 @@ } }, "addField": { - "message": "Add field" + "message": "เพิ่มฟิลด์" }, "add": { "message": "Add" @@ -4756,7 +4829,7 @@ "message": "Field label" }, "textHelpText": { - "message": "Use text fields for data like security questions" + "message": "ใช้ช่องข้อความสำหรับเก็บข้อมูล เช่น คำถามเพื่อความปลอดภัย" }, "hiddenHelpText": { "message": "Use hidden fields for sensitive data like a password" @@ -4792,7 +4865,7 @@ } }, "fieldAdded": { - "message": "$LABEL$ added", + "message": "เพิ่ม $LABEL$ แล้ว", "placeholders": { "label": { "content": "$1", @@ -4923,7 +4996,7 @@ "message": "Text Sends" }, "accountActions": { - "message": "Account actions" + "message": "การจัดการบัญชี" }, "showNumberOfAutofillSuggestions": { "message": "Show number of login autofill suggestions on extension icon" @@ -5034,7 +5107,10 @@ "message": "You can customize your unlock and timeout settings to more quickly access your vault." }, "unlockPinSet": { - "message": "Unlock PIN set" + "message": "ตั้งค่า PIN สำหรับปลดล็อกแล้ว" + }, + "unlockWithBiometricSet": { + "message": "Unlock with biometrics set" }, "authenticating": { "message": "Authenticating" @@ -5271,7 +5347,7 @@ "message": "Quick and easy login" }, "quickLoginBody": { - "message": "Set up biometric unlock and autofill to log into your accounts without typing a single letter." + "message": "ตั้งค่าการปลดล็อกด้วยไบโอเมตริกซ์และการกรอกข้อมูลอัตโนมัติ เพื่อลงชื่อเข้าใช้บัญชีของคุณโดยไม่ต้องพิมพ์แม้แต่ตัวอักษรเดียว" }, "secureUser": { "message": "Level up your logins" @@ -5377,5 +5453,9 @@ }, "noPermissionsViewPage": { "message": "You do not have permissions to view this page. Try logging in with a different account." + }, + "wasmNotSupported": { + "message": "WebAssembly is not supported on your browser or is not enabled. WebAssembly is required to use the Bitwarden app.", + "description": "'WebAssembly' is a technical term and should not be translated." } } diff --git a/apps/browser/src/_locales/tr/messages.json b/apps/browser/src/_locales/tr/messages.json index 02d7d15b8a2..5dae8dfcdc4 100644 --- a/apps/browser/src/_locales/tr/messages.json +++ b/apps/browser/src/_locales/tr/messages.json @@ -84,7 +84,7 @@ "message": "Ana parola ipucu (isteğe bağlı)" }, "passwordStrengthScore": { - "message": "Password strength score $SCORE$", + "message": "Parola Güvenlik Puanı $SCORE$", "placeholders": { "score": { "content": "$1", @@ -350,19 +350,19 @@ "message": "Bitwarden Secrets Manager" }, "continueToSecretsManagerPageDesc": { - "message": "Securely store, manage, and share developer secrets with Bitwarden Secrets Manager. Learn more on the bitwarden.com website." + "message": "Geliştirici gizli anahtarlarınızı Bitwarden Secrets Manager ile güvenli bir şekilde saklayın, yönetin ve paylaşın. Daha fazla bilgi için bitwarden.com web sitesini ziyaret edin." }, "passwordlessDotDev": { "message": "Passwordless.dev" }, "continueToPasswordlessDotDevPageDesc": { - "message": "Create smooth and secure login experiences free from traditional passwords with Passwordless.dev. Learn more on the bitwarden.com website." + "message": "Passwordless.dev ile geleneksel parolalara ihtiyaç duymadan sorunsuz ve güvenli oturum açma deneyimleri oluşturun. Daha fazla bilgi için bitwarden.com web sitesini ziyaret edin." }, "freeBitwardenFamilies": { "message": "Ücretsiz Bitwarden Aile" }, "freeBitwardenFamiliesPageDesc": { - "message": "You are eligible for Free Bitwarden Families. Redeem this offer today in the web app." + "message": "Ücretsiz Bitwarden Aile Paketi’nden faydalanmaya hak kazandınız. Bu teklifi bugün web uygulaması üzerinden kullanın." }, "version": { "message": "Sürüm" @@ -398,7 +398,7 @@ "message": "Klasör adı" }, "folderHintText": { - "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums" + "message": "Bir klasörü iç içe yerleştirmek için, üst klasörün adını yazdıktan sonra “/” ekleyin. Örnek: Sosyal/Forumlar" }, "noFoldersAdded": { "message": "Hiç klasör eklenmedi" @@ -468,7 +468,7 @@ "message": "Parola üretildi" }, "passphraseGenerated": { - "message": "Passphrase generated" + "message": "Parola ifadesi oluşturuldu" }, "usernameGenerated": { "message": "Kullanıcı adı üretildi" @@ -842,13 +842,13 @@ "message": "Mevcut web sayfasındaki kimlik doğrulayıcı QR kodunu tarayın" }, "totpHelperTitle": { - "message": "Make 2-step verification seamless" + "message": "2 adımlı doğrulamayı sorunsuz hale getirin" }, "totpHelper": { - "message": "Bitwarden can store and fill 2-step verification codes. Copy and paste the key into this field." + "message": "Bitwarden, 2 adımlı doğrulama kodlarını saklayabilir ve otomatik olarak doldurabilir. Anahtarı kopyalayıp bu alana yapıştırın." }, "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, iki adımlı doğrulama kodlarını saklayabilir ve otomatik olarak doldurabilir. Bu web sitesinin doğrulayıcı QR kodunun ekran görüntüsünü almak için kamera simgesini seçin veya anahtarı bu alana kopyalayıp yapıştırın." }, "learnMoreAboutAuthenticators": { "message": "Kimlik doğrulayıcılar hakkında bilgi alın" @@ -878,10 +878,10 @@ "message": "Kimlik doğrulama uygulamanızdaki kodu girin" }, "pressYourYubiKeyToAuthenticate": { - "message": "Press your YubiKey to authenticate" + "message": "Kimlik doğrulamak için YubiKey’inize dokunun" }, "duoTwoFactorRequiredPageSubtitle": { - "message": "Duo two-step login is required for your account. Follow the steps below to finish logging in." + "message": "Hesabınız için Duo iki adımlı giriş gereklidir. Giriş işlemini tamamlamak için aşağıdaki adımları izleyin." }, "followTheStepsBelowToFinishLoggingIn": { "message": "Girişi tamamlamak için aşağıdaki adımları izleyin." @@ -1141,7 +1141,7 @@ "description": "Message displayed when login details are successfully updated." }, "loginUpdateTaskSuccess": { - "message": "Great job! You took the steps to make you and $ORGANIZATION$ more secure.", + "message": "Harika iş çıkardınız! Kendinizi ve $ORGANIZATION$’ı daha güvenli hale getirmek için gereken adımları attınız.", "placeholders": { "organization": { "content": "$1" @@ -1150,7 +1150,7 @@ "description": "Shown to user after login is updated." }, "loginUpdateTaskSuccessAdditional": { - "message": "Thank you for making $ORGANIZATION$ more secure. You have $TASK_COUNT$ more passwords to update.", + "message": "$ORGANIZATION$’ı daha güvenli hale getirdiğiniz için teşekkürler. Güncellemeniz gereken $TASK_COUNT$ adet parola daha var.", "placeholders": { "organization": { "content": "$1" @@ -1162,7 +1162,7 @@ "description": "Shown to user after login is updated." }, "nextSecurityTaskAction": { - "message": "Change next password", + "message": "Sonraki parolayı değiştir", "description": "Message prompting user to undertake completion of another security task." }, "saveFailure": { @@ -1173,6 +1173,12 @@ "message": "Bu hesabı kaydedemedik. Bilgileri elle girmeyi deneyin.", "description": "Detailed error message shown when saving login details fails." }, + "changePasswordWarning": { + "message": "Parolanızı değiştirdikten sonra yeni parolanızyla tekrar giriş yapmanız gerekecektir. Diğer cihazlarınızdaki aktif oturumlar bir saat içinde kapatılacaktır." + }, + "accountRecoveryUpdateMasterPasswordSubtitle": { + "message": "Hesap kurtarmayı tamamlamak için ana parolanızı değiştirin." + }, "enableChangedPasswordNotification": { "message": "Mevcut hesapları güncellemeyi öner" }, @@ -1365,8 +1371,8 @@ "featureUnavailable": { "message": "Özellik kullanılamıyor" }, - "encryptionKeyMigrationRequired": { - "message": "Şifreleme anahtarınızın güncellenmesi gerekiyor. Şifreleme anahtarınızı güncellemek için lütfen web kasasına giriş yapın." + "legacyEncryptionUnsupported": { + "message": "Eski şifreleme artık desteklenmemektedir. Hesabınızı kurtarmak için lütfen destek ekibiyle iletişime geçin." }, "premiumMembership": { "message": "Premium üyelik" @@ -1496,7 +1502,7 @@ "message": "Güvenlik anahtarını oku" }, "awaitingSecurityKeyInteraction": { - "message": "Awaiting security key interaction..." + "message": "Güvenlik anahtarı etkileşimi bekleniyor…" }, "loginUnavailable": { "message": "Giriş yapılamıyor" @@ -1556,13 +1562,13 @@ "message": "Şirket içinde barındırılan ortam" }, "selfHostedBaseUrlHint": { - "message": "Specify the base URL of your on-premises hosted Bitwarden installation. Example: https://bitwarden.company.com" + "message": "Yerel sunucunuzda barındırılan Bitwarden kurulumunuzun temel URL’sini belirtin. Örnek: https://bitwarden.sirketiniz.com" }, "selfHostedCustomEnvHeader": { "message": "İleri düzey yapılandırma için her hizmetin taban URL'sini bağımsız olarak belirleyebilirsiniz." }, "selfHostedEnvFormInvalid": { - "message": "You must add either the base Server URL or at least one custom environment." + "message": "Temel Sunucu URL’sini veya en az bir özel ortam eklemelisiniz." }, "customEnvironment": { "message": "Özel ortam" @@ -1922,6 +1928,9 @@ "typeSshKey": { "message": "SSH anahtarı" }, + "typeNote": { + "message": "Not" + }, "newItemHeader": { "message": "Yeni $TYPE$", "placeholders": { @@ -2153,8 +2162,8 @@ "setYourPinCode": { "message": "Bitwarden'ı açarken kullanacağınız PIN kodunu belirleyin. Uygulamadan tamamen çıkış yaparsanız PIN ayarlarınız sıfırlanacaktır." }, - "setYourPinCode1": { - "message": "Bitwarden'ın kilidini açmak için ana parolanız yerine PIN'iniz kullanılacaktır. Bitwarden'dan tamamen çıkış yaparsanız PIN'iniz sıfırlanır." + "setPinCode": { + "message": "Bitwarden'ın kilidini açmak için bu PIN'i kullanabilirsiniz. Uygulamadan tamamen çıkış yaparsanız PIN'iniz sıfırlanacaktır." }, "pinRequired": { "message": "PIN kodu gerekli." @@ -2204,6 +2213,9 @@ "useThisPassword": { "message": "Bu parolayı kullan" }, + "useThisPassphrase": { + "message": "Bu parola ifadesini kullanın" + }, "useThisUsername": { "message": "Bu kullanıcı adını kullan" }, @@ -2374,7 +2386,7 @@ "message": "Gizlilik Politikası" }, "yourNewPasswordCannotBeTheSameAsYourCurrentPassword": { - "message": "Your new password cannot be the same as your current password." + "message": "Yeni parolanız mevcut parolanızla aynı olamaz." }, "hintEqualsPassword": { "message": "Parola ipucunuz parolanızla aynı olamaz." @@ -2481,6 +2493,12 @@ "personalOwnershipPolicyInEffectImports": { "message": "Bir kuruluş ilkesi, kayıtları kişisel kasanıza içe aktarmayı engelledi." }, + "restrictCardTypeImport": { + "message": "Cannot import card item types" + }, + "restrictCardTypeImportDesc": { + "message": "A policy set by 1 or more organizations prevents you from importing cards to your vaults." + }, "domainsTitle": { "message": "Alan adları", "description": "A category title describing the concept of web domains" @@ -2512,6 +2530,10 @@ "change": { "message": "Değiştir" }, + "changePassword": { + "message": "Parolayı değiştir", + "description": "Change password button for browser at risk notification on login." + }, "changeButtonTitle": { "message": "Parolayı değiştir - $ITEMNAME$", "placeholders": { @@ -2521,11 +2543,14 @@ } } }, + "atRiskPassword": { + "message": "Riskli parolalar" + }, "atRiskPasswords": { "message": "Riskli parolalar" }, "atRiskPasswordDescSingleOrg": { - "message": "$ORGANIZATION$ is requesting you change one password because it is at-risk.", + "message": "$ORGANIZATION$, risk altında olduğu için bir parolanızı değiştirmenizi istiyor.", "placeholders": { "organization": { "content": "$1", @@ -2534,7 +2559,7 @@ } }, "atRiskPasswordsDescSingleOrgPlural": { - "message": "$ORGANIZATION$ is requesting you change the $COUNT$ passwords because they are at-risk.", + "message": "$ORGANIZATION$, risk altında oldukları için $COUNT$ adet parolanızı değiştirmenizi istiyor.", "placeholders": { "organization": { "content": "$1", @@ -2547,7 +2572,7 @@ } }, "atRiskPasswordsDescMultiOrgPlural": { - "message": "Your organizations are requesting you change the $COUNT$ passwords because they are at-risk.", + "message": "Organizasyonlarınız, risk altında oldukları için $COUNT$ adet parolanızı değiştirmenizi istiyor.", "placeholders": { "count": { "content": "$1", @@ -2555,11 +2580,31 @@ } } }, + "atRiskChangePrompt": { + "message": "Your password for this site is at-risk. $ORGANIZATION$ has requested that you change it.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + }, + "description": "Notification body when a login triggers an at-risk password change request and the change password domain is known." + }, + "atRiskNavigatePrompt": { + "message": "$ORGANIZATION$ wants you to change this password because it is at-risk. Navigate to your account settings to change the password.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + }, + "description": "Notification body when a login triggers an at-risk password change request and no change password domain is provided." + }, "reviewAndChangeAtRiskPassword": { - "message": "Review and change one at-risk password" + "message": "Risk altında olan bir parolayı inceleyin ve değiştirin" }, "reviewAndChangeAtRiskPasswordsPlural": { - "message": "Review and change $COUNT$ at-risk passwords", + "message": "Risk altında olan $COUNT$ adet parolayı inceleyin ve değiştirin", "placeholders": { "count": { "content": "$1", @@ -2568,40 +2613,40 @@ } }, "changeAtRiskPasswordsFaster": { - "message": "Change at-risk passwords faster" + "message": "Risk altındaki parolaları daha hızlı değiştirin" }, "changeAtRiskPasswordsFasterDesc": { - "message": "Update your settings so you can quickly autofill your passwords and generate new ones" + "message": "Ayarlarınızı güncelleyin, böylece parolalarınızı hızlıca otomatik doldurabilir ve yeni parolalar oluşturabilirsiniz" }, "reviewAtRiskLogins": { - "message": "Review at-risk logins" + "message": "Risk altındaki girişleri inceleyin" }, "reviewAtRiskPasswords": { - "message": "Review at-risk passwords" + "message": "Risk altındaki parolaları inceleyin" }, "reviewAtRiskLoginsSlideDesc": { - "message": "Your organization passwords are at-risk because they are weak, reused, and/or exposed.", + "message": "Organizasyonunuzun parolaları zayıf, tekrar kullanılmış ve/veya açığa çıkmış olduğu için risk altındadır.", "description": "Description of the review at-risk login slide on the at-risk password page carousel" }, "reviewAtRiskLoginSlideImgAltPeriod": { - "message": "Illustration of a list of logins that are at-risk." + "message": "Risk altında olan girişlerin bir listesinin görseli." }, "generatePasswordSlideDesc": { - "message": "Quickly generate a strong, unique password with the Bitwarden autofill menu on the at-risk site.", + "message": "Risk altındaki sitede Bitwarden otomatik doldurma menüsü ile hızlıca güçlü ve benzersiz bir parola oluşturun.", "description": "Description of the generate password slide on the at-risk password page carousel" }, "generatePasswordSlideImgAltPeriod": { - "message": "Illustration of the Bitwarden autofill menu displaying a generated password." + "message": "Oluşturulan parolayı gösteren Bitwarden otomatik doldurma menüsünün görseli." }, "updateInBitwarden": { - "message": "Update in Bitwarden" + "message": "Bitwarden’da güncelleyin" }, "updateInBitwardenSlideDesc": { - "message": "Bitwarden will then prompt you to update the password in the password manager.", + "message": "Bitwarden, ardından parola yöneticisinde parolayı güncellemeniz için sizi yönlendirecektir.", "description": "Description of the update in Bitwarden slide on the at-risk password page carousel" }, "updateInBitwardenSlideImgAltPeriod": { - "message": "Illustration of a Bitwarden’s notification prompting the user to update the login." + "message": "Kullanıcıya giriş bilgilerini güncellemesi için bildirim gönderen Bitwarden’in görseli." }, "turnOnAutofill": { "message": "Otomatik doldurmayı etkinleştir" @@ -2674,6 +2719,10 @@ "message": "Tüm Send'ler", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "maxAccessCountReached": { + "message": "Maksimum erişim sayısına ulaşıldı", + "description": "This text will be displayed after a Send has been accessed the maximum amount of times." + }, "hideTextByDefault": { "message": "Metni varsayılan olarak gizle" }, @@ -2876,6 +2925,9 @@ "emailVerificationRequiredDesc": { "message": "Bu özelliği kullanmak için e-postanızı doğrulamanız gerekir. E-postanızı web kasasında doğrulayabilirsiniz." }, + "masterPasswordSuccessfullySet": { + "message": "Ana parola başarıyla ayarlandı" + }, "updatedMasterPassword": { "message": "Ana parola güncellendi" }, @@ -2889,7 +2941,7 @@ "message": "Ana parolanız kuruluş ilkelerinizi karşılamıyor. Kasanıza erişmek için ana parolanızı güncellemelisiniz. Devam ettiğinizde oturumunuz kapanacak ve yeniden oturum açmanız gerekecektir. Diğer cihazlardaki aktif oturumlar bir saate kadar aktif kalabilir." }, "tdeDisabledMasterPasswordRequired": { - "message": "Your organization has disabled trusted device encryption. Please set a master password to access your vault." + "message": "Organizasyonunuz, güvenilir cihaz şifrelemesini devre dışı bıraktı. Kasanıza erişmek için lütfen bir ana parola belirleyin." }, "resetPasswordPolicyAutoEnroll": { "message": "Otomatik eklenme" @@ -3015,7 +3067,7 @@ "message": "Benzersiz tanımlayıcı bulunamadı." }, "removeMasterPasswordForOrganizationUserKeyConnector": { - "message": "A master password is no longer required for members of the following organization. Please confirm the domain below with your organization administrator." + "message": "Aşağıdaki organizasyonun üyeleri için artık ana parola gerekmemektedir. Lütfen alan adını organizasyon yöneticinizle doğrulayın." }, "organizationName": { "message": "Kuruluş adı" @@ -3084,14 +3136,14 @@ "message": "Şifre çözme sorunu" }, "couldNotDecryptVaultItemsBelow": { - "message": "Bitwarden could not decrypt the vault item(s) listed below." + "message": "Bitwarden, aşağıda listelenen kasa öğelerinin şifresini çözemedi." }, "contactCSToAvoidDataLossPart1": { - "message": "Contact customer success", + "message": "Müşteri ekibi ile başarıyla iletişime geçtin", "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": "Ek veri kaybını önlemek için.", "description": "This is part of a larger sentence. The full sentence will read 'Contact customer success to avoid additional data loss.'" }, "generateUsername": { @@ -3115,7 +3167,7 @@ } }, "passwordLengthRecommendationHint": { - "message": " Use $RECOMMENDED$ characters or more to generate a strong password.", + "message": "Güçlü bir parola oluşturmak için $RECOMMENDED$ veya daha fazla karakter kullanın.", "description": "Appended to `spinboxBoundariesHint` to recommend a length to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", "placeholders": { "recommended": { @@ -3125,7 +3177,7 @@ } }, "passphraseNumWordsRecommendationHint": { - "message": " Use $RECOMMENDED$ words or more to generate a strong passphrase.", + "message": "Güçlü bir parola ifadesi oluşturmak için $RECOMMENDED$ veya daha fazla kelime kullanın.", "description": "Appended to `spinboxBoundariesHint` to recommend a number of words to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", "placeholders": { "recommended": { @@ -3202,7 +3254,7 @@ } }, "forwaderInvalidToken": { - "message": "Invalid $SERVICENAME$ API token", + "message": "Geçersiz $SERVICENAME$ API anahtarı", "description": "Displayed when the user's API token is empty or rejected by the forwarding service.", "placeholders": { "servicename": { @@ -3212,7 +3264,7 @@ } }, "forwaderInvalidTokenWithMessage": { - "message": "Invalid $SERVICENAME$ API token: $ERRORMESSAGE$", + "message": "Geçersiz $SERVICENAME$ API anahtarı: $ERRORMESSAGE$", "description": "Displayed when the user's API token is rejected by the forwarding service with an error message.", "placeholders": { "servicename": { @@ -3226,7 +3278,7 @@ } }, "forwaderInvalidOperation": { - "message": "$SERVICENAME$ refused your request. Please contact your service provider for assistance.", + "message": "$SERVICENAME$, isteğinizi reddetti. Yardım için lütfen hizmet sağlayıcınızla iletişime geçin.", "description": "Displayed when the user is forbidden from using the API by the forwarding service.", "placeholders": { "servicename": { @@ -3236,7 +3288,7 @@ } }, "forwaderInvalidOperationWithMessage": { - "message": "$SERVICENAME$ refused your request: $ERRORMESSAGE$", + "message": "$SERVICENAME$, isteğinizi reddetti: $ERRORMESSAGE$", "description": "Displayed when the user is forbidden from using the API by the forwarding service with an error message.", "placeholders": { "servicename": { @@ -3250,7 +3302,7 @@ } }, "forwarderNoAccountId": { - "message": "Unable to obtain $SERVICENAME$ masked email account ID.", + "message": "$SERVICENAME$ maskeli e-posta hesap kimliği alınamıyor.", "description": "Displayed when the forwarding service fails to return an account ID.", "placeholders": { "servicename": { @@ -3408,6 +3460,9 @@ "logInRequestSent": { "message": "İstek gönderildi" }, + "masterPasswordChanged": { + "message": "Ana parola kaydedildi" + }, "exposedMasterPassword": { "message": "Açığa Çıkmış Ana Parola" }, @@ -3522,6 +3577,12 @@ "requestAdminApproval": { "message": "Yönetici onayı iste" }, + "unableToCompleteLogin": { + "message": "Oturum açma tamamlanamadı" + }, + "loginOnTrustedDeviceOrAskAdminToAssignPassword": { + "message": "Güvenilen bir cihazdan oturum açmalı veya yöneticinizden size parola atamasını istemelisiniz." + }, "ssoIdentifierRequired": { "message": "Kuruluş SSO tanımlayıcısı gereklidir." }, @@ -3584,10 +3645,10 @@ "message": "Cihaza güvenildi" }, "trustOrganization": { - "message": "Trust organization" + "message": "Organizasyona güven" }, "trust": { - "message": "Trust" + "message": "Güven" }, "doNotTrust": { "message": "Güvenme" @@ -3596,24 +3657,16 @@ "message": "Kuruluş güvenilir değil" }, "emergencyAccessTrustWarning": { - "message": "For the security of your account, only confirm if you have granted emergency access to this user and their fingerprint matches what is displayed in their account" + "message": "Hesabınızın güvenliği için, yalnızca bu kullanıcıya acil erişim yetkisi verdiyseniz ve parmak izi hesaplarındakiyle uyuşuyorsa onaylayın." }, "orgTrustWarning": { - "message": "For the security of your account, only proceed if you are a member of this organization, have account recovery enabled, and the fingerprint displayed below matches the organization's fingerprint." + "message": "Hesabınızın güvenliği için, yalnızca bu kuruluşun bir üyesiyseniz, hesap kurtarma etkinse ve aşağıda görüntülenen parmak izi kuruluşun parmak iziyle eşleşiyorsa devam edin." }, "orgTrustWarning1": { - "message": "This organization has an Enterprise policy that will enroll you in account recovery. Enrollment will allow organization administrators to change your password. Only proceed if you recognize this organization and the fingerprint phrase displayed below matches the organization's fingerprint." + "message": "Bu kuruluşun, sizi hesap kurtarma sistemine kaydedecek bir kurumsal politikası vardır. Bu kaydolma işlemi, kuruluş yöneticilerinin parolanızı değiştirmesine izin verir. Yalnızca bu kuruluşu tanıyorsanız ve aşağıda görüntülenen parmak izi ifadesi kuruluşun parmak iziyle eşleşiyorsa devam edin." }, "trustUser": { - "message": "Trust user" - }, - "sendsNoItemsTitle": { - "message": "Aktif Send yok", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendsNoItemsMessage": { - "message": "Şifrelenmiş bilgileri güvenle paylaşmak için Send'i kullanabilirsiniz.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + "message": "Kullanıcıya güven" }, "sendsTitleNoItems": { "message": "Hassas bilgileri güvenle paylaşın", @@ -4209,6 +4262,26 @@ "message": "Sık kullanılan biçimler", "description": "Label indicating the most common import formats" }, + "uriMatchDefaultStrategyHint": { + "message": "URI match detection is how Bitwarden identifies autofill suggestions.", + "description": "Explains to the user that URI match detection determines how Bitwarden suggests autofill options, and clarifies that this default strategy applies when no specific match detection is set for a login item." + }, + "regExAdvancedOptionWarning": { + "message": "\"Regular expression\" is an advanced option with increased risk of exposing credentials.", + "description": "Content for dialog which warns a user when selecting 'regular expression' matching strategy as a cipher match strategy" + }, + "startsWithAdvancedOptionWarning": { + "message": "\"Starts with\" is an advanced option with increased risk of exposing credentials.", + "description": "Content for dialog which warns a user when selecting 'starts with' matching strategy as a cipher match strategy" + }, + "uriMatchWarningDialogLink": { + "message": "More about match detection", + "description": "Link to match detection docs on warning dialog for advance match strategy" + }, + "uriAdvancedOption": { + "message": "Gelişmiş seçenekler", + "description": "Advanced option placeholder for uri option component" + }, "confirmContinueToBrowserSettingsTitle": { "message": "Tarayıcı ayarlarına gidilsin mi?", "description": "Title for dialog which asks if the user wants to proceed to a relevant browser settings page" @@ -5036,6 +5109,9 @@ "unlockPinSet": { "message": "Unlock PIN set" }, + "unlockWithBiometricSet": { + "message": "Unlock with biometrics set" + }, "authenticating": { "message": "Kimlik doğrulanıyor" }, @@ -5377,5 +5453,9 @@ }, "noPermissionsViewPage": { "message": "Bu sayfayı görüntüleme izniniz yok. Farklı bir hesapla giriş yapmayı deneyin." + }, + "wasmNotSupported": { + "message": "Tarayıcınızda WebAssembly desteklenmiyor veya etkinleştirilmemişt. Bitwarden uygulamasını kullanmak için WebAssembly gereklidir.", + "description": "'WebAssembly' is a technical term and should not be translated." } } diff --git a/apps/browser/src/_locales/uk/messages.json b/apps/browser/src/_locales/uk/messages.json index 9406aabe088..3d25e982642 100644 --- a/apps/browser/src/_locales/uk/messages.json +++ b/apps/browser/src/_locales/uk/messages.json @@ -1072,7 +1072,7 @@ "description": "Aria label for the view button in notification bar confirmation message" }, "notificationNewItemAria": { - "message": "New Item, opens in new window", + "message": "Новий запис, відкривається у новому вікні", "description": "Aria label for the new item button in notification bar confirmation message when error is prompted" }, "notificationEditTooltip": { @@ -1093,15 +1093,15 @@ } }, "notificationLoginSaveConfirmation": { - "message": "saved to Bitwarden.", + "message": "збережено до Bitwarden.", "description": "Shown to user after item is saved." }, "notificationLoginUpdatedConfirmation": { - "message": "updated in Bitwarden.", + "message": "оновлено в Bitwarden.", "description": "Shown to user after item is updated." }, "selectItemAriaLabel": { - "message": "Select $ITEMTYPE$, $ITEMNAME$", + "message": "Вибрати $ITEMTYPE$, $ITEMNAME$", "description": "Used by screen readers. $1 is the item type (like vault or folder), $2 is the selected item name.", "placeholders": { "itemType": { @@ -1121,7 +1121,7 @@ "description": "Button text for updating an existing login entry." }, "unlockToSave": { - "message": "Unlock to save this login", + "message": "Розблокуйте, щоб зберегти цей запис", "description": "User prompt to take action in order to save the login they just entered." }, "saveLogin": { @@ -1173,6 +1173,12 @@ "message": "На жаль, не вдається зберегти. Введіть дані вручну.", "description": "Detailed error message shown when saving login details fails." }, + "changePasswordWarning": { + "message": "Після зміни пароля потрібно буде ввійти в систему з новим паролем. Активні сеанси на інших пристроях буде завершено протягом години." + }, + "accountRecoveryUpdateMasterPasswordSubtitle": { + "message": "Змініть свій головний пароль, щоб завершити відновлення облікового запису." + }, "enableChangedPasswordNotification": { "message": "Запитувати про оновлення запису" }, @@ -1360,13 +1366,13 @@ "message": "Оберіть файл" }, "maxFileSize": { - "message": "Максимальний розмір файлу 500 Мб." + "message": "Максимальний розмір файлу 500 МБ." }, "featureUnavailable": { "message": "Функція недоступна" }, - "encryptionKeyMigrationRequired": { - "message": "Потрібно перенести ключ шифрування. Увійдіть у вебсховище та оновіть свій ключ шифрування." + "legacyEncryptionUnsupported": { + "message": "Застаріле шифрування більше не підтримується. Зверніться до служби підтримки, щоб відновити обліковий запис." }, "premiumMembership": { "message": "Преміум статус" @@ -1922,6 +1928,9 @@ "typeSshKey": { "message": "Ключ SSH" }, + "typeNote": { + "message": "Нотатка" + }, "newItemHeader": { "message": "Новий $TYPE$", "placeholders": { @@ -2042,7 +2051,7 @@ "message": "Починається з" }, "regEx": { - "message": "Звичайний вираз", + "message": "Регулярний вираз", "description": "A programming term, also known as 'RegEx'." }, "matchDetection": { @@ -2153,8 +2162,8 @@ "setYourPinCode": { "message": "Встановіть PIN-код для розблокування Bitwarden. Налаштування PIN-коду будуть скинуті, якщо ви коли-небудь повністю вийдете з програми." }, - "setYourPinCode1": { - "message": "PIN-код буде використовуватися для розблокування Bitwarden замість головного пароля. У разі повного виходу з Bitwarden, ваш PIN-код буде скинуто." + "setPinCode": { + "message": "Ви можете використовувати цей PIN-код для розблокування Bitwarden. PIN-код буде скинуто, якщо ви вийдете з програми." }, "pinRequired": { "message": "Необхідний PIN-код." @@ -2204,6 +2213,9 @@ "useThisPassword": { "message": "Використати цей пароль" }, + "useThisPassphrase": { + "message": "Використати цю парольну фразу" + }, "useThisUsername": { "message": "Використати це ім'я користувача" }, @@ -2481,6 +2493,12 @@ "personalOwnershipPolicyInEffectImports": { "message": "Політика організації заблокувала імпортування записів до вашого особистого сховища." }, + "restrictCardTypeImport": { + "message": "Не вдається імпортувати записи карток" + }, + "restrictCardTypeImportDesc": { + "message": "Політика принаймні однієї організації не дозволяє вам імпортувати записи карток до сховища." + }, "domainsTitle": { "message": "Домени", "description": "A category title describing the concept of web domains" @@ -2512,6 +2530,10 @@ "change": { "message": "Змінити" }, + "changePassword": { + "message": "Змінити пароль", + "description": "Change password button for browser at risk notification on login." + }, "changeButtonTitle": { "message": "Змінити пароль – $ITEMNAME$", "placeholders": { @@ -2521,6 +2543,9 @@ } } }, + "atRiskPassword": { + "message": "Ризикований пароль" + }, "atRiskPasswords": { "message": "Ризиковані паролі" }, @@ -2555,6 +2580,26 @@ } } }, + "atRiskChangePrompt": { + "message": "Пароль для цього сайту ризикований. Організація $ORGANIZATION$ попросила вас змінити його.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + }, + "description": "Notification body when a login triggers an at-risk password change request and the change password domain is known." + }, + "atRiskNavigatePrompt": { + "message": "$ORGANIZATION$ хоче, щоб ви змінили цей пароль, тому що він ризикований. Перейдіть до налаштувань облікового запису, щоб змінити пароль.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + }, + "description": "Notification body when a login triggers an at-risk password change request and no change password domain is provided." + }, "reviewAndChangeAtRiskPassword": { "message": "Перегляньте і змініть один ризикований пароль" }, @@ -2674,6 +2719,10 @@ "message": "Усі відправлення", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "maxAccessCountReached": { + "message": "Досягнуто максимальної кількості доступів", + "description": "This text will be displayed after a Send has been accessed the maximum amount of times." + }, "hideTextByDefault": { "message": "Типово приховувати текст" }, @@ -2876,6 +2925,9 @@ "emailVerificationRequiredDesc": { "message": "Для використання цієї функції необхідно підтвердити електронну пошту. Ви можете виконати підтвердження у вебсховищі." }, + "masterPasswordSuccessfullySet": { + "message": "Головний пароль успішно встановлено" + }, "updatedMasterPassword": { "message": "Головний пароль оновлено" }, @@ -3015,13 +3067,13 @@ "message": "Не знайдено унікальний ідентифікатор." }, "removeMasterPasswordForOrganizationUserKeyConnector": { - "message": "A master password is no longer required for members of the following organization. Please confirm the domain below with your organization administrator." + "message": "Головний пароль більше не є обов'язковим для учасників зазначеної організації. Підтвердьте вказаний нижче домен з адміністратором вашої організації." }, "organizationName": { - "message": "Organization name" + "message": "Назва організації" }, "keyConnectorDomain": { - "message": "Key Connector domain" + "message": "Домен Key Connector" }, "leaveOrganization": { "message": "Покинути організацію" @@ -3408,6 +3460,9 @@ "logInRequestSent": { "message": "Запит надіслано" }, + "masterPasswordChanged": { + "message": "Головний пароль збережено" + }, "exposedMasterPassword": { "message": "Головний пароль викрито" }, @@ -3522,6 +3577,12 @@ "requestAdminApproval": { "message": "Запит підтвердження адміністратора" }, + "unableToCompleteLogin": { + "message": "Не вдалося завершити вхід" + }, + "loginOnTrustedDeviceOrAskAdminToAssignPassword": { + "message": "Ви повинні ввійти до системи на довіреному пристрої або попросити адміністратора призначити вам пароль." + }, "ssoIdentifierRequired": { "message": "Потрібен SSO-ідентифікатор організації." }, @@ -3607,20 +3668,12 @@ "trustUser": { "message": "Довіряти користувачу" }, - "sendsNoItemsTitle": { - "message": "Немає активних відправлень", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendsNoItemsMessage": { - "message": "Використовуйте відправлення, щоб безпечно надавати доступ іншим до зашифрованої інформації.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "sendsTitleNoItems": { - "message": "Send sensitive information safely", + "message": "Безпечно надсилайте конфіденційну інформацію", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "sendsBodyNoItems": { - "message": "Share files and data securely with anyone, on any platform. Your information will remain end-to-end encrypted while limiting exposure.", + "message": "Безпечно діліться файлами й даними з ким завгодно, на будь-якій платформі. Ваша інформація наскрізно зашифрована та має обмежений доступ.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "inputRequired": { @@ -4209,6 +4262,26 @@ "message": "Поширені формати", "description": "Label indicating the most common import formats" }, + "uriMatchDefaultStrategyHint": { + "message": "Виявлення збігів URI – це спосіб ідентифікації пропозицій автозаповнення Bitwarden.", + "description": "Explains to the user that URI match detection determines how Bitwarden suggests autofill options, and clarifies that this default strategy applies when no specific match detection is set for a login item." + }, + "regExAdvancedOptionWarning": { + "message": "Регулярний вираз – це функція, що має підвищений ризик розкриття облікових даних, призначена для досвідчених користувачів.", + "description": "Content for dialog which warns a user when selecting 'regular expression' matching strategy as a cipher match strategy" + }, + "startsWithAdvancedOptionWarning": { + "message": "\"Починається з\" – це функція, що має підвищений ризик розкриття облікових даних, призначена для досвідчених користувачів.", + "description": "Content for dialog which warns a user when selecting 'starts with' matching strategy as a cipher match strategy" + }, + "uriMatchWarningDialogLink": { + "message": "Докладніше про виявлення збігів", + "description": "Link to match detection docs on warning dialog for advance match strategy" + }, + "uriAdvancedOption": { + "message": "Додаткові налаштування", + "description": "Advanced option placeholder for uri option component" + }, "confirmContinueToBrowserSettingsTitle": { "message": "Відкрити налаштування браузера?", "description": "Title for dialog which asks if the user wants to proceed to a relevant browser settings page" @@ -5028,13 +5101,16 @@ "message": "Біометричне розблокування зараз недоступне з невідомої причини." }, "unlockVault": { - "message": "Unlock your vault in seconds" + "message": "Розблоковуйте сховище за секунди" }, "unlockVaultDesc": { - "message": "You can customize your unlock and timeout settings to more quickly access your vault." + "message": "Ви можете налаштувати розблокування і час очікування для швидшого доступу до сховища." }, "unlockPinSet": { - "message": "Unlock PIN set" + "message": "Розблокування PIN-кодом встановлено" + }, + "unlockWithBiometricSet": { + "message": "Біометричне розблокування налаштовано" }, "authenticating": { "message": "Аутентифікація" @@ -5286,7 +5362,7 @@ "message": "Зберігайте скільки завгодно паролів на необмеженій кількості пристроїв, використовуючи Bitwarden для мобільних пристроїв, браузерів та комп'ютерів." }, "nudgeBadgeAria": { - "message": "1 notification" + "message": "1 сповіщення" }, "emptyVaultNudgeTitle": { "message": "Імпортуйте наявні паролі" @@ -5301,13 +5377,13 @@ "message": "Вітаємо у вашому сховищі!" }, "hasItemsVaultNudgeBodyOne": { - "message": "Autofill items for the current page" + "message": "Автозаповнення записів для поточної сторінки" }, "hasItemsVaultNudgeBodyTwo": { - "message": "Favorite items for easy access" + "message": "Обрані записи для швидкого доступу" }, "hasItemsVaultNudgeBodyThree": { - "message": "Search your vault for something else" + "message": "Пошук інших елементів у сховищі" }, "newLoginNudgeTitle": { "message": "Заощаджуйте час з автозаповненням" @@ -5359,23 +5435,27 @@ "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, "generatorNudgeTitle": { - "message": "Quickly create passwords" + "message": "Швидко створюйте паролі" }, "generatorNudgeBodyOne": { - "message": "Easily create strong and unique passwords by clicking on", + "message": "Легко створюйте надійні та унікальні паролі, натиснувши на", "description": "Two part message", "example": "Easily create strong and unique passwords by clicking on {icon} to help you keep your logins secure." }, "generatorNudgeBodyTwo": { - "message": "to help you keep your logins secure.", + "message": "щоб зберегти свої записи в безпеці.", "description": "Two part message", "example": "Easily create strong and unique passwords by clicking on {icon} to help you keep your logins secure." }, "generatorNudgeBodyAria": { - "message": "Easily create strong and unique passwords by clicking on the Generate password button to help you keep your logins secure.", + "message": "Легко створюйте надійні та унікальні паролі, натиснувши кнопку Генерувати пароль, щоб зберегти свої записи в безпеці.", "description": "Aria label for the body content of the generator nudge" }, "noPermissionsViewPage": { - "message": "You do not have permissions to view this page. Try logging in with a different account." + "message": "У вас немає дозволу переглядати цю сторінку. Спробуйте ввійти з іншим обліковим записом." + }, + "wasmNotSupported": { + "message": "WebAssembly не підтримується або не ввімкнено у вашому браузері. WebAssembly є обов'язковою вимогою для програми Bitwarden.", + "description": "'WebAssembly' is a technical term and should not be translated." } } diff --git a/apps/browser/src/_locales/vi/messages.json b/apps/browser/src/_locales/vi/messages.json index 29a7b7109e7..e2752827221 100644 --- a/apps/browser/src/_locales/vi/messages.json +++ b/apps/browser/src/_locales/vi/messages.json @@ -10,35 +10,35 @@ "description": "Extension name, MUST be less than 40 characters (Safari restriction)" }, "extDesc": { - "message": "Ở nhà, ở cơ quan, hay trên đường đi, Bitwarden sẽ bảo mật tất cả mật khẩu, mã khoá, và thông tin cá nhân của bạn", + "message": "Ở nhà, ở cơ quan hay khi di chuyển, Bitwarden sẽ bảo vệ tất cả mật khẩu, mã khóa và thông tin cá nhân của bạn", "description": "Extension description, MUST be less than 112 characters (Safari restriction)" }, "loginOrCreateNewAccount": { "message": "Đăng nhập hoặc tạo tài khoản mới để truy cập kho lưu trữ của bạn." }, "inviteAccepted": { - "message": "Lời mời được chấp nhận" + "message": "Đã chấp nhận lời mời" }, "createAccount": { "message": "Tạo tài khoản" }, "newToBitwarden": { - "message": "New to Bitwarden?" + "message": "Bạn mới sử dụng Bitwarden?" }, "logInWithPasskey": { - "message": "Log in with passkey" + "message": "Đăng nhập bằng khóa truy cập" }, "useSingleSignOn": { - "message": "Use single sign-on" + "message": "Dùng đăng nhập một lần" }, "welcomeBack": { - "message": "Welcome back" + "message": "Chào mừng bạn trở lại" }, "setAStrongPassword": { - "message": "Đặt mật khẩu mạnh" + "message": "Đặt một mật khẩu mạnh" }, "finishCreatingYourAccountBySettingAPassword": { - "message": "Hoàn thành việc tạo tài khoản của bạn bằng cách đặt mật khẩu" + "message": "Hoàn tất việc tạo tài khoản bằng cách đặt mật khẩu" }, "enterpriseSingleSignOn": { "message": "Đăng nhập bằng tài khoản tổ chức" @@ -84,7 +84,7 @@ "message": "Gợi ý mật khẩu chính (tùy chọn)" }, "passwordStrengthScore": { - "message": "Password strength score $SCORE$", + "message": "Độ mạnh của mật khẩu $SCORE$", "placeholders": { "score": { "content": "$1", @@ -96,7 +96,7 @@ "message": "Tham gia tổ chức" }, "joinOrganizationName": { - "message": "Join $ORGANIZATIONNAME$", + "message": "Tham gia $ORGANIZATIONNAME$", "placeholders": { "organizationName": { "content": "$1", @@ -132,16 +132,16 @@ "message": "Sao chép mật khẩu" }, "copyPassphrase": { - "message": "Copy passphrase" + "message": "Sao chép cụm mật khẩu" }, "copyNote": { "message": "Sao chép ghi chú" }, "copyUri": { - "message": "Sao chép URI" + "message": "Sao chép đường dẫn" }, "copyUsername": { - "message": "Sao chép tên người dùng" + "message": "Sao chép tên đăng nhập" }, "copyNumber": { "message": "Sao chép số" @@ -153,10 +153,10 @@ "message": "Sao chép tên" }, "copyCompany": { - "message": "Copy company" + "message": "Sao chép công ty" }, "copySSN": { - "message": "Số bảo hiểm xã hội" + "message": "Sao chép số bảo hiểm xã hội" }, "copyPassportNumber": { "message": "Sao chép số hộ chiếu" @@ -165,16 +165,16 @@ "message": "Sao chép số giấy phép" }, "copyPrivateKey": { - "message": "Copy private key" + "message": "Sao chép khóa riêng tư" }, "copyPublicKey": { - "message": "Copy public key" + "message": "Sao chép khóa công khai" }, "copyFingerprint": { - "message": "Copy fingerprint" + "message": "Sao chép vân tay" }, "copyCustomField": { - "message": "Copy $FIELD$", + "message": "Sao chép $FIELD$", "placeholders": { "field": { "content": "$1", @@ -183,17 +183,17 @@ } }, "copyWebsite": { - "message": "Copy website" + "message": "Sao chép trang web" }, "copyNotes": { - "message": "Copy notes" + "message": "Sao chép ghi chú" }, "copy": { - "message": "Copy", + "message": "Sao chép", "description": "Copy to clipboard" }, "fill": { - "message": "Fill", + "message": "Điền", "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": { @@ -209,10 +209,10 @@ "message": "Tự động điền danh tính" }, "fillVerificationCode": { - "message": "Fill verification code" + "message": "Điền mã xác minh" }, "fillVerificationCodeAria": { - "message": "Fill Verification Code", + "message": "Điền mã xác minh", "description": "Aria label for the heading displayed the inline menu for totp code autofill" }, "generatePasswordCopied": { @@ -222,7 +222,7 @@ "message": "Sao chép tên trường tùy chỉnh" }, "noMatchingLogins": { - "message": "Không có thông tin đăng nhập phù hợp." + "message": "Không có thông tin đăng nhập phù hợp" }, "noCards": { "message": "Không có thẻ" @@ -246,7 +246,7 @@ "message": "Đăng nhập vào kho lưu trữ của bạn" }, "autoFillInfo": { - "message": "Không có thông tin đăng nhập nào sẵn có để tự động điền vào tab hiện tại." + "message": "Hiện không có thông tin đăng nhập nào để tự động điền vào tab hiện tại." }, "addLogin": { "message": "Thêm một đăng nhập" @@ -255,16 +255,16 @@ "message": "Thêm mục" }, "accountEmail": { - "message": "Account email" + "message": "Email tài khoản" }, "requestHint": { - "message": "Request hint" + "message": "Yêu cầu gợi ý" }, "requestPasswordHint": { - "message": "Request password hint" + "message": "Yêu cầu gợi ý mật khẩu" }, "enterYourAccountEmailAddressAndYourPasswordHintWillBeSentToYou": { - "message": "Enter your account email address and your password hint will be sent to you" + "message": "Nhập địa chỉ email tài khoản của bạn và gợi ý mật khẩu sẽ được gửi đến bạn" }, "getMasterPasswordHint": { "message": "Nhận gợi ý mật khẩu chính" @@ -294,7 +294,7 @@ "message": "Tiếp tục tới ứng dụng web?" }, "continueToWebAppDesc": { - "message": "Khám phá thêm các tính năng của tài khoản Bitwarden của bạn trên bản web." + "message": "Khám phá thêm các tính năng tài khoản Bitwarden của bạn trên bản web." }, "continueToHelpCenter": { "message": "Tiếp tục tới Trung tâm trợ giúp?" @@ -306,17 +306,17 @@ "message": "Tiếp tục tới cửa hàng tiện ích mở rộng của trình duyệt?" }, "continueToBrowserExtensionStoreDesc": { - "message": "Giúp người khác tìm hiểu xem Bitwarden có phù hợp với họ không. Hãy truy cập cửa hàng tiện ích mở rộng trên trình duyệt của bạn và đánh giá ngay bây giờ." + "message": "Giúp người khác tìm hiểu xem Bitwarden có phù hợp với họ không. Truy cập cửa hàng tiện ích mở rộng của trình duyệt và đánh giá ngay bây giờ." }, "changeMasterPasswordOnWebConfirmation": { "message": "Bạn có thể thay đổi mật khẩu chính của mình trên Bitwarden bản web." }, "fingerprintPhrase": { - "message": "Cụm vân tay", + "message": "Cụm từ xác thực", "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." }, "yourAccountsFingerprint": { - "message": "Cụm vân tay của tài khoản của bạn", + "message": "Cụm từ xác thực tài khoản của bạn", "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": { @@ -341,16 +341,16 @@ "message": "Bitwarden dành cho Doanh Nghiệp" }, "bitwardenAuthenticator": { - "message": "Bitwarden Authenticator" + "message": "Trình xác thực Bitwarden" }, "continueToAuthenticatorPageDesc": { - "message": "Ứng dụng Bitwarden Authenticator cho phép bạn lưu trữ khóa xác thực và tạo mã TOTP cho quy trình xác minh hai bước. Tìm hiểu thêm trên trang web bitwarden.com" + "message": "Trình xác thực Bitwarden cho phép bạn lưu trữ các khóa xác thực và tạo mã TOTP cho quy trình xác thực hai bước. Tìm hiểu thêm trên trang web bitwarden.com" }, "bitwardenSecretsManager": { - "message": "Bitwarden Secrets Manager" + "message": "Trình quản lý Bí mật Bitwarden" }, "continueToSecretsManagerPageDesc": { - "message": "Lưu trữ bảo mật, quản lý và chia sẻ bí mật của nhà phát triển với Bitwarden Secrets Manager. Truy cập bitwarden.com để biết thêm chi tiết." + "message": "Lưu trữ, quản lý và chia sẻ các thông tin bí mật của nhà phát triển một cách an toàn với Trình quản lý Bí mật Bitwarden. Tìm hiểu thêm trên trang web bitwarden.com." }, "passwordlessDotDev": { "message": "Passwordless.dev" @@ -359,10 +359,10 @@ "message": "Tạo trải nghiệm đăng nhập mượt mà và an toàn không cần mật khẩu truyền thống với Passwordless.dev. Tìm hiểu thêm trên trang web bitwarden.com." }, "freeBitwardenFamilies": { - "message": "Gói Gia đình Miễn phí của Bitwarden" + "message": "Gói Bitwarden cho Gia đình miễn phí" }, "freeBitwardenFamiliesPageDesc": { - "message": "Bạn đủ điều kiện cho Gói Gia đình Miễn phí của Bitwarden. Hãy nhận ưu đãi này ngay hôm nay trên ứng dụng web." + "message": "Bạn đủ điều kiện miễn phí Gói Bitwarden cho Gia đình. Hãy nhận ưu đãi này ngay hôm nay trên web." }, "version": { "message": "Phiên bản" @@ -383,7 +383,7 @@ "message": "Chỉnh sửa thư mục" }, "editFolderWithName": { - "message": "Edit folder: $FOLDERNAME$", + "message": "Sửa thư mục: $FOLDERNAME$", "placeholders": { "foldername": { "content": "$1", @@ -398,16 +398,16 @@ "message": "Tên thư mục" }, "folderHintText": { - "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums" + "message": "Tạo một thư mục con bằng cách thêm tên thư mục cha theo sau là dấu “/”. Ví dụ: Social/Forums" }, "noFoldersAdded": { - "message": "No folders added" + "message": "Không thêm thư mục nào" }, "createFoldersToOrganize": { - "message": "Create folders to organize your vault items" + "message": "Tạo thư mục để tổ chức các mục trong kho của bạn" }, "deleteFolderPermanently": { - "message": "Are you sure you want to permanently delete this folder?" + "message": "Bạn có chắc muốn xóa vĩnh viễn thư mục này?" }, "deleteFolder": { "message": "Xóa thư mục" @@ -450,7 +450,7 @@ "message": "Tự động tạo mật khẩu mạnh mẽ, độc nhất cho đăng nhập của bạn." }, "bitWebVaultApp": { - "message": "Ứng dụng Bitwarden bản web" + "message": "Ứng dụng web Bitwarden" }, "importItems": { "message": "Nhập mục" @@ -462,19 +462,19 @@ "message": "Tạo mật khẩu" }, "generatePassphrase": { - "message": "Generate passphrase" + "message": "Tạo cụm mật khẩu" }, "passwordGenerated": { - "message": "Password generated" + "message": "Đã tạo mật khẩu" }, "passphraseGenerated": { - "message": "Passphrase generated" + "message": "Đã tạo cụm mật khẩu" }, "usernameGenerated": { - "message": "Username generated" + "message": "Tên đăng nhập được tạo tự động" }, "emailGenerated": { - "message": "Email generated" + "message": "Email được tạo ra" }, "regeneratePassword": { "message": "Tạo lại mật khẩu" @@ -490,7 +490,7 @@ "description": "Card header for password generator include block" }, "uppercaseDescription": { - "message": "Include uppercase characters", + "message": "Bao gồm các ký tự viết hoa", "description": "Tooltip for the password generator uppercase character checkbox" }, "uppercaseLabel": { @@ -498,7 +498,7 @@ "description": "Label for the password generator uppercase character checkbox" }, "lowercaseDescription": { - "message": "Include lowercase characters", + "message": "Bao gồm các ký tự viết thường", "description": "Full description for the password generator lowercase character checkbox" }, "lowercaseLabel": { @@ -521,7 +521,7 @@ "message": "Số từ" }, "wordSeparator": { - "message": "Word Separator" + "message": "Dấu phân cách từ" }, "capitalize": { "message": "Viết hoa", @@ -534,14 +534,14 @@ "message": "Số kí tự tối thiểu" }, "minSpecial": { - "message": "Số kí tự đặc biệt tối thiểu" + "message": "Kí tự đặc biệt tối thiểu" }, "avoidAmbiguous": { - "message": "Avoid ambiguous characters", + "message": "Tránh các ký tự dễ nhầm lẫn", "description": "Label for the avoid ambiguous characters checkbox." }, "generatorPolicyInEffect": { - "message": "Enterprise policy requirements have been applied to your generator options.", + "message": "Các yêu cầu chính sách của doanh nghiệp đã được áp dụng cho các tùy chọn trình tạo của bạn.", "description": "Indicates that a policy limits the credential generator screen." }, "searchVault": { @@ -557,19 +557,19 @@ "message": "Không có mục nào để liệt kê." }, "itemInformation": { - "message": "Mục thông tin" + "message": "Thông tin mục" }, "username": { - "message": "Tên người dùng" + "message": "Tên đăng nhập" }, "password": { "message": "Mật khẩu" }, "totp": { - "message": "Khóa xác thực" + "message": "Mã xác thực bí mật" }, "passphrase": { - "message": "Cụm từ mật khẩu" + "message": "Cụm mật khẩu" }, "favorite": { "message": "Yêu thích" @@ -578,16 +578,16 @@ "message": "Bỏ thích" }, "itemAddedToFavorites": { - "message": "Đã thêm vào yêu thích" + "message": "Đã thêm mục vào yêu thích" }, "itemRemovedFromFavorites": { - "message": "Đã xóa khỏi yêu thích" + "message": "Đã xóa mục khỏi yêu thích" }, "notes": { "message": "Ghi chú" }, "privateNote": { - "message": "Private note" + "message": "Ghi chú riêng tư" }, "note": { "message": "Ghi chú" @@ -611,7 +611,7 @@ "message": "Mở trang web" }, "launchWebsiteName": { - "message": "Launch website $ITEMNAME$", + "message": "Khởi chạy trang web $ITEMNAME$", "placeholders": { "itemname": { "content": "$1", @@ -635,16 +635,16 @@ "message": "Tùy chọn mở khóa" }, "unlockMethodNeededToChangeTimeoutActionDesc": { - "message": "Thiết lập phương thức mở khóa để thay đổi hành động hết thời gian chờ của vault." + "message": "Thiết lập phương thức mở khóa để thay đổi hành động sau khi đóng kho." }, "unlockMethodNeeded": { "message": "Thiết lập phương pháp mở khóa trong Cài đặt" }, "sessionTimeoutHeader": { - "message": "Thời gian chờ của phiên" + "message": "Thời gian hết phiên" }, "vaultTimeoutHeader": { - "message": "Vault timeout" + "message": "Thời gian mở kho" }, "otherOptions": { "message": "Tùy chọn khác" @@ -653,28 +653,28 @@ "message": "Đánh giá tiện ích mở rộng" }, "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ế." + "message": "Trình duyệt web của bạn không hỗ trợ sao chép vào bảng nhớ tạm một cách dễ dàng. Vui lòng sao chép thủ công." }, "verifyYourIdentity": { - "message": "Verify your identity" + "message": "Xác minh danh tính của bạn" }, "weDontRecognizeThisDevice": { - "message": "We don't recognize this device. Enter the code sent to your email to verify your identity." + "message": "Chúng tôi không nhận diện được thiết bị này. Nhập mã được gửi đến email để xác minh danh tính của bạn." }, "continueLoggingIn": { - "message": "Continue logging in" + "message": "Tiếp tục đăng nhập" }, "yourVaultIsLocked": { "message": "Kho của bạn đã bị khóa. Xác minh danh tính của bạn để mở khoá." }, "yourVaultIsLockedV2": { - "message": "Your vault is locked" + "message": "Kho của bạn đã khóa" }, "yourAccountIsLocked": { - "message": "Your account is locked" + "message": "Tài khoản của bạn đã bị khóa" }, "or": { - "message": "or" + "message": "hoặc" }, "unlock": { "message": "Mở khóa" @@ -696,10 +696,10 @@ "message": "Mật khẩu chính không hợp lệ" }, "vaultTimeout": { - "message": "Thời gian chờ của kho" + "message": "Đóng kho sau" }, "vaultTimeout1": { - "message": "Timeout" + "message": "Quá hạn" }, "lockNow": { "message": "Khóa ngay" @@ -741,7 +741,7 @@ "message": "4 giờ" }, "onLocked": { - "message": "Mỗi khi khóa" + "message": "Mỗi khi khóa máy" }, "onRestart": { "message": "Mỗi khi khởi động lại trình duyệt" @@ -759,7 +759,7 @@ "message": "Mật khẩu chính" }, "masterPassImportant": { - "message": "Mật khẩu chính của bạn không thể phục hồi nếu bạn quên nó!" + "message": "Mật khẩu chính của bạn không thể khôi phục nếu bạn quên nó!" }, "masterPassHintLabel": { "message": "Gợi ý mật khẩu chính" @@ -768,7 +768,7 @@ "message": "Đã xảy ra lỗi" }, "emailRequired": { - "message": "Yêu cầu địa chỉ email." + "message": "Cần điền địa chỉ email." }, "invalidEmail": { "message": "Địa chỉ email không hợp lệ." @@ -777,7 +777,7 @@ "message": "Yêu cầu mật khẩu chính." }, "confirmMasterPasswordRequired": { - "message": "Yêu cầu nhập lại mật khẩu chính." + "message": "Cần nhập lại mật khẩu chính." }, "masterPasswordMinlength": { "message": "Mật khẩu chính phải có ít nhất $VALUE$ kí tự.", @@ -830,7 +830,7 @@ } }, "autofillError": { - "message": "Không thể tự động điền mục đã chọn trên trang này. Hãy thực hiện sao chép và dán thông tin một cách thủ công." + "message": "Không thể tự động điền mục đã chọn trên trang này. Vui lòng sao chép và dán thông tin thủ công." }, "totpCaptureError": { "message": "Không thể quét mã QR từ trang web hiện tại" @@ -842,19 +842,19 @@ "message": "Quét mã QR xác thực từ trang web hiện tại" }, "totpHelperTitle": { - "message": "Thực hiện xác minh hai bước liền mạch" + "message": "Giúp quá trình xác minh 2 bước diễn ra liền mạch" }, "totpHelper": { - "message": "Bitwarden có thể lưu trữ và điền mã xác minh 2 bước. Sao chép và dán khóa vào trường này." + "message": "Bitwarden có thể lưu trữ và điền mã xác thực 2 bước. Sao chép và dán khóa vào ô này." }, "totpHelperWithCapture": { - "message": "Bitwarden có thể lưu trữ và điền mã xác minh 2 bước. Hãy chọn biểu tượng máy ảnh để chụp mã QR xác thực của trang web, hoặc sao chép và dán khoá vào ô này." + "message": "Bitwarden có thể lưu trữ và điền mã xác minh 2 bước. Hãy chọn biểu tượng máy ảnh để quét mã QR xác thực của trang web, hoặc sao chép và dán khoá vào ô này." }, "learnMoreAboutAuthenticators": { - "message": "Learn more about authenticators" + "message": "Tìm hiểu thêm về các công cụ xác thực" }, "copyTOTP": { - "message": "Sao chép khóa Authenticator (TOTP)" + "message": "Sao chép khóa xác thực (TOTP)" }, "loggedOut": { "message": "Đã đăng xuất" @@ -869,25 +869,25 @@ "message": "Đăng nhập" }, "logInToBitwarden": { - "message": "Log in to Bitwarden" + "message": "Đăng nhập Bitwarden" }, "enterTheCodeSentToYourEmail": { - "message": "Enter the code sent to your email" + "message": "Nhập mã được gửi về email của bạn" }, "enterTheCodeFromYourAuthenticatorApp": { - "message": "Enter the code from your authenticator app" + "message": "Nhập mã từ ứng dụng xác thực của bạn" }, "pressYourYubiKeyToAuthenticate": { - "message": "Press your YubiKey to authenticate" + "message": "Nhấn YubiKey của bạn để xác thực" }, "duoTwoFactorRequiredPageSubtitle": { - "message": "Duo two-step login is required for your account. Follow the steps below to finish logging in." + "message": "Đăng nhập hai bước là bắt buộc cho tài khoản của bạn. Hãy làm theo các bước dưới đây để hoàn tất quá trình đăng nhập." }, "followTheStepsBelowToFinishLoggingIn": { - "message": "Follow the steps below to finish logging in." + "message": "Thực hiện các bước sau để hoàn tất đăng nhập." }, "followTheStepsBelowToFinishLoggingInWithSecurityKey": { - "message": "Follow the steps below to finish logging in with your security key." + "message": "Thực hiện các bước sau để hoàn tất đăng nhập bằng khóa bảo mật của bạn." }, "restartRegistration": { "message": "Tiến hành đăng ký lại" @@ -911,7 +911,7 @@ "message": "Không" }, "location": { - "message": "Location" + "message": "Vị trí" }, "unexpectedError": { "message": "Một lỗi bất ngờ đã xảy ra." @@ -923,13 +923,13 @@ "message": "Đã thêm thư mục" }, "twoStepLoginConfirmation": { - "message": "Xác thực hai lớp giúp cho tài khoản của bạn an toàn hơn bằng cách yêu cầu bạn xác minh thông tin đăng nhập của bạn bằng một thiết bị khác như khóa bảo mật, ứng dụng xác thực, SMS, cuộc gọi điện thoại hoặc email. Bạn có thể bật xác thực hai lớp trong kho bitwarden nền web. Bạn có muốn ghé thăm trang web bây giờ?" + "message": "Đăng nhập hai bước giúp tài khoản của bạn an toàn hơn bằng cách yêu cầu bạn xác minh việc đăng nhập bằng một thiết bị khác như khóa bảo mật, ứng dụng xác thực, SMS, cuộc gọi điện thoại hoặc email. Đăng nhập hai bước có thể được thiết lập trên bitwarden.com. Bạn có muốn truy cập trang web bây giờ không?" }, "twoStepLoginConfirmationContent": { - "message": "Make your account more secure by setting up two-step login in the Bitwarden web app." + "message": "Tăng cường bảo mật tài khoản của bạn bằng cách thiết lập đăng nhập hai bước trên trang web Bitwarden." }, "twoStepLoginConfirmationTitle": { - "message": "Continue to web app?" + "message": "Tiếp tục tới ứng dụng web?" }, "editedFolder": { "message": "Đã lưu thư mục" @@ -941,7 +941,7 @@ "message": "Đã xóa thư mục" }, "gettingStartedTutorial": { - "message": "Hướng dẫn Bắt đầu" + "message": "Hướng dẫn bắt đầu" }, "gettingStartedTutorialVideo": { "message": "Xem hướng dẫn bắt đầu của chúng tôi để tìm hiểu cách tận dụng tối đa tiện ích mở rộng của trình duyệt." @@ -969,7 +969,7 @@ } }, "newUri": { - "message": "URI mới" + "message": "Đường dẫn mới" }, "addDomain": { "message": "Thêm tên miền", @@ -979,13 +979,13 @@ "message": "Đã thêm mục" }, "editedItem": { - "message": "Mục được chỉnh sửa" + "message": "Đã lưu mục" }, "deleteItemConfirmation": { - "message": "Bạn có chắc bạn muốn xóa mục này?" + "message": "Bạn có chắc muốn cho nó vào thùng rác?" }, "deletedItem": { - "message": "Đã xóa mục" + "message": "Mục đã được cho vào thùng rác" }, "overwritePassword": { "message": "Ghi đè mật khẩu" @@ -994,10 +994,10 @@ "message": "Bạn có chắc chắn muốn ghi đè mật khẩu hiện tại không?" }, "overwriteUsername": { - "message": "Ghi đè tên người dùng" + "message": "Ghi đè tên đăng nhập" }, "overwriteUsernameConfirmation": { - "message": "Bạn có chắc chắn muốn ghi đè tên người dùng hiện tại không?" + "message": "Bạn có chắc chắn muốn ghi đè tên đăng nhập hiện tại không?" }, "searchFolder": { "message": "Tìm kiếm thư mục" @@ -1006,7 +1006,7 @@ "message": "Tìm kiếm bộ sưu tập" }, "searchType": { - "message": "Tìm loại" + "message": "Tìm theo thể loại" }, "noneFolder": { "message": "Không có thư mục", @@ -1016,16 +1016,16 @@ "message": "Hỏi để thêm đăng nhập" }, "vaultSaveOptionsTitle": { - "message": "Lưu vào các tùy chọn kho" + "message": "Tùy chọn lưu vào kho" }, "addLoginNotificationDesc": { - "message": "'Thông báo Thêm đăng nhập' sẽ tự động nhắc bạn lưu các đăng nhập mới vào hầm an toàn của bạn bất cứ khi nào bạn đăng nhập trang web lần đầu tiên." + "message": "Nếu không tìm thấy mục nào trong kho của bạn, hãy yêu cầu thêm mục đó." }, "addLoginNotificationDescAlt": { - "message": "Đưa ra lựa chọn để thêm một mục nếu không tìm thấy mục đó trong hòm của bạn. Áp dụng với mọi tài khoản đăng nhập trên thiết bị." + "message": "Nếu không tìm thấy mục nào trong kho của bạn, hãy yêu cầu thêm mục đó. Áp dụng cho tất cả tài khoản đã đăng nhập." }, "showCardsInVaultViewV2": { - "message": "Always show cards as Autofill suggestions on Vault view" + "message": "Luôn hiển thị thẻ như đề xuất tự động điền trên giao diện kho" }, "showCardsCurrentTab": { "message": "Hiển thị thẻ trên trang Tab" @@ -1034,26 +1034,26 @@ "message": "Liệt kê các mục thẻ trên trang Tab để dễ dàng tự động điền." }, "showIdentitiesInVaultViewV2": { - "message": "Always show identities as Autofill suggestions on Vault view" + "message": "Luôn hiển thị danh tính như đề xuất tự động điền trên giao diện kho" }, "showIdentitiesCurrentTab": { "message": "Hiển thị danh tính trên trang Tab" }, "showIdentitiesCurrentTabDesc": { - "message": "Liệt kê các mục danh tính trên trang Tab để dễ dàng tự động điền." + "message": "Liệt kê các danh tính trên trang Tab để dễ dàng tự động điền." }, "clickToAutofillOnVault": { - "message": "Click items to autofill on Vault view" + "message": "Nhấp vào mục để tự động điền trong giao diện kho" }, "clickToAutofill": { - "message": "Click items in autofill suggestion to fill" + "message": "Nhấp vào mục trong đề xuất tự động điền để điền thông tin" }, "clearClipboard": { - "message": "Dọn dẹp khay nhớ tạm", + "message": "Dọn dẹp bảng nhớ tạm", "description": "Clipboard is the operating system thing where you copy/paste data to on your device." }, "clearClipboardDesc": { - "message": "Tự động dọn dẹp giá trị được sao chép khỏi khay nhớ tạm của bạn.", + "message": "Tự động xóa mọi thứ đã sao chép khỏi bảng nhớ tạm.", "description": "Clipboard is the operating system thing where you copy/paste data to on your device." }, "notificationAddDesc": { @@ -1063,7 +1063,7 @@ "message": "Lưu" }, "notificationViewAria": { - "message": "View $ITEMNAME$, opens in new window", + "message": "Xem $ITEMNAME$, mở trong cửa sổ mới", "placeholders": { "itemName": { "content": "$1" @@ -1072,18 +1072,18 @@ "description": "Aria label for the view button in notification bar confirmation message" }, "notificationNewItemAria": { - "message": "New Item, opens in new window", + "message": "Mục mới, mở trong cửa sổ mới", "description": "Aria label for the new item button in notification bar confirmation message when error is prompted" }, "notificationEditTooltip": { - "message": "Edit before saving", + "message": "Chỉnh sửa trước khi lưu", "description": "Tooltip and Aria label for edit button on cipher item" }, "newNotification": { - "message": "New notification" + "message": "Thông báo mới" }, "labelWithNotification": { - "message": "$LABEL$: New notification", + "message": "$LABEL$: Thông báo mới", "description": "Label for the notification with a new login suggestion.", "placeholders": { "label": { @@ -1093,15 +1093,15 @@ } }, "notificationLoginSaveConfirmation": { - "message": "saved to Bitwarden.", + "message": "đã lưu vào Bitwarden.", "description": "Shown to user after item is saved." }, "notificationLoginUpdatedConfirmation": { - "message": "updated in Bitwarden.", + "message": "đã cập nhật trong Bitwarden.", "description": "Shown to user after item is updated." }, "selectItemAriaLabel": { - "message": "Select $ITEMTYPE$, $ITEMNAME$", + "message": "Chọn $ITEMTYPE$, $ITEMNAME$", "description": "Used by screen readers. $1 is the item type (like vault or folder), $2 is the selected item name.", "placeholders": { "itemType": { @@ -1113,35 +1113,35 @@ } }, "saveAsNewLoginAction": { - "message": "Save as new login", + "message": "Lưu như đăng nhập mới", "description": "Button text for saving login details as a new entry." }, "updateLoginAction": { - "message": "Update login", + "message": "Cập nhật đăng nhập", "description": "Button text for updating an existing login entry." }, "unlockToSave": { - "message": "Unlock to save this login", + "message": "Mở khóa để lưu thông tin đăng nhập này", "description": "User prompt to take action in order to save the login they just entered." }, "saveLogin": { - "message": "Save login", + "message": "Lưu đăng nhập", "description": "Prompt asking the user if they want to save their login details." }, "updateLogin": { - "message": "Update existing login", + "message": "Cập nhật thông tin đăng nhập hiện có", "description": "Prompt asking the user if they want to update an existing login entry." }, "loginSaveSuccess": { - "message": "Login saved", + "message": "Đã lưu đăng nhập", "description": "Message displayed when login details are successfully saved." }, "loginUpdateSuccess": { - "message": "Login updated", + "message": "Đã cập nhật đăng nhập", "description": "Message displayed when login details are successfully updated." }, "loginUpdateTaskSuccess": { - "message": "Great job! You took the steps to make you and $ORGANIZATION$ more secure.", + "message": "Làm tốt lắm! Bạn đã thực hiện các bước để tăng cường bảo mật cho bản thân và $ORGANIZATION$.", "placeholders": { "organization": { "content": "$1" @@ -1150,7 +1150,7 @@ "description": "Shown to user after login is updated." }, "loginUpdateTaskSuccessAdditional": { - "message": "Thank you for making $ORGANIZATION$ more secure. You have $TASK_COUNT$ more passwords to update.", + "message": "Cảm ơn bạn đã giúp $ORGANIZATION$ an toàn hơn. Bạn còn $TASK_COUNT$ mật khẩu cần cập nhật nữa.", "placeholders": { "organization": { "content": "$1" @@ -1162,17 +1162,23 @@ "description": "Shown to user after login is updated." }, "nextSecurityTaskAction": { - "message": "Change next password", + "message": "Thay đổi mật khẩu tiếp theo", "description": "Message prompting user to undertake completion of another security task." }, "saveFailure": { - "message": "Error saving", + "message": "Lỗi khi lưu", "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.", + "message": "Ôi không! Chúng tôi không thể lưu lại được. Hãy thử nhập thông tin thủ công.", "description": "Detailed error message shown when saving login details fails." }, + "changePasswordWarning": { + "message": "Sau khi thay đổi mật khẩu, bạn cần đăng nhập lại bằng mật khẩu mới. Các phiên đăng nhập đang hoạt động trên các thiết bị khác sẽ bị đăng xuất trong vòng một giờ." + }, + "accountRecoveryUpdateMasterPasswordSubtitle": { + "message": "Thay đổi mật khẩu chính của bạn để hoàn tất quá trình khôi phục tài khoản." + }, "enableChangedPasswordNotification": { "message": "Hỏi để cập nhật đăng nhập hiện có" }, @@ -1180,22 +1186,22 @@ "message": "Yêu cầu cập nhật mật khẩu đăng nhập khi phát hiện thay đổi trên trang web." }, "changedPasswordNotificationDescAlt": { - "message": "Đưa ra lựa chọn để cập nhật mật khẩu khi phát hiện có sự thay đổi trên trang web. Áp dụng với mọi tài khoản đăng nhập trên thiết bị." + "message": "Yêu cầu cập nhật mật khẩu đăng nhập khi phát hiện thay đổi trên trang web. Áp dụng cho tất cả tài khoản đã đăng nhập." }, "enableUsePasskeys": { - "message": "Đưa ra lựa chọn để lưu và sử dụng mã khoá" + "message": "Yêu cầu lưu và sử dụng mã khóa" }, "usePasskeysDesc": { - "message": "Đưa ra lựa chọn để lưu mã khoá mới hoặc đăng nhập bằng mã khoá đã lưu trong kho. Áp dụng với mọi tài khoản đăng nhập trên thiết bị." + "message": "Yêu cầu lưu các mã khóa mới hoặc đăng nhập bằng các mã khóa đã lưu trong kho của bạn. Áp dụng cho tất cả các tài khoản đã đăng nhập." }, "notificationChangeDesc": { - "message": "Bạn có muốn cập nhật mật khẩu này trên Bitwarden không?" + "message": "Bạn có muốn cập nhật mật khẩu này trong Bitwarden không?" }, "notificationChangeSave": { "message": "Cập nhật" }, "notificationUnlockDesc": { - "message": "Vui lòng mở khóa Kho Bitwarden của bạn để hoàn thành quá trình tự động điền." + "message": "Mở khóa kho Bitwarden của bạn để hoàn tất quá trình tự động điền." }, "notificationUnlock": { "message": "Mở khóa" @@ -1207,17 +1213,17 @@ "message": "Hiển thị tuỳ chọn menu ngữ cảnh" }, "contextMenuItemDesc": { - "message": "Sử dụng một đúp chuột để truy cập vào việc tạo mật khẩu và thông tin đăng nhập phù hợp cho trang web. " + "message": "Dùng cú nhấp chuột phụ để truy cập trình tạo mật khẩu và đăng nhập tương ứng cho trang web." }, "contextMenuItemDescAlt": { - "message": "Truy cập trình khởi tạo mật khẩu và các mục đăng nhập đã lưu của trang web bằng cách nhấn đúp chuột. Áp dụng với mọi tài khoản đăng nhập trên thiết bị." + "message": "Nhấp chuột phải để truy cập tính năng tạo mật khẩu và xem các thông tin đăng nhập phù hợp cho trang web này. Áp dụng với mọi tài khoản đã đăng nhập." }, "defaultUriMatchDetection": { - "message": "Phương thức kiểm tra URI mặc định", + "message": "Phát hiện khớp URI mặc định", "description": "Default URI match detection for autofill." }, "defaultUriMatchDetectionDesc": { - "message": "Chọn phương thức mặc định để kiểm tra so sánh URI cho các đăng nhập khi xử lí các hành động như là tự động điền." + "message": "Chọn cách thức mặc định hệ thống so khớp đường dẫn (URI) để xử lý đăng nhập khi thực hiện các thao tác như tự động điền." }, "theme": { "message": "Chủ đề" @@ -1226,7 +1232,7 @@ "message": "Thay đổi màu sắc ứng dụng." }, "themeDescAlt": { - "message": "Thay đổi tông màu giao diện của ứng dụng. Áp dụng với mọi tài khoản đăng nhập trên thiết bị." + "message": "Thay đổi chủ đề màu sắc của ứng dụng. Áp dụng cho tất cả các tài khoản đã đăng nhập." }, "dark": { "message": "Tối", @@ -1246,7 +1252,7 @@ "message": "Định dạng tập tin" }, "fileEncryptedExportWarningDesc": { - "message": "Tập tin xuất này sẽ được bảo vệ bằng mật khẩu và yêu cầu mật khẩu để giải mã." + "message": "Tệp tin này sẽ được bảo vệ bằng mật khẩu và yêu cầu mật khẩu tệp tin để giải mã." }, "filePassword": { "message": "Mật khẩu tập tin" @@ -1255,13 +1261,13 @@ "message": "Mật khẩu này sẽ được sử dụng để xuất và nhập tập tin này" }, "accountRestrictedOptionDescription": { - "message": "Sử dụng khóa mã hóa tài khoản của bạn, được tạo từ tên người dùng và mật khẩu chính của bạn để mã hóa tệp xuất và giới hạn việc nhập chỉ cho tài khoản Bitwarden hiện tại." + "message": "Sử dụng khóa mã hóa tài khoản của bạn, được tạo từ tên đăng nhập và mật khẩu chính của bạn để mã hóa tệp xuất và giới hạn việc nhập chỉ cho tài khoản Bitwarden hiện tại." }, "passwordProtectedOptionDescription": { "message": "Thiết lập mật khẩu cho tệp để mã hóa dữ liệu xuất và nhập nó vào bất kỳ tài khoản Bitwarden nào bằng cách sử dụng mật khẩu đó để giải mã." }, "exportTypeHeading": { - "message": "Loại xuất" + "message": "Xuất kiểu" }, "accountRestricted": { "message": "Tài khoản bị hạn chế" @@ -1274,7 +1280,7 @@ "description": "WARNING (should stay in capitalized letters if the language permits)" }, "warningCapitalized": { - "message": "Warning", + "message": "Cảnh báo", "description": "Warning (should maintain locale-relevant capitalization)" }, "confirmVaultExport": { @@ -1284,7 +1290,7 @@ "message": "Bản xuất này chứa dữ liệu kho bạn và không được mã hóa. Bạn không nên lưu trữ hay gửi tập tin đã xuất thông qua phương thức rủi ro (như email). Vui lòng xóa nó ngay lập tức khi bạn đã sử dụng xong." }, "encExportKeyWarningDesc": { - "message": "Quá trình xuất này sẽ mã hóa dữ liệu của bạn bằng khóa mã hóa của tài khoản. Nếu bạn từng xoay khóa mã hóa tài khoản của mình, bạn nên xuất lại vì bạn sẽ không thể giải mã tập tin xuất này." + "message": "Quá trình xuất này sẽ mã hóa dữ liệu của bạn bằng khóa mã hóa của tài khoản. Nếu bạn từng thay đổi mã hóa tài khoản của mình, bạn nên xuất lại vì bạn sẽ không thể giải mã tập tin xuất này." }, "encExportAccountWarningDesc": { "message": "Khóa mã hóa tài khoản là duy nhất cho mỗi tài khoản Bitwarden, vì vậy bạn không thể nhập tệp xuất được mã hóa vào một tài khoản khác." @@ -1327,7 +1333,7 @@ "message": "Mã xác thực (TOTP)" }, "copyVerificationCode": { - "message": "Sao chép Mã xác thực" + "message": "Sao chép mã xác thực" }, "attachments": { "message": "Tệp đính kèm" @@ -1348,13 +1354,13 @@ "message": "Không có tệp đính kèm." }, "attachmentSaved": { - "message": "Tệp đính kèm đã được lưu." + "message": "Đã lưu tệp đính kèm" }, "file": { "message": "Tập tin" }, "fileToShare": { - "message": "File to share" + "message": "Tệp để chia sẻ" }, "selectFile": { "message": "Chọn tập tin" @@ -1365,14 +1371,14 @@ "featureUnavailable": { "message": "Tính năng không có sẵn" }, - "encryptionKeyMigrationRequired": { - "message": "Cần di chuyển khóa mã hóa. Vui lòng đăng nhập trang web Bitwaden để cập nhật khóa mã hóa của bạn." + "legacyEncryptionUnsupported": { + "message": "Mã hóa cổ điển không còn được hỗ trợ. Vui lòng liên hệ bộ phận hỗ trợ để khôi phục tài khoản của bạn." }, "premiumMembership": { "message": "Thành viên Cao Cấp" }, "premiumManage": { - "message": "Quản lý Thành viên" + "message": "Quản lý thành viên" }, "premiumManageAlert": { "message": "Bạn có thể quản lí tư cách thành viên của mình trên trang web kho lưu trữ bitwarden.com. Bạn có muốn truy cập trang web ngay bây giờ không?" @@ -1381,22 +1387,22 @@ "message": "Làm mới thành viên" }, "premiumNotCurrentMember": { - "message": "Bạn hiện không phải là một thành viên cao cấp." + "message": "Bạn hiện không phải là thành viên Cao cấp." }, "premiumSignUpAndGet": { - "message": "Đăng ký làm thành viên cao cấp và nhận được:" + "message": "Đăng ký làm thành viên Cao cấp và nhận được:" }, "ppremiumSignUpStorage": { "message": "1GB bộ nhớ lưu trữ được mã hóa cho các tệp đính kèm." }, "premiumSignUpEmergency": { - "message": "Emergency access." + "message": "Truy cập khẩn cấp." }, "premiumSignUpTwoStepOptions": { "message": "Các tùy chọn xác minh hai bước như YubiKey và Duo." }, "ppremiumSignUpReports": { - "message": "Thanh lọc mật khẩu, kiểm tra an toàn tài khoản và các báo cáo rò rĩ dữ liệu là để giữ cho kho của bạn an toàn." + "message": "Thanh lọc mật khẩu, kiểm tra an toàn tài khoản và các báo cáo rò rỉ dữ liệu để bảo vệ kho dữ liệu của bạn." }, "ppremiumSignUpTotp": { "message": "Trình tạo mã xác nhận TOTP (2FA) để đăng nhập vào kho lưu trữ của bạn." @@ -1405,22 +1411,22 @@ "message": "Ưu tiên hỗ trợ khách hàng." }, "ppremiumSignUpFuture": { - "message": "Tất cả các tính năng cao cấp trong tương lai. Nó sẽ sớm xuất hiện!" + "message": "Tất cả các tính năng Cao cấp trong tương lai. Nó sẽ sớm xuất hiện!" }, "premiumPurchase": { "message": "Mua bản Cao Cấp" }, "premiumPurchaseAlertV2": { - "message": "Bạn có thể mua gói Premium từ cài đặt tài khoản trên trang Bitwarden." + "message": "Bạn có thể mua gói Cao cấp từ cài đặt tài khoản trên kho web Bitwarden." }, "premiumCurrentMember": { - "message": "Bạn là một thành viên cao cấp!" + "message": "Bạn là một thành viên Cao cấp!" }, "premiumCurrentMemberThanks": { "message": "Cảm ơn bạn vì đã hỗ trợ Bitwarden." }, "premiumFeatures": { - "message": "Upgrade to Premium and receive:" + "message": "Nâng cấp lên Premium và nhận được:" }, "premiumPrice": { "message": "Tất cả chỉ với $PRICE$/năm!", @@ -1432,7 +1438,7 @@ } }, "premiumPriceV2": { - "message": "Tất cả chỉ với $PRICE$ /năm!", + "message": "Tất cả chỉ với $PRICE$/năm!", "placeholders": { "price": { "content": "$1", @@ -1447,22 +1453,22 @@ "message": "Tự động sao chép TOTP" }, "disableAutoTotpCopyDesc": { - "message": "Nếu đăng nhập của bạn có một khóa xác thực gắn liền với nó, mã xác nhận TOTP sẽ được tự động sao chép vào bộ nhớ tạm của bạn bất cứ khi nào bạn tự động điền thông tin đăng nhập." + "message": "Nếu tài khoản đăng nhập có khóa xác thực, mã xác minh TOTP sẽ được sao chép vào bộ nhớ tạm khi bạn tự động điền thông tin đăng nhập." }, "enableAutoBiometricsPrompt": { "message": "Yêu cầu sinh trắc học khi khởi chạy" }, "premiumRequired": { - "message": "Cần có tài khoản cao cấp" + "message": "Cần có tài khoản Cao cấp" }, "premiumRequiredDesc": { - "message": "Cần là thành viên cao cấp để sử dụng tính năng này." + "message": "Cần là thành viên Cao cấp để sử dụng tính năng này." }, "authenticationTimeout": { - "message": "Authentication timeout" + "message": "Thời gian chờ xác thực" }, "authenticationSessionTimedOut": { - "message": "The authentication session timed out. Please restart the login process." + "message": "Phiên xác thực đã hết thời gian chờ. Vui lòng đăng nhập lại từ đầu." }, "verificationCodeEmailSent": { "message": "Email xác minh đã được gửi tới $EMAIL$.", @@ -1474,53 +1480,53 @@ } }, "dontAskAgainOnThisDeviceFor30Days": { - "message": "Don't ask again on this device for 30 days" + "message": "Không yêu cầu lại trên thiết bị này trong vòng 30 ngày" }, "selectAnotherMethod": { - "message": "Select another method", + "message": "Chọn phương pháp khác", "description": "Select another two-step login method" }, "useYourRecoveryCode": { - "message": "Use your recovery code" + "message": "Sử dụng mã khôi phục của bạn" }, "insertU2f": { "message": "Lắp khóa bảo mật vào cổng USB máy tính của bạn. Nếu nó có một nút, hãy nhấn vào nó." }, "openInNewTab": { - "message": "Open in new tab" + "message": "Mở trong tab mới" }, "webAuthnAuthenticate": { "message": "Xác thực WebAuthn" }, "readSecurityKey": { - "message": "Read security key" + "message": "Đọc khóa bảo mật" }, "awaitingSecurityKeyInteraction": { - "message": "Awaiting security key interaction..." + "message": "Đang chờ tương tác với khóa bảo mật..." }, "loginUnavailable": { "message": "Đăng nhập không có sẵn" }, "noTwoStepProviders": { - "message": "Tài khoản này đã kích hoạt xác thực hai lớp, tuy nhiên, trình duyệt này không hỗ trợ cấu hình dịch vụ xác thực hai lớp đang sử dụng." + "message": "Tài khoản này đã kích hoạt đăng nhập 2 bước, tuy nhiên, trình duyệt này không hỗ trợ dịch vụ xác thực hai lớp đang sử dụng." }, "noTwoStepProviders2": { "message": "Hãy sử dụng trình duyệt web được hỗ trợ (chẳng hạn như Chrome) và/hoặc thêm dịch vụ bổ sung được hỗ trợ tốt hơn trên các trình duyệt web (chẳng hạn như một ứng dụng xác thực)." }, "twoStepOptions": { - "message": "Tùy chọn xác thực hai lớp" + "message": "Tùy chọn đăng nhập 2 bước" }, "selectTwoStepLoginMethod": { - "message": "Select two-step login method" + "message": "Chọn phương pháp đăng nhập hai bước" }, "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." + "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ã khôi phục để tắt tất cả các phương pháp xác thực hai lớp trong tài khoản của bạn." }, "recoveryCodeTitle": { - "message": "Mã phục hồi" + "message": "Mã khôi phục" }, "authenticatorAppTitle": { - "message": "Ứng dụng Authenticator" + "message": "Ứng dụng xác thực" }, "authenticatorAppDescV2": { "message": "Nhập mã được tạo bởi ứng dụng xác thực như Bitwarden Authenticator.", @@ -1537,7 +1543,7 @@ "description": "'Duo Security' and 'Duo Mobile' are product names and should not be translated." }, "duoOrganizationDesc": { - "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.", + "message": "Xác minh với Duo Security cho tổ chức của bạn bằng ứng dụng Duo Mobile, tin nhắn SMS, cuộc gọi điện thoại hoặc khóa bảo mật U2F.", "description": "'Duo Security' and 'Duo Mobile' are product names and should not be translated." }, "webAuthnTitle": { @@ -1556,13 +1562,13 @@ "message": "Môi trường tự lưu trữ" }, "selfHostedBaseUrlHint": { - "message": "Nhập địa chỉ cơ sở của bản cài đặt Bitwarden được lưu trữ tại máy chủ của bạn. Ví dụ: https://bitwarden.company.com" + "message": "Nhập URL cơ sở của cài đặt Bitwarden được lưu trữ trên máy chủ nội bộ của bạn. Ví dụ: https://bitwarden.company.com" }, "selfHostedCustomEnvHeader": { "message": "Đối với cấu hình nâng cao. Bạn có thể chỉ định địa chỉ cơ sở của mỗi dịch vụ một cách độc lập." }, "selfHostedEnvFormInvalid": { - "message": "Bạn phải thêm địa chỉ máy chủ cơ sở hoặc ít nhất một môi trường tùy chỉnh." + "message": "Bạn phải thêm URL máy chủ cơ sở hoặc ít nhất một môi trường tùy chỉnh." }, "customEnvironment": { "message": "Môi trường tùy chỉnh" @@ -1571,11 +1577,11 @@ "message": "URL máy chủ" }, "selfHostBaseUrl": { - "message": "Self-host server URL", + "message": "URL máy chủ tự lưu trữ", "description": "Label for field requesting a self-hosted integration service URL" }, "apiUrl": { - "message": "Địa chỉ API máy chủ" + "message": "Địa chỉ máy chủ API" }, "webVaultUrl": { "message": "URL máy chủ của trang web kho lưu trữ" @@ -1584,29 +1590,29 @@ "message": "URL máy chủ nhận dạng" }, "notificationsUrl": { - "message": "Notifications Server URL" + "message": "URL máy chủ thông báo" }, "iconsUrl": { - "message": "Biểu tượng địa chỉ máy chủ" + "message": "URL máy chủ biểu tượng" }, "environmentSaved": { - "message": "Địa chỉ môi trường đã được lưu." + "message": "Các URL môi trường đã được lưu" }, "showAutoFillMenuOnFormFields": { "message": "Hiển thị menu tự động điền trên các trường biểu mẫu", "description": "Represents the message for allowing the user to enable the autofill overlay" }, "autofillSuggestionsSectionTitle": { - "message": "Các gợi ý điền tự động" + "message": "Các gợi ý tự động điền" }, "autofillSpotlightTitle": { - "message": "Easily find autofill suggestions" + "message": "Dễ dàng tìm các gợi ý tự động điền" }, "autofillSpotlightDesc": { - "message": "Turn off your browser's autofill settings, so they don't conflict with Bitwarden." + "message": "Tắt cài đặt tự động điền của trình duyệt để tránh xung đột với Bitwarden." }, "turnOffBrowserAutofill": { - "message": "Turn off $BROWSER$ autofill", + "message": "Tắt tính năng tự động điền của $BROWSER$", "placeholders": { "browser": { "content": "$1", @@ -1615,16 +1621,16 @@ } }, "turnOffAutofill": { - "message": "Turn off autofill" + "message": "Tắt tự động điền" }, "showInlineMenuLabel": { "message": "Hiển thị các gợi ý tự động điền trên các trường biểu mẫu" }, "showInlineMenuIdentitiesLabel": { - "message": "Display identities as suggestions" + "message": "Hiển thị danh tính dưới dạng gợi ý" }, "showInlineMenuCardsLabel": { - "message": "Display cards as suggestions" + "message": "Hiển thị thẻ dưới dạng gợi ý" }, "showInlineMenuOnIconSelectionLabel": { "message": "Hiện gợi ý khi nhấp vào biểu tượng" @@ -1687,22 +1693,22 @@ "message": "Không tự động điền khi tải trang" }, "commandOpenPopup": { - "message": "Mở popup kho" + "message": "Mở cửa sổ popup kho" }, "commandOpenSidebar": { - "message": "Mở kho ở thanh bên" + "message": "Mở kho trong thanh bên" }, "commandAutofillLoginDesc": { - "message": "Autofill the last used login for the current website" + "message": "Tự động điền thông tin đăng nhập gần đây nhất cho trang web hiện tại" }, "commandAutofillCardDesc": { - "message": "Autofill the last used card for the current website" + "message": "Tự động điền thẻ đã sử dụng gần đây cho trang web hiện tại" }, "commandAutofillIdentityDesc": { - "message": "Autofill the last used identity for the current website" + "message": "Điền tự động danh tính đã sử dụng lần cuối cho trang web hiện tại" }, "commandGeneratePasswordDesc": { - "message": "Tạo và sao chép một mật khẩu ngẫu nhiên mới vào khay nhớ tạm" + "message": "Tạo và sao chép một mật khẩu ngẫu nhiên mới vào bảng nhớ tạm" }, "commandLockVaultDesc": { "message": "Khoá kho" @@ -1723,7 +1729,7 @@ "message": "Kéo để sắp xếp" }, "dragToReorder": { - "message": "Drag to reorder" + "message": "Kéo để sắp xếp lại" }, "cfTypeText": { "message": "Văn bản" @@ -1735,7 +1741,7 @@ "message": "Đúng/Sai" }, "cfTypeCheckbox": { - "message": "Ô tích chọn" + "message": "Hộp chọn" }, "cfTypeLinked": { "message": "Đã liên kết", @@ -1869,7 +1875,7 @@ "message": "Số hộ chiếu" }, "licenseNumber": { - "message": "Số giấy phép" + "message": "Số giấy phép lái xe" }, "email": { "message": "Email" @@ -1890,7 +1896,7 @@ "message": "Địa chỉ 3" }, "cityTown": { - "message": "Quận/Huyện/Thị trấn" + "message": "Xã / Phường" }, "stateProvince": { "message": "Tỉnh/Thành Phố" @@ -1920,7 +1926,10 @@ "message": "Danh tính" }, "typeSshKey": { - "message": "SSH key" + "message": "Khóa SSH" + }, + "typeNote": { + "message": "Ghi chú" }, "newItemHeader": { "message": "$TYPE$ mới", @@ -1953,13 +1962,13 @@ "message": "Lịch sử mật khẩu" }, "generatorHistory": { - "message": "Generator history" + "message": "Lịch sử trình tạo" }, "clearGeneratorHistoryTitle": { - "message": "Clear generator history" + "message": "Dọn dẹp lịch sử trình tạo" }, "cleargGeneratorHistoryDescription": { - "message": "If you continue, all entries will be permanently deleted from generator's history. Are you sure you want to continue?" + "message": "Nếu bạn tiếp tục, tất cả các mục sẽ bị xóa vĩnh viễn khỏi lịch sử của trình tạo. Bạn có chắc chắn muốn tiếp tục không?" }, "back": { "message": "Quay lại" @@ -1998,7 +2007,7 @@ "message": "Ghi chú bảo mật" }, "sshKeys": { - "message": "SSH Keys" + "message": "Khóa SSH" }, "clear": { "message": "Xoá", @@ -2017,14 +2026,14 @@ } }, "passwordSafe": { - "message": "Mật khẩu này không được tìm thấy trong bất kỳ báo cáo lộ lọt dữ liệu nào được biết đến. Bạn có thể tiếp tục sử dụng nó." + "message": "Không tìm thấy mật khẩu này trong các vụ rò rỉ dữ liệu trước đây. Nó an toàn để sử dụng." }, "baseDomain": { "message": "Tên miền cơ sở", "description": "Domain name. Ex. website.com" }, "baseDomainOptionRecommended": { - "message": "Base domain (recommended)", + "message": "Tên miền gốc (được khuyến nghị)", "description": "Domain name. Ex. website.com" }, "domainName": { @@ -2057,11 +2066,11 @@ "message": "Bật/tắt tùy chọn" }, "toggleCurrentUris": { - "message": "Bật/tắt URI hiện tại", + "message": "Bật/tắt đường dẫn hiện tại", "description": "Toggle the display of the URIs of the currently open tabs in the browser." }, "currentUri": { - "message": "URI hiện tại", + "message": "Đường dẫn hiện tại", "description": "The URI of one of the current open tabs in the browser." }, "organization": { @@ -2081,10 +2090,10 @@ "message": "Xóa lịch sử" }, "nothingToShow": { - "message": "Nothing to show" + "message": "Không có gì để hiển thị" }, "nothingGeneratedRecently": { - "message": "You haven't generated anything recently" + "message": "Bạn chưa tạo gì gần đây" }, "remove": { "message": "Xoá" @@ -2101,17 +2110,17 @@ "description": "ex. Date this item was created" }, "datePasswordUpdated": { - "message": "Đã cập nhật mật khẩu", + "message": "Mật khẩu được cập nhật lần cuối", "description": "ex. Date this password was updated" }, "neverLockWarning": { "message": "Bạn có chắc chắn muốn chọn \"Không bao giờ\" không? Lựa chọn này sẽ lưu khóa mã hóa kho của bạn trực tiếp trên thiết bị. Hãy nhớ bảo vệ thiết bị của bạn thật cẩn thận nếu bạn chọn tùy chọn này." }, "noOrganizationsList": { - "message": "You do not belong to any organizations. Organizations allow you to securely share items with other users." + "message": "Bạn chưa thuộc tổ chức nào. Tổ chức sẽ cho phép bạn chia sẻ các mục với người dùng khác một cách bảo mật." }, "noCollectionsInList": { - "message": "Không có bộ sưu tập nào để liệt kê." + "message": "Không có bộ sưu tập nào." }, "ownership": { "message": "Quyền sở hữu" @@ -2135,7 +2144,7 @@ "message": "Mật khẩu chính yếu" }, "weakMasterPasswordDesc": { - "message": "Mật khẩu chính bạn vừa chọn có vẻ yếu. Bạn nên chọn mật khẩu chính (hoặc cụm từ mật khẩu) mạnh để bảo vệ đúng cách tài khoản Bitwarden của bạn. Bạn có thực sự muốn dùng mật khẩu chính này?" + "message": "Mật khẩu chính bạn vừa chọn hơi yếu. Bạn nên chọn mật khẩu chính mạnh(hoặc một cụm mật khẩu) để bảo vệ tài khoản Bitwarden của mình một cách an toàn. Bạn có thực sự muốn dùng mật khẩu chính này không?" }, "pin": { "message": "Mã PIN", @@ -2145,34 +2154,34 @@ "message": "Mở khóa bằng mã PIN" }, "setYourPinTitle": { - "message": "Set PIN" + "message": "Thiết lập mã PIN" }, "setYourPinButton": { - "message": "Set PIN" + "message": "Thiết lập mã PIN" }, "setYourPinCode": { - "message": "Đặt mã PIN của bạn để mở khóa Bitwarden. Cài đặt mã PIN của bạn sẽ bị xóa nếu bạn hoàn toàn đăng xuất khỏi ứng dụng." + "message": "Đặt mã PIN của bạn để mở khóa Bitwarden. Cài đặt mã PIN của bạn sẽ bị xóa nếu bạn đăng xuất hoàn toàn khỏi ứng dụng." }, - "setYourPinCode1": { - "message": "Your PIN will be used to unlock Bitwarden instead of your master password. Your PIN will reset if you ever fully log out of Bitwarden." + "setPinCode": { + "message": "Bạn có thể sử dụng mã PIN này để mở khóa Bitwarden. Mã PIN của bạn sẽ được đặt lại nếu bạn đăng xuất hoàn toàn khỏi ứng dụng." }, "pinRequired": { "message": "Mã PIN là bắt buộc." }, "invalidPin": { - "message": "Mã PIN không hợp lệ." + "message": "Mã PIN không chính xác." }, "tooManyInvalidPinEntryAttemptsLoggingOut": { - "message": "Mã PIN bị gõ sai quá nhiều lần. Đang đăng xuất." + "message": "Gõ sai mã PIN quá nhiều lần. Đang đăng xuất." }, "unlockWithBiometrics": { "message": "Mở khóa bằng sinh trắc học" }, "unlockWithMasterPassword": { - "message": "Unlock with master password" + "message": "Mở khóa bằng mật khẩu chính" }, "awaitDesktop": { - "message": "Đợi xác nhận từ máy tính" + "message": "Đang chờ xác nhận từ máy tính" }, "awaitDesktopDesc": { "message": "Vui lòng xác nhận sử dụng sinh trắc học với ứng dụng Bitwarden trên máy tính." @@ -2181,7 +2190,7 @@ "message": "Khóa với mật khẩu chính khi trình duyệt khởi động lại" }, "lockWithMasterPassOnRestart1": { - "message": "Require master password on browser restart" + "message": "Yêu cầu nhập mật khẩu chính khi khởi động lại trình duyệt" }, "selectOneCollection": { "message": "Bạn phải chọn ít nhất một bộ sưu tập." @@ -2196,36 +2205,39 @@ "message": "Trình tạo mật khẩu" }, "usernameGenerator": { - "message": "Bộ tạo tên người dùng" + "message": "Trình tạo tên đăng nhập" }, "useThisEmail": { - "message": "Use this email" + "message": "Dùng email này" }, "useThisPassword": { - "message": "Use this password" + "message": "Dùng mật khẩu này" + }, + "useThisPassphrase": { + "message": "Dùng cụm mật khẩu này" }, "useThisUsername": { - "message": "Use this username" + "message": "Dùng tên đăng nhập này" }, "securePasswordGenerated": { - "message": "Secure password generated! Don't forget to also update your password on the website." + "message": "Mật khẩu an toàn đã được tạo! Đừng quên cập nhật mật khẩu của bạn trên trang web." }, "useGeneratorHelpTextPartOne": { - "message": "Use the generator", + "message": "Sử dụng trình tạo", "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'" }, "useGeneratorHelpTextPartTwo": { - "message": "to create a strong unique password", + "message": "để tạo một mật khẩu mạnh và duy nhất", "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": "Tùy chỉnh kho" }, "vaultTimeoutAction": { - "message": "Hành động khi hết thời gian chờ của kho lưu trữ" + "message": "Hành động sau khi đóng kho" }, "vaultTimeoutAction1": { - "message": "Timeout action" + "message": "Hành động sau khi đóng kho" }, "lock": { "message": "Khóa", @@ -2236,7 +2248,7 @@ "description": "Noun: a special folder to hold deleted items" }, "searchTrash": { - "message": "Tìm kiếm thùng rác" + "message": "Tìm kiếm trong thùng rác" }, "permanentlyDeleteItem": { "message": "Xoá vĩnh viễn mục" @@ -2257,34 +2269,34 @@ "message": "Bạn đã có tài khoản?" }, "vaultTimeoutLogOutConfirmation": { - "message": "Đăng xuất sẽ xóa tất cả quyền truy cập vào kho của bạn và yêu cầu xác minh trực tuyến sau khi hết thời gian chờ. Bạn có chắc chắn muốn sử dụng cài đặt này không?" + "message": "Đăng xuất sẽ xóa toàn bộ quyền truy cập vào kho của bạn và yêu cầu xác minh lại sau khi đóng kho. Bạn có chắc chắn muốn sử dụng cài đặt này không?" }, "vaultTimeoutLogOutConfirmationTitle": { - "message": "Xác nhận hành động khi hết thời gian chờ" + "message": "Xác nhận hành động sau khi đóng kho" }, "autoFillAndSave": { - "message": "Tự động điền và Lưu" + "message": "Tự động điền và lưu" }, "fillAndSave": { "message": "Điền và lưu" }, "autoFillSuccessAndSavedUri": { - "message": "Đã tự động điền mục và lưu URI" + "message": "Đã tự động điền mục và lưu đường dẫn" }, "autoFillSuccess": { "message": "Đã tự động điền mục " }, "insecurePageWarning": { - "message": "Cảnh báo: Đây là một trang HTTP không an toàn, và mọi thông tin bạn nhập ở đây có khả năng được xem & thay đổi bởi người khác. Thông tin Đăng nhập này ban đầu được lưu ở một trang an toàn (HTTPS)." + "message": "Cảnh báo: Đây là một trang HTTP không an toàn, và mọi thông tin bạn nhập ở đây có thể bị người khác xem và thay đổi. Thông tin Đăng nhập này ban đầu được lưu ở một trang an toàn (HTTPS)." }, "insecurePageWarningFillPrompt": { "message": "Bạn vẫn muốn điền thông tin đăng nhập?" }, "autofillIframeWarning": { - "message": "Mẫu điền thông tin này được lưu tại một tên miền khác với URI lưu tại thông tin đăng nhập của bạn. Hãy chọn OK để tiếp tục tự động điền, hoặc Hủy bỏ để dừng lại." + "message": "Biểu mẫu này được lưu trữ trên một tên miền khác với đường dẫn của thông tin đăng nhập đã lưu của bạn. Chọn OK để tự động điền thông tin, hoặc Hủy bỏ để hủy." }, "autofillIframeWarningTip": { - "message": "Để chặn cảnh báo này trong tương lai, hãy lưu URI này, $HOSTNAME$, vào thông tin đăng nhập của bạn cho trang này ở Kho Bitwarden.", + "message": "Để tránh cảnh báo này trong tương lai, hãy lưu đường dẫn này, $HOSTNAME$, vào mục đăng nhập Bitwarden cho trang web này.", "placeholders": { "hostname": { "content": "$1", @@ -2326,16 +2338,16 @@ } }, "policyInEffectUppercase": { - "message": "Chứa chữ cái in hoa" + "message": "Có chứa một hay nhiều ký tự viết hoa" }, "policyInEffectLowercase": { - "message": "Chứa một hoặc nhiều kí tự viết thường" + "message": "Có chứa một hay nhiều ký tự thường" }, "policyInEffectNumbers": { - "message": "Chứa một hoặc nhiều chữ số" + "message": "Có chứa một hay nhiều chữ số" }, "policyInEffectSpecial": { - "message": "Chứa ký tự đặc biệt $CHARS$", + "message": "Có chứa một hay nhiều ký tự đặc biệt sau $CHARS$", "placeholders": { "chars": { "content": "$1", @@ -2356,7 +2368,7 @@ "message": "bất cứ lúc nào." }, "byContinuingYouAgreeToThe": { - "message": "Nếu tiếp tục, bạn đồng ý" + "message": "Bằng cách tiếp tục, bạn đồng ý với" }, "and": { "message": "và" @@ -2365,25 +2377,25 @@ "message": "Bạn đồng ý với những điều sau khi nhấn chọn ô này:" }, "acceptPoliciesRequired": { - "message": "Điều khoản sử dụng và Chính sách quyền riêng tư chưa được đồng ý." + "message": "Bạn chưa đồng ý với Điều khoản Dịch vụ và Chính sách Bảo mật." }, "termsOfService": { - "message": "Điều khoản sử dụng" + "message": "Điều khoản dịch vụ" }, "privacyPolicy": { - "message": "Chính sách quyền riêng tư" + "message": "Chính sách bảo mật" }, "yourNewPasswordCannotBeTheSameAsYourCurrentPassword": { - "message": "Your new password cannot be the same as your current password." + "message": "Mật khẩu mới của bạn không thể giống với mật khẩu cũ." }, "hintEqualsPassword": { - "message": "Lời nhắc mật khẩu không được giống mật khẩu của bạn" + "message": "Gợi ý mật khẩu không được trùng với mật khẩu của bạn." }, "ok": { "message": "Ok" }, "errorRefreshingAccessToken": { - "message": "Lỗi làm mới khoá truy cập" + "message": "Lỗi cập nhật token truy cập" }, "errorRefreshingAccessTokenDesc": { "message": "Bạn có thể đã bị đăng xuất. Vui lòng đăng xuất và đăng nhập lại." @@ -2392,43 +2404,43 @@ "message": "Xác minh đồng bộ máy tính" }, "desktopIntegrationVerificationText": { - "message": "Vui lòng xác minh ứng dụng trên máy tính hiển thị cụm vân tay này: " + "message": "Vui lòng xác minh ứng dụng trên máy tính hiển thị cụm từ xác thực này: " }, "desktopIntegrationDisabledTitle": { - "message": "Tích hợp trình duyệt chưa được kích hoạt" + "message": "Tích hợp trình duyệt chưa được thiết lập" }, "desktopIntegrationDisabledDesc": { - "message": "Tích hợp trình duyệt không được thiết lập trong ứng dụng máy tính để bàn Bitwarden. Vui lòng thiết lập nó trong cài đặt trong ứng dụng máy tính để bàn." + "message": "Tính năng tích hợp trình duyệt chưa được thiết lập trong ứng dụng Bitwarden trên máy tính. Vui lòng thiết lập tính năng này trong phần cài đặt của ứng dụng trên máy tính." }, "startDesktopTitle": { "message": "Mở ứng dụng Bitwarden trên máy tính" }, "startDesktopDesc": { - "message": "Ứng dụng máy tính để bàn Bitwarden cần được khởi động trước khi có thể sử dụng tính năng mở khóa bằng sinh trắc học." + "message": "Ứng dụng Bitwarden trên máy tính cần được khởi động trước khi có thể sử dụng tính năng mở khóa bằng sinh trắc học." }, "errorEnableBiometricTitle": { - "message": "Không thể bật nhận dạng sinh trắc học" + "message": "Không thể thiết lập nhận dạng sinh trắc học" }, "errorEnableBiometricDesc": { - "message": "Hành động đã bị hủy bởi ứng dụng máy tính để bàn" + "message": "Hành động đã bị hủy bởi ứng dụng trên máy tính" }, "nativeMessagingInvalidEncryptionDesc": { - "message": "Ứng dụng máy tính để bàn đã vô hiệu hóa kênh liên lạc an toàn. Vui lòng thử lại thao tác này" + "message": "Ứng dụng trên máy tính đã vô hiệu hóa kênh liên lạc an toàn. Vui lòng thử lại thao tác này" }, "nativeMessagingInvalidEncryptionTitle": { - "message": "Giao tiếp máy tính để bàn bị gián đoạn" + "message": "Giao tiếp với ứng dụng trên máy tính bị gián đoạn" }, "nativeMessagingWrongUserDesc": { - "message": "Ứng dụng máy tính để bàn được đăng nhập vào một tài khoản khác. Hãy đảm bảo cả hai ứng dụng được đăng nhập vào cùng một tài khoản." + "message": "Ứng dụng trên máy tính đang đăng nhập vào một tài khoản khác. Hãy đảm bảo cả hai ứng dụng được đăng nhập vào cùng một tài khoản." }, "nativeMessagingWrongUserTitle": { - "message": "Tài khoản không đúng" + "message": "Không khớp tài khoản" }, "nativeMessagingWrongUserKeyTitle": { - "message": "Biometric key missmatch" + "message": "Khóa sinh trắc học không khớp" }, "nativeMessagingWrongUserKeyDesc": { - "message": "Biometric unlock failed. The biometric secret key failed to unlock the vault. Please try to set up biometrics again." + "message": "Mở khóa bằng sinh trắc học thất bại. Khóa sinh trắc học không thể mở khóa kho. Vui lòng thử thiết lập lại sinh trắc học." }, "biometricsNotEnabledTitle": { "message": "Sinh trắc học chưa được cài đặt" @@ -2449,31 +2461,31 @@ "message": "Vui lòng mở khóa người dùng này trong ứng dụng máy tính và thử lại." }, "biometricsNotAvailableTitle": { - "message": "Biometric unlock unavailable" + "message": "Mở khóa bằng sinh trắc học không khả dụng" }, "biometricsNotAvailableDesc": { - "message": "Biometric unlock is currently unavailable. Please try again later." + "message": "Mở khóa bằng sinh trắc học hiện không khả dụng. Vui lòng thử lại sau." }, "biometricsFailedTitle": { - "message": "Sinh trắc học không thành công" + "message": "Xác thực sinh trắc học thất bại" }, "biometricsFailedDesc": { - "message": "Không thể hoàn thành sinh trắc học, hãy cân nhắc sử dụng mật khẩu chính hoặc đăng xuất. Nếu sự cố vẫn tiếp diễn, vui lòng liên hệ bộ phận hỗ trợ của Bitwarden." + "message": "Không thể xác thực sinh trắc học, hãy cân nhắc sử dụng mật khẩu chính hoặc đăng xuất. Nếu sự cố vẫn tiếp diễn, vui lòng liên hệ bộ phận hỗ trợ của Bitwarden." }, "nativeMessaginPermissionErrorTitle": { - "message": "Quyền chưa được cấp" + "message": "Chưa được cấp quyền" }, "nativeMessaginPermissionErrorDesc": { - "message": "Nếu không được phép giao tiếp với Ứng dụng máy tính để bàn Bitwarden, chúng tôi không thể cung cấp sinh trắc học trong tiện ích mở rộng trình duyệt. Vui lòng thử lại." + "message": "Nếu không được phép giao tiếp với Ứng dụng Bitwarden trên máy tính, chúng tôi không thể cung cấp tính năng sinh trắc học trong tiện ích mở rộng trình duyệt. Vui lòng thử lại." }, "nativeMessaginPermissionSidebarTitle": { - "message": "Lỗi yêu cầu quyền" + "message": "Lỗi yêu cầu quyền truy cập" }, "nativeMessaginPermissionSidebarDesc": { "message": "Không thể thực hiện hành động này trong thanh bên, vui lòng thử lại hành động trong cửa sổ bật lên hoặc cửa sổ bật ra." }, "personalOwnershipSubmitError": { - "message": "Do Chính sách doanh nghiệp, bạn bị hạn chế lưu các mục vào kho tiền cá nhân của mình. Thay đổi tùy chọn Quyền sở hữu thành một tổ chức và chọn từ các bộ sưu tập có sẵn." + "message": "Do chính sách của doanh nghiệp, bạn không thể lưu trữ các mục vào kho cá nhân của mình. Hãy thay đổi tùy chọn Quyền sở hữu thành tổ chức và chọn từ các bộ sưu tập có sẵn." }, "personalOwnershipPolicyInEffect": { "message": "Chính sách của tổ chức đang ảnh hưởng đến các tùy chọn quyền sở hữu của bạn." @@ -2481,15 +2493,21 @@ "personalOwnershipPolicyInEffectImports": { "message": "Chính sách của tổ chức đã chặn việc nhập các mục vào kho cá nhân của bạn." }, + "restrictCardTypeImport": { + "message": "Không thể nhập mục thẻ" + }, + "restrictCardTypeImportDesc": { + "message": "Một chính sách được thiết lập bởi 1 hoặc nhiều tổ chức ngăn bạn nhập thẻ vào kho của mình." + }, "domainsTitle": { "message": "Các tên miền", "description": "A category title describing the concept of web domains" }, "blockedDomains": { - "message": "Blocked domains" + "message": "Tên miền đã chặn" }, "learnMoreAboutBlockedDomains": { - "message": "Learn more about blocked domains" + "message": "Tìm hiểu thêm về các tên miền bị chặn" }, "excludedDomains": { "message": "Tên miền đã loại trừ" @@ -2498,22 +2516,26 @@ "message": "Bitwarden sẽ không yêu cầu lưu thông tin đăng nhập cho các miền này. Bạn phải làm mới trang để các thay đổi có hiệu lực." }, "excludedDomainsDescAlt": { - "message": "Bitwarden sẽ không yêu cầu lưu thông tin đăng nhập cho các miền này. Bạn phải làm mới trang để các thay đổi có hiệu lực." + "message": "Bitwarden sẽ không yêu cầu lưu thông tin đăng nhập cho các tên miền này đối với tất cả tài khoản đã đăng nhập. Bạn phải làm mới trang để các thay đổi có hiệu lực." }, "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": "Tự động điền và các tính năng liên quan khác sẽ không được cung cấp cho các trang web này. Bạn phải làm mới trang để các thay đổi có hiệu lực." }, "autofillBlockedNoticeV2": { - "message": "Autofill is blocked for this website." + "message": "Tự động điền bị chặn cho trang web này." }, "autofillBlockedNoticeGuidance": { - "message": "Change this in settings" + "message": "Thay đổi điều này trong cài đặt" }, "change": { - "message": "Change" + "message": "Thay đổi" + }, + "changePassword": { + "message": "Thay đổi mật khẩu", + "description": "Change password button for browser at risk notification on login." }, "changeButtonTitle": { - "message": "Change password - $ITEMNAME$", + "message": "Thay đổi mật khẩu - $ITEMNAME$", "placeholders": { "itemname": { "content": "$1", @@ -2521,11 +2543,14 @@ } } }, + "atRiskPassword": { + "message": "Mật khẩu có rủi ro cao" + }, "atRiskPasswords": { - "message": "At-risk passwords" + "message": "Mật khẩu có rủi ro cao" }, "atRiskPasswordDescSingleOrg": { - "message": "$ORGANIZATION$ is requesting you change one password because it is at-risk.", + "message": "$ORGANIZATION$ yêu cầu bạn thay đổi mật khẩu vì mật khẩu hiện tại đang gặp rủi ro.", "placeholders": { "organization": { "content": "$1", @@ -2534,7 +2559,7 @@ } }, "atRiskPasswordsDescSingleOrgPlural": { - "message": "$ORGANIZATION$ is requesting you change the $COUNT$ passwords because they are at-risk.", + "message": "$ORGANIZATION$ yêu cầu bạn thay đổi $COUNT$ mật khẩu vì chúng đang có rủi ro.", "placeholders": { "organization": { "content": "$1", @@ -2547,7 +2572,7 @@ } }, "atRiskPasswordsDescMultiOrgPlural": { - "message": "Your organizations are requesting you change the $COUNT$ passwords because they are at-risk.", + "message": "Các tổ chức của bạn đang yêu cầu bạn thay đổi $COUNT$ mật khẩu vì chúng đang có rủi ro.", "placeholders": { "count": { "content": "$1", @@ -2555,11 +2580,31 @@ } } }, + "atRiskChangePrompt": { + "message": "Mật khẩu của bạn cho trang web này đang gặp rủi ro. $ORGANIZATION$ đã yêu cầu bạn thay đổi mật khẩu.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + }, + "description": "Notification body when a login triggers an at-risk password change request and the change password domain is known." + }, + "atRiskNavigatePrompt": { + "message": "$ORGANIZATION$ yêu cầu bạn thay đổi mật khẩu này vì nó đang gặp rủi ro. Vui lòng truy cập vào cài đặt tài khoản của bạn để thay đổi mật khẩu.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + }, + "description": "Notification body when a login triggers an at-risk password change request and no change password domain is provided." + }, "reviewAndChangeAtRiskPassword": { - "message": "Review and change one at-risk password" + "message": "Kiểm tra và thay đổi một mật khẩu có rủi ro cao" }, "reviewAndChangeAtRiskPasswordsPlural": { - "message": "Review and change $COUNT$ at-risk passwords", + "message": "Kiểm tra và thay đổi $COUNT$ mật khẩu có rủi ro cao", "placeholders": { "count": { "content": "$1", @@ -2568,52 +2613,52 @@ } }, "changeAtRiskPasswordsFaster": { - "message": "Change at-risk passwords faster" + "message": "Thay đổi mật khẩu có rủi ro bị lộ nhanh hơn" }, "changeAtRiskPasswordsFasterDesc": { - "message": "Update your settings so you can quickly autofill your passwords and generate new ones" + "message": "Cập nhật cài đặt của bạn để bạn có thể tự động điền và tạo mật khẩu mới nhanh chóng" }, "reviewAtRiskLogins": { - "message": "Review at-risk logins" + "message": "Xem lại các lần đăng nhập có nguy cơ cao" }, "reviewAtRiskPasswords": { - "message": "Review at-risk passwords" + "message": "Xem lại các mật khẩu có rủi ro cao" }, "reviewAtRiskLoginsSlideDesc": { - "message": "Your organization passwords are at-risk because they are weak, reused, and/or exposed.", + "message": "Mật khẩu của tổ chức bạn đang gặp rủi ro vì độ mạnh yếu, được sử dụng lại và/hoặc bị lộ.", "description": "Description of the review at-risk login slide on the at-risk password page carousel" }, "reviewAtRiskLoginSlideImgAltPeriod": { - "message": "Illustration of a list of logins that are at-risk." + "message": "Minh họa danh sách các tài khoản đăng nhập có rủi ro." }, "generatePasswordSlideDesc": { - "message": "Quickly generate a strong, unique password with the Bitwarden autofill menu on the at-risk site.", + "message": "Tạo nhanh một mật khẩu mạnh, duy nhất bằng menu tự động điền của Bitwarden trên trang web có nguy cơ.", "description": "Description of the generate password slide on the at-risk password page carousel" }, "generatePasswordSlideImgAltPeriod": { - "message": "Illustration of the Bitwarden autofill menu displaying a generated password." + "message": "Minh họa menu tự điền mật khẩu của Bitwarden hiển thị một mật khẩu được tạo ra." }, "updateInBitwarden": { - "message": "Update in Bitwarden" + "message": "Cập nhật trong Bitwarden" }, "updateInBitwardenSlideDesc": { - "message": "Bitwarden will then prompt you to update the password in the password manager.", + "message": "Bitwarden sau đó sẽ yêu cầu bạn cập nhật mật khẩu trong trình quản lý mật khẩu.", "description": "Description of the update in Bitwarden slide on the at-risk password page carousel" }, "updateInBitwardenSlideImgAltPeriod": { - "message": "Illustration of a Bitwarden’s notification prompting the user to update the login." + "message": "Minh họa thông báo của Bitwarden yêu cầu người dùng cập nhật thông tin đăng nhập." }, "turnOnAutofill": { - "message": "Turn on autofill" + "message": "Bật tự động điền" }, "turnedOnAutofill": { - "message": "Turned on autofill" + "message": "Đã bật tự động điền" }, "dismiss": { - "message": "Dismiss" + "message": "Bỏ qua" }, "websiteItemLabel": { - "message": "Trang Web $number$ (URI)", + "message": "Trang web $number$ (URI)", "placeholders": { "number": { "content": "$1", @@ -2631,20 +2676,20 @@ } }, "blockedDomainsSavedSuccess": { - "message": "Blocked domain changes saved" + "message": "Đã lưu thay đổi tên miền bị chặn" }, "excludedDomainsSavedSuccess": { - "message": "Các thay đổi tên miền loại trừ đã được lưu" + "message": "Thay đổi tên miền bị loại trừ đã được lưu" }, "limitSendViews": { - "message": "Limit views" + "message": "Giới hạn số lượt xem" }, "limitSendViewsHint": { - "message": "No one can view this Send after the limit is reached.", + "message": "Không ai có thể xem mục Gửi này sau khi đạt đến giới hạn.", "description": "Displayed under the limit views field on Send" }, "limitSendViewsCount": { - "message": "$ACCESSCOUNT$ views left", + "message": "$ACCESSCOUNT$ lượt xem còn lại", "description": "Displayed under the limit views field on Send", "placeholders": { "accessCount": { @@ -2654,28 +2699,32 @@ } }, "send": { - "message": "Gửi", + "message": "Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "sendDetails": { - "message": "Send details", + "message": "Chi tiết Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "sendTypeText": { "message": "Văn bản" }, "sendTypeTextToShare": { - "message": "Text to share" + "message": "Nội dung chia sẻ" }, "sendTypeFile": { "message": "Tập tin" }, "allSends": { - "message": "Tất cả mục Gửi", + "message": "Toàn bộ Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "maxAccessCountReached": { + "message": "Đã vượt số lần truy cập tối đa", + "description": "This text will be displayed after a Send has been accessed the maximum amount of times." + }, "hideTextByDefault": { - "message": "Hide text by default" + "message": "Mặc định ẩn văn bản" }, "expired": { "message": "Đã hết hạn" @@ -2687,7 +2736,7 @@ "message": "Sao chép liên kết" }, "copySendLink": { - "message": "Sao chép liên kết mục Gửi", + "message": "Sao chép liên kết Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "removePassword": { @@ -2700,11 +2749,11 @@ "message": "Đã xóa mật khẩu" }, "deletedSend": { - "message": "Đã xóa mục Gửi", + "message": "Đã xóa Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "sendLink": { - "message": "Liên kết Gửi", + "message": "Liên kết Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "disabled": { @@ -2714,26 +2763,26 @@ "message": "Bạn có chắc chắn muốn xóa mật khẩu này không?" }, "deleteSend": { - "message": "Xóa mục Gửi", + "message": "Xóa Send", "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 mục Gửi này?", + "message": "Bạn có chắc chắn muốn xóa Send này?", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "deleteSendPermanentConfirmation": { - "message": "Are you sure you want to permanently delete this Send?", + "message": "Bạn có chắc chắn muốn xóa vĩnh viễn Send này không?", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "editSend": { - "message": "Sửa mục Gửi", + "message": "Chỉnh sửa Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "deletionDate": { "message": "Ngày xóa" }, "deletionDateDescV2": { - "message": "The Send will be permanently deleted on this date.", + "message": "Send sẽ được xóa vĩnh viễn vào ngày này.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "expirationDate": { @@ -2755,11 +2804,11 @@ "message": "Tùy chỉnh" }, "sendPasswordDescV3": { - "message": "Add an optional password for recipients to access this Send.", + "message": "Thêm mật khẩu tùy chọn cho người nhận để có thể truy cập vào Send này.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "createSend": { - "message": "Send mới", + "message": "Tạo Send mới", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "newPassword": { @@ -2770,23 +2819,23 @@ "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "sendDisabledWarning": { - "message": "Do chính sách doanh nghiệp, bạn chỉ có thể xóa những mục Gửi hiện có.", + "message": "Do chính sách doanh nghiệp, bạn chỉ có thể xóa những Send hiện có.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "createdSend": { - "message": "Đã tạo mục Gửi", + "message": "Đã tạo Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "createdSendSuccessfully": { - "message": "Send created successfully!", + "message": "Đã tạo Send thành công!", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "sendExpiresInHoursSingle": { - "message": "The Send will be available to anyone with the link for the next 1 hour.", + "message": "Send này sẽ được cung cấp cho bất kỳ ai có liên kết trong 1 giờ tới.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "sendExpiresInHours": { - "message": "The Send will be available to anyone with the link for the next $HOURS$ hours.", + "message": "Send này sẽ được cung cấp cho bất kỳ ai có liên kết trong $HOURS$ giờ tới.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.", "placeholders": { "hours": { @@ -2796,11 +2845,11 @@ } }, "sendExpiresInDaysSingle": { - "message": "The Send will be available to anyone with the link for the next 1 day.", + "message": "Send này sẽ được cung cấp cho bất kỳ ai có liên kết trong 1 ngày tới.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "sendExpiresInDays": { - "message": "The Send will be available to anyone with the link for the next $DAYS$ days.", + "message": "Send này sẽ được cung cấp cho bất kỳ ai có liên kết trong $DAYS$ ngày tới.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.", "placeholders": { "days": { @@ -2810,32 +2859,32 @@ } }, "sendLinkCopied": { - "message": "Send link copied", + "message": "Đã sao chép liên kết Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "editedSend": { - "message": "Đã lưu mục Gửi", + "message": "Đã lưu Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "sendFilePopoutDialogText": { - "message": "Pop out extension?", + "message": "Mở rộng tiện ích ra cửa sổ mới?", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "sendFilePopoutDialogDesc": { - "message": "To create a file Send, you need to pop out the extension to a new window.", + "message": "Để tạo Send tập tin, bạn cần mở phần mở rộng trong cửa sổ mới.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "sendLinuxChromiumFileWarning": { - "message": "Để chọn tập tin, mở tiện ích mở rộng trong thanh bên (nếu có thể) hoặc mở ra cửa sổ mới bằng cách nhấp vào biểu ngữ này." + "message": "Để chọn tập tin, mở tiện ích mở rộng trong thanh bên (nếu có thể) hoặc mở cửa sổ mới bằng cách nhấp vào biểu ngữ này." }, "sendFirefoxFileWarning": { - "message": "Để chọn tập tin bằng Firefox, mở tiện ích mở rộng trong thanh bên hoặc mở ra cửa sổ mới bằng cách nhấp vào biểu ngữ này." + "message": "Để chọn tập tin bằng Firefox, mở tiện ích mở rộng trong thanh bên hoặc mở cửa sổ mới bằng cách nhấp vào biểu ngữ này." }, "sendSafariFileWarning": { - "message": "Để chọn tập tin bằng Safari, mở ra cửa sổ mới bằng cách nhấp vào biểu ngữ này." + "message": "Để chọn tập tin bằng Safari, mở cửa sổ mới bằng cách nhấp vào biểu ngữ này." }, "popOut": { - "message": "Pop out" + "message": "Mở rộng" }, "sendFileCalloutHeader": { "message": "Trước khi bạn bắt đầu" @@ -2856,10 +2905,10 @@ "message": "Đã xảy ra lỗi khi lưu ngày xoá và ngày hết hạn của bạn." }, "hideYourEmail": { - "message": "Hide your email address from viewers." + "message": "Ẩn địa chỉ email của bạn với người xem." }, "passwordPrompt": { - "message": "Nhắc lại mật khẩu chính" + "message": "Nhập lại mật khẩu chính" }, "passwordConfirmation": { "message": "Xác nhận mật khẩu chính" @@ -2868,13 +2917,16 @@ "message": "Hành động này được bảo vệ. Để tiếp tục, hãy nhập lại mật khẩu chính của bạn để xác minh danh tính." }, "emailVerificationRequired": { - "message": "Yêu cầu xác nhận danh tính qua email" + "message": "Yêu cầu xác minh danh tính qua email" }, "emailVerifiedV2": { "message": "Email đã xác minh" }, "emailVerificationRequiredDesc": { - "message": "Bạn phải xác nhận email để sử dụng tính năng này. Bạn có thể xác minh email trên web." + "message": "Bạn phải xác minh email để sử dụng tính năng này. Bạn có thể xác minh email trên web." + }, + "masterPasswordSuccessfullySet": { + "message": "Mật khẩu chính được thiết lập thành công" }, "updatedMasterPassword": { "message": "Đã cập nhật mật khẩu chính" @@ -2883,13 +2935,13 @@ "message": "Cập nhật mật khẩu chính" }, "updateMasterPasswordWarning": { - "message": "Mật khẩu chính của bạn gần đây đã được thay đổi bởi người quản trị trong tổ chức của bạn. Để truy cập kho, bạn phải cập nhật nó ngay bây giờ. Việc tiếp tục sẽ đăng xuất khỏi kho và bạn sẽ cần đăng nhập lại. Ứng dụng Bitwaden trên các thiết bị khác có thể tiếp tục hoạt động trong tối đa một giờ sau đó sẽ bị đăng xuất." + "message": "Mật khẩu chính của bạn gần đây đã được thay đổi bởi người quản trị trong tổ chức của bạn. Để truy cập kho, bạn phải cập nhật mật khẩu chính của mình ngay bây giờ. Việc tiếp tục sẽ đăng xuất khỏi kho và bạn sẽ cần đăng nhập lại. Ứng dụng Bitwaden trên các thiết bị khác có thể tiếp tục hoạt động trong tối đa một giờ sau đó sẽ bị đăng xuất." }, "updateWeakMasterPasswordWarning": { "message": "Mật khẩu chính của bạn không đáp ứng chính sách tổ chức của bạn. Để truy cập kho, bạn phải cập nhật mật khẩu chính của mình ngay bây giờ. Việc tiếp tục sẽ đăng xuất bạn khỏi phiên hiện tại và bắt buộc đăng nhập lại. Các phiên hoạt động trên các thiết bị khác có thể tiếp tục duy trì hoạt động trong tối đa một giờ." }, "tdeDisabledMasterPasswordRequired": { - "message": "Tổ chức của bạn đã vô hiệu hóa mã hóa bằng thiết bị đáng tin cậy. Vui lòng đặt mật khẩu chính để truy cập Kho của bạn." + "message": "Tổ chức của bạn đã vô hiệu hóa tính năng mã hóa thiết bị tin cậy. Vui lòng đặt mật khẩu chính để truy cập kho của bạn." }, "resetPasswordPolicyAutoEnroll": { "message": "Đăng ký tự động" @@ -2905,15 +2957,15 @@ "description": "Used as a message within the notification bar when no folders are found" }, "orgPermissionsUpdatedMustSetPassword": { - "message": "Quyền tổ chức của bạn đã được cập nhật, yêu cầu bạn đặt mật khẩu chính.", + "message": "Quyền truy cập của tổ chức bạn đã được cập nhật, yêu cầu bạn phải thiết lập mật khẩu chính.", "description": "Used as a card title description on the set password page to explain why the user is there" }, "orgRequiresYouToSetPassword": { - "message": "Tổ chức của bạn yêu cầu bạn đặt mật khẩu chính.", + "message": "Tổ chức của bạn yêu cầu bạn thiết lập mật khẩu chính.", "description": "Used as a card title description on the set password page to explain why the user is there" }, "cardMetrics": { - "message": "out of $TOTAL$", + "message": "trong tổng số $TOTAL$", "placeholders": { "total": { "content": "$1", @@ -2932,7 +2984,7 @@ "message": "Phút" }, "vaultTimeoutPolicyAffectingOptions": { - "message": "Enterprise policy requirements have been applied to your timeout options" + "message": "Các yêu cầu chính sách của doanh nghiệp đã được áp dụng cho các tùy chọn thời gian mở kho của bạn" }, "vaultTimeoutPolicyInEffect": { "message": "Tổ chức của bạn đã đặt thời gian mở kho tối đa là $HOURS$ giờ và $MINUTES$ phút.", @@ -2948,7 +3000,7 @@ } }, "vaultTimeoutPolicyInEffect1": { - "message": "$HOURS$ hour(s) and $MINUTES$ minute(s) maximum.", + "message": "Tối đa $HOURS$ giờ và $MINUTES$ phút.", "placeholders": { "hours": { "content": "$1", @@ -2961,7 +3013,7 @@ } }, "vaultTimeoutPolicyMaximumError": { - "message": "Timeout exceeds the restriction set by your organization: $HOURS$ hour(s) and $MINUTES$ minute(s) maximum", + "message": "Thời gian mở kho đã vượt quá giới hạn do tổ chức của bạn đặt ra: Tối đa $HOURS$ giờ và $MINUTES$ phút", "placeholders": { "hours": { "content": "$1", @@ -2974,7 +3026,7 @@ } }, "vaultTimeoutPolicyWithActionInEffect": { - "message": "Tổ chức của bạn đang ảnh hưởng đến thời gian mở kho. Thời gian mở kho tối đa là $HOURS$ giờ và $MINUTES$ phút. Kho sẽ $ACTION$ sau khi hết thời gian mở kho.", + "message": "Các chính sách của tổ chức bạn đang ảnh hưởng đến thời gian mở kho. Thời gian mở kho tối đa được phép là $HOURS$ giờ và $MINUTES$ phút. Kho sẽ $ACTION$ sau khi đóng kho.", "placeholders": { "hours": { "content": "$1", @@ -2991,7 +3043,7 @@ } }, "vaultTimeoutActionPolicyInEffect": { - "message": "Tổ chức của bạn sẽ $ACTION$ sau khi hết thời gian mở kho.", + "message": "Tổ chức bạn đã thiết lập hành động sau khi đóng kho là $ACTION$.", "placeholders": { "action": { "content": "$1", @@ -3003,25 +3055,25 @@ "message": "Thời gian mở kho vượt quá giới hạn do tổ chức của bạn đặt ra." }, "vaultExportDisabled": { - "message": "Xuất kho không có sẵn" + "message": "Chức năng xuất kho không khả dụng" }, "personalVaultExportPolicyInEffect": { "message": "Các chính sách của tổ chức ngăn cản bạn xuất kho lưu trữ cá nhân của mình." }, "copyCustomFieldNameInvalidElement": { - "message": "Không thể xác định được phần tử biểu mẫu hợp lệ. Thay vào đó hãy thử kiểm tra trong HTML." + "message": "Không thể xác định được phần tử biểu mẫu hợp lệ. Thay vào đó hãy thử kiểm tra mã HTML." }, "copyCustomFieldNameNotUnique": { "message": "Không tìm thấy danh tính duy nhất." }, "removeMasterPasswordForOrganizationUserKeyConnector": { - "message": "A master password is no longer required for members of the following organization. Please confirm the domain below with your organization administrator." + "message": "Mật khẩu chính không còn được yêu cầu đối với các thành viên của tổ chức sau đây. Vui lòng xác nhận tên miền bên dưới với quản trị viên của tổ chức." }, "organizationName": { - "message": "Organization name" + "message": "Tên tổ chức" }, "keyConnectorDomain": { - "message": "Key Connector domain" + "message": "Tên miền Key Connector" }, "leaveOrganization": { "message": "Rời tổ chức" @@ -3048,7 +3100,7 @@ "message": "Đang xuất dữ liệu kho cá nhân" }, "exportingIndividualVaultDescription": { - "message": "Chỉ dữ liệu trong kho cá nhân liên kết với $EMAIL$ mới được xuất. Không bao gồm \ncác dữ liệu trong kho tổ chức. Chỉ thông tin mục kho mới được xuất, sẽ không có các tệp đính kèm.", + "message": "Chỉ dữ liệu trong kho cá nhân liên kết với $EMAIL$ mới được xuất. Không bao gồm các dữ liệu trong kho tổ chức. Chỉ thông tin về các mục trong kho mới được xuất, sẽ không có các tệp đính kèm.", "placeholders": { "email": { "content": "$1", @@ -3057,7 +3109,7 @@ } }, "exportingIndividualVaultWithAttachmentsDescription": { - "message": "Only the individual vault items including attachments associated with $EMAIL$ will be exported. Organization vault items will not be included", + "message": "Chỉ các mục kho lưu trữ cá nhân bao gồm các tệp đính kèm liên quan đến $EMAIL$ sẽ được xuất. Các mục trong kho lưu trữ của tổ chức sẽ không được bao gồm", "placeholders": { "email": { "content": "$1", @@ -3081,27 +3133,27 @@ "message": "Lỗi" }, "decryptionError": { - "message": "Decryption error" + "message": "Lỗi giải mã" }, "couldNotDecryptVaultItemsBelow": { - "message": "Bitwarden could not decrypt the vault item(s) listed below." + "message": "Bitwarden không thể giải mã các mục trong kho lưu trữ được liệt kê bên dưới." }, "contactCSToAvoidDataLossPart1": { - "message": "Contact customer success", + "message": "Liên hệ hỗ trợ khách hàng thành công", "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": "để tránh mất mát thêm dữ liệu.", "description": "This is part of a larger sentence. The full sentence will read 'Contact customer success to avoid additional data loss.'" }, "generateUsername": { - "message": "Tạo tên người dùng" + "message": "Tạo tên đăng nhập" }, "generateEmail": { - "message": "Generate email" + "message": "Tạo email" }, "spinboxBoundariesHint": { - "message": "Value must be between $MIN$ and $MAX$.", + "message": "Giá trị phải nằm trong khoảng từ $MIN$ đến $MAX$.", "description": "Explains spin box minimum and maximum values to the user", "placeholders": { "min": { @@ -3115,7 +3167,7 @@ } }, "passwordLengthRecommendationHint": { - "message": " Use $RECOMMENDED$ characters or more to generate a strong password.", + "message": " Sử dụng ít nhất $RECOMMENDED$ ký tự để tạo một mật khẩu mạnh.", "description": "Appended to `spinboxBoundariesHint` to recommend a length to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", "placeholders": { "recommended": { @@ -3125,7 +3177,7 @@ } }, "passphraseNumWordsRecommendationHint": { - "message": " Use $RECOMMENDED$ words or more to generate a strong passphrase.", + "message": " Sử dụng ít nhất $RECOMMENDED$ từ để tạo cụm mật khẩu mạnh.", "description": "Appended to `spinboxBoundariesHint` to recommend a number of words to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", "placeholders": { "recommended": { @@ -3139,10 +3191,10 @@ "description": "Username generator option that appends a random sub-address to the username. For example: address+subaddress@email.com" }, "plusAddressedEmailDesc": { - "message": "Sử dụng khả năng địa chỉ phụ của nhà cung cấp dịch vụ mail của bạn." + "message": "Sử dụng tính năng địa chỉ phụ của nhà cung cấp dịch vụ email của bạn." }, "catchallEmail": { - "message": "Email Catch-all" + "message": "Catch-all email" }, "catchallEmailDesc": { "message": "Sử dụng hộp thư bạn đã thiết lập để nhận tất cả email gửi đến tên miền của bạn." @@ -3160,17 +3212,17 @@ "message": "Dịch vụ" }, "forwardedEmail": { - "message": "Đã chuyển tiếp bí danh email" + "message": "Địa chỉ email thay thế" }, "forwardedEmailDesc": { - "message": "Tạo bí danh email với dịch vụ chuyển tiếp bên ngoài." + "message": "Tạo một địa chỉ email ảo bằng dịch vụ chuyển tiếp email bên ngoài." }, "forwarderDomainName": { - "message": "Email domain", + "message": "Tên miền email", "description": "Labels the domain name email forwarder service option" }, "forwarderDomainNameHint": { - "message": "Choose a domain that is supported by the selected service", + "message": "Chọn một tên miền được hỗ trợ bởi dịch vụ đã chọn", "description": "Guidance provided for email forwarding services that support multiple email domains." }, "forwarderError": { @@ -3212,7 +3264,7 @@ } }, "forwaderInvalidTokenWithMessage": { - "message": "Khoá API $SERVICENAME$ không hợp lệ: $ERRORMESSAGE$", + "message": "Token API $SERVICENAME$ không hợp lệ: $ERRORMESSAGE$", "description": "Displayed when the user's API token is rejected by the forwarding service with an error message.", "placeholders": { "servicename": { @@ -3226,7 +3278,7 @@ } }, "forwaderInvalidOperation": { - "message": "$SERVICENAME$ refused your request. Please contact your service provider for assistance.", + "message": "$SERVICENAME$ đã từ chối yêu cầu của bạn. Vui lòng liên hệ với nhà cung cấp dịch vụ của bạn để được hỗ trợ.", "description": "Displayed when the user is forbidden from using the API by the forwarding service.", "placeholders": { "servicename": { @@ -3236,7 +3288,7 @@ } }, "forwaderInvalidOperationWithMessage": { - "message": "$SERVICENAME$ refused your request: $ERRORMESSAGE$", + "message": "$SERVICENAME$ đã từ chối yêu cầu của bạn: $ERRORMESSAGE$", "description": "Displayed when the user is forbidden from using the API by the forwarding service with an error message.", "placeholders": { "servicename": { @@ -3250,7 +3302,7 @@ } }, "forwarderNoAccountId": { - "message": "Không thể lấy ID tài khoản email ẩn từ $SERVICENAME$.", + "message": "Không thể lấy ID tài khoản email ẩn danh của $SERVICENAME$.", "description": "Displayed when the forwarding service fails to return an account ID.", "placeholders": { "servicename": { @@ -3310,10 +3362,10 @@ "message": "Khóa API" }, "ssoKeyConnectorError": { - "message": "Lỗi kết nối khóa: hãy đảm bảo kết nối khóa khả dụng và hoạt động chính xác." + "message": "Lỗi kết nối khóa: hãy đảm bảo kết nối khóa khả dụng và hoạt động bình thường." }, "premiumSubcriptionRequired": { - "message": "Yêu cầu đăng ký gói Premium" + "message": "Yêu cầu đăng ký gói Cao cấp" }, "organizationIsDisabled": { "message": "Tổ chức đã ngưng hoạt động." @@ -3340,7 +3392,7 @@ "message": "Bên thứ ba" }, "thirdPartyServerMessage": { - "message": "Bạn đang kết nối đến máy chủ $SERVERNAME$ của bên thứ ba. Vui lòng kiểm tra lỗi bằng cách sử dụng máy chủ chính thức hoặc báo lỗi cho bên thứ ba.", + "message": "Kết nối với máy chủ của bên thứ ba, $SERVERNAME$. Vui lòng kiểm tra lỗi trên máy chủ chính thức hoặc báo cáo lỗi cho máy chủ của bên thứ ba.", "placeholders": { "servername": { "content": "$1", @@ -3370,43 +3422,46 @@ "message": "Đăng nhập bằng thiết bị" }, "fingerprintPhraseHeader": { - "message": "Cụm vân tay" + "message": "Cụm từ xác thực" }, "fingerprintMatchInfo": { - "message": "Vui lòng đảm bảo rằng bạn đã mở khoá kho và cụm vân tay khớp trên thiết bị khác." + "message": "Vui lòng đảm bảo rằng bạn đã mở khoá kho và cụm từ xác thực khớp với thiết bị khác." }, "resendNotification": { "message": "Gửi lại thông báo" }, "viewAllLogInOptions": { - "message": "View all log in options" + "message": "Xem tất cả tùy chọn đăng nhập" }, "notificationSentDevice": { "message": "Một thông báo đã được gửi đến thiết bị của bạn." }, "notificationSentDevicePart1": { - "message": "Unlock Bitwarden on your device or on the" + "message": "Mở khóa Bitwarden trên thiết bị của bạn hoặc trên" }, "notificationSentDeviceAnchor": { - "message": "web app" + "message": "ứng dụng web" }, "notificationSentDevicePart2": { - "message": "Make sure the Fingerprint phrase matches the one below before approving." + "message": "Hãy đảm bảo rằng cụm từ xác thực khớp với cụm từ bên dưới trước khi phê duyệt." }, "aNotificationWasSentToYourDevice": { - "message": "A notification was sent to your device" + "message": "Một thông báo đã được gửi đến thiết bị của bạn" }, "youWillBeNotifiedOnceTheRequestIsApproved": { - "message": "You will be notified once the request is approved" + "message": "Bạn sẽ nhận được thông báo ngay sau khi yêu cầu được phê duyệt" }, "needAnotherOptionV1": { - "message": "Need another option?" + "message": "Cần một tùy chọn khác?" }, "loginInitiated": { "message": "Bắt đầu đăng nhập" }, "logInRequestSent": { - "message": "Request sent" + "message": "Đã gửi yêu cầu" + }, + "masterPasswordChanged": { + "message": "Đã lưu mật khẩu chính" }, "exposedMasterPassword": { "message": "Mật khẩu chính bị lộ" @@ -3415,19 +3470,19 @@ "message": "Mật khẩu này đã bị rò rỉ trong một vụ tấn công dữ liệu. Dùng mật khẩu mới và an toàn để bảo vệ tài khoản bạn. Bạn có chắc muốn sử dụng mật khẩu đã bị rò rỉ?" }, "weakAndExposedMasterPassword": { - "message": "Mật khẩu chính yếu và bị lộ" + "message": "Mật khẩu chính yếu và đã bị lộ" }, "weakAndBreachedMasterPasswordDesc": { - "message": "Mật khẩu yếu này đã bị rò rỉ trong một vụ tấn công dữ liệu. Dùng mật khẩu mới và an toàn để bảo vệ tài khoản bạn. Bạn có chắc muốn sử dụng mật khẩu đã bị rò rỉ?" + "message": "Mật khẩu yếu này đã bị rò rỉ trong một vụ tấn công dữ liệu. Hãy dùng mật khẩu mạnh và duy nhất để bảo vệ tài khoản của bạn. Bạn có chắc muốn sử dụng mật khẩu đã bị rò rỉ?" }, "checkForBreaches": { - "message": "Kiểm tra mật khẩu có lộ trong các vụ rò rỉ dữ liệu hay không" + "message": "Kiểm tra mật khẩu có bị lộ trong các vụ rò rỉ dữ liệu hay không" }, "important": { "message": "Quan trọng:" }, "masterPasswordHint": { - "message": "Mật khẩu chính của bạn không thể phục hồi nếu bạn quên nó!" + "message": "Mật khẩu chính của bạn không thể khôi phục nếu bạn quên nó!" }, "characterMinimum": { "message": "$LENGTH$ ký tự tối thiểu", @@ -3439,7 +3494,7 @@ } }, "autofillPageLoadPolicyActivated": { - "message": "Chính sách quản lí của bạn đã bật chức năng tự động điền khi tải trang." + "message": "Chính sách của tổ chức bạn đã kích hoạt tính năng tự động điền khi tải trang." }, "howToAutofill": { "message": "Cách tự đồng điền" @@ -3469,16 +3524,16 @@ "message": "Thay đổi phím tắt" }, "autofillKeyboardManagerShortcutsLabel": { - "message": "Quản lý các lối tắt" + "message": "Quản lý các phím tắt" }, "autofillShortcut": { "message": "Phím tắt tự động điền" }, "autofillLoginShortcutNotSet": { - "message": "The autofill login shortcut is not set. Change this in the browser's settings." + "message": "Chưa cài đặt phím tắt cho chức năng tự động điền. Vui lòng thay đổi trong cài đặt của trình duyệt." }, "autofillLoginShortcutText": { - "message": "The autofill login shortcut is $COMMAND$. Manage all shortcuts in the browser's settings.", + "message": "Phím tắt đăng nhập tự động là $COMMAND$. Quản lý các phím tắt trong cài đặt của trình duyệt.", "placeholders": { "command": { "content": "$1", @@ -3499,16 +3554,16 @@ "message": "Mở trong cửa sổ mới" }, "rememberThisDeviceToMakeFutureLoginsSeamless": { - "message": "Remember this device to make future logins seamless" + "message": "Nhớ thiết bị này để đăng nhập dễ dàng trong tương lai" }, "deviceApprovalRequired": { "message": "Yêu cầu phê duyệt thiết bị. Chọn một tuỳ chọn phê duyệt bên dưới:" }, "deviceApprovalRequiredV2": { - "message": "Device approval required" + "message": "Yêu cầu phê duyệt trên thiết bị" }, "selectAnApprovalOptionBelow": { - "message": "Select an approval option below" + "message": "Chọn một tùy chọn phê duyệt dưới đây" }, "rememberThisDevice": { "message": "Lưu thiết bị này" @@ -3522,6 +3577,12 @@ "requestAdminApproval": { "message": "Yêu cầu quản trị viên phê duyệt" }, + "unableToCompleteLogin": { + "message": "Không thể hoàn tất quá trình đăng nhập" + }, + "loginOnTrustedDeviceOrAskAdminToAssignPassword": { + "message": "Bạn cần đăng nhập trên một thiết bị đáng tin cậy hoặc yêu cầu quản trị viên cấp cho bạn mật khẩu." + }, "ssoIdentifierRequired": { "message": "Cần có mã định danh SSO của tổ chức." }, @@ -3532,13 +3593,13 @@ "message": "Kiểm tra email của bạn" }, "followTheLinkInTheEmailSentTo": { - "message": "Nhấp vào liên kết trong email được gửi đến" + "message": "Nhấp vào liên kết được gửi đến trong email" }, "andContinueCreatingYourAccount": { "message": "và tiếp tục tạo tài khoản của bạn." }, "noEmail": { - "message": "Không có email?" + "message": "Không nhận được email?" }, "goBack": { "message": "Quay lại" @@ -3572,55 +3633,47 @@ "message": "Không thể đăng nhập?" }, "loginApproved": { - "message": "Lượt đăng nhập đã duyệt" + "message": "Lượt đăng nhập đã phê duyệt" }, "userEmailMissing": { "message": "Thiếu email người dùng" }, "activeUserEmailNotFoundLoggingYouOut": { - "message": "Active user email not found. Logging you out." + "message": "Email người dùng đang hoạt động không được tìm thấy. Bạn đang bị đăng xuất." }, "deviceTrusted": { "message": "Thiết bị tin cậy" }, "trustOrganization": { - "message": "Trust organization" + "message": "Tin tưởng tổ chức" }, "trust": { - "message": "Trust" + "message": "Tin tưởng" }, "doNotTrust": { - "message": "Do not trust" + "message": "Không tin tưởng" }, "organizationNotTrusted": { - "message": "Organization is not trusted" + "message": "Tổ chức không được tin cậy" }, "emergencyAccessTrustWarning": { - "message": "For the security of your account, only confirm if you have granted emergency access to this user and their fingerprint matches what is displayed in their account" + "message": "Để đảm bảo an toàn tài khoản của bạn, chỉ xác nhận nếu bạn đã cấp quyền truy cập khẩn cấp cho người dùng này và cụm từ nhận dạng của họ khớp với những gì hiển thị trong tài khoản của họ" }, "orgTrustWarning": { - "message": "For the security of your account, only proceed if you are a member of this organization, have account recovery enabled, and the fingerprint displayed below matches the organization's fingerprint." + "message": "Để đảm bảo an toàn cho tài khoản của bạn, vui lòng chỉ tiếp tục nếu bạn là thành viên của tổ chức này, đã kích hoạt tính năng khôi phục tài khoản và cụm từ nhận dạng hiển thị bên dưới trùng khớp với cụm từ nhận dạng của tổ chức." }, "orgTrustWarning1": { - "message": "This organization has an Enterprise policy that will enroll you in account recovery. Enrollment will allow organization administrators to change your password. Only proceed if you recognize this organization and the fingerprint phrase displayed below matches the organization's fingerprint." + "message": "Tổ chức này có chính sách doanh nghiệp sẽ đăng ký bạn vào quy trình khôi phục tài khoản. Việc đăng ký sẽ cho phép các quản trị viên của tổ chức thay đổi mật khẩu của bạn. Chỉ tiếp tục nếu bạn nhận ra tổ chức này và cụm từ xác thực hiển thị bên dưới khớp với cụm từ xác thực của tổ chức." }, "trustUser": { - "message": "Trust user" - }, - "sendsNoItemsTitle": { - "message": "Không có mục Gửi nào đang hoạt động", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendsNoItemsMessage": { - "message": "Sử dụng Gửi để chia sẻ thông tin mã hóa một cách an toàn với bất kỳ ai.", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + "message": "Người dùng tin cậy" }, "sendsTitleNoItems": { - "message": "Send sensitive information safely", + "message": "Gửi thông tin nhạy cảm một cách an toàn", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "sendsBodyNoItems": { - "message": "Share files and data securely with anyone, on any platform. Your information will remain end-to-end encrypted while limiting exposure.", + "message": "Chia sẻ tệp tin và dữ liệu một cách an toàn với bất kỳ ai, trên bất kỳ nền tảng nào. Thông tin của bạn sẽ được mã hóa đầu cuối để hạn chế rủi ro bị lộ.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "inputRequired": { @@ -3633,7 +3686,7 @@ "message": "Tìm kiếm" }, "inputMinLength": { - "message": "Giá trị nhập vào phải ít nhất $COUNT$ ký tự.", + "message": "Dữ liệu nhập vào phải có độ dài ít nhất $COUNT$ ký tự.", "placeholders": { "count": { "content": "$1", @@ -3642,7 +3695,7 @@ } }, "inputMaxLength": { - "message": "Giá trị nhập vào không được vượt quá $COUNT$ ký tự.", + "message": "Độ dài của dữ liệu nhập vào không được vượt quá $COUNT$ ký tự.", "placeholders": { "count": { "content": "$1", @@ -3660,7 +3713,7 @@ } }, "inputMinValue": { - "message": "Giá trị nhập vào phải ít nhất $MIN$.", + "message": "Dữ liệu nhập vào phải ít nhất là $MIN$.", "placeholders": { "min": { "content": "$1", @@ -3669,7 +3722,7 @@ } }, "inputMaxValue": { - "message": "Giá trị nhập vào không được vượt quá $MAX$.", + "message": "Dữ liệu nhập vào không được vượt quá $MAX$.", "placeholders": { "max": { "content": "$1", @@ -3681,14 +3734,14 @@ "message": "Có ít nhất 1 địa chỉ email không hợp lệ" }, "inputTrimValidator": { - "message": "Giá trị nhập vào không được chỉ có khoảng trắng.", + "message": "Dữ liệu nhập vào không được chỉ chứa khoảng trắng.", "description": "Notification to inform the user that a form's input can't contain only whitespace." }, "inputEmail": { - "message": "Giá trị nhập vào không phải là địa chỉ email." + "message": "Dữ liệu nhập vào không phải là địa chỉ email." }, "fieldsNeedAttention": { - "message": "Có $COUNT$ trường cần bạn xem xét ở trên.", + "message": "$COUNT$ trường ở trên cần bạn chú ý.", "placeholders": { "count": { "content": "$1", @@ -3697,10 +3750,10 @@ } }, "singleFieldNeedsAttention": { - "message": "1 field needs your attention." + "message": "1 trường cần bạn chú ý." }, "multipleFieldsNeedAttention": { - "message": "$COUNT$ fields need your attention.", + "message": "$COUNT$ trường bạn cần chú ý.", "placeholders": { "count": { "content": "$1", @@ -3712,7 +3765,7 @@ "message": "-- Chọn --" }, "multiSelectPlaceholder": { - "message": "-- Nhập để lọc --" + "message": "-- Nhập từ khóa để lọc --" }, "multiSelectLoading": { "message": "Đang tải các tuỳ chọn..." @@ -3743,7 +3796,7 @@ "message": "Tên miền thay thế" }, "passwordRepromptDisabledAutofillOnPageLoad": { - "message": "Các mục yêu cầu nhập lại mật khẩu chính không thể tự động điền khi tải trang. Tự động điền khi tải trang đã tắt.", + "message": "Các mục yêu cầu nhập lại mật khẩu chính không thể được tự động điền khi tải trang. Tự động điền khi tải trang đã bị tắt.", "description": "Toast message for describing that master password re-prompt cannot be autofilled on page load." }, "autofillOnPageLoadSetToDefault": { @@ -3758,7 +3811,7 @@ "message": "Ẩn/hiện thanh điều hướng bên" }, "skipToContent": { - "message": "Chuyển đến nội dung" + "message": "Bỏ qua nội dung" }, "bitwardenOverlayButton": { "message": "Nút menu tự động điền Bitwarden", @@ -3777,7 +3830,7 @@ "description": "Text to display in overlay when the account is locked." }, "unlockYourAccountToViewAutofillSuggestions": { - "message": "Unlock your account to view autofill suggestions", + "message": "Mở khóa tài khoản của bạn để xem các đề xuất tự động điền", "description": "Text to display in overlay when the account is locked." }, "unlockAccount": { @@ -3785,15 +3838,15 @@ "description": "Button text to display in overlay when the account is locked." }, "unlockAccountAria": { - "message": "Unlock your account, opens in a new window", + "message": "Mở khóa tài khoản của bạn, mở trong cửa sổ mới", "description": "Screen reader text (aria-label) for unlock account button in overlay" }, "totpCodeAria": { - "message": "Time-based One-Time Password Verification Code", + "message": "Mã xác minh mật khẩu một lần dựa trên thời gian", "description": "Aria label for the totp code displayed in the inline menu for autofill" }, "totpSecondsSpanAria": { - "message": "Time remaining before current TOTP expires", + "message": "Thời gian còn lại trước khi TOTP hiện tại hết hạn", "description": "Aria label for the totp seconds displayed in the inline menu for autofill" }, "fillCredentialsFor": { @@ -3801,7 +3854,7 @@ "description": "Screen reader text for when overlay item is in focused" }, "partialUsername": { - "message": "Tên người dùng từng phần", + "message": "Tên đăng nhập một phần", "description": "Screen reader text for when a login item is focused where a partial username is displayed. SR will announce this phrase before reading the text of the partial username" }, "noItemsToShow": { @@ -3817,31 +3870,31 @@ "description": "Screen reader text (aria-label) for new item button in overlay" }, "newLogin": { - "message": "New login", + "message": "Đăng nhập mới", "description": "Button text to display within inline menu when there are no matching items on a login field" }, "addNewLoginItemAria": { - "message": "Add new vault login item, opens in a new window", + "message": "Thêm mục đăng nhập mới, mở trong cửa sổ mới", "description": "Screen reader text (aria-label) for new login button within inline menu" }, "newCard": { - "message": "New card", + "message": "Thêm thẻ", "description": "Button text to display within inline menu when there are no matching items on a credit card field" }, "addNewCardItemAria": { - "message": "Add new vault card item, opens in a new window", + "message": "Thêm một thẻ mới, mở trong cửa sổ mới", "description": "Screen reader text (aria-label) for new card button within inline menu" }, "newIdentity": { - "message": "New identity", + "message": "Danh tính mới", "description": "Button text to display within inline menu when there are no matching items on an identity field" }, "addNewIdentityItemAria": { - "message": "Add new vault identity item, opens in a new window", + "message": "Thêm danh tính mới, mở trong cửa sổ mới", "description": "Screen reader text (aria-label) for new identity button within inline menu" }, "bitwardenOverlayMenuAvailable": { - "message": "Danh sách tự động điền của Bitwarden sẵn sàng. Sử dụng phím mũi tên xuống để chọn.", + "message": "Menu tự động điền của Bitwarden có sẵn. Nhấn phím mũi tên xuống để chọn.", "description": "Screen reader text for announcing when the overlay opens on the page" }, "turnOn": { @@ -3855,10 +3908,10 @@ "description": "Used for the header of the import dialog, the import button and within the file-password-prompt" }, "importError": { - "message": "Lỗi nhập" + "message": "Lỗi khi nhập" }, "importErrorDesc": { - "message": "Có vấn đề với dữ liệu bạn cố gắng nhập. Vui lòng khắc phục các lỗi được liệt kê bên dưới trong tập tin nguồn của bạn và thử lại." + "message": "Có vấn đề với dữ liệu bạn đang cố gắng nhập. Vui lòng khắc phục các lỗi được liệt kê bên dưới trong tệp nguồn của bạn và thử lại." }, "resolveTheErrorsBelowAndTryAgain": { "message": "Giải quyết các lỗi bên dưới và thử lại." @@ -3894,7 +3947,7 @@ "message": "Đang chờ xác nhận" }, "couldNotCompleteBiometrics": { - "message": "Không thể hoàn tất sinh trắc học." + "message": "Không thể hoàn tất quá trình xác thực sinh trắc học." }, "needADifferentMethod": { "message": "Cần một phương pháp khác?" @@ -3933,7 +3986,7 @@ "message": "Tài khoản của bạn yêu cầu xác minh hai bước với Duo." }, "popoutExtension": { - "message": "Tiện ích mở rộng dạng cửa sổ bật lên" + "message": "Mở tiện ích ra cửa sổ mới" }, "launchDuo": { "message": "Khởi chạy Dou" @@ -3963,7 +4016,7 @@ "message": "Chọn bộ sưu tập" }, "importTargetHint": { - "message": "Chọn tùy chọn này để di chuyển nội dung tập tin đã được nhập đến $DESTINATION$", + "message": "Chọn tùy chọn này nếu bạn muốn nội dung của tệp đã nhập được di chuyển đến $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": { @@ -3991,7 +4044,7 @@ "message": "hoặc sao chép/dán nội dung của tập tin nhập" }, "instructionsFor": { - "message": "Hướng dẫn dùng $NAME$", + "message": "Hướng dẫn cho $NAME$", "description": "The title for the import tool instructions.", "placeholders": { "name": { @@ -4016,22 +4069,22 @@ "message": "Mã khoá" }, "accessing": { - "message": "Accessing" + "message": "Đang truy cập" }, "loggedInExclamation": { - "message": "Logged in!" + "message": "Đã đăng nhập!" }, "passkeyNotCopied": { "message": "Không thể sao chép mã khoá" }, "passkeyNotCopiedAlert": { - "message": "Bản sao sẽ không bao gồm mã khoá. Bạn có muốn tiếp tục tạo bản sao mục này?" + "message": "Bản sao sẽ không bao gồm mã khoá. Bạn có muốn tiếp tục tạo bản sao cho mục này?" }, "passkeyFeatureIsNotImplementedForAccountsWithoutMasterPassword": { "message": "Trang web yêu cầu xác minh. Tính năng này hiện chưa được hỗ trợ cho tài khoản không có mật khẩu chính." }, "logInWithPasskeyQuestion": { - "message": "Log in with passkey?" + "message": "Đăng nhập bằng mã khóa?" }, "passkeyAlreadyExists": { "message": "Ứng dụng này đã có mã khoá." @@ -4043,10 +4096,10 @@ "message": "Bạn không có thông tin đăng nhập phù hợp cho trang web này." }, "noMatchingLoginsForSite": { - "message": "No matching logins for this site" + "message": "Không có đăng nhập khớp với trang web này" }, "searchSavePasskeyNewLogin": { - "message": "Search or save passkey as new login" + "message": "Tìm kiếm hoặc lưu mã khóa làm đăng nhập mới" }, "confirm": { "message": "Xác nhận" @@ -4058,10 +4111,10 @@ "message": "Lưu mã khoá như đăng nhập mới" }, "chooseCipherForPasskeySave": { - "message": "Choose a login to save this passkey to" + "message": "Chọn một đăng nhập để lưu mã khóa này" }, "chooseCipherForPasskeyAuth": { - "message": "Choose a passkey to log in with" + "message": "Chọn một mã khóa để đăng nhập" }, "passkeyItem": { "message": "Mục mã khoá" @@ -4073,7 +4126,7 @@ "message": "Mục này đã chứa mã khoá. Bạn có chắc muốn ghi đè mã khoá hiện tại không?" }, "featureNotSupported": { - "message": "Chưa hỗ trợ tính năng này" + "message": "Tính năng này hiện chưa được hỗ trợ" }, "yourPasskeyIsLocked": { "message": "Yêu cầu xác thực để sử dụng mã khoá. Xác minh danh tính của bạn để tiếp tục." @@ -4085,7 +4138,7 @@ "message": "Không tìm thấy dữ liệu LastPass" }, "incorrectUsernameOrPassword": { - "message": "Tên người dùng hoặc mật khẩu không đúng" + "message": "Tên đăng nhập hoặc mật khẩu không đúng" }, "incorrectPassword": { "message": "Mật khẩu không đúng" @@ -4127,7 +4180,7 @@ "message": "Yêu cầu xác thực LastPass" }, "awaitingSSO": { - "message": "Đang chờ xác thực SSO" + "message": "Đang chờ xác thực Đăng nhập một lần" }, "awaitingSSODesc": { "message": "Vui lòng tiếp tục đăng nhập bằng thông tin đăng nhập của công ty bạn." @@ -4143,10 +4196,10 @@ "message": "Nhập từ CSV" }, "lastPassTryAgainCheckEmail": { - "message": "Thử lại hoặc tìm email từ LastPass để xác minh đó là bạn." + "message": "Hãy thử lại hoặc kiểm tra email từ LastPass để xác minh rằng đó là bạn." }, "collection": { - "message": "Bộ Sưu Tập" + "message": "Bộ sưu tập" }, "lastPassYubikeyDesc": { "message": "Cắm khóa YubiKey được liên kết với tài khoản LastPass của bạn vào cổng USB của máy tính, sau đó nhấn nút trên YubiKey." @@ -4164,7 +4217,7 @@ "message": "Tài khoản đang hoạt động" }, "bitwardenAccount": { - "message": "Bitwarden account" + "message": "Tài khoản Bitwarden" }, "availableAccounts": { "message": "Các tài khoản khả dụng" @@ -4194,10 +4247,10 @@ "message": "Chỉ một lần" }, "alwaysForThisSite": { - "message": "Luôn cho trang này" + "message": "Luôn luôn cho trang này" }, "domainAddedToExcludedDomains": { - "message": "$DOMAIN$ đã được thêm vào danh sách các tên miền loại trừ.", + "message": "$DOMAIN$ đã được thêm vào danh sách các tên miền bị loại trừ.", "placeholders": { "domain": { "content": "$1", @@ -4209,6 +4262,26 @@ "message": "Định dạng chung", "description": "Label indicating the most common import formats" }, + "uriMatchDefaultStrategyHint": { + "message": "Bitwarden phát hiện khớp đường dẫn (URI) để xác định các đề xuất tự động điền.", + "description": "Explains to the user that URI match detection determines how Bitwarden suggests autofill options, and clarifies that this default strategy applies when no specific match detection is set for a login item." + }, + "regExAdvancedOptionWarning": { + "message": "\"Biểu thức chính quy\" là tùy chọn nâng cao với nguy cơ cao hơn trong việc lộ thông tin đăng nhập.", + "description": "Content for dialog which warns a user when selecting 'regular expression' matching strategy as a cipher match strategy" + }, + "startsWithAdvancedOptionWarning": { + "message": "\"Bắt đầu với\" là tùy chọn nâng cao với nguy cơ cao hơn trong việc lộ thông tin đăng nhập.", + "description": "Content for dialog which warns a user when selecting 'starts with' matching strategy as a cipher match strategy" + }, + "uriMatchWarningDialogLink": { + "message": "Thông tin thêm về độ phù hợp", + "description": "Link to match detection docs on warning dialog for advance match strategy" + }, + "uriAdvancedOption": { + "message": "Tùy chọn nâng cao", + "description": "Advanced option placeholder for uri option component" + }, "confirmContinueToBrowserSettingsTitle": { "message": "Tiếp tục tới Cài đặt trình duyệt?", "description": "Title for dialog which asks if the user wants to proceed to a relevant browser settings page" @@ -4218,7 +4291,7 @@ "description": "Title for dialog which asks if the user wants to proceed to a relevant Help Center page" }, "confirmContinueToHelpCenterPasswordManagementContent": { - "message": "Thay đổi cài đặt tự động điền và quản lý mật khẩu của trình duyệt của bạn.", + "message": "Thay đổi cài đặt tự động điền và quản lý mật khẩu của trình duyệt.", "description": "Body content for dialog which asks if the user wants to proceed to the Help Center's page about browser password management settings" }, "confirmContinueToHelpCenterKeyboardShortcutsContent": { @@ -4226,7 +4299,7 @@ "description": "Body content for dialog which asks if the user wants to proceed to the Help Center's page about browser keyboard shortcut settings" }, "confirmContinueToBrowserPasswordManagementSettingsContent": { - "message": "Thay đổi cài đặt tự động điền và quản lý mật khẩu của trình duyệt của bạn.", + "message": "Thay đổi cài đặt tự động điền và quản lý mật khẩu của trình duyệt.", "description": "Body content for dialog which asks if the user wants to proceed to the browser's password management settings page" }, "confirmContinueToBrowserKeyboardShortcutSettingsContent": { @@ -4242,7 +4315,7 @@ "description": "Dialog message facilitating the ability to override a chrome browser's default autofill behavior" }, "overrideDefaultBrowserAutoFillSettings": { - "message": "Bitwarden làm trình quản lý mật khẩu mặc định", + "message": "Đặt Bitwarden làm trình quản lý mật khẩu mặc định của bạn", "description": "Label for the setting that allows overriding the default browser autofill settings" }, "privacyPermissionAdditionNotGrantedTitle": { @@ -4250,7 +4323,7 @@ "description": "Title for the dialog that appears when the user has not granted the extension permission to set privacy settings" }, "privacyPermissionAdditionNotGrantedDescription": { - "message": "Bạn phải cấp quyền riêng tư của trình duyệt cho Bitwarden để đặt nó làm trình quản lý mật khẩu mặc định.", + "message": "Bạn phải cấp quyền riêng tư của trình duyệt cho Bitwarden để đặt làm trình quản lý mật khẩu mặc định.", "description": "Description for the dialog that appears when the user has not granted the extension permission to set privacy settings" }, "makeDefault": { @@ -4262,7 +4335,7 @@ "description": "Notification message for when saving credentials has succeeded." }, "passwordSaved": { - "message": "Password saved!", + "message": "Đã lưu mật khẩu!", "description": "Notification message for when saving credentials has succeeded." }, "updateCipherAttemptSuccess": { @@ -4270,7 +4343,7 @@ "description": "Notification message for when updating credentials has succeeded." }, "passwordUpdated": { - "message": "Password updated!", + "message": "Đã cập nhật mật khẩu!", "description": "Notification message for when updating credentials has succeeded." }, "saveCipherAttemptFailed": { @@ -4287,10 +4360,10 @@ "message": "Đã xóa mã khoá" }, "autofillSuggestions": { - "message": "Autofill suggestions" + "message": "Các gợi ý tự động điền" }, "itemSuggestions": { - "message": "Suggested items" + "message": "Các mục đề xuất" }, "autofillSuggestionsTip": { "message": "Lưu thông tin đăng nhập cho trang này để tự động điền" @@ -4355,7 +4428,7 @@ } }, "viewItemTitleWithField": { - "message": "View item - $ITEMNAME$ - $FIELD$", + "message": "Xem mục - $ITEMNAME$ - $FIELD$", "description": "Title for a link that opens a view for an item.", "placeholders": { "itemname": { @@ -4379,7 +4452,7 @@ } }, "autofillTitleWithField": { - "message": "Autofill - $ITEMNAME$ - $FIELD$", + "message": "Tự động điền - $ITEMNAME$ - $FIELD$", "description": "Title for a button that autofills a login item.", "placeholders": { "itemname": { @@ -4393,7 +4466,7 @@ } }, "copyFieldValue": { - "message": "Copy $FIELD$, $VALUE$", + "message": "Sao chép $FIELD$, $VALUE$", "description": "Title for a button that copies a field value to the clipboard.", "placeholders": { "field": { @@ -4434,10 +4507,10 @@ "message": "Giao diện" }, "errorAssigningTargetCollection": { - "message": "Lỗi khi gán vào bộ sưu tập chỉ định." + "message": "Lỗi khi gán vào bộ sưu tập đã chọn." }, "errorAssigningTargetFolder": { - "message": "Lỗi khi gán vào thư mục chỉ định." + "message": "Lỗi khi gán vào thư mục đã chọn." }, "viewItemsIn": { "message": "Xem các mục trong $NAME$", @@ -4540,31 +4613,31 @@ } }, "downloadBitwarden": { - "message": "Download Bitwarden" + "message": "Tải xuống Bitwarden" }, "downloadBitwardenOnAllDevices": { - "message": "Download Bitwarden on all devices" + "message": "Tải xuống Bitwarden trên tất cả các thiết bị" }, "getTheMobileApp": { - "message": "Get the mobile app" + "message": "Tải ứng dụng di động" }, "getTheMobileAppDesc": { - "message": "Access your passwords on the go with the Bitwarden mobile app." + "message": "Truy cập mật khẩu của bạn mọi lúc mọi nơi với ứng dụng di động Bitwarden." }, "getTheDesktopApp": { - "message": "Get the desktop app" + "message": "Tải ứng dụng cho máy tính" }, "getTheDesktopAppDesc": { - "message": "Access your vault without a browser, then set up unlock with biometrics to expedite unlocking in both the desktop app and browser extension." + "message": "Truy cập kho lưu trữ của bạn mà không cần trình duyệt, sau đó thiết lập mở khóa bằng sinh trắc học để mở khóa dễ dàng trong cả ứng dụng trên máy tính và tiện ích mở rộng trình duyệt." }, "downloadFromBitwardenNow": { - "message": "Download from bitwarden.com now" + "message": "Tải xuống từ bitwarden.com ngay bây giờ" }, "getItOnGooglePlay": { - "message": "Get it on Google Play" + "message": "Tải về từ Google Play" }, "downloadOnTheAppStore": { - "message": "Download on the App Store" + "message": "Tải về từ App Store" }, "permanentlyDeleteAttachmentConfirmation": { "message": "Bạn có chắc chắn muốn xóa vĩnh viễn tệp đính kèm này không?" @@ -4579,13 +4652,13 @@ "message": "Bộ lọc" }, "filterVault": { - "message": "Filter vault" + "message": "Lọc kho" }, "filterApplied": { - "message": "One filter applied" + "message": "Một bộ lọc đã được áp dụng" }, "filterAppliedPlural": { - "message": "$COUNT$ filters applied", + "message": "$COUNT$ bộ lọc đã được áp dụng", "placeholders": { "count": { "content": "$1", @@ -4597,7 +4670,7 @@ "message": "Thông tin cá nhân" }, "identification": { - "message": "ID" + "message": "Định danh" }, "contactInfo": { "message": "Thông tin liên hệ" @@ -4612,7 +4685,7 @@ } }, "cardNumberEndsWith": { - "message": "card number ends with", + "message": "số thẻ kết thúc bằng", "description": "Used within the inline menu to provide an aria description when users are attempting to fill a card cipher." }, "loginCredentials": { @@ -4622,13 +4695,13 @@ "message": "Khóa xác thực" }, "autofillOptions": { - "message": "Autofill options" + "message": "Tùy chọn tự động điền" }, "websiteUri": { - "message": "Website (URI)" + "message": "Trang web (URI)" }, "websiteUriCount": { - "message": "Website (URI) $COUNT$", + "message": "Trang web (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": { @@ -4638,16 +4711,16 @@ } }, "websiteAdded": { - "message": "Website added" + "message": "Đã thêm trang web" }, "addWebsite": { - "message": "Add website" + "message": "Thêm trang web" }, "deleteWebsite": { - "message": "Delete website" + "message": "Xóa trang web" }, "defaultLabel": { - "message": "Default ($VALUE$)", + "message": "Mặc định ($VALUE$)", "description": "A label that indicates the default value for a field with the current default value in parentheses.", "placeholders": { "value": { @@ -4657,7 +4730,7 @@ } }, "showMatchDetection": { - "message": "Show match detection $WEBSITE$", + "message": "Hiện phát hiện trùng khớp $WEBSITE$", "placeholders": { "website": { "content": "$1", @@ -4666,7 +4739,7 @@ } }, "hideMatchDetection": { - "message": "Hide match detection $WEBSITE$", + "message": "Ẩn phát hiện trùng khớp $WEBSITE$", "placeholders": { "website": { "content": "$1", @@ -4675,13 +4748,13 @@ } }, "autoFillOnPageLoad": { - "message": "Autofill on page load?" + "message": "Tự động điền khi tải trang?" }, "cardExpiredTitle": { - "message": "Expired card" + "message": "Thẻ hết hạn" }, "cardExpiredMessage": { - "message": "If you've renewed it, update the card's information" + "message": "Nếu bạn đã gia hạn, hãy cập nhật thông tin thẻ" }, "cardDetails": { "message": "Thông tin thẻ" @@ -4696,10 +4769,10 @@ } }, "enableAnimations": { - "message": "Enable animations" + "message": "Bật hiệu ứng động" }, "showAnimations": { - "message": "Show animations" + "message": "Hiện hiệu ứng động" }, "addAccount": { "message": "Thêm tài khoản" @@ -4711,15 +4784,15 @@ "message": "Dữ liệu" }, "passkeys": { - "message": "Passkeys", + "message": "Các mã khoá", "description": "A section header for a list of passkeys." }, "passwords": { - "message": "Passwords", + "message": "Mật khẩu", "description": "A section header for a list of passwords." }, "logInWithPasskeyAriaLabel": { - "message": "Log in with passkey", + "message": "Đăng nhập bằng mã khoá", "description": "ARIA label for the inline menu button that logs in with a passkey." }, "assign": { @@ -4756,19 +4829,19 @@ "message": "Tiêu đề trường" }, "textHelpText": { - "message": "Sử dụng các trường nhập liệu văn bản cho dữ liệu như câu hỏi bảo mật" + "message": "Sử dụng các trường văn bản cho dữ liệu như câu hỏi bảo mật" }, "hiddenHelpText": { - "message": "Sử dụng các trường nhập liệu ẩn cho thông tin nhạy cảm như mật khẩu" + "message": "Sử dụng các trường ẩn để lưu dữ liệu nhạy cảm như mật khẩu" }, "checkBoxHelpText": { "message": "Dùng các ô tích chọn nếu bạn muốn tự động điền vào ô tích chọn của biểu mẫu, chẳng hạn như ghi nhớ email" }, "linkedHelpText": { - "message": "Sử dụng trường nhập liệu đã liên kết khi bạn gặp vấn đề với việc tự động điền trên một trang web cụ thể." + "message": "Sử dụng trường liên kết khi bạn gặp vấn đề với tính năng tự động điền trên một trang web cụ thể." }, "linkedLabelHelpText": { - "message": "Nhập thông tin định danh của trường như id, name, aria-label hoặc placeholder." + "message": "Nhập html id, name, aria-label hoặc placeholder của các trường." }, "editField": { "message": "Chỉnh sửa trường" @@ -4810,10 +4883,10 @@ } }, "reorderWebsiteUriButton": { - "message": "Reorder website URI. Use arrow key to move item up or down." + "message": "Sắp xếp lại đường dẫn trang web. Sử dụng phím mũi tên để di chuyển mục lên hoặc xuống." }, "reorderFieldUp": { - "message": "$LABEL$ đã di chuyển lên vị trí $INDEX$ / $LENGTH$", + "message": "$LABEL$ đã được di chuyển lên, vị trí $INDEX$ trong $LENGTH$", "placeholders": { "label": { "content": "$1", @@ -4891,7 +4964,7 @@ } }, "reorderFieldDown": { - "message": "$LABEL$ đã di chuyển xuống vị trí $INDEX$ / $LENGTH$", + "message": "$LABEL$ đã được di chuyển xuống, vị trí $INDEX$ trong $LENGTH$", "placeholders": { "label": { "content": "$1", @@ -4911,43 +4984,43 @@ "message": "Vị trí mục" }, "fileSend": { - "message": "File Send" + "message": "Gửi tệp" }, "fileSends": { - "message": "File Sends" + "message": "Gửi tệp" }, "textSend": { - "message": "Text Send" + "message": "Gửi văn bản" }, "textSends": { - "message": "Text Sends" + "message": "Gửi văn bản" }, "accountActions": { - "message": "Account actions" + "message": "Thao tác trên tài khoản" }, "showNumberOfAutofillSuggestions": { - "message": "Show number of login autofill suggestions on extension icon" + "message": "Hiển thị số lượng đề xuất tự động điền đăng nhập trên biểu tượng tiện ích mở rộng" }, "showQuickCopyActions": { - "message": "Show quick copy actions on Vault" + "message": "Hiển thị các hành động sao chép nhanh trên Kho" }, "systemDefault": { - "message": "System default" + "message": "Mặc định hệ thống" }, "enterprisePolicyRequirementsApplied": { - "message": "Enterprise policy requirements have been applied to this setting" + "message": "Các yêu cầu chính sách của doanh nghiệp đã được áp dụng cho cài đặt này" }, "sshPrivateKey": { - "message": "Private key" + "message": "Khóa riêng tư" }, "sshPublicKey": { - "message": "Public key" + "message": "Khóa công khai" }, "sshFingerprint": { - "message": "Fingerprint" + "message": "Vân tay" }, "sshKeyAlgorithm": { - "message": "Key type" + "message": "Kiểu khoá" }, "sshKeyAlgorithmED25519": { "message": "ED25519" @@ -4962,61 +5035,61 @@ "message": "RSA 4096-Bit" }, "retry": { - "message": "Retry" + "message": "Thử lại" }, "vaultCustomTimeoutMinimum": { - "message": "Minimum custom timeout is 1 minute." + "message": "Thời gian đóng kho tùy chỉnh tối thiểu là 1 phút." }, "additionalContentAvailable": { - "message": "Additional content is available" + "message": "Nội dung bổ sung có sẵn" }, "fileSavedToDevice": { - "message": "File saved to device. Manage from your device downloads." + "message": "Tệp đã được lưu vào thiết bị. Quản lý từ phần Tải về trên thiết bị của bạn." }, "showCharacterCount": { - "message": "Show character count" + "message": "Hiển thị số lượng ký tự" }, "hideCharacterCount": { - "message": "Hide character count" + "message": "Ẩn số lượng ký tự" }, "itemsInTrash": { - "message": "Items in trash" + "message": "Các mục trong thùng rác" }, "noItemsInTrash": { - "message": "No items in trash" + "message": "Không có mục nào trong thùng rác" }, "noItemsInTrashDesc": { - "message": "Items you delete will appear here and be permanently deleted after 30 days" + "message": "Các mục bạn xóa sẽ xuất hiện ở đây và sẽ bị xóa vĩnh vĩnh sau 30 ngày" }, "trashWarning": { - "message": "Items that have been in trash more than 30 days will automatically be deleted" + "message": "Các mục đã ở trong thùng rác hơn 30 ngày sẽ tự động bị xóa" }, "restore": { - "message": "Restore" + "message": "Khôi phục" }, "deleteForever": { - "message": "Delete forever" + "message": "Xóa vĩnh viễn" }, "noEditPermissions": { - "message": "You don't have permission to edit this item" + "message": "Bạn không có quyền chỉnh sửa mục này" }, "biometricsStatusHelptextUnlockNeeded": { - "message": "Biometric unlock is unavailable because PIN or password unlock is required first." + "message": "Mở khóa bằng sinh trắc học không khả dụng vì cần phải mở khóa bằng mã PIN hoặc mật khẩu trước." }, "biometricsStatusHelptextHardwareUnavailable": { - "message": "Biometric unlock is currently unavailable." + "message": "Mở khóa bằng sinh trắc học hiện không khả dụng." }, "biometricsStatusHelptextAutoSetupNeeded": { - "message": "Biometric unlock is unavailable due to misconfigured system files." + "message": "Mở khóa bằng sinh trắc học không khả dụng do các tệp hệ thống bị cấu hình sai." }, "biometricsStatusHelptextManualSetupNeeded": { - "message": "Biometric unlock is unavailable due to misconfigured system files." + "message": "Mở khóa bằng sinh trắc học không khả dụng do các tệp hệ thống bị cấu hình sai." }, "biometricsStatusHelptextDesktopDisconnected": { - "message": "Biometric unlock is unavailable because the Bitwarden desktop app is closed." + "message": "Mở khóa bằng sinh trắc học không khả dụng vì ứng dụng Bitwarden trên máy tính đang bị đóng." }, "biometricsStatusHelptextNotEnabledInDesktop": { - "message": "Biometric unlock is unavailable because it is not enabled for $EMAIL$ in the Bitwarden desktop app.", + "message": "Mở khóa bằng sinh trắc học không khả dụng vì nó chưa được kích hoạt cho $EMAIL$ trong ứng dụng Bitwarden trên máy tính.", "placeholders": { "email": { "content": "$1", @@ -5025,214 +5098,217 @@ } }, "biometricsStatusHelptextUnavailableReasonUnknown": { - "message": "Biometric unlock is currently unavailable for an unknown reason." + "message": "Mở khóa bằng sinh trắc học hiện không khả dụng vì lý do chưa rõ." }, "unlockVault": { - "message": "Unlock your vault in seconds" + "message": "Mở kho của bạn trong vài giây" }, "unlockVaultDesc": { - "message": "You can customize your unlock and timeout settings to more quickly access your vault." + "message": "Bạn có thể tùy chỉnh cài đặt mở khóa và thời gian mở kho để truy cập kho lưu trữ của mình nhanh hơn." }, "unlockPinSet": { - "message": "Unlock PIN set" + "message": "Đã thiết lập mở khóa bằng mã PIN" + }, + "unlockWithBiometricSet": { + "message": "Đã thiết lập mở khóa bằng sinh trắc học" }, "authenticating": { - "message": "Authenticating" + "message": "Đang xác thực" }, "fillGeneratedPassword": { - "message": "Fill generated password", + "message": "Điền mật khẩu được tạo tự động", "description": "Heading for the password generator within the inline menu" }, "passwordRegenerated": { - "message": "Password regenerated", + "message": "Mật khẩu đã được tạo lại", "description": "Notification message for when a password has been regenerated" }, "saveToBitwarden": { - "message": "Save to Bitwarden", + "message": "Lưu vào Bitwarden", "description": "Confirmation message for saving a login to Bitwarden" }, "spaceCharacterDescriptor": { - "message": "Space", + "message": "Phím cách", "description": "Represents the space key in screen reader content as a readable word" }, "tildeCharacterDescriptor": { - "message": "Tilde", + "message": "Dấu ngã", "description": "Represents the ~ key in screen reader content as a readable word" }, "backtickCharacterDescriptor": { - "message": "Backtick", + "message": "Dấu nháy ngược", "description": "Represents the ` key in screen reader content as a readable word" }, "exclamationCharacterDescriptor": { - "message": "Exclamation mark", + "message": "Dấu chấm than", "description": "Represents the ! key in screen reader content as a readable word" }, "atSignCharacterDescriptor": { - "message": "At sign", + "message": "Dấu @", "description": "Represents the @ key in screen reader content as a readable word" }, "hashSignCharacterDescriptor": { - "message": "Hash sign", + "message": "Dấu thăng", "description": "Represents the # key in screen reader content as a readable word" }, "dollarSignCharacterDescriptor": { - "message": "Dollar sign", + "message": "Dấu đô la", "description": "Represents the $ key in screen reader content as a readable word" }, "percentSignCharacterDescriptor": { - "message": "Percent sign", + "message": "Dấu phần trăm", "description": "Represents the % key in screen reader content as a readable word" }, "caretCharacterDescriptor": { - "message": "Caret", + "message": "Dấu mũ", "description": "Represents the ^ key in screen reader content as a readable word" }, "ampersandCharacterDescriptor": { - "message": "Ampersand", + "message": "Dấu và", "description": "Represents the & key in screen reader content as a readable word" }, "asteriskCharacterDescriptor": { - "message": "Asterisk", + "message": "Dấu sao", "description": "Represents the * key in screen reader content as a readable word" }, "parenLeftCharacterDescriptor": { - "message": "Left parenthesis", + "message": "Dấu ngoặc trái", "description": "Represents the ( key in screen reader content as a readable word" }, "parenRightCharacterDescriptor": { - "message": "Right parenthesis", + "message": "Dấu ngoặc phải", "description": "Represents the ) key in screen reader content as a readable word" }, "hyphenCharacterDescriptor": { - "message": "Underscore", + "message": "Gạch dưới", "description": "Represents the _ key in screen reader content as a readable word" }, "underscoreCharacterDescriptor": { - "message": "Hyphen", + "message": "Dấu gạch nối", "description": "Represents the - key in screen reader content as a readable word" }, "plusCharacterDescriptor": { - "message": "Plus", + "message": "Dấu cộng", "description": "Represents the + key in screen reader content as a readable word" }, "equalsCharacterDescriptor": { - "message": "Equals", + "message": "Dấu bằng", "description": "Represents the = key in screen reader content as a readable word" }, "braceLeftCharacterDescriptor": { - "message": "Left brace", + "message": "Dấu ngoặc nhọn trái", "description": "Represents the { key in screen reader content as a readable word" }, "braceRightCharacterDescriptor": { - "message": "Right brace", + "message": "Dấu ngoặc nhọn phải", "description": "Represents the } key in screen reader content as a readable word" }, "bracketLeftCharacterDescriptor": { - "message": "Left bracket", + "message": "Dấu ngoặc vuông trái", "description": "Represents the [ key in screen reader content as a readable word" }, "bracketRightCharacterDescriptor": { - "message": "Right bracket", + "message": "Dấu ngoặc vuông phải", "description": "Represents the ] key in screen reader content as a readable word" }, "pipeCharacterDescriptor": { - "message": "Pipe", + "message": "Dấu gạch", "description": "Represents the | key in screen reader content as a readable word" }, "backSlashCharacterDescriptor": { - "message": "Back slash", + "message": "Dấu gạch chéo ngược", "description": "Represents the back slash key in screen reader content as a readable word" }, "colonCharacterDescriptor": { - "message": "Colon", + "message": "Dấu hai chấm", "description": "Represents the : key in screen reader content as a readable word" }, "semicolonCharacterDescriptor": { - "message": "Semicolon", + "message": "Dấu chấm phẩy", "description": "Represents the ; key in screen reader content as a readable word" }, "doubleQuoteCharacterDescriptor": { - "message": "Double quote", + "message": "Nháy kép", "description": "Represents the double quote key in screen reader content as a readable word" }, "singleQuoteCharacterDescriptor": { - "message": "Single quote", + "message": "Dấu nháy đơn", "description": "Represents the ' key in screen reader content as a readable word" }, "lessThanCharacterDescriptor": { - "message": "Less than", + "message": "Dấu nhỏ hơn", "description": "Represents the < key in screen reader content as a readable word" }, "greaterThanCharacterDescriptor": { - "message": "Greater than", + "message": "Dấu lớn hơn", "description": "Represents the > key in screen reader content as a readable word" }, "commaCharacterDescriptor": { - "message": "Comma", + "message": "Dấu phẩy", "description": "Represents the , key in screen reader content as a readable word" }, "periodCharacterDescriptor": { - "message": "Period", + "message": "Dấu chấm", "description": "Represents the . key in screen reader content as a readable word" }, "questionCharacterDescriptor": { - "message": "Question mark", + "message": "Dấu hỏi chấm", "description": "Represents the ? key in screen reader content as a readable word" }, "forwardSlashCharacterDescriptor": { - "message": "Forward slash", + "message": "Dấu gạch chéo", "description": "Represents the / key in screen reader content as a readable word" }, "lowercaseAriaLabel": { - "message": "Lowercase" + "message": "Chữ thường" }, "uppercaseAriaLabel": { - "message": "Uppercase" + "message": "Chữ in hoa" }, "generatedPassword": { - "message": "Generated password" + "message": "Mật khẩu được tạo" }, "compactMode": { - "message": "Compact mode" + "message": "Chế độ nhỏ gọn" }, "beta": { "message": "Beta" }, "extensionWidth": { - "message": "Extension width" + "message": "Chiều rộng phần mở rộng" }, "wide": { - "message": "Wide" + "message": "Rộng" }, "extraWide": { - "message": "Extra wide" + "message": "Rộng hơn" }, "sshKeyWrongPassword": { - "message": "The password you entered is incorrect." + "message": "Mật khẩu bạn đã nhập không đúng." }, "importSshKey": { - "message": "Import" + "message": "Nhập" }, "confirmSshKeyPassword": { - "message": "Confirm password" + "message": "Xác nhận mật khẩu" }, "enterSshKeyPasswordDesc": { - "message": "Enter the password for the SSH key." + "message": "Nhập mật khẩu cho khóa SSH." }, "enterSshKeyPassword": { - "message": "Enter password" + "message": "Nhập mật khẩu" }, "invalidSshKey": { - "message": "The SSH key is invalid" + "message": "Khóa SSH không hợp lệ" }, "sshKeyTypeUnsupported": { - "message": "The SSH key type is not supported" + "message": "Loại khóa SSH không được hỗ trợ" }, "importSshKeyFromClipboard": { - "message": "Import key from clipboard" + "message": "Nhập khóa từ bảng nhớ tạm" }, "sshKeyImported": { - "message": "SSH key imported successfully" + "message": "Khóa SSH được nhập thành công" }, "cannotRemoveViewOnlyCollections": { "message": "Bạn không thể xóa các bộ sưu tập với quyền chỉ xem: $COLLECTIONS$", @@ -5244,138 +5320,142 @@ } }, "updateDesktopAppOrDisableFingerprintDialogTitle": { - "message": "Please update your desktop application" + "message": "Vui lòng cập nhật ứng dụng trên máy tính của bạn" }, "updateDesktopAppOrDisableFingerprintDialogMessage": { - "message": "To use biometric unlock, please update your desktop application, or disable fingerprint unlock in the desktop settings." + "message": "Để sử dụng mở khóa bằng sinh trắc học, vui lòng cập nhật ứng dụng trên máy tính của bạn, hoặc tắt mở khóa vân tay trong cài đặt máy tính." }, "changeAtRiskPassword": { - "message": "Change at-risk password" + "message": "Thay đổi mật khẩu có rủi ro" }, "settingsVaultOptions": { - "message": "Vault options" + "message": "Tùy chọn kho" }, "emptyVaultDescription": { - "message": "The vault protects more than just your passwords. Store secure logins, IDs, cards and notes securely here." + "message": "Kho lưu trữ không chỉ bảo vệ mật khẩu của bạn. Bạn có thể lưu trữ an toàn các thông tin đăng nhập, ID, thẻ và ghi chú tại đây." }, "introCarouselLabel": { - "message": "Welcome to Bitwarden" + "message": "Chào mừng bạn đến với Bitwarden" }, "securityPrioritized": { - "message": "Security, prioritized" + "message": "Bảo mật, ưu tiên hàng đầu" }, "securityPrioritizedBody": { - "message": "Save logins, cards, and identities to your secure vault. Bitwarden uses zero-knowledge, end-to-end encryption to protect what’s important to you." + "message": "Lưu trữ thông tin đăng nhập, thẻ tín dụng và thông tin cá nhân vào kho lưu trữ an toàn của bạn. Bitwarden sử dụng mã hóa đầu cuối không tiết lộ thông tin (zero-knowledge) để bảo vệ những gì quan trọng đối với bạn." }, "quickLogin": { - "message": "Quick and easy login" + "message": "Đăng nhập nhanh chóng và dễ dàng" }, "quickLoginBody": { - "message": "Set up biometric unlock and autofill to log into your accounts without typing a single letter." + "message": "Cài đặt tính năng mở khóa bằng sinh trắc học và tự động điền thông tin để đăng nhập vào các tài khoản của bạn mà không cần nhập bất kỳ ký tự nào." }, "secureUser": { - "message": "Level up your logins" + "message": "Nâng cấp đăng nhập của bạn" }, "secureUserBody": { - "message": "Use the generator to create and save strong, unique passwords for all your accounts." + "message": "Sử dụng trình tạo mật khẩu để tạo và lưu trữ các mật khẩu mạnh, duy nhất cho tất cả các tài khoản của bạn." }, "secureDevices": { - "message": "Your data, when and where you need it" + "message": "Dữ liệu của bạn, mọi lúc, mọi nơi bạn cần" }, "secureDevicesBody": { - "message": "Save unlimited passwords across unlimited devices with Bitwarden mobile, browser, and desktop apps." + "message": "Lưu trữ mật khẩu không giới hạn trên tất cả các thiết bị với ứng dụng di động, trình duyệt và máy tính của Bitwarden." }, "nudgeBadgeAria": { - "message": "1 notification" + "message": "1 thông báo" }, "emptyVaultNudgeTitle": { - "message": "Import existing passwords" + "message": "Nhập mật khẩu hiện có" }, "emptyVaultNudgeBody": { - "message": "Use the importer to quickly transfer logins to Bitwarden without manually adding them." + "message": "Sử dụng công cụ nhập để nhanh chóng chuyển các tài khoản đăng nhập sang Bitwarden mà không cần thêm thủ công." }, "emptyVaultNudgeButton": { - "message": "Import now" + "message": "Nhập ngay" }, "hasItemsVaultNudgeTitle": { - "message": "Welcome to your vault!" + "message": "Chào mừng đến với kho lưu trữ của bạn!" }, "hasItemsVaultNudgeBodyOne": { - "message": "Autofill items for the current page" + "message": "Tự động điền các mục cho trang hiện tại" }, "hasItemsVaultNudgeBodyTwo": { - "message": "Favorite items for easy access" + "message": "Các mục yêu thích để truy cập nhanh chóng" }, "hasItemsVaultNudgeBodyThree": { - "message": "Search your vault for something else" + "message": "Tìm kiếm thông tin khác trong kho của bạn" }, "newLoginNudgeTitle": { - "message": "Save time with autofill" + "message": "Tiết kiệm thời gian với tính năng tự động điền" }, "newLoginNudgeBodyOne": { - "message": "Include a", + "message": "Bao gồm một", "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", "example": "Include a Website so this login appears as an autofill suggestion." }, "newLoginNudgeBodyBold": { - "message": "Website", + "message": "Trang web", "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", "example": "Include a Website so this login appears as an autofill suggestion." }, "newLoginNudgeBodyTwo": { - "message": "so this login appears as an autofill suggestion.", + "message": "vì vậy, thông tin đăng nhập này sẽ xuất hiện như đề xuất tự động điền.", "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { - "message": "Seamless online checkout" + "message": "Thanh toán trực tuyến không gián đoạn" }, "newCardNudgeBody": { - "message": "With cards, easily autofill payment forms securely and accurately." + "message": "Với thẻ, dễ dàng tự động điền các biểu mẫu thanh toán an toàn và chính xác." }, "newIdentityNudgeTitle": { - "message": "Simplify creating accounts" + "message": "Đơn giản hóa việc tạo tài khoản" }, "newIdentityNudgeBody": { - "message": "With identities, quickly autofill long registration or contact forms." + "message": "Với danh tính, nhanh chóng tự động điền các biểu mẫu đăng ký hoặc liên hệ dài." }, "newNoteNudgeTitle": { - "message": "Keep your sensitive data safe" + "message": "Giữ dữ liệu nhạy cảm của bạn an toàn" }, "newNoteNudgeBody": { - "message": "With notes, securely store sensitive data like banking or insurance details." + "message": "Với ghi chú, lưu trữ an toàn dữ liệu nhạy cảm như thông tin ngân hàng hoặc bảo hiểm." }, "newSshNudgeTitle": { - "message": "Developer-friendly SSH access" + "message": "Truy cập SSH thân thiện với nhà phát triển" }, "newSshNudgeBodyOne": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "message": "Lưu trữ khóa của bạn và kết nối với trình quản lý khóa SSH để xác thực nhanh chóng và được mã hóa.", "description": "Two part message", "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, "newSshNudgeBodyTwo": { - "message": "Learn more about SSH agent", + "message": "Tìm hiểu thêm về SSH agent", "description": "Two part message", "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, "generatorNudgeTitle": { - "message": "Quickly create passwords" + "message": "Tạo mật khẩu nhanh chóng" }, "generatorNudgeBodyOne": { - "message": "Easily create strong and unique passwords by clicking on", + "message": "Dễ dàng tạo mật khẩu mạnh và duy nhất chỉ trong một cú nhấp chuột", "description": "Two part message", "example": "Easily create strong and unique passwords by clicking on {icon} to help you keep your logins secure." }, "generatorNudgeBodyTwo": { - "message": "to help you keep your logins secure.", + "message": "để giúp bạn bảo vệ thông tin đăng nhập của mình.", "description": "Two part message", "example": "Easily create strong and unique passwords by clicking on {icon} to help you keep your logins secure." }, "generatorNudgeBodyAria": { - "message": "Easily create strong and unique passwords by clicking on the Generate password button to help you keep your logins secure.", + "message": "Dễ dàng tạo mật khẩu mạnh và duy nhất bằng cách nhấp vào Trình tạo mật khẩu để giúp bạn bảo vệ tài khoản đăng nhập của mình.", "description": "Aria label for the body content of the generator nudge" }, "noPermissionsViewPage": { - "message": "You do not have permissions to view this page. Try logging in with a different account." + "message": "Bạn không có quyền truy cập vào trang này. Hãy thử đăng nhập bằng tài khoản khác." + }, + "wasmNotSupported": { + "message": "WebAssembly không được hỗ trợ trên trình duyệt của bạn hoặc chưa được kích hoạt. WebAssembly là yêu cầu bắt buộc để sử dụng ứng dụng Bitwarden.", + "description": "'WebAssembly' is a technical term and should not be translated." } } diff --git a/apps/browser/src/_locales/zh_CN/messages.json b/apps/browser/src/_locales/zh_CN/messages.json index 8a537be08f2..9ee8fd5a48f 100644 --- a/apps/browser/src/_locales/zh_CN/messages.json +++ b/apps/browser/src/_locales/zh_CN/messages.json @@ -300,7 +300,7 @@ "message": "前往帮助中心吗?" }, "continueToHelpCenterDesc": { - "message": "在帮助中心进一步了解如何使用 Bitwarden。" + "message": "访问帮助中心进一步了解如何使用 Bitwarden。" }, "continueToBrowserExtensionStore": { "message": "前往浏览器扩展商店吗?" @@ -1173,6 +1173,12 @@ "message": "哦不!我们无法保存它。请尝试手动输入详细信息。", "description": "Detailed error message shown when saving login details fails." }, + "changePasswordWarning": { + "message": "更改密码后,您需要使用新密码登录。 在其他设备上的活动会话将在一小时内注销。" + }, + "accountRecoveryUpdateMasterPasswordSubtitle": { + "message": "更改您的主密码以完成账户恢复。" + }, "enableChangedPasswordNotification": { "message": "询问更新现有的登录" }, @@ -1365,8 +1371,8 @@ "featureUnavailable": { "message": "功能不可用" }, - "encryptionKeyMigrationRequired": { - "message": "需要迁移加密密钥。请登录网页版密码库来更新您的加密密钥。" + "legacyEncryptionUnsupported": { + "message": "旧版加密方式已不再受支持。请联系客服恢复您的账户。" }, "premiumMembership": { "message": "高级会员" @@ -1922,6 +1928,9 @@ "typeSshKey": { "message": "SSH 密钥" }, + "typeNote": { + "message": "笔记" + }, "newItemHeader": { "message": "新增 $TYPE$", "placeholders": { @@ -2153,11 +2162,11 @@ "setYourPinCode": { "message": "设定您用来解锁 Bitwarden 的 PIN 码。您的 PIN 设置将在您完全注销此应用程序时被重置。" }, - "setYourPinCode1": { - "message": "您的 PIN 码将代替主密码用于解锁 Bitwarden。如果您完全注销 Bitwarden,PIN 码将被重置。" + "setPinCode": { + "message": "您可以使用此 PIN 码解锁 Bitwarden。您的 PIN 码将在您完全注销此应用程序时被重置。" }, "pinRequired": { - "message": "需要 PIN 码。" + "message": "必须填写 PIN 码。" }, "invalidPin": { "message": "无效 PIN 码。" @@ -2204,6 +2213,9 @@ "useThisPassword": { "message": "使用此密码" }, + "useThisPassphrase": { + "message": "使用此密码短语" + }, "useThisUsername": { "message": "使用此用户名" }, @@ -2481,6 +2493,12 @@ "personalOwnershipPolicyInEffectImports": { "message": "某个组织策略已阻止将项目导入您的个人密码库。" }, + "restrictCardTypeImport": { + "message": "无法导入支付卡项目类型" + }, + "restrictCardTypeImportDesc": { + "message": "由 1 个或多个组织设置的策略阻止您将支付卡导入密码库。" + }, "domainsTitle": { "message": "域名", "description": "A category title describing the concept of web domains" @@ -2512,6 +2530,10 @@ "change": { "message": "更改" }, + "changePassword": { + "message": "更改密码", + "description": "Change password button for browser at risk notification on login." + }, "changeButtonTitle": { "message": "更改密码 - $ITEMNAME$", "placeholders": { @@ -2521,6 +2543,9 @@ } } }, + "atRiskPassword": { + "message": "存在风险的密码" + }, "atRiskPasswords": { "message": "存在风险的密码" }, @@ -2555,6 +2580,26 @@ } } }, + "atRiskChangePrompt": { + "message": "该网站密码存在风险,$ORGANIZATION$ 要求您更改此密码。", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + }, + "description": "Notification body when a login triggers an at-risk password change request and the change password domain is known." + }, + "atRiskNavigatePrompt": { + "message": "$ORGANIZATION$ 希望您更改此密码,因为它存在风险。请前往账户设置更改此密码。", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + }, + "description": "Notification body when a login triggers an at-risk password change request and no change password domain is provided." + }, "reviewAndChangeAtRiskPassword": { "message": "审查并更改 1 个存在风险的密码" }, @@ -2674,6 +2719,10 @@ "message": "所有 Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "maxAccessCountReached": { + "message": "已达最大访问次数", + "description": "This text will be displayed after a Send has been accessed the maximum amount of times." + }, "hideTextByDefault": { "message": "默认隐藏文本" }, @@ -2876,6 +2925,9 @@ "emailVerificationRequiredDesc": { "message": "您必须验证电子邮箱才能使用此功能。您可以在网页密码库中验证您的电子邮箱。" }, + "masterPasswordSuccessfullySet": { + "message": "主密码设置成功" + }, "updatedMasterPassword": { "message": "已更新主密码" }, @@ -3408,6 +3460,9 @@ "logInRequestSent": { "message": "请求已发送" }, + "masterPasswordChanged": { + "message": "主密码已保存" + }, "exposedMasterPassword": { "message": "已暴露的主密码" }, @@ -3522,6 +3577,12 @@ "requestAdminApproval": { "message": "请求管理员批准" }, + "unableToCompleteLogin": { + "message": "无法完成登录" + }, + "loginOnTrustedDeviceOrAskAdminToAssignPassword": { + "message": "You need to log in on a trusted device or ask your administrator to assign you a password." + }, "ssoIdentifierRequired": { "message": "必须填写组织 SSO 标识符。" }, @@ -3607,14 +3668,6 @@ "trustUser": { "message": "信任用户" }, - "sendsNoItemsTitle": { - "message": "没有活跃的 Send", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendsNoItemsMessage": { - "message": "使用 Send 与任何人安全地分享加密信息。", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "sendsTitleNoItems": { "message": "安全地发送敏感信息", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -4209,6 +4262,26 @@ "message": "常规格式", "description": "Label indicating the most common import formats" }, + "uriMatchDefaultStrategyHint": { + "message": "URI match detection is how Bitwarden identifies autofill suggestions.", + "description": "Explains to the user that URI match detection determines how Bitwarden suggests autofill options, and clarifies that this default strategy applies when no specific match detection is set for a login item." + }, + "regExAdvancedOptionWarning": { + "message": "\"Regular expression\" is an advanced option with increased risk of exposing credentials.", + "description": "Content for dialog which warns a user when selecting 'regular expression' matching strategy as a cipher match strategy" + }, + "startsWithAdvancedOptionWarning": { + "message": "\"Starts with\" is an advanced option with increased risk of exposing credentials.", + "description": "Content for dialog which warns a user when selecting 'starts with' matching strategy as a cipher match strategy" + }, + "uriMatchWarningDialogLink": { + "message": "More about match detection", + "description": "Link to match detection docs on warning dialog for advance match strategy" + }, + "uriAdvancedOption": { + "message": "高级选项", + "description": "Advanced option placeholder for uri option component" + }, "confirmContinueToBrowserSettingsTitle": { "message": "前往浏览器设置吗?", "description": "Title for dialog which asks if the user wants to proceed to a relevant browser settings page" @@ -4519,7 +4592,7 @@ "message": "添加附件" }, "maxFileSizeSansPunctuation": { - "message": "最大文件大小为 500 MB" + "message": "文件最大为 500 MB" }, "deleteAttachmentName": { "message": "删除附件 $NAME$", @@ -4555,7 +4628,7 @@ "message": "获取桌面 App" }, "getTheDesktopAppDesc": { - "message": "无需浏览器也可访问您的密码库。在桌面 App 和浏览器扩展中设置生物识别解锁,以实现快速解锁。" + "message": "无需使用浏览器访问您的密码库,然后在桌面 App 和浏览器扩展中同时设置生物识别解锁,即可实现快速解锁。" }, "downloadFromBitwardenNow": { "message": "立即从 bitwarden.com 下载" @@ -4870,7 +4943,7 @@ "message": "成功分配了集合" }, "nothingSelected": { - "message": "您尚未选择任何内容。" + "message": "您没有选择任何内容。" }, "itemsMovedToOrg": { "message": "项目已移动到 $ORGNAME$", @@ -4968,7 +5041,7 @@ "message": "自定义超时时间最小为 1 分钟。" }, "additionalContentAvailable": { - "message": "有更多内容可用" + "message": "更多内容可用" }, "fileSavedToDevice": { "message": "文件已保存到设备。可以在设备下载中进行管理。" @@ -5031,11 +5104,14 @@ "message": "数秒内解锁您的密码库" }, "unlockVaultDesc": { - "message": "您可以自定义解锁和超时设置,以便更快地访问您的密码库。" + "message": "您可以自定义解锁和超时设置,以便更快速地访问您的密码库。" }, "unlockPinSet": { "message": "解锁 PIN 设置" }, + "unlockWithBiometricSet": { + "message": "生物识别解锁设置" + }, "authenticating": { "message": "正在验证" }, @@ -5235,7 +5311,7 @@ "message": "SSH 密钥导入成功" }, "cannotRemoveViewOnlyCollections": { - "message": "您无法删除仅具有「查看」权限的集合:$COLLECTIONS$", + "message": "您无法移除仅具有「查看」权限的集合:$COLLECTIONS$", "placeholders": { "collections": { "content": "$1", @@ -5304,7 +5380,7 @@ "message": "为当前页面自动填充项目" }, "hasItemsVaultNudgeBodyTwo": { - "message": "收藏项目以便快速访问" + "message": "收藏项目以便轻松访问" }, "hasItemsVaultNudgeBodyThree": { "message": "在密码库中搜索其他内容" @@ -5323,7 +5399,7 @@ "example": "Include a Website so this login appears as an autofill suggestion." }, "newLoginNudgeBodyTwo": { - "message": "so this login appears as an autofill suggestion.", + "message": "以便将此登录显示为自动填充建议。", "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", "example": "Include a Website so this login appears as an autofill suggestion." }, @@ -5372,10 +5448,14 @@ "example": "Easily create strong and unique passwords by clicking on {icon} to help you keep your logins secure." }, "generatorNudgeBodyAria": { - "message": "一键创建强大且唯一的密码,帮助您保持登录安全。", + "message": "点击「生成密码」按钮,轻松创建强大且唯一的密码,帮助您保持登录安全。", "description": "Aria label for the body content of the generator nudge" }, "noPermissionsViewPage": { "message": "您没有查看此页面的权限。请尝试使用其他账户登录。" + }, + "wasmNotSupported": { + "message": "您的浏览器不支持 WebAssembly 或 WebAssembly 未启用。使用 Bitwarden App 需要 WebAssembly。", + "description": "'WebAssembly' is a technical term and should not be translated." } } diff --git a/apps/browser/src/_locales/zh_TW/messages.json b/apps/browser/src/_locales/zh_TW/messages.json index 9d4eabb1b49..7403ad53705 100644 --- a/apps/browser/src/_locales/zh_TW/messages.json +++ b/apps/browser/src/_locales/zh_TW/messages.json @@ -1173,6 +1173,12 @@ "message": "Oh no! We couldn't save this. Try entering the details manually.", "description": "Detailed error message shown when saving login details fails." }, + "changePasswordWarning": { + "message": "After changing your password, you will need to log in with your new password. Active sessions on other devices will be logged out within one hour." + }, + "accountRecoveryUpdateMasterPasswordSubtitle": { + "message": "Change your master password to complete account recovery." + }, "enableChangedPasswordNotification": { "message": "詢問更新現有的登入資料" }, @@ -1365,8 +1371,8 @@ "featureUnavailable": { "message": "功能不可用" }, - "encryptionKeyMigrationRequired": { - "message": "需要遷移加密金鑰。請透過網頁版密碼庫登入以更新您的加密金鑰。" + "legacyEncryptionUnsupported": { + "message": "Legacy encryption is no longer supported. Please contact support to recover your account." }, "premiumMembership": { "message": "進階會員" @@ -1922,6 +1928,9 @@ "typeSshKey": { "message": "SSH 金鑰" }, + "typeNote": { + "message": "Note" + }, "newItemHeader": { "message": "新增 $TYPE$", "placeholders": { @@ -2153,8 +2162,8 @@ "setYourPinCode": { "message": "設定您用來解鎖 Bitwarden 的 PIN 碼。您的 PIN 設定將在您完全登出本應用程式時被重設。" }, - "setYourPinCode1": { - "message": "您的 PIN 碼會取代主密碼用來解鎖 Bitwarden。您的 PIN 碼會重置,若您完全登出 Bitwarden。" + "setPinCode": { + "message": "You can use this PIN to unlock Bitwarden. Your PIN will be reset if you ever fully log out of the application." }, "pinRequired": { "message": "必須填入 PIN 碼。" @@ -2204,6 +2213,9 @@ "useThisPassword": { "message": "使用此密碼" }, + "useThisPassphrase": { + "message": "Use this passphrase" + }, "useThisUsername": { "message": "使用此使用者名稱" }, @@ -2481,6 +2493,12 @@ "personalOwnershipPolicyInEffectImports": { "message": "某個組織原則已禁止您將項目匯入至您的個人密碼庫。" }, + "restrictCardTypeImport": { + "message": "Cannot import card item types" + }, + "restrictCardTypeImportDesc": { + "message": "A policy set by 1 or more organizations prevents you from importing cards to your vaults." + }, "domainsTitle": { "message": "網域", "description": "A category title describing the concept of web domains" @@ -2512,6 +2530,10 @@ "change": { "message": "Change" }, + "changePassword": { + "message": "Change password", + "description": "Change password button for browser at risk notification on login." + }, "changeButtonTitle": { "message": "Change password - $ITEMNAME$", "placeholders": { @@ -2521,6 +2543,9 @@ } } }, + "atRiskPassword": { + "message": "At-risk password" + }, "atRiskPasswords": { "message": "At-risk passwords" }, @@ -2555,6 +2580,26 @@ } } }, + "atRiskChangePrompt": { + "message": "Your password for this site is at-risk. $ORGANIZATION$ has requested that you change it.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + }, + "description": "Notification body when a login triggers an at-risk password change request and the change password domain is known." + }, + "atRiskNavigatePrompt": { + "message": "$ORGANIZATION$ wants you to change this password because it is at-risk. Navigate to your account settings to change the password.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + }, + "description": "Notification body when a login triggers an at-risk password change request and no change password domain is provided." + }, "reviewAndChangeAtRiskPassword": { "message": "Review and change one at-risk password" }, @@ -2674,6 +2719,10 @@ "message": "所有 Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, + "maxAccessCountReached": { + "message": "Max access count reached", + "description": "This text will be displayed after a Send has been accessed the maximum amount of times." + }, "hideTextByDefault": { "message": "默認隱藏文字" }, @@ -2876,6 +2925,9 @@ "emailVerificationRequiredDesc": { "message": "您必須驗證您的電子郵件才能使用此功能。您可以在網頁密碼庫裡驗證您的電子郵件。" }, + "masterPasswordSuccessfullySet": { + "message": "Master password successfully set" + }, "updatedMasterPassword": { "message": "已更新主密碼" }, @@ -3408,6 +3460,9 @@ "logInRequestSent": { "message": "已傳送請求" }, + "masterPasswordChanged": { + "message": "Master password saved" + }, "exposedMasterPassword": { "message": "已洩露的主密碼" }, @@ -3522,6 +3577,12 @@ "requestAdminApproval": { "message": "要求管理員核准" }, + "unableToCompleteLogin": { + "message": "Unable to complete login" + }, + "loginOnTrustedDeviceOrAskAdminToAssignPassword": { + "message": "You need to log in on a trusted device or ask your administrator to assign you a password." + }, "ssoIdentifierRequired": { "message": "需要組織 SSO 識別碼。" }, @@ -3607,14 +3668,6 @@ "trustUser": { "message": "Trust user" }, - "sendsNoItemsTitle": { - "message": "沒有可用的 Send", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, - "sendsNoItemsMessage": { - "message": "使用 Send 可以與任何人安全地共用加密資訊。", - "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." - }, "sendsTitleNoItems": { "message": "Send sensitive information safely", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." @@ -4209,6 +4262,26 @@ "message": "常見格式", "description": "Label indicating the most common import formats" }, + "uriMatchDefaultStrategyHint": { + "message": "URI match detection is how Bitwarden identifies autofill suggestions.", + "description": "Explains to the user that URI match detection determines how Bitwarden suggests autofill options, and clarifies that this default strategy applies when no specific match detection is set for a login item." + }, + "regExAdvancedOptionWarning": { + "message": "\"Regular expression\" is an advanced option with increased risk of exposing credentials.", + "description": "Content for dialog which warns a user when selecting 'regular expression' matching strategy as a cipher match strategy" + }, + "startsWithAdvancedOptionWarning": { + "message": "\"Starts with\" is an advanced option with increased risk of exposing credentials.", + "description": "Content for dialog which warns a user when selecting 'starts with' matching strategy as a cipher match strategy" + }, + "uriMatchWarningDialogLink": { + "message": "More about match detection", + "description": "Link to match detection docs on warning dialog for advance match strategy" + }, + "uriAdvancedOption": { + "message": "Advanced options", + "description": "Advanced option placeholder for uri option component" + }, "confirmContinueToBrowserSettingsTitle": { "message": "繼續前往瀏覽器設定?", "description": "Title for dialog which asks if the user wants to proceed to a relevant browser settings page" @@ -5036,6 +5109,9 @@ "unlockPinSet": { "message": "Unlock PIN set" }, + "unlockWithBiometricSet": { + "message": "Unlock with biometrics set" + }, "authenticating": { "message": "驗證中" }, @@ -5377,5 +5453,9 @@ }, "noPermissionsViewPage": { "message": "You do not have permissions to view this page. Try logging in with a different account." + }, + "wasmNotSupported": { + "message": "WebAssembly is not supported on your browser or is not enabled. WebAssembly is required to use the Bitwarden app.", + "description": "'WebAssembly' is a technical term and should not be translated." } } 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 78bee121afb..48fd57431a2 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 @@ -4,7 +4,7 @@ import { Router } from "@angular/router"; import { Subject, firstValueFrom, map, of, startWith, switchMap } from "rxjs"; import { JslibModule } from "@bitwarden/angular/jslib.module"; -import { LockService } from "@bitwarden/auth/common"; +import { LockService, LogoutService } from "@bitwarden/auth/common"; 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"; @@ -34,7 +34,6 @@ import { CurrentAccountComponent } from "./current-account.component"; import { AccountSwitcherService } from "./services/account-switcher.service"; @Component({ - standalone: true, templateUrl: "account-switcher.component.html", imports: [ CommonModule, @@ -70,6 +69,7 @@ export class AccountSwitcherComponent implements OnInit, OnDestroy { private vaultTimeoutSettingsService: VaultTimeoutSettingsService, private authService: AuthService, private lockService: LockService, + private logoutService: LogoutService, ) {} get accountLimit() { @@ -141,12 +141,9 @@ export class AccountSwitcherComponent implements OnInit, OnDestroy { }); if (confirmed) { - const result = await this.accountSwitcherService.logoutAccount(userId); - // unlocked logout responses need to be navigated out of the account switcher. - // other responses will be handled by background and app.component - if (result?.status === AuthenticationStatus.Unlocked) { - this.location.back(); - } + await this.logoutService.logout(userId); + // navigate to root so redirect guard can properly route next active user or null user to correct page + await this.router.navigate(["/"]); } this.loading = false; } diff --git a/apps/browser/src/auth/popup/account-switching/account.component.ts b/apps/browser/src/auth/popup/account-switching/account.component.ts index dad74977d34..c060d9161ef 100644 --- a/apps/browser/src/auth/popup/account-switching/account.component.ts +++ b/apps/browser/src/auth/popup/account-switching/account.component.ts @@ -1,7 +1,8 @@ // FIXME: Update this file to be type safe and remove this and next line // @ts-strict-ignore -import { CommonModule, Location } from "@angular/common"; +import { CommonModule } from "@angular/common"; import { Component, EventEmitter, Input, Output } from "@angular/core"; +import { Router } from "@angular/router"; import { JslibModule } from "@bitwarden/angular/jslib.module"; import { AuthenticationStatus } from "@bitwarden/common/auth/enums/authentication-status"; @@ -13,7 +14,6 @@ import { BiometricsService } from "@bitwarden/key-management"; import { AccountSwitcherService, AvailableAccount } from "./services/account-switcher.service"; @Component({ - standalone: true, selector: "auth-account", templateUrl: "account.component.html", imports: [CommonModule, JslibModule, AvatarModule, ItemModule], @@ -24,7 +24,7 @@ export class AccountComponent { constructor( private accountSwitcherService: AccountSwitcherService, - private location: Location, + private router: Router, private i18nService: I18nService, private logService: LogService, private biometricsService: BiometricsService, @@ -45,8 +45,8 @@ export class AccountComponent { // Navigate out of account switching for unlocked accounts // locked or logged out account statuses are handled by background and app.component - if (result?.status === AuthenticationStatus.Unlocked) { - this.location.back(); + if (result?.authenticationStatus === AuthenticationStatus.Unlocked) { + await this.router.navigate(["vault"]); await this.biometricsService.setShouldAutopromptNow(false); } else { await this.biometricsService.setShouldAutopromptNow(true); diff --git a/apps/browser/src/auth/popup/account-switching/current-account.component.ts b/apps/browser/src/auth/popup/account-switching/current-account.component.ts index ea41a627848..63e8481621a 100644 --- a/apps/browser/src/auth/popup/account-switching/current-account.component.ts +++ b/apps/browser/src/auth/popup/account-switching/current-account.component.ts @@ -24,7 +24,6 @@ export type CurrentAccount = { @Component({ selector: "app-current-account", templateUrl: "current-account.component.html", - standalone: true, imports: [CommonModule, JslibModule, AvatarModule, RouterModule], }) export class CurrentAccountComponent { diff --git a/apps/browser/src/auth/popup/account-switching/services/account-switcher.service.spec.ts b/apps/browser/src/auth/popup/account-switching/services/account-switcher.service.spec.ts index 1fdd0b1ecf2..4bacd453803 100644 --- a/apps/browser/src/auth/popup/account-switching/services/account-switcher.service.spec.ts +++ b/apps/browser/src/auth/popup/account-switching/services/account-switcher.service.spec.ts @@ -207,35 +207,4 @@ describe("AccountSwitcherService", () => { expect(removeListenerSpy).toBeCalledTimes(1); }); }); - - describe("logout", () => { - const userId1 = "1" as UserId; - const userId2 = "2" as UserId; - it("initiates logout", async () => { - let listener: ( - message: { command: string; userId: UserId; status: AuthenticationStatus }, - sender: unknown, - sendResponse: unknown, - ) => void; - jest.spyOn(chrome.runtime.onMessage, "addListener").mockImplementation((addedListener) => { - listener = addedListener; - }); - - const removeListenerSpy = jest.spyOn(chrome.runtime.onMessage, "removeListener"); - - const logoutPromise = accountSwitcherService.logoutAccount(userId1); - - listener( - { command: "switchAccountFinish", userId: userId2, status: AuthenticationStatus.Unlocked }, - undefined, - undefined, - ); - - const result = await logoutPromise; - - expect(messagingService.send).toHaveBeenCalledWith("logout", { userId: userId1 }); - expect(result).toEqual({ newUserId: userId2, status: AuthenticationStatus.Unlocked }); - expect(removeListenerSpy).toBeCalledTimes(1); - }); - }); }); 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 bfed7dc1408..7bb12fc260d 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 @@ -12,6 +12,7 @@ import { timeout, } from "rxjs"; +import { NewActiveUser } from "@bitwarden/auth/common"; import { AccountService } from "@bitwarden/common/auth/abstractions/account.service"; import { AuthService } from "@bitwarden/common/auth/abstractions/auth.service"; import { AvatarService } from "@bitwarden/common/auth/abstractions/avatar.service"; @@ -43,7 +44,7 @@ export class AccountSwitcherService { SPECIAL_ADD_ACCOUNT_ID = "addAccount"; availableAccounts$: Observable; - switchAccountFinished$: Observable<{ userId: UserId; status: AuthenticationStatus }>; + switchAccountFinished$: Observable; constructor( private accountService: AccountService, @@ -118,7 +119,7 @@ export class AccountSwitcherService { [message: { command: string; userId: UserId; status: AuthenticationStatus }] >(chrome.runtime.onMessage).pipe( filter(([message]) => message.command === "switchAccountFinish"), - map(([message]) => ({ userId: message.userId, status: message.status })), + map(([message]) => ({ userId: message.userId, authenticationStatus: message.status })), ); } @@ -143,29 +144,9 @@ export class AccountSwitcherService { return await switchAccountFinishedPromise; } - /** - * - * @param userId the user id to logout - * @returns the userId and status of the that has been switch to due to the logout. null on errors. - */ - async logoutAccount( - userId: UserId, - ): Promise<{ newUserId: UserId; status: AuthenticationStatus } | null> { - // logout creates an account switch to the next up user, which may be null - const switchPromise = this.listenForSwitchAccountFinish(null); - - await this.messagingService.send("logout", { userId }); - - // wait for account switch to happen, the result will be the new user id and status - const result = await switchPromise; - return { newUserId: result.userId, status: result.status }; - } - // Listens for the switchAccountFinish message and returns the userId from the message // Optionally filters switchAccountFinish to an expected userId - private listenForSwitchAccountFinish( - expectedUserId: UserId | null, - ): Promise<{ userId: UserId; status: AuthenticationStatus } | null> { + listenForSwitchAccountFinish(expectedUserId: UserId | null): Promise { return firstValueFrom( this.switchAccountFinished$.pipe( filter(({ userId }) => (expectedUserId ? userId === expectedUserId : true)), diff --git a/apps/browser/src/auth/popup/components/set-pin.component.html b/apps/browser/src/auth/popup/components/set-pin.component.html index 58cb42456ee..d525f9378f1 100644 --- a/apps/browser/src/auth/popup/components/set-pin.component.html +++ b/apps/browser/src/auth/popup/components/set-pin.component.html @@ -5,7 +5,7 @@

- {{ "setYourPinCode1" | i18n }} + {{ "setPinCode" | i18n }}

{{ "pin" | i18n }} diff --git a/apps/browser/src/auth/popup/components/set-pin.component.ts b/apps/browser/src/auth/popup/components/set-pin.component.ts index d79f9eeca89..a9e8e1b122f 100644 --- a/apps/browser/src/auth/popup/components/set-pin.component.ts +++ b/apps/browser/src/auth/popup/components/set-pin.component.ts @@ -14,7 +14,6 @@ import { } from "@bitwarden/components"; @Component({ - standalone: true, templateUrl: "set-pin.component.html", imports: [ DialogModule, diff --git a/apps/browser/src/auth/guards/fido2-auth.guard.ts b/apps/browser/src/auth/popup/guards/fido2-auth.guard.ts similarity index 93% rename from apps/browser/src/auth/guards/fido2-auth.guard.ts rename to apps/browser/src/auth/popup/guards/fido2-auth.guard.ts index 7d7f1f5c4e9..87d490b3d92 100644 --- a/apps/browser/src/auth/guards/fido2-auth.guard.ts +++ b/apps/browser/src/auth/popup/guards/fido2-auth.guard.ts @@ -9,7 +9,7 @@ import { import { AuthService } from "@bitwarden/common/auth/abstractions/auth.service"; import { AuthenticationStatus } from "@bitwarden/common/auth/enums/authentication-status"; -import { BrowserRouterService } from "../../platform/popup/services/browser-router.service"; +import { BrowserRouterService } from "../../../platform/popup/services/browser-router.service"; /** * This guard verifies the user's authentication status. diff --git a/apps/browser/src/auth/popup/login-decryption-options/extension-login-decryption-options.service.spec.ts b/apps/browser/src/auth/popup/login-decryption-options/extension-login-decryption-options.service.spec.ts deleted file mode 100644 index 8f3199cdfce..00000000000 --- a/apps/browser/src/auth/popup/login-decryption-options/extension-login-decryption-options.service.spec.ts +++ /dev/null @@ -1,64 +0,0 @@ -import { Router } from "@angular/router"; -import { MockProxy, mock } from "jest-mock-extended"; -import { BehaviorSubject } from "rxjs"; - -import { MessagingService } from "@bitwarden/common/platform/abstractions/messaging.service"; - -import { postLogoutMessageListener$ } from "../utils/post-logout-message-listener"; - -import { ExtensionLoginDecryptionOptionsService } from "./extension-login-decryption-options.service"; - -// Mock the module providing postLogoutMessageListener$ -jest.mock("../utils/post-logout-message-listener", () => { - return { - postLogoutMessageListener$: new BehaviorSubject(""), // Replace with mock subject - }; -}); - -describe("ExtensionLoginDecryptionOptionsService", () => { - let service: ExtensionLoginDecryptionOptionsService; - - let messagingService: MockProxy; - let router: MockProxy; - let postLogoutMessageSubject: BehaviorSubject; - - beforeEach(() => { - messagingService = mock(); - router = mock(); - - // Cast postLogoutMessageListener$ to BehaviorSubject for dynamic control - postLogoutMessageSubject = postLogoutMessageListener$ as BehaviorSubject; - - service = new ExtensionLoginDecryptionOptionsService(messagingService, router); - }); - - it("should instantiate the service", () => { - expect(service).not.toBeFalsy(); - }); - - describe("logOut()", () => { - it("should send a logout message", async () => { - postLogoutMessageSubject.next("switchAccountFinish"); - - await service.logOut(); - - expect(messagingService.send).toHaveBeenCalledWith("logout"); - }); - - it("should navigate to root on 'switchAccountFinish'", async () => { - postLogoutMessageSubject.next("switchAccountFinish"); - - await service.logOut(); - - expect(router.navigate).toHaveBeenCalledWith(["/"]); - }); - - it("should not navigate for 'doneLoggingOut'", async () => { - postLogoutMessageSubject.next("doneLoggingOut"); - - await service.logOut(); - - expect(router.navigate).not.toHaveBeenCalled(); - }); - }); -}); diff --git a/apps/browser/src/auth/popup/login-decryption-options/extension-login-decryption-options.service.ts b/apps/browser/src/auth/popup/login-decryption-options/extension-login-decryption-options.service.ts deleted file mode 100644 index ea529e277e6..00000000000 --- a/apps/browser/src/auth/popup/login-decryption-options/extension-login-decryption-options.service.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { Router } from "@angular/router"; -import { firstValueFrom } from "rxjs"; - -import { - DefaultLoginDecryptionOptionsService, - LoginDecryptionOptionsService, -} from "@bitwarden/auth/angular"; -import { MessagingService } from "@bitwarden/common/platform/abstractions/messaging.service"; - -import { postLogoutMessageListener$ } from "../utils/post-logout-message-listener"; - -export class ExtensionLoginDecryptionOptionsService - extends DefaultLoginDecryptionOptionsService - implements LoginDecryptionOptionsService -{ - constructor( - protected messagingService: MessagingService, - private router: Router, - ) { - super(messagingService); - } - - override async logOut(): Promise { - // start listening for "switchAccountFinish" or "doneLoggingOut" - const messagePromise = firstValueFrom(postLogoutMessageListener$); - - super.logOut(); - - // wait for messages - const command = await messagePromise; - - // doneLoggingOut already has a message handler that will navigate us - if (command === "switchAccountFinish") { - await this.router.navigate(["/"]); - } - } -} diff --git a/apps/browser/src/auth/popup/login/extension-login-component.service.spec.ts b/apps/browser/src/auth/popup/login/extension-login-component.service.spec.ts index 6d1f0571ae7..bd85ff9293e 100644 --- a/apps/browser/src/auth/popup/login/extension-login-component.service.spec.ts +++ b/apps/browser/src/auth/popup/login/extension-login-component.service.spec.ts @@ -16,7 +16,7 @@ import { Utils } from "@bitwarden/common/platform/misc/utils"; import { PasswordGenerationServiceAbstraction } from "@bitwarden/generator-legacy"; import { BrowserPlatformUtilsService } from "../../../platform/services/platform-utils/browser-platform-utils.service"; -import { ExtensionAnonLayoutWrapperDataService } from "../extension-anon-layout-wrapper/extension-anon-layout-wrapper-data.service"; +import { ExtensionAnonLayoutWrapperDataService } from "../../../popup/components/extension-anon-layout-wrapper/extension-anon-layout-wrapper-data.service"; import { ExtensionLoginComponentService } from "./extension-login-component.service"; diff --git a/apps/browser/src/auth/popup/login/extension-login-component.service.ts b/apps/browser/src/auth/popup/login/extension-login-component.service.ts index 49ed0635b7a..37d74616391 100644 --- a/apps/browser/src/auth/popup/login/extension-login-component.service.ts +++ b/apps/browser/src/auth/popup/login/extension-login-component.service.ts @@ -11,7 +11,7 @@ import { EnvironmentService } from "@bitwarden/common/platform/abstractions/envi import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service"; import { PasswordGenerationServiceAbstraction } from "@bitwarden/generator-legacy"; -import { ExtensionAnonLayoutWrapperDataService } from "../extension-anon-layout-wrapper/extension-anon-layout-wrapper-data.service"; +import { ExtensionAnonLayoutWrapperDataService } from "../../../popup/components/extension-anon-layout-wrapper/extension-anon-layout-wrapper-data.service"; @Injectable() export class ExtensionLoginComponentService diff --git a/apps/browser/src/auth/popup/logout/extension-logout.service.spec.ts b/apps/browser/src/auth/popup/logout/extension-logout.service.spec.ts new file mode 100644 index 00000000000..7ab7742c1c3 --- /dev/null +++ b/apps/browser/src/auth/popup/logout/extension-logout.service.spec.ts @@ -0,0 +1,101 @@ +import { MockProxy, mock } from "jest-mock-extended"; + +import { LogoutReason, LogoutService } from "@bitwarden/auth/common"; +import { AuthenticationStatus } from "@bitwarden/common/auth/enums/authentication-status"; +import { MessagingService } from "@bitwarden/common/platform/abstractions/messaging.service"; +import { UserId } from "@bitwarden/common/types/guid"; + +import { AccountSwitcherService } from "../account-switching/services/account-switcher.service"; + +import { ExtensionLogoutService } from "./extension-logout.service"; + +describe("ExtensionLogoutService", () => { + let logoutService: LogoutService; + let messagingService: MockProxy; + let accountSwitcherService: MockProxy; + + let primaryUserId: UserId; + let secondaryUserId: UserId; + let logoutReason: LogoutReason; + + beforeEach(() => { + primaryUserId = "1" as UserId; + secondaryUserId = "2" as UserId; + logoutReason = "vaultTimeout"; + + messagingService = mock(); + accountSwitcherService = mock(); + logoutService = new ExtensionLogoutService(messagingService, accountSwitcherService); + }); + + it("instantiates", () => { + expect(logoutService).not.toBeFalsy(); + }); + + describe("logout", () => { + describe("No new active user", () => { + beforeEach(() => { + accountSwitcherService.listenForSwitchAccountFinish.mockResolvedValue(null); + }); + + it("sends logout message without a logout reason when not provided", async () => { + const result = await logoutService.logout(primaryUserId); + + expect(accountSwitcherService.listenForSwitchAccountFinish).toHaveBeenCalledTimes(1); + expect(messagingService.send).toHaveBeenCalledWith("logout", { userId: primaryUserId }); + + expect(result).toBeUndefined(); + }); + + it("sends logout message with a logout reason when provided", async () => { + const result = await logoutService.logout(primaryUserId, logoutReason); + + expect(accountSwitcherService.listenForSwitchAccountFinish).toHaveBeenCalledTimes(1); + expect(messagingService.send).toHaveBeenCalledWith("logout", { + userId: primaryUserId, + logoutReason, + }); + expect(result).toBeUndefined(); + }); + }); + + describe("New active user", () => { + const newActiveUserAuthenticationStatus = AuthenticationStatus.Unlocked; + + beforeEach(() => { + accountSwitcherService.listenForSwitchAccountFinish.mockResolvedValue({ + userId: secondaryUserId, + authenticationStatus: newActiveUserAuthenticationStatus, + }); + }); + + it("sends logout message without a logout reason when not provided and returns the new active user", async () => { + const result = await logoutService.logout(primaryUserId); + + expect(accountSwitcherService.listenForSwitchAccountFinish).toHaveBeenCalledTimes(1); + + expect(messagingService.send).toHaveBeenCalledWith("logout", { userId: primaryUserId }); + + expect(result).toEqual({ + userId: secondaryUserId, + authenticationStatus: newActiveUserAuthenticationStatus, + }); + }); + + it("sends logout message with a logout reason when provided and returns the new active user", async () => { + const result = await logoutService.logout(primaryUserId, logoutReason); + + expect(accountSwitcherService.listenForSwitchAccountFinish).toHaveBeenCalledTimes(1); + + expect(messagingService.send).toHaveBeenCalledWith("logout", { + userId: primaryUserId, + logoutReason, + }); + expect(result).toEqual({ + userId: secondaryUserId, + authenticationStatus: newActiveUserAuthenticationStatus, + }); + }); + }); + }); +}); diff --git a/apps/browser/src/auth/popup/logout/extension-logout.service.ts b/apps/browser/src/auth/popup/logout/extension-logout.service.ts new file mode 100644 index 00000000000..c43c18f157a --- /dev/null +++ b/apps/browser/src/auth/popup/logout/extension-logout.service.ts @@ -0,0 +1,39 @@ +import { + DefaultLogoutService, + LogoutReason, + LogoutService, + NewActiveUser, +} from "@bitwarden/auth/common"; +import { MessagingService } from "@bitwarden/common/platform/abstractions/messaging.service"; +import { UserId } from "@bitwarden/common/types/guid"; + +import { AccountSwitcherService } from "../account-switching/services/account-switcher.service"; + +export class ExtensionLogoutService extends DefaultLogoutService implements LogoutService { + constructor( + protected messagingService: MessagingService, + private accountSwitcherService: AccountSwitcherService, + ) { + super(messagingService); + } + + override async logout( + userId: UserId, + logoutReason?: LogoutReason, + ): Promise { + // logout can result in an account switch to the next up user + const accountSwitchFinishPromise = + this.accountSwitcherService.listenForSwitchAccountFinish(null); + + // send the logout message + this.messagingService.send("logout", { userId, logoutReason }); + + // wait for the account switch to finish + const result = await accountSwitchFinishPromise; + if (result) { + return { userId: result.userId, authenticationStatus: result.authenticationStatus }; + } + // if there is no account switch, return undefined + return undefined; + } +} 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 56b18068778..b50e1f55032 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 @@ -25,6 +25,7 @@ import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.servic import { LogService } from "@bitwarden/common/platform/abstractions/log.service"; import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service"; import { StateService } from "@bitwarden/common/platform/abstractions/state.service"; +import { ValidationService } from "@bitwarden/common/platform/abstractions/validation.service"; import { MessageSender } from "@bitwarden/common/platform/messaging"; import { Utils } from "@bitwarden/common/platform/misc/utils"; import { StateProvider } from "@bitwarden/common/platform/state"; @@ -34,13 +35,14 @@ import { CipherService } from "@bitwarden/common/vault/abstractions/cipher.servi import { DialogService, ToastService } from "@bitwarden/components"; import { BiometricStateService, BiometricsService, KeyService } from "@bitwarden/key-management"; +import { BrowserApi } from "../../../platform/browser/browser-api"; +import BrowserPopupUtils from "../../../platform/browser/browser-popup-utils"; import { PopOutComponent } from "../../../platform/popup/components/pop-out.component"; import { PopupRouterCacheService } from "../../../platform/popup/view-cache/popup-router-cache.service"; import { AccountSecurityComponent } from "./account-security.component"; @Component({ - standalone: true, selector: "app-pop-out", template: ` `, }) @@ -56,6 +58,10 @@ describe("AccountSecurityComponent", () => { const biometricStateService = mock(); const policyService = mock(); const pinServiceAbstraction = mock(); + const keyService = mock(); + const validationService = mock(); + const dialogService = mock(); + const platformUtilsService = mock(); beforeEach(async () => { await TestBed.configureTestingModule({ @@ -64,13 +70,13 @@ describe("AccountSecurityComponent", () => { { provide: AccountSecurityComponent, useValue: mock() }, { provide: BiometricsService, useValue: mock() }, { provide: BiometricStateService, useValue: biometricStateService }, - { provide: DialogService, useValue: mock() }, + { provide: DialogService, useValue: dialogService }, { provide: EnvironmentService, useValue: mock() }, { provide: I18nService, useValue: mock() }, { provide: MessageSender, useValue: mock() }, - { provide: KeyService, useValue: mock() }, + { provide: KeyService, useValue: keyService }, { provide: PinServiceAbstraction, useValue: pinServiceAbstraction }, - { provide: PlatformUtilsService, useValue: mock() }, + { provide: PlatformUtilsService, useValue: platformUtilsService }, { provide: PolicyService, useValue: policyService }, { provide: PopupRouterCacheService, useValue: mock() }, { provide: StateService, useValue: mock() }, @@ -85,14 +91,17 @@ describe("AccountSecurityComponent", () => { { provide: OrganizationService, useValue: mock() }, { provide: CollectionService, useValue: mock() }, { provide: ConfigService, useValue: mock() }, + { provide: ValidationService, useValue: validationService }, ], }) .overrideComponent(AccountSecurityComponent, { remove: { imports: [PopOutComponent], + providers: [DialogService], }, add: { imports: [MockPopOutComponent], + providers: [{ provide: DialogService, useValue: dialogService }], }, }) .compileComponents(); @@ -107,10 +116,17 @@ describe("AccountSecurityComponent", () => { vaultTimeoutSettingsService.getVaultTimeoutActionByUserId$.mockReturnValue( of(VaultTimeoutAction.Lock), ); + vaultTimeoutSettingsService.getVaultTimeoutActionByUserId$.mockReturnValue( + of(VaultTimeoutAction.Lock), + ); biometricStateService.promptAutomatically$ = of(false); pinServiceAbstraction.isPinSet.mockResolvedValue(false); }); + afterEach(() => { + jest.resetAllMocks(); + }); + it("pin enabled when RemoveUnlockWithPin policy is not set", async () => { // @ts-strict-ignore policyService.policiesByType$.mockReturnValue(of([null])); @@ -212,4 +228,136 @@ describe("AccountSecurityComponent", () => { const pinInputElement = fixture.debugElement.query(By.css("#pin")); expect(pinInputElement).toBeNull(); }); + + describe("updateBiometric", () => { + let browserApiSpy: jest.SpyInstance; + + beforeEach(() => { + policyService.policiesByType$.mockReturnValue(of([null])); + browserApiSpy = jest.spyOn(BrowserApi, "requestPermission"); + browserApiSpy.mockResolvedValue(true); + }); + + describe("updating to false", () => { + it("calls biometricStateService methods with false when false", async () => { + await component.ngOnInit(); + await component.updateBiometric(false); + + expect(biometricStateService.setBiometricUnlockEnabled).toHaveBeenCalledWith(false); + expect(biometricStateService.setFingerprintValidated).toHaveBeenCalledWith(false); + }); + }); + + describe("updating to true", () => { + let trySetupBiometricsSpy: jest.SpyInstance; + + beforeEach(() => { + trySetupBiometricsSpy = jest.spyOn(component, "trySetupBiometrics"); + }); + + it("displays permission error dialog when nativeMessaging permission is not granted", async () => { + browserApiSpy.mockResolvedValue(false); + + await component.ngOnInit(); + await component.updateBiometric(true); + + expect(dialogService.openSimpleDialog).toHaveBeenCalledWith({ + title: { key: "nativeMessaginPermissionErrorTitle" }, + content: { key: "nativeMessaginPermissionErrorDesc" }, + acceptButtonText: { key: "ok" }, + cancelButtonText: null, + type: "danger", + }); + expect(component.form.controls.biometric.value).toBe(false); + expect(trySetupBiometricsSpy).not.toHaveBeenCalled(); + }); + + it("displays a specific sidebar dialog when nativeMessaging permissions throws an error on firefox + sidebar", async () => { + browserApiSpy.mockRejectedValue(new Error("Permission denied")); + platformUtilsService.isFirefox.mockReturnValue(true); + jest.spyOn(BrowserPopupUtils, "inSidebar").mockReturnValue(true); + + await component.ngOnInit(); + await component.updateBiometric(true); + + expect(dialogService.openSimpleDialog).toHaveBeenCalledWith({ + title: { key: "nativeMessaginPermissionSidebarTitle" }, + content: { key: "nativeMessaginPermissionSidebarDesc" }, + acceptButtonText: { key: "ok" }, + cancelButtonText: null, + type: "info", + }); + expect(component.form.controls.biometric.value).toBe(false); + expect(trySetupBiometricsSpy).not.toHaveBeenCalled(); + }); + + test.each([ + [false, false], + [false, true], + [true, false], + ])( + "displays a generic dialog when nativeMessaging permissions throws an error and isFirefox is %s and onSidebar is %s", + async (isFirefox, inSidebar) => { + browserApiSpy.mockRejectedValue(new Error("Permission denied")); + platformUtilsService.isFirefox.mockReturnValue(isFirefox); + jest.spyOn(BrowserPopupUtils, "inSidebar").mockReturnValue(inSidebar); + + await component.ngOnInit(); + await component.updateBiometric(true); + + expect(dialogService.openSimpleDialog).toHaveBeenCalledWith({ + title: { key: "nativeMessaginPermissionErrorTitle" }, + content: { key: "nativeMessaginPermissionErrorDesc" }, + acceptButtonText: { key: "ok" }, + cancelButtonText: null, + type: "danger", + }); + expect(component.form.controls.biometric.value).toBe(false); + expect(trySetupBiometricsSpy).not.toHaveBeenCalled(); + }, + ); + + it("refreshes additional keys and attempts to setup biometrics when enabled with nativeMessaging permission", async () => { + const setupBiometricsResult = true; + trySetupBiometricsSpy.mockResolvedValue(setupBiometricsResult); + + await component.ngOnInit(); + await component.updateBiometric(true); + + expect(keyService.refreshAdditionalKeys).toHaveBeenCalledWith(mockUserId); + expect(biometricStateService.setBiometricUnlockEnabled).toHaveBeenCalledWith( + setupBiometricsResult, + ); + expect(component.form.controls.biometric.value).toBe(setupBiometricsResult); + }); + + it("handles failed biometrics setup", async () => { + const setupBiometricsResult = false; + trySetupBiometricsSpy.mockResolvedValue(setupBiometricsResult); + + await component.ngOnInit(); + await component.updateBiometric(true); + + expect(biometricStateService.setBiometricUnlockEnabled).toHaveBeenCalledWith( + setupBiometricsResult, + ); + expect(biometricStateService.setFingerprintValidated).toHaveBeenCalledWith( + setupBiometricsResult, + ); + expect(component.form.controls.biometric.value).toBe(setupBiometricsResult); + }); + + it("handles error during biometrics setup", async () => { + // Simulate an error during biometrics setup + keyService.refreshAdditionalKeys.mockRejectedValue(new Error("UserId is required")); + + await component.ngOnInit(); + await component.updateBiometric(true); + + expect(validationService.showError).toHaveBeenCalledWith(new Error("UserId is required")); + expect(component.form.controls.biometric.value).toBe(false); + expect(trySetupBiometricsSpy).not.toHaveBeenCalled(); + }); + }); + }); }); 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 26a805b3624..4f9e1f7414a 100644 --- a/apps/browser/src/auth/popup/settings/account-security.component.ts +++ b/apps/browser/src/auth/popup/settings/account-security.component.ts @@ -45,6 +45,7 @@ import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.servic 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 { ValidationService } from "@bitwarden/common/platform/abstractions/validation.service"; import { DialogRef, CardComponent, @@ -69,7 +70,7 @@ import { import { BiometricErrors, BiometricErrorTypes } from "../../../models/biometricErrors"; import { BrowserApi } from "../../../platform/browser/browser-api"; -import BrowserPopupUtils from "../../../platform/popup/browser-popup-utils"; +import BrowserPopupUtils from "../../../platform/browser/browser-popup-utils"; 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"; @@ -79,7 +80,6 @@ import { AwaitDesktopDialogComponent } from "./await-desktop-dialog.component"; @Component({ templateUrl: "account-security.component.html", - standalone: true, imports: [ CardComponent, CheckboxModule, @@ -154,6 +154,7 @@ export class AccountSecurityComponent implements OnInit, OnDestroy { private toastService: ToastService, private biometricsService: BiometricsService, private vaultNudgesService: NudgesService, + private validationService: ValidationService, ) {} async ngOnInit() { @@ -473,12 +474,14 @@ export class AccountSecurityComponent implements OnInit, OnDestroy { this.form.controls.pin.setValue(userHasPinSet, { emitEvent: false }); const requireReprompt = (await this.pinService.getPinLockType(userId)) == "EPHEMERAL"; this.form.controls.pinLockWithMasterPassword.setValue(requireReprompt, { emitEvent: false }); - this.toastService.showToast({ - variant: "success", - title: null, - message: this.i18nService.t("unlockPinSet"), - }); - await this.vaultNudgesService.dismissNudge(NudgeType.AccountSecurity, userId); + if (userHasPinSet) { + this.toastService.showToast({ + variant: "success", + title: null, + message: this.i18nService.t("unlockPinSet"), + }); + await this.vaultNudgesService.dismissNudge(NudgeType.AccountSecurity, userId); + } } else { const userId = await firstValueFrom(this.accountService.activeAccount$.pipe(getUserId)); await this.vaultTimeoutSettingsService.clear(userId); @@ -521,13 +524,25 @@ export class AccountSecurityComponent implements OnInit, OnDestroy { return; } - await this.keyService.refreshAdditionalKeys(); + try { + const userId = await firstValueFrom(this.accountService.activeAccount$.pipe(getUserId)); + await this.keyService.refreshAdditionalKeys(userId); - const successful = await this.trySetupBiometrics(); - this.form.controls.biometric.setValue(successful); - await this.biometricStateService.setBiometricUnlockEnabled(successful); - if (!successful) { - await this.biometricStateService.setFingerprintValidated(false); + const successful = await this.trySetupBiometrics(); + this.form.controls.biometric.setValue(successful); + await this.biometricStateService.setBiometricUnlockEnabled(successful); + if (!successful) { + await this.biometricStateService.setFingerprintValidated(false); + return; + } + this.toastService.showToast({ + variant: "success", + title: null, + message: this.i18nService.t("unlockWithBiometricSet"), + }); + } catch (error) { + this.form.controls.biometric.setValue(false); + this.validationService.showError(error); } } else { await this.biometricStateService.setBiometricUnlockEnabled(false); @@ -583,6 +598,8 @@ export class AccountSecurityComponent implements OnInit, OnDestroy { this.i18nService.t("errorEnableBiometricTitle"), this.i18nService.t("errorEnableBiometricDesc"), ); + setupResult = false; + return; } setupResult = true; } catch (e) { diff --git a/apps/browser/src/auth/popup/settings/await-desktop-dialog.component.ts b/apps/browser/src/auth/popup/settings/await-desktop-dialog.component.ts index f7c4351dec3..11bb9683bb9 100644 --- a/apps/browser/src/auth/popup/settings/await-desktop-dialog.component.ts +++ b/apps/browser/src/auth/popup/settings/await-desktop-dialog.component.ts @@ -5,7 +5,6 @@ import { ButtonModule, DialogModule, DialogService } from "@bitwarden/components @Component({ templateUrl: "await-desktop-dialog.component.html", - standalone: true, imports: [JslibModule, ButtonModule, DialogModule], }) export class AwaitDesktopDialogComponent { diff --git a/apps/browser/src/auth/popup/utils/auth-popout-window.spec.ts b/apps/browser/src/auth/popup/utils/auth-popout-window.spec.ts index b2c20ba2849..af850c9a7bc 100644 --- a/apps/browser/src/auth/popup/utils/auth-popout-window.spec.ts +++ b/apps/browser/src/auth/popup/utils/auth-popout-window.spec.ts @@ -1,6 +1,6 @@ import { createChromeTabMock } from "../../../autofill/spec/autofill-mocks"; import { BrowserApi } from "../../../platform/browser/browser-api"; -import BrowserPopupUtils from "../../../platform/popup/browser-popup-utils"; +import BrowserPopupUtils from "../../../platform/browser/browser-popup-utils"; import { AuthPopoutType, diff --git a/apps/browser/src/auth/popup/utils/auth-popout-window.ts b/apps/browser/src/auth/popup/utils/auth-popout-window.ts index 0646b684b22..0611891b61e 100644 --- a/apps/browser/src/auth/popup/utils/auth-popout-window.ts +++ b/apps/browser/src/auth/popup/utils/auth-popout-window.ts @@ -1,7 +1,7 @@ // FIXME: Update this file to be type safe and remove this and next line // @ts-strict-ignore import { BrowserApi } from "../../../platform/browser/browser-api"; -import BrowserPopupUtils from "../../../platform/popup/browser-popup-utils"; +import BrowserPopupUtils from "../../../platform/browser/browser-popup-utils"; const AuthPopoutType = { unlockExtension: "auth_unlockExtension", diff --git a/apps/browser/src/auth/services/auth-status-badge-updater.service.ts b/apps/browser/src/auth/services/auth-status-badge-updater.service.ts new file mode 100644 index 00000000000..4205ebc665d --- /dev/null +++ b/apps/browser/src/auth/services/auth-status-badge-updater.service.ts @@ -0,0 +1,56 @@ +import { mergeMap, of, switchMap } from "rxjs"; + +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 { BadgeService } from "../../platform/badge/badge.service"; +import { BadgeIcon } from "../../platform/badge/icon"; +import { BadgeStatePriority } from "../../platform/badge/priority"; +import { Unset } from "../../platform/badge/state"; + +const StateName = "auth-status"; + +export class AuthStatusBadgeUpdaterService { + constructor( + private badgeService: BadgeService, + private accountService: AccountService, + private authService: AuthService, + ) { + this.accountService.activeAccount$ + .pipe( + switchMap((account) => + account + ? this.authService.authStatusFor$(account.id) + : of(AuthenticationStatus.LoggedOut), + ), + mergeMap(async (authStatus) => { + switch (authStatus) { + case AuthenticationStatus.LoggedOut: { + await this.badgeService.setState(StateName, BadgeStatePriority.High, { + icon: BadgeIcon.LoggedOut, + backgroundColor: Unset, + text: Unset, + }); + break; + } + case AuthenticationStatus.Locked: { + await this.badgeService.setState(StateName, BadgeStatePriority.High, { + icon: BadgeIcon.Locked, + backgroundColor: Unset, + text: Unset, + }); + break; + } + case AuthenticationStatus.Unlocked: { + await this.badgeService.setState(StateName, BadgeStatePriority.Low, { + icon: BadgeIcon.Unlocked, + }); + break; + } + } + }), + ) + .subscribe(); + } +} 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 2247328acab..52b2e1bf4c5 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 @@ -13,7 +13,7 @@ jest.mock("../popup/utils/auth-popout-window", () => { }; }); -jest.mock("../../platform/popup/browser-popup-utils", () => ({ +jest.mock("../../platform/browser/browser-popup-utils", () => ({ inSingleActionPopout: jest.fn(), inPopout: jest.fn(), })); @@ -22,7 +22,9 @@ import { DuoLaunchAction } from "@bitwarden/auth/angular"; import { TwoFactorProviderType } from "@bitwarden/common/auth/enums/two-factor-provider-type"; import { BrowserApi } from "../../platform/browser/browser-api"; -import BrowserPopupUtils from "../../platform/popup/browser-popup-utils"; +import BrowserPopupUtils from "../../platform/browser/browser-popup-utils"; +// FIXME (PM-22628): Popup imports are forbidden in background +// eslint-disable-next-line no-restricted-imports import { AuthPopoutType, closeSsoAuthResultPopout, 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 f768b223984..154abe13448 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 @@ -6,7 +6,9 @@ import { import { TwoFactorProviderType } from "@bitwarden/common/auth/enums/two-factor-provider-type"; import { BrowserApi } from "../../platform/browser/browser-api"; -import BrowserPopupUtils from "../../platform/popup/browser-popup-utils"; +import BrowserPopupUtils from "../../platform/browser/browser-popup-utils"; +// FIXME (PM-22628): Popup imports are forbidden in background +// eslint-disable-next-line no-restricted-imports import { AuthPopoutType, closeSsoAuthResultPopout, diff --git a/apps/browser/src/auth/services/extension-two-factor-auth-duo-component.service.ts b/apps/browser/src/auth/services/extension-two-factor-auth-duo-component.service.ts index 594e09fc50c..8fa72cdfc6c 100644 --- a/apps/browser/src/auth/services/extension-two-factor-auth-duo-component.service.ts +++ b/apps/browser/src/auth/services/extension-two-factor-auth-duo-component.service.ts @@ -5,6 +5,8 @@ import { EnvironmentService } from "@bitwarden/common/platform/abstractions/envi import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service"; +// FIXME (PM-22628): Popup imports are forbidden in background +// eslint-disable-next-line no-restricted-imports import { openTwoFactorAuthDuoPopout } from "../../auth/popup/utils/auth-popout-window"; import { ZonedMessageListenerService } from "../../platform/browser/zoned-message-listener.service"; diff --git a/apps/browser/src/auth/services/extension-two-factor-auth-email-component.service.spec.ts b/apps/browser/src/auth/services/extension-two-factor-auth-email-component.service.spec.ts deleted file mode 100644 index 01a0129d0e5..00000000000 --- a/apps/browser/src/auth/services/extension-two-factor-auth-email-component.service.spec.ts +++ /dev/null @@ -1,110 +0,0 @@ -import { MockProxy, mock } from "jest-mock-extended"; - -import { ConfigService } from "@bitwarden/common/platform/abstractions/config/config.service"; -import { DialogService } from "@bitwarden/components"; - -// Must mock modules before importing -jest.mock("../popup/utils/auth-popout-window", () => { - const originalModule = jest.requireActual("../popup/utils/auth-popout-window"); - - return { - ...originalModule, // avoid losing the original module's exports - openTwoFactorAuthEmailPopout: jest.fn(), - }; -}); - -jest.mock("../../platform/popup/browser-popup-utils", () => ({ - inPopup: jest.fn(), -})); - -import { openTwoFactorAuthEmailPopout } from "../../auth/popup/utils/auth-popout-window"; -import BrowserPopupUtils from "../../platform/popup/browser-popup-utils"; - -import { ExtensionTwoFactorAuthEmailComponentService } from "./extension-two-factor-auth-email-component.service"; - -describe("ExtensionTwoFactorAuthEmailComponentService", () => { - let extensionTwoFactorAuthEmailComponentService: ExtensionTwoFactorAuthEmailComponentService; - - let dialogService: MockProxy; - let window: MockProxy; - let configService: MockProxy; - - beforeEach(() => { - jest.clearAllMocks(); - - dialogService = mock(); - window = mock(); - configService = mock(); - - extensionTwoFactorAuthEmailComponentService = new ExtensionTwoFactorAuthEmailComponentService( - dialogService, - window, - configService, - ); - }); - - describe("openPopoutIfApprovedForEmail2fa", () => { - it("should open a popout if the user confirms the warning to popout the extension when in the popup", async () => { - // Arrange - configService.getFeatureFlag.mockResolvedValue(false); - dialogService.openSimpleDialog.mockResolvedValue(true); - - jest.spyOn(BrowserPopupUtils, "inPopup").mockReturnValue(true); - - // Act - await extensionTwoFactorAuthEmailComponentService.openPopoutIfApprovedForEmail2fa(); - - // Assert - expect(dialogService.openSimpleDialog).toHaveBeenCalledWith({ - title: { key: "warning" }, - content: { key: "popup2faCloseMessage" }, - type: "warning", - }); - - expect(openTwoFactorAuthEmailPopout).toHaveBeenCalled(); - }); - - it("should not open a popout if the user cancels the warning to popout the extension when in the popup", async () => { - // Arrange - configService.getFeatureFlag.mockResolvedValue(false); - dialogService.openSimpleDialog.mockResolvedValue(false); - - jest.spyOn(BrowserPopupUtils, "inPopup").mockReturnValue(true); - - // Act - await extensionTwoFactorAuthEmailComponentService.openPopoutIfApprovedForEmail2fa(); - - // Assert - expect(dialogService.openSimpleDialog).toHaveBeenCalledWith({ - title: { key: "warning" }, - content: { key: "popup2faCloseMessage" }, - type: "warning", - }); - - expect(openTwoFactorAuthEmailPopout).not.toHaveBeenCalled(); - }); - - it("should not open a popout if not in the popup", async () => { - // Arrange - configService.getFeatureFlag.mockResolvedValue(false); - jest.spyOn(BrowserPopupUtils, "inPopup").mockReturnValue(false); - - // Act - await extensionTwoFactorAuthEmailComponentService.openPopoutIfApprovedForEmail2fa(); - - // Assert - expect(dialogService.openSimpleDialog).not.toHaveBeenCalled(); - expect(openTwoFactorAuthEmailPopout).not.toHaveBeenCalled(); - }); - - it("does not prompt or open a popout if the feature flag is enabled", async () => { - configService.getFeatureFlag.mockResolvedValue(true); - jest.spyOn(BrowserPopupUtils, "inPopup").mockReturnValue(true); - - await extensionTwoFactorAuthEmailComponentService.openPopoutIfApprovedForEmail2fa(); - - expect(dialogService.openSimpleDialog).not.toHaveBeenCalled(); - expect(openTwoFactorAuthEmailPopout).not.toHaveBeenCalled(); - }); - }); -}); diff --git a/apps/browser/src/auth/services/extension-two-factor-auth-email-component.service.ts b/apps/browser/src/auth/services/extension-two-factor-auth-email-component.service.ts deleted file mode 100644 index 293d88c4e64..00000000000 --- a/apps/browser/src/auth/services/extension-two-factor-auth-email-component.service.ts +++ /dev/null @@ -1,47 +0,0 @@ -import { - DefaultTwoFactorAuthEmailComponentService, - TwoFactorAuthEmailComponentService, -} from "@bitwarden/auth/angular"; -import { FeatureFlag } from "@bitwarden/common/enums/feature-flag.enum"; -import { ConfigService } from "@bitwarden/common/platform/abstractions/config/config.service"; -import { DialogService } from "@bitwarden/components"; - -import { openTwoFactorAuthEmailPopout } from "../../auth/popup/utils/auth-popout-window"; -import BrowserPopupUtils from "../../platform/popup/browser-popup-utils"; - -// TODO: popup state persistence should eventually remove the need for this service -export class ExtensionTwoFactorAuthEmailComponentService - extends DefaultTwoFactorAuthEmailComponentService - implements TwoFactorAuthEmailComponentService -{ - constructor( - private dialogService: DialogService, - private window: Window, - private configService: ConfigService, - ) { - super(); - } - - async openPopoutIfApprovedForEmail2fa(): Promise { - const isTwoFactorFormPersistenceEnabled = await this.configService.getFeatureFlag( - FeatureFlag.PM9115_TwoFactorExtensionDataPersistence, - ); - - if (isTwoFactorFormPersistenceEnabled) { - // If the feature flag is enabled, we don't need to prompt the user to open the popout - return; - } - - if (BrowserPopupUtils.inPopup(this.window)) { - const confirmed = await this.dialogService.openSimpleDialog({ - title: { key: "warning" }, - content: { key: "popup2faCloseMessage" }, - type: "warning", - }); - if (confirmed) { - await openTwoFactorAuthEmailPopout(); - this.window.close(); - } - } - } -} diff --git a/apps/browser/src/autofill/background/abstractions/notification.background.ts b/apps/browser/src/autofill/background/abstractions/notification.background.ts index db110319d20..9c9c5c0e243 100644 --- a/apps/browser/src/autofill/background/abstractions/notification.background.ts +++ b/apps/browser/src/autofill/background/abstractions/notification.background.ts @@ -1,6 +1,9 @@ import { NeverDomains } from "@bitwarden/common/models/domain/domain-service"; import { ServerConfig } from "@bitwarden/common/platform/abstractions/config/server-config"; +import { UserId } from "@bitwarden/common/types/guid"; +import { CipherView } from "@bitwarden/common/vault/models/view/cipher.view"; import { FolderView } from "@bitwarden/common/vault/models/view/folder.view"; +import { SecurityTask } from "@bitwarden/common/vault/tasks"; import { CollectionView } from "../../content/components/common-types"; import { NotificationQueueMessageTypes } from "../../enums/notification-queue-message-type.enum"; @@ -32,10 +35,17 @@ interface AddUnlockVaultQueueMessage extends NotificationQueueMessage { type: "unlock"; } +interface AtRiskPasswordQueueMessage extends NotificationQueueMessage { + type: "at-risk-password"; + organizationName: string; + passwordChangeUri?: string; +} + type NotificationQueueMessageItem = | AddLoginQueueMessage | AddChangePasswordQueueMessage - | AddUnlockVaultQueueMessage; + | AddUnlockVaultQueueMessage + | AtRiskPasswordQueueMessage; type LockedVaultPendingNotificationsData = { commandToRetry: { @@ -50,6 +60,13 @@ type LockedVaultPendingNotificationsData = { target: string; }; +type AtRiskPasswordNotificationsData = { + activeUserId: UserId; + cipher: CipherView; + securityTask: SecurityTask; + uri: string; +}; + type AdjustNotificationBarMessageData = { height: number; }; @@ -76,7 +93,8 @@ type NotificationBackgroundExtensionMessage = { data?: Partial & Partial & Partial & - Partial; + Partial & + Partial; login?: AddLoginMessageData; folder?: string; edit?: boolean; @@ -101,10 +119,20 @@ type NotificationBackgroundExtensionMessageHandlers = { sender, }: BackgroundOnMessageHandlerParams) => Promise; bgCloseNotificationBar: ({ message, sender }: BackgroundOnMessageHandlerParams) => Promise; - bgOpenAtRisksPasswords: ({ message, sender }: BackgroundOnMessageHandlerParams) => Promise; + bgOpenAtRiskPasswords: ({ message, sender }: BackgroundOnMessageHandlerParams) => Promise; bgAdjustNotificationBar: ({ message, sender }: BackgroundOnMessageHandlerParams) => Promise; - bgAddLogin: ({ message, sender }: BackgroundOnMessageHandlerParams) => Promise; - bgChangedPassword: ({ message, sender }: BackgroundOnMessageHandlerParams) => Promise; + bgTriggerAddLoginNotification: ({ + message, + sender, + }: BackgroundOnMessageHandlerParams) => Promise; + bgTriggerChangedPasswordNotification: ({ + message, + sender, + }: BackgroundOnMessageHandlerParams) => Promise; + bgTriggerAtRiskPasswordNotification: ({ + message, + sender, + }: BackgroundOnMessageHandlerParams) => Promise; bgRemoveTabFromNotificationQueue: ({ sender }: BackgroundSenderParam) => void; bgSaveCipher: ({ message, sender }: BackgroundOnMessageHandlerParams) => void; bgOpenAddEditVaultItemPopout: ({ diff --git a/apps/browser/src/autofill/background/abstractions/overlay.background.ts b/apps/browser/src/autofill/background/abstractions/overlay.background.ts index 6ad9b8e06fd..5e2b755ad4a 100644 --- a/apps/browser/src/autofill/background/abstractions/overlay.background.ts +++ b/apps/browser/src/autofill/background/abstractions/overlay.background.ts @@ -4,7 +4,7 @@ import { CipherType } from "@bitwarden/common/vault/enums"; import { CipherRepromptType } from "@bitwarden/common/vault/enums/cipher-reprompt-type"; import { CipherView } from "@bitwarden/common/vault/models/view/cipher.view"; -import { InlineMenuFillTypes } from "../../enums/autofill-overlay.enum"; +import { InlineMenuFillType } from "../../enums/autofill-overlay.enum"; import AutofillPageDetails from "../../models/autofill-page-details"; import { PageDetail } from "../../services/abstractions/autofill.service"; @@ -43,7 +43,7 @@ export type UpdateOverlayCiphersParams = { export type FocusedFieldData = { focusedFieldStyles: Partial; focusedFieldRects: Partial; - inlineMenuFillType?: InlineMenuFillTypes; + inlineMenuFillType?: InlineMenuFillType; tabId?: number; frameId?: number; accountCreationFieldType?: string; diff --git a/apps/browser/src/autofill/background/auto-submit-login.background.spec.ts b/apps/browser/src/autofill/background/auto-submit-login.background.spec.ts index 9f197b02193..373354b4c54 100644 --- a/apps/browser/src/autofill/background/auto-submit-login.background.spec.ts +++ b/apps/browser/src/autofill/background/auto-submit-login.background.spec.ts @@ -5,7 +5,6 @@ import { PolicyService } from "@bitwarden/common/admin-console/abstractions/poli import { Policy } from "@bitwarden/common/admin-console/models/domain/policy"; import { AuthService } from "@bitwarden/common/auth/abstractions/auth.service"; import { AuthenticationStatus } from "@bitwarden/common/auth/enums/authentication-status"; -import { ConfigService } from "@bitwarden/common/platform/abstractions/config/config.service"; import { LogService } from "@bitwarden/common/platform/abstractions/log.service"; import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service"; import { Utils } from "@bitwarden/common/platform/misc/utils"; @@ -35,7 +34,6 @@ describe("AutoSubmitLoginBackground", () => { let scriptInjectorService: MockProxy; let authStatus$: BehaviorSubject; let authService: MockProxy; - let configService: MockProxy; let platformUtilsService: MockProxy; let policyDetails: MockProxy; let automaticAppLogInPolicy$: BehaviorSubject; @@ -56,9 +54,6 @@ describe("AutoSubmitLoginBackground", () => { authStatus$ = new BehaviorSubject(AuthenticationStatus.Unlocked); authService = mock(); authService.activeAccountStatus$ = authStatus$; - configService = mock({ - getFeatureFlag: jest.fn().mockResolvedValue(true), - }); platformUtilsService = mock(); policyDetails = mock({ enabled: true, @@ -78,7 +73,6 @@ describe("AutoSubmitLoginBackground", () => { autofillService, scriptInjectorService, authService, - configService, platformUtilsService, policyService, accountService, @@ -89,7 +83,7 @@ describe("AutoSubmitLoginBackground", () => { jest.clearAllMocks(); }); - describe("when the AutoSubmitLoginBackground feature is disabled", () => { + describe("when conditions prevent auto-submit policy activation", () => { it("destroys all event listeners when the AutomaticAppLogIn policy is not enabled", async () => { automaticAppLogInPolicy$.next([mock({ ...policyDetails, enabled: false })]); @@ -115,7 +109,7 @@ describe("AutoSubmitLoginBackground", () => { }); }); - describe("when the AutoSubmitLoginBackground feature is enabled", () => { + describe("when the AutomaticAppLogIn policy is valid and active", () => { let webRequestDetails: chrome.webRequest.WebRequestBodyDetails; describe("starting the auto-submit login workflow", () => { @@ -268,7 +262,6 @@ describe("AutoSubmitLoginBackground", () => { autofillService, scriptInjectorService, authService, - configService, platformUtilsService, policyService, accountService, diff --git a/apps/browser/src/autofill/background/auto-submit-login.background.ts b/apps/browser/src/autofill/background/auto-submit-login.background.ts index bce876e8f82..dcafe21b63c 100644 --- a/apps/browser/src/autofill/background/auto-submit-login.background.ts +++ b/apps/browser/src/autofill/background/auto-submit-login.background.ts @@ -10,8 +10,6 @@ import { AccountService } from "@bitwarden/common/auth/abstractions/account.serv import { AuthService } from "@bitwarden/common/auth/abstractions/auth.service"; import { AuthenticationStatus } from "@bitwarden/common/auth/enums/authentication-status"; import { getUserId } from "@bitwarden/common/auth/services/account.service"; -import { FeatureFlag } from "@bitwarden/common/enums/feature-flag.enum"; -import { ConfigService } from "@bitwarden/common/platform/abstractions/config/config.service"; import { LogService } from "@bitwarden/common/platform/abstractions/log.service"; import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service"; @@ -42,7 +40,6 @@ export class AutoSubmitLoginBackground implements AutoSubmitLoginBackgroundAbstr private autofillService: AutofillService, private scriptInjectorService: ScriptInjectorService, private authService: AuthService, - private configService: ConfigService, private platformUtilsService: PlatformUtilsService, private policyService: PolicyService, private accountService: AccountService, @@ -51,25 +48,19 @@ export class AutoSubmitLoginBackground implements AutoSubmitLoginBackgroundAbstr } /** - * Initializes the auto-submit login policy. Will return early if - * the feature flag is not set. If the policy is not enabled, it + * Initializes the auto-submit login policy. If the policy is not enabled, it * will trigger a removal of any established listeners. */ async init() { - const featureFlagEnabled = await this.configService.getFeatureFlag( - FeatureFlag.IdpAutoSubmitLogin, - ); - if (featureFlagEnabled) { - this.accountService.activeAccount$ - .pipe( - getUserId, - switchMap((userId) => - this.policyService.policiesByType$(PolicyType.AutomaticAppLogIn, userId), - ), - getFirstPolicy, - ) - .subscribe(this.handleAutoSubmitLoginPolicySubscription.bind(this)); - } + this.accountService.activeAccount$ + .pipe( + getUserId, + switchMap((userId) => + this.policyService.policiesByType$(PolicyType.AutomaticAppLogIn, userId), + ), + getFirstPolicy, + ) + .subscribe(this.handleAutoSubmitLoginPolicySubscription.bind(this)); } /** diff --git a/apps/browser/src/autofill/background/notification.background.spec.ts b/apps/browser/src/autofill/background/notification.background.spec.ts index 009efd7ff36..5e7e3ed30f5 100644 --- a/apps/browser/src/autofill/background/notification.background.spec.ts +++ b/apps/browser/src/autofill/background/notification.background.spec.ts @@ -69,8 +69,9 @@ describe("NotificationBackground", () => { const accountService = mock(); const organizationService = mock(); + const userId = "testId" as UserId; const activeAccountSubject = new BehaviorSubject<{ id: UserId } & AccountInfo>({ - id: "testId" as UserId, + id: userId, email: "test@example.com", emailVerified: true, name: "Test User", @@ -274,7 +275,7 @@ describe("NotificationBackground", () => { }); }); - describe("bgAddLogin message handler", () => { + describe("bgTriggerAddLoginNotification message handler", () => { let tab: chrome.tabs.Tab; let sender: chrome.runtime.MessageSender; let getEnableAddedLoginPromptSpy: jest.SpyInstance; @@ -304,7 +305,7 @@ describe("NotificationBackground", () => { it("skips attempting to add the login if the user is logged out", async () => { const message: NotificationBackgroundExtensionMessage = { - command: "bgAddLogin", + command: "bgTriggerAddLoginNotification", login: { username: "test", password: "password", url: "https://example.com" }, }; activeAccountStatusMock$.next(AuthenticationStatus.LoggedOut); @@ -318,7 +319,7 @@ describe("NotificationBackground", () => { it("skips attempting to add the login if the login data does not contain a valid url", async () => { const message: NotificationBackgroundExtensionMessage = { - command: "bgAddLogin", + command: "bgTriggerAddLoginNotification", login: { username: "test", password: "password", url: "" }, }; activeAccountStatusMock$.next(AuthenticationStatus.Locked); @@ -332,7 +333,7 @@ describe("NotificationBackground", () => { it("skips attempting to add the login if the user with a locked vault has disabled the login notification", async () => { const message: NotificationBackgroundExtensionMessage = { - command: "bgAddLogin", + command: "bgTriggerAddLoginNotification", login: { username: "test", password: "password", url: "https://example.com" }, }; activeAccountStatusMock$.next(AuthenticationStatus.Locked); @@ -349,7 +350,7 @@ describe("NotificationBackground", () => { it("skips attempting to add the login if the user with an unlocked vault has disabled the login notification", async () => { const message: NotificationBackgroundExtensionMessage = { - command: "bgAddLogin", + command: "bgTriggerAddLoginNotification", login: { username: "test", password: "password", url: "https://example.com" }, }; activeAccountStatusMock$.next(AuthenticationStatus.Unlocked); @@ -367,7 +368,7 @@ describe("NotificationBackground", () => { it("skips attempting to change the password for an existing login if the user has disabled changing the password notification", async () => { const message: NotificationBackgroundExtensionMessage = { - command: "bgAddLogin", + command: "bgTriggerAddLoginNotification", login: { username: "test", password: "password", url: "https://example.com" }, }; activeAccountStatusMock$.next(AuthenticationStatus.Unlocked); @@ -389,7 +390,7 @@ describe("NotificationBackground", () => { it("skips attempting to change the password for an existing login if the password has not changed", async () => { const message: NotificationBackgroundExtensionMessage = { - command: "bgAddLogin", + command: "bgTriggerAddLoginNotification", login: { username: "test", password: "password", url: "https://example.com" }, }; activeAccountStatusMock$.next(AuthenticationStatus.Unlocked); @@ -409,7 +410,10 @@ describe("NotificationBackground", () => { it("adds the login to the queue if the user has a locked account", async () => { const login = { username: "test", password: "password", url: "https://example.com" }; - const message: NotificationBackgroundExtensionMessage = { command: "bgAddLogin", login }; + const message: NotificationBackgroundExtensionMessage = { + command: "bgTriggerAddLoginNotification", + login, + }; activeAccountStatusMock$.next(AuthenticationStatus.Locked); getEnableAddedLoginPromptSpy.mockReturnValueOnce(true); @@ -425,7 +429,10 @@ describe("NotificationBackground", () => { password: "password", url: "https://example.com", } as any; - const message: NotificationBackgroundExtensionMessage = { command: "bgAddLogin", login }; + const message: NotificationBackgroundExtensionMessage = { + command: "bgTriggerAddLoginNotification", + login, + }; activeAccountStatusMock$.next(AuthenticationStatus.Unlocked); getEnableAddedLoginPromptSpy.mockReturnValueOnce(true); getAllDecryptedForUrlSpy.mockResolvedValueOnce([ @@ -440,7 +447,10 @@ describe("NotificationBackground", () => { it("adds a change password message to the queue if the user has changed an existing cipher's password", async () => { const login = { username: "tEsT", password: "password", url: "https://example.com" }; - const message: NotificationBackgroundExtensionMessage = { command: "bgAddLogin", login }; + const message: NotificationBackgroundExtensionMessage = { + command: "bgTriggerAddLoginNotification", + login, + }; activeAccountStatusMock$.next(AuthenticationStatus.Unlocked); getEnableAddedLoginPromptSpy.mockResolvedValueOnce(true); getEnableChangedPasswordPromptSpy.mockResolvedValueOnce(true); @@ -463,7 +473,7 @@ describe("NotificationBackground", () => { }); }); - describe("bgChangedPassword message handler", () => { + describe("bgTriggerChangedPasswordNotification message handler", () => { let tab: chrome.tabs.Tab; let sender: chrome.runtime.MessageSender; let pushChangePasswordToQueueSpy: jest.SpyInstance; @@ -481,7 +491,7 @@ describe("NotificationBackground", () => { it("skips attempting to add the change password message to the queue if the passed url is not valid", async () => { const message: NotificationBackgroundExtensionMessage = { - command: "bgChangedPassword", + command: "bgTriggerChangedPasswordNotification", data: { newPassword: "newPassword", currentPassword: "currentPassword", url: "" }, }; @@ -493,7 +503,7 @@ describe("NotificationBackground", () => { it("adds a change password message to the queue if the user does not have an unlocked account", async () => { const message: NotificationBackgroundExtensionMessage = { - command: "bgChangedPassword", + command: "bgTriggerChangedPasswordNotification", data: { newPassword: "newPassword", currentPassword: "currentPassword", @@ -516,7 +526,7 @@ describe("NotificationBackground", () => { it("skips adding a change password message to the queue if the multiple ciphers exist for the passed URL and the current password is not found within the list of ciphers", async () => { const message: NotificationBackgroundExtensionMessage = { - command: "bgChangedPassword", + command: "bgTriggerChangedPasswordNotification", data: { newPassword: "newPassword", currentPassword: "currentPassword", @@ -537,7 +547,7 @@ describe("NotificationBackground", () => { it("skips adding a change password message if more than one existing cipher is found with a matching password ", async () => { const message: NotificationBackgroundExtensionMessage = { - command: "bgChangedPassword", + command: "bgTriggerChangedPasswordNotification", data: { newPassword: "newPassword", currentPassword: "currentPassword", @@ -559,7 +569,7 @@ describe("NotificationBackground", () => { it("adds a change password message to the queue if a single cipher matches the passed current password", async () => { const message: NotificationBackgroundExtensionMessage = { - command: "bgChangedPassword", + command: "bgTriggerChangedPasswordNotification", data: { newPassword: "newPassword", currentPassword: "currentPassword", @@ -587,7 +597,7 @@ describe("NotificationBackground", () => { it("skips adding a change password message if no current password is passed in the message and more than one cipher is found for a url", async () => { const message: NotificationBackgroundExtensionMessage = { - command: "bgChangedPassword", + command: "bgTriggerChangedPasswordNotification", data: { newPassword: "newPassword", url: "https://example.com", @@ -608,7 +618,7 @@ describe("NotificationBackground", () => { it("adds a change password message to the queue if no current password is passed with the message, but a single cipher is matched for the uri", async () => { const message: NotificationBackgroundExtensionMessage = { - command: "bgChangedPassword", + command: "bgTriggerChangedPasswordNotification", data: { newPassword: "newPassword", url: "https://example.com", @@ -1141,8 +1151,11 @@ describe("NotificationBackground", () => { convertAddLoginQueueMessageToCipherViewSpy.mockReturnValueOnce(cipherView); editItemSpy.mockResolvedValueOnce(undefined); cipherEncryptSpy.mockResolvedValueOnce({ - ...cipherView, - id: "testId", + cipher: { + ...cipherView, + id: "testId", + }, + encryptedFor: userId, }); sendMockExtensionMessage(message, sender); @@ -1188,6 +1201,13 @@ describe("NotificationBackground", () => { folderExistsSpy.mockResolvedValueOnce(true); convertAddLoginQueueMessageToCipherViewSpy.mockReturnValueOnce(cipherView); editItemSpy.mockResolvedValueOnce(undefined); + cipherEncryptSpy.mockResolvedValueOnce({ + cipher: { + ...cipherView, + id: "testId", + }, + encryptedFor: userId, + }); const errorMessage = "fetch error"; createWithServerSpy.mockImplementation(() => { throw new Error(errorMessage); diff --git a/apps/browser/src/autofill/background/notification.background.ts b/apps/browser/src/autofill/background/notification.background.ts index a73141b7e4d..65c1ca0277f 100644 --- a/apps/browser/src/autofill/background/notification.background.ts +++ b/apps/browser/src/autofill/background/notification.background.ts @@ -3,7 +3,10 @@ import { firstValueFrom, switchMap, map, of } from "rxjs"; import { CollectionService } from "@bitwarden/admin-console/common"; -import { OrganizationService } from "@bitwarden/common/admin-console/abstractions/organization/organization.service.abstraction"; +import { + getOrganizationById, + OrganizationService, +} from "@bitwarden/common/admin-console/abstractions/organization/organization.service.abstraction"; import { PolicyService } from "@bitwarden/common/admin-console/abstractions/policy/policy.service.abstraction"; import { PolicyType } from "@bitwarden/common/admin-console/enums"; import { AccountService } from "@bitwarden/common/auth/abstractions/account.service"; @@ -41,8 +44,12 @@ import { TaskService } from "@bitwarden/common/vault/tasks"; import { SecurityTaskType } from "@bitwarden/common/vault/tasks/enums"; import { SecurityTask } from "@bitwarden/common/vault/tasks/models/security-task"; +// FIXME (PM-22628): Popup imports are forbidden in background +// eslint-disable-next-line no-restricted-imports import { openUnlockPopout } from "../../auth/popup/utils/auth-popout-window"; import { BrowserApi } from "../../platform/browser/browser-api"; +// FIXME (PM-22628): Popup imports are forbidden in background +// eslint-disable-next-line no-restricted-imports import { openAddEditVaultItemPopout, openViewVaultItemPopout, @@ -55,6 +62,7 @@ import { import { CollectionView } from "../content/components/common-types"; import { NotificationQueueMessageType } from "../enums/notification-queue-message-type.enum"; import { AutofillService } from "../services/abstractions/autofill.service"; +import { TemporaryNotificationChangeLoginService } from "../services/notification-change-login-password.service"; import { AddChangePasswordQueueMessage, @@ -81,14 +89,18 @@ export default class NotificationBackground { ExtensionCommand.AutofillIdentity, ]); private readonly extensionMessageHandlers: NotificationBackgroundExtensionMessageHandlers = { - bgAddLogin: ({ message, sender }) => this.addLogin(message, sender), bgAdjustNotificationBar: ({ message, sender }) => this.handleAdjustNotificationBarMessage(message, sender), - bgChangedPassword: ({ message, sender }) => this.changedPassword(message, sender), + bgTriggerAddLoginNotification: ({ message, sender }) => + this.triggerAddLoginNotification(message, sender), + bgTriggerChangedPasswordNotification: ({ message, sender }) => + this.triggerChangedPasswordNotification(message, sender), + bgTriggerAtRiskPasswordNotification: ({ message, sender }) => + this.triggerAtRiskPasswordNotification(message, sender), bgCloseNotificationBar: ({ message, sender }) => this.handleCloseNotificationBarMessage(message, sender), - bgOpenAtRisksPasswords: ({ message, sender }) => - this.handleOpenAtRisksPasswordsMessage(message, sender), + bgOpenAtRiskPasswords: ({ message, sender }) => + this.handleOpenAtRiskPasswordsMessage(message, sender), bgGetActiveUserServerConfig: () => this.getActiveUserServerConfig(), bgGetDecryptedCiphers: () => this.getNotificationCipherData(), bgGetEnableChangedPasswordPrompt: () => this.getEnableChangedPasswordPrompt(), @@ -341,12 +353,17 @@ export default class NotificationBackground { tab: chrome.tabs.Tab, notificationQueueMessage: NotificationQueueMessageItem, ) { - const notificationType = notificationQueueMessage.type; + const { + type: notificationType, + wasVaultLocked: isVaultLocked, + launchTimestamp, + ...params + } = notificationQueueMessage; const typeData: NotificationTypeData = { - isVaultLocked: notificationQueueMessage.wasVaultLocked, + isVaultLocked, theme: await firstValueFrom(this.themeStateService.selectedTheme$), - launchTimestamp: notificationQueueMessage.launchTimestamp, + launchTimestamp, }; switch (notificationType) { @@ -358,6 +375,7 @@ export default class NotificationBackground { await BrowserApi.tabSendMessageData(tab, "openNotificationBar", { type: notificationType, typeData, + params, }); } @@ -375,6 +393,48 @@ export default class NotificationBackground { } } + /** + * Sends a message to trigger the at risk password notification + * + * @param message - The extension message + * @param sender - The contextual sender of the message + */ + async triggerAtRiskPasswordNotification( + message: NotificationBackgroundExtensionMessage, + sender: chrome.runtime.MessageSender, + ): Promise { + const { activeUserId, securityTask, cipher } = message.data; + const domain = Utils.getDomain(sender.tab.url); + const passwordChangeUri = + await new TemporaryNotificationChangeLoginService().getChangePasswordUrl(cipher); + + const authStatus = await this.getAuthStatus(); + + const wasVaultLocked = authStatus === AuthenticationStatus.Locked; + + const organization = await firstValueFrom( + this.organizationService + .organizations$(activeUserId) + .pipe(getOrganizationById(securityTask.organizationId)), + ); + + this.removeTabFromNotificationQueue(sender.tab); + const launchTimestamp = new Date().getTime(); + const queueMessage: NotificationQueueMessageItem = { + domain, + wasVaultLocked, + type: NotificationQueueMessageType.AtRiskPassword, + passwordChangeUri, + organizationName: organization.name, + tab: sender.tab, + launchTimestamp, + expires: new Date(launchTimestamp + NOTIFICATION_BAR_LIFESPAN_MS), + }; + this.notificationQueue.push(queueMessage); + await this.checkNotificationQueue(sender.tab); + return true; + } + /** * Adds a login message to the notification queue, prompting the user to save * the login if it does not already exist in the vault. If the cipher exists @@ -383,20 +443,20 @@ export default class NotificationBackground { * @param message - The message to add to the queue * @param sender - The contextual sender of the message */ - async addLogin( + async triggerAddLoginNotification( message: NotificationBackgroundExtensionMessage, sender: chrome.runtime.MessageSender, - ) { + ): Promise { const authStatus = await this.getAuthStatus(); if (authStatus === AuthenticationStatus.LoggedOut) { - return; + return false; } const loginInfo = message.login; const normalizedUsername = loginInfo.username ? loginInfo.username.toLowerCase() : ""; const loginDomain = Utils.getDomain(loginInfo.url); if (loginDomain == null) { - return; + return false; } const addLoginIsEnabled = await this.getEnableAddedLoginPrompt(); @@ -406,14 +466,14 @@ export default class NotificationBackground { await this.pushAddLoginToQueue(loginDomain, loginInfo, sender.tab, true); } - return; + return false; } const activeUserId = await firstValueFrom( this.accountService.activeAccount$.pipe(getOptionalUserId), ); if (activeUserId == null) { - return; + return false; } const ciphers = await this.cipherService.getAllDecryptedForUrl(loginInfo.url, activeUserId); @@ -422,7 +482,7 @@ export default class NotificationBackground { ); if (addLoginIsEnabled && usernameMatches.length === 0) { await this.pushAddLoginToQueue(loginDomain, loginInfo, sender.tab); - return; + return true; } const changePasswordIsEnabled = await this.getEnableChangedPasswordPrompt(); @@ -438,7 +498,9 @@ export default class NotificationBackground { loginInfo.password, sender.tab, ); + return true; } + return false; } private async pushAddLoginToQueue( @@ -472,14 +534,14 @@ export default class NotificationBackground { * @param message - The message to add to the queue * @param sender - The contextual sender of the message */ - async changedPassword( + async triggerChangedPasswordNotification( message: NotificationBackgroundExtensionMessage, sender: chrome.runtime.MessageSender, ) { const changeData = message.data as ChangePasswordMessageData; const loginDomain = Utils.getDomain(changeData.url); if (loginDomain == null) { - return; + return false; } if ((await this.getAuthStatus()) < AuthenticationStatus.Unlocked) { @@ -490,7 +552,7 @@ export default class NotificationBackground { sender.tab, true, ); - return; + return true; } let id: string = null; @@ -498,7 +560,7 @@ export default class NotificationBackground { this.accountService.activeAccount$.pipe(getOptionalUserId), ); if (activeUserId == null) { - return; + return false; } const ciphers = await this.cipherService.getAllDecryptedForUrl(changeData.url, activeUserId); @@ -514,7 +576,9 @@ export default class NotificationBackground { } if (id != null) { await this.pushChangePasswordToQueue(id, loginDomain, changeData.newPassword, sender.tab); + return true; } + return false; } /** @@ -719,9 +783,10 @@ export default class NotificationBackground { return; } - const cipher = await this.cipherService.encrypt(newCipher, activeUserId); + const encrypted = await this.cipherService.encrypt(newCipher, activeUserId); + const { cipher } = encrypted; try { - await this.cipherService.createWithServer(cipher); + await this.cipherService.createWithServer(encrypted); await BrowserApi.tabSendMessageData(tab, "saveCipherAttemptCompleted", { itemName: newCipher?.name && String(newCipher?.name), cipherId: cipher?.id && String(cipher?.id), @@ -899,7 +964,7 @@ export default class NotificationBackground { return null; } - private async getSecurityTasks(userId: UserId) { + async getSecurityTasks(userId: UserId) { let tasks: SecurityTask[] = []; if (userId) { @@ -991,7 +1056,7 @@ export default class NotificationBackground { this.accountService.activeAccount$.pipe( getUserId, switchMap((userId) => - this.policyService.policyAppliesToUser$(PolicyType.PersonalOwnership, userId), + this.policyService.policyAppliesToUser$(PolicyType.OrganizationDataOwnership, userId), ), ), ); @@ -1073,7 +1138,7 @@ export default class NotificationBackground { * @param message - The extension message * @param sender - The contextual sender of the message */ - private async handleOpenAtRisksPasswordsMessage( + private async handleOpenAtRiskPasswordsMessage( message: NotificationBackgroundExtensionMessage, sender: chrome.runtime.MessageSender, ) { diff --git a/apps/browser/src/autofill/background/overlay-notifications.background.spec.ts b/apps/browser/src/autofill/background/overlay-notifications.background.spec.ts index a51757dabea..00114330bc4 100644 --- a/apps/browser/src/autofill/background/overlay-notifications.background.spec.ts +++ b/apps/browser/src/autofill/background/overlay-notifications.background.spec.ts @@ -1,9 +1,12 @@ import { mock, MockProxy } from "jest-mock-extended"; +import { AccountService } from "@bitwarden/common/auth/abstractions/account.service"; import { CLEAR_NOTIFICATION_LOGIN_DATA_DURATION } from "@bitwarden/common/autofill/constants"; import { ServerConfig } from "@bitwarden/common/platform/abstractions/config/server-config"; import { LogService } from "@bitwarden/common/platform/abstractions/log.service"; import { EnvironmentServerConfigData } from "@bitwarden/common/platform/models/data/server-config.data"; +import { CipherService } from "@bitwarden/common/vault/abstractions/cipher.service"; +import { TaskService } from "@bitwarden/common/vault/tasks"; import { BrowserApi } from "../../platform/browser/browser-api"; import AutofillField from "../models/autofill-field"; @@ -24,6 +27,9 @@ import { OverlayNotificationsBackground } from "./overlay-notifications.backgrou describe("OverlayNotificationsBackground", () => { let logService: MockProxy; let notificationBackground: NotificationBackground; + let taskService: TaskService; + let accountService: AccountService; + let cipherService: CipherService; let getEnableChangedPasswordPromptSpy: jest.SpyInstance; let getEnableAddedLoginPromptSpy: jest.SpyInstance; let overlayNotificationsBackground: OverlayNotificationsBackground; @@ -32,6 +38,9 @@ describe("OverlayNotificationsBackground", () => { jest.useFakeTimers(); logService = mock(); notificationBackground = mock(); + taskService = mock(); + accountService = mock(); + cipherService = mock(); getEnableChangedPasswordPromptSpy = jest .spyOn(notificationBackground, "getEnableChangedPasswordPrompt") .mockResolvedValue(true); @@ -41,6 +50,9 @@ describe("OverlayNotificationsBackground", () => { overlayNotificationsBackground = new OverlayNotificationsBackground( logService, notificationBackground, + taskService, + accountService, + cipherService, ); await overlayNotificationsBackground.init(); }); @@ -329,8 +341,11 @@ describe("OverlayNotificationsBackground", () => { tab: { id: 1 }, url: "https://example.com", }); - notificationChangedPasswordSpy = jest.spyOn(notificationBackground, "changedPassword"); - notificationAddLoginSpy = jest.spyOn(notificationBackground, "addLogin"); + notificationChangedPasswordSpy = jest.spyOn( + notificationBackground, + "triggerChangedPasswordNotification", + ); + notificationAddLoginSpy = jest.spyOn(notificationBackground, "triggerAddLoginNotification"); sendMockExtensionMessage( { command: "collectPageDetailsResponse", details: pageDetails }, diff --git a/apps/browser/src/autofill/background/overlay-notifications.background.ts b/apps/browser/src/autofill/background/overlay-notifications.background.ts index 5c85ce132d7..93357113fc4 100644 --- a/apps/browser/src/autofill/background/overlay-notifications.background.ts +++ b/apps/browser/src/autofill/background/overlay-notifications.background.ts @@ -1,9 +1,15 @@ // FIXME: Update this file to be type safe and remove this and next line // @ts-strict-ignore -import { Subject, switchMap, timer } from "rxjs"; +import { firstValueFrom, Subject, switchMap, timer } from "rxjs"; +import { AccountService } from "@bitwarden/common/auth/abstractions/account.service"; +import { getOptionalUserId } from "@bitwarden/common/auth/services/account.service"; import { CLEAR_NOTIFICATION_LOGIN_DATA_DURATION } from "@bitwarden/common/autofill/constants"; import { LogService } from "@bitwarden/common/platform/abstractions/log.service"; +import { UserId } from "@bitwarden/common/types/guid"; +import { CipherService } from "@bitwarden/common/vault/abstractions/cipher.service"; +import { CipherView } from "@bitwarden/common/vault/models/view/cipher.view"; +import { SecurityTask, SecurityTaskStatus, TaskService } from "@bitwarden/common/vault/tasks"; import { BrowserApi } from "../../platform/browser/browser-api"; import { generateDomainMatchPatterns, isInvalidResponseStatusCode } from "../utils"; @@ -19,6 +25,12 @@ import { } from "./abstractions/overlay-notifications.background"; import NotificationBackground from "./notification.background"; +type LoginSecurityTaskInfo = { + securityTask: SecurityTask; + cipher: CipherView; + uri: ModifyLoginCipherFormData["uri"]; +}; + export class OverlayNotificationsBackground implements OverlayNotificationsBackgroundInterface { private websiteOriginsWithFields: WebsiteOriginsWithFields = new Map(); private activeFormSubmissionRequests: ActiveFormSubmissionRequests = new Set(); @@ -35,6 +47,9 @@ export class OverlayNotificationsBackground implements OverlayNotificationsBackg constructor( private logService: LogService, private notificationBackground: NotificationBackground, + private taskService: TaskService, + private accountService: AccountService, + private cipherService: CipherService, ) {} /** @@ -259,8 +274,8 @@ export class OverlayNotificationsBackground implements OverlayNotificationsBackg const modifyLoginData = this.modifyLoginCipherFormData.get(tabId); return ( !modifyLoginData || - !this.shouldTriggerAddLoginNotification(modifyLoginData) || - !this.shouldTriggerChangePasswordNotification(modifyLoginData) + !this.shouldAttemptAddLoginNotification(modifyLoginData) || + !this.shouldAttemptChangedPasswordNotification(modifyLoginData) ); }; @@ -404,10 +419,11 @@ export class OverlayNotificationsBackground implements OverlayNotificationsBackg modifyLoginData: ModifyLoginCipherFormData, tab: chrome.tabs.Tab, ) => { - if (this.shouldTriggerChangePasswordNotification(modifyLoginData)) { + let result: string; + if (this.shouldAttemptChangedPasswordNotification(modifyLoginData)) { // These notifications are temporarily setup as "messages" to the notification background. // This will be structured differently in a future refactor. - await this.notificationBackground.changedPassword( + const success = await this.notificationBackground.triggerChangedPasswordNotification( { command: "bgChangedPassword", data: { @@ -418,14 +434,15 @@ export class OverlayNotificationsBackground implements OverlayNotificationsBackg }, { tab }, ); - this.clearCompletedWebRequest(requestId, tab); - return; + if (!success) { + result = "Unqualified changedPassword notification attempt."; + } } - if (this.shouldTriggerAddLoginNotification(modifyLoginData)) { - await this.notificationBackground.addLogin( + if (this.shouldAttemptAddLoginNotification(modifyLoginData)) { + const success = await this.notificationBackground.triggerAddLoginNotification( { - command: "bgAddLogin", + command: "bgTriggerAddLoginNotification", login: { url: modifyLoginData.uri, username: modifyLoginData.username, @@ -434,8 +451,44 @@ export class OverlayNotificationsBackground implements OverlayNotificationsBackg }, { tab }, ); - this.clearCompletedWebRequest(requestId, tab); + if (!success) { + result = "Unqualified addLogin notification attempt."; + } } + + const shouldGetTasks = + (await this.notificationBackground.getNotificationFlag()) && !modifyLoginData.newPassword; + + if (shouldGetTasks) { + const activeUserId = await firstValueFrom( + this.accountService.activeAccount$.pipe(getOptionalUserId), + ); + + if (activeUserId) { + const loginSecurityTaskInfo = await this.getSecurityTaskAndCipherForLoginData( + modifyLoginData, + activeUserId, + ); + + if (loginSecurityTaskInfo) { + await this.notificationBackground.triggerAtRiskPasswordNotification( + { + command: "bgTriggerAtRiskPasswordNotification", + data: { + activeUserId, + cipher: loginSecurityTaskInfo.cipher, + securityTask: loginSecurityTaskInfo.securityTask, + }, + }, + { tab }, + ); + } else { + result = "Unqualified atRiskPassword notification attempt."; + } + } + } + this.clearCompletedWebRequest(requestId, tab); + return result; }; /** @@ -443,7 +496,7 @@ export class OverlayNotificationsBackground implements OverlayNotificationsBackg * * @param modifyLoginData - The modified login form data */ - private shouldTriggerChangePasswordNotification = ( + private shouldAttemptChangedPasswordNotification = ( modifyLoginData: ModifyLoginCipherFormData, ) => { return modifyLoginData?.newPassword && !modifyLoginData.username; @@ -454,10 +507,66 @@ export class OverlayNotificationsBackground implements OverlayNotificationsBackg * * @param modifyLoginData - The modified login form data */ - private shouldTriggerAddLoginNotification = (modifyLoginData: ModifyLoginCipherFormData) => { + private shouldAttemptAddLoginNotification = (modifyLoginData: ModifyLoginCipherFormData) => { return modifyLoginData?.username && (modifyLoginData.password || modifyLoginData.newPassword); }; + /** + * If there is a security task for this cipher at login, return the task, cipher view, and uri. + * + * @param modifyLoginData - The modified login form data + * @param activeUserId - The currently logged in user ID + */ + private async getSecurityTaskAndCipherForLoginData( + modifyLoginData: ModifyLoginCipherFormData, + activeUserId: UserId, + ): Promise { + const tasks: SecurityTask[] = await this.notificationBackground.getSecurityTasks(activeUserId); + if (!tasks?.length) { + return null; + } + + const urlCiphers: CipherView[] = await this.cipherService.getAllDecryptedForUrl( + modifyLoginData.uri, + activeUserId, + ); + if (!urlCiphers?.length) { + return null; + } + + const securityTaskForLogin = urlCiphers.reduce( + (taskInfo: LoginSecurityTaskInfo | null, cipher: CipherView) => { + if ( + // exit early if info was found already + taskInfo || + // exit early if the cipher was deleted + cipher.deletedDate || + // exit early if the entered login info doesn't match an existing cipher + modifyLoginData.username !== cipher.login.username || + modifyLoginData.password !== cipher.login.password + ) { + return taskInfo; + } + + // Find the first security task for the cipherId belonging to the entered login + const cipherSecurityTask = tasks.find( + ({ cipherId, status }) => + cipher.id === cipherId && // match security task cipher id to url cipher id + status === SecurityTaskStatus.Pending, // security task has not been completed + ); + + if (cipherSecurityTask) { + return { securityTask: cipherSecurityTask, cipher, uri: modifyLoginData.uri }; + } + + return taskInfo; + }, + null, + ); + + return securityTaskForLogin; + } + /** * Clears the completed web request and removes the modified login form data for the tab. * diff --git a/apps/browser/src/autofill/background/overlay.background.spec.ts b/apps/browser/src/autofill/background/overlay.background.spec.ts index 0fe4a459048..92b2135c973 100644 --- a/apps/browser/src/autofill/background/overlay.background.spec.ts +++ b/apps/browser/src/autofill/background/overlay.background.spec.ts @@ -45,7 +45,7 @@ import { AutofillOverlayElement, AutofillOverlayPort, InlineMenuAccountCreationFieldType, - InlineMenuFillType, + InlineMenuFillTypes, MAX_SUB_FRAME_DEPTH, RedirectFocusDirection, } from "../enums/autofill-overlay.enum"; @@ -1025,7 +1025,7 @@ describe("OverlayBackground", () => { overlayBackground["focusedFieldData"] = createFocusedFieldDataMock({ tabId: tab.id, accountCreationFieldType: "text", - inlineMenuFillType: InlineMenuFillType.AccountCreationUsername, + inlineMenuFillType: InlineMenuFillTypes.AccountCreationUsername, }); cipherService.getAllDecryptedForUrl.mockResolvedValue([loginCipher1, identityCipher]); cipherService.sortCiphersByLastUsedThenName.mockReturnValue(-1); @@ -1383,7 +1383,7 @@ describe("OverlayBackground", () => { { command: "updateFocusedFieldData", focusedFieldData: createFocusedFieldDataMock({ - inlineMenuFillType: InlineMenuFillType.CurrentPasswordUpdate, + inlineMenuFillType: InlineMenuFillTypes.CurrentPasswordUpdate, }), }, mock({ tab }), @@ -2045,7 +2045,7 @@ describe("OverlayBackground", () => { }); it("displays the password generator when the focused field is for password generation", async () => { - focusedFieldData.inlineMenuFillType = InlineMenuFillType.PasswordGeneration; + focusedFieldData.inlineMenuFillType = InlineMenuFillTypes.PasswordGeneration; sendMockExtensionMessage({ command: "updateFocusedFieldData", focusedFieldData }, sender); await flushPromises(); @@ -2103,7 +2103,7 @@ describe("OverlayBackground", () => { }); it("shows the save login menu when the focused field type is for password generation and the field is filled", async () => { - focusedFieldData.inlineMenuFillType = InlineMenuFillType.PasswordGeneration; + focusedFieldData.inlineMenuFillType = InlineMenuFillTypes.PasswordGeneration; sendMockExtensionMessage( { command: "updateFocusedFieldData", focusedFieldData, focusedFieldHasValue: true }, @@ -3409,7 +3409,7 @@ describe("OverlayBackground", () => { { command: "updateFocusedFieldData", focusedFieldData: createFocusedFieldDataMock({ - inlineMenuFillType: InlineMenuFillType.CurrentPasswordUpdate, + inlineMenuFillType: InlineMenuFillTypes.CurrentPasswordUpdate, }), }, sender, @@ -3607,7 +3607,7 @@ describe("OverlayBackground", () => { describe("fillGeneratedPassword", () => { const focusedFieldData = createFocusedFieldDataMock({ - inlineMenuFillType: InlineMenuFillType.PasswordGeneration, + inlineMenuFillType: InlineMenuFillTypes.PasswordGeneration, }); beforeEach(() => { diff --git a/apps/browser/src/autofill/background/overlay.background.ts b/apps/browser/src/autofill/background/overlay.background.ts index ab5dd4abb8f..1f249454393 100644 --- a/apps/browser/src/autofill/background/overlay.background.ts +++ b/apps/browser/src/autofill/background/overlay.background.ts @@ -49,8 +49,12 @@ import { IdentityView } from "@bitwarden/common/vault/models/view/identity.view" import { LoginUriView } from "@bitwarden/common/vault/models/view/login-uri.view"; import { LoginView } from "@bitwarden/common/vault/models/view/login.view"; +// FIXME (PM-22628): Popup imports are forbidden in background +// eslint-disable-next-line no-restricted-imports import { openUnlockPopout } from "../../auth/popup/utils/auth-popout-window"; import { BrowserApi } from "../../platform/browser/browser-api"; +// FIXME (PM-22628): Popup imports are forbidden in background +// eslint-disable-next-line no-restricted-imports import { openAddEditVaultItemPopout, openViewVaultItemPopout, @@ -459,7 +463,7 @@ export class OverlayBackground implements OverlayBackgroundInterface { const cipherView = cipherViews[cipherIndex]; if ( !this.cardAndIdentityCiphers.has(cipherView) && - [CipherType.Card, CipherType.Identity].includes(cipherView.type) + ([CipherType.Card, CipherType.Identity] as CipherType[]).includes(cipherView.type) ) { this.cardAndIdentityCiphers.add(cipherView); } @@ -797,7 +801,7 @@ export class OverlayBackground implements OverlayBackgroundInterface { * @param focusedFieldData - Optional focused field data to validate against */ private focusedFieldMatchesFillType( - fillType: InlineMenuFillTypes, + fillType: InlineMenuFillType, focusedFieldData?: FocusedFieldData, ) { const focusedFieldFillType = focusedFieldData @@ -806,7 +810,7 @@ export class OverlayBackground implements OverlayBackgroundInterface { // When updating the current password for a field, it should fill with a login cipher if ( - focusedFieldFillType === InlineMenuFillType.CurrentPasswordUpdate && + focusedFieldFillType === InlineMenuFillTypes.CurrentPasswordUpdate && fillType === CipherType.Login ) { return true; @@ -819,7 +823,7 @@ export class OverlayBackground implements OverlayBackgroundInterface { * Identifies whether the inline menu is being shown on an account creation field. */ private shouldShowInlineMenuAccountCreation(): boolean { - if (this.focusedFieldMatchesFillType(InlineMenuFillType.AccountCreationUsername)) { + if (this.focusedFieldMatchesFillType(InlineMenuFillTypes.AccountCreationUsername)) { return true; } @@ -1152,7 +1156,7 @@ export class OverlayBackground implements OverlayBackgroundInterface { } let pageDetails = Array.from(pageDetailsForTab.values()); - if (this.focusedFieldMatchesFillType(InlineMenuFillType.CurrentPasswordUpdate)) { + if (this.focusedFieldMatchesFillType(InlineMenuFillTypes.CurrentPasswordUpdate)) { pageDetails = this.getFilteredPageDetails( pageDetails, this.inlineMenuFieldQualificationService.isUpdateCurrentPasswordField, @@ -1705,7 +1709,7 @@ export class OverlayBackground implements OverlayBackgroundInterface { private shouldUpdatePasswordGeneratorMenuOnFieldFocus() { return ( this.isInlineMenuButtonVisible && - this.focusedFieldMatchesFillType(InlineMenuFillType.PasswordGeneration) + this.focusedFieldMatchesFillType(InlineMenuFillTypes.PasswordGeneration) ); } @@ -1767,9 +1771,9 @@ export class OverlayBackground implements OverlayBackgroundInterface { private shouldUpdateAccountCreationMenuOnFieldFocus(previousFocusedFieldData: FocusedFieldData) { const accountCreationFieldBlurred = this.focusedFieldMatchesFillType( - InlineMenuFillType.AccountCreationUsername, + InlineMenuFillTypes.AccountCreationUsername, previousFocusedFieldData, - ) && !this.focusedFieldMatchesFillType(InlineMenuFillType.AccountCreationUsername); + ) && !this.focusedFieldMatchesFillType(InlineMenuFillTypes.AccountCreationUsername); return accountCreationFieldBlurred || this.shouldShowInlineMenuAccountCreation(); } @@ -1876,7 +1880,7 @@ export class OverlayBackground implements OverlayBackgroundInterface { return ( (this.shouldShowInlineMenuAccountCreation() || - this.focusedFieldMatchesFillType(InlineMenuFillType.PasswordGeneration)) && + this.focusedFieldMatchesFillType(InlineMenuFillTypes.PasswordGeneration)) && !!(loginData.password || loginData.newPassword) ); } @@ -3036,7 +3040,7 @@ export class OverlayBackground implements OverlayBackgroundInterface { } const focusFieldShouldShowPasswordGenerator = - this.focusedFieldMatchesFillType(InlineMenuFillType.PasswordGeneration) || + this.focusedFieldMatchesFillType(InlineMenuFillTypes.PasswordGeneration) || (showInlineMenuAccountCreation && this.focusedFieldMatchesAccountCreationType(InlineMenuAccountCreationFieldType.Password)); if (!focusFieldShouldShowPasswordGenerator) { diff --git a/apps/browser/src/autofill/background/tabs.background.spec.ts b/apps/browser/src/autofill/background/tabs.background.spec.ts index 4473eb452f3..635ab8504a1 100644 --- a/apps/browser/src/autofill/background/tabs.background.spec.ts +++ b/apps/browser/src/autofill/background/tabs.background.spec.ts @@ -73,7 +73,6 @@ describe("TabsBackground", () => { triggerWindowOnFocusedChangedEvent(10); await flushPromises(); - expect(mainBackground.refreshBadge).toHaveBeenCalled(); expect(mainBackground.refreshMenu).toHaveBeenCalled(); expect(overlayBackground.updateOverlayCiphers).toHaveBeenCalled(); }); @@ -91,7 +90,6 @@ describe("TabsBackground", () => { triggerTabOnActivatedEvent({ tabId: 10, windowId: 20 }); await flushPromises(); - expect(mainBackground.refreshBadge).toHaveBeenCalled(); expect(mainBackground.refreshMenu).toHaveBeenCalled(); expect(overlayBackground.updateOverlayCiphers).toHaveBeenCalled(); }); @@ -127,7 +125,6 @@ describe("TabsBackground", () => { triggerTabOnReplacedEvent(10, 20); await flushPromises(); - expect(mainBackground.refreshBadge).toHaveBeenCalled(); expect(mainBackground.refreshMenu).toHaveBeenCalled(); expect(overlayBackground.updateOverlayCiphers).toHaveBeenCalled(); }); @@ -160,7 +157,6 @@ describe("TabsBackground", () => { triggerTabOnUpdatedEvent(focusedWindowId, { status: "loading" }, tab); await flushPromises(); - expect(mainBackground.refreshBadge).not.toHaveBeenCalled(); expect(mainBackground.refreshMenu).not.toHaveBeenCalled(); expect(overlayBackground.updateOverlayCiphers).not.toHaveBeenCalled(); }); @@ -170,7 +166,6 @@ describe("TabsBackground", () => { triggerTabOnUpdatedEvent(focusedWindowId, { status: "loading" }, tab); await flushPromises(); - expect(mainBackground.refreshBadge).not.toHaveBeenCalled(); expect(mainBackground.refreshMenu).not.toHaveBeenCalled(); expect(overlayBackground.updateOverlayCiphers).not.toHaveBeenCalled(); }); @@ -180,7 +175,6 @@ describe("TabsBackground", () => { triggerTabOnUpdatedEvent(focusedWindowId, { status: "loading" }, tab); await flushPromises(); - expect(mainBackground.refreshBadge).not.toHaveBeenCalled(); expect(mainBackground.refreshMenu).not.toHaveBeenCalled(); expect(overlayBackground.updateOverlayCiphers).not.toHaveBeenCalled(); }); @@ -190,7 +184,6 @@ describe("TabsBackground", () => { triggerTabOnUpdatedEvent(focusedWindowId, { status: "loading" }, tab); await flushPromises(); - expect(mainBackground.refreshBadge).not.toHaveBeenCalled(); expect(mainBackground.refreshMenu).not.toHaveBeenCalled(); }); @@ -205,7 +198,6 @@ describe("TabsBackground", () => { triggerTabOnUpdatedEvent(focusedWindowId, { status: "loading" }, tab); await flushPromises(); - expect(mainBackground.refreshBadge).toHaveBeenCalled(); expect(mainBackground.refreshMenu).toHaveBeenCalled(); expect(overlayBackground.updateOverlayCiphers).toHaveBeenCalled(); }); diff --git a/apps/browser/src/autofill/background/tabs.background.ts b/apps/browser/src/autofill/background/tabs.background.ts index c093f1a3b00..4d520680980 100644 --- a/apps/browser/src/autofill/background/tabs.background.ts +++ b/apps/browser/src/autofill/background/tabs.background.ts @@ -102,7 +102,6 @@ export default class TabsBackground { this.main.onUpdatedRan = true; await this.notificationBackground.checkNotificationQueue(tab); - await this.main.refreshBadge(); await this.main.refreshMenu(); this.main.messagingService.send("tabChanged"); }; @@ -122,7 +121,6 @@ export default class TabsBackground { */ private updateCurrentTabData = async () => { await Promise.all([ - this.main.refreshBadge(), this.main.refreshMenu(), this.overlayBackground.updateOverlayCiphers(false), ]); diff --git a/apps/browser/src/autofill/browser/cipher-context-menu-handler.ts b/apps/browser/src/autofill/browser/cipher-context-menu-handler.ts index e2bf75350a2..b1d65fdea92 100644 --- a/apps/browser/src/autofill/browser/cipher-context-menu-handler.ts +++ b/apps/browser/src/autofill/browser/cipher-context-menu-handler.ts @@ -97,7 +97,9 @@ export class CipherContextMenuHandler { private async updateForCipher(cipher: CipherView) { if ( cipher == null || - !new Set([CipherType.Login, CipherType.Card, CipherType.Identity]).has(cipher.type) + !new Set([CipherType.Login, CipherType.Card, CipherType.Identity] as CipherType[]).has( + cipher.type, + ) ) { return; } 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 2fb435a4c67..c33cb6a4371 100644 --- a/apps/browser/src/autofill/browser/context-menu-clicked-handler.ts +++ b/apps/browser/src/autofill/browser/context-menu-clicked-handler.ts @@ -30,8 +30,12 @@ import { CipherType } from "@bitwarden/common/vault/enums"; import { CipherRepromptType } from "@bitwarden/common/vault/enums/cipher-reprompt-type"; import { CipherView } from "@bitwarden/common/vault/models/view/cipher.view"; +// FIXME (PM-22628): Popup imports are forbidden in background +// eslint-disable-next-line no-restricted-imports import { openUnlockPopout } from "../../auth/popup/utils/auth-popout-window"; import { BrowserApi } from "../../platform/browser/browser-api"; +// FIXME (PM-22628): Popup imports are forbidden in background +// eslint-disable-next-line no-restricted-imports import { openAddEditVaultItemPopout, openVaultItemPasswordRepromptPopout, diff --git a/apps/browser/src/autofill/browser/main-context-menu-handler.spec.ts b/apps/browser/src/autofill/browser/main-context-menu-handler.spec.ts index 267a832a671..901d6595fc8 100644 --- a/apps/browser/src/autofill/browser/main-context-menu-handler.spec.ts +++ b/apps/browser/src/autofill/browser/main-context-menu-handler.spec.ts @@ -1,5 +1,5 @@ import { mock, MockProxy } from "jest-mock-extended"; -import { of } from "rxjs"; +import { BehaviorSubject, of } from "rxjs"; import { AccountService } from "@bitwarden/common/auth/abstractions/account.service"; import { @@ -22,6 +22,10 @@ import { UserId } from "@bitwarden/common/types/guid"; import { CipherType } from "@bitwarden/common/vault/enums"; import { Cipher } from "@bitwarden/common/vault/models/domain/cipher"; import { CipherView } from "@bitwarden/common/vault/models/view/cipher.view"; +import { + RestrictedCipherType, + RestrictedItemTypesService, +} from "@bitwarden/common/vault/services/restricted-item-types.service"; import { MainContextMenuHandler } from "./main-context-menu-handler"; @@ -69,6 +73,8 @@ describe("context-menu", () => { let logService: MockProxy; let billingAccountProfileStateService: MockProxy; let accountService: MockProxy; + let restricted$: BehaviorSubject; + let restrictedItemTypesService: RestrictedItemTypesService; let removeAllSpy: jest.SpyInstance void]>; let createSpy: jest.SpyInstance< @@ -85,6 +91,10 @@ describe("context-menu", () => { logService = mock(); billingAccountProfileStateService = mock(); accountService = mock(); + restricted$ = new BehaviorSubject([]); + restrictedItemTypesService = { + restricted$, + } as Partial as RestrictedItemTypesService; removeAllSpy = jest .spyOn(chrome.contextMenus, "removeAll") @@ -105,6 +115,7 @@ describe("context-menu", () => { logService, billingAccountProfileStateService, accountService, + restrictedItemTypesService, ); jest.spyOn(MainContextMenuHandler, "remove"); @@ -147,6 +158,24 @@ describe("context-menu", () => { expect(createdMenu).toBeTruthy(); expect(createSpy).toHaveBeenCalledTimes(11); }); + + it("has menu enabled and has premium, but card type is restricted", async () => { + billingAccountProfileStateService.hasPremiumFromAnySource$.mockReturnValue(of(true)); + + restricted$.next([{ cipherType: CipherType.Card, allowViewOrgIds: [] }]); + + const createdMenu = await sut.init(); + expect(createdMenu).toBeTruthy(); + expect(createSpy).toHaveBeenCalledTimes(10); + }); + it("has menu enabled, does not have premium, and card type is restricted", async () => { + billingAccountProfileStateService.hasPremiumFromAnySource$.mockReturnValue(of(false)); + restricted$.next([{ cipherType: CipherType.Card, allowViewOrgIds: [] }]); + + const createdMenu = await sut.init(); + expect(createdMenu).toBeTruthy(); + expect(createSpy).toHaveBeenCalledTimes(9); + }); }); describe("loadOptions", () => { diff --git a/apps/browser/src/autofill/browser/main-context-menu-handler.ts b/apps/browser/src/autofill/browser/main-context-menu-handler.ts index ad9dc34e501..abfa2465c51 100644 --- a/apps/browser/src/autofill/browser/main-context-menu-handler.ts +++ b/apps/browser/src/autofill/browser/main-context-menu-handler.ts @@ -25,8 +25,9 @@ import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.servic import { LogService } from "@bitwarden/common/platform/abstractions/log.service"; import { StateService } from "@bitwarden/common/platform/abstractions/state.service"; import { Utils } from "@bitwarden/common/platform/misc/utils"; -import { CipherType } from "@bitwarden/common/vault/enums"; +import { CipherType } from "@bitwarden/common/vault/enums/cipher-type"; import { CipherView } from "@bitwarden/common/vault/models/view/cipher.view"; +import { RestrictedItemTypesService } from "@bitwarden/common/vault/services/restricted-item-types.service"; import { InitContextMenuItems } from "./abstractions/main-context-menu-handler"; @@ -157,6 +158,7 @@ export class MainContextMenuHandler { private logService: LogService, private billingAccountProfileStateService: BillingAccountProfileStateService, private accountService: AccountService, + private restrictedItemTypesService: RestrictedItemTypesService, ) {} /** @@ -181,6 +183,10 @@ export class MainContextMenuHandler { this.billingAccountProfileStateService.hasPremiumFromAnySource$(account.id), ); + const isCardRestricted = ( + await firstValueFrom(this.restrictedItemTypesService.restricted$) + ).some((rt) => rt.cipherType === CipherType.Card); + for (const menuItem of this.initContextMenuItems) { const { requiresPremiumAccess, @@ -192,6 +198,9 @@ export class MainContextMenuHandler { if (requiresPremiumAccess && !hasPremium) { continue; } + if (menuItem.id.startsWith(AUTOFILL_CARD_ID) && isCardRestricted) { + continue; + } await MainContextMenuHandler.create({ ...otherOptions, contexts: ["all"] }); } diff --git a/apps/browser/src/autofill/content/abstractions/content-message-handler.ts b/apps/browser/src/autofill/content/abstractions/content-message-handler.ts index 8231bd688c9..f413ace9432 100644 --- a/apps/browser/src/autofill/content/abstractions/content-message-handler.ts +++ b/apps/browser/src/autofill/content/abstractions/content-message-handler.ts @@ -1,3 +1,5 @@ +import { ExtensionPageUrls } from "@bitwarden/common/vault/enums"; + type ContentMessageWindowData = { command: string; lastpass?: boolean; @@ -5,6 +7,7 @@ type ContentMessageWindowData = { state?: string; data?: string; remember?: boolean; + url?: ExtensionPageUrls; }; type ContentMessageWindowEventParams = { data: ContentMessageWindowData; diff --git a/apps/browser/src/autofill/content/components/buttons/action-button.ts b/apps/browser/src/autofill/content/components/buttons/action-button.ts index 8d8bfacec77..339b628875c 100644 --- a/apps/browser/src/autofill/content/components/buttons/action-button.ts +++ b/apps/browser/src/autofill/content/components/buttons/action-button.ts @@ -4,52 +4,70 @@ import { html, TemplateResult } from "lit"; import { Theme } from "@bitwarden/common/platform/enums"; import { border, themes, typography, spacing } from "../constants/styles"; +import { Spinner } from "../icons"; export type ActionButtonProps = { buttonText: string | TemplateResult; disabled?: boolean; + isLoading?: boolean; theme: Theme; handleClick: (e: Event) => void; + fullWidth?: boolean; }; export function ActionButton({ buttonText, disabled = false, + isLoading = false, theme, handleClick, + fullWidth = true, }: ActionButtonProps) { const handleButtonClick = (event: Event) => { - if (!disabled) { + if (!disabled && !isLoading) { handleClick(event); } }; return html` `; } -const actionButtonStyles = ({ disabled, theme }: { disabled: boolean; theme: Theme }) => css` +const actionButtonStyles = ({ + disabled, + fullWidth, + isLoading, + theme, +}: { + disabled: boolean; + fullWidth: boolean; + isLoading: boolean; + theme: Theme; +}) => css` ${typography.body2} user-select: none; + display: flex; + align-items: center; + justify-content: center; border: 1px solid transparent; border-radius: ${border.radius.full}; padding: ${spacing["1"]} ${spacing["3"]}; - width: 100%; + width: ${fullWidth ? "100%" : "auto"}; overflow: hidden; text-align: center; text-overflow: ellipsis; font-weight: 700; - ${disabled + ${disabled || isLoading ? ` background-color: ${themes[theme].secondary["300"]}; color: ${themes[theme].text.muted}; @@ -71,7 +89,8 @@ const actionButtonStyles = ({ disabled, theme }: { disabled: boolean; theme: The `} svg { - width: fit-content; + padding: 2px 0; /* Match line-height of button body2 typography */ + width: auto; height: 16px; } `; diff --git a/apps/browser/src/autofill/content/components/buttons/additional-tasks/button-content.ts b/apps/browser/src/autofill/content/components/buttons/additional-tasks/button-content.ts new file mode 100644 index 00000000000..2357da4e785 --- /dev/null +++ b/apps/browser/src/autofill/content/components/buttons/additional-tasks/button-content.ts @@ -0,0 +1,29 @@ +import { css } from "@emotion/css"; +import { html } from "lit"; + +import { Theme } from "@bitwarden/common/platform/enums"; + +import { spacing, themes } from "../../constants/styles"; +import { ExternalLink } from "../../icons"; + +export function AdditionalTasksButtonContent({ + buttonText, + theme, +}: { + buttonText: string; + theme: Theme; +}) { + return html` +
+ ${buttonText} + ${ExternalLink({ theme, color: themes[theme].text.contrast })} +
+ `; +} + +export const additionalTasksButtonContentStyles = ({ theme }: { theme: Theme }) => css` + gap: ${spacing[2]}; + display: flex; + align-items: center; + white-space: nowrap; +`; diff --git a/apps/browser/src/autofill/content/components/constants/styles.ts b/apps/browser/src/autofill/content/components/constants/styles.ts index 08c8671ce14..55130781808 100644 --- a/apps/browser/src/autofill/content/components/constants/styles.ts +++ b/apps/browser/src/autofill/content/components/constants/styles.ts @@ -174,6 +174,17 @@ export const buildIconColorRule = (color: string, rule: RuleName = ruleNames.fil ${rule}: ${color}; `; +export const animations = { + spin: ` + 0% { + transform: rotate(0deg); + } + 100% { + transform: rotate(359deg); + } + `, +}; + export function scrollbarStyles(theme: Theme, color?: { thumb?: string; track?: string }) { const thumbColor = color?.thumb || themes[theme].secondary["500"]; const trackColor = color?.track || themes[theme].background.alt; diff --git a/apps/browser/src/autofill/content/components/icons/index.ts b/apps/browser/src/autofill/content/components/icons/index.ts index 65ec6301ac4..d1538e1543f 100644 --- a/apps/browser/src/autofill/content/components/icons/index.ts +++ b/apps/browser/src/autofill/content/components/icons/index.ts @@ -11,4 +11,5 @@ export { Folder } from "./folder"; export { Globe } from "./globe"; export { PencilSquare } from "./pencil-square"; export { Shield } from "./shield"; +export { Spinner } from "./spinner"; export { User } from "./user"; diff --git a/apps/browser/src/autofill/content/components/icons/spinner.ts b/apps/browser/src/autofill/content/components/icons/spinner.ts new file mode 100644 index 00000000000..20f53a43d44 --- /dev/null +++ b/apps/browser/src/autofill/content/components/icons/spinner.ts @@ -0,0 +1,34 @@ +import { css, keyframes } from "@emotion/css"; +import { html } from "lit"; + +import { IconProps } from "../common-types"; +import { buildIconColorRule, ruleNames, themes, animations } from "../constants/styles"; + +export function Spinner({ + ariaHidden = true, + color, + disabled, + theme, + disableSpin = false, +}: IconProps & { disableSpin?: boolean }) { + const shapeColor = disabled ? themes[theme].secondary["300"] : color || themes[theme].text.main; + + return html` + + + + `; +} + +const animation = css` + animation: ${keyframes(animations.spin)} 2s infinite linear; +`; diff --git a/apps/browser/src/autofill/content/components/lit-stories/.lit-docs/action-button.mdx b/apps/browser/src/autofill/content/components/lit-stories/.lit-docs/action-button.mdx index d3c1968b32f..73cd6fb93a9 100644 --- a/apps/browser/src/autofill/content/components/lit-stories/.lit-docs/action-button.mdx +++ b/apps/browser/src/autofill/content/components/lit-stories/.lit-docs/action-button.mdx @@ -20,7 +20,7 @@ It is designed with accessibility and responsive design in mind. | `buttonAction` | `(e: Event) => void` | Yes | The function to execute when the button is clicked. | | `buttonText` | `string` | Yes | The text to display on the button. | | `disabled` | `boolean` (default: false) | No | Disables the button when set to `true`. | -| `theme` | `Theme` | Yes | The theme to style the button. Must match the `Theme` enum. | +| `theme` | `Theme` | Yes | The theme to style the button. Must match the `Theme` type. | ## Installation and Setup diff --git a/apps/browser/src/autofill/content/components/lit-stories/.lit-docs/badge-button.mdx b/apps/browser/src/autofill/content/components/lit-stories/.lit-docs/badge-button.mdx index e0740ced760..47d82ad68da 100644 --- a/apps/browser/src/autofill/content/components/lit-stories/.lit-docs/badge-button.mdx +++ b/apps/browser/src/autofill/content/components/lit-stories/.lit-docs/badge-button.mdx @@ -20,7 +20,7 @@ handling, and a disabled state. The component is optimized for accessibility and | `buttonAction` | `(e: Event) => void` | Yes | The function to execute when the button is clicked. | | `buttonText` | `string` | Yes | The text to display on the badge button. | | `disabled` | `boolean` (default: false) | No | Disables the button when set to `true`. | -| `theme` | `Theme` | Yes | The theme to style the button. Must match the `Theme` enum. | +| `theme` | `Theme` | Yes | The theme to style the button. Must match the `Theme` type. | ## Installation and Setup diff --git a/apps/browser/src/autofill/content/components/lit-stories/.lit-docs/body.mdx b/apps/browser/src/autofill/content/components/lit-stories/.lit-docs/body.mdx index 3a6a955e286..a298594e17f 100644 --- a/apps/browser/src/autofill/content/components/lit-stories/.lit-docs/body.mdx +++ b/apps/browser/src/autofill/content/components/lit-stories/.lit-docs/body.mdx @@ -19,7 +19,7 @@ presenting actionable information. | ------------------ | ------------------ | ------------ | --------------------------------------------------------------------------------------------------------- | | `ciphers` | `CipherData[]` | Yes | An array of cipher data objects. Each cipher includes metadata such as ID, name, type, and login details. | | `notificationType` | `NotificationType` | Yes | Specifies the type of notification, such as `add`, `change`, `unlock`, or `fileless-import`. | -| `theme` | `Theme` | Yes | Defines the theme used for styling the notification. Must match the `Theme` enum. | +| `theme` | `Theme` | Yes | Defines the theme used for styling the notification. Must match the `Theme` type. | --- diff --git a/apps/browser/src/autofill/content/components/lit-stories/.lit-docs/close-button.mdx b/apps/browser/src/autofill/content/components/lit-stories/.lit-docs/close-button.mdx index dcdd38710ba..da9c15246fd 100644 --- a/apps/browser/src/autofill/content/components/lit-stories/.lit-docs/close-button.mdx +++ b/apps/browser/src/autofill/content/components/lit-stories/.lit-docs/close-button.mdx @@ -17,7 +17,7 @@ a close icon for visual clarity. The component is designed to be intuitive and a | **Prop** | **Type** | **Required** | **Description** | | ------------------------- | -------------------- | ------------ | ----------------------------------------------------------- | | `handleCloseNotification` | `(e: Event) => void` | Yes | The function to execute when the button is clicked. | -| `theme` | `Theme` | Yes | The theme to style the button. Must match the `Theme` enum. | +| `theme` | `Theme` | Yes | The theme to style the button. Must match the `Theme` type. | ## Installation and Setup diff --git a/apps/browser/src/autofill/content/components/lit-stories/.lit-docs/edit-button.mdx b/apps/browser/src/autofill/content/components/lit-stories/.lit-docs/edit-button.mdx index 0f38df18912..c6c4262806b 100644 --- a/apps/browser/src/autofill/content/components/lit-stories/.lit-docs/edit-button.mdx +++ b/apps/browser/src/autofill/content/components/lit-stories/.lit-docs/edit-button.mdx @@ -20,7 +20,7 @@ or settings where inline editing is required. | `buttonAction` | `(e: Event) => void` | Yes | The function to execute when the button is clicked. | | `buttonText` | `string` | Yes | The text displayed as the button's tooltip. | | `disabled` | `boolean` (default: false) | No | Disables the button when set to `true`. | -| `theme` | `Theme` | Yes | The theme to style the button. Must match the `Theme` enum. | +| `theme` | `Theme` | Yes | The theme to style the button. Must match the `Theme` type. | ## Installation and Setup diff --git a/apps/browser/src/autofill/content/components/lit-stories/.lit-docs/footer.mdx b/apps/browser/src/autofill/content/components/lit-stories/.lit-docs/footer.mdx index baaad4d8151..6a816f811e0 100644 --- a/apps/browser/src/autofill/content/components/lit-stories/.lit-docs/footer.mdx +++ b/apps/browser/src/autofill/content/components/lit-stories/.lit-docs/footer.mdx @@ -17,7 +17,7 @@ customization based on the `theme` and `notificationType`. | **Prop** | **Type** | **Required** | **Description** | | ------------------ | ------------------ | ------------ | -------------------------------------------------------------------------------------------------- | | `notificationType` | `NotificationType` | Yes | The type of notification footer to display. Options: `add`, `change`, `unlock`, `fileless-import`. | -| `theme` | `Theme` | Yes | Defines the theme of the notification footer. Must match the `Theme` enum. | +| `theme` | `Theme` | Yes | Defines the theme of the notification footer. Must match the `Theme` type. | --- diff --git a/apps/browser/src/autofill/content/components/lit-stories/.lit-docs/header.mdx b/apps/browser/src/autofill/content/components/lit-stories/.lit-docs/header.mdx index fd03fd2f950..ebe35a3dd9b 100644 --- a/apps/browser/src/autofill/content/components/lit-stories/.lit-docs/header.mdx +++ b/apps/browser/src/autofill/content/components/lit-stories/.lit-docs/header.mdx @@ -19,7 +19,7 @@ and an optional close button. This component is versatile and can be styled dyna | ------------------------- | -------------------- | ------------ | ------------------------------------------------------------------- | | `message` | `string` | Yes | The text message to be displayed in the notification. | | `standalone` | `boolean` | No | Determines if the notification is displayed independently. | -| `theme` | `Theme` | Yes | Defines the theme of the notification. Must match the `Theme` enum. | +| `theme` | `Theme` | Yes | Defines the theme of the notification. Must match the `Theme` type. | | `handleCloseNotification` | `(e: Event) => void` | No | A callback function triggered when the close button is clicked. | --- diff --git a/apps/browser/src/autofill/content/components/lit-stories/.lit-docs/icons.mdx b/apps/browser/src/autofill/content/components/lit-stories/.lit-docs/icons.mdx index 571ed10285a..7ec18d0f7bb 100644 --- a/apps/browser/src/autofill/content/components/lit-stories/.lit-docs/icons.mdx +++ b/apps/browser/src/autofill/content/components/lit-stories/.lit-docs/icons.mdx @@ -28,7 +28,7 @@ like size, color, and theme. Each story is an example of how a specific icon can | `iconLink` | `URL` | No | Defines an external URL associated with the icon, prop exclusive to `Brand Icon`. | | `color` | `string` | No | Sets the color of the icon. | | `disabled` | `boolean` | No | Disables the icon visually and functionally. | -| `theme` | `Theme` | Yes | Defines the theme used to style the icons. Must match the `Theme` enum. | +| `theme` | `Theme` | Yes | Defines the theme used to style the icons. Must match the `Theme` type. | | `size` | `number` | Yes | Sets the width and height of the icon in pixels. | --- diff --git a/apps/browser/src/autofill/content/components/lit-stories/buttons/action-button.lit-stories.ts b/apps/browser/src/autofill/content/components/lit-stories/buttons/action-button.lit-stories.ts index 77769bc67dc..dc630e537b0 100644 --- a/apps/browser/src/autofill/content/components/lit-stories/buttons/action-button.lit-stories.ts +++ b/apps/browser/src/autofill/content/components/lit-stories/buttons/action-button.lit-stories.ts @@ -1,9 +1,12 @@ import { Meta, StoryObj } from "@storybook/web-components"; +import { html } from "lit"; import { ThemeTypes } from "@bitwarden/common/platform/enums/theme-type.enum"; import { ActionButton, ActionButtonProps } from "../../buttons/action-button"; +type ComponentAndControls = ActionButtonProps & { width: number }; + export default { title: "Components/Buttons/Action Button", argTypes: { @@ -11,12 +14,15 @@ export default { disabled: { control: "boolean" }, theme: { control: "select", options: [...Object.values(ThemeTypes)] }, handleClick: { control: false }, + width: { control: "number", min: 10, max: 100, step: 1 }, }, args: { buttonText: "Click Me", disabled: false, + isLoading: false, theme: ThemeTypes.Light, handleClick: () => alert("Clicked"), + width: 150, }, parameters: { design: { @@ -24,10 +30,18 @@ export default { url: "https://www.figma.com/design/LEhqLAcBPY8uDKRfU99n9W/Autofill-notification-redesign?node-id=487-14755&t=2O7uCAkwRZCcjumm-4", }, }, -} as Meta; +} as Meta; -const Template = (args: ActionButtonProps) => ActionButton({ ...args }); +const Template = (args: ComponentAndControls) => { + const { width, ...componentProps } = args; + return html`
${ActionButton({ ...componentProps })}
`; +}; + +export const Default: StoryObj = { + args: { + isLoading: true, + theme: "dark", + }, -export const Default: StoryObj = { render: Template, }; diff --git a/apps/browser/src/autofill/content/components/lit-stories/icons/icons.lit-stories.ts b/apps/browser/src/autofill/content/components/lit-stories/icons/icons.lit-stories.ts index 3741ccbcb69..4e18008b94a 100644 --- a/apps/browser/src/autofill/content/components/lit-stories/icons/icons.lit-stories.ts +++ b/apps/browser/src/autofill/content/components/lit-stories/icons/icons.lit-stories.ts @@ -6,9 +6,10 @@ import { ThemeTypes } from "@bitwarden/common/platform/enums/theme-type.enum"; import { IconProps } from "../../common-types"; import * as Icons from "../../icons"; +const { Spinner, ...StaticIcons } = Icons; + type Args = IconProps & { size: number; - iconLink: URL; }; export default { @@ -26,7 +27,10 @@ export default { }, } as Meta; -const Template = (args: Args, IconComponent: (props: IconProps) => ReturnType) => html` +const Template = ( + args: Args, + IconComponent: (props: IconProps & { disableSpin?: boolean }) => ReturnType, +) => html`
@@ -34,18 +38,26 @@ const Template = (args: Args, IconComponent: (props: IconProps) => ReturnType `; -const createIconStory = (iconName: keyof typeof Icons): StoryObj => { +const createIconStory = ( + iconName: keyof typeof StaticIcons, +): StoryObj => { const story = { - render: (args) => Template(args, Icons[iconName]), + render: (args) => Template(args, StaticIcons[iconName]), } as StoryObj; - story.argTypes = { - iconLink: { table: { disable: true } }, - }; - return story; }; +const SpinnerIconStory: StoryObj = { + render: (args) => Template(args, Spinner), + argTypes: { + disableSpin: { control: "boolean" }, + }, + args: { + disableSpin: false, + }, +}; + export const AngleDownIcon = createIconStory("AngleDown"); export const AngleUpIcon = createIconStory("AngleUp"); export const BusinessIcon = createIconStory("Business"); @@ -58,4 +70,5 @@ export const FolderIcon = createIconStory("Folder"); export const GlobeIcon = createIconStory("Globe"); export const PencilSquareIcon = createIconStory("PencilSquare"); export const ShieldIcon = createIconStory("Shield"); +export const SpinnerIcon = SpinnerIconStory; export const UserIcon = createIconStory("User"); diff --git a/apps/browser/src/autofill/content/components/lit-stories/mock-data.ts b/apps/browser/src/autofill/content/components/lit-stories/mock-data.ts index 81cdf5a50f3..3451029a01a 100644 --- a/apps/browser/src/autofill/content/components/lit-stories/mock-data.ts +++ b/apps/browser/src/autofill/content/components/lit-stories/mock-data.ts @@ -103,6 +103,12 @@ export const mockTasks = [ export const mockI18n = { appName: "Bitwarden", + atRiskPassword: "At-risk password", + atRiskNavigatePrompt: + "$ORGANIZATION$ wants you to change this password because it is at-risk. Navigate to your account settings to change the password.", + atRiskChangePrompt: + "Your password for this site is at-risk. $ORGANIZATION$ has requested that you change it.", + changePassword: "Change password", close: "Close", collection: "Collection", folder: "Folder", diff --git a/apps/browser/src/autofill/content/components/lit-stories/notification/at-risk-notification/container.lit-stories.ts b/apps/browser/src/autofill/content/components/lit-stories/notification/at-risk-notification/container.lit-stories.ts new file mode 100644 index 00000000000..3d1fcf339e8 --- /dev/null +++ b/apps/browser/src/autofill/content/components/lit-stories/notification/at-risk-notification/container.lit-stories.ts @@ -0,0 +1,44 @@ +import { Meta, StoryObj } from "@storybook/web-components"; + +import { ThemeTypes } from "@bitwarden/common/platform/enums"; + +import { + AtRiskNotification, + AtRiskNotificationProps, +} from "../../../notification/at-risk-password/container"; +import { mockI18n, mockBrowserI18nGetMessage } from "../../mock-data"; + +export default { + title: "Components/Notifications/At-Risk Notification", + argTypes: { + theme: { control: "select", options: [...Object.values(ThemeTypes)] }, + }, + args: { + theme: ThemeTypes.Light, + handleCloseNotification: () => alert("Close notification action triggered"), + params: { + passwordChangeUri: "https://webtests.dev/.well-known/change-password", // Remove to see "navigate" version of notification + organizationName: "Acme Co.", + }, + i18n: mockI18n, + }, + parameters: { + design: { + type: "figma", + url: "https://www.figma.com/design/LEhqLAcBPY8uDKRfU99n9W/Autofill-notification-redesign?node-id=485-20160&m=dev", + }, + }, +} as Meta; + +const Template = (args: AtRiskNotificationProps) => AtRiskNotification({ ...args }); + +export const Default: StoryObj = { + render: Template, +}; + +window.chrome = { + ...window.chrome, + i18n: { + getMessage: mockBrowserI18nGetMessage, + }, +} as typeof chrome; diff --git a/apps/browser/src/autofill/content/components/notification/at-risk-password/body.ts b/apps/browser/src/autofill/content/components/notification/at-risk-password/body.ts new file mode 100644 index 00000000000..3cc08a26210 --- /dev/null +++ b/apps/browser/src/autofill/content/components/notification/at-risk-password/body.ts @@ -0,0 +1,49 @@ +import createEmotion from "@emotion/css/create-instance"; +import { html, nothing } from "lit"; + +import { Theme } from "@bitwarden/common/platform/enums"; + +import { spacing, themes } from "../../constants/styles"; +import { Warning } from "../../illustrations"; + +import { AtRiskNotificationMessage } from "./message"; + +export const componentClassPrefix = "at-risk-notification-body"; + +const { css } = createEmotion({ + key: componentClassPrefix, +}); + +export type AtRiskNotificationBodyProps = { + riskMessage: string; + theme: Theme; +}; + +export function AtRiskNotificationBody({ riskMessage, theme }: AtRiskNotificationBodyProps) { + return html` +
+
${Warning()}
+ ${riskMessage + ? AtRiskNotificationMessage({ + message: riskMessage, + theme, + }) + : nothing} +
+ `; +} + +const iconContainerStyles = css` + > svg { + width: 50px; + height: auto; + } +`; +const atRiskNotificationBodyStyles = ({ theme }: { theme: Theme }) => css` + gap: ${spacing[4]}; + display: flex; + align-items: center; + justify-content: flex-start; + background-color: ${themes[theme].background.alt}; + padding: 12px; +`; diff --git a/apps/browser/src/autofill/content/components/notification/at-risk-password/container.ts b/apps/browser/src/autofill/content/components/notification/at-risk-password/container.ts new file mode 100644 index 00000000000..90da0833fd9 --- /dev/null +++ b/apps/browser/src/autofill/content/components/notification/at-risk-password/container.ts @@ -0,0 +1,72 @@ +import { css } from "@emotion/css"; +import { html, nothing } from "lit"; + +import { Theme, ThemeTypes } from "@bitwarden/common/platform/enums"; + +import { NotificationBarIframeInitData } from "../../../../notification/abstractions/notification-bar"; +import { I18n } from "../../common-types"; +import { themes, spacing } from "../../constants/styles"; +import { + NotificationHeader, + componentClassPrefix as notificationHeaderClassPrefix, +} from "../header"; + +import { AtRiskNotificationBody } from "./body"; +import { AtRiskNotificationFooter } from "./footer"; + +export type AtRiskNotificationProps = NotificationBarIframeInitData & { + handleCloseNotification: (e: Event) => void; +} & { + i18n: I18n; +}; + +export function AtRiskNotification({ + handleCloseNotification, + i18n, + theme = ThemeTypes.Light, + params, +}: AtRiskNotificationProps) { + const { passwordChangeUri, organizationName } = params; + const riskMessage = chrome.i18n.getMessage( + passwordChangeUri ? "atRiskChangePrompt" : "atRiskNavigatePrompt", + organizationName, + ); + + return html` +
+ ${NotificationHeader({ + handleCloseNotification, + i18n, + message: i18n.atRiskPassword, + theme, + })} + ${AtRiskNotificationBody({ + theme, + riskMessage, + })} + ${passwordChangeUri + ? AtRiskNotificationFooter({ + i18n, + theme, + passwordChangeUri: params?.passwordChangeUri, + }) + : nothing} +
+ `; +} + +const atRiskNotificationContainerStyles = (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"]}; + } +`; diff --git a/apps/browser/src/autofill/content/components/notification/at-risk-password/footer.ts b/apps/browser/src/autofill/content/components/notification/at-risk-password/footer.ts new file mode 100644 index 00000000000..d7805492fa6 --- /dev/null +++ b/apps/browser/src/autofill/content/components/notification/at-risk-password/footer.ts @@ -0,0 +1,42 @@ +import { css } from "@emotion/css"; +import { html } from "lit"; + +import { Theme } from "@bitwarden/common/platform/enums"; + +import { ActionButton } from "../../buttons/action-button"; +import { AdditionalTasksButtonContent } from "../../buttons/additional-tasks/button-content"; +import { I18n } from "../../common-types"; +import { spacing } from "../../constants/styles"; + +export type AtRiskNotificationFooterProps = { + i18n: I18n; + theme: Theme; + passwordChangeUri: string; +}; + +export function AtRiskNotificationFooter({ + i18n, + theme, + passwordChangeUri, +}: AtRiskNotificationFooterProps) { + return html`
+ ${passwordChangeUri && + ActionButton({ + handleClick: () => { + open(passwordChangeUri, "_blank"); + }, + buttonText: AdditionalTasksButtonContent({ buttonText: i18n.changePassword, theme }), + theme, + fullWidth: false, + })} +
`; +} + +const atRiskNotificationFooterStyles = css` + display: flex; + padding: ${spacing[2]} ${spacing[4]} ${spacing[4]} ${spacing[4]}; + + :last-child { + border-radius: 0 0 ${spacing["4"]} ${spacing["4"]}; + } +`; diff --git a/apps/browser/src/autofill/content/components/notification/at-risk-password/message.ts b/apps/browser/src/autofill/content/components/notification/at-risk-password/message.ts new file mode 100644 index 00000000000..42d4907711d --- /dev/null +++ b/apps/browser/src/autofill/content/components/notification/at-risk-password/message.ts @@ -0,0 +1,44 @@ +import { css } from "@emotion/css"; +import { html, nothing } from "lit"; + +import { Theme } from "@bitwarden/common/platform/enums"; + +import { themes } from "../../constants/styles"; + +export type AtRiskNotificationMessageProps = { + message?: string; + theme: Theme; +}; + +export function AtRiskNotificationMessage({ message, theme }: AtRiskNotificationMessageProps) { + return html` +
+ ${message + ? html` + + ${message} + + ` + : nothing} +
+ `; +} + +const baseTextStyles = css` + overflow-x: hidden; + text-align: left; + text-overflow: ellipsis; + line-height: 24px; + font-family: Roboto, sans-serif; + font-size: 16px; +`; + +const atRiskNotificationMessageStyles = (theme: Theme) => css` + ${baseTextStyles} + + color: ${themes[theme].text.main}; + font-weight: 400; + white-space: normal; + word-break: break-word; + display: inline; +`; diff --git a/apps/browser/src/autofill/content/components/notification/button-row.ts b/apps/browser/src/autofill/content/components/notification/button-row.ts index 470147cb469..04b79c1951a 100644 --- a/apps/browser/src/autofill/content/components/notification/button-row.ts +++ b/apps/browser/src/autofill/content/components/notification/button-row.ts @@ -34,6 +34,7 @@ export type NotificationButtonRowProps = { organizations?: OrgView[]; primaryButton: { text: string; + isLoading?: boolean; handlePrimaryButtonClick: (args: any) => void; }; personalVaultIsAllowed: boolean; diff --git a/apps/browser/src/autofill/content/components/notification/container.ts b/apps/browser/src/autofill/content/components/notification/container.ts index cc7f0fc72c0..0c70e0da63c 100644 --- a/apps/browser/src/autofill/content/components/notification/container.ts +++ b/apps/browser/src/autofill/content/components/notification/container.ts @@ -29,6 +29,7 @@ export type NotificationContainerProps = NotificationBarIframeInitData & { folders?: FolderView[]; headerMessage?: string; i18n: I18n; + isLoading?: boolean; organizations?: OrgView[]; personalVaultIsAllowed?: boolean; notificationTestId: string; @@ -44,6 +45,7 @@ export function NotificationContainer({ folders, headerMessage, i18n, + isLoading, organizations, personalVaultIsAllowed = true, notificationTestId, @@ -74,6 +76,7 @@ export function NotificationContainer({ collections, folders, i18n, + isLoading, notificationType: type, organizations, personalVaultIsAllowed, diff --git a/apps/browser/src/autofill/content/components/notification/footer.ts b/apps/browser/src/autofill/content/components/notification/footer.ts index b47dd5cc094..d37547a6fae 100644 --- a/apps/browser/src/autofill/content/components/notification/footer.ts +++ b/apps/browser/src/autofill/content/components/notification/footer.ts @@ -16,6 +16,7 @@ export type NotificationFooterProps = { collections?: CollectionView[]; folders?: FolderView[]; i18n: I18n; + isLoading?: boolean; notificationType?: NotificationType; organizations?: OrgView[]; personalVaultIsAllowed: boolean; @@ -27,6 +28,7 @@ export function NotificationFooter({ collections, folders, i18n, + isLoading, notificationType, organizations, personalVaultIsAllowed, @@ -52,6 +54,7 @@ export function NotificationFooter({ i18n, primaryButton: { handlePrimaryButtonClick: handleSaveAction, + isLoading, text: primaryButtonText, }, personalVaultIsAllowed, 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 041d0a6b696..8b4eabfec50 100644 --- a/apps/browser/src/autofill/content/components/rows/button-row.ts +++ b/apps/browser/src/autofill/content/components/rows/button-row.ts @@ -12,6 +12,7 @@ export type ButtonRowProps = { theme: Theme; primaryButton: { text: string; + isLoading?: boolean; handlePrimaryButtonClick: (args: any) => void; }; selectButtons?: { @@ -29,6 +30,7 @@ export function ButtonRow({ theme, primaryButton, selectButtons }: ButtonRowProp ${ActionButton({ handleClick: primaryButton.handlePrimaryButtonClick, buttonText: primaryButton.text, + isLoading: primaryButton.isLoading, theme, })}
diff --git a/apps/browser/src/autofill/content/content-message-handler.ts b/apps/browser/src/autofill/content/content-message-handler.ts index 60f093f8c10..c57b2d959f3 100644 --- a/apps/browser/src/autofill/content/content-message-handler.ts +++ b/apps/browser/src/autofill/content/content-message-handler.ts @@ -1,3 +1,4 @@ +import { ExtensionPageUrls } from "@bitwarden/common/vault/enums"; import { VaultMessages } from "@bitwarden/common/vault/enums/vault-messages.enum"; import { @@ -18,6 +19,8 @@ const windowMessageHandlers: ContentMessageWindowEventHandlers = { duoResult: ({ data, referrer }: { data: any; referrer: string }) => handleDuoResultMessage(data, referrer), [VaultMessages.OpenAtRiskPasswords]: () => handleOpenAtRiskPasswordsMessage(), + [VaultMessages.OpenBrowserExtensionToUrl]: ({ data }) => + handleOpenBrowserExtensionToUrlMessage(data), }; /** @@ -73,10 +76,15 @@ function handleWebAuthnResultMessage(data: ContentMessageWindowData, referrer: s sendExtensionRuntimeMessage({ command, data: data.data, remember, referrer }); } +/** @deprecated use {@link handleOpenBrowserExtensionToUrlMessage} */ function handleOpenAtRiskPasswordsMessage() { sendExtensionRuntimeMessage({ command: VaultMessages.OpenAtRiskPasswords }); } +function handleOpenBrowserExtensionToUrlMessage({ url }: { url?: ExtensionPageUrls }) { + sendExtensionRuntimeMessage({ command: VaultMessages.OpenBrowserExtensionToUrl, url }); +} + /** * Handles the window message event. * diff --git a/apps/browser/src/autofill/enums/autofill-overlay.enum.ts b/apps/browser/src/autofill/enums/autofill-overlay.enum.ts index d0b970671a8..4e4b32b9038 100644 --- a/apps/browser/src/autofill/enums/autofill-overlay.enum.ts +++ b/apps/browser/src/autofill/enums/autofill-overlay.enum.ts @@ -21,14 +21,16 @@ export const RedirectFocusDirection = { Next: "next", } as const; -// FIXME: update to use a const object instead of a typescript enum -// eslint-disable-next-line @bitwarden/platform/no-enums -export enum InlineMenuFillType { - AccountCreationUsername = 5, - PasswordGeneration = 6, - CurrentPasswordUpdate = 7, -} -export type InlineMenuFillTypes = InlineMenuFillType | CipherType; +export const InlineMenuFillTypes = { + AccountCreationUsername: 5, + PasswordGeneration: 6, + CurrentPasswordUpdate: 7, +} as const; + +export type InlineMenuFillTypeValue = + (typeof InlineMenuFillTypes)[keyof typeof InlineMenuFillTypes]; + +export type InlineMenuFillType = InlineMenuFillTypeValue | CipherType; export const InlineMenuAccountCreationFieldType = { Text: "text", diff --git a/apps/browser/src/autofill/enums/notification-queue-message-type.enum.ts b/apps/browser/src/autofill/enums/notification-queue-message-type.enum.ts index 5a7b8fa990b..1fe6246f8b8 100644 --- a/apps/browser/src/autofill/enums/notification-queue-message-type.enum.ts +++ b/apps/browser/src/autofill/enums/notification-queue-message-type.enum.ts @@ -2,6 +2,7 @@ const NotificationQueueMessageType = { AddLogin: "add", ChangePassword: "change", UnlockVault: "unlock", + AtRiskPassword: "at-risk-password", } as const; type NotificationQueueMessageTypes = diff --git a/apps/browser/src/autofill/fido2/background/fido2.background.spec.ts b/apps/browser/src/autofill/fido2/background/fido2.background.spec.ts index 144af0c0a35..752851b3d37 100644 --- a/apps/browser/src/autofill/fido2/background/fido2.background.spec.ts +++ b/apps/browser/src/autofill/fido2/background/fido2.background.spec.ts @@ -3,7 +3,6 @@ import { BehaviorSubject } from "rxjs"; import { AuthService } from "@bitwarden/common/auth/abstractions/auth.service"; import { AuthenticationStatus } from "@bitwarden/common/auth/enums/authentication-status"; -import { ConfigService } from "@bitwarden/common/platform/abstractions/config/config.service"; import { Fido2ActiveRequestManager } from "@bitwarden/common/platform/abstractions/fido2/fido2-active-request-manager.abstraction"; import { AssertCredentialParams, @@ -60,7 +59,6 @@ describe("Fido2Background", () => { let fido2ClientService!: MockProxy>; let vaultSettingsService!: MockProxy; let scriptInjectorServiceMock!: MockProxy; - let configServiceMock!: MockProxy; let enablePasskeysMock$!: BehaviorSubject; let activeAccountStatusMock$: BehaviorSubject; let authServiceMock!: MockProxy; @@ -80,7 +78,6 @@ describe("Fido2Background", () => { abortController = mock(); registeredContentScripsMock = mock(); scriptInjectorServiceMock = mock(); - configServiceMock = mock(); enablePasskeysMock$ = new BehaviorSubject(true); vaultSettingsService.enablePasskeys$ = enablePasskeysMock$; @@ -95,7 +92,6 @@ describe("Fido2Background", () => { fido2ClientService, vaultSettingsService, scriptInjectorServiceMock, - configServiceMock, authServiceMock, ); fido2Background["abortManager"] = abortManagerMock; @@ -186,7 +182,7 @@ describe("Fido2Background", () => { expect(scriptInjectorServiceMock.inject).toHaveBeenCalledWith({ tabId: tabMock.id, injectDetails: sharedScriptInjectionDetails, - mv2Details: { file: Fido2ContentScript.PageScriptAppend }, + mv2Details: { file: Fido2ContentScript.PageScriptDelayAppend }, mv3Details: { file: Fido2ContentScript.PageScript, world: "MAIN" }, }); expect(scriptInjectorServiceMock.inject).toHaveBeenCalledWith({ @@ -202,22 +198,6 @@ describe("Fido2Background", () => { enablePasskeysMock$.next(true); await flushPromises(); - expect(BrowserApi.registerContentScriptsMv2).toHaveBeenCalledWith({ - js: [ - { file: Fido2ContentScript.PageScriptAppend }, - { file: Fido2ContentScript.ContentScript }, - ], - ...sharedRegistrationOptions, - }); - }); - - it("registers the page-script-delay-append-mv2.js content script when the DelayFido2PageScriptInitWithinMv2 feature flag is enabled", async () => { - configServiceMock.getFeatureFlag.mockResolvedValue(true); - isManifestVersionSpy.mockImplementation((manifestVersion) => manifestVersion === 2); - - enablePasskeysMock$.next(true); - await flushPromises(); - expect(BrowserApi.registerContentScriptsMv2).toHaveBeenCalledWith({ js: [ { file: Fido2ContentScript.PageScriptDelayAppend }, diff --git a/apps/browser/src/autofill/fido2/background/fido2.background.ts b/apps/browser/src/autofill/fido2/background/fido2.background.ts index e20a0584d20..788c98ca85b 100644 --- a/apps/browser/src/autofill/fido2/background/fido2.background.ts +++ b/apps/browser/src/autofill/fido2/background/fido2.background.ts @@ -5,8 +5,6 @@ import { pairwise } from "rxjs/operators"; import { AuthService } from "@bitwarden/common/auth/abstractions/auth.service"; import { AuthenticationStatus } from "@bitwarden/common/auth/enums/authentication-status"; -import { FeatureFlag } from "@bitwarden/common/enums/feature-flag.enum"; -import { ConfigService } from "@bitwarden/common/platform/abstractions/config/config.service"; import { Fido2ActiveRequestManager } from "@bitwarden/common/platform/abstractions/fido2/fido2-active-request-manager.abstraction"; import { AssertCredentialParams, @@ -60,7 +58,6 @@ export class Fido2Background implements Fido2BackgroundInterface { private fido2ClientService: Fido2ClientService, private vaultSettingsService: VaultSettingsService, private scriptInjectorService: ScriptInjectorService, - private configService: ConfigService, private authService: AuthService, ) {} @@ -403,14 +400,6 @@ export class Fido2Background implements Fido2BackgroundInterface { * delayed append script if the associated feature flag is enabled. */ private async getFido2PageScriptAppendFileName() { - const shouldDelayInit = await this.configService.getFeatureFlag( - FeatureFlag.DelayFido2PageScriptInitWithinMv2, - ); - - if (shouldDelayInit) { - return Fido2ContentScript.PageScriptDelayAppend; - } - - return Fido2ContentScript.PageScriptAppend; + return Fido2ContentScript.PageScriptDelayAppend; } } diff --git a/apps/browser/src/autofill/fido2/content/fido2-content-script.spec.ts b/apps/browser/src/autofill/fido2/content/fido2-content-script.spec.ts index 8885ed6299c..af7344beb66 100644 --- a/apps/browser/src/autofill/fido2/content/fido2-content-script.spec.ts +++ b/apps/browser/src/autofill/fido2/content/fido2-content-script.spec.ts @@ -6,7 +6,7 @@ import { createPortSpyMock } from "../../../autofill/spec/autofill-mocks"; import { triggerPortOnDisconnectEvent } from "../../../autofill/spec/testing-utils"; import { Fido2PortName } from "../enums/fido2-port-name.enum"; -import { InsecureCreateCredentialParams, MessageType } from "./messaging/message"; +import { InsecureCreateCredentialParams, MessageTypes } from "./messaging/message"; import { MessageWithMetadata, Messenger } from "./messaging/messenger"; jest.mock("../../../autofill/utils", () => ({ @@ -71,7 +71,7 @@ describe("Fido2 Content Script", () => { it("handles a FIDO2 credential creation request message from the window message listener, formats the message and sends the formatted message to the extension background", async () => { const message = mock({ - type: MessageType.CredentialCreationRequest, + type: MessageTypes.CredentialCreationRequest, data: mock(), }); const mockResult = { credentialId: "mock" } as CreateCredentialResult; @@ -92,14 +92,14 @@ describe("Fido2 Content Script", () => { requestId: expect.any(String), }); expect(response).toEqual({ - type: MessageType.CredentialCreationResponse, + type: MessageTypes.CredentialCreationResponse, result: mockResult, }); }); it("handles a FIDO2 credential get request message from the window message listener, formats the message and sends the formatted message to the extension background", async () => { const message = mock({ - type: MessageType.CredentialGetRequest, + type: MessageTypes.CredentialGetRequest, data: mock(), }); @@ -121,7 +121,7 @@ describe("Fido2 Content Script", () => { it("removes the abort handler when the FIDO2 request is complete", async () => { const message = mock({ - type: MessageType.CredentialCreationRequest, + type: MessageTypes.CredentialCreationRequest, data: mock(), }); const abortController = new AbortController(); @@ -138,16 +138,14 @@ describe("Fido2 Content Script", () => { it("sends an extension message to abort the FIDO2 request when the abort controller is signaled", async () => { const message = mock({ - type: MessageType.CredentialCreationRequest, + type: MessageTypes.CredentialCreationRequest, data: mock(), }); const abortController = new AbortController(); const abortSpy = jest.spyOn(abortController.signal, "addEventListener"); - jest - .spyOn(chrome.runtime, "sendMessage") - .mockImplementationOnce(async (extensionId: string, message: unknown, options: any) => { - abortController.abort(); - }); + jest.spyOn(chrome.runtime, "sendMessage").mockImplementationOnce(async () => { + abortController.abort(); + }); // FIXME: Remove when updating file. Eslint update // eslint-disable-next-line @typescript-eslint/no-require-imports @@ -165,7 +163,7 @@ describe("Fido2 Content Script", () => { it("rejects credential requests and returns an error result", async () => { const errorMessage = "Test error"; const message = mock({ - type: MessageType.CredentialCreationRequest, + type: MessageTypes.CredentialCreationRequest, data: mock(), }); const abortController = new AbortController(); diff --git a/apps/browser/src/autofill/fido2/content/fido2-content-script.ts b/apps/browser/src/autofill/fido2/content/fido2-content-script.ts index f8352fc27a6..03816f2b382 100644 --- a/apps/browser/src/autofill/fido2/content/fido2-content-script.ts +++ b/apps/browser/src/autofill/fido2/content/fido2-content-script.ts @@ -12,7 +12,7 @@ import { InsecureAssertCredentialParams, InsecureCreateCredentialParams, Message, - MessageType, + MessageTypes, } from "./messaging/message"; import { MessageWithMetadata, Messenger } from "./messaging/messenger"; @@ -49,21 +49,21 @@ import { MessageWithMetadata, Messenger } from "./messaging/messenger"; abortController.signal.addEventListener("abort", abortHandler); try { - if (message.type === MessageType.CredentialCreationRequest) { + if (message.type === MessageTypes.CredentialCreationRequest) { return handleCredentialCreationRequestMessage( requestId, message.data as InsecureCreateCredentialParams, ); } - if (message.type === MessageType.CredentialGetRequest) { + if (message.type === MessageTypes.CredentialGetRequest) { return handleCredentialGetRequestMessage( requestId, message.data as InsecureAssertCredentialParams, ); } - if (message.type === MessageType.AbortRequest) { + if (message.type === MessageTypes.AbortRequest) { return sendExtensionMessage("fido2AbortRequest", { abortedRequestId: requestId }); } } finally { @@ -83,7 +83,7 @@ import { MessageWithMetadata, Messenger } from "./messaging/messenger"; ): Promise { return respondToCredentialRequest( "fido2RegisterCredentialRequest", - MessageType.CredentialCreationResponse, + MessageTypes.CredentialCreationResponse, requestId, data, ); @@ -101,7 +101,7 @@ import { MessageWithMetadata, Messenger } from "./messaging/messenger"; ): Promise { return respondToCredentialRequest( "fido2GetCredentialRequest", - MessageType.CredentialGetResponse, + MessageTypes.CredentialGetResponse, requestId, data, ); @@ -118,7 +118,9 @@ import { MessageWithMetadata, Messenger } from "./messaging/messenger"; */ async function respondToCredentialRequest( command: string, - type: MessageType.CredentialCreationResponse | MessageType.CredentialGetResponse, + type: + | typeof MessageTypes.CredentialCreationResponse + | typeof MessageTypes.CredentialGetResponse, requestId: string, messageData: InsecureCreateCredentialParams | InsecureAssertCredentialParams, ): Promise { diff --git a/apps/browser/src/autofill/fido2/content/fido2-page-script-append.mv2.spec.ts b/apps/browser/src/autofill/fido2/content/fido2-page-script-append.mv2.spec.ts index 69e17d26fe5..b444c967080 100644 --- a/apps/browser/src/autofill/fido2/content/fido2-page-script-append.mv2.spec.ts +++ b/apps/browser/src/autofill/fido2/content/fido2-page-script-append.mv2.spec.ts @@ -24,7 +24,7 @@ describe("FIDO2 page-script for manifest v2", () => { // FIXME: Remove when updating file. Eslint update // eslint-disable-next-line @typescript-eslint/no-require-imports - require("./fido2-page-script-append.mv2"); + require("./fido2-page-script-delay-append.mv2.ts"); expect(window.document.createElement).not.toHaveBeenCalled(); }); @@ -37,7 +37,7 @@ describe("FIDO2 page-script for manifest v2", () => { // FIXME: Remove when updating file. Eslint update // eslint-disable-next-line @typescript-eslint/no-require-imports - require("./fido2-page-script-append.mv2"); + require("./fido2-page-script-delay-append.mv2.ts"); expect(window.document.createElement).toHaveBeenCalledWith("script"); expect(chrome.runtime.getURL).toHaveBeenCalledWith(Fido2ContentScript.PageScript); @@ -54,7 +54,7 @@ describe("FIDO2 page-script for manifest v2", () => { // FIXME: Remove when updating file. Eslint update // eslint-disable-next-line @typescript-eslint/no-require-imports - require("./fido2-page-script-append.mv2"); + require("./fido2-page-script-delay-append.mv2.ts"); expect(window.document.createElement).toHaveBeenCalledWith("script"); expect(chrome.runtime.getURL).toHaveBeenCalledWith(Fido2ContentScript.PageScript); diff --git a/apps/browser/src/autofill/fido2/content/fido2-page-script-append.mv2.ts b/apps/browser/src/autofill/fido2/content/fido2-page-script-append.mv2.ts deleted file mode 100644 index f835d2f175b..00000000000 --- a/apps/browser/src/autofill/fido2/content/fido2-page-script-append.mv2.ts +++ /dev/null @@ -1,17 +0,0 @@ -/** - * This script handles injection of the FIDO2 override page script into the document. - * This is required for manifest v2, but will be removed when we migrate fully to manifest v3. - */ -(function (globalContext) { - if (globalContext.document.contentType !== "text/html") { - return; - } - - const script = globalContext.document.createElement("script"); - script.src = chrome.runtime.getURL("content/fido2-page-script.js"); - script.async = false; - - const scriptInsertionPoint = - globalContext.document.head || globalContext.document.documentElement; - scriptInsertionPoint.prepend(script); -})(globalThis); diff --git a/apps/browser/src/autofill/fido2/content/fido2-page-script.ts b/apps/browser/src/autofill/fido2/content/fido2-page-script.ts index 4c1761c37ba..5b9ea5e5b27 100644 --- a/apps/browser/src/autofill/fido2/content/fido2-page-script.ts +++ b/apps/browser/src/autofill/fido2/content/fido2-page-script.ts @@ -2,7 +2,7 @@ // @ts-strict-ignore import { WebauthnUtils } from "../utils/webauthn-utils"; -import { MessageType } from "./messaging/message"; +import { MessageTypes } from "./messaging/message"; import { Messenger } from "./messaging/messenger"; (function (globalContext) { @@ -100,13 +100,13 @@ import { Messenger } from "./messaging/messenger"; try { const response = await messenger.request( { - type: MessageType.CredentialCreationRequest, + type: MessageTypes.CredentialCreationRequest, data: WebauthnUtils.mapCredentialCreationOptions(options, fallbackSupported), }, options?.signal, ); - if (response.type !== MessageType.CredentialCreationResponse) { + if (response.type !== MessageTypes.CredentialCreationResponse) { throw new Error("Something went wrong."); } @@ -141,19 +141,19 @@ import { Messenger } from "./messaging/messenger"; try { const abortListener = () => messenger.request({ - type: MessageType.AbortRequest, + type: MessageTypes.AbortRequest, abortedRequestId: abortSignal.toString(), }); internalAbortController.signal.addEventListener("abort", abortListener); const response = await messenger.request( { - type: MessageType.CredentialGetRequest, + type: MessageTypes.CredentialGetRequest, data: WebauthnUtils.mapCredentialRequestOptions(options, fallbackSupported), }, internalAbortController.signal, ); internalAbortController.signal.removeEventListener("abort", abortListener); - if (response.type !== MessageType.CredentialGetResponse) { + if (response.type !== MessageTypes.CredentialGetResponse) { throw new Error("Something went wrong."); } @@ -182,13 +182,13 @@ import { Messenger } from "./messaging/messenger"; try { const response = await messenger.request( { - type: MessageType.CredentialGetRequest, + type: MessageTypes.CredentialGetRequest, data: WebauthnUtils.mapCredentialRequestOptions(options, fallbackSupported), }, options?.signal, ); - if (response.type !== MessageType.CredentialGetResponse) { + if (response.type !== MessageTypes.CredentialGetResponse) { throw new Error("Something went wrong."); } @@ -282,7 +282,7 @@ import { Messenger } from "./messaging/messenger"; const type = message.type; // Handle cleanup for disconnect request - if (type === MessageType.DisconnectRequest) { + if (type === MessageTypes.DisconnectRequest) { destroy(); } }; diff --git a/apps/browser/src/autofill/fido2/content/fido2-page-script.webauthn-supported.spec.ts b/apps/browser/src/autofill/fido2/content/fido2-page-script.webauthn-supported.spec.ts index f1aec69193b..5e22027b584 100644 --- a/apps/browser/src/autofill/fido2/content/fido2-page-script.webauthn-supported.spec.ts +++ b/apps/browser/src/autofill/fido2/content/fido2-page-script.webauthn-supported.spec.ts @@ -7,7 +7,7 @@ import { } from "../../../autofill/spec/fido2-testing-utils"; import { WebauthnUtils } from "../utils/webauthn-utils"; -import { MessageType } from "./messaging/message"; +import { MessageTypes } from "./messaging/message"; import { Messenger } from "./messaging/messenger"; const originalGlobalThis = globalThis; @@ -71,7 +71,7 @@ describe("Fido2 page script with native WebAuthn support", () => { describe("creating WebAuthn credentials", () => { beforeEach(() => { messenger.request = jest.fn().mockResolvedValue({ - type: MessageType.CredentialCreationResponse, + type: MessageTypes.CredentialCreationResponse, result: mockCreateCredentialsResult, }); }); @@ -104,7 +104,7 @@ describe("Fido2 page script with native WebAuthn support", () => { describe("get WebAuthn credentials", () => { beforeEach(() => { messenger.request = jest.fn().mockResolvedValue({ - type: MessageType.CredentialGetResponse, + type: MessageTypes.CredentialGetResponse, result: mockCredentialAssertResult, }); }); @@ -147,7 +147,7 @@ describe("Fido2 page script with native WebAuthn support", () => { it("should destroy the message listener when receiving a disconnect request", async () => { jest.spyOn(globalThis.top, "removeEventListener"); const SENDER = "bitwarden-webauthn"; - void messenger.handler({ type: MessageType.DisconnectRequest, SENDER, senderId: "1" }); + void messenger.handler({ type: MessageTypes.DisconnectRequest, SENDER, senderId: "1" }); expect(globalThis.top.removeEventListener).toHaveBeenCalledWith("focus", undefined); expect(messenger.destroy).toHaveBeenCalled(); diff --git a/apps/browser/src/autofill/fido2/content/fido2-page-script.webauthn-unsupported.spec.ts b/apps/browser/src/autofill/fido2/content/fido2-page-script.webauthn-unsupported.spec.ts index af1838ec942..d15bc475f57 100644 --- a/apps/browser/src/autofill/fido2/content/fido2-page-script.webauthn-unsupported.spec.ts +++ b/apps/browser/src/autofill/fido2/content/fido2-page-script.webauthn-unsupported.spec.ts @@ -6,7 +6,7 @@ import { } from "../../../autofill/spec/fido2-testing-utils"; import { WebauthnUtils } from "../utils/webauthn-utils"; -import { MessageType } from "./messaging/message"; +import { MessageTypes } from "./messaging/message"; import { Messenger } from "./messaging/messenger"; const originalGlobalThis = globalThis; @@ -65,7 +65,7 @@ describe("Fido2 page script without native WebAuthn support", () => { describe("creating WebAuthn credentials", () => { beforeEach(() => { messenger.request = jest.fn().mockResolvedValue({ - type: MessageType.CredentialCreationResponse, + type: MessageTypes.CredentialCreationResponse, result: mockCreateCredentialsResult, }); }); @@ -86,7 +86,7 @@ describe("Fido2 page script without native WebAuthn support", () => { describe("get WebAuthn credentials", () => { beforeEach(() => { messenger.request = jest.fn().mockResolvedValue({ - type: MessageType.CredentialGetResponse, + type: MessageTypes.CredentialGetResponse, result: mockCredentialAssertResult, }); }); @@ -108,7 +108,7 @@ describe("Fido2 page script without native WebAuthn support", () => { it("should destroy the message listener when receiving a disconnect request", async () => { jest.spyOn(globalThis.top, "removeEventListener"); const SENDER = "bitwarden-webauthn"; - void messenger.handler({ type: MessageType.DisconnectRequest, SENDER, senderId: "1" }); + void messenger.handler({ type: MessageTypes.DisconnectRequest, SENDER, senderId: "1" }); expect(globalThis.top.removeEventListener).toHaveBeenCalledWith("focus", undefined); expect(messenger.destroy).toHaveBeenCalled(); diff --git a/apps/browser/src/autofill/fido2/content/messaging/message.ts b/apps/browser/src/autofill/fido2/content/messaging/message.ts index 640af22ab9a..55dc522ceab 100644 --- a/apps/browser/src/autofill/fido2/content/messaging/message.ts +++ b/apps/browser/src/autofill/fido2/content/messaging/message.ts @@ -5,19 +5,19 @@ import { AssertCredentialResult, } from "@bitwarden/common/platform/abstractions/fido2/fido2-client.service.abstraction"; -// FIXME: update to use a const object instead of a typescript enum -// eslint-disable-next-line @bitwarden/platform/no-enums -export enum MessageType { - CredentialCreationRequest, - CredentialCreationResponse, - CredentialGetRequest, - CredentialGetResponse, - AbortRequest, - DisconnectRequest, - ReconnectRequest, - AbortResponse, - ErrorResponse, -} +export const MessageTypes = { + CredentialCreationRequest: 0, + CredentialCreationResponse: 1, + CredentialGetRequest: 2, + CredentialGetResponse: 3, + AbortRequest: 4, + DisconnectRequest: 5, + ReconnectRequest: 6, + AbortResponse: 7, + ErrorResponse: 8, +} as const; + +export type MessageType = (typeof MessageTypes)[keyof typeof MessageTypes]; /** * The params provided by the page-script are created in an insecure environment and @@ -30,12 +30,12 @@ export type InsecureCreateCredentialParams = Omit< >; export type CredentialCreationRequest = { - type: MessageType.CredentialCreationRequest; + type: typeof MessageTypes.CredentialCreationRequest; data: InsecureCreateCredentialParams; }; export type CredentialCreationResponse = { - type: MessageType.CredentialCreationResponse; + type: typeof MessageTypes.CredentialCreationResponse; result?: CreateCredentialResult; }; @@ -50,35 +50,35 @@ export type InsecureAssertCredentialParams = Omit< >; export type CredentialGetRequest = { - type: MessageType.CredentialGetRequest; + type: typeof MessageTypes.CredentialGetRequest; data: InsecureAssertCredentialParams; }; export type CredentialGetResponse = { - type: MessageType.CredentialGetResponse; + type: typeof MessageTypes.CredentialGetResponse; result?: AssertCredentialResult; }; export type AbortRequest = { - type: MessageType.AbortRequest; + type: typeof MessageTypes.AbortRequest; abortedRequestId: string; }; export type DisconnectRequest = { - type: MessageType.DisconnectRequest; + type: typeof MessageTypes.DisconnectRequest; }; export type ReconnectRequest = { - type: MessageType.ReconnectRequest; + type: typeof MessageTypes.ReconnectRequest; }; export type ErrorResponse = { - type: MessageType.ErrorResponse; + type: typeof MessageTypes.ErrorResponse; error: string; }; export type AbortResponse = { - type: MessageType.AbortResponse; + type: typeof MessageTypes.AbortResponse; abortedRequestId: string; }; diff --git a/apps/browser/src/autofill/fido2/content/messaging/messenger.ts b/apps/browser/src/autofill/fido2/content/messaging/messenger.ts index ec7ff3bb7a4..257f7e9efd5 100644 --- a/apps/browser/src/autofill/fido2/content/messaging/messenger.ts +++ b/apps/browser/src/autofill/fido2/content/messaging/messenger.ts @@ -1,6 +1,6 @@ // FIXME: Update this file to be type safe and remove this and next line // @ts-strict-ignore -import { Message, MessageType } from "./message"; +import { Message, MessageTypes } from "./message"; const SENDER = "bitwarden-webauthn"; @@ -80,7 +80,7 @@ export class Messenger { const abortListener = () => localPort.postMessage({ metadata: { SENDER }, - type: MessageType.AbortRequest, + type: MessageTypes.AbortRequest, }); abortSignal?.addEventListener("abort", abortListener); @@ -92,7 +92,7 @@ export class Messenger { abortSignal?.removeEventListener("abort", abortListener); - if (response.type === MessageType.ErrorResponse) { + if (response.type === MessageTypes.ErrorResponse) { const error = new Error(); Object.assign(error, JSON.parse(response.error)); throw error; @@ -119,7 +119,7 @@ export class Messenger { const abortController = new AbortController(); port.onmessage = (event: MessageEvent) => { - if (event.data.type === MessageType.AbortRequest) { + if (event.data.type === MessageTypes.AbortRequest) { abortController.abort(); } }; @@ -133,7 +133,7 @@ export class Messenger { } catch (error) { port.postMessage({ SENDER, - type: MessageType.ErrorResponse, + type: MessageTypes.ErrorResponse, error: JSON.stringify(error, Object.getOwnPropertyNames(error)), }); } finally { @@ -157,7 +157,7 @@ export class Messenger { } private async sendDisconnectCommand() { - await this.request({ type: MessageType.DisconnectRequest }); + await this.request({ type: MessageTypes.DisconnectRequest }); } private generateUniqueId() { diff --git a/apps/browser/src/autofill/fido2/enums/fido2-content-script.enum.ts b/apps/browser/src/autofill/fido2/enums/fido2-content-script.enum.ts index 9d9189c1623..eb20ff5f69c 100644 --- a/apps/browser/src/autofill/fido2/enums/fido2-content-script.enum.ts +++ b/apps/browser/src/autofill/fido2/enums/fido2-content-script.enum.ts @@ -1,6 +1,5 @@ export const Fido2ContentScript = { PageScript: "content/fido2-page-script.js", - PageScriptAppend: "content/fido2-page-script-append-mv2.js", PageScriptDelayAppend: "content/fido2-page-script-delay-append-mv2.js", ContentScript: "content/fido2-content-script.js", } as const; diff --git a/apps/browser/src/autofill/fido2/services/browser-fido2-user-interface.service.ts b/apps/browser/src/autofill/fido2/services/browser-fido2-user-interface.service.ts index 04b09a7df32..8de48a49a8e 100644 --- a/apps/browser/src/autofill/fido2/services/browser-fido2-user-interface.service.ts +++ b/apps/browser/src/autofill/fido2/services/browser-fido2-user-interface.service.ts @@ -28,6 +28,8 @@ import { import { Utils } from "@bitwarden/common/platform/misc/utils"; import { BrowserApi } from "../../../platform/browser/browser-api"; +// FIXME (PM-22628): Popup imports are forbidden in background +// eslint-disable-next-line no-restricted-imports import { closeFido2Popout, openFido2Popout } from "../../../vault/popup/utils/vault-popout-window"; const BrowserFido2MessageName = "BrowserFido2UserInterfaceServiceMessage"; diff --git a/apps/browser/src/autofill/fido2/utils/webauthn-utils.ts b/apps/browser/src/autofill/fido2/utils/webauthn-utils.ts index c8bcf5faa4b..0cccd91876d 100644 --- a/apps/browser/src/autofill/fido2/utils/webauthn-utils.ts +++ b/apps/browser/src/autofill/fido2/utils/webauthn-utils.ts @@ -88,6 +88,7 @@ export class WebauthnUtils { getClientExtensionResults: () => ({ credProps: result.extensions.credProps, }), + toJSON: () => Fido2Utils.createResultToJson(result), } as PublicKeyCredential; // Modify prototype chains to fix `instanceof` calls. @@ -134,6 +135,7 @@ export class WebauthnUtils { } as AuthenticatorAssertionResponse, getClientExtensionResults: () => ({}), authenticatorAttachment: "platform", + toJSON: () => Fido2Utils.getResultToJson(result), } as PublicKeyCredential; // Modify prototype chains to fix `instanceof` calls. diff --git a/apps/browser/src/autofill/models/autofill-field.ts b/apps/browser/src/autofill/models/autofill-field.ts index c0be60f1cd0..1a8c3bb875b 100644 --- a/apps/browser/src/autofill/models/autofill-field.ts +++ b/apps/browser/src/autofill/models/autofill-field.ts @@ -4,7 +4,7 @@ import { FieldRect } from "../background/abstractions/overlay.background"; import { AutofillFieldQualifierType } from "../enums/autofill-field.enums"; import { InlineMenuAccountCreationFieldTypes, - InlineMenuFillTypes, + InlineMenuFillType, } from "../enums/autofill-overlay.enum"; /** @@ -118,7 +118,7 @@ export default class AutofillField { checked?: boolean; - inlineMenuFillType?: InlineMenuFillTypes; + inlineMenuFillType?: InlineMenuFillType; showPasskeys?: boolean; diff --git a/apps/browser/src/autofill/notification/abstractions/notification-bar.ts b/apps/browser/src/autofill/notification/abstractions/notification-bar.ts index 8256190ea55..934aa4a2571 100644 --- a/apps/browser/src/autofill/notification/abstractions/notification-bar.ts +++ b/apps/browser/src/autofill/notification/abstractions/notification-bar.ts @@ -11,6 +11,7 @@ const NotificationTypes = { Add: "add", Change: "change", Unlock: "unlock", + AtRiskPassword: "at-risk-password", } as const; type NotificationType = (typeof NotificationTypes)[keyof typeof NotificationTypes]; @@ -30,7 +31,8 @@ type NotificationBarIframeInitData = { organizations?: OrgView[]; removeIndividualVault?: boolean; theme?: Theme; - type?: string; // @TODO use `NotificationType` + type?: NotificationType; + params?: AtRiskPasswordNotificationParams | any; }; type NotificationBarWindowMessage = { @@ -50,7 +52,13 @@ type NotificationBarWindowMessageHandlers = { saveCipherAttemptCompleted: ({ message }: { message: NotificationBarWindowMessage }) => void; }; +type AtRiskPasswordNotificationParams = { + passwordChangeUri?: string; + organizationName: string; +}; + export { + AtRiskPasswordNotificationParams, NotificationTaskInfo, NotificationTypes, NotificationType, diff --git a/apps/browser/src/autofill/notification/bar.ts b/apps/browser/src/autofill/notification/bar.ts index e7d37f5e8d7..285ae4aa257 100644 --- a/apps/browser/src/autofill/notification/bar.ts +++ b/apps/browser/src/autofill/notification/bar.ts @@ -7,6 +7,7 @@ import type { FolderView } from "@bitwarden/common/vault/models/view/folder.view import { AdjustNotificationBarMessageData } from "../background/abstractions/notification.background"; import { NotificationCipherData } from "../content/components/cipher/types"; import { CollectionView, I18n, OrgView } from "../content/components/common-types"; +import { AtRiskNotification } from "../content/components/notification/at-risk-password/container"; import { NotificationConfirmationContainer } from "../content/components/notification/confirmation/container"; import { NotificationContainer } from "../content/components/notification/container"; import { selectedFolder as selectedFolderSignal } from "../content/components/signals/selected-folder"; @@ -56,21 +57,24 @@ function applyNotificationBarStyle() { function getI18n() { return { appName: chrome.i18n.getMessage("appName"), + atRiskPassword: chrome.i18n.getMessage("atRiskPassword"), + changePassword: chrome.i18n.getMessage("changePassword"), close: chrome.i18n.getMessage("close"), collection: chrome.i18n.getMessage("collection"), folder: chrome.i18n.getMessage("folder"), + loginSaveConfirmation: chrome.i18n.getMessage("loginSaveConfirmation"), loginSaveSuccess: chrome.i18n.getMessage("loginSaveSuccess"), + loginUpdatedConfirmation: chrome.i18n.getMessage("loginUpdatedConfirmation"), loginUpdateSuccess: chrome.i18n.getMessage("loginUpdateSuccess"), loginUpdateTaskSuccess: chrome.i18n.getMessage("loginUpdateTaskSuccess"), loginUpdateTaskSuccessAdditional: chrome.i18n.getMessage("loginUpdateTaskSuccessAdditional"), - nextSecurityTaskAction: chrome.i18n.getMessage("nextSecurityTaskAction"), - newItem: chrome.i18n.getMessage("newItem"), - never: chrome.i18n.getMessage("never"), myVault: chrome.i18n.getMessage("myVault"), + never: chrome.i18n.getMessage("never"), + newItem: chrome.i18n.getMessage("newItem"), + nextSecurityTaskAction: chrome.i18n.getMessage("nextSecurityTaskAction"), notificationAddDesc: chrome.i18n.getMessage("notificationAddDesc"), notificationAddSave: chrome.i18n.getMessage("notificationAddSave"), notificationChangeDesc: chrome.i18n.getMessage("notificationChangeDesc"), - notificationUpdate: chrome.i18n.getMessage("notificationChangeSave"), notificationEdit: chrome.i18n.getMessage("edit"), notificationEditTooltip: chrome.i18n.getMessage("notificationEditTooltip"), notificationLoginSaveConfirmation: chrome.i18n.getMessage("notificationLoginSaveConfirmation"), @@ -79,6 +83,7 @@ function getI18n() { ), notificationUnlock: chrome.i18n.getMessage("notificationUnlock"), notificationUnlockDesc: chrome.i18n.getMessage("notificationUnlockDesc"), + notificationUpdate: chrome.i18n.getMessage("notificationChangeSave"), notificationViewAria: chrome.i18n.getMessage("notificationViewAria"), saveAction: chrome.i18n.getMessage("notificationAddSave"), saveAsNewLoginAction: chrome.i18n.getMessage("saveAsNewLoginAction"), @@ -87,8 +92,8 @@ function getI18n() { saveLogin: chrome.i18n.getMessage("saveLogin"), typeLogin: chrome.i18n.getMessage("typeLogin"), unlockToSave: chrome.i18n.getMessage("unlockToSave"), - updateLoginAction: chrome.i18n.getMessage("updateLoginAction"), updateLogin: chrome.i18n.getMessage("updateLogin"), + updateLoginAction: chrome.i18n.getMessage("updateLoginAction"), vault: chrome.i18n.getMessage("vault"), view: chrome.i18n.getMessage("view"), }; @@ -124,6 +129,7 @@ export function getNotificationHeaderMessage(i18n: I18n, type?: NotificationType [NotificationTypes.Add]: i18n.saveLogin, [NotificationTypes.Change]: i18n.updateLogin, [NotificationTypes.Unlock]: i18n.unlockToSave, + [NotificationTypes.AtRiskPassword]: i18n.atRiskPassword, }[type] : undefined; } @@ -143,6 +149,7 @@ export function getConfirmationHeaderMessage(i18n: I18n, type?: NotificationType [NotificationTypes.Add]: i18n.loginSaveSuccess, [NotificationTypes.Change]: i18n.loginUpdateSuccess, [NotificationTypes.Unlock]: "", + [NotificationTypes.AtRiskPassword]: "", }[type] : undefined; } @@ -193,6 +200,7 @@ export function getNotificationTestId( [NotificationTypes.Unlock]: "unlock-notification-bar", [NotificationTypes.Add]: "save-notification-bar", [NotificationTypes.Change]: "update-notification-bar", + [NotificationTypes.AtRiskPassword]: "at-risk-password-notification-bar", }[notificationType]; } @@ -241,28 +249,54 @@ async function initNotificationBar(message: NotificationBarWindowMessage) { document.head.querySelectorAll('link[rel="stylesheet"]').forEach((node) => node.remove()); if (isVaultLocked) { - return render( - NotificationContainer({ - ...notificationBarIframeInitData, - headerMessage, - type: resolvedType, - notificationTestId, - theme: resolvedTheme, - personalVaultIsAllowed: !personalVaultDisallowed, - handleCloseNotification, - handleSaveAction: (e) => { - sendSaveCipherMessage(true); + const notificationConfig = { + ...notificationBarIframeInitData, + headerMessage, + type: resolvedType, + notificationTestId, + theme: resolvedTheme, + personalVaultIsAllowed: !personalVaultDisallowed, + handleCloseNotification, + handleEditOrUpdateAction, + i18n, + }; - // @TODO can't close before vault has finished decrypting, but can't leave open during long decrypt because it looks like the experience has failed - }, - handleEditOrUpdateAction, + const handleSaveAction = () => { + sendSaveCipherMessage(true); + + render( + NotificationContainer({ + ...notificationConfig, + handleSaveAction: () => {}, + isLoading: true, + }), + document.body, + ); + }; + + const UnlockNotification = NotificationContainer({ ...notificationConfig, handleSaveAction }); + + return render(UnlockNotification, document.body); + } + + // Handle AtRiskPasswordNotification render + if (notificationBarIframeInitData.type === NotificationTypes.AtRiskPassword) { + return render( + AtRiskNotification({ + ...notificationBarIframeInitData, + type: notificationBarIframeInitData.type as NotificationType, + theme: resolvedTheme, i18n, + params: initData.params, + handleCloseNotification, }), document.body, ); } + // Default scenario: add or update password const orgId = selectedVaultSignal.get(); + await Promise.all([ new Promise((resolve) => sendPlatformMessage({ command: "bgGetOrgData" }, resolve), @@ -524,6 +558,7 @@ function handleSaveCipherConfirmation(message: NotificationBarWindowMessage) { const resolvedType = resolveNotificationType(notificationBarIframeInitData); const headerMessage = getConfirmationHeaderMessage(i18n, resolvedType, error); const notificationTestId = getNotificationTestId(resolvedType, true); + appendHeaderMessageToTitle(headerMessage); globalThis.setTimeout(() => sendPlatformMessage({ command: "bgCloseNotificationBar" }), 5000); @@ -532,7 +567,7 @@ function handleSaveCipherConfirmation(message: NotificationBarWindowMessage) { ...notificationBarIframeInitData, error, handleCloseNotification, - handleOpenTasks: () => sendPlatformMessage({ command: "bgOpenAtRisksPasswords" }), + handleOpenTasks: () => sendPlatformMessage({ command: "bgOpenAtRiskPasswords" }), handleOpenVault: (e: Event) => cipherId ? openViewVaultItemPopout(cipherId) : openAddEditVaultItemPopout(e, {}), headerMessage, diff --git a/apps/browser/src/autofill/overlay/inline-menu/abstractions/autofill-inline-menu-list.ts b/apps/browser/src/autofill/overlay/inline-menu/abstractions/autofill-inline-menu-list.ts index a20bd3c5312..f5e1fe08850 100644 --- a/apps/browser/src/autofill/overlay/inline-menu/abstractions/autofill-inline-menu-list.ts +++ b/apps/browser/src/autofill/overlay/inline-menu/abstractions/autofill-inline-menu-list.ts @@ -1,7 +1,7 @@ import { AuthenticationStatus } from "@bitwarden/common/auth/enums/authentication-status"; import { InlineMenuCipherData } from "../../../background/abstractions/overlay.background"; -import { InlineMenuFillTypes } from "../../../enums/autofill-overlay.enum"; +import { InlineMenuFillType } from "../../../enums/autofill-overlay.enum"; type AutofillInlineMenuListMessage = { command: string }; @@ -23,7 +23,7 @@ export type InitAutofillInlineMenuListMessage = AutofillInlineMenuListMessage & theme: string; translations: Record; ciphers?: InlineMenuCipherData[]; - inlineMenuFillType?: InlineMenuFillTypes; + inlineMenuFillType?: InlineMenuFillType; showInlineMenuAccountCreation?: boolean; showPasskeysLabels?: boolean; portKey: string; diff --git a/apps/browser/src/autofill/overlay/inline-menu/pages/list/autofill-inline-menu-list.ts b/apps/browser/src/autofill/overlay/inline-menu/pages/list/autofill-inline-menu-list.ts index e0db93b6b4a..c680fe4745c 100644 --- a/apps/browser/src/autofill/overlay/inline-menu/pages/list/autofill-inline-menu-list.ts +++ b/apps/browser/src/autofill/overlay/inline-menu/pages/list/autofill-inline-menu-list.ts @@ -10,7 +10,7 @@ import { EVENTS, UPDATE_PASSKEYS_HEADINGS_ON_SCROLL } from "@bitwarden/common/au import { CipherRepromptType, CipherType } from "@bitwarden/common/vault/enums"; import { InlineMenuCipherData } from "../../../../background/abstractions/overlay.background"; -import { InlineMenuFillTypes } from "../../../../enums/autofill-overlay.enum"; +import { InlineMenuFillType } from "../../../../enums/autofill-overlay.enum"; import { buildSvgDomElement, specialCharacterToKeyMap, throttle } from "../../../../utils"; import { creditCardIcon, @@ -42,7 +42,7 @@ export class AutofillInlineMenuList extends AutofillInlineMenuPageElement { private cipherListScrollIsDebounced = false; private cipherListScrollDebounceTimeout: number | NodeJS.Timeout; private currentCipherIndex = 0; - private inlineMenuFillType: InlineMenuFillTypes; + private inlineMenuFillType: InlineMenuFillType; private showInlineMenuAccountCreation: boolean; private showPasskeysLabels: boolean; private newItemButtonElement: HTMLButtonElement; @@ -1105,8 +1105,8 @@ export class AutofillInlineMenuList extends AutofillInlineMenuPageElement { const svgElement = buildSvgDomElement(` - diff --git a/apps/browser/src/autofill/overlay/notifications/abstractions/overlay-notifications-content.service.ts b/apps/browser/src/autofill/overlay/notifications/abstractions/overlay-notifications-content.service.ts index 42d7666e8a7..338c79cc607 100644 --- a/apps/browser/src/autofill/overlay/notifications/abstractions/overlay-notifications-content.service.ts +++ b/apps/browser/src/autofill/overlay/notifications/abstractions/overlay-notifications-content.service.ts @@ -17,6 +17,7 @@ export type NotificationsExtensionMessage = { error?: string; closedByUser?: boolean; fadeOutNotification?: boolean; + params: object; }; }; diff --git a/apps/browser/src/autofill/overlay/notifications/content/__snapshots__/overlay-notifications-content.service.spec.ts.snap b/apps/browser/src/autofill/overlay/notifications/content/__snapshots__/overlay-notifications-content.service.spec.ts.snap index c20626212fa..18c3baa876c 100644 --- a/apps/browser/src/autofill/overlay/notifications/content/__snapshots__/overlay-notifications-content.service.spec.ts.snap +++ b/apps/browser/src/autofill/overlay/notifications/content/__snapshots__/overlay-notifications-content.service.spec.ts.snap @@ -8,7 +8,7 @@ exports[`OverlayNotificationsContentService opening the notification bar creates