diff --git a/.eslintrc.json b/.eslintrc.json index 45a9d063a98..4fba3dd6128 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -20,7 +20,8 @@ "plugin:import/recommended", "plugin:import/typescript", "prettier", - "plugin:rxjs/recommended" + "plugin:rxjs/recommended", + "plugin:storybook/recommended" ], "settings": { "import/parsers": { @@ -134,6 +135,18 @@ "tailwindcss/no-contradicting-classname": "error" } }, + { + "files": ["libs/angular/src/**/*.ts"], + "rules": { + "no-restricted-imports": ["error", { "patterns": ["@bitwarden/angular/*", "src/**/*"] }] + } + }, + { + "files": ["libs/auth/src/**/*.ts"], + "rules": { + "no-restricted-imports": ["error", { "patterns": ["@bitwarden/auth/*", "src/**/*"] }] + } + }, { "files": ["libs/common/src/**/*.ts"], "rules": { @@ -143,19 +156,16 @@ { "files": ["libs/components/src/**/*.ts"], "rules": { - "no-restricted-imports": ["error", { "patterns": ["@bitwarden/components/*", "src/**/*"] }] + "no-restricted-imports": [ + "error", + { "patterns": ["@bitwarden/components/*", "src/**/*", "@bitwarden/angular/*"] } + ] } }, { - "files": ["libs/angular/src/**/*.ts"], + "files": ["libs/exporter/src/**/*.ts"], "rules": { - "no-restricted-imports": ["error", { "patterns": ["@bitwarden/angular/*", "src/**/*"] }] - } - }, - { - "files": ["libs/node/src/**/*.ts"], - "rules": { - "no-restricted-imports": ["error", { "patterns": ["@bitwarden/node/*", "src/**/*"] }] + "no-restricted-imports": ["error", { "patterns": ["@bitwarden/exporter/*", "src/**/*"] }] } }, { @@ -165,9 +175,15 @@ } }, { - "files": ["libs/exporter/src/**/*.ts"], + "files": ["libs/node/src/**/*.ts"], "rules": { - "no-restricted-imports": ["error", { "patterns": ["@bitwarden/exporter/*", "src/**/*"] }] + "no-restricted-imports": ["error", { "patterns": ["@bitwarden/node/*", "src/**/*"] }] + } + }, + { + "files": ["libs/vault/src/**/*.ts"], + "rules": { + "no-restricted-imports": ["error", { "patterns": ["@bitwarden/vault/*", "src/**/*"] }] } } ] diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 832a874607d..c5f55674aee 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -4,7 +4,7 @@ # The following owners will be the default owners for everything in the repo. # Unless a later match takes precedence -* @bitwarden/team-leads-eng +* @bitwarden/tech-leads ## Secrets Manager team files ## bitwarden_license/bit-web/src/app/secrets-manager @bitwarden/team-secrets-manager-dev @@ -14,6 +14,7 @@ apps/browser/src/auth @bitwarden/team-auth-dev 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 # web connectors used for auth apps/web/src/connectors @bitwarden/team-auth-dev bitwarden_license/bit-web/src/app/auth @bitwarden/team-auth-dev @@ -38,6 +39,7 @@ apps/desktop/src/vault @bitwarden/team-vault-dev apps/web/src/app/vault @bitwarden/team-vault-dev libs/angular/src/vault @bitwarden/team-vault-dev libs/common/src/vault @bitwarden/team-vault-dev +libs/vault @bitwarden/team-vault-dev ## Admin Console team files ## apps/browser/src/admin-console @bitwarden/team-admin-console-dev @@ -73,6 +75,7 @@ apps/web/src/translation-constants.ts @bitwarden/team-platform-dev apps/browser/src/autofill @bitwarden/team-autofill-dev ## Component Library ## +.storybook @bitwarden/team-platform-dev libs/components @bitwarden/team-platform-dev ## Desktop native module ## @@ -94,7 +97,7 @@ apps/desktop/src/package.json package-lock.json -## Locales ## +## Locales ## apps/browser/src/_locales/en/messages.json apps/cli/src/locales/en/messages.json apps/desktop/src/locales/en/messages.json diff --git a/.github/whitelist-capital-letters.txt b/.github/whitelist-capital-letters.txt index fd03af5f08a..f5a60f817ce 100644 --- a/.github/whitelist-capital-letters.txt +++ b/.github/whitelist-capital-letters.txt @@ -2,10 +2,7 @@ ./apps/browser/src/safari/desktop/Assets.xcassets/AccentColor.colorset ./apps/browser/src/safari/desktop/Assets.xcassets/AppIcon.appiconset ./apps/browser/src/safari/desktop/Base.lproj -./apps/browser/src/services/vaultTimeout ./apps/browser/store/windows/Assets -./libs/common/src/abstractions/vaultTimeout -./libs/common/src/services/vaultTimeout ./bitwarden_license/README.md ./libs/angular/src/directives/cipherListVirtualScroll.directive.ts ./libs/angular/src/scss/webfonts/Open_Sans-italic-700.woff @@ -25,12 +22,10 @@ ./libs/common/src/misc/linkedFieldOption.decorator.ts ./libs/common/src/misc/serviceUtils.ts ./libs/common/src/misc/serviceUtils.spec.ts -./libs/common/src/abstractions/vaultTimeout/vaultTimeoutSettings.service.ts -./libs/common/src/abstractions/vaultTimeout/vaultTimeout.service.ts ./libs/common/src/abstractions/anonymousHub.service.ts -./libs/common/src/services/vaultTimeout/vaultTimeoutSettings.service.ts -./libs/common/src/services/vaultTimeout/vaultTimeout.service.ts ./libs/common/src/services/anonymousHub.service.ts +./libs/auth/README.md +./libs/vault/README.md ./README.md ./LICENSE_BITWARDEN.txt ./CONTRIBUTING.md @@ -77,5 +72,4 @@ ./apps/browser/src/safari/safari/SafariWebExtensionHandler.swift ./apps/browser/src/safari/safari/Info.plist ./apps/browser/src/safari/desktop.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist -./apps/browser/src/services/vaultTimeout/vaultTimeout.service.ts ./SECURITY.md diff --git a/.github/workflows/brew-bump-cli.yml b/.github/workflows/brew-bump-cli.yml index 438e74c9424..477c9ace582 100644 --- a/.github/workflows/brew-bump-cli.yml +++ b/.github/workflows/brew-bump-cli.yml @@ -23,7 +23,7 @@ jobs: - name: Retrieve secrets id: retrieve-secrets - uses: bitwarden/gh-actions/get-keyvault-secrets@a30e9c3d658dc97c4c2e61ec749fdab64b83386c + uses: bitwarden/gh-actions/get-keyvault-secrets@67ab95d7a466bcefdedf3f93cbc10bcff436edfe with: keyvault: "bitwarden-ci" secrets: "brew-bump-workflow-pat" @@ -38,4 +38,4 @@ jobs: formula: bitwarden-cli tag: ${{ github.ref }} revision: ${{ github.sha }} - force: false + force: true diff --git a/.github/workflows/brew-bump-desktop.yml b/.github/workflows/brew-bump-desktop.yml index b724f3562aa..0a5c3947161 100644 --- a/.github/workflows/brew-bump-desktop.yml +++ b/.github/workflows/brew-bump-desktop.yml @@ -23,7 +23,7 @@ jobs: - name: Retrieve secrets id: retrieve-secrets - uses: bitwarden/gh-actions/get-keyvault-secrets@a30e9c3d658dc97c4c2e61ec749fdab64b83386c + uses: bitwarden/gh-actions/get-keyvault-secrets@67ab95d7a466bcefdedf3f93cbc10bcff436edfe with: keyvault: "bitwarden-ci" secrets: "brew-bump-workflow-pat" @@ -38,5 +38,5 @@ jobs: cask: bitwarden tag: ${{ github.ref }} revision: ${{ github.sha }} - force: false + force: true dryrun: true diff --git a/.github/workflows/build-browser.yml b/.github/workflows/build-browser.yml index 8e4fc6d4f7d..412f166629e 100644 --- a/.github/workflows/build-browser.yml +++ b/.github/workflows/build-browser.yml @@ -354,7 +354,7 @@ jobs: - name: Retrieve secrets id: retrieve-secrets - uses: bitwarden/gh-actions/get-keyvault-secrets@a30e9c3d658dc97c4c2e61ec749fdab64b83386c + uses: bitwarden/gh-actions/get-keyvault-secrets@67ab95d7a466bcefdedf3f93cbc10bcff436edfe with: keyvault: "bitwarden-ci" secrets: "crowdin-api-token" @@ -416,7 +416,7 @@ jobs: - name: Retrieve secrets id: retrieve-secrets if: failure() - uses: bitwarden/gh-actions/get-keyvault-secrets@a30e9c3d658dc97c4c2e61ec749fdab64b83386c + uses: bitwarden/gh-actions/get-keyvault-secrets@67ab95d7a466bcefdedf3f93cbc10bcff436edfe with: keyvault: "bitwarden-ci" secrets: "devops-alerts-slack-webhook-url" diff --git a/.github/workflows/build-cli.yml b/.github/workflows/build-cli.yml index b0cc27e0ea9..4d19c7e7cce 100644 --- a/.github/workflows/build-cli.yml +++ b/.github/workflows/build-cli.yml @@ -35,7 +35,7 @@ defaults: jobs: cloc: name: CLOC - runs-on: ubuntu-20.04 + runs-on: ubuntu-22.04 steps: - name: Checkout repo uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3 @@ -51,7 +51,7 @@ jobs: setup: name: Setup - runs-on: ubuntu-20.04 + runs-on: ubuntu-22.04 outputs: package_version: ${{ steps.retrieve-version.outputs.package_version }} steps: @@ -69,7 +69,7 @@ jobs: name: Build CLI ${{ matrix.os }} strategy: matrix: - os: [ubuntu-20.04, macos-11] + os: [ubuntu-22.04, macos-11] runs-on: ${{ matrix.os }} needs: - setup @@ -293,7 +293,7 @@ jobs: snap: name: Build Snap - runs-on: ubuntu-20.04 + runs-on: ubuntu-22.04 needs: [setup, cli] env: _PACKAGE_VERSION: ${{ needs.setup.outputs.package_version }} @@ -322,7 +322,7 @@ jobs: ls -alth - name: Build snap - uses: snapcore/action-build@3457752ec9b1c79a8290b5167fce2d14df0997c1 # v1.1.2 + uses: snapcore/action-build@2ee46bc29d163c9c836f2820cc46b39664bf0de2 # v1.1.3 with: path: apps/cli/dist/snap @@ -368,7 +368,7 @@ jobs: check-failures: name: Check for failures if: always() - runs-on: ubuntu-20.04 + runs-on: ubuntu-22.04 needs: - cloc - setup @@ -404,7 +404,7 @@ jobs: - name: Retrieve secrets id: retrieve-secrets if: failure() - uses: bitwarden/gh-actions/get-keyvault-secrets@a30e9c3d658dc97c4c2e61ec749fdab64b83386c + uses: bitwarden/gh-actions/get-keyvault-secrets@67ab95d7a466bcefdedf3f93cbc10bcff436edfe with: keyvault: "bitwarden-ci" secrets: "devops-alerts-slack-webhook-url" diff --git a/.github/workflows/build-desktop.yml b/.github/workflows/build-desktop.yml index 60949f3d692..8dfb88163a6 100644 --- a/.github/workflows/build-desktop.yml +++ b/.github/workflows/build-desktop.yml @@ -277,7 +277,7 @@ jobs: node-gyp install $(node -v) - name: Install AST - uses: bitwarden/gh-actions/install-ast@a30e9c3d658dc97c4c2e61ec749fdab64b83386c + uses: bitwarden/gh-actions/install-ast@67ab95d7a466bcefdedf3f93cbc10bcff436edfe - name: Set up environmentF run: choco install checksum --no-progress @@ -302,7 +302,7 @@ jobs: - name: Retrieve secrets id: retrieve-secrets - uses: bitwarden/gh-actions/get-keyvault-secrets@a30e9c3d658dc97c4c2e61ec749fdab64b83386c + uses: bitwarden/gh-actions/get-keyvault-secrets@67ab95d7a466bcefdedf3f93cbc10bcff436edfe with: keyvault: "bitwarden-ci" secrets: "code-signing-vault-url, @@ -1190,7 +1190,7 @@ jobs: - name: Retrieve secrets id: retrieve-secrets - uses: bitwarden/gh-actions/get-keyvault-secrets@a30e9c3d658dc97c4c2e61ec749fdab64b83386c + uses: bitwarden/gh-actions/get-keyvault-secrets@67ab95d7a466bcefdedf3f93cbc10bcff436edfe with: keyvault: "bitwarden-ci" secrets: "crowdin-api-token" @@ -1269,7 +1269,7 @@ jobs: - name: Retrieve secrets id: retrieve-secrets if: failure() - uses: bitwarden/gh-actions/get-keyvault-secrets@a30e9c3d658dc97c4c2e61ec749fdab64b83386c + uses: bitwarden/gh-actions/get-keyvault-secrets@67ab95d7a466bcefdedf3f93cbc10bcff436edfe with: keyvault: "bitwarden-ci" secrets: "devops-alerts-slack-webhook-url" diff --git a/.github/workflows/build-web.yml b/.github/workflows/build-web.yml index 9c670f01c65..72117bde1f8 100644 --- a/.github/workflows/build-web.yml +++ b/.github/workflows/build-web.yml @@ -31,6 +31,9 @@ on: description: "Custom image tag extension" required: false +env: + _AZ_REGISTRY: bitwardenprod.azurecr.io + jobs: cloc: name: CLOC @@ -65,8 +68,7 @@ jobs: build-artifacts: name: Build artifacts runs-on: ubuntu-22.04 - needs: - - setup + needs: setup env: _VERSION: ${{ needs.setup.outputs.version }} strategy: @@ -146,13 +148,10 @@ jobs: matrix: include: - artifact_name: cloud-QA - registries: [bitwardenprod.azurecr.io, bitwardenqa.azurecr.io] image_name: web-qa-cloud - artifact_name: ee - registries: [bitwardenprod.azurecr.io, bitwardenqa.azurecr.io] image_name: web-ee - artifact_name: selfhosted-COMMERCIAL - registries: [bitwarden, bitwardenprod.azurecr.io, bitwardenqa.azurecr.io] image_name: web env: _VERSION: ${{ needs.setup.outputs.version }} @@ -174,15 +173,7 @@ jobs: fi ########## ACRs ########## - - name: Login to Azure - QA - uses: Azure/login@92a5484dfaf04ca78a94597f4f19fea633851fa2 # v1.4.7 - with: - creds: ${{ secrets.AZURE_QA_KV_CREDENTIALS }} - - - name: Log into QA container registry - run: az acr login -n bitwardenqa - - - name: Login to Azure - Prod + - name: Login to Prod Azure uses: Azure/login@92a5484dfaf04ca78a94597f4f19fea633851fa2 # v1.4.7 with: creds: ${{ secrets.AZURE_PROD_KV_CREDENTIALS }} @@ -190,6 +181,18 @@ jobs: - name: Log into Prod container registry run: az acr login -n bitwardenprod + - name: Login to Azure - CI Subscription + uses: Azure/login@92a5484dfaf04ca78a94597f4f19fea633851fa2 # v1.4.7 + with: + creds: ${{ secrets.AZURE_KV_CI_SERVICE_PRINCIPAL }} + + - name: Retrieve github PAT secrets + id: retrieve-secret-pat + uses: bitwarden/gh-actions/get-keyvault-secrets@67ab95d7a466bcefdedf3f93cbc10bcff436edfe + with: + keyvault: "bitwarden-ci" + secrets: "github-pat-bitwarden-devops-bot-repo-scope" + - name: Download ${{ matrix.artifact_name }} artifact uses: actions/download-artifact@9bc31d5ccc31df68ecc42ccf4149144866c47d8a # v3.0.2 with: @@ -218,37 +221,17 @@ jobs: echo "image_tag=$IMAGE_TAG" >> $GITHUB_OUTPUT - - name: Generate tag list - id: tag-list - env: - IMAGE_TAG: ${{ steps.tag.outputs.image_tag }} - PROJECT_NAME: ${{ matrix.image_name }} - run: echo "tags=bitwardenqa.azurecr.io/${PROJECT_NAME}:${IMAGE_TAG},bitwardenprod.azurecr.io/${PROJECT_NAME}:${IMAGE_TAG}" >> $GITHUB_OUTPUT - ########## Build Image ########## - name: Extract artifact working-directory: apps/web run: unzip web-${{ env._VERSION }}-${{ matrix.artifact_name }}.zip - - name: Login to Azure - uses: Azure/login@92a5484dfaf04ca78a94597f4f19fea633851fa2 # v1.4.7 - with: - creds: ${{ secrets.AZURE_KV_CI_SERVICE_PRINCIPAL }} - - - name: Retrieve github PAT secrets - id: retrieve-secret-pat - uses: bitwarden/gh-actions/get-keyvault-secrets@a30e9c3d658dc97c4c2e61ec749fdab64b83386c - with: - keyvault: "bitwarden-ci" - secrets: "github-pat-bitwarden-devops-bot-repo-scope" - - - name: Setup DCT - if: ${{ env.is_publish_branch == 'true' }} - id: setup-dct - uses: bitwarden/gh-actions/setup-docker-trust@a30e9c3d658dc97c4c2e61ec749fdab64b83386c - with: - azure-creds: ${{ secrets.AZURE_KV_CI_SERVICE_PRINCIPAL }} - azure-keyvault-name: "bitwarden-ci" + - name: Generate image full name + id: image-name + env: + IMAGE_TAG: ${{ steps.tag.outputs.image_tag }} + PROJECT_NAME: ${{ matrix.image_name }} + run: echo "name=$_AZ_REGISTRY/${PROJECT_NAME}:${IMAGE_TAG}" >> $GITHUB_OUTPUT - name: Build Docker image uses: docker/build-push-action@2eb1c1961a95fc15694676618e422e8ba1d63825 # v4.1.1 @@ -257,21 +240,10 @@ jobs: file: apps/web/Dockerfile platforms: linux/amd64 push: true - tags: ${{ steps.tag-list.outputs.tags }} + tags: ${{ steps.image-name.outputs.name }} secrets: | "GH_PAT=${{ steps.retrieve-secret-pat.outputs.github-pat-bitwarden-devops-bot-repo-scope }}" - - name: Push to DockerHub - if: contains(matrix.registries, 'bitwarden') && env.is_publish_branch == 'true' - env: - IMAGE_TAG: ${{ steps.tag.outputs.image_tag }} - PROJECT_NAME: ${{ matrix.image_name }} - DOCKER_CONTENT_TRUST: 1 - DOCKER_CONTENT_TRUST_REPOSITORY_PASSPHRASE: ${{ steps.setup-dct.outputs.dct-delegate-repo-passphrase }} - run: | - docker tag bitwardenprod.azurecr.io/$PROJECT_NAME:$IMAGE_TAG bitwarden/$PROJECT_NAME:$IMAGE_TAG - docker push bitwarden/$PROJECT_NAME:$IMAGE_TAG - - name: Log out of Docker run: docker logout @@ -279,8 +251,7 @@ jobs: crowdin-push: name: Crowdin Push if: github.ref == 'refs/heads/master' - needs: - - build-artifacts + needs: build-artifacts runs-on: ubuntu-22.04 steps: - name: Checkout repo @@ -293,7 +264,7 @@ jobs: - name: Retrieve secrets id: retrieve-secrets - uses: bitwarden/gh-actions/get-keyvault-secrets@a30e9c3d658dc97c4c2e61ec749fdab64b83386c + uses: bitwarden/gh-actions/get-keyvault-secrets@67ab95d7a466bcefdedf3f93cbc10bcff436edfe with: keyvault: "bitwarden-ci" secrets: "crowdin-api-token" @@ -354,7 +325,7 @@ jobs: - name: Retrieve secrets id: retrieve-secrets if: failure() - uses: bitwarden/gh-actions/get-keyvault-secrets@a30e9c3d658dc97c4c2e61ec749fdab64b83386c + uses: bitwarden/gh-actions/get-keyvault-secrets@67ab95d7a466bcefdedf3f93cbc10bcff436edfe with: keyvault: "bitwarden-ci" secrets: "devops-alerts-slack-webhook-url" diff --git a/.github/workflows/crowdin-pull.yml b/.github/workflows/crowdin-pull.yml index 28498461d3f..fed766e71d8 100644 --- a/.github/workflows/crowdin-pull.yml +++ b/.github/workflows/crowdin-pull.yml @@ -32,13 +32,13 @@ jobs: - name: Retrieve secrets id: retrieve-secrets - uses: bitwarden/gh-actions/get-keyvault-secrets@a30e9c3d658dc97c4c2e61ec749fdab64b83386c + uses: bitwarden/gh-actions/get-keyvault-secrets@67ab95d7a466bcefdedf3f93cbc10bcff436edfe with: keyvault: "bitwarden-ci" secrets: "crowdin-api-token, github-gpg-private-key, github-gpg-private-key-passphrase" - name: Download translations - uses: bitwarden/gh-actions/crowdin@a30e9c3d658dc97c4c2e61ec749fdab64b83386c + uses: bitwarden/gh-actions/crowdin@67ab95d7a466bcefdedf3f93cbc10bcff436edfe env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} CROWDIN_API_TOKEN: ${{ steps.retrieve-secrets.outputs.crowdin-api-token }} diff --git a/.github/workflows/deploy-eu-prod-web.yml b/.github/workflows/deploy-eu-prod-web.yml index d2cadd295ba..f051207680e 100644 --- a/.github/workflows/deploy-eu-prod-web.yml +++ b/.github/workflows/deploy-eu-prod-web.yml @@ -24,13 +24,13 @@ jobs: - name: Retrieve Storage Account connection string id: retrieve-secrets - uses: bitwarden/gh-actions/get-keyvault-secrets@a30e9c3d658dc97c4c2e61ec749fdab64b83386c + uses: bitwarden/gh-actions/get-keyvault-secrets@67ab95d7a466bcefdedf3f93cbc10bcff436edfe with: keyvault: webvault-westeurope-prod secrets: "sa-bitwarden-web-vault-dev-key-temp" - name: Download latest cloud asset - uses: bitwarden/gh-actions/download-artifacts@a30e9c3d658dc97c4c2e61ec749fdab64b83386c + uses: bitwarden/gh-actions/download-artifacts@67ab95d7a466bcefdedf3f93cbc10bcff436edfe with: workflow: build-web.yml path: apps/web diff --git a/.github/workflows/deploy-eu-qa-web.yml b/.github/workflows/deploy-eu-qa-web.yml index a5b161e5dab..34525eaa5f7 100644 --- a/.github/workflows/deploy-eu-qa-web.yml +++ b/.github/workflows/deploy-eu-qa-web.yml @@ -24,13 +24,13 @@ jobs: - name: Retrieve Storage Account connection string id: retrieve-secrets - uses: bitwarden/gh-actions/get-keyvault-secrets@a30e9c3d658dc97c4c2e61ec749fdab64b83386c + uses: bitwarden/gh-actions/get-keyvault-secrets@67ab95d7a466bcefdedf3f93cbc10bcff436edfe with: keyvault: webvaulteu-westeurope-qa secrets: "sa-bitwarden-web-vault-dev-key-temp" - name: Download latest cloud asset - uses: bitwarden/gh-actions/download-artifacts@a30e9c3d658dc97c4c2e61ec749fdab64b83386c + uses: bitwarden/gh-actions/download-artifacts@67ab95d7a466bcefdedf3f93cbc10bcff436edfe with: workflow: build-web.yml path: apps/web diff --git a/.github/workflows/deploy-non-prod-web.yml b/.github/workflows/deploy-non-prod-web.yml index 512fefb5340..f7411f5432d 100644 --- a/.github/workflows/deploy-non-prod-web.yml +++ b/.github/workflows/deploy-non-prod-web.yml @@ -67,7 +67,7 @@ jobs: uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3 - name: Download latest cloud asset - uses: bitwarden/gh-actions/download-artifacts@a30e9c3d658dc97c4c2e61ec749fdab64b83386c + uses: bitwarden/gh-actions/download-artifacts@67ab95d7a466bcefdedf3f93cbc10bcff436edfe with: workflow: build-web.yml path: apps/web diff --git a/.github/workflows/release-browser.yml b/.github/workflows/release-browser.yml index 11447afa7d4..20f3f7efac5 100644 --- a/.github/workflows/release-browser.yml +++ b/.github/workflows/release-browser.yml @@ -41,7 +41,7 @@ jobs: - name: Check Release Version id: version - uses: bitwarden/gh-actions/release-version-check@a30e9c3d658dc97c4c2e61ec749fdab64b83386c + uses: bitwarden/gh-actions/release-version-check@67ab95d7a466bcefdedf3f93cbc10bcff436edfe with: release-type: ${{ github.event.inputs.release_type }} project-type: ts @@ -103,7 +103,7 @@ jobs: - name: Download latest Release build artifacts if: ${{ github.event.inputs.release_type != 'Dry Run' }} - uses: bitwarden/gh-actions/download-artifacts@a30e9c3d658dc97c4c2e61ec749fdab64b83386c + uses: bitwarden/gh-actions/download-artifacts@67ab95d7a466bcefdedf3f93cbc10bcff436edfe with: workflow: build-browser.yml workflow_conclusion: success @@ -116,7 +116,7 @@ jobs: - name: Dry Run - Download latest master build artifacts if: ${{ github.event.inputs.release_type == 'Dry Run' }} - uses: bitwarden/gh-actions/download-artifacts@a30e9c3d658dc97c4c2e61ec749fdab64b83386c + uses: bitwarden/gh-actions/download-artifacts@67ab95d7a466bcefdedf3f93cbc10bcff436edfe with: workflow: build-browser.yml workflow_conclusion: success diff --git a/.github/workflows/release-cli.yml b/.github/workflows/release-cli.yml index 6186f0d6dfc..9ff812bf305 100644 --- a/.github/workflows/release-cli.yml +++ b/.github/workflows/release-cli.yml @@ -57,7 +57,7 @@ jobs: - name: Check Release Version id: version - uses: bitwarden/gh-actions/release-version-check@a30e9c3d658dc97c4c2e61ec749fdab64b83386c + uses: bitwarden/gh-actions/release-version-check@67ab95d7a466bcefdedf3f93cbc10bcff436edfe with: release-type: ${{ github.event.inputs.release_type }} project-type: ts @@ -78,7 +78,7 @@ jobs: - name: Download all Release artifacts if: ${{ github.event.inputs.release_type != 'Dry Run' }} - uses: bitwarden/gh-actions/download-artifacts@a30e9c3d658dc97c4c2e61ec749fdab64b83386c + uses: bitwarden/gh-actions/download-artifacts@67ab95d7a466bcefdedf3f93cbc10bcff436edfe with: workflow: build-cli.yml path: apps/cli @@ -87,7 +87,7 @@ jobs: - name: Dry Run - Download all artifacts if: ${{ github.event.inputs.release_type == 'Dry Run' }} - uses: bitwarden/gh-actions/download-artifacts@a30e9c3d658dc97c4c2e61ec749fdab64b83386c + uses: bitwarden/gh-actions/download-artifacts@67ab95d7a466bcefdedf3f93cbc10bcff436edfe with: workflow: build-cli.yml path: apps/cli @@ -150,7 +150,7 @@ jobs: - name: Retrieve secrets id: retrieve-secrets - uses: bitwarden/gh-actions/get-keyvault-secrets@a30e9c3d658dc97c4c2e61ec749fdab64b83386c + uses: bitwarden/gh-actions/get-keyvault-secrets@67ab95d7a466bcefdedf3f93cbc10bcff436edfe with: keyvault: "bitwarden-ci" secrets: "snapcraft-store-token" @@ -162,7 +162,7 @@ jobs: - name: Download artifacts if: ${{ github.event.inputs.release_type != 'Dry Run' }} - uses: bitwarden/gh-actions/download-artifacts@a30e9c3d658dc97c4c2e61ec749fdab64b83386c + uses: bitwarden/gh-actions/download-artifacts@67ab95d7a466bcefdedf3f93cbc10bcff436edfe with: workflow: build-cli.yml path: apps/cli @@ -172,7 +172,7 @@ jobs: - name: Dry Run - Download artifacts if: ${{ github.event.inputs.release_type == 'Dry Run' }} - uses: bitwarden/gh-actions/download-artifacts@a30e9c3d658dc97c4c2e61ec749fdab64b83386c + uses: bitwarden/gh-actions/download-artifacts@67ab95d7a466bcefdedf3f93cbc10bcff436edfe with: workflow: build-cli.yml path: apps/cli @@ -182,6 +182,8 @@ jobs: - name: Publish Snap & logout if: ${{ github.event.inputs.release_type != 'Dry Run' }} + env: + SNAPCRAFT_STORE_CREDENTIALS: ${{ steps.retrieve-secrets.outputs.snapcraft-store-token }} run: | snapcraft push bw_${{ env._PKG_VERSION }}_amd64.snap --release stable snapcraft logout @@ -204,7 +206,7 @@ jobs: - name: Retrieve secrets id: retrieve-secrets - uses: bitwarden/gh-actions/get-keyvault-secrets@a30e9c3d658dc97c4c2e61ec749fdab64b83386c + uses: bitwarden/gh-actions/get-keyvault-secrets@67ab95d7a466bcefdedf3f93cbc10bcff436edfe with: keyvault: "bitwarden-ci" secrets: "cli-choco-api-key" @@ -220,7 +222,7 @@ jobs: - name: Download artifacts if: ${{ github.event.inputs.release_type != 'Dry Run' }} - uses: bitwarden/gh-actions/download-artifacts@a30e9c3d658dc97c4c2e61ec749fdab64b83386c + uses: bitwarden/gh-actions/download-artifacts@67ab95d7a466bcefdedf3f93cbc10bcff436edfe with: workflow: build-cli.yml path: apps/cli/dist @@ -230,7 +232,7 @@ jobs: - name: Dry Run - Download artifacts if: ${{ github.event.inputs.release_type == 'Dry Run' }} - uses: bitwarden/gh-actions/download-artifacts@a30e9c3d658dc97c4c2e61ec749fdab64b83386c + uses: bitwarden/gh-actions/download-artifacts@67ab95d7a466bcefdedf3f93cbc10bcff436edfe with: workflow: build-cli.yml path: apps/cli/dist @@ -263,14 +265,14 @@ jobs: - name: Retrieve secrets id: retrieve-secrets - uses: bitwarden/gh-actions/get-keyvault-secrets@a30e9c3d658dc97c4c2e61ec749fdab64b83386c + uses: bitwarden/gh-actions/get-keyvault-secrets@67ab95d7a466bcefdedf3f93cbc10bcff436edfe with: keyvault: "bitwarden-ci" secrets: "npm-api-key" - name: Download artifacts if: ${{ github.event.inputs.release_type != 'Dry Run' }} - uses: bitwarden/gh-actions/download-artifacts@a30e9c3d658dc97c4c2e61ec749fdab64b83386c + uses: bitwarden/gh-actions/download-artifacts@67ab95d7a466bcefdedf3f93cbc10bcff436edfe with: workflow: build-cli.yml path: apps/cli/build @@ -280,7 +282,7 @@ jobs: - name: Dry Run - Download artifacts if: ${{ github.event.inputs.release_type == 'Dry Run' }} - uses: bitwarden/gh-actions/download-artifacts@a30e9c3d658dc97c4c2e61ec749fdab64b83386c + uses: bitwarden/gh-actions/download-artifacts@67ab95d7a466bcefdedf3f93cbc10bcff436edfe with: workflow: build-cli.yml path: apps/cli/build diff --git a/.github/workflows/release-desktop-beta.yml b/.github/workflows/release-desktop-beta.yml index cf2ab64a56a..335d705d2d9 100644 --- a/.github/workflows/release-desktop-beta.yml +++ b/.github/workflows/release-desktop-beta.yml @@ -47,7 +47,7 @@ jobs: - name: Check Release Version id: version - uses: bitwarden/gh-actions/release-version-check@a30e9c3d658dc97c4c2e61ec749fdab64b83386c + uses: bitwarden/gh-actions/release-version-check@67ab95d7a466bcefdedf3f93cbc10bcff436edfe with: release-type: 'Initial Release' project-type: ts @@ -231,7 +231,7 @@ jobs: node-gyp install $(node -v) - name: Install AST - uses: bitwarden/gh-actions/install-ast@a30e9c3d658dc97c4c2e61ec749fdab64b83386c + uses: bitwarden/gh-actions/install-ast@67ab95d7a466bcefdedf3f93cbc10bcff436edfe - name: Set up environment run: choco install checksum --no-progress @@ -249,7 +249,7 @@ jobs: - name: Retrieve secrets id: retrieve-secrets - uses: bitwarden/gh-actions/get-keyvault-secrets@a30e9c3d658dc97c4c2e61ec749fdab64b83386c + uses: bitwarden/gh-actions/get-keyvault-secrets@67ab95d7a466bcefdedf3f93cbc10bcff436edfe with: keyvault: "bitwarden-ci" secrets: "code-signing-vault-url, @@ -932,7 +932,7 @@ jobs: - name: Retrieve secrets id: retrieve-secrets - uses: bitwarden/gh-actions/get-keyvault-secrets@a30e9c3d658dc97c4c2e61ec749fdab64b83386c + uses: bitwarden/gh-actions/get-keyvault-secrets@67ab95d7a466bcefdedf3f93cbc10bcff436edfe with: keyvault: "bitwarden-ci" secrets: "aws-electron-access-id, diff --git a/.github/workflows/release-desktop.yml b/.github/workflows/release-desktop.yml index 2dc8bb3b313..22b76f46408 100644 --- a/.github/workflows/release-desktop.yml +++ b/.github/workflows/release-desktop.yml @@ -47,7 +47,7 @@ defaults: jobs: setup: name: Setup - runs-on: ubuntu-20.04 + runs-on: ubuntu-22.04 outputs: release-version: ${{ steps.version.outputs.version }} release-channel: ${{ steps.release-channel.outputs.channel }} @@ -56,7 +56,7 @@ jobs: uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3 - name: Branch check - if: ${{ github.event.inputs.release_type != 'Dry Run' }} + if: ${{ inputs.release_type != 'Dry Run' }} run: | if [[ "$GITHUB_REF" != "refs/heads/rc" ]] && [[ "$GITHUB_REF" != "refs/heads/hotfix-rc-desktop" ]]; then echo "===================================" @@ -67,9 +67,9 @@ jobs: - name: Check Release Version id: version - uses: bitwarden/gh-actions/release-version-check@a30e9c3d658dc97c4c2e61ec749fdab64b83386c + uses: bitwarden/gh-actions/release-version-check@67ab95d7a466bcefdedf3f93cbc10bcff436edfe with: - release-type: ${{ github.event.inputs.release_type }} + release-type: ${{ inputs.release_type }} project-type: ts file: apps/desktop/src/package.json monorepo: true @@ -93,7 +93,7 @@ jobs: esac - name: Create GitHub deployment - if: ${{ github.event.inputs.release_type != 'Dry Run' }} + if: ${{ inputs.release_type != 'Dry Run' }} uses: chrnorm/deployment-action@d42cde7132fcec920de534fffc3be83794335c00 # v2.0.5 id: deployment with: @@ -110,7 +110,7 @@ jobs: - name: Retrieve secrets id: retrieve-secrets - uses: bitwarden/gh-actions/get-keyvault-secrets@a30e9c3d658dc97c4c2e61ec749fdab64b83386c + uses: bitwarden/gh-actions/get-keyvault-secrets@67ab95d7a466bcefdedf3f93cbc10bcff436edfe with: keyvault: "bitwarden-ci" secrets: "aws-electron-access-id, @@ -122,8 +122,8 @@ jobs: cf-prod-account" - name: Download all artifacts - if: ${{ github.event.inputs.release_type != 'Dry Run' }} - uses: bitwarden/gh-actions/download-artifacts@a30e9c3d658dc97c4c2e61ec749fdab64b83386c + if: ${{ inputs.release_type != 'Dry Run' }} + uses: bitwarden/gh-actions/download-artifacts@67ab95d7a466bcefdedf3f93cbc10bcff436edfe with: workflow: build-desktop.yml workflow_conclusion: success @@ -131,8 +131,8 @@ jobs: path: apps/desktop/artifacts - name: Dry Run - Download all artifacts - if: ${{ github.event.inputs.release_type == 'Dry Run' }} - uses: bitwarden/gh-actions/download-artifacts@a30e9c3d658dc97c4c2e61ec749fdab64b83386c + if: ${{ inputs.release_type == 'Dry Run' }} + uses: bitwarden/gh-actions/download-artifacts@67ab95d7a466bcefdedf3f93cbc10bcff436edfe with: workflow: build-desktop.yml workflow_conclusion: success @@ -146,17 +146,17 @@ jobs: run: mv Bitwarden-${{ env.PKG_VERSION }}-universal.pkg Bitwarden-${{ env.PKG_VERSION }}-universal.pkg.archive - name: Set staged rollout percentage - if: ${{ github.event.inputs.electron_publish }} + if: ${{ inputs.electron_publish == 'true' }} env: RELEASE_CHANNEL: ${{ steps.release-channel.outputs.channel }} - ROLLOUT_PCT: ${{ github.event.inputs.rollout_percentage }} + ROLLOUT_PCT: ${{ inputs.rollout_percentage }} run: | echo "stagingPercentage: ${ROLLOUT_PCT}" >> apps/desktop/artifacts/${RELEASE_CHANNEL}.yml echo "stagingPercentage: ${ROLLOUT_PCT}" >> apps/desktop/artifacts/${RELEASE_CHANNEL}-linux.yml echo "stagingPercentage: ${ROLLOUT_PCT}" >> apps/desktop/artifacts/${RELEASE_CHANNEL}-mac.yml - name: Publish artifacts to S3 - if: ${{ github.event.inputs.release_type != 'Dry Run' && github.event.inputs.electron_publish }} + if: ${{ inputs.release_type != 'Dry Run' && inputs.electron_publish == 'true' }} env: AWS_ACCESS_KEY_ID: ${{ steps.retrieve-secrets.outputs.aws-electron-access-id }} AWS_SECRET_ACCESS_KEY: ${{ steps.retrieve-secrets.outputs.aws-electron-access-key }} @@ -170,7 +170,7 @@ jobs: --quiet - name: Publish artifacts to R2 - if: ${{ github.event.inputs.release_type != 'Dry Run' && github.event.inputs.electron_publish }} + if: ${{ inputs.release_type != 'Dry Run' && inputs.electron_publish == 'true' }} env: AWS_ACCESS_KEY_ID: ${{ steps.retrieve-secrets.outputs.r2-electron-access-id }} AWS_SECRET_ACCESS_KEY: ${{ steps.retrieve-secrets.outputs.r2-electron-access-key }} @@ -185,14 +185,14 @@ jobs: --endpoint-url https://${CF_ACCOUNT}.r2.cloudflarestorage.com - name: Get checksum files - uses: bitwarden/gh-actions/get-checksum@a30e9c3d658dc97c4c2e61ec749fdab64b83386c + uses: bitwarden/gh-actions/get-checksum@82cfceb235b308c2eb63923824e61d8350d280db with: packages_dir: "apps/desktop/artifacts" file_path: "apps/desktop/artifacts/sha256-checksums.txt" - name: Create Release uses: ncipollo/release-action@a2e71bdd4e7dab70ca26a852f29600c98b33153e # v1.12.0 - if: ${{ steps.release-channel.outputs.channel == 'latest' && github.event.inputs.release_type != 'Dry Run' && inputs.github_release }} + if: ${{ steps.release-channel.outputs.channel == 'latest' && inputs.release_type != 'Dry Run' && inputs.github_release == 'true' }} env: PKG_VERSION: ${{ steps.version.outputs.version }} RELEASE_CHANNEL: ${{ steps.release-channel.outputs.channel }} @@ -230,7 +230,7 @@ jobs: draft: true - name: Update deployment status to Success - if: ${{ github.event.inputs.release_type != 'Dry Run' && success() }} + if: ${{ inputs.release_type != 'Dry Run' && success() }} uses: chrnorm/deployment-status@2afb7d27101260f4a764219439564d954d10b5b0 # v2.0.1 with: token: '${{ secrets.GITHUB_TOKEN }}' @@ -238,7 +238,7 @@ jobs: deployment-id: ${{ steps.deployment.outputs.deployment_id }} - name: Update deployment status to Failure - if: ${{ github.event.inputs.release_type != 'Dry Run' && failure() }} + if: ${{ inputs.release_type != 'Dry Run' && failure() }} uses: chrnorm/deployment-status@2afb7d27101260f4a764219439564d954d10b5b0 # v2.0.1 with: token: '${{ secrets.GITHUB_TOKEN }}' @@ -247,9 +247,9 @@ jobs: snap: name: Deploy Snap - runs-on: ubuntu-20.04 + runs-on: ubuntu-22.04 needs: setup - if: inputs.snap_publish + if: ${{ inputs.snap_publish == 'true' }} env: _PKG_VERSION: ${{ needs.setup.outputs.release-version }} steps: @@ -263,7 +263,7 @@ jobs: - name: Retrieve secrets id: retrieve-secrets - uses: bitwarden/gh-actions/get-keyvault-secrets@a30e9c3d658dc97c4c2e61ec749fdab64b83386c + uses: bitwarden/gh-actions/get-keyvault-secrets@67ab95d7a466bcefdedf3f93cbc10bcff436edfe with: keyvault: "bitwarden-ci" secrets: "snapcraft-store-token" @@ -278,8 +278,8 @@ jobs: working-directory: apps/desktop - name: Download Snap artifact - if: ${{ github.event.inputs.release_type != 'Dry Run' }} - uses: bitwarden/gh-actions/download-artifacts@a30e9c3d658dc97c4c2e61ec749fdab64b83386c + if: ${{ inputs.release_type != 'Dry Run' }} + uses: bitwarden/gh-actions/download-artifacts@67ab95d7a466bcefdedf3f93cbc10bcff436edfe with: workflow: build-desktop.yml workflow_conclusion: success @@ -288,8 +288,8 @@ jobs: path: apps/desktop/dist - name: Dry Run - Download Snap artifact - if: ${{ github.event.inputs.release_type == 'Dry Run' }} - uses: bitwarden/gh-actions/download-artifacts@a30e9c3d658dc97c4c2e61ec749fdab64b83386c + if: ${{ inputs.release_type == 'Dry Run' }} + uses: bitwarden/gh-actions/download-artifacts@67ab95d7a466bcefdedf3f93cbc10bcff436edfe with: workflow: build-desktop.yml workflow_conclusion: success @@ -298,7 +298,7 @@ jobs: path: apps/desktop/dist - name: Deploy to Snap Store - if: ${{ github.event.inputs.release_type != 'Dry Run' }} + if: ${{ inputs.release_type != 'Dry Run' }} env: SNAPCRAFT_STORE_CREDENTIALS: ${{ steps.retrieve-secrets.outputs.snapcraft-store-token }} run: | @@ -310,7 +310,7 @@ jobs: name: Deploy Choco runs-on: windows-2019 needs: setup - if: inputs.choco_publish + if: ${{ inputs.choco_publish == 'true' }} env: _PKG_VERSION: ${{ needs.setup.outputs.release-version }} steps: @@ -329,7 +329,7 @@ jobs: - name: Retrieve secrets id: retrieve-secrets - uses: bitwarden/gh-actions/get-keyvault-secrets@a30e9c3d658dc97c4c2e61ec749fdab64b83386c + uses: bitwarden/gh-actions/get-keyvault-secrets@67ab95d7a466bcefdedf3f93cbc10bcff436edfe with: keyvault: "bitwarden-ci" secrets: "cli-choco-api-key" @@ -346,8 +346,8 @@ jobs: working-directory: apps/desktop - name: Download choco artifact - if: ${{ github.event.inputs.release_type != 'Dry Run' }} - uses: bitwarden/gh-actions/download-artifacts@a30e9c3d658dc97c4c2e61ec749fdab64b83386c + if: ${{ inputs.release_type != 'Dry Run' }} + uses: bitwarden/gh-actions/download-artifacts@67ab95d7a466bcefdedf3f93cbc10bcff436edfe with: workflow: build-desktop.yml workflow_conclusion: success @@ -356,8 +356,8 @@ jobs: path: apps/desktop/dist - name: Dry Run - Download choco artifact - if: ${{ github.event.inputs.release_type == 'Dry Run' }} - uses: bitwarden/gh-actions/download-artifacts@a30e9c3d658dc97c4c2e61ec749fdab64b83386c + if: ${{ inputs.release_type == 'Dry Run' }} + uses: bitwarden/gh-actions/download-artifacts@67ab95d7a466bcefdedf3f93cbc10bcff436edfe with: workflow: build-desktop.yml workflow_conclusion: success @@ -366,7 +366,7 @@ jobs: path: apps/desktop/dist - name: Push to Chocolatey - if: ${{ github.event.inputs.release_type != 'Dry Run' }} + if: ${{ inputs.release_type != 'Dry Run' }} shell: pwsh run: choco push --source=https://push.chocolatey.org/ working-directory: apps/desktop/dist diff --git a/.github/workflows/release-web.yml b/.github/workflows/release-web.yml index 601d788449c..5b4b7195aea 100644 --- a/.github/workflows/release-web.yml +++ b/.github/workflows/release-web.yml @@ -15,10 +15,13 @@ on: - Redeploy - Dry Run +env: + _AZ_REGISTRY: bitwardenprod.azurecr.io + jobs: setup: name: Setup - runs-on: ubuntu-20.04 + runs-on: ubuntu-22.04 outputs: release_version: ${{ steps.version.outputs.version }} tag_version: ${{ steps.version.outputs.tag }} @@ -38,7 +41,7 @@ jobs: - name: Check Release Version id: version - uses: bitwarden/gh-actions/release-version-check@a30e9c3d658dc97c4c2e61ec749fdab64b83386c + uses: bitwarden/gh-actions/release-version-check@67ab95d7a466bcefdedf3f93cbc10bcff436edfe with: release-type: ${{ github.event.inputs.release_type }} project-type: ts @@ -46,10 +49,9 @@ jobs: monorepo: true monorepo-project: web - self-host: name: Release self-host docker - runs-on: ubuntu-20.04 + runs-on: ubuntu-22.04 needs: setup env: _BRANCH_NAME: ${{ github.ref_name }} @@ -67,42 +69,6 @@ jobs: - name: Checkout repo uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3 - ########## DockerHub ########## - - name: Setup DCT - id: setup-dct - uses: bitwarden/gh-actions/setup-docker-trust@a30e9c3d658dc97c4c2e61ec749fdab64b83386c - with: - azure-creds: ${{ secrets.AZURE_KV_CI_SERVICE_PRINCIPAL }} - azure-keyvault-name: "bitwarden-ci" - - - name: Pull branch image - run: | - if [[ "${{ github.event.inputs.release_type }}" == "Dry Run" ]]; then - docker pull bitwarden/web:latest - else - docker pull bitwarden/web:$_BRANCH_NAME - fi - - - name: Docker Tag version - run: | - if [[ "${{ github.event.inputs.release_type }}" == "Dry Run" ]]; then - docker tag bitwarden/web:latest bitwarden/web:$_RELEASE_VERSION - else - docker tag bitwarden/web:$_BRANCH_NAME bitwarden/web:$_RELEASE_VERSION - fi - - - name: Docker Push version - if: ${{ github.event.inputs.release_type != 'Dry Run' }} - env: - DOCKER_CONTENT_TRUST: 1 - DOCKER_CONTENT_TRUST_REPOSITORY_PASSPHRASE: ${{ steps.setup-dct.outputs.dct-delegate-repo-passphrase }} - run: docker push bitwarden/web:$_RELEASE_VERSION - - - name: Log out of Docker and disable Docker Notary - run: | - docker logout - echo "DOCKER_CONTENT_TRUST=0" >> $GITHUB_ENV - ########## ACR ########## - name: Login to Azure - PROD Subscription uses: Azure/login@92a5484dfaf04ca78a94597f4f19fea633851fa2 # v1.4.7 @@ -112,38 +78,46 @@ jobs: - name: Login to Azure ACR run: az acr login -n bitwardenprod - - name: Tag version - env: - REGISTRY: bitwardenprod.azurecr.io + - name: Pull branch image run: | if [[ "${{ github.event.inputs.release_type }}" == "Dry Run" ]]; then - docker tag bitwarden/web:latest $REGISTRY/web:$_RELEASE_VERSION - - docker tag bitwarden/web:latest $REGISTRY/web-sh:$_RELEASE_VERSION + docker pull $_AZ_REGISTRY/web:latest else - docker tag bitwarden/web:$_BRANCH_NAME $REGISTRY/web:$_RELEASE_VERSION + docker pull $_AZ_REGISTRY/web:$_BRANCH_NAME + fi - docker tag bitwarden/web:$_BRANCH_NAME $REGISTRY/web-sh:$_RELEASE_VERSION + - name: Tag version + run: | + if [[ "${{ github.event.inputs.release_type }}" == "Dry Run" ]]; then + docker tag $_AZ_REGISTRY/web:latest $_AZ_REGISTRY/web:dryrun + docker tag $_AZ_REGISTRY/web:latest $_AZ_REGISTRY/web-sh:dryrun + else + docker tag $_AZ_REGISTRY/web:$_BRANCH_NAME $_AZ_REGISTRY/web:$_RELEASE_VERSION + docker tag $_AZ_REGISTRY/web:$_BRANCH_NAME $_AZ_REGISTRY/web-sh:$_RELEASE_VERSION + docker tag $_AZ_REGISTRY/web:$_BRANCH_NAME $_AZ_REGISTRY/web:latest + docker tag $_AZ_REGISTRY/web:$_BRANCH_NAME $_AZ_REGISTRY/web-sh:latest fi - name: Push version - if: ${{ github.event.inputs.release_type != 'Dry Run' }} - env: - REGISTRY: bitwardenprod.azurecr.io run: | - docker push $REGISTRY/web:$_RELEASE_VERSION - - docker push $REGISTRY/web-sh:$_RELEASE_VERSION + if [[ "${{ github.event.inputs.release_type }}" == "Dry Run" ]]; then + docker push $_AZ_REGISTRY/web:dryrun + docker push $_AZ_REGISTRY/web-sh:dryrun + else + docker push $_AZ_REGISTRY/web:$_RELEASE_VERSION + docker push $_AZ_REGISTRY/web-sh:$_RELEASE_VERSION + docker push $_AZ_REGISTRY/web:latest + docker push $_AZ_REGISTRY/web-sh:latest + fi - name: Log out of Docker run: docker logout ghpages-deploy: - name: Deploy to GitHub Pages - runs-on: ubuntu-20.04 - needs: - - setup + name: Create Deploy PR for GitHub Pages + runs-on: ubuntu-22.04 + needs: setup env: _RELEASE_VERSION: ${{ needs.setup.outputs.release_version }} _TAG_VERSION: ${{ needs.setup.outputs.tag_version }} @@ -156,7 +130,7 @@ jobs: - name: Retrieve bot secrets id: retrieve-bot-secrets - uses: bitwarden/gh-actions/get-keyvault-secrets@a30e9c3d658dc97c4c2e61ec749fdab64b83386c + uses: bitwarden/gh-actions/get-keyvault-secrets@67ab95d7a466bcefdedf3f93cbc10bcff436edfe with: keyvault: bitwarden-ci secrets: "github-pat-bitwarden-devops-bot-repo-scope" @@ -170,7 +144,7 @@ jobs: - name: Download latest cloud asset if: ${{ github.event.inputs.release_type != 'Dry Run' }} - uses: bitwarden/gh-actions/download-artifacts@a30e9c3d658dc97c4c2e61ec749fdab64b83386c + uses: bitwarden/gh-actions/download-artifacts@67ab95d7a466bcefdedf3f93cbc10bcff436edfe with: workflow: build-web.yml path: assets @@ -180,7 +154,7 @@ jobs: - name: Dry Run - Download latest cloud asset if: ${{ github.event.inputs.release_type == 'Dry Run' }} - uses: bitwarden/gh-actions/download-artifacts@a30e9c3d658dc97c4c2e61ec749fdab64b83386c + uses: bitwarden/gh-actions/download-artifacts@67ab95d7a466bcefdedf3f93cbc10bcff436edfe with: workflow: build-web.yml path: assets @@ -191,7 +165,7 @@ jobs: - name: Unzip build asset working-directory: assets run: unzip web-*-cloud-COMMERCIAL.zip - + - name: Create new branch run: | cd ${{ github.workspace }}/ghpages-deployment @@ -200,12 +174,12 @@ jobs: git config --global url."https://github.com/".insteadOf ssh://git@github.com/ git config --global url."https://".insteadOf ssh:// git checkout -b ${_BRANCH} - + - name: Copy build files run: | rm -rf ${{ github.workspace }}/ghpages-deployment/* cp -Rf ${{ github.workspace }}/assets/build/* ghpages-deployment/ - + - name: Commit and push changes working-directory: ghpages-deployment run: | @@ -233,7 +207,7 @@ jobs: release: name: Create GitHub Release - runs-on: ubuntu-20.04 + runs-on: ubuntu-22.04 needs: - setup - self-host @@ -253,7 +227,7 @@ jobs: - name: Download latest build artifacts if: ${{ github.event.inputs.release_type != 'Dry Run' }} - uses: bitwarden/gh-actions/download-artifacts@a30e9c3d658dc97c4c2e61ec749fdab64b83386c + uses: bitwarden/gh-actions/download-artifacts@67ab95d7a466bcefdedf3f93cbc10bcff436edfe with: workflow: build-web.yml path: apps/web/artifacts @@ -264,7 +238,7 @@ jobs: - name: Dry Run - Download latest build artifacts if: ${{ github.event.inputs.release_type == 'Dry Run' }} - uses: bitwarden/gh-actions/download-artifacts@a30e9c3d658dc97c4c2e61ec749fdab64b83386c + uses: bitwarden/gh-actions/download-artifacts@67ab95d7a466bcefdedf3f93cbc10bcff436edfe with: workflow: build-web.yml path: apps/web/artifacts diff --git a/.github/workflows/staged-rollout-desktop.yml b/.github/workflows/staged-rollout-desktop.yml index 477192b5055..ce56cc205dd 100644 --- a/.github/workflows/staged-rollout-desktop.yml +++ b/.github/workflows/staged-rollout-desktop.yml @@ -26,7 +26,7 @@ jobs: - name: Retrieve secrets id: retrieve-secrets - uses: bitwarden/gh-actions/get-keyvault-secrets@a30e9c3d658dc97c4c2e61ec749fdab64b83386c + uses: bitwarden/gh-actions/get-keyvault-secrets@67ab95d7a466bcefdedf3f93cbc10bcff436edfe with: keyvault: "bitwarden-ci" secrets: "aws-electron-access-id, diff --git a/.github/workflows/version-auto-bump.yml b/.github/workflows/version-auto-bump.yml index 2c13ec05b38..857099db511 100644 --- a/.github/workflows/version-auto-bump.yml +++ b/.github/workflows/version-auto-bump.yml @@ -42,8 +42,6 @@ jobs: name: Bump version to ${{ needs.setup.outputs.version_number }} needs: setup uses: ./.github/workflows/version-bump.yml - secrets: - AZURE_PROD_KV_CREDENTIALS: ${{ secrets.AZURE_KV_CI_SERVICE_PRINCIPAL }} with: version_number: ${{ needs.setup.outputs.version_number }} client: "Desktop" diff --git a/.github/workflows/version-bump.yml b/.github/workflows/version-bump.yml index f30a935c4bc..420ef456ec0 100644 --- a/.github/workflows/version-bump.yml +++ b/.github/workflows/version-bump.yml @@ -26,9 +26,6 @@ on: client: required: true type: string - secrets: - AZURE_PROD_KV_CREDENTIALS: - required: true defaults: run: @@ -49,7 +46,7 @@ jobs: - name: Retrieve secrets id: retrieve-secrets - uses: bitwarden/gh-actions/get-keyvault-secrets@a30e9c3d658dc97c4c2e61ec749fdab64b83386c + uses: bitwarden/gh-actions/get-keyvault-secrets@67ab95d7a466bcefdedf3f93cbc10bcff436edfe with: keyvault: "bitwarden-ci" secrets: "github-gpg-private-key, github-gpg-private-key-passphrase" @@ -86,14 +83,14 @@ jobs: - name: Bump Browser Version - Manifest if: ${{ github.event.inputs.client == 'Browser' || github.event.inputs.client == 'All' }} - uses: bitwarden/gh-actions/version-bump@a30e9c3d658dc97c4c2e61ec749fdab64b83386c + uses: bitwarden/gh-actions/version-bump@67ab95d7a466bcefdedf3f93cbc10bcff436edfe with: version: ${{ github.event.inputs.version_number }} file_path: "apps/browser/src/manifest.json" - name: Bump Browser Version - Manifest v3 if: ${{ github.event.inputs.client == 'Browser' || github.event.inputs.client == 'All' }} - uses: bitwarden/gh-actions/version-bump@a30e9c3d658dc97c4c2e61ec749fdab64b83386c + uses: bitwarden/gh-actions/version-bump@67ab95d7a466bcefdedf3f93cbc10bcff436edfe with: version: ${{ github.event.inputs.version_number }} file_path: "apps/browser/src/manifest.v3.json" diff --git a/.github/workflows/workflow-linter.yml b/.github/workflows/workflow-linter.yml index 9dced5ee530..aef3077eb35 100644 --- a/.github/workflows/workflow-linter.yml +++ b/.github/workflows/workflow-linter.yml @@ -8,4 +8,4 @@ on: jobs: call-workflow: - uses: bitwarden/gh-actions/.github/workflows/workflow-linter.yml@a30e9c3d658dc97c4c2e61ec749fdab64b83386c + uses: bitwarden/gh-actions/.github/workflows/workflow-linter.yml@67ab95d7a466bcefdedf3f93cbc10bcff436edfe diff --git a/.storybook/main.ts b/.storybook/main.ts index a7f12f469ba..acc6e2a56db 100644 --- a/.storybook/main.ts +++ b/.storybook/main.ts @@ -15,6 +15,7 @@ const config: StorybookConfig = { "@storybook/addon-links", "@storybook/addon-essentials", "@storybook/addon-a11y", + "@storybook/addon-designs", { name: "@storybook/addon-docs", options: { diff --git a/.vscode/settings.json b/.vscode/settings.json index 07423dd18ba..27e3a9b293a 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,3 +1,9 @@ { - "cSpell.words": ["Csprng", "decryptable", "Popout", "Reprompt", "takeuntil"] + "cSpell.words": ["Csprng", "decryptable", "Popout", "Reprompt", "takeuntil"], + "search.exclude": { + "**/locales/[^e]*/messages.json": true, + "**/locales/*[^n]/messages.json": true, + "**/_locales/[^e]*/messages.json": true, + "**/_locales/*[^n]/messages.json": true + } } diff --git a/apps/browser/package.json b/apps/browser/package.json index 5e1ad9bfd8d..2e866653cd3 100644 --- a/apps/browser/package.json +++ b/apps/browser/package.json @@ -1,6 +1,6 @@ { "name": "@bitwarden/browser", - "version": "2023.7.1", + "version": "2023.8.2", "scripts": { "build": "webpack", "build:mv3": "cross-env MANIFEST_VERSION=3 webpack", diff --git a/apps/browser/src/_locales/ar/messages.json b/apps/browser/src/_locales/ar/messages.json index 0e42d032fbb..cf6bf851dd0 100644 --- a/apps/browser/src/_locales/ar/messages.json +++ b/apps/browser/src/_locales/ar/messages.json @@ -338,6 +338,9 @@ "other": { "message": "الأخرى" }, + "unlockMethodNeededToChangeTimeoutActionDesc": { + "message": "Set up an unlock method to change your vault timeout action." + }, "rateExtension": { "message": "قيِّم هذه الإضافة" }, @@ -630,6 +633,12 @@ "notificationChangeSave": { "message": "تحديث" }, + "notificationUnlockDesc": { + "message": "Unlock your Bitwarden vault to complete the auto-fill request." + }, + "notificationUnlock": { + "message": "Unlock" + }, "enableContextMenuItem": { "message": "إظهار خيارات قائمة السياق" }, @@ -786,8 +795,8 @@ "ppremiumSignUpStorage": { "message": "1 جيغابايت وحدة تخزين مشفرة لمرفقات الملفات." }, - "ppremiumSignUpTwoStep": { - "message": "خيارات تسجيل الدخول الإضافية من خطوتين مثل YubiKey و FIDO U2F و Duo." + "premiumSignUpTwoStepOptions": { + "message": "Proprietary two-step login options such as YubiKey and Duo." }, "ppremiumSignUpReports": { "message": "نظافة كلمة المرور، صحة الحساب، وتقارير خرق البيانات للحفاظ على سلامة خزنتك." @@ -1440,38 +1449,35 @@ "restoreItem": { "message": "استعادة العنصر" }, - "restoreItemConfirmation": { - "message": "هل أنت متأكد من أنك تريد استعادة هذا العنصر؟" - }, "restoredItem": { - "message": "Item restored" + "message": "تم استعادة العنصر" }, "vaultTimeoutLogOutConfirmation": { - "message": "Logging out will remove all access to your vault and requires online authentication after the timeout period. Are you sure you want to use this setting?" + "message": "سيؤدي تسجيل الخروج إلى إزالة جميع إمكانية الوصول إلى خزنتك ويتطلب المصادقة عبر الإنترنت بعد انتهاء المهلة. هل أنت متأكد من أنك تريد استخدام هذا الإعداد؟" }, "vaultTimeoutLogOutConfirmationTitle": { - "message": "Timeout action confirmation" + "message": "تأكيد إجراء المهلة" }, "autoFillAndSave": { - "message": "Auto-fill and save" + "message": "التعبئة التلقائية والحفظ" }, "autoFillSuccessAndSavedUri": { - "message": "Item auto-filled and URI saved" + "message": "تم تعبئة العنصر تلقائياً وحفظ عنوان URI" }, "autoFillSuccess": { - "message": "Item auto-filled " + "message": "ملء العنصر تلقائياً " }, "insecurePageWarning": { - "message": "Warning: This is an unsecured HTTP page, and any information you submit can potentially be seen and changed by others. This Login was originally saved on a secure (HTTPS) page." + "message": "تحذير: هذه صفحة HTTP غير آمنة، وأي معلومات تقدمها يمكن رؤيتها وتغييرها من قبل الآخرين. تم حفظ تسجيل الدخول هذا في الأصل على صفحة آمنة (HTTPS)." }, "insecurePageWarningFillPrompt": { - "message": "Do you still wish to fill this login?" + "message": "هل مازلت ترغب في ملء هذا الدخول؟" }, "autofillIframeWarning": { - "message": "The form is hosted by a different domain than the URI of your saved login. Choose OK to auto-fill anyway, or Cancel to stop." + "message": "يتم استضافة النموذج من قبل نطاق مختلف عن عنوان URI الخاص بتسجيل الدخول المحفوظ. اختر موافق للملء التلقائي على أي حال، أو ألغ للتوقف." }, "autofillIframeWarningTip": { - "message": "To prevent this warning in the future, save this URI, $HOSTNAME$, to your Bitwarden login item for this site.", + "message": "لمنع هذا التحذير في المستقبل، حفظ هذا الرابط، $HOSTNAME$ إلى عنصر تسجيل الدخول الخاص بك Bitwarden لهذا الموقع.", "placeholders": { "hostname": { "content": "$1", @@ -1480,22 +1486,22 @@ } }, "setMasterPassword": { - "message": "Set master password" + "message": "تعيين كلمة مرور رئيسية" }, "currentMasterPass": { - "message": "Current master password" + "message": "كلمة المرور الرئيسية الحالية" }, "newMasterPass": { - "message": "New master password" + "message": "كلمة مرور رئيسية جديدة" }, "confirmNewMasterPass": { - "message": "Confirm new master password" + "message": "تأكيد كلمة المرور الرئيسية الجديدة" }, "masterPasswordPolicyInEffect": { - "message": "One or more organization policies require your master password to meet the following requirements:" + "message": "1 - تتطلب سياسة واحدة أو أكثر من سياسات المؤسسة كلمة مرورك الرئيسية لتلبية المتطلبات التالية:" }, "policyInEffectMinComplexity": { - "message": "Minimum complexity score of $SCORE$", + "message": "الحد الأدنى لدرجة التعقيد $SCORE$", "placeholders": { "score": { "content": "$1", @@ -1504,7 +1510,7 @@ } }, "policyInEffectMinLength": { - "message": "Minimum length of $LENGTH$", + "message": "الحد الأدنى لطول $LENGTH$", "placeholders": { "length": { "content": "$1", @@ -1513,16 +1519,16 @@ } }, "policyInEffectUppercase": { - "message": "Contain one or more uppercase characters" + "message": "يحتوي على حرف كبير واحد أو أكثر" }, "policyInEffectLowercase": { - "message": "Contain one or more lowercase characters" + "message": "يحتوي على واحد أو أكثر من الأحرف الصغيرة" }, "policyInEffectNumbers": { - "message": "Contain one or more numbers" + "message": "يحتوي على رقم واحد أو أكثر" }, "policyInEffectSpecial": { - "message": "Contain one or more of the following special characters $CHARS$", + "message": "يحتوي على واحد أو أكثر من الأحرف الخاصة التالية $CHARS$", "placeholders": { "chars": { "content": "$1", @@ -1534,7 +1540,7 @@ "message": "كلمة المرور الرئيسية الجديدة لا تفي بمتطلبات السياسة العامة." }, "acceptPolicies": { - "message": "By checking this box you agree to the following:" + "message": "من خلال تحديد هذا المربع فإنك توافق على ما يلي:" }, "acceptPoliciesRequired": { "message": "Terms of Service and Privacy Policy have not been acknowledged." @@ -1599,6 +1605,12 @@ "biometricsNotSupportedDesc": { "message": "Browser biometrics is not supported on this device." }, + "biometricsFailedTitle": { + "message": "Biometrics failed" + }, + "biometricsFailedDesc": { + "message": "Biometrics cannot be completed, consider using a master password or logging out. If this persists, please contact Bitwarden support." + }, "nativeMessaginPermissionErrorTitle": { "message": "Permission not provided" }, @@ -1618,13 +1630,13 @@ "message": "An organization policy is affecting your ownership options." }, "excludedDomains": { - "message": "Excluded domains" + "message": "النطاقات المستبعدة" }, "excludedDomainsDesc": { - "message": "Bitwarden will not ask to save login details for these domains. You must refresh the page for changes to take effect." + "message": "Bitwarden لن يطلب حفظ تفاصيل تسجيل الدخول لهذه النطاقات. يجب عليك تحديث الصفحة حتى تصبح التغييرات سارية المفعول." }, "excludedDomainsInvalidDomain": { - "message": "$DOMAIN$ is not a valid domain", + "message": "$DOMAIN$ نطاق غير صالح", "placeholders": { "domain": { "content": "$1", @@ -2140,8 +2152,8 @@ "notificationSentDevice": { "message": "A notification has been sent to your device." }, - "logInInitiated": { - "message": "Log in initiated" + "loginInitiated": { + "message": "Login initiated" }, "exposedMasterPassword": { "message": "Exposed Master Password" @@ -2221,19 +2233,42 @@ } } }, - "region": { - "message": "Region" + "loggingInOn": { + "message": "Logging in on" }, "opensInANewWindow": { "message": "Opens in a new window" }, + "deviceApprovalRequired": { + "message": "Device approval required. Select an approval option below:" + }, + "rememberThisDevice": { + "message": "Remember this device" + }, + "uncheckIfPublicDevice": { + "message": "Uncheck if using a public device" + }, + "approveFromYourOtherDevice": { + "message": "Approve from your other device" + }, + "requestAdminApproval": { + "message": "Request admin approval" + }, + "approveWithMasterPassword": { + "message": "Approve with master password" + }, + "ssoIdentifierRequired": { + "message": "Organization SSO identifier is required." + }, "eu": { "message": "EU", "description": "European Union" }, - "us": { - "message": "US", - "description": "United States" + "usDomain": { + "message": "bitwarden.com" + }, + "euDomain": { + "message": "bitwarden.eu" }, "accessDenied": { "message": "Access denied. You do not have permission to view this page." @@ -2243,5 +2278,133 @@ }, "display": { "message": "Display" + }, + "accountSuccessfullyCreated": { + "message": "Account successfully created!" + }, + "adminApprovalRequested": { + "message": "Admin approval requested" + }, + "adminApprovalRequestSentToAdmins": { + "message": "Your request has been sent to your admin." + }, + "youWillBeNotifiedOnceApproved": { + "message": "You will be notified once approved." + }, + "troubleLoggingIn": { + "message": "Trouble logging in?" + }, + "loginApproved": { + "message": "Login approved" + }, + "userEmailMissing": { + "message": "User email missing" + }, + "deviceTrusted": { + "message": "Device trusted" + }, + "inputRequired": { + "message": "Input is required." + }, + "required": { + "message": "required" + }, + "search": { + "message": "Search" + }, + "inputMinLength": { + "message": "Input must be at least $COUNT$ characters long.", + "placeholders": { + "count": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxLength": { + "message": "Input must not exceed $COUNT$ characters in length.", + "placeholders": { + "count": { + "content": "$1", + "example": "20" + } + } + }, + "inputForbiddenCharacters": { + "message": "The following characters are not allowed: $CHARACTERS$", + "placeholders": { + "characters": { + "content": "$1", + "example": "@, #, $, %" + } + } + }, + "inputMinValue": { + "message": "Input value must be at least $MIN$.", + "placeholders": { + "min": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxValue": { + "message": "Input value must not exceed $MAX$.", + "placeholders": { + "max": { + "content": "$1", + "example": "100" + } + } + }, + "multipleInputEmails": { + "message": "1 or more emails are invalid" + }, + "inputTrimValidator": { + "message": "Input must not contain only whitespace.", + "description": "Notification to inform the user that a form's input can't contain only whitespace." + }, + "inputEmail": { + "message": "Input is not an email address." + }, + "fieldsNeedAttention": { + "message": "$COUNT$ field(s) above need your attention.", + "placeholders": { + "count": { + "content": "$1", + "example": "4" + } + } + }, + "selectPlaceholder": { + "message": "-- Select --" + }, + "multiSelectPlaceholder": { + "message": "-- Type to filter --" + }, + "multiSelectLoading": { + "message": "Retrieving options..." + }, + "multiSelectNotFound": { + "message": "No items found" + }, + "multiSelectClearAll": { + "message": "Clear all" + }, + "plusNMore": { + "message": "+ $QUANTITY$ more", + "placeholders": { + "quantity": { + "content": "$1", + "example": "5" + } + } + }, + "submenu": { + "message": "Submenu" + }, + "toggleCollapse": { + "message": "Toggle collapse", + "description": "Toggling an expand/collapse state." } } diff --git a/apps/browser/src/_locales/az/messages.json b/apps/browser/src/_locales/az/messages.json index cbae4e49090..283b03a17a9 100644 --- a/apps/browser/src/_locales/az/messages.json +++ b/apps/browser/src/_locales/az/messages.json @@ -338,6 +338,9 @@ "other": { "message": "Digər" }, + "unlockMethodNeededToChangeTimeoutActionDesc": { + "message": "Anbar vaxt bitməsi əməliyyatınızı dəyişdirmək üçün bir kilid açma üsulu quraşdırın." + }, "rateExtension": { "message": "Genişləndirməni qiymətləndir" }, @@ -630,6 +633,12 @@ "notificationChangeSave": { "message": "Güncəllə" }, + "notificationUnlockDesc": { + "message": "Avto-doldurma tələblərini tamamlamaq üçün Bitwarden anbarınızın kilidini açın." + }, + "notificationUnlock": { + "message": "Kilidi aç" + }, "enableContextMenuItem": { "message": "Konteks menyu seçimlərini göstər" }, @@ -786,8 +795,8 @@ "ppremiumSignUpStorage": { "message": "Fayl qoşmaları üçün 1 GB şifrələnmiş saxlama sahəsi" }, - "ppremiumSignUpTwoStep": { - "message": "YubiKey, FIDO U2F və Duo kimi iki mərhələli giriş seçimləri" + "premiumSignUpTwoStepOptions": { + "message": "Proprietary two-step login options such as YubiKey and Duo." }, "ppremiumSignUpReports": { "message": "Anbarınızın təhlükəsiyini təmin etmək üçün parol gigiyenası, hesab sağlamlığı və verilənlərin pozulması hesabatları." @@ -1440,9 +1449,6 @@ "restoreItem": { "message": "Elementi bərpa et" }, - "restoreItemConfirmation": { - "message": "Elementi bərpa etmək istədiyinizə əminsiniz?" - }, "restoredItem": { "message": "Element bərpa edildi" }, @@ -1599,6 +1605,12 @@ "biometricsNotSupportedDesc": { "message": "Brauzer biometrikləri bu cihazda dəstəklənmir." }, + "biometricsFailedTitle": { + "message": "Biometrik uğursuzdur" + }, + "biometricsFailedDesc": { + "message": "Biometriklər tamamlana bilmir, ana parol istifadə etməyi düşünün və ya çıxış edin. Bu problem davam edərsə, zəhmət olmasa Bitwarden dəstəyi ilə əlaqə saxlayın." + }, "nativeMessaginPermissionErrorTitle": { "message": "İcazə verilmədi" }, @@ -2140,8 +2152,8 @@ "notificationSentDevice": { "message": "Cihazınıza bir bildiriş göndərildi." }, - "logInInitiated": { - "message": "Giriş etmə başladıldı" + "loginInitiated": { + "message": "Giriş başladıldı" }, "exposedMasterPassword": { "message": "İfşa olunmuş ana parol" @@ -2221,27 +2233,178 @@ } } }, - "region": { - "message": "Bölgə" + "loggingInOn": { + "message": "Giriş edilir" }, "opensInANewWindow": { "message": "Yeni bir pəncərədə açılır" }, + "deviceApprovalRequired": { + "message": "Cihaz təsdiqi tələb olunur. Aşağıdan bir təsdiq variantı seçin:" + }, + "rememberThisDevice": { + "message": "Bu cihazı xatırla" + }, + "uncheckIfPublicDevice": { + "message": "Hər kəsə açıq bir cihaz istifadə edirsinizsə işarəni götürün" + }, + "approveFromYourOtherDevice": { + "message": "Digər cihazınızdan təsdiqləyin" + }, + "requestAdminApproval": { + "message": "Admin təsdiqini tələb et" + }, + "approveWithMasterPassword": { + "message": "Ana parolla təsdiqlə" + }, + "ssoIdentifierRequired": { + "message": "Təşkilat SSO identifikatoru tələb olunur." + }, "eu": { "message": "AB", "description": "European Union" }, - "us": { - "message": "ABŞ", - "description": "United States" + "usDomain": { + "message": "bitwarden.com" + }, + "euDomain": { + "message": "bitwarden.eu" }, "accessDenied": { "message": "Müraciət rədd edildi. Bu səhifəyə baxmaq üçün icazəniz yoxdur." }, "general": { - "message": "General" + "message": "Ümumi" }, "display": { - "message": "Display" + "message": "Ekran" + }, + "accountSuccessfullyCreated": { + "message": "Hesab uğurla yaradıldı!" + }, + "adminApprovalRequested": { + "message": "Admin təsdiqi tələb olunur" + }, + "adminApprovalRequestSentToAdmins": { + "message": "Tələbiniz admininizə göndərildi." + }, + "youWillBeNotifiedOnceApproved": { + "message": "Təsdiqləndikdən sonra məlumatlandırılacaqsınız." + }, + "troubleLoggingIn": { + "message": "Girişdə problem var?" + }, + "loginApproved": { + "message": "Giriş təsdiqləndi" + }, + "userEmailMissing": { + "message": "İstifadəçi e-poçtu əskikdir" + }, + "deviceTrusted": { + "message": "Cihaz güvənlidir" + }, + "inputRequired": { + "message": "Giriş lazımdır." + }, + "required": { + "message": "tələb olunur" + }, + "search": { + "message": "Axtar" + }, + "inputMinLength": { + "message": "Giriş, ən azı $COUNT$ simvol uzunluğunda olmalıdır.", + "placeholders": { + "count": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxLength": { + "message": "Giriş uzunluğu $COUNT$ simvolu aşmamalıdır.", + "placeholders": { + "count": { + "content": "$1", + "example": "20" + } + } + }, + "inputForbiddenCharacters": { + "message": "Aşağıdakı simvollara icazə verilmir: $CHARACTERS$", + "placeholders": { + "characters": { + "content": "$1", + "example": "@, #, $, %" + } + } + }, + "inputMinValue": { + "message": "Giriş dəyəri ən azı $MIN$ olmalıdır.", + "placeholders": { + "min": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxValue": { + "message": "Giriş dəyəri $MAX$ dəyərini aşmamalıdır.", + "placeholders": { + "max": { + "content": "$1", + "example": "100" + } + } + }, + "multipleInputEmails": { + "message": "1 və ya daha çox e-poçt yararsızdır" + }, + "inputTrimValidator": { + "message": "Giriş, yalnız boşluq ehtiva etməməlidir.", + "description": "Notification to inform the user that a form's input can't contain only whitespace." + }, + "inputEmail": { + "message": "Giriş, bir e-poçt ünvanı deyil." + }, + "fieldsNeedAttention": { + "message": "Yuxarıdakı $COUNT$ sahənin diqqətinizə ehtiyacı var.", + "placeholders": { + "count": { + "content": "$1", + "example": "4" + } + } + }, + "selectPlaceholder": { + "message": "-- Seç --" + }, + "multiSelectPlaceholder": { + "message": "-- Filtrləmək üçün yazın --" + }, + "multiSelectLoading": { + "message": "Seçimlər alınır..." + }, + "multiSelectNotFound": { + "message": "Heç bir element tapılmadı" + }, + "multiSelectClearAll": { + "message": "Hamısını təmizlə" + }, + "plusNMore": { + "message": "daha $QUANTITY$ ədəd", + "placeholders": { + "quantity": { + "content": "$1", + "example": "5" + } + } + }, + "submenu": { + "message": "Alt menyu" + }, + "toggleCollapse": { + "message": "Yığcamlaşdırmanı aç/bağla", + "description": "Toggling an expand/collapse state." } } diff --git a/apps/browser/src/_locales/be/messages.json b/apps/browser/src/_locales/be/messages.json index 8080b7c8ded..6aada06265d 100644 --- a/apps/browser/src/_locales/be/messages.json +++ b/apps/browser/src/_locales/be/messages.json @@ -338,6 +338,9 @@ "other": { "message": "Iншае" }, + "unlockMethodNeededToChangeTimeoutActionDesc": { + "message": "Set up an unlock method to change your vault timeout action." + }, "rateExtension": { "message": "Ацаніць пашырэнне" }, @@ -630,6 +633,12 @@ "notificationChangeSave": { "message": "Абнавіць" }, + "notificationUnlockDesc": { + "message": "Unlock your Bitwarden vault to complete the auto-fill request." + }, + "notificationUnlock": { + "message": "Unlock" + }, "enableContextMenuItem": { "message": "Паказваць параметры кантэкстнага меню" }, @@ -786,8 +795,8 @@ "ppremiumSignUpStorage": { "message": "1 ГБ зашыфраванага сховішча для далучаных файлаў." }, - "ppremiumSignUpTwoStep": { - "message": "Дадатковыя варыянты двухэтапнага ўваходу, такія як YubiKey, FIDO U2F і Duo." + "premiumSignUpTwoStepOptions": { + "message": "Proprietary two-step login options such as YubiKey and Duo." }, "ppremiumSignUpReports": { "message": "Гігіена пароляў, здароўе ўліковага запісу і справаздачы аб уцечках даных для забеспячэння бяспекі вашага сховішча." @@ -1440,9 +1449,6 @@ "restoreItem": { "message": "Аднавіць элемент" }, - "restoreItemConfirmation": { - "message": "Вы сапраўды хочаце аднавіць гэты элемент?" - }, "restoredItem": { "message": "Элемент адноўлены" }, @@ -1599,6 +1605,12 @@ "biometricsNotSupportedDesc": { "message": "Біяметрыя ў браўзеры не падтрымліваецца на гэтай прыладзе." }, + "biometricsFailedTitle": { + "message": "Biometrics failed" + }, + "biometricsFailedDesc": { + "message": "Biometrics cannot be completed, consider using a master password or logging out. If this persists, please contact Bitwarden support." + }, "nativeMessaginPermissionErrorTitle": { "message": "Дазволы не прадастаўлены" }, @@ -2140,8 +2152,8 @@ "notificationSentDevice": { "message": "Апавяшчэнне было адпраўлена на вашу прыладу." }, - "logInInitiated": { - "message": "Ініцыяваны ўваход" + "loginInitiated": { + "message": "Login initiated" }, "exposedMasterPassword": { "message": "Скампраметаваны асноўны пароль" @@ -2221,19 +2233,42 @@ } } }, - "region": { - "message": "Рэгіён" + "loggingInOn": { + "message": "Logging in on" }, "opensInANewWindow": { "message": "Адкрываць у новым акне" }, + "deviceApprovalRequired": { + "message": "Device approval required. Select an approval option below:" + }, + "rememberThisDevice": { + "message": "Remember this device" + }, + "uncheckIfPublicDevice": { + "message": "Uncheck if using a public device" + }, + "approveFromYourOtherDevice": { + "message": "Approve from your other device" + }, + "requestAdminApproval": { + "message": "Request admin approval" + }, + "approveWithMasterPassword": { + "message": "Approve with master password" + }, + "ssoIdentifierRequired": { + "message": "Organization SSO identifier is required." + }, "eu": { - "message": "ЕС", + "message": "EU", "description": "European Union" }, - "us": { - "message": "ЗША", - "description": "United States" + "usDomain": { + "message": "bitwarden.com" + }, + "euDomain": { + "message": "bitwarden.eu" }, "accessDenied": { "message": "Доступ забаронены. У вас не дастаткова правоў для прагляду гэтай старонкі." @@ -2243,5 +2278,133 @@ }, "display": { "message": "Адлюстраванне" + }, + "accountSuccessfullyCreated": { + "message": "Account successfully created!" + }, + "adminApprovalRequested": { + "message": "Admin approval requested" + }, + "adminApprovalRequestSentToAdmins": { + "message": "Your request has been sent to your admin." + }, + "youWillBeNotifiedOnceApproved": { + "message": "You will be notified once approved." + }, + "troubleLoggingIn": { + "message": "Trouble logging in?" + }, + "loginApproved": { + "message": "Login approved" + }, + "userEmailMissing": { + "message": "User email missing" + }, + "deviceTrusted": { + "message": "Device trusted" + }, + "inputRequired": { + "message": "Input is required." + }, + "required": { + "message": "required" + }, + "search": { + "message": "Search" + }, + "inputMinLength": { + "message": "Input must be at least $COUNT$ characters long.", + "placeholders": { + "count": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxLength": { + "message": "Input must not exceed $COUNT$ characters in length.", + "placeholders": { + "count": { + "content": "$1", + "example": "20" + } + } + }, + "inputForbiddenCharacters": { + "message": "The following characters are not allowed: $CHARACTERS$", + "placeholders": { + "characters": { + "content": "$1", + "example": "@, #, $, %" + } + } + }, + "inputMinValue": { + "message": "Input value must be at least $MIN$.", + "placeholders": { + "min": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxValue": { + "message": "Input value must not exceed $MAX$.", + "placeholders": { + "max": { + "content": "$1", + "example": "100" + } + } + }, + "multipleInputEmails": { + "message": "1 or more emails are invalid" + }, + "inputTrimValidator": { + "message": "Input must not contain only whitespace.", + "description": "Notification to inform the user that a form's input can't contain only whitespace." + }, + "inputEmail": { + "message": "Input is not an email address." + }, + "fieldsNeedAttention": { + "message": "$COUNT$ field(s) above need your attention.", + "placeholders": { + "count": { + "content": "$1", + "example": "4" + } + } + }, + "selectPlaceholder": { + "message": "-- Select --" + }, + "multiSelectPlaceholder": { + "message": "-- Type to filter --" + }, + "multiSelectLoading": { + "message": "Retrieving options..." + }, + "multiSelectNotFound": { + "message": "No items found" + }, + "multiSelectClearAll": { + "message": "Clear all" + }, + "plusNMore": { + "message": "+ $QUANTITY$ more", + "placeholders": { + "quantity": { + "content": "$1", + "example": "5" + } + } + }, + "submenu": { + "message": "Submenu" + }, + "toggleCollapse": { + "message": "Toggle collapse", + "description": "Toggling an expand/collapse state." } } diff --git a/apps/browser/src/_locales/bg/messages.json b/apps/browser/src/_locales/bg/messages.json index a5eda0555c0..cf9ec1b8ed9 100644 --- a/apps/browser/src/_locales/bg/messages.json +++ b/apps/browser/src/_locales/bg/messages.json @@ -338,6 +338,9 @@ "other": { "message": "Други" }, + "unlockMethodNeededToChangeTimeoutActionDesc": { + "message": "Задайте метод за отключване, за да може да промените действието при изтичане на времето за достъп до трезора." + }, "rateExtension": { "message": "Оценяване на разширението" }, @@ -630,6 +633,12 @@ "notificationChangeSave": { "message": "Да, нека се обнови сега" }, + "notificationUnlockDesc": { + "message": "Отключете трезора си в Битуорден, за да завършите заявката за автоматично попълване." + }, + "notificationUnlock": { + "message": "Отключване" + }, "enableContextMenuItem": { "message": "Показване на опции в контекстното меню" }, @@ -786,8 +795,8 @@ "ppremiumSignUpStorage": { "message": "1 GB пространство за файлове, които се шифрират." }, - "ppremiumSignUpTwoStep": { - "message": "Двустепенно удостоверяване чрез YubiKey, FIDO U2F и Duo." + "premiumSignUpTwoStepOptions": { + "message": "Proprietary two-step login options such as YubiKey and Duo." }, "ppremiumSignUpReports": { "message": "Проверки в списъците с публикувани пароли, проверка на регистрациите и доклади за пробивите в сигурността, което спомага трезорът ви да е допълнително защитен." @@ -1440,9 +1449,6 @@ "restoreItem": { "message": "Възстановяване на запис" }, - "restoreItemConfirmation": { - "message": "Сигурни ли сте, че искате да възстановите записа?" - }, "restoredItem": { "message": "Записът е възстановен" }, @@ -1599,6 +1605,12 @@ "biometricsNotSupportedDesc": { "message": "Устройството не поддържа потвърждаване с биометрични данни." }, + "biometricsFailedTitle": { + "message": "Неуспешно удостоверяване чрез биометрични данни" + }, + "biometricsFailedDesc": { + "message": "Удостоверяването чрез биометрични данни не може да бъде завършено. Опитайте да използвате главната си парола или се отпишете. Ако този проблем продължи да се случва, свържете се с поддръжката на Битуорден." + }, "nativeMessaginPermissionErrorTitle": { "message": "Правото не е дадено" }, @@ -2140,7 +2152,7 @@ "notificationSentDevice": { "message": "Към устройството Ви е изпратено известие." }, - "logInInitiated": { + "loginInitiated": { "message": "Вписването е стартирано" }, "exposedMasterPassword": { @@ -2221,19 +2233,42 @@ } } }, - "region": { - "message": "Регион" + "loggingInOn": { + "message": "Вписване в" }, "opensInANewWindow": { "message": "Отваря се в нов прозорец" }, + "deviceApprovalRequired": { + "message": "Изисква се одобрение на устройството. Изберете начин за одобрение по-долу:" + }, + "rememberThisDevice": { + "message": "Запомняне на това устройство" + }, + "uncheckIfPublicDevice": { + "message": "Махнете отметката, ако използвате публично устройство" + }, + "approveFromYourOtherDevice": { + "message": "Одобряване с другото Ви устройство" + }, + "requestAdminApproval": { + "message": "Подаване на заявка за одобрение от администратор" + }, + "approveWithMasterPassword": { + "message": "Одобряване с главната парола" + }, + "ssoIdentifierRequired": { + "message": "Идентификаторът за еднократна идентификация на организация е задължителен." + }, "eu": { "message": "ЕС", "description": "European Union" }, - "us": { - "message": "САЩ", - "description": "United States" + "usDomain": { + "message": "bitwarden.com" + }, + "euDomain": { + "message": "bitwarden.eu" }, "accessDenied": { "message": "Отказан достъп. Нямате право за преглед на страницата." @@ -2242,6 +2277,134 @@ "message": "Общи" }, "display": { - "message": "Display" + "message": "Външен вид" + }, + "accountSuccessfullyCreated": { + "message": "Регистрацията е създадена успешно!" + }, + "adminApprovalRequested": { + "message": "Заявено е одобрение от администратор" + }, + "adminApprovalRequestSentToAdmins": { + "message": "Вашата заявка беше изпратена до администратора Ви." + }, + "youWillBeNotifiedOnceApproved": { + "message": "Ще получите известие, когато тя бъде одобрена." + }, + "troubleLoggingIn": { + "message": "Имате проблем с вписването?" + }, + "loginApproved": { + "message": "Вписването е одобрено" + }, + "userEmailMissing": { + "message": "Липсва е-поща на потребителя" + }, + "deviceTrusted": { + "message": "Устройството е доверено" + }, + "inputRequired": { + "message": "Полето е задължтелно да бъде попълнено." + }, + "required": { + "message": "задължително" + }, + "search": { + "message": "Търсене" + }, + "inputMinLength": { + "message": "Въведеният в полето текст трябва да бъде с дължина поне $COUNT$ знака.", + "placeholders": { + "count": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxLength": { + "message": "Полето не може да съдържа повече от $COUNT$ знака.", + "placeholders": { + "count": { + "content": "$1", + "example": "20" + } + } + }, + "inputForbiddenCharacters": { + "message": "Следните знаци не са позволени: $CHARACTERS$", + "placeholders": { + "characters": { + "content": "$1", + "example": "@, #, $, %" + } + } + }, + "inputMinValue": { + "message": "Въведената стойност трябва да бъде поне $MIN$.", + "placeholders": { + "min": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxValue": { + "message": "Въведената стойност не трябва да бъде по-голяма от $MAX$.", + "placeholders": { + "max": { + "content": "$1", + "example": "100" + } + } + }, + "multipleInputEmails": { + "message": "1 или повече е-пощи са неправилни" + }, + "inputTrimValidator": { + "message": "Въведеното не може да съдържа само интервали.", + "description": "Notification to inform the user that a form's input can't contain only whitespace." + }, + "inputEmail": { + "message": "Въведеният в полето текст не е адрес на е-поща." + }, + "fieldsNeedAttention": { + "message": "$COUNT$ поле(та) по-горе се нуждае/ят от вниманието Ви.", + "placeholders": { + "count": { + "content": "$1", + "example": "4" + } + } + }, + "selectPlaceholder": { + "message": "-- Изберете --" + }, + "multiSelectPlaceholder": { + "message": "-- Пишете тук за филтриране --" + }, + "multiSelectLoading": { + "message": "Зареждане на опциите…" + }, + "multiSelectNotFound": { + "message": "Няма намерени елементи" + }, + "multiSelectClearAll": { + "message": "Изчистване на всичко" + }, + "plusNMore": { + "message": "+ още $QUANTITY$", + "placeholders": { + "quantity": { + "content": "$1", + "example": "5" + } + } + }, + "submenu": { + "message": "Подменю" + }, + "toggleCollapse": { + "message": "Превключване на свиването", + "description": "Toggling an expand/collapse state." } } diff --git a/apps/browser/src/_locales/bn/messages.json b/apps/browser/src/_locales/bn/messages.json index d5f735eae5a..7d7151b58f6 100644 --- a/apps/browser/src/_locales/bn/messages.json +++ b/apps/browser/src/_locales/bn/messages.json @@ -338,6 +338,9 @@ "other": { "message": "অন্যান্য" }, + "unlockMethodNeededToChangeTimeoutActionDesc": { + "message": "Set up an unlock method to change your vault timeout action." + }, "rateExtension": { "message": "এক্সটেনশনটি মূল্যায়ন করুন" }, @@ -630,6 +633,12 @@ "notificationChangeSave": { "message": "হ্যাঁ, এখনই হালনাগাদ করুন" }, + "notificationUnlockDesc": { + "message": "Unlock your Bitwarden vault to complete the auto-fill request." + }, + "notificationUnlock": { + "message": "Unlock" + }, "enableContextMenuItem": { "message": "Show context menu options" }, @@ -786,8 +795,8 @@ "ppremiumSignUpStorage": { "message": "ফাইল সংযুক্তির জন্য ১ জিবি এনক্রিপ্টেড স্থান।" }, - "ppremiumSignUpTwoStep": { - "message": "YubiKey, FIDO U2F, ও Duo এর মতো অতিরিক্ত দ্বি-পদক্ষেপ লগইন বিকল্পগুলি।" + "premiumSignUpTwoStepOptions": { + "message": "Proprietary two-step login options such as YubiKey and Duo." }, "ppremiumSignUpReports": { "message": "আপনার ভল্টটি সুরক্ষিত রাখতে পাসওয়ার্ড স্বাস্থ্যকরন, অ্যাকাউন্ট স্বাস্থ্য এবং ডেটা লঙ্ঘনের প্রতিবেদন।" @@ -1440,9 +1449,6 @@ "restoreItem": { "message": "বস্তু পুনরুদ্ধার" }, - "restoreItemConfirmation": { - "message": "আপনি কি নিশ্চিত যে আপনি এই বস্তুটি পুনরুদ্ধার করতে চান?" - }, "restoredItem": { "message": "বস্তু পুনরুদ্ধারকৃত" }, @@ -1599,6 +1605,12 @@ "biometricsNotSupportedDesc": { "message": "ব্রাউজার বায়োমেট্রিক্স এই ডিভাইসে সমর্থিত নয়।" }, + "biometricsFailedTitle": { + "message": "Biometrics failed" + }, + "biometricsFailedDesc": { + "message": "Biometrics cannot be completed, consider using a master password or logging out. If this persists, please contact Bitwarden support." + }, "nativeMessaginPermissionErrorTitle": { "message": "অনুমতি দেওয়া হয়নি" }, @@ -2140,8 +2152,8 @@ "notificationSentDevice": { "message": "A notification has been sent to your device." }, - "logInInitiated": { - "message": "Log in initiated" + "loginInitiated": { + "message": "Login initiated" }, "exposedMasterPassword": { "message": "Exposed Master Password" @@ -2221,19 +2233,42 @@ } } }, - "region": { - "message": "Region" + "loggingInOn": { + "message": "Logging in on" }, "opensInANewWindow": { "message": "Opens in a new window" }, + "deviceApprovalRequired": { + "message": "Device approval required. Select an approval option below:" + }, + "rememberThisDevice": { + "message": "Remember this device" + }, + "uncheckIfPublicDevice": { + "message": "Uncheck if using a public device" + }, + "approveFromYourOtherDevice": { + "message": "Approve from your other device" + }, + "requestAdminApproval": { + "message": "Request admin approval" + }, + "approveWithMasterPassword": { + "message": "Approve with master password" + }, + "ssoIdentifierRequired": { + "message": "Organization SSO identifier is required." + }, "eu": { "message": "EU", "description": "European Union" }, - "us": { - "message": "US", - "description": "United States" + "usDomain": { + "message": "bitwarden.com" + }, + "euDomain": { + "message": "bitwarden.eu" }, "accessDenied": { "message": "Access denied. You do not have permission to view this page." @@ -2243,5 +2278,133 @@ }, "display": { "message": "Display" + }, + "accountSuccessfullyCreated": { + "message": "Account successfully created!" + }, + "adminApprovalRequested": { + "message": "Admin approval requested" + }, + "adminApprovalRequestSentToAdmins": { + "message": "Your request has been sent to your admin." + }, + "youWillBeNotifiedOnceApproved": { + "message": "You will be notified once approved." + }, + "troubleLoggingIn": { + "message": "Trouble logging in?" + }, + "loginApproved": { + "message": "Login approved" + }, + "userEmailMissing": { + "message": "User email missing" + }, + "deviceTrusted": { + "message": "Device trusted" + }, + "inputRequired": { + "message": "Input is required." + }, + "required": { + "message": "required" + }, + "search": { + "message": "Search" + }, + "inputMinLength": { + "message": "Input must be at least $COUNT$ characters long.", + "placeholders": { + "count": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxLength": { + "message": "Input must not exceed $COUNT$ characters in length.", + "placeholders": { + "count": { + "content": "$1", + "example": "20" + } + } + }, + "inputForbiddenCharacters": { + "message": "The following characters are not allowed: $CHARACTERS$", + "placeholders": { + "characters": { + "content": "$1", + "example": "@, #, $, %" + } + } + }, + "inputMinValue": { + "message": "Input value must be at least $MIN$.", + "placeholders": { + "min": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxValue": { + "message": "Input value must not exceed $MAX$.", + "placeholders": { + "max": { + "content": "$1", + "example": "100" + } + } + }, + "multipleInputEmails": { + "message": "1 or more emails are invalid" + }, + "inputTrimValidator": { + "message": "Input must not contain only whitespace.", + "description": "Notification to inform the user that a form's input can't contain only whitespace." + }, + "inputEmail": { + "message": "Input is not an email address." + }, + "fieldsNeedAttention": { + "message": "$COUNT$ field(s) above need your attention.", + "placeholders": { + "count": { + "content": "$1", + "example": "4" + } + } + }, + "selectPlaceholder": { + "message": "-- Select --" + }, + "multiSelectPlaceholder": { + "message": "-- Type to filter --" + }, + "multiSelectLoading": { + "message": "Retrieving options..." + }, + "multiSelectNotFound": { + "message": "No items found" + }, + "multiSelectClearAll": { + "message": "Clear all" + }, + "plusNMore": { + "message": "+ $QUANTITY$ more", + "placeholders": { + "quantity": { + "content": "$1", + "example": "5" + } + } + }, + "submenu": { + "message": "Submenu" + }, + "toggleCollapse": { + "message": "Toggle collapse", + "description": "Toggling an expand/collapse state." } } diff --git a/apps/browser/src/_locales/bs/messages.json b/apps/browser/src/_locales/bs/messages.json index f96678dd6f1..657ce243606 100644 --- a/apps/browser/src/_locales/bs/messages.json +++ b/apps/browser/src/_locales/bs/messages.json @@ -338,6 +338,9 @@ "other": { "message": "Other" }, + "unlockMethodNeededToChangeTimeoutActionDesc": { + "message": "Set up an unlock method to change your vault timeout action." + }, "rateExtension": { "message": "Rate the extension" }, @@ -630,6 +633,12 @@ "notificationChangeSave": { "message": "Update" }, + "notificationUnlockDesc": { + "message": "Unlock your Bitwarden vault to complete the auto-fill request." + }, + "notificationUnlock": { + "message": "Unlock" + }, "enableContextMenuItem": { "message": "Show context menu options" }, @@ -786,8 +795,8 @@ "ppremiumSignUpStorage": { "message": "1 GB encrypted storage for file attachments." }, - "ppremiumSignUpTwoStep": { - "message": "Additional two-step login options such as YubiKey, FIDO U2F, and Duo." + "premiumSignUpTwoStepOptions": { + "message": "Proprietary two-step login options such as YubiKey and Duo." }, "ppremiumSignUpReports": { "message": "Password hygiene, account health, and data breach reports to keep your vault safe." @@ -1440,9 +1449,6 @@ "restoreItem": { "message": "Restore item" }, - "restoreItemConfirmation": { - "message": "Are you sure you want to restore this item?" - }, "restoredItem": { "message": "Item restored" }, @@ -1599,6 +1605,12 @@ "biometricsNotSupportedDesc": { "message": "Browser biometrics is not supported on this device." }, + "biometricsFailedTitle": { + "message": "Biometrics failed" + }, + "biometricsFailedDesc": { + "message": "Biometrics cannot be completed, consider using a master password or logging out. If this persists, please contact Bitwarden support." + }, "nativeMessaginPermissionErrorTitle": { "message": "Permission not provided" }, @@ -2140,8 +2152,8 @@ "notificationSentDevice": { "message": "A notification has been sent to your device." }, - "logInInitiated": { - "message": "Log in initiated" + "loginInitiated": { + "message": "Login initiated" }, "exposedMasterPassword": { "message": "Exposed Master Password" @@ -2221,19 +2233,42 @@ } } }, - "region": { - "message": "Region" + "loggingInOn": { + "message": "Logging in on" }, "opensInANewWindow": { "message": "Opens in a new window" }, + "deviceApprovalRequired": { + "message": "Device approval required. Select an approval option below:" + }, + "rememberThisDevice": { + "message": "Remember this device" + }, + "uncheckIfPublicDevice": { + "message": "Uncheck if using a public device" + }, + "approveFromYourOtherDevice": { + "message": "Approve from your other device" + }, + "requestAdminApproval": { + "message": "Request admin approval" + }, + "approveWithMasterPassword": { + "message": "Approve with master password" + }, + "ssoIdentifierRequired": { + "message": "Organization SSO identifier is required." + }, "eu": { "message": "EU", "description": "European Union" }, - "us": { - "message": "US", - "description": "United States" + "usDomain": { + "message": "bitwarden.com" + }, + "euDomain": { + "message": "bitwarden.eu" }, "accessDenied": { "message": "Access denied. You do not have permission to view this page." @@ -2243,5 +2278,133 @@ }, "display": { "message": "Display" + }, + "accountSuccessfullyCreated": { + "message": "Account successfully created!" + }, + "adminApprovalRequested": { + "message": "Admin approval requested" + }, + "adminApprovalRequestSentToAdmins": { + "message": "Your request has been sent to your admin." + }, + "youWillBeNotifiedOnceApproved": { + "message": "You will be notified once approved." + }, + "troubleLoggingIn": { + "message": "Trouble logging in?" + }, + "loginApproved": { + "message": "Login approved" + }, + "userEmailMissing": { + "message": "User email missing" + }, + "deviceTrusted": { + "message": "Device trusted" + }, + "inputRequired": { + "message": "Input is required." + }, + "required": { + "message": "required" + }, + "search": { + "message": "Search" + }, + "inputMinLength": { + "message": "Input must be at least $COUNT$ characters long.", + "placeholders": { + "count": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxLength": { + "message": "Input must not exceed $COUNT$ characters in length.", + "placeholders": { + "count": { + "content": "$1", + "example": "20" + } + } + }, + "inputForbiddenCharacters": { + "message": "The following characters are not allowed: $CHARACTERS$", + "placeholders": { + "characters": { + "content": "$1", + "example": "@, #, $, %" + } + } + }, + "inputMinValue": { + "message": "Input value must be at least $MIN$.", + "placeholders": { + "min": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxValue": { + "message": "Input value must not exceed $MAX$.", + "placeholders": { + "max": { + "content": "$1", + "example": "100" + } + } + }, + "multipleInputEmails": { + "message": "1 or more emails are invalid" + }, + "inputTrimValidator": { + "message": "Input must not contain only whitespace.", + "description": "Notification to inform the user that a form's input can't contain only whitespace." + }, + "inputEmail": { + "message": "Input is not an email address." + }, + "fieldsNeedAttention": { + "message": "$COUNT$ field(s) above need your attention.", + "placeholders": { + "count": { + "content": "$1", + "example": "4" + } + } + }, + "selectPlaceholder": { + "message": "-- Select --" + }, + "multiSelectPlaceholder": { + "message": "-- Type to filter --" + }, + "multiSelectLoading": { + "message": "Retrieving options..." + }, + "multiSelectNotFound": { + "message": "No items found" + }, + "multiSelectClearAll": { + "message": "Clear all" + }, + "plusNMore": { + "message": "+ $QUANTITY$ more", + "placeholders": { + "quantity": { + "content": "$1", + "example": "5" + } + } + }, + "submenu": { + "message": "Submenu" + }, + "toggleCollapse": { + "message": "Toggle collapse", + "description": "Toggling an expand/collapse state." } } diff --git a/apps/browser/src/_locales/ca/messages.json b/apps/browser/src/_locales/ca/messages.json index 2ea5e072025..fbe9e33c65d 100644 --- a/apps/browser/src/_locales/ca/messages.json +++ b/apps/browser/src/_locales/ca/messages.json @@ -338,6 +338,9 @@ "other": { "message": "Altres" }, + "unlockMethodNeededToChangeTimeoutActionDesc": { + "message": "Set up an unlock method to change your vault timeout action." + }, "rateExtension": { "message": "Valora aquesta extensió" }, @@ -630,6 +633,12 @@ "notificationChangeSave": { "message": "Actualitza" }, + "notificationUnlockDesc": { + "message": "Unlock your Bitwarden vault to complete the auto-fill request." + }, + "notificationUnlock": { + "message": "Unlock" + }, "enableContextMenuItem": { "message": "Mostra les opcions del menú contextual" }, @@ -786,8 +795,8 @@ "ppremiumSignUpStorage": { "message": "1 GB d'emmagatzematge xifrat per als fitxers adjunts." }, - "ppremiumSignUpTwoStep": { - "message": "Opcions addicionals d'inici de sessió en dues passes com ara YubiKey, FIDO U2F i Duo." + "premiumSignUpTwoStepOptions": { + "message": "Opcions propietàries de doble factor com ara YubiKey i Duo." }, "ppremiumSignUpReports": { "message": "Requisits d'higiene de la contrasenya, salut del compte i informe d'infraccions de dades per mantenir la seguretat de la vostra caixa forta." @@ -1440,9 +1449,6 @@ "restoreItem": { "message": "Restaura l'element" }, - "restoreItemConfirmation": { - "message": "Esteu segur que voleu restaurar aquest element?" - }, "restoredItem": { "message": "Element restaurat" }, @@ -1599,6 +1605,12 @@ "biometricsNotSupportedDesc": { "message": "La biometria del navegador no és compatible amb aquest dispositiu." }, + "biometricsFailedTitle": { + "message": "Biometrics failed" + }, + "biometricsFailedDesc": { + "message": "Biometrics cannot be completed, consider using a master password or logging out. If this persists, please contact Bitwarden support." + }, "nativeMessaginPermissionErrorTitle": { "message": "No s'ha proporcionat el permís" }, @@ -2140,8 +2152,8 @@ "notificationSentDevice": { "message": "S'ha enviat una notificació al vostre dispositiu." }, - "logInInitiated": { - "message": "S'ha iniciat la sessió" + "loginInitiated": { + "message": "Login initiated" }, "exposedMasterPassword": { "message": "Contrasenya mestra exposada" @@ -2221,19 +2233,42 @@ } } }, - "region": { - "message": "Regió" + "loggingInOn": { + "message": "Logging in on" }, "opensInANewWindow": { "message": "S'obri en una finestra nova" }, + "deviceApprovalRequired": { + "message": "Device approval required. Select an approval option below:" + }, + "rememberThisDevice": { + "message": "Remember this device" + }, + "uncheckIfPublicDevice": { + "message": "Uncheck if using a public device" + }, + "approveFromYourOtherDevice": { + "message": "Approve from your other device" + }, + "requestAdminApproval": { + "message": "Request admin approval" + }, + "approveWithMasterPassword": { + "message": "Approve with master password" + }, + "ssoIdentifierRequired": { + "message": "Organization SSO identifier is required." + }, "eu": { - "message": "UE", + "message": "EU", "description": "European Union" }, - "us": { - "message": "EUA", - "description": "United States" + "usDomain": { + "message": "bitwarden.com" + }, + "euDomain": { + "message": "bitwarden.eu" }, "accessDenied": { "message": "Accés denegat. No teniu permís per veure aquesta pàgina." @@ -2243,5 +2278,133 @@ }, "display": { "message": "Mostra" + }, + "accountSuccessfullyCreated": { + "message": "Account successfully created!" + }, + "adminApprovalRequested": { + "message": "Admin approval requested" + }, + "adminApprovalRequestSentToAdmins": { + "message": "Your request has been sent to your admin." + }, + "youWillBeNotifiedOnceApproved": { + "message": "You will be notified once approved." + }, + "troubleLoggingIn": { + "message": "Trouble logging in?" + }, + "loginApproved": { + "message": "Login approved" + }, + "userEmailMissing": { + "message": "User email missing" + }, + "deviceTrusted": { + "message": "Device trusted" + }, + "inputRequired": { + "message": "L'entrada és obligatòria." + }, + "required": { + "message": "obligatori" + }, + "search": { + "message": "Cerca" + }, + "inputMinLength": { + "message": "L'entrada ha de tenir com a mínim $COUNT$ caràcters.", + "placeholders": { + "count": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxLength": { + "message": "L'entrada no ha de superar $COUNT$ caràcters de longitud.", + "placeholders": { + "count": { + "content": "$1", + "example": "20" + } + } + }, + "inputForbiddenCharacters": { + "message": "Els següents caràcters no estan permesos:\n$CHARACTERS$", + "placeholders": { + "characters": { + "content": "$1", + "example": "@, #, $, %" + } + } + }, + "inputMinValue": { + "message": "El valor d'entrada ha de ser com a mínim $MIN$.", + "placeholders": { + "min": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxValue": { + "message": "El valor d'entrada no ha de ser superior a $MAX$.", + "placeholders": { + "max": { + "content": "$1", + "example": "100" + } + } + }, + "multipleInputEmails": { + "message": "1 o més correus no són vàlids" + }, + "inputTrimValidator": { + "message": "L'entrada no ha de contenir només espais en blanc.", + "description": "Notification to inform the user that a form's input can't contain only whitespace." + }, + "inputEmail": { + "message": "L'entrada no és una adreça de correu electrònic." + }, + "fieldsNeedAttention": { + "message": "$COUNT$ camp(s) de dalt necessiten la vostra atenció.", + "placeholders": { + "count": { + "content": "$1", + "example": "4" + } + } + }, + "selectPlaceholder": { + "message": "-- Selecciona --" + }, + "multiSelectPlaceholder": { + "message": "-- Escriviu per filtrar --" + }, + "multiSelectLoading": { + "message": "Obtenint opcions..." + }, + "multiSelectNotFound": { + "message": "No s'ha trobat cap element" + }, + "multiSelectClearAll": { + "message": "Esborra-ho tot" + }, + "plusNMore": { + "message": "+ $QUANTITY$ més", + "placeholders": { + "quantity": { + "content": "$1", + "example": "5" + } + } + }, + "submenu": { + "message": "Submenú" + }, + "toggleCollapse": { + "message": "Redueix/Amplia", + "description": "Toggling an expand/collapse state." } } diff --git a/apps/browser/src/_locales/cs/messages.json b/apps/browser/src/_locales/cs/messages.json index 859a8f49a1a..a7bca0d78eb 100644 --- a/apps/browser/src/_locales/cs/messages.json +++ b/apps/browser/src/_locales/cs/messages.json @@ -338,6 +338,9 @@ "other": { "message": "Ostatní" }, + "unlockMethodNeededToChangeTimeoutActionDesc": { + "message": "Nastavte metodu odemknutí, abyste změnili časový limit Vašeho trezoru." + }, "rateExtension": { "message": "Ohodnotit rozšíření" }, @@ -630,6 +633,12 @@ "notificationChangeSave": { "message": "Aktualizovat" }, + "notificationUnlockDesc": { + "message": "Pro dokončení požadavku na automatické vyplnění odemkněte Váš trezor na Bitwardenu." + }, + "notificationUnlock": { + "message": "Odemknout" + }, "enableContextMenuItem": { "message": "Zobrazit volby v kontextovém menu" }, @@ -786,8 +795,8 @@ "ppremiumSignUpStorage": { "message": "1 GB šifrovaného úložiště pro přílohy." }, - "ppremiumSignUpTwoStep": { - "message": "Další možnosti dvoufázového přihlášení, jako je například YubiKey, FIDO U2F a Duo." + "premiumSignUpTwoStepOptions": { + "message": "Volby proprietálních dvoufázových přihlášení jako je YubiKey a Duo." }, "ppremiumSignUpReports": { "message": "Reporty o hygieně Vašich hesel, zdraví účtu a narušeních bezpečnosti." @@ -1440,9 +1449,6 @@ "restoreItem": { "message": "Obnovit položku" }, - "restoreItemConfirmation": { - "message": "Opravdu chcete tuto položku obnovit?" - }, "restoredItem": { "message": "Položka byla obnovena" }, @@ -1599,6 +1605,12 @@ "biometricsNotSupportedDesc": { "message": "Biometrie v prohlížeči není na tomto zařízení podporována." }, + "biometricsFailedTitle": { + "message": "Biometrika selhala" + }, + "biometricsFailedDesc": { + "message": "Biometriku nelze dokončit, zvažte použití hlavního hesla nebo odhlášení. Pokud to přetrvává, kontaktujte podporu Bitwardenu." + }, "nativeMessaginPermissionErrorTitle": { "message": "Oprávnění nebylo uděleno" }, @@ -2140,7 +2152,7 @@ "notificationSentDevice": { "message": "Na Vaše zařízení bylo odesláno oznámení." }, - "logInInitiated": { + "loginInitiated": { "message": "Bylo zahájeno přihlášení" }, "exposedMasterPassword": { @@ -2221,19 +2233,42 @@ } } }, - "region": { - "message": "Region" + "loggingInOn": { + "message": "Přihlašování na" }, "opensInANewWindow": { "message": "Otevře se v novém okně" }, + "deviceApprovalRequired": { + "message": "Vyžaduje se schválení zařízení. Vyberte možnost schválení níže:" + }, + "rememberThisDevice": { + "message": "Zapamatovat toto zařízení" + }, + "uncheckIfPublicDevice": { + "message": "Odškrtněte, pokud používáte veřejné zařízení" + }, + "approveFromYourOtherDevice": { + "message": "Schválit s mým dalším zařízením" + }, + "requestAdminApproval": { + "message": "Žádost o schválení správcem" + }, + "approveWithMasterPassword": { + "message": "Schválit hlavním heslem" + }, + "ssoIdentifierRequired": { + "message": "Je vyžadován SSO identifikátor organizace." + }, "eu": { "message": "EU", "description": "European Union" }, - "us": { - "message": "US", - "description": "United States" + "usDomain": { + "message": "bitwarden.com" + }, + "euDomain": { + "message": "bitwarden.eu" }, "accessDenied": { "message": "Přístup byl odepřen. Nemáte oprávnění k zobrazení této stránky." @@ -2243,5 +2278,133 @@ }, "display": { "message": "Zobrazení" + }, + "accountSuccessfullyCreated": { + "message": "Účet byl úspěšně vytvořen!" + }, + "adminApprovalRequested": { + "message": "Bylo vyžádáno schválení správcem" + }, + "adminApprovalRequestSentToAdmins": { + "message": "Váš požadavek byl odeslán Vašemu správci." + }, + "youWillBeNotifiedOnceApproved": { + "message": "Po schválení budete upozorněni." + }, + "troubleLoggingIn": { + "message": "Potíže s přihlášením?" + }, + "loginApproved": { + "message": "Přihlášení bylo schváleno" + }, + "userEmailMissing": { + "message": "Chybí e-mail uživatele" + }, + "deviceTrusted": { + "message": "Zařízení zařazeno mezi důvěryhodné" + }, + "inputRequired": { + "message": "Je vyžadován vstup." + }, + "required": { + "message": "vyžadováno" + }, + "search": { + "message": "Hledat" + }, + "inputMinLength": { + "message": "Vstup musí mít alespoň $COUNT$ znaků.", + "placeholders": { + "count": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxLength": { + "message": "Vstup nesmí být delší než $COUNT$ znaků.", + "placeholders": { + "count": { + "content": "$1", + "example": "20" + } + } + }, + "inputForbiddenCharacters": { + "message": "Následující znaky nejsou povoleny: $CHARACTERS$", + "placeholders": { + "characters": { + "content": "$1", + "example": "@, #, $, %" + } + } + }, + "inputMinValue": { + "message": "Vstupní hodnota musí být alespoň $MIN$.", + "placeholders": { + "min": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxValue": { + "message": "Vstupní hodnota nesmí přesáhnout $MAX$.", + "placeholders": { + "max": { + "content": "$1", + "example": "100" + } + } + }, + "multipleInputEmails": { + "message": "1 nebo více e-mailů jsou neplatné" + }, + "inputTrimValidator": { + "message": "Vstup nesmí obsahovat jen mezery.", + "description": "Notification to inform the user that a form's input can't contain only whitespace." + }, + "inputEmail": { + "message": "Vstup není e-mailová adresa." + }, + "fieldsNeedAttention": { + "message": "$COUNT$ polí výše vyžaduje Vaši pozornost.", + "placeholders": { + "count": { + "content": "$1", + "example": "4" + } + } + }, + "selectPlaceholder": { + "message": "-- Vybrat --" + }, + "multiSelectPlaceholder": { + "message": "-- Pište pro filtrování --" + }, + "multiSelectLoading": { + "message": "Načítání voleb..." + }, + "multiSelectNotFound": { + "message": "Nebyly nalezeny žádné položky" + }, + "multiSelectClearAll": { + "message": "Vymazat vše" + }, + "plusNMore": { + "message": "+ $QUANTITY$ dalších", + "placeholders": { + "quantity": { + "content": "$1", + "example": "5" + } + } + }, + "submenu": { + "message": "Podmenu" + }, + "toggleCollapse": { + "message": "Přepnout sbalení", + "description": "Toggling an expand/collapse state." } } diff --git a/apps/browser/src/_locales/cy/messages.json b/apps/browser/src/_locales/cy/messages.json index 6a651cad43c..043a0fffead 100644 --- a/apps/browser/src/_locales/cy/messages.json +++ b/apps/browser/src/_locales/cy/messages.json @@ -338,6 +338,9 @@ "other": { "message": "Other" }, + "unlockMethodNeededToChangeTimeoutActionDesc": { + "message": "Set up an unlock method to change your vault timeout action." + }, "rateExtension": { "message": "Rate the extension" }, @@ -630,6 +633,12 @@ "notificationChangeSave": { "message": "Diweddaru" }, + "notificationUnlockDesc": { + "message": "Unlock your Bitwarden vault to complete the auto-fill request." + }, + "notificationUnlock": { + "message": "Unlock" + }, "enableContextMenuItem": { "message": "Show context menu options" }, @@ -786,8 +795,8 @@ "ppremiumSignUpStorage": { "message": "1 GB encrypted storage for file attachments." }, - "ppremiumSignUpTwoStep": { - "message": "Additional two-step login options such as YubiKey, FIDO U2F, and Duo." + "premiumSignUpTwoStepOptions": { + "message": "Proprietary two-step login options such as YubiKey and Duo." }, "ppremiumSignUpReports": { "message": "Password hygiene, account health, and data breach reports to keep your vault safe." @@ -1440,9 +1449,6 @@ "restoreItem": { "message": "Adfer yr eitem" }, - "restoreItemConfirmation": { - "message": "Are you sure you want to restore this item?" - }, "restoredItem": { "message": "Item restored" }, @@ -1599,6 +1605,12 @@ "biometricsNotSupportedDesc": { "message": "Browser biometrics is not supported on this device." }, + "biometricsFailedTitle": { + "message": "Biometrics failed" + }, + "biometricsFailedDesc": { + "message": "Biometrics cannot be completed, consider using a master password or logging out. If this persists, please contact Bitwarden support." + }, "nativeMessaginPermissionErrorTitle": { "message": "Permission not provided" }, @@ -2140,8 +2152,8 @@ "notificationSentDevice": { "message": "A notification has been sent to your device." }, - "logInInitiated": { - "message": "Log in initiated" + "loginInitiated": { + "message": "Login initiated" }, "exposedMasterPassword": { "message": "Exposed Master Password" @@ -2221,19 +2233,42 @@ } } }, - "region": { - "message": "Region" + "loggingInOn": { + "message": "Logging in on" }, "opensInANewWindow": { "message": "Opens in a new window" }, + "deviceApprovalRequired": { + "message": "Device approval required. Select an approval option below:" + }, + "rememberThisDevice": { + "message": "Remember this device" + }, + "uncheckIfPublicDevice": { + "message": "Uncheck if using a public device" + }, + "approveFromYourOtherDevice": { + "message": "Approve from your other device" + }, + "requestAdminApproval": { + "message": "Request admin approval" + }, + "approveWithMasterPassword": { + "message": "Approve with master password" + }, + "ssoIdentifierRequired": { + "message": "Organization SSO identifier is required." + }, "eu": { - "message": "UE", + "message": "EU", "description": "European Union" }, - "us": { - "message": "UDA", - "description": "United States" + "usDomain": { + "message": "bitwarden.com" + }, + "euDomain": { + "message": "bitwarden.eu" }, "accessDenied": { "message": "Mynediad wedi ei wrthod. Does gennych chi ddim caniatâd i weld y dudalen hon." @@ -2243,5 +2278,133 @@ }, "display": { "message": "Display" + }, + "accountSuccessfullyCreated": { + "message": "Account successfully created!" + }, + "adminApprovalRequested": { + "message": "Admin approval requested" + }, + "adminApprovalRequestSentToAdmins": { + "message": "Your request has been sent to your admin." + }, + "youWillBeNotifiedOnceApproved": { + "message": "You will be notified once approved." + }, + "troubleLoggingIn": { + "message": "Trouble logging in?" + }, + "loginApproved": { + "message": "Login approved" + }, + "userEmailMissing": { + "message": "User email missing" + }, + "deviceTrusted": { + "message": "Device trusted" + }, + "inputRequired": { + "message": "Input is required." + }, + "required": { + "message": "required" + }, + "search": { + "message": "Search" + }, + "inputMinLength": { + "message": "Input must be at least $COUNT$ characters long.", + "placeholders": { + "count": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxLength": { + "message": "Input must not exceed $COUNT$ characters in length.", + "placeholders": { + "count": { + "content": "$1", + "example": "20" + } + } + }, + "inputForbiddenCharacters": { + "message": "The following characters are not allowed: $CHARACTERS$", + "placeholders": { + "characters": { + "content": "$1", + "example": "@, #, $, %" + } + } + }, + "inputMinValue": { + "message": "Input value must be at least $MIN$.", + "placeholders": { + "min": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxValue": { + "message": "Input value must not exceed $MAX$.", + "placeholders": { + "max": { + "content": "$1", + "example": "100" + } + } + }, + "multipleInputEmails": { + "message": "1 or more emails are invalid" + }, + "inputTrimValidator": { + "message": "Input must not contain only whitespace.", + "description": "Notification to inform the user that a form's input can't contain only whitespace." + }, + "inputEmail": { + "message": "Input is not an email address." + }, + "fieldsNeedAttention": { + "message": "$COUNT$ field(s) above need your attention.", + "placeholders": { + "count": { + "content": "$1", + "example": "4" + } + } + }, + "selectPlaceholder": { + "message": "-- Select --" + }, + "multiSelectPlaceholder": { + "message": "-- Type to filter --" + }, + "multiSelectLoading": { + "message": "Retrieving options..." + }, + "multiSelectNotFound": { + "message": "No items found" + }, + "multiSelectClearAll": { + "message": "Clear all" + }, + "plusNMore": { + "message": "+ $QUANTITY$ more", + "placeholders": { + "quantity": { + "content": "$1", + "example": "5" + } + } + }, + "submenu": { + "message": "Submenu" + }, + "toggleCollapse": { + "message": "Toggle collapse", + "description": "Toggling an expand/collapse state." } } diff --git a/apps/browser/src/_locales/da/messages.json b/apps/browser/src/_locales/da/messages.json index 8c3a4c6856a..d2ddc3381b5 100644 --- a/apps/browser/src/_locales/da/messages.json +++ b/apps/browser/src/_locales/da/messages.json @@ -338,6 +338,9 @@ "other": { "message": "Andre" }, + "unlockMethodNeededToChangeTimeoutActionDesc": { + "message": "Opsæt en oplåsningsmetode til at ændre bokstimeouthandlingen." + }, "rateExtension": { "message": "Bedøm udvidelsen" }, @@ -630,6 +633,12 @@ "notificationChangeSave": { "message": "Opdatér" }, + "notificationUnlockDesc": { + "message": "Oplås din Bitwarden boks for at færdiggøre autoudfyldanmodningen." + }, + "notificationUnlock": { + "message": "Oplås" + }, "enableContextMenuItem": { "message": "Vis indstillinger i kontekstmenuen" }, @@ -786,8 +795,8 @@ "ppremiumSignUpStorage": { "message": "1 GB krypteret lager til vedhæftede filer." }, - "ppremiumSignUpTwoStep": { - "message": "Yderligere to-trins login muligheder såsom YubiKey, FIDO U2F og Duo." + "premiumSignUpTwoStepOptions": { + "message": "Proprietære totrins-login muligheder, såsom YubiKey og Duo." }, "ppremiumSignUpReports": { "message": "Adgangskodehygiejne, kontosundhed og rapporter om datalæk til at holde din boks sikker." @@ -1440,9 +1449,6 @@ "restoreItem": { "message": "Gendan element" }, - "restoreItemConfirmation": { - "message": "Er du sikker på, at du vil gendanne dette element?" - }, "restoredItem": { "message": "Element gendannet" }, @@ -1599,6 +1605,12 @@ "biometricsNotSupportedDesc": { "message": "Browserbiometri understøttes ikke på denne enhed." }, + "biometricsFailedTitle": { + "message": "Biometri mislykkedes" + }, + "biometricsFailedDesc": { + "message": "Biometri kan ikke fuldføres, overvej at bruge en hovedadgangskode eller logge ud og ind igen. Fortsætter problemet, kontakt Bitwarden-supporten." + }, "nativeMessaginPermissionErrorTitle": { "message": "Tilladelse ikke givet" }, @@ -2140,7 +2152,7 @@ "notificationSentDevice": { "message": "En notifikation er sendt til din enhed." }, - "logInInitiated": { + "loginInitiated": { "message": "Indlogning påbegyndt" }, "exposedMasterPassword": { @@ -2221,19 +2233,42 @@ } } }, - "region": { - "message": "Region" + "loggingInOn": { + "message": "Logger ind på" }, "opensInANewWindow": { "message": "Åbnes i et nyt vindue" }, + "deviceApprovalRequired": { + "message": "Enhedsgodkendelse kræves. Vælg en godkendelsesmulighed nedenfor:" + }, + "rememberThisDevice": { + "message": "Husk denne enhed" + }, + "uncheckIfPublicDevice": { + "message": "Slå fra, hvis en offentlig enhed benyttes" + }, + "approveFromYourOtherDevice": { + "message": "Godkend med min anden enhed" + }, + "requestAdminApproval": { + "message": "Anmod om admin-godkendelse" + }, + "approveWithMasterPassword": { + "message": "Godkend med hovedadgangskode" + }, + "ssoIdentifierRequired": { + "message": "Organisations SSO-identifikator kræves." + }, "eu": { "message": "EU", "description": "European Union" }, - "us": { - "message": "USA", - "description": "United States" + "usDomain": { + "message": "bitwarden.com" + }, + "euDomain": { + "message": "bitwarden.eu" }, "accessDenied": { "message": "Adgang nægtet. Nødvendig tilladelse til at se siden mangler." @@ -2243,5 +2278,133 @@ }, "display": { "message": "Display" + }, + "accountSuccessfullyCreated": { + "message": "Konto oprettet!" + }, + "adminApprovalRequested": { + "message": "Admin-godkendelse udbedt" + }, + "adminApprovalRequestSentToAdmins": { + "message": "Anmodningen er sendt til din admin." + }, + "youWillBeNotifiedOnceApproved": { + "message": "Du underrettes, når godkendelse foreligger." + }, + "troubleLoggingIn": { + "message": "Problemer med at logge ind?" + }, + "loginApproved": { + "message": "Indlogning godkendt" + }, + "userEmailMissing": { + "message": "Brugers e-mail mangler" + }, + "deviceTrusted": { + "message": "Enhed betroet" + }, + "inputRequired": { + "message": "Input obligatorisk." + }, + "required": { + "message": "obligatorisk" + }, + "search": { + "message": "Søg" + }, + "inputMinLength": { + "message": "Input skal udgøre minimum $COUNT$ tegn.", + "placeholders": { + "count": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxLength": { + "message": "Input må maksimalt udgøre $COUNT$ tegn.", + "placeholders": { + "count": { + "content": "$1", + "example": "20" + } + } + }, + "inputForbiddenCharacters": { + "message": "Flg. tegn er ikke tilladt: $CHARACTERS$", + "placeholders": { + "characters": { + "content": "$1", + "example": "@, #, $, %" + } + } + }, + "inputMinValue": { + "message": "Inputværdi skal være mindst $MIN$.", + "placeholders": { + "min": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxValue": { + "message": "Inputværdi må ikke overstige $MAX$.", + "placeholders": { + "max": { + "content": "$1", + "example": "100" + } + } + }, + "multipleInputEmails": { + "message": "1 eller flere e-mails er ugyldige" + }, + "inputTrimValidator": { + "message": "Input må ikke indeholde kun mellemrum.", + "description": "Notification to inform the user that a form's input can't contain only whitespace." + }, + "inputEmail": { + "message": "Input er ikke en e-mailadresse." + }, + "fieldsNeedAttention": { + "message": "$COUNT$ felt(er) ovenfor kræver opmærksomhed.", + "placeholders": { + "count": { + "content": "$1", + "example": "4" + } + } + }, + "selectPlaceholder": { + "message": "-- Vælg --" + }, + "multiSelectPlaceholder": { + "message": "-- Skriv for at filtrere --" + }, + "multiSelectLoading": { + "message": "Henter indstillinger…" + }, + "multiSelectNotFound": { + "message": "Ingen emner fundet" + }, + "multiSelectClearAll": { + "message": "Ryd alt" + }, + "plusNMore": { + "message": "+ $QUANTITY$ flere", + "placeholders": { + "quantity": { + "content": "$1", + "example": "5" + } + } + }, + "submenu": { + "message": "Undermenu" + }, + "toggleCollapse": { + "message": "Fold sammen/ud", + "description": "Toggling an expand/collapse state." } } diff --git a/apps/browser/src/_locales/de/messages.json b/apps/browser/src/_locales/de/messages.json index 35dabd1fb2d..500329ab9ca 100644 --- a/apps/browser/src/_locales/de/messages.json +++ b/apps/browser/src/_locales/de/messages.json @@ -11,7 +11,7 @@ "description": "Extension description" }, "loginOrCreateNewAccount": { - "message": "Du musst dich anmelden oder einen neuen Account erstellen, um auf den Tresor zugreifen zu können." + "message": "Melde dich an oder erstelle ein neues Konto, um auf deinen Tresor zuzugreifen." }, "createAccount": { "message": "Konto erstellen" @@ -294,7 +294,7 @@ "message": "Eintragsinformationen" }, "username": { - "message": "Nutzername" + "message": "Benutzername" }, "password": { "message": "Passwort" @@ -338,6 +338,9 @@ "other": { "message": "Sonstige" }, + "unlockMethodNeededToChangeTimeoutActionDesc": { + "message": "Richte eine Entsperrmethode ein, um deine Aktion bei Timeout-Timeout zu ändern." + }, "rateExtension": { "message": "Erweiterung bewerten" }, @@ -357,7 +360,7 @@ "message": "Entsperren" }, "loggedInAsOn": { - "message": "Eingeloggt als $EMAIL$ auf $HOSTNAME$.", + "message": "Angemeldet als $EMAIL$ auf $HOSTNAME$.", "placeholders": { "email": { "content": "$1", @@ -409,7 +412,7 @@ "message": "1 Stunde" }, "fourHours": { - "message": "4 Stunde" + "message": "4 Stunden" }, "onLocked": { "message": "Wenn System gesperrt" @@ -630,6 +633,12 @@ "notificationChangeSave": { "message": "Aktualisieren" }, + "notificationUnlockDesc": { + "message": "Entsperre deinen Bitwarden Tresor, um die Auto-Ausfüllen-Anfrage abzuschließen." + }, + "notificationUnlock": { + "message": "Entsperren" + }, "enableContextMenuItem": { "message": "Kontextmenüoptionen anzeigen" }, @@ -786,8 +795,8 @@ "ppremiumSignUpStorage": { "message": "1 GB verschlüsselter Speicherplatz für Dateianhänge." }, - "ppremiumSignUpTwoStep": { - "message": "Zusätzliche Zweifaktor-Anmeldung über YubiKey, FIDO U2F, und Duo." + "premiumSignUpTwoStepOptions": { + "message": "Proprietäre Optionen für die Zwei-Faktor Authentifizierung wie YubiKey und Duo." }, "ppremiumSignUpReports": { "message": "Berichte über Kennworthygiene, Kontostatus und Datenschutzverletzungen, um deinen Tresor sicher zu halten." @@ -1170,7 +1179,7 @@ "message": "Reisepassnummer" }, "licenseNumber": { - "message": "Führerscheinnummer" + "message": "Lizenznummer" }, "email": { "message": "E-Mail" @@ -1440,9 +1449,6 @@ "restoreItem": { "message": "Eintrag wiederherstellen" }, - "restoreItemConfirmation": { - "message": "Soll dieser Eintrag wirklich wiederhergestellt werden?" - }, "restoredItem": { "message": "Eintrag wiederhergestellt" }, @@ -1582,7 +1588,7 @@ "message": "Desktop-Kommunikation unterbrochen" }, "nativeMessagingWrongUserDesc": { - "message": "Die Desktop-Anwendung ist in ein anderes Konto eingeloggt. Bitte stelle sicher, dass beide Anwendungen mit demselben Konto angemeldet sind." + "message": "Die Desktop-Anwendung ist in einem anderen Konto angemeldet. Bitte stelle sicher, dass beide Anwendungen mit demselben Konto angemeldet sind." }, "nativeMessagingWrongUserTitle": { "message": "Konten stimmen nicht überein" @@ -1599,6 +1605,12 @@ "biometricsNotSupportedDesc": { "message": "Biometrie im Browser wird auf diesem Gerät nicht unterstützt." }, + "biometricsFailedTitle": { + "message": "Biometrie fehlgeschlagen" + }, + "biometricsFailedDesc": { + "message": "Die biometrische Verifizierung kann nicht abgeschlossen werden. Versuch es mit dem Master-Passwort oder melde dich ab. Sollte das Problem weiterhin bestehen, kontaktiere bitte den Bitwarden-Support." + }, "nativeMessaginPermissionErrorTitle": { "message": "Berechtigung nicht erteilt" }, @@ -2140,7 +2152,7 @@ "notificationSentDevice": { "message": "Eine Benachrichtigung wurde an dein Gerät gesendet." }, - "logInInitiated": { + "loginInitiated": { "message": "Anmeldung eingeleitet" }, "exposedMasterPassword": { @@ -2221,19 +2233,42 @@ } } }, - "region": { - "message": "Region" + "loggingInOn": { + "message": "Anmelden bei" }, "opensInANewWindow": { "message": "Wird in einem neuen Fenster geöffnet" }, + "deviceApprovalRequired": { + "message": "Geräte-Genehmigung erforderlich. Wähle unten eine Genehmigungsoption aus:" + }, + "rememberThisDevice": { + "message": "Dieses Gerät merken" + }, + "uncheckIfPublicDevice": { + "message": "Deaktivieren, wenn ein öffentliches Gerät verwendet wird" + }, + "approveFromYourOtherDevice": { + "message": "Von deinem anderen Gerät genehmigen" + }, + "requestAdminApproval": { + "message": "Admin-Genehmigung anfragen" + }, + "approveWithMasterPassword": { + "message": "Mit Master-Passwort genehmigen" + }, + "ssoIdentifierRequired": { + "message": "SSO-Kennung der Organisation erforderlich." + }, "eu": { "message": "EU", "description": "European Union" }, - "us": { - "message": "US", - "description": "United States" + "usDomain": { + "message": "bitwarden.com" + }, + "euDomain": { + "message": "bitwarden.eu" }, "accessDenied": { "message": "Zugriff verweigert. Du hast keine Berechtigung, diese Seite anzuzeigen." @@ -2243,5 +2278,133 @@ }, "display": { "message": "Anzeige" + }, + "accountSuccessfullyCreated": { + "message": "Konto erfolgreich erstellt!" + }, + "adminApprovalRequested": { + "message": "Admin-Genehmigung angefragt" + }, + "adminApprovalRequestSentToAdmins": { + "message": "Deine Anfrage wurde an deinen Administrator gesendet." + }, + "youWillBeNotifiedOnceApproved": { + "message": "Nach einer Genehmigung wirst du benachrichtigt." + }, + "troubleLoggingIn": { + "message": "Probleme beim Anmelden?" + }, + "loginApproved": { + "message": "Anmeldung genehmigt" + }, + "userEmailMissing": { + "message": "E-Mail-Adresse des Benutzers fehlt" + }, + "deviceTrusted": { + "message": "Gerät wird vertraut" + }, + "inputRequired": { + "message": "Eingabe ist erforderlich." + }, + "required": { + "message": "Erforderlich" + }, + "search": { + "message": "Suche" + }, + "inputMinLength": { + "message": "Die Eingabe muss mindestens $COUNT$ Zeichen lang sein.", + "placeholders": { + "count": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxLength": { + "message": "Die Eingabe darf $COUNT$ Zeichen nicht überschreiten.", + "placeholders": { + "count": { + "content": "$1", + "example": "20" + } + } + }, + "inputForbiddenCharacters": { + "message": "Die folgenden Zeichen sind nicht erlaubt: $CHARACTERS$", + "placeholders": { + "characters": { + "content": "$1", + "example": "@, #, $, %" + } + } + }, + "inputMinValue": { + "message": "Der Eingabewert muss mindestens $MIN$ betragen.", + "placeholders": { + "min": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxValue": { + "message": "Der Eingabewert darf $MAX$ nicht überschreiten.", + "placeholders": { + "max": { + "content": "$1", + "example": "100" + } + } + }, + "multipleInputEmails": { + "message": "Mindestens 1 E-Mail-Adresse ist ungültig" + }, + "inputTrimValidator": { + "message": "Die Eingabe darf nicht nur Leerzeichen enthalten.", + "description": "Notification to inform the user that a form's input can't contain only whitespace." + }, + "inputEmail": { + "message": "Die Eingabe ist keine E-Mail-Adresse." + }, + "fieldsNeedAttention": { + "message": "$COUNT$ Feld(er) oben benötigen deine Aufmerksamkeit.", + "placeholders": { + "count": { + "content": "$1", + "example": "4" + } + } + }, + "selectPlaceholder": { + "message": "-- Auswählen --" + }, + "multiSelectPlaceholder": { + "message": "-- Schreiben zum Filtern --" + }, + "multiSelectLoading": { + "message": "Optionen werden abgerufen..." + }, + "multiSelectNotFound": { + "message": "Keine Einträge gefunden" + }, + "multiSelectClearAll": { + "message": "Alles löschen" + }, + "plusNMore": { + "message": "+ $QUANTITY$ mehr", + "placeholders": { + "quantity": { + "content": "$1", + "example": "5" + } + } + }, + "submenu": { + "message": "Untermenü" + }, + "toggleCollapse": { + "message": "Ein-/ausklappen", + "description": "Toggling an expand/collapse state." } } diff --git a/apps/browser/src/_locales/el/messages.json b/apps/browser/src/_locales/el/messages.json index 3279937f18f..e168fd93576 100644 --- a/apps/browser/src/_locales/el/messages.json +++ b/apps/browser/src/_locales/el/messages.json @@ -338,6 +338,9 @@ "other": { "message": "Άλλες" }, + "unlockMethodNeededToChangeTimeoutActionDesc": { + "message": "Set up an unlock method to change your vault timeout action." + }, "rateExtension": { "message": "Βαθμολογήστε την επέκταση" }, @@ -630,6 +633,12 @@ "notificationChangeSave": { "message": "Ναι, Ενημέρωση Τώρα" }, + "notificationUnlockDesc": { + "message": "Ξεκλειδώστε το θησαυ/κιο Bitwarden σας για να ολοκληρώσετε το αίτημα αυτόματης πλήρωσης." + }, + "notificationUnlock": { + "message": "Ξεκλείδωμα" + }, "enableContextMenuItem": { "message": "Εμφάνιση επιλογών μενού περιβάλλοντος" }, @@ -786,8 +795,8 @@ "ppremiumSignUpStorage": { "message": "1 GB κρυπτογραφημένο αποθηκευτικό χώρο για συνημμένα αρχεία." }, - "ppremiumSignUpTwoStep": { - "message": "Πρόσθετες επιλογές σύνδεσης δύο βημάτων, όπως το YubiKey, το FIDO U2F και το Duo." + "premiumSignUpTwoStepOptions": { + "message": "Proprietary two-step login options such as YubiKey and Duo." }, "ppremiumSignUpReports": { "message": "Ασφάλεια κωδικών, υγεία λογαριασμού και αναφορές παραβίασης δεδομένων για να διατηρήσετε ασφαλές το vault σας." @@ -1440,9 +1449,6 @@ "restoreItem": { "message": "Ανάκτηση Στοιχείου" }, - "restoreItemConfirmation": { - "message": "Είστε βέβαιοι ότι θέλετε να ανακτήσετε αυτό το στοιχείο;" - }, "restoredItem": { "message": "Στοιχείο που έχει Ανακτηθεί" }, @@ -1599,6 +1605,12 @@ "biometricsNotSupportedDesc": { "message": "Τα βιομετρικά στοιχεία του προγράμματος περιήγησης δεν υποστηρίζονται σε αυτήν τη συσκευή." }, + "biometricsFailedTitle": { + "message": "Biometrics failed" + }, + "biometricsFailedDesc": { + "message": "Biometrics cannot be completed, consider using a master password or logging out. If this persists, please contact Bitwarden support." + }, "nativeMessaginPermissionErrorTitle": { "message": "Δεν Έχει Χορηγηθεί Άδεια" }, @@ -2140,8 +2152,8 @@ "notificationSentDevice": { "message": "Μια ειδοποίηση έχει σταλεί στη συσκευή σας." }, - "logInInitiated": { - "message": "Η σύνδεση ξεκίνησε" + "loginInitiated": { + "message": "Login initiated" }, "exposedMasterPassword": { "message": "Εκτεθειμένος Κύριος Κωδικός Πρόσβασης" @@ -2221,19 +2233,42 @@ } } }, - "region": { - "message": "Region" + "loggingInOn": { + "message": "Σύνδεση ως" }, "opensInANewWindow": { "message": "Ανοίγει σε νέο παράθυρο" }, + "deviceApprovalRequired": { + "message": "Device approval required. Select an approval option below:" + }, + "rememberThisDevice": { + "message": "Remember this device" + }, + "uncheckIfPublicDevice": { + "message": "Uncheck if using a public device" + }, + "approveFromYourOtherDevice": { + "message": "Approve from your other device" + }, + "requestAdminApproval": { + "message": "Request admin approval" + }, + "approveWithMasterPassword": { + "message": "Approve with master password" + }, + "ssoIdentifierRequired": { + "message": "Organization SSO identifier is required." + }, "eu": { "message": "EU", "description": "European Union" }, - "us": { - "message": "US", - "description": "United States" + "usDomain": { + "message": "bitwarden.com" + }, + "euDomain": { + "message": "bitwarden.eu" }, "accessDenied": { "message": "Δεν επιτρέπεται η πρόσβαση. Δεν έχετε άδεια για να δείτε αυτή τη σελίδα." @@ -2243,5 +2278,133 @@ }, "display": { "message": "Display" + }, + "accountSuccessfullyCreated": { + "message": "Account successfully created!" + }, + "adminApprovalRequested": { + "message": "Admin approval requested" + }, + "adminApprovalRequestSentToAdmins": { + "message": "Your request has been sent to your admin." + }, + "youWillBeNotifiedOnceApproved": { + "message": "You will be notified once approved." + }, + "troubleLoggingIn": { + "message": "Trouble logging in?" + }, + "loginApproved": { + "message": "Login approved" + }, + "userEmailMissing": { + "message": "User email missing" + }, + "deviceTrusted": { + "message": "Device trusted" + }, + "inputRequired": { + "message": "Input is required." + }, + "required": { + "message": "required" + }, + "search": { + "message": "Search" + }, + "inputMinLength": { + "message": "Input must be at least $COUNT$ characters long.", + "placeholders": { + "count": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxLength": { + "message": "Input must not exceed $COUNT$ characters in length.", + "placeholders": { + "count": { + "content": "$1", + "example": "20" + } + } + }, + "inputForbiddenCharacters": { + "message": "The following characters are not allowed: $CHARACTERS$", + "placeholders": { + "characters": { + "content": "$1", + "example": "@, #, $, %" + } + } + }, + "inputMinValue": { + "message": "Input value must be at least $MIN$.", + "placeholders": { + "min": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxValue": { + "message": "Input value must not exceed $MAX$.", + "placeholders": { + "max": { + "content": "$1", + "example": "100" + } + } + }, + "multipleInputEmails": { + "message": "1 or more emails are invalid" + }, + "inputTrimValidator": { + "message": "Input must not contain only whitespace.", + "description": "Notification to inform the user that a form's input can't contain only whitespace." + }, + "inputEmail": { + "message": "Input is not an email address." + }, + "fieldsNeedAttention": { + "message": "$COUNT$ field(s) above need your attention.", + "placeholders": { + "count": { + "content": "$1", + "example": "4" + } + } + }, + "selectPlaceholder": { + "message": "-- Select --" + }, + "multiSelectPlaceholder": { + "message": "-- Type to filter --" + }, + "multiSelectLoading": { + "message": "Retrieving options..." + }, + "multiSelectNotFound": { + "message": "No items found" + }, + "multiSelectClearAll": { + "message": "Clear all" + }, + "plusNMore": { + "message": "+ $QUANTITY$ more", + "placeholders": { + "quantity": { + "content": "$1", + "example": "5" + } + } + }, + "submenu": { + "message": "Submenu" + }, + "toggleCollapse": { + "message": "Toggle collapse", + "description": "Toggling an expand/collapse state." } } diff --git a/apps/browser/src/_locales/en/messages.json b/apps/browser/src/_locales/en/messages.json index 9e46b55f19e..6aea5876eac 100644 --- a/apps/browser/src/_locales/en/messages.json +++ b/apps/browser/src/_locales/en/messages.json @@ -338,6 +338,9 @@ "other": { "message": "Other" }, + "unlockMethodNeededToChangeTimeoutActionDesc": { + "message": "Set up an unlock method to change your vault timeout action." + }, "rateExtension": { "message": "Rate the extension" }, @@ -630,6 +633,12 @@ "notificationChangeSave": { "message": "Update" }, + "notificationUnlockDesc": { + "message": "Unlock your Bitwarden vault to complete the auto-fill request." + }, + "notificationUnlock": { + "message": "Unlock" + }, "enableContextMenuItem": { "message": "Show context menu options" }, @@ -786,8 +795,8 @@ "ppremiumSignUpStorage": { "message": "1 GB encrypted storage for file attachments." }, - "ppremiumSignUpTwoStep": { - "message": "Additional two-step login options such as YubiKey, FIDO U2F, and Duo." + "premiumSignUpTwoStepOptions": { + "message": "Proprietary two-step login options such as YubiKey and Duo." }, "ppremiumSignUpReports": { "message": "Password hygiene, account health, and data breach reports to keep your vault safe." @@ -1440,9 +1449,6 @@ "restoreItem": { "message": "Restore item" }, - "restoreItemConfirmation": { - "message": "Are you sure you want to restore this item?" - }, "restoredItem": { "message": "Item restored" }, @@ -1599,6 +1605,12 @@ "biometricsNotSupportedDesc": { "message": "Browser biometrics is not supported on this device." }, + "biometricsFailedTitle": { + "message": "Biometrics failed" + }, + "biometricsFailedDesc": { + "message": "Biometrics cannot be completed, consider using a master password or logging out. If this persists, please contact Bitwarden support." + }, "nativeMessaginPermissionErrorTitle": { "message": "Permission not provided" }, @@ -2140,8 +2152,8 @@ "notificationSentDevice": { "message": "A notification has been sent to your device." }, - "logInInitiated": { - "message": "Log in initiated" + "loginInitiated": { + "message": "Login initiated" }, "exposedMasterPassword": { "message": "Exposed Master Password" @@ -2221,19 +2233,42 @@ } } }, - "region": { - "message": "Region" + "loggingInOn": { + "message": "Logging in on" }, "opensInANewWindow": { "message": "Opens in a new window" }, + "deviceApprovalRequired": { + "message": "Device approval required. Select an approval option below:" + }, + "rememberThisDevice": { + "message": "Remember this device" + }, + "uncheckIfPublicDevice": { + "message": "Uncheck if using a public device" + }, + "approveFromYourOtherDevice": { + "message": "Approve from your other device" + }, + "requestAdminApproval": { + "message": "Request admin approval" + }, + "approveWithMasterPassword": { + "message": "Approve with master password" + }, + "ssoIdentifierRequired": { + "message": "Organization SSO identifier is required." + }, "eu": { "message": "EU", "description": "European Union" }, - "us": { - "message": "US", - "description": "United States" + "usDomain": { + "message": "bitwarden.com" + }, + "euDomain": { + "message": "bitwarden.eu" }, "accessDenied": { "message": "Access denied. You do not have permission to view this page." @@ -2243,5 +2278,133 @@ }, "display": { "message": "Display" + }, + "accountSuccessfullyCreated": { + "message": "Account successfully created!" + }, + "adminApprovalRequested": { + "message": "Admin approval requested" + }, + "adminApprovalRequestSentToAdmins": { + "message": "Your request has been sent to your admin." + }, + "youWillBeNotifiedOnceApproved": { + "message": "You will be notified once approved." + }, + "troubleLoggingIn": { + "message": "Trouble logging in?" + }, + "loginApproved": { + "message": "Login approved" + }, + "userEmailMissing": { + "message": "User email missing" + }, + "deviceTrusted": { + "message": "Device trusted" + }, + "inputRequired": { + "message": "Input is required." + }, + "required": { + "message": "required" + }, + "search": { + "message": "Search" + }, + "inputMinLength": { + "message": "Input must be at least $COUNT$ characters long.", + "placeholders": { + "count": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxLength": { + "message": "Input must not exceed $COUNT$ characters in length.", + "placeholders": { + "count": { + "content": "$1", + "example": "20" + } + } + }, + "inputForbiddenCharacters": { + "message": "The following characters are not allowed: $CHARACTERS$", + "placeholders": { + "characters": { + "content": "$1", + "example": "@, #, $, %" + } + } + }, + "inputMinValue": { + "message": "Input value must be at least $MIN$.", + "placeholders": { + "min": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxValue": { + "message": "Input value must not exceed $MAX$.", + "placeholders": { + "max": { + "content": "$1", + "example": "100" + } + } + }, + "multipleInputEmails": { + "message": "1 or more emails are invalid" + }, + "inputTrimValidator": { + "message": "Input must not contain only whitespace.", + "description": "Notification to inform the user that a form's input can't contain only whitespace." + }, + "inputEmail": { + "message": "Input is not an email address." + }, + "fieldsNeedAttention": { + "message": "$COUNT$ field(s) above need your attention.", + "placeholders": { + "count": { + "content": "$1", + "example": "4" + } + } + }, + "selectPlaceholder": { + "message": "-- Select --" + }, + "multiSelectPlaceholder": { + "message": "-- Type to filter --" + }, + "multiSelectLoading": { + "message": "Retrieving options..." + }, + "multiSelectNotFound": { + "message": "No items found" + }, + "multiSelectClearAll": { + "message": "Clear all" + }, + "plusNMore": { + "message": "+ $QUANTITY$ more", + "placeholders": { + "quantity": { + "content": "$1", + "example": "5" + } + } + }, + "submenu": { + "message": "Submenu" + }, + "toggleCollapse": { + "message": "Toggle collapse", + "description": "Toggling an expand/collapse state." } } diff --git a/apps/browser/src/_locales/en_GB/messages.json b/apps/browser/src/_locales/en_GB/messages.json index 4efd5dafa50..1632b31ee03 100644 --- a/apps/browser/src/_locales/en_GB/messages.json +++ b/apps/browser/src/_locales/en_GB/messages.json @@ -338,6 +338,9 @@ "other": { "message": "Other" }, + "unlockMethodNeededToChangeTimeoutActionDesc": { + "message": "Set up an unlock method to change your vault timeout action." + }, "rateExtension": { "message": "Rate the extension" }, @@ -630,6 +633,12 @@ "notificationChangeSave": { "message": "Update" }, + "notificationUnlockDesc": { + "message": "Unlock your Bitwarden vault to complete the auto-fill request." + }, + "notificationUnlock": { + "message": "Unlock" + }, "enableContextMenuItem": { "message": "Show context menu options" }, @@ -786,8 +795,8 @@ "ppremiumSignUpStorage": { "message": "1 GB encrypted storage for file attachments." }, - "ppremiumSignUpTwoStep": { - "message": "Additional two-step login options such as YubiKey, FIDO U2F, and Duo." + "premiumSignUpTwoStepOptions": { + "message": "Proprietary two-step login options such as YubiKey and Duo." }, "ppremiumSignUpReports": { "message": "Password hygiene, account health, and data breach reports to keep your vault safe." @@ -1440,9 +1449,6 @@ "restoreItem": { "message": "Restore item" }, - "restoreItemConfirmation": { - "message": "Are you sure you want to restore this item?" - }, "restoredItem": { "message": "Item restored" }, @@ -1599,6 +1605,12 @@ "biometricsNotSupportedDesc": { "message": "Browser biometrics is not supported on this device." }, + "biometricsFailedTitle": { + "message": "Biometrics failed" + }, + "biometricsFailedDesc": { + "message": "Biometrics cannot be completed, consider using a master password or logging out. If this persists, please contact Bitwarden support." + }, "nativeMessaginPermissionErrorTitle": { "message": "Permission not provided" }, @@ -2140,8 +2152,8 @@ "notificationSentDevice": { "message": "A notification has been sent to your device." }, - "logInInitiated": { - "message": "Log in initiated" + "loginInitiated": { + "message": "Login initiated" }, "exposedMasterPassword": { "message": "Exposed Master Password" @@ -2221,19 +2233,42 @@ } } }, - "region": { - "message": "Region" + "loggingInOn": { + "message": "Logging in on" }, "opensInANewWindow": { "message": "Opens in a new window" }, + "deviceApprovalRequired": { + "message": "Device approval required. Select an approval option below:" + }, + "rememberThisDevice": { + "message": "Remember this device" + }, + "uncheckIfPublicDevice": { + "message": "Uncheck if using a public device" + }, + "approveFromYourOtherDevice": { + "message": "Approve from your other device" + }, + "requestAdminApproval": { + "message": "Request admin approval" + }, + "approveWithMasterPassword": { + "message": "Approve with master password" + }, + "ssoIdentifierRequired": { + "message": "Organisation SSO identifier is required." + }, "eu": { "message": "EU", "description": "European Union" }, - "us": { - "message": "US", - "description": "United States" + "usDomain": { + "message": "bitwarden.com" + }, + "euDomain": { + "message": "bitwarden.eu" }, "accessDenied": { "message": "Access denied. You do not have permission to view this page." @@ -2243,5 +2278,133 @@ }, "display": { "message": "Display" + }, + "accountSuccessfullyCreated": { + "message": "Account successfully created!" + }, + "adminApprovalRequested": { + "message": "Admin approval requested" + }, + "adminApprovalRequestSentToAdmins": { + "message": "Your request has been sent to your admin." + }, + "youWillBeNotifiedOnceApproved": { + "message": "You will be notified once approved." + }, + "troubleLoggingIn": { + "message": "Trouble logging in?" + }, + "loginApproved": { + "message": "Login approved" + }, + "userEmailMissing": { + "message": "User email missing" + }, + "deviceTrusted": { + "message": "Device trusted" + }, + "inputRequired": { + "message": "Input is required." + }, + "required": { + "message": "required" + }, + "search": { + "message": "Search" + }, + "inputMinLength": { + "message": "Input must be at least $COUNT$ characters long.", + "placeholders": { + "count": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxLength": { + "message": "Input must not exceed $COUNT$ characters in length.", + "placeholders": { + "count": { + "content": "$1", + "example": "20" + } + } + }, + "inputForbiddenCharacters": { + "message": "The following characters are not allowed: $CHARACTERS$", + "placeholders": { + "characters": { + "content": "$1", + "example": "@, #, $, %" + } + } + }, + "inputMinValue": { + "message": "Input value must be at least $MIN$.", + "placeholders": { + "min": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxValue": { + "message": "Input value must not exceed $MAX$.", + "placeholders": { + "max": { + "content": "$1", + "example": "100" + } + } + }, + "multipleInputEmails": { + "message": "1 or more emails are invalid" + }, + "inputTrimValidator": { + "message": "Input must not contain only whitespace.", + "description": "Notification to inform the user that a form's input can't contain only whitespace." + }, + "inputEmail": { + "message": "Input is not an email address." + }, + "fieldsNeedAttention": { + "message": "$COUNT$ field(s) above need your attention.", + "placeholders": { + "count": { + "content": "$1", + "example": "4" + } + } + }, + "selectPlaceholder": { + "message": "-- Select --" + }, + "multiSelectPlaceholder": { + "message": "-- Type to filter --" + }, + "multiSelectLoading": { + "message": "Retrieving options..." + }, + "multiSelectNotFound": { + "message": "No items found" + }, + "multiSelectClearAll": { + "message": "Clear all" + }, + "plusNMore": { + "message": "+ $QUANTITY$ more", + "placeholders": { + "quantity": { + "content": "$1", + "example": "5" + } + } + }, + "submenu": { + "message": "Submenu" + }, + "toggleCollapse": { + "message": "Toggle collapse", + "description": "Toggling an expand/collapse state." } } diff --git a/apps/browser/src/_locales/en_IN/messages.json b/apps/browser/src/_locales/en_IN/messages.json index 7b960102d9f..b9f2a3784c3 100644 --- a/apps/browser/src/_locales/en_IN/messages.json +++ b/apps/browser/src/_locales/en_IN/messages.json @@ -338,6 +338,9 @@ "other": { "message": "Other" }, + "unlockMethodNeededToChangeTimeoutActionDesc": { + "message": "Set up an unlock method to change your vault timeout action." + }, "rateExtension": { "message": "Rate the extension" }, @@ -630,6 +633,12 @@ "notificationChangeSave": { "message": "Yes, update now" }, + "notificationUnlockDesc": { + "message": "Unlock your Bitwarden vault to complete the auto-fill request." + }, + "notificationUnlock": { + "message": "Unlock" + }, "enableContextMenuItem": { "message": "Show context menu options" }, @@ -786,8 +795,8 @@ "ppremiumSignUpStorage": { "message": "1 GB encrypted storage for file attachments." }, - "ppremiumSignUpTwoStep": { - "message": "Additional two-step login options such as YubiKey, FIDO U2F, and Duo." + "premiumSignUpTwoStepOptions": { + "message": "Proprietary two-step login options such as YubiKey and Duo." }, "ppremiumSignUpReports": { "message": "Password hygiene, account health, and data breach reports to keep your vault safe." @@ -1440,9 +1449,6 @@ "restoreItem": { "message": "Restore item" }, - "restoreItemConfirmation": { - "message": "Are you sure you want to restore this item?" - }, "restoredItem": { "message": "Restored item" }, @@ -1599,6 +1605,12 @@ "biometricsNotSupportedDesc": { "message": "Browser biometrics is not supported on this device." }, + "biometricsFailedTitle": { + "message": "Biometrics failed" + }, + "biometricsFailedDesc": { + "message": "Biometrics cannot be completed, consider using a master password or logging out. If this persists, please contact Bitwarden support." + }, "nativeMessaginPermissionErrorTitle": { "message": "Permission not provided" }, @@ -2140,8 +2152,8 @@ "notificationSentDevice": { "message": "A notification has been sent to your device." }, - "logInInitiated": { - "message": "Log in initiated" + "loginInitiated": { + "message": "Login initiated" }, "exposedMasterPassword": { "message": "Exposed Master Password" @@ -2221,19 +2233,42 @@ } } }, - "region": { - "message": "Region" + "loggingInOn": { + "message": "Logging in on" }, "opensInANewWindow": { "message": "Opens in a new window" }, + "deviceApprovalRequired": { + "message": "Device approval required. Select an approval option below:" + }, + "rememberThisDevice": { + "message": "Remember this device" + }, + "uncheckIfPublicDevice": { + "message": "Uncheck if using a public device" + }, + "approveFromYourOtherDevice": { + "message": "Approve from your other device" + }, + "requestAdminApproval": { + "message": "Request admin approval" + }, + "approveWithMasterPassword": { + "message": "Approve with master password" + }, + "ssoIdentifierRequired": { + "message": "Organization SSO identifier is required." + }, "eu": { "message": "EU", "description": "European Union" }, - "us": { - "message": "US", - "description": "United States" + "usDomain": { + "message": "bitwarden.com" + }, + "euDomain": { + "message": "bitwarden.eu" }, "accessDenied": { "message": "Access denied. You do not have permission to view this page." @@ -2243,5 +2278,133 @@ }, "display": { "message": "Display" + }, + "accountSuccessfullyCreated": { + "message": "Account successfully created!" + }, + "adminApprovalRequested": { + "message": "Admin approval requested" + }, + "adminApprovalRequestSentToAdmins": { + "message": "Your request has been sent to your admin." + }, + "youWillBeNotifiedOnceApproved": { + "message": "You will be notified once approved." + }, + "troubleLoggingIn": { + "message": "Trouble logging in?" + }, + "loginApproved": { + "message": "Login approved" + }, + "userEmailMissing": { + "message": "User email missing" + }, + "deviceTrusted": { + "message": "Device trusted" + }, + "inputRequired": { + "message": "Input is required." + }, + "required": { + "message": "required" + }, + "search": { + "message": "Search" + }, + "inputMinLength": { + "message": "Input must be at least $COUNT$ characters long.", + "placeholders": { + "count": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxLength": { + "message": "Input must not exceed $COUNT$ characters in length.", + "placeholders": { + "count": { + "content": "$1", + "example": "20" + } + } + }, + "inputForbiddenCharacters": { + "message": "The following characters are not allowed: $CHARACTERS$", + "placeholders": { + "characters": { + "content": "$1", + "example": "@, #, $, %" + } + } + }, + "inputMinValue": { + "message": "Input value must be at least $MIN$.", + "placeholders": { + "min": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxValue": { + "message": "Input value must not exceed $MAX$.", + "placeholders": { + "max": { + "content": "$1", + "example": "100" + } + } + }, + "multipleInputEmails": { + "message": "1 or more emails are invalid" + }, + "inputTrimValidator": { + "message": "Input must not contain only whitespace.", + "description": "Notification to inform the user that a form's input can't contain only whitespace." + }, + "inputEmail": { + "message": "Input is not an email address." + }, + "fieldsNeedAttention": { + "message": "$COUNT$ field(s) above need your attention.", + "placeholders": { + "count": { + "content": "$1", + "example": "4" + } + } + }, + "selectPlaceholder": { + "message": "-- Select --" + }, + "multiSelectPlaceholder": { + "message": "-- Type to filter --" + }, + "multiSelectLoading": { + "message": "Retrieving options..." + }, + "multiSelectNotFound": { + "message": "No items found" + }, + "multiSelectClearAll": { + "message": "Clear all" + }, + "plusNMore": { + "message": "+ $QUANTITY$ more", + "placeholders": { + "quantity": { + "content": "$1", + "example": "5" + } + } + }, + "submenu": { + "message": "Submenu" + }, + "toggleCollapse": { + "message": "Toggle collapse", + "description": "Toggling an expand/collapse state." } } diff --git a/apps/browser/src/_locales/es/messages.json b/apps/browser/src/_locales/es/messages.json index 6adc180c988..e43102b483e 100644 --- a/apps/browser/src/_locales/es/messages.json +++ b/apps/browser/src/_locales/es/messages.json @@ -338,6 +338,9 @@ "other": { "message": "Otros" }, + "unlockMethodNeededToChangeTimeoutActionDesc": { + "message": "Set up an unlock method to change your vault timeout action." + }, "rateExtension": { "message": "Valora la extensión" }, @@ -630,6 +633,12 @@ "notificationChangeSave": { "message": "Actualizar" }, + "notificationUnlockDesc": { + "message": "Unlock your Bitwarden vault to complete the auto-fill request." + }, + "notificationUnlock": { + "message": "Unlock" + }, "enableContextMenuItem": { "message": "Mostrar las opciones de menú contextuales" }, @@ -786,8 +795,8 @@ "ppremiumSignUpStorage": { "message": "1 GB de espacio cifrado en disco para adjuntos." }, - "ppremiumSignUpTwoStep": { - "message": "Métodos de autenticación en dos pasos adicionales como YubiKey, FIDO U2F y Duo." + "premiumSignUpTwoStepOptions": { + "message": "Proprietary two-step login options such as YubiKey and Duo." }, "ppremiumSignUpReports": { "message": "Higiene de contraseña, salud de la cuenta e informes de violaciones de datos para mantener su caja fuerte segura." @@ -1440,9 +1449,6 @@ "restoreItem": { "message": "Restaurar elemento" }, - "restoreItemConfirmation": { - "message": "¿Estás seguro de que quieres restaurar este elemento?" - }, "restoredItem": { "message": "Elemento restaurado" }, @@ -1599,6 +1605,12 @@ "biometricsNotSupportedDesc": { "message": "La biometría del navegador no es compatible con este dispositivo." }, + "biometricsFailedTitle": { + "message": "Biometrics failed" + }, + "biometricsFailedDesc": { + "message": "Biometrics cannot be completed, consider using a master password or logging out. If this persists, please contact Bitwarden support." + }, "nativeMessaginPermissionErrorTitle": { "message": "Permiso no proporcionado" }, @@ -2140,8 +2152,8 @@ "notificationSentDevice": { "message": "Se ha enviado una notificación a tu dispositivo." }, - "logInInitiated": { - "message": "Inicio de sesión en proceso" + "loginInitiated": { + "message": "Login initiated" }, "exposedMasterPassword": { "message": "Contraseña maestra comprometida" @@ -2221,19 +2233,42 @@ } } }, - "region": { - "message": "Región" + "loggingInOn": { + "message": "Logging in on" }, "opensInANewWindow": { "message": "Abre en una nueva ventana" }, + "deviceApprovalRequired": { + "message": "Device approval required. Select an approval option below:" + }, + "rememberThisDevice": { + "message": "Remember this device" + }, + "uncheckIfPublicDevice": { + "message": "Uncheck if using a public device" + }, + "approveFromYourOtherDevice": { + "message": "Approve from your other device" + }, + "requestAdminApproval": { + "message": "Request admin approval" + }, + "approveWithMasterPassword": { + "message": "Approve with master password" + }, + "ssoIdentifierRequired": { + "message": "Organization SSO identifier is required." + }, "eu": { - "message": "Unión Europea", + "message": "EU", "description": "European Union" }, - "us": { - "message": "EE.UU.", - "description": "United States" + "usDomain": { + "message": "bitwarden.com" + }, + "euDomain": { + "message": "bitwarden.eu" }, "accessDenied": { "message": "Acceso denegado. No tiene permiso para ver esta página." @@ -2243,5 +2278,133 @@ }, "display": { "message": "Display" + }, + "accountSuccessfullyCreated": { + "message": "Account successfully created!" + }, + "adminApprovalRequested": { + "message": "Admin approval requested" + }, + "adminApprovalRequestSentToAdmins": { + "message": "Your request has been sent to your admin." + }, + "youWillBeNotifiedOnceApproved": { + "message": "You will be notified once approved." + }, + "troubleLoggingIn": { + "message": "Trouble logging in?" + }, + "loginApproved": { + "message": "Login approved" + }, + "userEmailMissing": { + "message": "User email missing" + }, + "deviceTrusted": { + "message": "Device trusted" + }, + "inputRequired": { + "message": "Input is required." + }, + "required": { + "message": "required" + }, + "search": { + "message": "Search" + }, + "inputMinLength": { + "message": "Input must be at least $COUNT$ characters long.", + "placeholders": { + "count": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxLength": { + "message": "Input must not exceed $COUNT$ characters in length.", + "placeholders": { + "count": { + "content": "$1", + "example": "20" + } + } + }, + "inputForbiddenCharacters": { + "message": "The following characters are not allowed: $CHARACTERS$", + "placeholders": { + "characters": { + "content": "$1", + "example": "@, #, $, %" + } + } + }, + "inputMinValue": { + "message": "Input value must be at least $MIN$.", + "placeholders": { + "min": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxValue": { + "message": "Input value must not exceed $MAX$.", + "placeholders": { + "max": { + "content": "$1", + "example": "100" + } + } + }, + "multipleInputEmails": { + "message": "1 or more emails are invalid" + }, + "inputTrimValidator": { + "message": "Input must not contain only whitespace.", + "description": "Notification to inform the user that a form's input can't contain only whitespace." + }, + "inputEmail": { + "message": "Input is not an email address." + }, + "fieldsNeedAttention": { + "message": "$COUNT$ field(s) above need your attention.", + "placeholders": { + "count": { + "content": "$1", + "example": "4" + } + } + }, + "selectPlaceholder": { + "message": "-- Select --" + }, + "multiSelectPlaceholder": { + "message": "-- Type to filter --" + }, + "multiSelectLoading": { + "message": "Retrieving options..." + }, + "multiSelectNotFound": { + "message": "No items found" + }, + "multiSelectClearAll": { + "message": "Clear all" + }, + "plusNMore": { + "message": "+ $QUANTITY$ more", + "placeholders": { + "quantity": { + "content": "$1", + "example": "5" + } + } + }, + "submenu": { + "message": "Submenu" + }, + "toggleCollapse": { + "message": "Toggle collapse", + "description": "Toggling an expand/collapse state." } } diff --git a/apps/browser/src/_locales/et/messages.json b/apps/browser/src/_locales/et/messages.json index 254c1cefb76..5fc83e82676 100644 --- a/apps/browser/src/_locales/et/messages.json +++ b/apps/browser/src/_locales/et/messages.json @@ -338,6 +338,9 @@ "other": { "message": "Muu" }, + "unlockMethodNeededToChangeTimeoutActionDesc": { + "message": "Hoidla ajalõpu tegevuse muutmiseks vali esmalt lahtilukustamise meetod." + }, "rateExtension": { "message": "Hinda seda laiendust" }, @@ -630,6 +633,12 @@ "notificationChangeSave": { "message": "Jah, uuenda" }, + "notificationUnlockDesc": { + "message": "Ava Bitwardeni hoidla, et automaattäide lõpuni viia." + }, + "notificationUnlock": { + "message": "Lukusta lahti" + }, "enableContextMenuItem": { "message": "Kuva parema kliki menüü valikud" }, @@ -786,8 +795,8 @@ "ppremiumSignUpStorage": { "message": "1 GB ulatuses krüpteeritud salvestusruum." }, - "ppremiumSignUpTwoStep": { - "message": "Lisavõimalused kaheastmeliseks kinnitamiseks, näiteks YubiKey, FIDO U2F ja Duo." + "premiumSignUpTwoStepOptions": { + "message": "Proprietary two-step login options such as YubiKey and Duo." }, "ppremiumSignUpReports": { "message": "Parooli hügieen, konto seisukord ja andmelekete raportid aitavad hoidlat turvalisena hoida." @@ -1440,9 +1449,6 @@ "restoreItem": { "message": "Taasta kirje" }, - "restoreItemConfirmation": { - "message": "Oled kindel, et soovid selle kirje taastada?" - }, "restoredItem": { "message": "Kirje on taastatud" }, @@ -1599,6 +1605,12 @@ "biometricsNotSupportedDesc": { "message": "Brauseri biomeetria ei ole selles seadmes toetatud" }, + "biometricsFailedTitle": { + "message": "Biomeetria nurjus" + }, + "biometricsFailedDesc": { + "message": "Biomeetriaga kinnitamine ebaõnnestus. Kasuta ülemparooli või logi välja. Kui probleem püsib, võta ühendust Bitwardeni toega." + }, "nativeMessaginPermissionErrorTitle": { "message": "Luba puudub" }, @@ -2140,7 +2152,7 @@ "notificationSentDevice": { "message": "Sinu seadmesse saadeti teavitus." }, - "logInInitiated": { + "loginInitiated": { "message": "Sisselogimine on käivitatud" }, "exposedMasterPassword": { @@ -2221,19 +2233,42 @@ } } }, - "region": { - "message": "Piirkond" + "loggingInOn": { + "message": "Sisselogimas kui" }, "opensInANewWindow": { "message": "Avaneb uues aknas" }, + "deviceApprovalRequired": { + "message": "Nõutav on seadme kinnitamine. Vali kinnitamise meetod alt:" + }, + "rememberThisDevice": { + "message": "Mäleta seda seadet" + }, + "uncheckIfPublicDevice": { + "message": "Eemalda märgistus, kui oled avalikus seadmes" + }, + "approveFromYourOtherDevice": { + "message": "Kinnita teises seadmes" + }, + "requestAdminApproval": { + "message": "Küsi admini kinnitust" + }, + "approveWithMasterPassword": { + "message": "Kinnita ülemparooliga" + }, + "ssoIdentifierRequired": { + "message": "Nõutav on organisatsiooni SSO identifikaator." + }, "eu": { "message": "EL", "description": "European Union" }, - "us": { - "message": "USA", - "description": "United States" + "usDomain": { + "message": "bitwarden.com" + }, + "euDomain": { + "message": "bitwarden.eu" }, "accessDenied": { "message": "Ligipääs keelatud. Sul pole lubatud seda lehekülge vaadata." @@ -2243,5 +2278,133 @@ }, "display": { "message": "Kuvamine" + }, + "accountSuccessfullyCreated": { + "message": "Konto edukalt loodud!" + }, + "adminApprovalRequested": { + "message": "Päring on saadetud" + }, + "adminApprovalRequestSentToAdmins": { + "message": "Kinnituspäring saadeti adminile." + }, + "youWillBeNotifiedOnceApproved": { + "message": "Kinnitamise järel saad selle kohta teavituse." + }, + "troubleLoggingIn": { + "message": "Kas sisselogimisel on probleeme?" + }, + "loginApproved": { + "message": "Sisselogimine on kinnitatud" + }, + "userEmailMissing": { + "message": "Kasutaja e-post on puudulik" + }, + "deviceTrusted": { + "message": "Seade on usaldusväärne" + }, + "inputRequired": { + "message": "Sisestus on nõutav." + }, + "required": { + "message": "nõutav" + }, + "search": { + "message": "Otsi" + }, + "inputMinLength": { + "message": "Sisend peab olema vähemalt $COUNT$ tähemärki pikk.", + "placeholders": { + "count": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxLength": { + "message": "Sisend ei tohi olla üle $COUNT$ tähemärgi pikkune.", + "placeholders": { + "count": { + "content": "$1", + "example": "20" + } + } + }, + "inputForbiddenCharacters": { + "message": "Järgnevad kirjamärgid pole lubatud: $CHARACTERS$", + "placeholders": { + "characters": { + "content": "$1", + "example": "@, #, $, %" + } + } + }, + "inputMinValue": { + "message": "Sisend peab olema vähemalt $MIN$.", + "placeholders": { + "min": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxValue": { + "message": "Sisend ei tohi ületada $MAX$.", + "placeholders": { + "max": { + "content": "$1", + "example": "100" + } + } + }, + "multipleInputEmails": { + "message": "Üks või rohkem e-posti on kehtetud" + }, + "inputTrimValidator": { + "message": "Sisend ei tohi koosneda ainult tühikutest.", + "description": "Notification to inform the user that a form's input can't contain only whitespace." + }, + "inputEmail": { + "message": "Sisend pole e-posti aadress." + }, + "fieldsNeedAttention": { + "message": "$COUNT$ välja nõuab tähelepanu.", + "placeholders": { + "count": { + "content": "$1", + "example": "4" + } + } + }, + "selectPlaceholder": { + "message": "-- Vali --" + }, + "multiSelectPlaceholder": { + "message": "-- Filtreeritav tüüp --" + }, + "multiSelectLoading": { + "message": "Valikute hankimine..." + }, + "multiSelectNotFound": { + "message": "Ühtki kirjet ei leitud" + }, + "multiSelectClearAll": { + "message": "Tühjenda kõik" + }, + "plusNMore": { + "message": "+ $QUANTITY$ veel", + "placeholders": { + "quantity": { + "content": "$1", + "example": "5" + } + } + }, + "submenu": { + "message": "Alammenüü" + }, + "toggleCollapse": { + "message": "Peida", + "description": "Toggling an expand/collapse state." } } diff --git a/apps/browser/src/_locales/eu/messages.json b/apps/browser/src/_locales/eu/messages.json index 4523b995642..ac54d0c4ea6 100644 --- a/apps/browser/src/_locales/eu/messages.json +++ b/apps/browser/src/_locales/eu/messages.json @@ -338,6 +338,9 @@ "other": { "message": "Bestelakoak" }, + "unlockMethodNeededToChangeTimeoutActionDesc": { + "message": "Set up an unlock method to change your vault timeout action." + }, "rateExtension": { "message": "Baloratu gehigarria" }, @@ -630,6 +633,12 @@ "notificationChangeSave": { "message": "Eguneratu" }, + "notificationUnlockDesc": { + "message": "Unlock your Bitwarden vault to complete the auto-fill request." + }, + "notificationUnlock": { + "message": "Unlock" + }, "enableContextMenuItem": { "message": "Erakutsi laster-menuko aukerak" }, @@ -786,8 +795,8 @@ "ppremiumSignUpStorage": { "message": "Eranskinentzako 1GB-eko zifratutako biltegia." }, - "ppremiumSignUpTwoStep": { - "message": "YubiKey, FIDO U2F eta Duo bezalako bi urratseko saio hasierarako aukera gehigarriak." + "premiumSignUpTwoStepOptions": { + "message": "Proprietary two-step login options such as YubiKey and Duo." }, "ppremiumSignUpReports": { "message": "Pasahitzaren higienea, kontuaren egoera eta datu-bortxaketen txostenak, kutxa gotorra seguru mantentzeko." @@ -1440,9 +1449,6 @@ "restoreItem": { "message": "Berreskuratu elementua" }, - "restoreItemConfirmation": { - "message": "Ziur zaude elementu hau berreskuratu nahi duzula?" - }, "restoredItem": { "message": "Elementua berreskuratua" }, @@ -1599,6 +1605,12 @@ "biometricsNotSupportedDesc": { "message": "Nabigatzailearen biometria ezin da gailu honetan erabili." }, + "biometricsFailedTitle": { + "message": "Biometrics failed" + }, + "biometricsFailedDesc": { + "message": "Biometrics cannot be completed, consider using a master password or logging out. If this persists, please contact Bitwarden support." + }, "nativeMessaginPermissionErrorTitle": { "message": "Baimena ukatuta" }, @@ -2140,8 +2152,8 @@ "notificationSentDevice": { "message": "A notification has been sent to your device." }, - "logInInitiated": { - "message": "Log in initiated" + "loginInitiated": { + "message": "Login initiated" }, "exposedMasterPassword": { "message": "Exposed Master Password" @@ -2221,19 +2233,42 @@ } } }, - "region": { - "message": "Region" + "loggingInOn": { + "message": "Logging in on" }, "opensInANewWindow": { "message": "Opens in a new window" }, + "deviceApprovalRequired": { + "message": "Device approval required. Select an approval option below:" + }, + "rememberThisDevice": { + "message": "Remember this device" + }, + "uncheckIfPublicDevice": { + "message": "Uncheck if using a public device" + }, + "approveFromYourOtherDevice": { + "message": "Approve from your other device" + }, + "requestAdminApproval": { + "message": "Request admin approval" + }, + "approveWithMasterPassword": { + "message": "Approve with master password" + }, + "ssoIdentifierRequired": { + "message": "Organization SSO identifier is required." + }, "eu": { "message": "EU", "description": "European Union" }, - "us": { - "message": "US", - "description": "United States" + "usDomain": { + "message": "bitwarden.com" + }, + "euDomain": { + "message": "bitwarden.eu" }, "accessDenied": { "message": "Access denied. You do not have permission to view this page." @@ -2243,5 +2278,133 @@ }, "display": { "message": "Display" + }, + "accountSuccessfullyCreated": { + "message": "Account successfully created!" + }, + "adminApprovalRequested": { + "message": "Admin approval requested" + }, + "adminApprovalRequestSentToAdmins": { + "message": "Your request has been sent to your admin." + }, + "youWillBeNotifiedOnceApproved": { + "message": "You will be notified once approved." + }, + "troubleLoggingIn": { + "message": "Trouble logging in?" + }, + "loginApproved": { + "message": "Login approved" + }, + "userEmailMissing": { + "message": "User email missing" + }, + "deviceTrusted": { + "message": "Device trusted" + }, + "inputRequired": { + "message": "Input is required." + }, + "required": { + "message": "required" + }, + "search": { + "message": "Search" + }, + "inputMinLength": { + "message": "Input must be at least $COUNT$ characters long.", + "placeholders": { + "count": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxLength": { + "message": "Input must not exceed $COUNT$ characters in length.", + "placeholders": { + "count": { + "content": "$1", + "example": "20" + } + } + }, + "inputForbiddenCharacters": { + "message": "The following characters are not allowed: $CHARACTERS$", + "placeholders": { + "characters": { + "content": "$1", + "example": "@, #, $, %" + } + } + }, + "inputMinValue": { + "message": "Input value must be at least $MIN$.", + "placeholders": { + "min": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxValue": { + "message": "Input value must not exceed $MAX$.", + "placeholders": { + "max": { + "content": "$1", + "example": "100" + } + } + }, + "multipleInputEmails": { + "message": "1 or more emails are invalid" + }, + "inputTrimValidator": { + "message": "Input must not contain only whitespace.", + "description": "Notification to inform the user that a form's input can't contain only whitespace." + }, + "inputEmail": { + "message": "Input is not an email address." + }, + "fieldsNeedAttention": { + "message": "$COUNT$ field(s) above need your attention.", + "placeholders": { + "count": { + "content": "$1", + "example": "4" + } + } + }, + "selectPlaceholder": { + "message": "-- Select --" + }, + "multiSelectPlaceholder": { + "message": "-- Type to filter --" + }, + "multiSelectLoading": { + "message": "Retrieving options..." + }, + "multiSelectNotFound": { + "message": "No items found" + }, + "multiSelectClearAll": { + "message": "Clear all" + }, + "plusNMore": { + "message": "+ $QUANTITY$ more", + "placeholders": { + "quantity": { + "content": "$1", + "example": "5" + } + } + }, + "submenu": { + "message": "Submenu" + }, + "toggleCollapse": { + "message": "Toggle collapse", + "description": "Toggling an expand/collapse state." } } diff --git a/apps/browser/src/_locales/fa/messages.json b/apps/browser/src/_locales/fa/messages.json index b938e52a98d..e1057038933 100644 --- a/apps/browser/src/_locales/fa/messages.json +++ b/apps/browser/src/_locales/fa/messages.json @@ -338,6 +338,9 @@ "other": { "message": "ساير" }, + "unlockMethodNeededToChangeTimeoutActionDesc": { + "message": "Set up an unlock method to change your vault timeout action." + }, "rateExtension": { "message": "به این افزونه امتیاز دهید" }, @@ -630,6 +633,12 @@ "notificationChangeSave": { "message": "به‌روزرسانی" }, + "notificationUnlockDesc": { + "message": "Unlock your Bitwarden vault to complete the auto-fill request." + }, + "notificationUnlock": { + "message": "Unlock" + }, "enableContextMenuItem": { "message": "نمایش گزینه‌های منوی زمینه" }, @@ -786,8 +795,8 @@ "ppremiumSignUpStorage": { "message": "۱ گیگابایت فضای ذخیره سازی رمزگذاری شده برای پیوست های پرونده." }, - "ppremiumSignUpTwoStep": { - "message": "گزینه‌های ورود دو مرحله‌ای اضافی مانند YubiKey, FIDO U2F و Duo." + "premiumSignUpTwoStepOptions": { + "message": "Proprietary two-step login options such as YubiKey and Duo." }, "ppremiumSignUpReports": { "message": "گزارش‌های بهداشت رمز عبور، سلامت حساب و نقض داده‌ها برای ایمن نگهداشتن گاوصندوق شما." @@ -1440,9 +1449,6 @@ "restoreItem": { "message": "بازیابی مورد" }, - "restoreItemConfirmation": { - "message": "آیا مطمئن هستید که می‌خواهید این مورد را بازیابی کنید؟" - }, "restoredItem": { "message": "مورد بازیابی شد" }, @@ -1599,6 +1605,12 @@ "biometricsNotSupportedDesc": { "message": "بیومتریک مرورگر در این دستگاه پشتیبانی نمی‌شود." }, + "biometricsFailedTitle": { + "message": "Biometrics failed" + }, + "biometricsFailedDesc": { + "message": "Biometrics cannot be completed, consider using a master password or logging out. If this persists, please contact Bitwarden support." + }, "nativeMessaginPermissionErrorTitle": { "message": "مجوز ارائه نشده است" }, @@ -2140,8 +2152,8 @@ "notificationSentDevice": { "message": "یک اعلان به دستگاه شما ارسال شده است." }, - "logInInitiated": { - "message": "ورود به سیستم آغاز شد" + "loginInitiated": { + "message": "Login initiated" }, "exposedMasterPassword": { "message": "کلمه عبور اصلی افشا شده" @@ -2221,19 +2233,42 @@ } } }, - "region": { - "message": "منطقه" + "loggingInOn": { + "message": "Logging in on" }, "opensInANewWindow": { "message": "در پنجره جدید باز می‌شود" }, + "deviceApprovalRequired": { + "message": "Device approval required. Select an approval option below:" + }, + "rememberThisDevice": { + "message": "Remember this device" + }, + "uncheckIfPublicDevice": { + "message": "Uncheck if using a public device" + }, + "approveFromYourOtherDevice": { + "message": "Approve from your other device" + }, + "requestAdminApproval": { + "message": "Request admin approval" + }, + "approveWithMasterPassword": { + "message": "Approve with master password" + }, + "ssoIdentifierRequired": { + "message": "Organization SSO identifier is required." + }, "eu": { - "message": "اروپا", + "message": "EU", "description": "European Union" }, - "us": { - "message": "امریکا", - "description": "United States" + "usDomain": { + "message": "bitwarden.com" + }, + "euDomain": { + "message": "bitwarden.eu" }, "accessDenied": { "message": "دسترسی رد شد. شما اجازه مشاهده این صفحه را ندارید." @@ -2243,5 +2278,133 @@ }, "display": { "message": "نمایش" + }, + "accountSuccessfullyCreated": { + "message": "Account successfully created!" + }, + "adminApprovalRequested": { + "message": "Admin approval requested" + }, + "adminApprovalRequestSentToAdmins": { + "message": "Your request has been sent to your admin." + }, + "youWillBeNotifiedOnceApproved": { + "message": "You will be notified once approved." + }, + "troubleLoggingIn": { + "message": "Trouble logging in?" + }, + "loginApproved": { + "message": "Login approved" + }, + "userEmailMissing": { + "message": "User email missing" + }, + "deviceTrusted": { + "message": "Device trusted" + }, + "inputRequired": { + "message": "Input is required." + }, + "required": { + "message": "required" + }, + "search": { + "message": "Search" + }, + "inputMinLength": { + "message": "Input must be at least $COUNT$ characters long.", + "placeholders": { + "count": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxLength": { + "message": "Input must not exceed $COUNT$ characters in length.", + "placeholders": { + "count": { + "content": "$1", + "example": "20" + } + } + }, + "inputForbiddenCharacters": { + "message": "The following characters are not allowed: $CHARACTERS$", + "placeholders": { + "characters": { + "content": "$1", + "example": "@, #, $, %" + } + } + }, + "inputMinValue": { + "message": "Input value must be at least $MIN$.", + "placeholders": { + "min": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxValue": { + "message": "Input value must not exceed $MAX$.", + "placeholders": { + "max": { + "content": "$1", + "example": "100" + } + } + }, + "multipleInputEmails": { + "message": "1 or more emails are invalid" + }, + "inputTrimValidator": { + "message": "Input must not contain only whitespace.", + "description": "Notification to inform the user that a form's input can't contain only whitespace." + }, + "inputEmail": { + "message": "Input is not an email address." + }, + "fieldsNeedAttention": { + "message": "$COUNT$ field(s) above need your attention.", + "placeholders": { + "count": { + "content": "$1", + "example": "4" + } + } + }, + "selectPlaceholder": { + "message": "-- Select --" + }, + "multiSelectPlaceholder": { + "message": "-- Type to filter --" + }, + "multiSelectLoading": { + "message": "Retrieving options..." + }, + "multiSelectNotFound": { + "message": "No items found" + }, + "multiSelectClearAll": { + "message": "Clear all" + }, + "plusNMore": { + "message": "+ $QUANTITY$ more", + "placeholders": { + "quantity": { + "content": "$1", + "example": "5" + } + } + }, + "submenu": { + "message": "Submenu" + }, + "toggleCollapse": { + "message": "Toggle collapse", + "description": "Toggling an expand/collapse state." } } diff --git a/apps/browser/src/_locales/fi/messages.json b/apps/browser/src/_locales/fi/messages.json index 7ae2edd874c..69492afd7f4 100644 --- a/apps/browser/src/_locales/fi/messages.json +++ b/apps/browser/src/_locales/fi/messages.json @@ -3,11 +3,11 @@ "message": "Bitwarden" }, "extName": { - "message": "Bitwarden – Ilmainen salasananhallinta", + "message": "Bitwarden – Ilmainen salasanahallinta", "description": "Extension name, MUST be less than 40 characters (Safari restriction)" }, "extDesc": { - "message": "Turvallinen ja ilmainen salasanojen hallinta kaikille laitteillesi.", + "message": "Turvallinen ja ilmainen salasanahallinta kaikille laitteillesi.", "description": "Extension description" }, "loginOrCreateNewAccount": { @@ -224,7 +224,7 @@ "message": "Luo kirjautumistiedoillesi automaattisesti vahvoja, ainutlaatuisia salasanoja." }, "bitWebVault": { - "message": "Bitwardenin verkkoholvi" + "message": "Bitwarden Verkkoholvi" }, "importItems": { "message": "Tuo kohteita" @@ -279,7 +279,7 @@ "message": "Vältä epäselviä merkkejä" }, "searchVault": { - "message": "Hae holvista" + "message": "Etsi holvista" }, "edit": { "message": "Muokkaa" @@ -338,6 +338,9 @@ "other": { "message": "Muut" }, + "unlockMethodNeededToChangeTimeoutActionDesc": { + "message": "Muuta holvisi aikakatkaisutoimintoa määrittämällä lukituksen avaustapa." + }, "rateExtension": { "message": "Arvioi laajennus" }, @@ -574,20 +577,20 @@ "message": "Haluatko varmasti korvata nykyisen käyttäjätunnuksen?" }, "searchFolder": { - "message": "Hae kansiosta" + "message": "Etsi kansiosta" }, "searchCollection": { - "message": "Hae kokoelmasta" + "message": "Etsi kokoelmasta" }, "searchType": { - "message": "Hae tyypeistä" + "message": "Etsi tyypistä" }, "noneFolder": { "message": "Ei kansiota", "description": "This is the folder for uncategorized items" }, "enableAddLoginNotification": { - "message": "Kysy lisätäänkö kirjautimistieto" + "message": "Kysy lisätäänkö kirjautumistieto" }, "addLoginNotificationDesc": { "message": "Kysy lisätäänkö uusi kohde, jos holvissa ei vielä ole sopivaa kohdetta." @@ -619,7 +622,7 @@ "message": "Tallenna" }, "enableChangedPasswordNotification": { - "message": "Kysy päivitetäänkö olemassa oleva kirjautumistieto" + "message": "Kysy päivitetäänkö kirjautumistieto" }, "changedPasswordNotificationDesc": { "message": "Kysy päivitetäänkö kirjautumistiedon salasana sivustolla havaittua muutosta vastaavaksi." @@ -630,6 +633,12 @@ "notificationChangeSave": { "message": "Päivitä" }, + "notificationUnlockDesc": { + "message": "Viimeistele automaattitäytön pyyntö avaamalla Bitwarden-holvisi lukitus." + }, + "notificationUnlock": { + "message": "Avaa" + }, "enableContextMenuItem": { "message": "Näytä sisältövalikon valinnat" }, @@ -786,8 +795,8 @@ "ppremiumSignUpStorage": { "message": "1 Gt salattua tallennustilaa tiedostoliitteille." }, - "ppremiumSignUpTwoStep": { - "message": "Muita kaksivaiheisen kirjautumisen todennusmenetelmiä kuten YubiKey, FIDO U2F ja Duo Security." + "premiumSignUpTwoStepOptions": { + "message": "Proprietary two-step login options such as YubiKey and Duo." }, "ppremiumSignUpReports": { "message": "Salasanahygienian, tilin terveyden ja tietovuotojen raportointitoiminnot pitävät holvisi turvassa." @@ -1426,7 +1435,7 @@ "description": "Noun: a special folder to hold deleted items" }, "searchTrash": { - "message": "Hae roskakorista" + "message": "Etsi roskakorista" }, "permanentlyDeleteItem": { "message": "Poista kohde pysyvästi" @@ -1440,9 +1449,6 @@ "restoreItem": { "message": "Palauta kohde" }, - "restoreItemConfirmation": { - "message": "Haluatko varmasti palauttaa kohteen?" - }, "restoredItem": { "message": "Kohde palautettiin" }, @@ -1599,6 +1605,12 @@ "biometricsNotSupportedDesc": { "message": "Selaimen biometriaa ei tueta tällä laitteella." }, + "biometricsFailedTitle": { + "message": "Biometria epäonnistui" + }, + "biometricsFailedDesc": { + "message": "Biometristä todennusta ei voida suorittaa. Harkitse pääsalasanan käyttämistä tai uloskirjautumista. Jos tämä jatkuu, ole yhteydessä Bitwardenin asiakaspalveluun." + }, "nativeMessaginPermissionErrorTitle": { "message": "Oikeutta ei myönnetty" }, @@ -1637,7 +1649,7 @@ "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "searchSends": { - "message": "Hae Sendeistä", + "message": "Etsi Sendeistä", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "addSend": { @@ -2140,7 +2152,7 @@ "notificationSentDevice": { "message": "Laitteellesi on lähetetty ilmoitus." }, - "logInInitiated": { + "loginInitiated": { "message": "Kirjautuminen aloitettu" }, "exposedMasterPassword": { @@ -2221,19 +2233,42 @@ } } }, - "region": { - "message": "Alue" + "loggingInOn": { + "message": "Kirjaudutaan sijaintiin" }, "opensInANewWindow": { "message": "Avautuu uudessa ikkunassa" }, + "deviceApprovalRequired": { + "message": "Laitehyväksyntä vaaditaan. Valitse hyväksyntätapa alta:" + }, + "rememberThisDevice": { + "message": "Muista tämä laite" + }, + "uncheckIfPublicDevice": { + "message": "Poista käytöstä julkisilla laitteilla" + }, + "approveFromYourOtherDevice": { + "message": "Hyväksy muilta laitteiltasi" + }, + "requestAdminApproval": { + "message": "Pyydä hyväksyntää ylläpidolta" + }, + "approveWithMasterPassword": { + "message": "Hyväksy pääsalasanalla" + }, + "ssoIdentifierRequired": { + "message": "Organisaation kertakirjautumistunniste tarvitaan." + }, "eu": { "message": "EU", "description": "European Union" }, - "us": { - "message": "US", - "description": "United States" + "usDomain": { + "message": "bitwarden.com" + }, + "euDomain": { + "message": "bitwarden.eu" }, "accessDenied": { "message": "Pääsy estetty. Sinulla ei ole oikeutta avata sivua." @@ -2243,5 +2278,133 @@ }, "display": { "message": "Ulkoasu" + }, + "accountSuccessfullyCreated": { + "message": "Tilin luonti onnistui!" + }, + "adminApprovalRequested": { + "message": "Hyväksyntää pyydetty ylläpidolta" + }, + "adminApprovalRequestSentToAdmins": { + "message": "Pyyntösi on välitetty ylläpidolle." + }, + "youWillBeNotifiedOnceApproved": { + "message": "Saat ilmoituksen kun se on hyväksytty." + }, + "troubleLoggingIn": { + "message": "Ongelmia kirjautumisessa?" + }, + "loginApproved": { + "message": "Kirjautuminen hyväksyttiin" + }, + "userEmailMissing": { + "message": "Käyttäjän sähköpostiosoite puuttuu" + }, + "deviceTrusted": { + "message": "Laitteeseen luotettu" + }, + "inputRequired": { + "message": "Syöte vaaditaan." + }, + "required": { + "message": "pakollinen" + }, + "search": { + "message": "Hae" + }, + "inputMinLength": { + "message": "Syötteen tulee sisältää ainakin $COUNT$ merkkiä.", + "placeholders": { + "count": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxLength": { + "message": "Syötteen enimmäismerkkimäärä on $COUNT$.", + "placeholders": { + "count": { + "content": "$1", + "example": "20" + } + } + }, + "inputForbiddenCharacters": { + "message": "Seuraavia merkkejä ei sallita: $CHARACTERS$", + "placeholders": { + "characters": { + "content": "$1", + "example": "@, #, $, %" + } + } + }, + "inputMinValue": { + "message": "Syötteen vähimmäisarvo on $MIN$.", + "placeholders": { + "min": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxValue": { + "message": "Syötteen enimmäisarvo on $MAX$.", + "placeholders": { + "max": { + "content": "$1", + "example": "100" + } + } + }, + "multipleInputEmails": { + "message": "Ainakin yksi sähköpostiosoite on virheellinen" + }, + "inputTrimValidator": { + "message": "Syöte ei voi sisältää vain tyhjiä merkkejä.", + "description": "Notification to inform the user that a form's input can't contain only whitespace." + }, + "inputEmail": { + "message": "Syöte ei ole sähköpostiosoite." + }, + "fieldsNeedAttention": { + "message": "$COUNT$ yllä oleva(a) kenttä(ä) vaatii huomiotasi.", + "placeholders": { + "count": { + "content": "$1", + "example": "4" + } + } + }, + "selectPlaceholder": { + "message": "-- Valitse --" + }, + "multiSelectPlaceholder": { + "message": "-- Suodatettava tyyppi --" + }, + "multiSelectLoading": { + "message": "Noudetaan vaihtoehtoja..." + }, + "multiSelectNotFound": { + "message": "Kohteita ei löytynyt" + }, + "multiSelectClearAll": { + "message": "Tyhjennä kaikki" + }, + "plusNMore": { + "message": "+ $QUANTITY$ lisää", + "placeholders": { + "quantity": { + "content": "$1", + "example": "5" + } + } + }, + "submenu": { + "message": "Alavalikko" + }, + "toggleCollapse": { + "message": "Laajenna tai supista", + "description": "Toggling an expand/collapse state." } } diff --git a/apps/browser/src/_locales/fil/messages.json b/apps/browser/src/_locales/fil/messages.json index 8a23901eb56..be101c80b41 100644 --- a/apps/browser/src/_locales/fil/messages.json +++ b/apps/browser/src/_locales/fil/messages.json @@ -338,6 +338,9 @@ "other": { "message": "Iba pa" }, + "unlockMethodNeededToChangeTimeoutActionDesc": { + "message": "Set up an unlock method to change your vault timeout action." + }, "rateExtension": { "message": "I-rate ang extension" }, @@ -630,6 +633,12 @@ "notificationChangeSave": { "message": "I-update" }, + "notificationUnlockDesc": { + "message": "Unlock your Bitwarden vault to complete the auto-fill request." + }, + "notificationUnlock": { + "message": "Unlock" + }, "enableContextMenuItem": { "message": "Ipakita ang mga opsyon ng menu ng konteksto" }, @@ -786,8 +795,8 @@ "ppremiumSignUpStorage": { "message": "1 GB encrypted storage para sa mga file attachment." }, - "ppremiumSignUpTwoStep": { - "message": "Dagdag na dalawang hakbang na login option gaya ng YubiKey, FIDO U2F, at Duo." + "premiumSignUpTwoStepOptions": { + "message": "Proprietary two-step login options such as YubiKey and Duo." }, "ppremiumSignUpReports": { "message": "Pasahod higiyena, kalusugan ng account, at mga ulat sa data breach upang panatilihing ligtas ang iyong vault." @@ -1440,9 +1449,6 @@ "restoreItem": { "message": "Ibalik ang item" }, - "restoreItemConfirmation": { - "message": "Sigurado ka bang nais mong ibalik ang item na ito?" - }, "restoredItem": { "message": "Item na nai-restore" }, @@ -1599,6 +1605,12 @@ "biometricsNotSupportedDesc": { "message": "Ang browser biometrics ay hindi sinusuportahan sa device na ito." }, + "biometricsFailedTitle": { + "message": "Biometrics failed" + }, + "biometricsFailedDesc": { + "message": "Biometrics cannot be completed, consider using a master password or logging out. If this persists, please contact Bitwarden support." + }, "nativeMessaginPermissionErrorTitle": { "message": "Permiso ay hindi ibinigay" }, @@ -2140,8 +2152,8 @@ "notificationSentDevice": { "message": "Naipadala na ang notification sa iyong device." }, - "logInInitiated": { - "message": "Mag log in na sinimulan" + "loginInitiated": { + "message": "Login initiated" }, "exposedMasterPassword": { "message": "Nakalantad na Master Password" @@ -2221,19 +2233,42 @@ } } }, - "region": { - "message": "Region" + "loggingInOn": { + "message": "Logging in on" }, "opensInANewWindow": { "message": "Opens in a new window" }, + "deviceApprovalRequired": { + "message": "Device approval required. Select an approval option below:" + }, + "rememberThisDevice": { + "message": "Remember this device" + }, + "uncheckIfPublicDevice": { + "message": "Uncheck if using a public device" + }, + "approveFromYourOtherDevice": { + "message": "Approve from your other device" + }, + "requestAdminApproval": { + "message": "Request admin approval" + }, + "approveWithMasterPassword": { + "message": "Approve with master password" + }, + "ssoIdentifierRequired": { + "message": "Organization SSO identifier is required." + }, "eu": { "message": "EU", "description": "European Union" }, - "us": { - "message": "US", - "description": "United States" + "usDomain": { + "message": "bitwarden.com" + }, + "euDomain": { + "message": "bitwarden.eu" }, "accessDenied": { "message": "Access denied. You do not have permission to view this page." @@ -2243,5 +2278,133 @@ }, "display": { "message": "Display" + }, + "accountSuccessfullyCreated": { + "message": "Account successfully created!" + }, + "adminApprovalRequested": { + "message": "Admin approval requested" + }, + "adminApprovalRequestSentToAdmins": { + "message": "Your request has been sent to your admin." + }, + "youWillBeNotifiedOnceApproved": { + "message": "You will be notified once approved." + }, + "troubleLoggingIn": { + "message": "Trouble logging in?" + }, + "loginApproved": { + "message": "Login approved" + }, + "userEmailMissing": { + "message": "User email missing" + }, + "deviceTrusted": { + "message": "Device trusted" + }, + "inputRequired": { + "message": "Input is required." + }, + "required": { + "message": "required" + }, + "search": { + "message": "Search" + }, + "inputMinLength": { + "message": "Input must be at least $COUNT$ characters long.", + "placeholders": { + "count": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxLength": { + "message": "Input must not exceed $COUNT$ characters in length.", + "placeholders": { + "count": { + "content": "$1", + "example": "20" + } + } + }, + "inputForbiddenCharacters": { + "message": "The following characters are not allowed: $CHARACTERS$", + "placeholders": { + "characters": { + "content": "$1", + "example": "@, #, $, %" + } + } + }, + "inputMinValue": { + "message": "Input value must be at least $MIN$.", + "placeholders": { + "min": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxValue": { + "message": "Input value must not exceed $MAX$.", + "placeholders": { + "max": { + "content": "$1", + "example": "100" + } + } + }, + "multipleInputEmails": { + "message": "1 or more emails are invalid" + }, + "inputTrimValidator": { + "message": "Input must not contain only whitespace.", + "description": "Notification to inform the user that a form's input can't contain only whitespace." + }, + "inputEmail": { + "message": "Input is not an email address." + }, + "fieldsNeedAttention": { + "message": "$COUNT$ field(s) above need your attention.", + "placeholders": { + "count": { + "content": "$1", + "example": "4" + } + } + }, + "selectPlaceholder": { + "message": "-- Select --" + }, + "multiSelectPlaceholder": { + "message": "-- Type to filter --" + }, + "multiSelectLoading": { + "message": "Retrieving options..." + }, + "multiSelectNotFound": { + "message": "No items found" + }, + "multiSelectClearAll": { + "message": "Clear all" + }, + "plusNMore": { + "message": "+ $QUANTITY$ more", + "placeholders": { + "quantity": { + "content": "$1", + "example": "5" + } + } + }, + "submenu": { + "message": "Submenu" + }, + "toggleCollapse": { + "message": "Toggle collapse", + "description": "Toggling an expand/collapse state." } } diff --git a/apps/browser/src/_locales/fr/messages.json b/apps/browser/src/_locales/fr/messages.json index 37b6bbc0c26..b554c619a5f 100644 --- a/apps/browser/src/_locales/fr/messages.json +++ b/apps/browser/src/_locales/fr/messages.json @@ -338,6 +338,9 @@ "other": { "message": "Autre" }, + "unlockMethodNeededToChangeTimeoutActionDesc": { + "message": "Set up an unlock method to change your vault timeout action." + }, "rateExtension": { "message": "Noter l'extension" }, @@ -630,6 +633,12 @@ "notificationChangeSave": { "message": "Mettre à jour" }, + "notificationUnlockDesc": { + "message": "Unlock your Bitwarden vault to complete the auto-fill request." + }, + "notificationUnlock": { + "message": "Déverrouiller" + }, "enableContextMenuItem": { "message": "Afficher les options du menu contextuel" }, @@ -786,8 +795,8 @@ "ppremiumSignUpStorage": { "message": "1 Go de stockage chiffré pour les fichiers joints." }, - "ppremiumSignUpTwoStep": { - "message": "Options additionnelles d'identification à deux étapes telles que YubiKey, FIDO U2F et Duo." + "premiumSignUpTwoStepOptions": { + "message": "Options de connexion propriétaires à deux facteurs telles que YubiKey et Duo." }, "ppremiumSignUpReports": { "message": "Hygiène du mot de passe, santé du compte et rapports sur les brèches de données pour assurer la sécurité de votre coffre." @@ -1440,9 +1449,6 @@ "restoreItem": { "message": "Restaurer l'élément" }, - "restoreItemConfirmation": { - "message": "Êtes-vous sûr de vouloir restaurer cet élément ?" - }, "restoredItem": { "message": "Élément restauré" }, @@ -1599,6 +1605,12 @@ "biometricsNotSupportedDesc": { "message": "Le déverrouillage biométrique dans le navigateur n’est pas pris en charge sur cet appareil" }, + "biometricsFailedTitle": { + "message": "Biometrics failed" + }, + "biometricsFailedDesc": { + "message": "Biometrics cannot be completed, consider using a master password or logging out. If this persists, please contact Bitwarden support." + }, "nativeMessaginPermissionErrorTitle": { "message": "Permission non accordée" }, @@ -2140,8 +2152,8 @@ "notificationSentDevice": { "message": "Une notification a été envoyée à votre appareil." }, - "logInInitiated": { - "message": "Connexion initiée" + "loginInitiated": { + "message": "Login initiated" }, "exposedMasterPassword": { "message": "Mot de passe principal exposé" @@ -2221,19 +2233,42 @@ } } }, - "region": { - "message": "Région" + "loggingInOn": { + "message": "Connexion sur" }, "opensInANewWindow": { "message": "S'ouvre dans une nouvelle fenêtre" }, + "deviceApprovalRequired": { + "message": "Device approval required. Select an approval option below:" + }, + "rememberThisDevice": { + "message": "Remember this device" + }, + "uncheckIfPublicDevice": { + "message": "Uncheck if using a public device" + }, + "approveFromYourOtherDevice": { + "message": "Approve from your other device" + }, + "requestAdminApproval": { + "message": "Request admin approval" + }, + "approveWithMasterPassword": { + "message": "Approve with master password" + }, + "ssoIdentifierRequired": { + "message": "Organization SSO identifier is required." + }, "eu": { "message": "EU", "description": "European Union" }, - "us": { - "message": "US", - "description": "United States" + "usDomain": { + "message": "bitwarden.com" + }, + "euDomain": { + "message": "bitwarden.eu" }, "accessDenied": { "message": "Accès refusé. Vous n'avez pas l'autorisation de voir cette page." @@ -2243,5 +2278,133 @@ }, "display": { "message": "Affichage" + }, + "accountSuccessfullyCreated": { + "message": "Account successfully created!" + }, + "adminApprovalRequested": { + "message": "Admin approval requested" + }, + "adminApprovalRequestSentToAdmins": { + "message": "Demande transmise à votre administrateur." + }, + "youWillBeNotifiedOnceApproved": { + "message": "You will be notified once approved." + }, + "troubleLoggingIn": { + "message": "Trouble logging in?" + }, + "loginApproved": { + "message": "Login approved" + }, + "userEmailMissing": { + "message": "User email missing" + }, + "deviceTrusted": { + "message": "Device trusted" + }, + "inputRequired": { + "message": "Saisie requise." + }, + "required": { + "message": "requis" + }, + "search": { + "message": "Search" + }, + "inputMinLength": { + "message": "La saisie doit comporter au moins $COUNT$ caractères.", + "placeholders": { + "count": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxLength": { + "message": "La saisie ne doit pas dépasser $COUNT$ caractères de long.", + "placeholders": { + "count": { + "content": "$1", + "example": "20" + } + } + }, + "inputForbiddenCharacters": { + "message": "Les caractères suivants ne sont pas autorisés : $CHARACTERS$", + "placeholders": { + "characters": { + "content": "$1", + "example": "@, #, $, %" + } + } + }, + "inputMinValue": { + "message": "Input value must be at least $MIN$.", + "placeholders": { + "min": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxValue": { + "message": "Input value must not exceed $MAX$.", + "placeholders": { + "max": { + "content": "$1", + "example": "100" + } + } + }, + "multipleInputEmails": { + "message": "Une ou plusieurs adresses e-mail ne sont pas valides" + }, + "inputTrimValidator": { + "message": "La saisie ne doit pas contenir que des espaces.", + "description": "Notification to inform the user that a form's input can't contain only whitespace." + }, + "inputEmail": { + "message": "La saisie n'est pas une adresse e-mail." + }, + "fieldsNeedAttention": { + "message": "$COUNT$ field(s) above need your attention.", + "placeholders": { + "count": { + "content": "$1", + "example": "4" + } + } + }, + "selectPlaceholder": { + "message": "-- Select --" + }, + "multiSelectPlaceholder": { + "message": "-- Type to filter --" + }, + "multiSelectLoading": { + "message": "Retrieving options..." + }, + "multiSelectNotFound": { + "message": "No items found" + }, + "multiSelectClearAll": { + "message": "Clear all" + }, + "plusNMore": { + "message": "+ $QUANTITY$ more", + "placeholders": { + "quantity": { + "content": "$1", + "example": "5" + } + } + }, + "submenu": { + "message": "Submenu" + }, + "toggleCollapse": { + "message": "Toggle collapse", + "description": "Toggling an expand/collapse state." } } diff --git a/apps/browser/src/_locales/gl/messages.json b/apps/browser/src/_locales/gl/messages.json index 9e46b55f19e..6aea5876eac 100644 --- a/apps/browser/src/_locales/gl/messages.json +++ b/apps/browser/src/_locales/gl/messages.json @@ -338,6 +338,9 @@ "other": { "message": "Other" }, + "unlockMethodNeededToChangeTimeoutActionDesc": { + "message": "Set up an unlock method to change your vault timeout action." + }, "rateExtension": { "message": "Rate the extension" }, @@ -630,6 +633,12 @@ "notificationChangeSave": { "message": "Update" }, + "notificationUnlockDesc": { + "message": "Unlock your Bitwarden vault to complete the auto-fill request." + }, + "notificationUnlock": { + "message": "Unlock" + }, "enableContextMenuItem": { "message": "Show context menu options" }, @@ -786,8 +795,8 @@ "ppremiumSignUpStorage": { "message": "1 GB encrypted storage for file attachments." }, - "ppremiumSignUpTwoStep": { - "message": "Additional two-step login options such as YubiKey, FIDO U2F, and Duo." + "premiumSignUpTwoStepOptions": { + "message": "Proprietary two-step login options such as YubiKey and Duo." }, "ppremiumSignUpReports": { "message": "Password hygiene, account health, and data breach reports to keep your vault safe." @@ -1440,9 +1449,6 @@ "restoreItem": { "message": "Restore item" }, - "restoreItemConfirmation": { - "message": "Are you sure you want to restore this item?" - }, "restoredItem": { "message": "Item restored" }, @@ -1599,6 +1605,12 @@ "biometricsNotSupportedDesc": { "message": "Browser biometrics is not supported on this device." }, + "biometricsFailedTitle": { + "message": "Biometrics failed" + }, + "biometricsFailedDesc": { + "message": "Biometrics cannot be completed, consider using a master password or logging out. If this persists, please contact Bitwarden support." + }, "nativeMessaginPermissionErrorTitle": { "message": "Permission not provided" }, @@ -2140,8 +2152,8 @@ "notificationSentDevice": { "message": "A notification has been sent to your device." }, - "logInInitiated": { - "message": "Log in initiated" + "loginInitiated": { + "message": "Login initiated" }, "exposedMasterPassword": { "message": "Exposed Master Password" @@ -2221,19 +2233,42 @@ } } }, - "region": { - "message": "Region" + "loggingInOn": { + "message": "Logging in on" }, "opensInANewWindow": { "message": "Opens in a new window" }, + "deviceApprovalRequired": { + "message": "Device approval required. Select an approval option below:" + }, + "rememberThisDevice": { + "message": "Remember this device" + }, + "uncheckIfPublicDevice": { + "message": "Uncheck if using a public device" + }, + "approveFromYourOtherDevice": { + "message": "Approve from your other device" + }, + "requestAdminApproval": { + "message": "Request admin approval" + }, + "approveWithMasterPassword": { + "message": "Approve with master password" + }, + "ssoIdentifierRequired": { + "message": "Organization SSO identifier is required." + }, "eu": { "message": "EU", "description": "European Union" }, - "us": { - "message": "US", - "description": "United States" + "usDomain": { + "message": "bitwarden.com" + }, + "euDomain": { + "message": "bitwarden.eu" }, "accessDenied": { "message": "Access denied. You do not have permission to view this page." @@ -2243,5 +2278,133 @@ }, "display": { "message": "Display" + }, + "accountSuccessfullyCreated": { + "message": "Account successfully created!" + }, + "adminApprovalRequested": { + "message": "Admin approval requested" + }, + "adminApprovalRequestSentToAdmins": { + "message": "Your request has been sent to your admin." + }, + "youWillBeNotifiedOnceApproved": { + "message": "You will be notified once approved." + }, + "troubleLoggingIn": { + "message": "Trouble logging in?" + }, + "loginApproved": { + "message": "Login approved" + }, + "userEmailMissing": { + "message": "User email missing" + }, + "deviceTrusted": { + "message": "Device trusted" + }, + "inputRequired": { + "message": "Input is required." + }, + "required": { + "message": "required" + }, + "search": { + "message": "Search" + }, + "inputMinLength": { + "message": "Input must be at least $COUNT$ characters long.", + "placeholders": { + "count": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxLength": { + "message": "Input must not exceed $COUNT$ characters in length.", + "placeholders": { + "count": { + "content": "$1", + "example": "20" + } + } + }, + "inputForbiddenCharacters": { + "message": "The following characters are not allowed: $CHARACTERS$", + "placeholders": { + "characters": { + "content": "$1", + "example": "@, #, $, %" + } + } + }, + "inputMinValue": { + "message": "Input value must be at least $MIN$.", + "placeholders": { + "min": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxValue": { + "message": "Input value must not exceed $MAX$.", + "placeholders": { + "max": { + "content": "$1", + "example": "100" + } + } + }, + "multipleInputEmails": { + "message": "1 or more emails are invalid" + }, + "inputTrimValidator": { + "message": "Input must not contain only whitespace.", + "description": "Notification to inform the user that a form's input can't contain only whitespace." + }, + "inputEmail": { + "message": "Input is not an email address." + }, + "fieldsNeedAttention": { + "message": "$COUNT$ field(s) above need your attention.", + "placeholders": { + "count": { + "content": "$1", + "example": "4" + } + } + }, + "selectPlaceholder": { + "message": "-- Select --" + }, + "multiSelectPlaceholder": { + "message": "-- Type to filter --" + }, + "multiSelectLoading": { + "message": "Retrieving options..." + }, + "multiSelectNotFound": { + "message": "No items found" + }, + "multiSelectClearAll": { + "message": "Clear all" + }, + "plusNMore": { + "message": "+ $QUANTITY$ more", + "placeholders": { + "quantity": { + "content": "$1", + "example": "5" + } + } + }, + "submenu": { + "message": "Submenu" + }, + "toggleCollapse": { + "message": "Toggle collapse", + "description": "Toggling an expand/collapse state." } } diff --git a/apps/browser/src/_locales/he/messages.json b/apps/browser/src/_locales/he/messages.json index 439f3216097..752935ce81a 100644 --- a/apps/browser/src/_locales/he/messages.json +++ b/apps/browser/src/_locales/he/messages.json @@ -338,6 +338,9 @@ "other": { "message": "אחר" }, + "unlockMethodNeededToChangeTimeoutActionDesc": { + "message": "Set up an unlock method to change your vault timeout action." + }, "rateExtension": { "message": "דירוג הרחבה" }, @@ -630,6 +633,12 @@ "notificationChangeSave": { "message": "כן, עדכן עכשיו" }, + "notificationUnlockDesc": { + "message": "Unlock your Bitwarden vault to complete the auto-fill request." + }, + "notificationUnlock": { + "message": "Unlock" + }, "enableContextMenuItem": { "message": "Show context menu options" }, @@ -786,8 +795,8 @@ "ppremiumSignUpStorage": { "message": "1 ג'יגה של מקום אחסון עבור קבצים מצורפים." }, - "ppremiumSignUpTwoStep": { - "message": "אפשרויות כניסה דו שלבית מתקדמות כמו YubiKey, FIDO U2F, וגם Duo." + "premiumSignUpTwoStepOptions": { + "message": "Proprietary two-step login options such as YubiKey and Duo." }, "ppremiumSignUpReports": { "message": "היגיינת סיסמאות, מצב בריאות החשבון, ודיווחים מעודכנים על פרצות חדשות בכדי לשמור על הכספת שלך בטוחה." @@ -1440,9 +1449,6 @@ "restoreItem": { "message": "שחזר פריט" }, - "restoreItemConfirmation": { - "message": "האם אתה בטוח שברצונך לשחזר פריט זה?" - }, "restoredItem": { "message": "פריט ששוחזר" }, @@ -1599,6 +1605,12 @@ "biometricsNotSupportedDesc": { "message": "מכשיר זה לא תומך בזיהוי ביומטרי בדפדפן." }, + "biometricsFailedTitle": { + "message": "Biometrics failed" + }, + "biometricsFailedDesc": { + "message": "Biometrics cannot be completed, consider using a master password or logging out. If this persists, please contact Bitwarden support." + }, "nativeMessaginPermissionErrorTitle": { "message": "הרשאה לא סופקה" }, @@ -2140,8 +2152,8 @@ "notificationSentDevice": { "message": "A notification has been sent to your device." }, - "logInInitiated": { - "message": "Log in initiated" + "loginInitiated": { + "message": "Login initiated" }, "exposedMasterPassword": { "message": "Exposed Master Password" @@ -2221,19 +2233,42 @@ } } }, - "region": { - "message": "Region" + "loggingInOn": { + "message": "Logging in on" }, "opensInANewWindow": { "message": "Opens in a new window" }, + "deviceApprovalRequired": { + "message": "Device approval required. Select an approval option below:" + }, + "rememberThisDevice": { + "message": "Remember this device" + }, + "uncheckIfPublicDevice": { + "message": "Uncheck if using a public device" + }, + "approveFromYourOtherDevice": { + "message": "Approve from your other device" + }, + "requestAdminApproval": { + "message": "Request admin approval" + }, + "approveWithMasterPassword": { + "message": "Approve with master password" + }, + "ssoIdentifierRequired": { + "message": "Organization SSO identifier is required." + }, "eu": { "message": "EU", "description": "European Union" }, - "us": { - "message": "US", - "description": "United States" + "usDomain": { + "message": "bitwarden.com" + }, + "euDomain": { + "message": "bitwarden.eu" }, "accessDenied": { "message": "Access denied. You do not have permission to view this page." @@ -2243,5 +2278,133 @@ }, "display": { "message": "תצוגה" + }, + "accountSuccessfullyCreated": { + "message": "Account successfully created!" + }, + "adminApprovalRequested": { + "message": "Admin approval requested" + }, + "adminApprovalRequestSentToAdmins": { + "message": "Your request has been sent to your admin." + }, + "youWillBeNotifiedOnceApproved": { + "message": "You will be notified once approved." + }, + "troubleLoggingIn": { + "message": "Trouble logging in?" + }, + "loginApproved": { + "message": "Login approved" + }, + "userEmailMissing": { + "message": "User email missing" + }, + "deviceTrusted": { + "message": "Device trusted" + }, + "inputRequired": { + "message": "Input is required." + }, + "required": { + "message": "required" + }, + "search": { + "message": "Search" + }, + "inputMinLength": { + "message": "Input must be at least $COUNT$ characters long.", + "placeholders": { + "count": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxLength": { + "message": "Input must not exceed $COUNT$ characters in length.", + "placeholders": { + "count": { + "content": "$1", + "example": "20" + } + } + }, + "inputForbiddenCharacters": { + "message": "The following characters are not allowed: $CHARACTERS$", + "placeholders": { + "characters": { + "content": "$1", + "example": "@, #, $, %" + } + } + }, + "inputMinValue": { + "message": "Input value must be at least $MIN$.", + "placeholders": { + "min": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxValue": { + "message": "Input value must not exceed $MAX$.", + "placeholders": { + "max": { + "content": "$1", + "example": "100" + } + } + }, + "multipleInputEmails": { + "message": "1 or more emails are invalid" + }, + "inputTrimValidator": { + "message": "Input must not contain only whitespace.", + "description": "Notification to inform the user that a form's input can't contain only whitespace." + }, + "inputEmail": { + "message": "Input is not an email address." + }, + "fieldsNeedAttention": { + "message": "$COUNT$ field(s) above need your attention.", + "placeholders": { + "count": { + "content": "$1", + "example": "4" + } + } + }, + "selectPlaceholder": { + "message": "-- Select --" + }, + "multiSelectPlaceholder": { + "message": "-- Type to filter --" + }, + "multiSelectLoading": { + "message": "Retrieving options..." + }, + "multiSelectNotFound": { + "message": "No items found" + }, + "multiSelectClearAll": { + "message": "Clear all" + }, + "plusNMore": { + "message": "+ $QUANTITY$ more", + "placeholders": { + "quantity": { + "content": "$1", + "example": "5" + } + } + }, + "submenu": { + "message": "Submenu" + }, + "toggleCollapse": { + "message": "Toggle collapse", + "description": "Toggling an expand/collapse state." } } diff --git a/apps/browser/src/_locales/hi/messages.json b/apps/browser/src/_locales/hi/messages.json index eb08d59c2af..d5c465e68bf 100644 --- a/apps/browser/src/_locales/hi/messages.json +++ b/apps/browser/src/_locales/hi/messages.json @@ -338,6 +338,9 @@ "other": { "message": "अन्य" }, + "unlockMethodNeededToChangeTimeoutActionDesc": { + "message": "Set up an unlock method to change your vault timeout action." + }, "rateExtension": { "message": "Rate the Extension" }, @@ -630,6 +633,12 @@ "notificationChangeSave": { "message": "Yes, Update Now" }, + "notificationUnlockDesc": { + "message": "Unlock your Bitwarden vault to complete the auto-fill request." + }, + "notificationUnlock": { + "message": "Unlock" + }, "enableContextMenuItem": { "message": "संदर्भ मेनू विकल्प दिखाएं" }, @@ -786,8 +795,8 @@ "ppremiumSignUpStorage": { "message": "1 GB of encrypted file storage." }, - "ppremiumSignUpTwoStep": { - "message": "अतिरिक्त दो-चरण लॉगिन विकल्प जैसे YubiKey, FIDO U2F, और डुओ।" + "premiumSignUpTwoStepOptions": { + "message": "Proprietary two-step login options such as YubiKey and Duo." }, "ppremiumSignUpReports": { "message": "अपनी वॉल्ट को सुरक्षित रखने के लिए पासवर्ड स्वच्छता, खाता स्वास्थ्य और डेटा उल्लंघन रिपोर्ट।" @@ -1440,9 +1449,6 @@ "restoreItem": { "message": "आइटम बहाल करें" }, - "restoreItemConfirmation": { - "message": "क्या आप सुनिश्चित हैं कि आप इस आइटम को बहाल करना चाहते हैं?" - }, "restoredItem": { "message": "बहाल आइटम" }, @@ -1599,6 +1605,12 @@ "biometricsNotSupportedDesc": { "message": "ब्राउज़र बॉयोमीट्रिक्स इस डिवाइस पर समर्थित नहीं है।" }, + "biometricsFailedTitle": { + "message": "Biometrics failed" + }, + "biometricsFailedDesc": { + "message": "Biometrics cannot be completed, consider using a master password or logging out. If this persists, please contact Bitwarden support." + }, "nativeMessaginPermissionErrorTitle": { "message": "अनुमति नहीं दी गयी है" }, @@ -2140,8 +2152,8 @@ "notificationSentDevice": { "message": "A notification has been sent to your device." }, - "logInInitiated": { - "message": "Log in initiated" + "loginInitiated": { + "message": "Login initiated" }, "exposedMasterPassword": { "message": "Exposed Master Password" @@ -2221,19 +2233,42 @@ } } }, - "region": { - "message": "Region" + "loggingInOn": { + "message": "Logging in on" }, "opensInANewWindow": { "message": "Opens in a new window" }, + "deviceApprovalRequired": { + "message": "Device approval required. Select an approval option below:" + }, + "rememberThisDevice": { + "message": "Remember this device" + }, + "uncheckIfPublicDevice": { + "message": "Uncheck if using a public device" + }, + "approveFromYourOtherDevice": { + "message": "Approve from your other device" + }, + "requestAdminApproval": { + "message": "Request admin approval" + }, + "approveWithMasterPassword": { + "message": "Approve with master password" + }, + "ssoIdentifierRequired": { + "message": "Organization SSO identifier is required." + }, "eu": { "message": "EU", "description": "European Union" }, - "us": { - "message": "US", - "description": "United States" + "usDomain": { + "message": "bitwarden.com" + }, + "euDomain": { + "message": "bitwarden.eu" }, "accessDenied": { "message": "Access denied. You do not have permission to view this page." @@ -2243,5 +2278,133 @@ }, "display": { "message": "Display" + }, + "accountSuccessfullyCreated": { + "message": "Account successfully created!" + }, + "adminApprovalRequested": { + "message": "Admin approval requested" + }, + "adminApprovalRequestSentToAdmins": { + "message": "Your request has been sent to your admin." + }, + "youWillBeNotifiedOnceApproved": { + "message": "You will be notified once approved." + }, + "troubleLoggingIn": { + "message": "Trouble logging in?" + }, + "loginApproved": { + "message": "Login approved" + }, + "userEmailMissing": { + "message": "User email missing" + }, + "deviceTrusted": { + "message": "Device trusted" + }, + "inputRequired": { + "message": "Input is required." + }, + "required": { + "message": "required" + }, + "search": { + "message": "Search" + }, + "inputMinLength": { + "message": "Input must be at least $COUNT$ characters long.", + "placeholders": { + "count": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxLength": { + "message": "Input must not exceed $COUNT$ characters in length.", + "placeholders": { + "count": { + "content": "$1", + "example": "20" + } + } + }, + "inputForbiddenCharacters": { + "message": "The following characters are not allowed: $CHARACTERS$", + "placeholders": { + "characters": { + "content": "$1", + "example": "@, #, $, %" + } + } + }, + "inputMinValue": { + "message": "Input value must be at least $MIN$.", + "placeholders": { + "min": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxValue": { + "message": "Input value must not exceed $MAX$.", + "placeholders": { + "max": { + "content": "$1", + "example": "100" + } + } + }, + "multipleInputEmails": { + "message": "1 or more emails are invalid" + }, + "inputTrimValidator": { + "message": "Input must not contain only whitespace.", + "description": "Notification to inform the user that a form's input can't contain only whitespace." + }, + "inputEmail": { + "message": "Input is not an email address." + }, + "fieldsNeedAttention": { + "message": "$COUNT$ field(s) above need your attention.", + "placeholders": { + "count": { + "content": "$1", + "example": "4" + } + } + }, + "selectPlaceholder": { + "message": "-- Select --" + }, + "multiSelectPlaceholder": { + "message": "-- Type to filter --" + }, + "multiSelectLoading": { + "message": "Retrieving options..." + }, + "multiSelectNotFound": { + "message": "No items found" + }, + "multiSelectClearAll": { + "message": "Clear all" + }, + "plusNMore": { + "message": "+ $QUANTITY$ more", + "placeholders": { + "quantity": { + "content": "$1", + "example": "5" + } + } + }, + "submenu": { + "message": "Submenu" + }, + "toggleCollapse": { + "message": "Toggle collapse", + "description": "Toggling an expand/collapse state." } } diff --git a/apps/browser/src/_locales/hr/messages.json b/apps/browser/src/_locales/hr/messages.json index 3b01d015d10..db0fefbbffb 100644 --- a/apps/browser/src/_locales/hr/messages.json +++ b/apps/browser/src/_locales/hr/messages.json @@ -338,6 +338,9 @@ "other": { "message": "Ostalo" }, + "unlockMethodNeededToChangeTimeoutActionDesc": { + "message": "Set up an unlock method to change your vault timeout action." + }, "rateExtension": { "message": "Ocijeni proširenje" }, @@ -630,6 +633,12 @@ "notificationChangeSave": { "message": "Ažuriraj" }, + "notificationUnlockDesc": { + "message": "Unlock your Bitwarden vault to complete the auto-fill request." + }, + "notificationUnlock": { + "message": "Unlock" + }, "enableContextMenuItem": { "message": "Prikaži opcije kotekstualnog izbornika" }, @@ -786,8 +795,8 @@ "ppremiumSignUpStorage": { "message": "1 GB šifriranog prostora za pohranu podataka." }, - "ppremiumSignUpTwoStep": { - "message": "Dodatne mogućnosti za prijavu dvostrukom autentifikacijom kao što su YubiKey, FIDO U2F i Duo." + "premiumSignUpTwoStepOptions": { + "message": "Proprietary two-step login options such as YubiKey and Duo." }, "ppremiumSignUpReports": { "message": "Higijenu lozinki, zdravlje računa i izvještaje o krađi podatak radi zaštite svojeg trezora." @@ -1440,9 +1449,6 @@ "restoreItem": { "message": "Vrati stavku" }, - "restoreItemConfirmation": { - "message": "Sigurno želiš vratiti ovu stavku?" - }, "restoredItem": { "message": "Stavka vraćena" }, @@ -1599,6 +1605,12 @@ "biometricsNotSupportedDesc": { "message": "Biometrija preglednika nije podržana na ovom uređaju." }, + "biometricsFailedTitle": { + "message": "Biometrics failed" + }, + "biometricsFailedDesc": { + "message": "Biometrics cannot be completed, consider using a master password or logging out. If this persists, please contact Bitwarden support." + }, "nativeMessaginPermissionErrorTitle": { "message": "Dopuštenje nije dano" }, @@ -2140,8 +2152,8 @@ "notificationSentDevice": { "message": "Obavijest je poslana na tvoj uređaj." }, - "logInInitiated": { - "message": "Pokrenuta prijava" + "loginInitiated": { + "message": "Login initiated" }, "exposedMasterPassword": { "message": "Ukradena glavna lozinka" @@ -2221,19 +2233,42 @@ } } }, - "region": { - "message": "Region" + "loggingInOn": { + "message": "Logging in on" }, "opensInANewWindow": { "message": "Opens in a new window" }, + "deviceApprovalRequired": { + "message": "Device approval required. Select an approval option below:" + }, + "rememberThisDevice": { + "message": "Remember this device" + }, + "uncheckIfPublicDevice": { + "message": "Uncheck if using a public device" + }, + "approveFromYourOtherDevice": { + "message": "Approve from your other device" + }, + "requestAdminApproval": { + "message": "Request admin approval" + }, + "approveWithMasterPassword": { + "message": "Approve with master password" + }, + "ssoIdentifierRequired": { + "message": "Organization SSO identifier is required." + }, "eu": { "message": "EU", "description": "European Union" }, - "us": { - "message": "US", - "description": "United States" + "usDomain": { + "message": "bitwarden.com" + }, + "euDomain": { + "message": "bitwarden.eu" }, "accessDenied": { "message": "Access denied. You do not have permission to view this page." @@ -2243,5 +2278,133 @@ }, "display": { "message": "Display" + }, + "accountSuccessfullyCreated": { + "message": "Account successfully created!" + }, + "adminApprovalRequested": { + "message": "Admin approval requested" + }, + "adminApprovalRequestSentToAdmins": { + "message": "Your request has been sent to your admin." + }, + "youWillBeNotifiedOnceApproved": { + "message": "You will be notified once approved." + }, + "troubleLoggingIn": { + "message": "Trouble logging in?" + }, + "loginApproved": { + "message": "Login approved" + }, + "userEmailMissing": { + "message": "User email missing" + }, + "deviceTrusted": { + "message": "Device trusted" + }, + "inputRequired": { + "message": "Input is required." + }, + "required": { + "message": "required" + }, + "search": { + "message": "Search" + }, + "inputMinLength": { + "message": "Input must be at least $COUNT$ characters long.", + "placeholders": { + "count": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxLength": { + "message": "Input must not exceed $COUNT$ characters in length.", + "placeholders": { + "count": { + "content": "$1", + "example": "20" + } + } + }, + "inputForbiddenCharacters": { + "message": "The following characters are not allowed: $CHARACTERS$", + "placeholders": { + "characters": { + "content": "$1", + "example": "@, #, $, %" + } + } + }, + "inputMinValue": { + "message": "Input value must be at least $MIN$.", + "placeholders": { + "min": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxValue": { + "message": "Input value must not exceed $MAX$.", + "placeholders": { + "max": { + "content": "$1", + "example": "100" + } + } + }, + "multipleInputEmails": { + "message": "1 or more emails are invalid" + }, + "inputTrimValidator": { + "message": "Input must not contain only whitespace.", + "description": "Notification to inform the user that a form's input can't contain only whitespace." + }, + "inputEmail": { + "message": "Input is not an email address." + }, + "fieldsNeedAttention": { + "message": "$COUNT$ field(s) above need your attention.", + "placeholders": { + "count": { + "content": "$1", + "example": "4" + } + } + }, + "selectPlaceholder": { + "message": "-- Select --" + }, + "multiSelectPlaceholder": { + "message": "-- Type to filter --" + }, + "multiSelectLoading": { + "message": "Retrieving options..." + }, + "multiSelectNotFound": { + "message": "No items found" + }, + "multiSelectClearAll": { + "message": "Clear all" + }, + "plusNMore": { + "message": "+ $QUANTITY$ more", + "placeholders": { + "quantity": { + "content": "$1", + "example": "5" + } + } + }, + "submenu": { + "message": "Submenu" + }, + "toggleCollapse": { + "message": "Toggle collapse", + "description": "Toggling an expand/collapse state." } } diff --git a/apps/browser/src/_locales/hu/messages.json b/apps/browser/src/_locales/hu/messages.json index e7b04d0b025..8bc89651d53 100644 --- a/apps/browser/src/_locales/hu/messages.json +++ b/apps/browser/src/_locales/hu/messages.json @@ -338,6 +338,9 @@ "other": { "message": "Egyéb" }, + "unlockMethodNeededToChangeTimeoutActionDesc": { + "message": "Állítsunk be egy feloldási módot a széf időkifutási műveletének módosításához." + }, "rateExtension": { "message": "Bővítmény értékelése" }, @@ -630,6 +633,12 @@ "notificationChangeSave": { "message": "Frissítés" }, + "notificationUnlockDesc": { + "message": "A Bitwarden széf feloldása az automatikus kitöltési kérés teljesítéséhez." + }, + "notificationUnlock": { + "message": "Feloldás" + }, "enableContextMenuItem": { "message": "Helyi menü opciók megjelenítése" }, @@ -786,8 +795,8 @@ "ppremiumSignUpStorage": { "message": "1 GB titkosított tárhely a fájlmellékleteknek." }, - "ppremiumSignUpTwoStep": { - "message": "További két lépcsős bejelentkezés lehetőségek, mint például YubiKey, FIDO U2F és Duo." + "premiumSignUpTwoStepOptions": { + "message": "Proprietary two-step login options such as YubiKey and Duo." }, "ppremiumSignUpReports": { "message": "Jelszó higiénia, fiók biztonság és adatszivárgási jelentések a széf biztonsága érdekében." @@ -1440,9 +1449,6 @@ "restoreItem": { "message": "Elem visszaállítása" }, - "restoreItemConfirmation": { - "message": "Biztosan visszaállításra kerüljön ezt az elem?" - }, "restoredItem": { "message": "Visszaállított elem" }, @@ -1599,6 +1605,12 @@ "biometricsNotSupportedDesc": { "message": "A böngésző biometrikus adatait ez az eszköz nem támogatja." }, + "biometricsFailedTitle": { + "message": "A biometria nem sikerült." + }, + "biometricsFailedDesc": { + "message": "A biometrikus adatokat nem lehet kitölteni, fontoljuk meg a mesterjelszó használatát vagy a kijelentkezést. Ha ez továbbra is fennáll, forduljunk a Bitwarden ügyfélszolgálatához." + }, "nativeMessaginPermissionErrorTitle": { "message": "A jogosultság nincs megadva." }, @@ -2140,7 +2152,7 @@ "notificationSentDevice": { "message": "Egy értesítés lett elküldve az eszközre." }, - "logInInitiated": { + "loginInitiated": { "message": "A bejelentkezés elindításra került." }, "exposedMasterPassword": { @@ -2221,19 +2233,42 @@ } } }, - "region": { - "message": "Régió" + "loggingInOn": { + "message": "Bejelentkezés:" }, "opensInANewWindow": { "message": "Megnyitás új ablakban" }, + "deviceApprovalRequired": { + "message": "Az eszköz jóváhagyása szükséges. Válasszunk egy jóváhagyási lehetőséget lentebb:" + }, + "rememberThisDevice": { + "message": "Eszköz megjegyzése" + }, + "uncheckIfPublicDevice": { + "message": "Töröljük a jelölést, ha nyilvános eszközt használunk." + }, + "approveFromYourOtherDevice": { + "message": "Jóváhagyás másik eszközzel" + }, + "requestAdminApproval": { + "message": "Adminisztrátori jóváhagyás kérés" + }, + "approveWithMasterPassword": { + "message": "Jóváhagyás mesterjelszóval" + }, + "ssoIdentifierRequired": { + "message": "A szervezeti SSO azonosító megadása szükséges." + }, "eu": { "message": "EU", "description": "European Union" }, - "us": { - "message": "US", - "description": "United States" + "usDomain": { + "message": "bitwarden.com" + }, + "euDomain": { + "message": "bitwarden.eu" }, "accessDenied": { "message": "A hozzáférés megtagadásra került. Nincs jogosultság az oldal megtekintésére." @@ -2243,5 +2278,133 @@ }, "display": { "message": "Megjelenítés" + }, + "accountSuccessfullyCreated": { + "message": "A fiók sikeresen létrehozásra került." + }, + "adminApprovalRequested": { + "message": "Adminisztrátori jóváhagyás kérés történt" + }, + "adminApprovalRequestSentToAdmins": { + "message": "A kérés elküldésre került az adminisztrátornak." + }, + "youWillBeNotifiedOnceApproved": { + "message": "A jóváhagyás után értesítés érkezik." + }, + "troubleLoggingIn": { + "message": "Probléma van a bejelentkezéssel?" + }, + "loginApproved": { + "message": "A bejelentkezés jóváhagyásra került." + }, + "userEmailMissing": { + "message": "A felhasználói email cím hiányzik." + }, + "deviceTrusted": { + "message": "Az eszköz megbízható." + }, + "inputRequired": { + "message": "Az adatbevitel kötelező." + }, + "required": { + "message": "kötelező" + }, + "search": { + "message": "Keresés" + }, + "inputMinLength": { + "message": "A bevitel legyen legalább $COUNT$ karakter hosszú.", + "placeholders": { + "count": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxLength": { + "message": "A bevitel nem haladhatja meg $COUNT$ karakter hosszt.", + "placeholders": { + "count": { + "content": "$1", + "example": "20" + } + } + }, + "inputForbiddenCharacters": { + "message": "A következő karakterek nem engedélyezettek: $CHARACTERS$", + "placeholders": { + "characters": { + "content": "$1", + "example": "@, #, $, %" + } + } + }, + "inputMinValue": { + "message": "A beviteli érték legyen legalább $MIN$.", + "placeholders": { + "min": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxValue": { + "message": "A beviteli érték ne haladja meg $MAX$ értéket.", + "placeholders": { + "max": { + "content": "$1", + "example": "100" + } + } + }, + "multipleInputEmails": { + "message": "1 vagy több email cím érvénytelen." + }, + "inputTrimValidator": { + "message": "A bevitel nem tartalmazhat csak fehér szóköz karaktert.", + "description": "Notification to inform the user that a form's input can't contain only whitespace." + }, + "inputEmail": { + "message": "Az megadott bevitel nem email cím." + }, + "fieldsNeedAttention": { + "message": "$COUNT$ mező fentebb figyelmet érdemel.", + "placeholders": { + "count": { + "content": "$1", + "example": "4" + } + } + }, + "selectPlaceholder": { + "message": "-- Választás --" + }, + "multiSelectPlaceholder": { + "message": "-- Gépelés a szűréshez --" + }, + "multiSelectLoading": { + "message": "Az opciók beolvasása folyamatban can..." + }, + "multiSelectNotFound": { + "message": "Nem található elem." + }, + "multiSelectClearAll": { + "message": "Összes törlése" + }, + "plusNMore": { + "message": "+ $QUANTITY$ további", + "placeholders": { + "quantity": { + "content": "$1", + "example": "5" + } + } + }, + "submenu": { + "message": "Almenü" + }, + "toggleCollapse": { + "message": "Összezárás váltás", + "description": "Toggling an expand/collapse state." } } diff --git a/apps/browser/src/_locales/id/messages.json b/apps/browser/src/_locales/id/messages.json index 84c3938f097..d8f6698f4ce 100644 --- a/apps/browser/src/_locales/id/messages.json +++ b/apps/browser/src/_locales/id/messages.json @@ -338,6 +338,9 @@ "other": { "message": "Lainnya" }, + "unlockMethodNeededToChangeTimeoutActionDesc": { + "message": "Set up an unlock method to change your vault timeout action." + }, "rateExtension": { "message": "Nilai Ekstensi" }, @@ -630,6 +633,12 @@ "notificationChangeSave": { "message": "Iya, Perbarui Sekarang" }, + "notificationUnlockDesc": { + "message": "Unlock your Bitwarden vault to complete the auto-fill request." + }, + "notificationUnlock": { + "message": "Unlock" + }, "enableContextMenuItem": { "message": "Show context menu options" }, @@ -786,8 +795,8 @@ "ppremiumSignUpStorage": { "message": "1 GB penyimpanan berkas yang dienkripsi." }, - "ppremiumSignUpTwoStep": { - "message": "Pilihan info masuk dua langkah tambahan seperti YubiKey, FIDO U2F, dan Duo." + "premiumSignUpTwoStepOptions": { + "message": "Proprietary two-step login options such as YubiKey and Duo." }, "ppremiumSignUpReports": { "message": "Kebersihan kata sandi, kesehatan akun, dan laporan kebocoran data untuk tetap menjaga keamanan brankas Anda." @@ -1440,9 +1449,6 @@ "restoreItem": { "message": "Pulihkan Item" }, - "restoreItemConfirmation": { - "message": "Apakah Anda yakin ingin memulihkan item ini?" - }, "restoredItem": { "message": "Item Yang Dipulihkan" }, @@ -1599,6 +1605,12 @@ "biometricsNotSupportedDesc": { "message": "Biometrik peramban tidak didukung di perangkat ini." }, + "biometricsFailedTitle": { + "message": "Biometrics failed" + }, + "biometricsFailedDesc": { + "message": "Biometrics cannot be completed, consider using a master password or logging out. If this persists, please contact Bitwarden support." + }, "nativeMessaginPermissionErrorTitle": { "message": "Izin tidak diberikan" }, @@ -2140,8 +2152,8 @@ "notificationSentDevice": { "message": "A notification has been sent to your device." }, - "logInInitiated": { - "message": "Log in initiated" + "loginInitiated": { + "message": "Login initiated" }, "exposedMasterPassword": { "message": "Exposed Master Password" @@ -2221,19 +2233,42 @@ } } }, - "region": { - "message": "Region" + "loggingInOn": { + "message": "Logging in on" }, "opensInANewWindow": { "message": "Opens in a new window" }, + "deviceApprovalRequired": { + "message": "Device approval required. Select an approval option below:" + }, + "rememberThisDevice": { + "message": "Remember this device" + }, + "uncheckIfPublicDevice": { + "message": "Uncheck if using a public device" + }, + "approveFromYourOtherDevice": { + "message": "Approve from your other device" + }, + "requestAdminApproval": { + "message": "Request admin approval" + }, + "approveWithMasterPassword": { + "message": "Approve with master password" + }, + "ssoIdentifierRequired": { + "message": "Organization SSO identifier is required." + }, "eu": { "message": "EU", "description": "European Union" }, - "us": { - "message": "US", - "description": "United States" + "usDomain": { + "message": "bitwarden.com" + }, + "euDomain": { + "message": "bitwarden.eu" }, "accessDenied": { "message": "Access denied. You do not have permission to view this page." @@ -2243,5 +2278,133 @@ }, "display": { "message": "Display" + }, + "accountSuccessfullyCreated": { + "message": "Account successfully created!" + }, + "adminApprovalRequested": { + "message": "Admin approval requested" + }, + "adminApprovalRequestSentToAdmins": { + "message": "Your request has been sent to your admin." + }, + "youWillBeNotifiedOnceApproved": { + "message": "You will be notified once approved." + }, + "troubleLoggingIn": { + "message": "Trouble logging in?" + }, + "loginApproved": { + "message": "Login approved" + }, + "userEmailMissing": { + "message": "User email missing" + }, + "deviceTrusted": { + "message": "Device trusted" + }, + "inputRequired": { + "message": "Input is required." + }, + "required": { + "message": "required" + }, + "search": { + "message": "Search" + }, + "inputMinLength": { + "message": "Input must be at least $COUNT$ characters long.", + "placeholders": { + "count": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxLength": { + "message": "Input must not exceed $COUNT$ characters in length.", + "placeholders": { + "count": { + "content": "$1", + "example": "20" + } + } + }, + "inputForbiddenCharacters": { + "message": "The following characters are not allowed: $CHARACTERS$", + "placeholders": { + "characters": { + "content": "$1", + "example": "@, #, $, %" + } + } + }, + "inputMinValue": { + "message": "Input value must be at least $MIN$.", + "placeholders": { + "min": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxValue": { + "message": "Input value must not exceed $MAX$.", + "placeholders": { + "max": { + "content": "$1", + "example": "100" + } + } + }, + "multipleInputEmails": { + "message": "1 or more emails are invalid" + }, + "inputTrimValidator": { + "message": "Input must not contain only whitespace.", + "description": "Notification to inform the user that a form's input can't contain only whitespace." + }, + "inputEmail": { + "message": "Input is not an email address." + }, + "fieldsNeedAttention": { + "message": "$COUNT$ field(s) above need your attention.", + "placeholders": { + "count": { + "content": "$1", + "example": "4" + } + } + }, + "selectPlaceholder": { + "message": "-- Select --" + }, + "multiSelectPlaceholder": { + "message": "-- Type to filter --" + }, + "multiSelectLoading": { + "message": "Retrieving options..." + }, + "multiSelectNotFound": { + "message": "No items found" + }, + "multiSelectClearAll": { + "message": "Clear all" + }, + "plusNMore": { + "message": "+ $QUANTITY$ more", + "placeholders": { + "quantity": { + "content": "$1", + "example": "5" + } + } + }, + "submenu": { + "message": "Submenu" + }, + "toggleCollapse": { + "message": "Toggle collapse", + "description": "Toggling an expand/collapse state." } } diff --git a/apps/browser/src/_locales/it/messages.json b/apps/browser/src/_locales/it/messages.json index 53552ae2ffc..e17ea019409 100644 --- a/apps/browser/src/_locales/it/messages.json +++ b/apps/browser/src/_locales/it/messages.json @@ -338,6 +338,9 @@ "other": { "message": "Altro" }, + "unlockMethodNeededToChangeTimeoutActionDesc": { + "message": "Imposta un metodo di sblocco per modificare l'azione timeout cassaforte." + }, "rateExtension": { "message": "Valuta l'estensione" }, @@ -630,6 +633,12 @@ "notificationChangeSave": { "message": "Aggiorna" }, + "notificationUnlockDesc": { + "message": "Sblocca la tua cassaforte di Bitwarden per completare la richiesta di riempimento automatico." + }, + "notificationUnlock": { + "message": "Sblocca" + }, "enableContextMenuItem": { "message": "Mostra opzioni nel menu contestuale" }, @@ -786,8 +795,8 @@ "ppremiumSignUpStorage": { "message": "1 GB di spazio di archiviazione criptato per gli allegati." }, - "ppremiumSignUpTwoStep": { - "message": "Più opzioni di verifica in due passaggi come YubiKey, FIDO U2F, e Duo." + "premiumSignUpTwoStepOptions": { + "message": "Proprietary two-step login options such as YubiKey and Duo." }, "ppremiumSignUpReports": { "message": "Sicurezza delle password, integrità dell'account, e rapporti su violazioni di dati per mantenere sicura la tua cassaforte." @@ -1440,9 +1449,6 @@ "restoreItem": { "message": "Ripristina elemento" }, - "restoreItemConfirmation": { - "message": "Sei sicuro di voler ripristinare questo elemento?" - }, "restoredItem": { "message": "Elemento ripristinato" }, @@ -1599,6 +1605,12 @@ "biometricsNotSupportedDesc": { "message": "L'autenticazione biometrica del browser non è supportata su questo dispositivo." }, + "biometricsFailedTitle": { + "message": "Autenticazione biometrica fallita" + }, + "biometricsFailedDesc": { + "message": "L'autenticazione biometrica non può essere completata, prova a usare una password principale o a uscire. Se il problema persiste, contatta l'assistenza di Bitwarden." + }, "nativeMessaginPermissionErrorTitle": { "message": "Permesso non fornito" }, @@ -2140,8 +2152,8 @@ "notificationSentDevice": { "message": "Una notifica è stata inviata al tuo dispositivo." }, - "logInInitiated": { - "message": "Login avviato" + "loginInitiated": { + "message": "Accesso avviato" }, "exposedMasterPassword": { "message": "Password principale violata" @@ -2221,19 +2233,42 @@ } } }, - "region": { - "message": "Regione" + "loggingInOn": { + "message": "Accedendo su" }, "opensInANewWindow": { "message": "Si apre in una nuova finestra" }, + "deviceApprovalRequired": { + "message": "Approvazione del dispositivo obbligatoria. Seleziona un'opzione di approvazione:" + }, + "rememberThisDevice": { + "message": "Ricorda questo dispositivo" + }, + "uncheckIfPublicDevice": { + "message": "Deseleziona se stai usando un dispositivo pubblico" + }, + "approveFromYourOtherDevice": { + "message": "Approva dall'altro tuo dispositivo" + }, + "requestAdminApproval": { + "message": "Richiedi approvazione dell'amministratore" + }, + "approveWithMasterPassword": { + "message": "Approva con password principale" + }, + "ssoIdentifierRequired": { + "message": "Identificatore SSO dell'organizzazione obbligatorio." + }, "eu": { - "message": "UE", + "message": "EU", "description": "European Union" }, - "us": { - "message": "US", - "description": "United States" + "usDomain": { + "message": "bitwarden.com" + }, + "euDomain": { + "message": "bitwarden.eu" }, "accessDenied": { "message": "Accesso negato. Non hai i permessi necessari per visualizzare questa pagina." @@ -2243,5 +2278,133 @@ }, "display": { "message": "Schermo" + }, + "accountSuccessfullyCreated": { + "message": "Account creato!" + }, + "adminApprovalRequested": { + "message": "Approvazione dell'amministratore richiesta" + }, + "adminApprovalRequestSentToAdmins": { + "message": "La tua richiesta è stata inviata al tuo amministratore." + }, + "youWillBeNotifiedOnceApproved": { + "message": "Riceverai una notifica una volta approvato." + }, + "troubleLoggingIn": { + "message": "Problemi ad accedere?" + }, + "loginApproved": { + "message": "Accesso approvato" + }, + "userEmailMissing": { + "message": "Email utente mancante" + }, + "deviceTrusted": { + "message": "Dispositivo fidato" + }, + "inputRequired": { + "message": "Input obbligatorio." + }, + "required": { + "message": "obbligatorio" + }, + "search": { + "message": "Cerca" + }, + "inputMinLength": { + "message": "L'input deve essere lungo almeno $COUNT$ caratteri.", + "placeholders": { + "count": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxLength": { + "message": "L'input non deve essere più lungo di $COUNT$ caratteri.", + "placeholders": { + "count": { + "content": "$1", + "example": "20" + } + } + }, + "inputForbiddenCharacters": { + "message": "Questi caratteri non sono permessi: $CHARACTERS$", + "placeholders": { + "characters": { + "content": "$1", + "example": "@, #, $, %" + } + } + }, + "inputMinValue": { + "message": "Il valore immesso deve essere almeno $MIN$.", + "placeholders": { + "min": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxValue": { + "message": "Il valore immesso non deve superare $MAX$.", + "placeholders": { + "max": { + "content": "$1", + "example": "100" + } + } + }, + "multipleInputEmails": { + "message": "Una o più email non sono valide" + }, + "inputTrimValidator": { + "message": "L'input non può contenere solo spazi.", + "description": "Notification to inform the user that a form's input can't contain only whitespace." + }, + "inputEmail": { + "message": "L'input non è un indirizzo email." + }, + "fieldsNeedAttention": { + "message": "$COUNT$ campi qui sopra richiedono la tua attenzione.", + "placeholders": { + "count": { + "content": "$1", + "example": "4" + } + } + }, + "selectPlaceholder": { + "message": "-- Seleziona --" + }, + "multiSelectPlaceholder": { + "message": "-- Digita per filtrare --" + }, + "multiSelectLoading": { + "message": "Ottenendo opzioni..." + }, + "multiSelectNotFound": { + "message": "Nessun elemento trovato" + }, + "multiSelectClearAll": { + "message": "Cancella tutto" + }, + "plusNMore": { + "message": "+$QUANTITY$ in più", + "placeholders": { + "quantity": { + "content": "$1", + "example": "5" + } + } + }, + "submenu": { + "message": "Sottomenu" + }, + "toggleCollapse": { + "message": "Comprimi/espandi", + "description": "Toggling an expand/collapse state." } } diff --git a/apps/browser/src/_locales/ja/messages.json b/apps/browser/src/_locales/ja/messages.json index 3bfcffd034c..e979237988c 100644 --- a/apps/browser/src/_locales/ja/messages.json +++ b/apps/browser/src/_locales/ja/messages.json @@ -338,6 +338,9 @@ "other": { "message": "その他" }, + "unlockMethodNeededToChangeTimeoutActionDesc": { + "message": "保管庫のタイムアウト動作を変更するには、ロック解除方法を設定してください。" + }, "rateExtension": { "message": "拡張機能の評価" }, @@ -630,6 +633,12 @@ "notificationChangeSave": { "message": "今すぐ更新する" }, + "notificationUnlockDesc": { + "message": "Bitwarden 保管庫をロック解除して自動入力リクエストを完了してください。" + }, + "notificationUnlock": { + "message": "ロック解除" + }, "enableContextMenuItem": { "message": "コンテキストメニューオプションを表示" }, @@ -786,8 +795,8 @@ "ppremiumSignUpStorage": { "message": "1GB の暗号化されたファイルストレージ" }, - "ppremiumSignUpTwoStep": { - "message": "YubiKey、FIDO U2F、Duoなどの追加の2段階認証ログインオプション" + "premiumSignUpTwoStepOptions": { + "message": "YubiKey、Duo などのプロプライエタリな2段階認証オプション。" }, "ppremiumSignUpReports": { "message": "保管庫を安全に保つための、パスワードやアカウントの健全性、データ侵害に関するレポート" @@ -1440,9 +1449,6 @@ "restoreItem": { "message": "アイテムをリストア" }, - "restoreItemConfirmation": { - "message": "このアイテムをリストアしますか?" - }, "restoredItem": { "message": "リストアされたアイテム" }, @@ -1599,6 +1605,12 @@ "biometricsNotSupportedDesc": { "message": "このデバイスではブラウザの生体認証に対応していません。" }, + "biometricsFailedTitle": { + "message": "生体認証に失敗しました" + }, + "biometricsFailedDesc": { + "message": "生体認証を完了できません。マスターパスワードを使うかログアウトしてください。それでも直らない場合は、Bitwarden サポートまでお問い合わせください。" + }, "nativeMessaginPermissionErrorTitle": { "message": "権限が提供されていません" }, @@ -2140,7 +2152,7 @@ "notificationSentDevice": { "message": "デバイスに通知を送信しました。" }, - "logInInitiated": { + "loginInitiated": { "message": "ログイン開始" }, "exposedMasterPassword": { @@ -2221,19 +2233,42 @@ } } }, - "region": { - "message": "リージョン" + "loggingInOn": { + "message": "ログイン先" }, "opensInANewWindow": { "message": "新しいウィンドウで開く" }, + "deviceApprovalRequired": { + "message": "デバイスの承認が必要です。以下から承認オプションを選択してください:" + }, + "rememberThisDevice": { + "message": "このデバイスを記憶する" + }, + "uncheckIfPublicDevice": { + "message": "パブリックデバイスを使用している場合はチェックしないでください" + }, + "approveFromYourOtherDevice": { + "message": "他のデバイスから承認する" + }, + "requestAdminApproval": { + "message": "管理者の承認を要求する" + }, + "approveWithMasterPassword": { + "message": "マスターパスワードで承認する" + }, + "ssoIdentifierRequired": { + "message": "組織の SSO ID が必要です。" + }, "eu": { "message": "EU", "description": "European Union" }, - "us": { - "message": "米国", - "description": "United States" + "usDomain": { + "message": "bitwarden.com" + }, + "euDomain": { + "message": "bitwarden.eu" }, "accessDenied": { "message": "アクセスが拒否されました。このページを表示する権限がありません。" @@ -2243,5 +2278,133 @@ }, "display": { "message": "表示" + }, + "accountSuccessfullyCreated": { + "message": "アカウントを正常に作成しました!" + }, + "adminApprovalRequested": { + "message": "管理者の承認を要求しました" + }, + "adminApprovalRequestSentToAdmins": { + "message": "要求を管理者に送信しました。" + }, + "youWillBeNotifiedOnceApproved": { + "message": "承認されると通知されます。 " + }, + "troubleLoggingIn": { + "message": "ログインできない場合" + }, + "loginApproved": { + "message": "ログインが承認されました" + }, + "userEmailMissing": { + "message": "ユーザーのメールアドレスがありません" + }, + "deviceTrusted": { + "message": "信頼されたデバイス" + }, + "inputRequired": { + "message": "入力が必要です。" + }, + "required": { + "message": "必須" + }, + "search": { + "message": "検索" + }, + "inputMinLength": { + "message": "$COUNT$ 文字以上でなければなりません。", + "placeholders": { + "count": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxLength": { + "message": "$COUNT$ 文字を超えてはいけません。", + "placeholders": { + "count": { + "content": "$1", + "example": "20" + } + } + }, + "inputForbiddenCharacters": { + "message": "次の文字は許可されていません: $CHARACTERS$", + "placeholders": { + "characters": { + "content": "$1", + "example": "@, #, $, %" + } + } + }, + "inputMinValue": { + "message": "入力値は少なくとも$MIN$桁でなければなりません。", + "placeholders": { + "min": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxValue": { + "message": "入力値は$MAX$桁を超えてはいけません。", + "placeholders": { + "max": { + "content": "$1", + "example": "100" + } + } + }, + "multipleInputEmails": { + "message": "1つ以上のメールアドレスが無効です" + }, + "inputTrimValidator": { + "message": "値を空白のみにしないでください。", + "description": "Notification to inform the user that a form's input can't contain only whitespace." + }, + "inputEmail": { + "message": "入力したものはメールアドレスではありません。" + }, + "fieldsNeedAttention": { + "message": "上記の $COUNT$ 点を確認してください。", + "placeholders": { + "count": { + "content": "$1", + "example": "4" + } + } + }, + "selectPlaceholder": { + "message": "-- 選択 --" + }, + "multiSelectPlaceholder": { + "message": "-- 入力して絞り込み --" + }, + "multiSelectLoading": { + "message": "オプションを取得中..." + }, + "multiSelectNotFound": { + "message": "アイテムが見つかりません" + }, + "multiSelectClearAll": { + "message": "すべてクリア" + }, + "plusNMore": { + "message": "+ $QUANTITY$ 個以上", + "placeholders": { + "quantity": { + "content": "$1", + "example": "5" + } + } + }, + "submenu": { + "message": "サブメニュー" + }, + "toggleCollapse": { + "message": "開く/閉じる", + "description": "Toggling an expand/collapse state." } } diff --git a/apps/browser/src/_locales/ka/messages.json b/apps/browser/src/_locales/ka/messages.json index e13a6c5e038..a619c47eaf4 100644 --- a/apps/browser/src/_locales/ka/messages.json +++ b/apps/browser/src/_locales/ka/messages.json @@ -338,6 +338,9 @@ "other": { "message": "სხვა" }, + "unlockMethodNeededToChangeTimeoutActionDesc": { + "message": "Set up an unlock method to change your vault timeout action." + }, "rateExtension": { "message": "Rate the extension" }, @@ -630,6 +633,12 @@ "notificationChangeSave": { "message": "Update" }, + "notificationUnlockDesc": { + "message": "Unlock your Bitwarden vault to complete the auto-fill request." + }, + "notificationUnlock": { + "message": "Unlock" + }, "enableContextMenuItem": { "message": "Show context menu options" }, @@ -786,8 +795,8 @@ "ppremiumSignUpStorage": { "message": "1 GB encrypted storage for file attachments." }, - "ppremiumSignUpTwoStep": { - "message": "Additional two-step login options such as YubiKey, FIDO U2F, and Duo." + "premiumSignUpTwoStepOptions": { + "message": "Proprietary two-step login options such as YubiKey and Duo." }, "ppremiumSignUpReports": { "message": "Password hygiene, account health, and data breach reports to keep your vault safe." @@ -1440,9 +1449,6 @@ "restoreItem": { "message": "Restore item" }, - "restoreItemConfirmation": { - "message": "Are you sure you want to restore this item?" - }, "restoredItem": { "message": "Item restored" }, @@ -1599,6 +1605,12 @@ "biometricsNotSupportedDesc": { "message": "Browser biometrics is not supported on this device." }, + "biometricsFailedTitle": { + "message": "Biometrics failed" + }, + "biometricsFailedDesc": { + "message": "Biometrics cannot be completed, consider using a master password or logging out. If this persists, please contact Bitwarden support." + }, "nativeMessaginPermissionErrorTitle": { "message": "Permission not provided" }, @@ -2140,8 +2152,8 @@ "notificationSentDevice": { "message": "A notification has been sent to your device." }, - "logInInitiated": { - "message": "Log in initiated" + "loginInitiated": { + "message": "Login initiated" }, "exposedMasterPassword": { "message": "Exposed Master Password" @@ -2221,19 +2233,42 @@ } } }, - "region": { - "message": "Region" + "loggingInOn": { + "message": "Logging in on" }, "opensInANewWindow": { "message": "Opens in a new window" }, + "deviceApprovalRequired": { + "message": "Device approval required. Select an approval option below:" + }, + "rememberThisDevice": { + "message": "Remember this device" + }, + "uncheckIfPublicDevice": { + "message": "Uncheck if using a public device" + }, + "approveFromYourOtherDevice": { + "message": "Approve from your other device" + }, + "requestAdminApproval": { + "message": "Request admin approval" + }, + "approveWithMasterPassword": { + "message": "Approve with master password" + }, + "ssoIdentifierRequired": { + "message": "Organization SSO identifier is required." + }, "eu": { "message": "EU", "description": "European Union" }, - "us": { - "message": "US", - "description": "United States" + "usDomain": { + "message": "bitwarden.com" + }, + "euDomain": { + "message": "bitwarden.eu" }, "accessDenied": { "message": "Access denied. You do not have permission to view this page." @@ -2243,5 +2278,133 @@ }, "display": { "message": "Display" + }, + "accountSuccessfullyCreated": { + "message": "Account successfully created!" + }, + "adminApprovalRequested": { + "message": "Admin approval requested" + }, + "adminApprovalRequestSentToAdmins": { + "message": "Your request has been sent to your admin." + }, + "youWillBeNotifiedOnceApproved": { + "message": "You will be notified once approved." + }, + "troubleLoggingIn": { + "message": "Trouble logging in?" + }, + "loginApproved": { + "message": "Login approved" + }, + "userEmailMissing": { + "message": "User email missing" + }, + "deviceTrusted": { + "message": "Device trusted" + }, + "inputRequired": { + "message": "Input is required." + }, + "required": { + "message": "required" + }, + "search": { + "message": "Search" + }, + "inputMinLength": { + "message": "Input must be at least $COUNT$ characters long.", + "placeholders": { + "count": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxLength": { + "message": "Input must not exceed $COUNT$ characters in length.", + "placeholders": { + "count": { + "content": "$1", + "example": "20" + } + } + }, + "inputForbiddenCharacters": { + "message": "The following characters are not allowed: $CHARACTERS$", + "placeholders": { + "characters": { + "content": "$1", + "example": "@, #, $, %" + } + } + }, + "inputMinValue": { + "message": "Input value must be at least $MIN$.", + "placeholders": { + "min": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxValue": { + "message": "Input value must not exceed $MAX$.", + "placeholders": { + "max": { + "content": "$1", + "example": "100" + } + } + }, + "multipleInputEmails": { + "message": "1 or more emails are invalid" + }, + "inputTrimValidator": { + "message": "Input must not contain only whitespace.", + "description": "Notification to inform the user that a form's input can't contain only whitespace." + }, + "inputEmail": { + "message": "Input is not an email address." + }, + "fieldsNeedAttention": { + "message": "$COUNT$ field(s) above need your attention.", + "placeholders": { + "count": { + "content": "$1", + "example": "4" + } + } + }, + "selectPlaceholder": { + "message": "-- Select --" + }, + "multiSelectPlaceholder": { + "message": "-- Type to filter --" + }, + "multiSelectLoading": { + "message": "Retrieving options..." + }, + "multiSelectNotFound": { + "message": "No items found" + }, + "multiSelectClearAll": { + "message": "Clear all" + }, + "plusNMore": { + "message": "+ $QUANTITY$ more", + "placeholders": { + "quantity": { + "content": "$1", + "example": "5" + } + } + }, + "submenu": { + "message": "Submenu" + }, + "toggleCollapse": { + "message": "Toggle collapse", + "description": "Toggling an expand/collapse state." } } diff --git a/apps/browser/src/_locales/km/messages.json b/apps/browser/src/_locales/km/messages.json index 9e46b55f19e..6aea5876eac 100644 --- a/apps/browser/src/_locales/km/messages.json +++ b/apps/browser/src/_locales/km/messages.json @@ -338,6 +338,9 @@ "other": { "message": "Other" }, + "unlockMethodNeededToChangeTimeoutActionDesc": { + "message": "Set up an unlock method to change your vault timeout action." + }, "rateExtension": { "message": "Rate the extension" }, @@ -630,6 +633,12 @@ "notificationChangeSave": { "message": "Update" }, + "notificationUnlockDesc": { + "message": "Unlock your Bitwarden vault to complete the auto-fill request." + }, + "notificationUnlock": { + "message": "Unlock" + }, "enableContextMenuItem": { "message": "Show context menu options" }, @@ -786,8 +795,8 @@ "ppremiumSignUpStorage": { "message": "1 GB encrypted storage for file attachments." }, - "ppremiumSignUpTwoStep": { - "message": "Additional two-step login options such as YubiKey, FIDO U2F, and Duo." + "premiumSignUpTwoStepOptions": { + "message": "Proprietary two-step login options such as YubiKey and Duo." }, "ppremiumSignUpReports": { "message": "Password hygiene, account health, and data breach reports to keep your vault safe." @@ -1440,9 +1449,6 @@ "restoreItem": { "message": "Restore item" }, - "restoreItemConfirmation": { - "message": "Are you sure you want to restore this item?" - }, "restoredItem": { "message": "Item restored" }, @@ -1599,6 +1605,12 @@ "biometricsNotSupportedDesc": { "message": "Browser biometrics is not supported on this device." }, + "biometricsFailedTitle": { + "message": "Biometrics failed" + }, + "biometricsFailedDesc": { + "message": "Biometrics cannot be completed, consider using a master password or logging out. If this persists, please contact Bitwarden support." + }, "nativeMessaginPermissionErrorTitle": { "message": "Permission not provided" }, @@ -2140,8 +2152,8 @@ "notificationSentDevice": { "message": "A notification has been sent to your device." }, - "logInInitiated": { - "message": "Log in initiated" + "loginInitiated": { + "message": "Login initiated" }, "exposedMasterPassword": { "message": "Exposed Master Password" @@ -2221,19 +2233,42 @@ } } }, - "region": { - "message": "Region" + "loggingInOn": { + "message": "Logging in on" }, "opensInANewWindow": { "message": "Opens in a new window" }, + "deviceApprovalRequired": { + "message": "Device approval required. Select an approval option below:" + }, + "rememberThisDevice": { + "message": "Remember this device" + }, + "uncheckIfPublicDevice": { + "message": "Uncheck if using a public device" + }, + "approveFromYourOtherDevice": { + "message": "Approve from your other device" + }, + "requestAdminApproval": { + "message": "Request admin approval" + }, + "approveWithMasterPassword": { + "message": "Approve with master password" + }, + "ssoIdentifierRequired": { + "message": "Organization SSO identifier is required." + }, "eu": { "message": "EU", "description": "European Union" }, - "us": { - "message": "US", - "description": "United States" + "usDomain": { + "message": "bitwarden.com" + }, + "euDomain": { + "message": "bitwarden.eu" }, "accessDenied": { "message": "Access denied. You do not have permission to view this page." @@ -2243,5 +2278,133 @@ }, "display": { "message": "Display" + }, + "accountSuccessfullyCreated": { + "message": "Account successfully created!" + }, + "adminApprovalRequested": { + "message": "Admin approval requested" + }, + "adminApprovalRequestSentToAdmins": { + "message": "Your request has been sent to your admin." + }, + "youWillBeNotifiedOnceApproved": { + "message": "You will be notified once approved." + }, + "troubleLoggingIn": { + "message": "Trouble logging in?" + }, + "loginApproved": { + "message": "Login approved" + }, + "userEmailMissing": { + "message": "User email missing" + }, + "deviceTrusted": { + "message": "Device trusted" + }, + "inputRequired": { + "message": "Input is required." + }, + "required": { + "message": "required" + }, + "search": { + "message": "Search" + }, + "inputMinLength": { + "message": "Input must be at least $COUNT$ characters long.", + "placeholders": { + "count": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxLength": { + "message": "Input must not exceed $COUNT$ characters in length.", + "placeholders": { + "count": { + "content": "$1", + "example": "20" + } + } + }, + "inputForbiddenCharacters": { + "message": "The following characters are not allowed: $CHARACTERS$", + "placeholders": { + "characters": { + "content": "$1", + "example": "@, #, $, %" + } + } + }, + "inputMinValue": { + "message": "Input value must be at least $MIN$.", + "placeholders": { + "min": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxValue": { + "message": "Input value must not exceed $MAX$.", + "placeholders": { + "max": { + "content": "$1", + "example": "100" + } + } + }, + "multipleInputEmails": { + "message": "1 or more emails are invalid" + }, + "inputTrimValidator": { + "message": "Input must not contain only whitespace.", + "description": "Notification to inform the user that a form's input can't contain only whitespace." + }, + "inputEmail": { + "message": "Input is not an email address." + }, + "fieldsNeedAttention": { + "message": "$COUNT$ field(s) above need your attention.", + "placeholders": { + "count": { + "content": "$1", + "example": "4" + } + } + }, + "selectPlaceholder": { + "message": "-- Select --" + }, + "multiSelectPlaceholder": { + "message": "-- Type to filter --" + }, + "multiSelectLoading": { + "message": "Retrieving options..." + }, + "multiSelectNotFound": { + "message": "No items found" + }, + "multiSelectClearAll": { + "message": "Clear all" + }, + "plusNMore": { + "message": "+ $QUANTITY$ more", + "placeholders": { + "quantity": { + "content": "$1", + "example": "5" + } + } + }, + "submenu": { + "message": "Submenu" + }, + "toggleCollapse": { + "message": "Toggle collapse", + "description": "Toggling an expand/collapse state." } } diff --git a/apps/browser/src/_locales/kn/messages.json b/apps/browser/src/_locales/kn/messages.json index 9cbabce7942..fd01869139d 100644 --- a/apps/browser/src/_locales/kn/messages.json +++ b/apps/browser/src/_locales/kn/messages.json @@ -338,6 +338,9 @@ "other": { "message": "ಇತರೆ" }, + "unlockMethodNeededToChangeTimeoutActionDesc": { + "message": "Set up an unlock method to change your vault timeout action." + }, "rateExtension": { "message": "ವಿಸ್ತರಣೆಯನ್ನು ರೇಟ್ ಮಾಡಿ" }, @@ -630,6 +633,12 @@ "notificationChangeSave": { "message": "ಹೌದು, ಈಗ ನವೀಕರಿಸಿ" }, + "notificationUnlockDesc": { + "message": "Unlock your Bitwarden vault to complete the auto-fill request." + }, + "notificationUnlock": { + "message": "Unlock" + }, "enableContextMenuItem": { "message": "Show context menu options" }, @@ -786,8 +795,8 @@ "ppremiumSignUpStorage": { "message": "ಫೈಲ್ ಲಗತ್ತುಗಳಿಗಾಗಿ 1 ಜಿಬಿ ಎನ್‌ಕ್ರಿಪ್ಟ್ ಮಾಡಿದ ಸಂಗ್ರಹ." }, - "ppremiumSignUpTwoStep": { - "message": "ಹೆಚ್ಚುವರಿ ಎರಡು-ಹಂತದ ಲಾಗಿನ್ ಆಯ್ಕೆಗಳಾದ ಯೂಬಿಕೆ, ಎಫ್‌ಐಡಿಒ ಯು 2 ಎಫ್, ಮತ್ತು ಡ್ಯುವೋ." + "premiumSignUpTwoStepOptions": { + "message": "Proprietary two-step login options such as YubiKey and Duo." }, "ppremiumSignUpReports": { "message": "ನಿಮ್ಮ ವಾಲ್ಟ್ ಅನ್ನು ಸುರಕ್ಷಿತವಾಗಿರಿಸಲು ಪಾಸ್ವರ್ಡ್ ನೈರ್ಮಲ್ಯ, ಖಾತೆ ಆರೋಗ್ಯ ಮತ್ತು ಡೇಟಾ ಉಲ್ಲಂಘನೆ ವರದಿಗಳು." @@ -1440,9 +1449,6 @@ "restoreItem": { "message": "ಐಟಂ ಅನ್ನು ಮರುಸ್ಥಾಪಿಸಿ" }, - "restoreItemConfirmation": { - "message": "ಈ ಐಟಂ ಅನ್ನು ಮರುಸ್ಥಾಪಿಸಲು ನೀವು ಖಚಿತವಾಗಿ ಬಯಸುವಿರಾ?" - }, "restoredItem": { "message": "ಐಟಂ ಅನ್ನು ಮರುಸ್ಥಾಪಿಸಲಾಗಿದೆ" }, @@ -1599,6 +1605,12 @@ "biometricsNotSupportedDesc": { "message": "ಬ್ರೌಸರ್ ಬಯೋಮೆಟ್ರಿಕ್ಸ್ ಈ ಸಾಧನದಲ್ಲಿ ಬೆಂಬಲಿಸುವುದಿಲ್ಲ." }, + "biometricsFailedTitle": { + "message": "Biometrics failed" + }, + "biometricsFailedDesc": { + "message": "Biometrics cannot be completed, consider using a master password or logging out. If this persists, please contact Bitwarden support." + }, "nativeMessaginPermissionErrorTitle": { "message": "ಅನುಮತಿ ಒದಗಿಸಲಾಗಿಲ್ಲ" }, @@ -2140,8 +2152,8 @@ "notificationSentDevice": { "message": "A notification has been sent to your device." }, - "logInInitiated": { - "message": "Log in initiated" + "loginInitiated": { + "message": "Login initiated" }, "exposedMasterPassword": { "message": "Exposed Master Password" @@ -2221,19 +2233,42 @@ } } }, - "region": { - "message": "Region" + "loggingInOn": { + "message": "Logging in on" }, "opensInANewWindow": { "message": "Opens in a new window" }, + "deviceApprovalRequired": { + "message": "Device approval required. Select an approval option below:" + }, + "rememberThisDevice": { + "message": "Remember this device" + }, + "uncheckIfPublicDevice": { + "message": "Uncheck if using a public device" + }, + "approveFromYourOtherDevice": { + "message": "Approve from your other device" + }, + "requestAdminApproval": { + "message": "Request admin approval" + }, + "approveWithMasterPassword": { + "message": "Approve with master password" + }, + "ssoIdentifierRequired": { + "message": "Organization SSO identifier is required." + }, "eu": { "message": "EU", "description": "European Union" }, - "us": { - "message": "US", - "description": "United States" + "usDomain": { + "message": "bitwarden.com" + }, + "euDomain": { + "message": "bitwarden.eu" }, "accessDenied": { "message": "Access denied. You do not have permission to view this page." @@ -2243,5 +2278,133 @@ }, "display": { "message": "Display" + }, + "accountSuccessfullyCreated": { + "message": "Account successfully created!" + }, + "adminApprovalRequested": { + "message": "Admin approval requested" + }, + "adminApprovalRequestSentToAdmins": { + "message": "Your request has been sent to your admin." + }, + "youWillBeNotifiedOnceApproved": { + "message": "You will be notified once approved." + }, + "troubleLoggingIn": { + "message": "Trouble logging in?" + }, + "loginApproved": { + "message": "Login approved" + }, + "userEmailMissing": { + "message": "User email missing" + }, + "deviceTrusted": { + "message": "Device trusted" + }, + "inputRequired": { + "message": "Input is required." + }, + "required": { + "message": "required" + }, + "search": { + "message": "Search" + }, + "inputMinLength": { + "message": "Input must be at least $COUNT$ characters long.", + "placeholders": { + "count": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxLength": { + "message": "Input must not exceed $COUNT$ characters in length.", + "placeholders": { + "count": { + "content": "$1", + "example": "20" + } + } + }, + "inputForbiddenCharacters": { + "message": "The following characters are not allowed: $CHARACTERS$", + "placeholders": { + "characters": { + "content": "$1", + "example": "@, #, $, %" + } + } + }, + "inputMinValue": { + "message": "Input value must be at least $MIN$.", + "placeholders": { + "min": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxValue": { + "message": "Input value must not exceed $MAX$.", + "placeholders": { + "max": { + "content": "$1", + "example": "100" + } + } + }, + "multipleInputEmails": { + "message": "1 or more emails are invalid" + }, + "inputTrimValidator": { + "message": "Input must not contain only whitespace.", + "description": "Notification to inform the user that a form's input can't contain only whitespace." + }, + "inputEmail": { + "message": "Input is not an email address." + }, + "fieldsNeedAttention": { + "message": "$COUNT$ field(s) above need your attention.", + "placeholders": { + "count": { + "content": "$1", + "example": "4" + } + } + }, + "selectPlaceholder": { + "message": "-- Select --" + }, + "multiSelectPlaceholder": { + "message": "-- Type to filter --" + }, + "multiSelectLoading": { + "message": "Retrieving options..." + }, + "multiSelectNotFound": { + "message": "No items found" + }, + "multiSelectClearAll": { + "message": "Clear all" + }, + "plusNMore": { + "message": "+ $QUANTITY$ more", + "placeholders": { + "quantity": { + "content": "$1", + "example": "5" + } + } + }, + "submenu": { + "message": "Submenu" + }, + "toggleCollapse": { + "message": "Toggle collapse", + "description": "Toggling an expand/collapse state." } } diff --git a/apps/browser/src/_locales/ko/messages.json b/apps/browser/src/_locales/ko/messages.json index c23673320d1..f982332a503 100644 --- a/apps/browser/src/_locales/ko/messages.json +++ b/apps/browser/src/_locales/ko/messages.json @@ -338,6 +338,9 @@ "other": { "message": "기타" }, + "unlockMethodNeededToChangeTimeoutActionDesc": { + "message": "Set up an unlock method to change your vault timeout action." + }, "rateExtension": { "message": "확장 프로그램 평가" }, @@ -630,6 +633,12 @@ "notificationChangeSave": { "message": "예, 지금 변경하겠습니다." }, + "notificationUnlockDesc": { + "message": "Unlock your Bitwarden vault to complete the auto-fill request." + }, + "notificationUnlock": { + "message": "Unlock" + }, "enableContextMenuItem": { "message": "Show context menu options" }, @@ -786,8 +795,8 @@ "ppremiumSignUpStorage": { "message": "1GB의 암호화된 파일 저장소." }, - "ppremiumSignUpTwoStep": { - "message": "YubiKey나 FIDO U2F, Duo 등의 추가적인 2단계 인증 옵션." + "premiumSignUpTwoStepOptions": { + "message": "Proprietary two-step login options such as YubiKey and Duo." }, "ppremiumSignUpReports": { "message": "보관함을 안전하게 유지하기 위한 암호 위생, 계정 상태, 데이터 유출 보고서" @@ -1440,9 +1449,6 @@ "restoreItem": { "message": "항목 복원" }, - "restoreItemConfirmation": { - "message": "정말 이 항목을 복원하시겠습니까?" - }, "restoredItem": { "message": "복원된 항목" }, @@ -1599,6 +1605,12 @@ "biometricsNotSupportedDesc": { "message": "이 기기에서는 생체 인식이 지원되지 않습니다." }, + "biometricsFailedTitle": { + "message": "Biometrics failed" + }, + "biometricsFailedDesc": { + "message": "Biometrics cannot be completed, consider using a master password or logging out. If this persists, please contact Bitwarden support." + }, "nativeMessaginPermissionErrorTitle": { "message": "권한이 부여되지 않음" }, @@ -2140,8 +2152,8 @@ "notificationSentDevice": { "message": "A notification has been sent to your device." }, - "logInInitiated": { - "message": "Log in initiated" + "loginInitiated": { + "message": "Login initiated" }, "exposedMasterPassword": { "message": "Exposed Master Password" @@ -2221,19 +2233,42 @@ } } }, - "region": { - "message": "Region" + "loggingInOn": { + "message": "Logging in on" }, "opensInANewWindow": { "message": "Opens in a new window" }, + "deviceApprovalRequired": { + "message": "Device approval required. Select an approval option below:" + }, + "rememberThisDevice": { + "message": "Remember this device" + }, + "uncheckIfPublicDevice": { + "message": "Uncheck if using a public device" + }, + "approveFromYourOtherDevice": { + "message": "Approve from your other device" + }, + "requestAdminApproval": { + "message": "Request admin approval" + }, + "approveWithMasterPassword": { + "message": "Approve with master password" + }, + "ssoIdentifierRequired": { + "message": "Organization SSO identifier is required." + }, "eu": { "message": "EU", "description": "European Union" }, - "us": { - "message": "US", - "description": "United States" + "usDomain": { + "message": "bitwarden.com" + }, + "euDomain": { + "message": "bitwarden.eu" }, "accessDenied": { "message": "Access denied. You do not have permission to view this page." @@ -2243,5 +2278,133 @@ }, "display": { "message": "Display" + }, + "accountSuccessfullyCreated": { + "message": "Account successfully created!" + }, + "adminApprovalRequested": { + "message": "Admin approval requested" + }, + "adminApprovalRequestSentToAdmins": { + "message": "Your request has been sent to your admin." + }, + "youWillBeNotifiedOnceApproved": { + "message": "You will be notified once approved." + }, + "troubleLoggingIn": { + "message": "Trouble logging in?" + }, + "loginApproved": { + "message": "Login approved" + }, + "userEmailMissing": { + "message": "User email missing" + }, + "deviceTrusted": { + "message": "Device trusted" + }, + "inputRequired": { + "message": "Input is required." + }, + "required": { + "message": "required" + }, + "search": { + "message": "Search" + }, + "inputMinLength": { + "message": "Input must be at least $COUNT$ characters long.", + "placeholders": { + "count": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxLength": { + "message": "Input must not exceed $COUNT$ characters in length.", + "placeholders": { + "count": { + "content": "$1", + "example": "20" + } + } + }, + "inputForbiddenCharacters": { + "message": "The following characters are not allowed: $CHARACTERS$", + "placeholders": { + "characters": { + "content": "$1", + "example": "@, #, $, %" + } + } + }, + "inputMinValue": { + "message": "Input value must be at least $MIN$.", + "placeholders": { + "min": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxValue": { + "message": "Input value must not exceed $MAX$.", + "placeholders": { + "max": { + "content": "$1", + "example": "100" + } + } + }, + "multipleInputEmails": { + "message": "1 or more emails are invalid" + }, + "inputTrimValidator": { + "message": "Input must not contain only whitespace.", + "description": "Notification to inform the user that a form's input can't contain only whitespace." + }, + "inputEmail": { + "message": "Input is not an email address." + }, + "fieldsNeedAttention": { + "message": "$COUNT$ field(s) above need your attention.", + "placeholders": { + "count": { + "content": "$1", + "example": "4" + } + } + }, + "selectPlaceholder": { + "message": "-- Select --" + }, + "multiSelectPlaceholder": { + "message": "-- Type to filter --" + }, + "multiSelectLoading": { + "message": "Retrieving options..." + }, + "multiSelectNotFound": { + "message": "No items found" + }, + "multiSelectClearAll": { + "message": "Clear all" + }, + "plusNMore": { + "message": "+ $QUANTITY$ more", + "placeholders": { + "quantity": { + "content": "$1", + "example": "5" + } + } + }, + "submenu": { + "message": "Submenu" + }, + "toggleCollapse": { + "message": "Toggle collapse", + "description": "Toggling an expand/collapse state." } } diff --git a/apps/browser/src/_locales/lt/messages.json b/apps/browser/src/_locales/lt/messages.json index 682cd40c52a..a3ba40c1fd9 100644 --- a/apps/browser/src/_locales/lt/messages.json +++ b/apps/browser/src/_locales/lt/messages.json @@ -338,6 +338,9 @@ "other": { "message": "Kita" }, + "unlockMethodNeededToChangeTimeoutActionDesc": { + "message": "Nustatyk atrakinimo būdą, kad pakeistum saugyklos laiko limito veiksmą." + }, "rateExtension": { "message": "Įvertinkite šį plėtinį" }, @@ -630,6 +633,12 @@ "notificationChangeSave": { "message": "Atnaujinti" }, + "notificationUnlockDesc": { + "message": "Atrakink savo Bitwarden saugyklą, kad užpildytum automatinio užpildymo užklausą." + }, + "notificationUnlock": { + "message": "Atrakinti" + }, "enableContextMenuItem": { "message": "Rodyti kontekstinio meniu pasririnkimus" }, @@ -786,8 +795,8 @@ "ppremiumSignUpStorage": { "message": "1 GB užšifruotos vietos diske bylų prisegimams." }, - "ppremiumSignUpTwoStep": { - "message": "Papildomos dviejų žingsių prisijungimo opcijos, tokios kaip YubiKey, FIDO U2F ir Duo." + "premiumSignUpTwoStepOptions": { + "message": "Patentuotos dviejų žingsnių prisijungimo parinktys, tokios kaip YubiKey ir Duo." }, "ppremiumSignUpReports": { "message": "Slaptažodžio higiena, prieigos sveikata ir duomenų nutekinimo ataskaitos, kad tavo saugyklas būtų saugus." @@ -1030,7 +1039,7 @@ "message": "Naujas pasirinktis laukelis" }, "dragToSort": { - "message": "Drag to sort" + "message": "Rūšiuok, kad surūšiuotum" }, "cfTypeText": { "message": "Tekstas" @@ -1050,10 +1059,10 @@ "description": "This describes a value that is 'linked' (tied) to another value." }, "popup2faCloseMessage": { - "message": "Clicking outside the popup window to check your email for your verification code will cause this popup to close. Do you want to open this popup in a new window so that it does not close?" + "message": "Paspaudę už iššokančio lango, kad patikrintum, ar el. paštu gausi patvirtinimo kodą, uždarys šį iššokantį langą. Ar nori atidaryti šį iššokantį langą naujame lange, kad jis neužsidarytų?" }, "popupU2fCloseMessage": { - "message": "This browser cannot process U2F requests in this popup window. Do you want to open this popup in a new window so that you can log in using U2F?" + "message": "Ši naršyklė negali apdoroti U2F prašymų šiame iššokančiame lange. Ar nori atidaryti šį iššokantį langą naujame lange, kad galėtum prisijungti naudodamas (-a) U2F?" }, "enableFavicon": { "message": "Rodyti tinklalapių ikonėles" @@ -1062,10 +1071,10 @@ "message": "Show a recognizable image next to each login." }, "enableBadgeCounter": { - "message": "Show badge counter" + "message": "Rodyti ženkliukų skaitiklį" }, "badgeCounterDesc": { - "message": "Indicate how many logins you have for the current web page." + "message": "Nurodoma, kiek prisijungimų turi dabartiniame žiniatinklio puslapyje." }, "cardholderName": { "message": "Mokėjimo kortelės savininko vardas" @@ -1143,7 +1152,7 @@ "message": "Dr" }, "mx": { - "message": "Mx" + "message": "Neutralinis (-i)" }, "firstName": { "message": "Vardas" @@ -1267,7 +1276,7 @@ } }, "passwordSafe": { - "message": "This password was not found in any known data breaches. It should be safe to use." + "message": "Šis slaptažodis nebuvo rastas per jokius žinomus duomenų pažeidimus. Jis turėtų būti saugus naudoti." }, "baseDomain": { "message": "Bazinis domenas", @@ -1288,7 +1297,7 @@ "message": "Prasideda" }, "regEx": { - "message": "Regular expression", + "message": "Reguliari išraiška", "description": "A programming term, also known as 'RegEx'." }, "matchDetection": { @@ -1296,7 +1305,7 @@ "description": "URI match detection for auto-fill." }, "defaultMatchDetection": { - "message": "Default match detection", + "message": "Numatytasis atitikties aptikimas", "description": "Default URI match detection for auto-fill." }, "toggleOptions": { @@ -1440,9 +1449,6 @@ "restoreItem": { "message": "Atkurti elementą" }, - "restoreItemConfirmation": { - "message": "Are you sure you want to restore this item?" - }, "restoredItem": { "message": "Elementas atkurtas" }, @@ -1462,7 +1468,7 @@ "message": "Item auto-filled " }, "insecurePageWarning": { - "message": "Warning: This is an unsecured HTTP page, and any information you submit can potentially be seen and changed by others. This Login was originally saved on a secure (HTTPS) page." + "message": "Įspėjimas: Tai – neapsaugotas HTTP puslapis, todėl bet kokią pateiktą informaciją gali matyti ir keisti kiti asmenys. Šis prisijungimas iš pradžių buvo išsaugotas saugiame (HTTPS) puslapyje." }, "insecurePageWarningFillPrompt": { "message": "Do you still wish to fill this login?" @@ -1483,19 +1489,19 @@ "message": "Pagrindinio slaptažodžio nustatymas" }, "currentMasterPass": { - "message": "Current master password" + "message": "Dabartinis pagrindinis slaptažodis" }, "newMasterPass": { - "message": "New master password" + "message": "Naujas pagrindinis slaptažodis" }, "confirmNewMasterPass": { - "message": "Confirm new master password" + "message": "Patvirtinti naują pagrindinį slaptažodį" }, "masterPasswordPolicyInEffect": { - "message": "One or more organization policies require your master password to meet the following requirements:" + "message": "Viena ar daugiau organizacijos politikos reikalauja, kad tavo pagrindinis slaptažodis atitiktų šiuos reikalavimus:" }, "policyInEffectMinComplexity": { - "message": "Minimum complexity score of $SCORE$", + "message": "Minimalus sudėtingumo balas $SCORE$", "placeholders": { "score": { "content": "$1", @@ -1531,13 +1537,13 @@ } }, "masterPasswordPolicyRequirementsNotMet": { - "message": "Your new master password does not meet the policy requirements." + "message": "Tavo naujasis pagrindinis slaptažodis neatitinka politikos reikalavimų." }, "acceptPolicies": { "message": "By checking this box you agree to the following:" }, "acceptPoliciesRequired": { - "message": "Terms of Service and Privacy Policy have not been acknowledged." + "message": "Paslaugų teikimo sąlygos ir privatumo politika nebuvo pripažinti." }, "termsOfService": { "message": "Paslaugų teikimo paslaugos" @@ -1552,13 +1558,13 @@ "message": "Gerai" }, "desktopSyncVerificationTitle": { - "message": "Desktop sync verification" + "message": "Darbalaukio sinchronizavimo verifikavimas" }, "desktopIntegrationVerificationText": { - "message": "Please verify that the desktop application shows this fingerprint: " + "message": "Patikrink, ar darbalaukio programoje rodomas šis pirštų atspaudas: " }, "desktopIntegrationDisabledTitle": { - "message": "Browser integration is not set up" + "message": "Naršyklės integracija nėra nustatyta" }, "desktopIntegrationDisabledDesc": { "message": "Browser integration is not set up in the Bitwarden desktop application. Please set it up in the settings within the desktop application." @@ -1599,6 +1605,12 @@ "biometricsNotSupportedDesc": { "message": "Šiame įrenginyje biometrikos negalima naudoti." }, + "biometricsFailedTitle": { + "message": "Biometrika nepavyko" + }, + "biometricsFailedDesc": { + "message": "Biometriniai duomenys negali būti užpildyti, apsvarstyk galimybę naudoti pagrindinį slaptažodį arba atsijungti. Jei tai tęsiasi, kreipkitės į Bitwarden pagalbą." + }, "nativeMessaginPermissionErrorTitle": { "message": "Nesuteiktos teisės" }, @@ -2140,7 +2152,7 @@ "notificationSentDevice": { "message": "A notification has been sent to your device." }, - "logInInitiated": { + "loginInitiated": { "message": "Pradėtas prisijungimas" }, "exposedMasterPassword": { @@ -2221,19 +2233,42 @@ } } }, - "region": { - "message": "Region" + "loggingInOn": { + "message": "Logging in on" }, "opensInANewWindow": { "message": "Opens in a new window" }, + "deviceApprovalRequired": { + "message": "Įrenginio patvirtinimas reikalingas. Pasirink patvirtinimo būdą toliau:" + }, + "rememberThisDevice": { + "message": "Prisiminti šį įrenginį" + }, + "uncheckIfPublicDevice": { + "message": "Panaikink žymėjimą, jei naudojamas viešasis įrenginys" + }, + "approveFromYourOtherDevice": { + "message": "Patvirtinti iš tavo kito įrenginio" + }, + "requestAdminApproval": { + "message": "Prašyti administratoriaus patvirtinimo" + }, + "approveWithMasterPassword": { + "message": "Patvirtinti su pagrindiniu slaptažodžiu" + }, + "ssoIdentifierRequired": { + "message": "Organizacijos SSO identifikatorius yra reikalingas." + }, "eu": { "message": "ES", "description": "European Union" }, - "us": { - "message": "JAV", - "description": "United States" + "usDomain": { + "message": "bitwarden.com" + }, + "euDomain": { + "message": "bitwarden.eu" }, "accessDenied": { "message": "Prieiga uždrausta. Neturi teisės peržiūrėti šį puslapį." @@ -2243,5 +2278,133 @@ }, "display": { "message": "Rodyti" + }, + "accountSuccessfullyCreated": { + "message": "Paskyra sėkmingai sukurta!" + }, + "adminApprovalRequested": { + "message": "Prašymas administratoriaus patvirtinimas" + }, + "adminApprovalRequestSentToAdmins": { + "message": "Tavo prašymas išsiųstas administratoriui." + }, + "youWillBeNotifiedOnceApproved": { + "message": "Tu būsi praneštas (-a), kai bus patvirtinta." + }, + "troubleLoggingIn": { + "message": "Problemos prisijungiant?" + }, + "loginApproved": { + "message": "Patvirtintas prisijungimas" + }, + "userEmailMissing": { + "message": "Trūksta naudotojo el. pašto" + }, + "deviceTrusted": { + "message": "Patikimas įrenginys" + }, + "inputRequired": { + "message": "Input is required." + }, + "required": { + "message": "required" + }, + "search": { + "message": "Search" + }, + "inputMinLength": { + "message": "Input must be at least $COUNT$ characters long.", + "placeholders": { + "count": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxLength": { + "message": "Input must not exceed $COUNT$ characters in length.", + "placeholders": { + "count": { + "content": "$1", + "example": "20" + } + } + }, + "inputForbiddenCharacters": { + "message": "The following characters are not allowed: $CHARACTERS$", + "placeholders": { + "characters": { + "content": "$1", + "example": "@, #, $, %" + } + } + }, + "inputMinValue": { + "message": "Input value must be at least $MIN$.", + "placeholders": { + "min": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxValue": { + "message": "Input value must not exceed $MAX$.", + "placeholders": { + "max": { + "content": "$1", + "example": "100" + } + } + }, + "multipleInputEmails": { + "message": "1 or more emails are invalid" + }, + "inputTrimValidator": { + "message": "Input must not contain only whitespace.", + "description": "Notification to inform the user that a form's input can't contain only whitespace." + }, + "inputEmail": { + "message": "Input is not an email address." + }, + "fieldsNeedAttention": { + "message": "$COUNT$ field(s) above need your attention.", + "placeholders": { + "count": { + "content": "$1", + "example": "4" + } + } + }, + "selectPlaceholder": { + "message": "-- Select --" + }, + "multiSelectPlaceholder": { + "message": "-- Type to filter --" + }, + "multiSelectLoading": { + "message": "Retrieving options..." + }, + "multiSelectNotFound": { + "message": "No items found" + }, + "multiSelectClearAll": { + "message": "Clear all" + }, + "plusNMore": { + "message": "+ $QUANTITY$ more", + "placeholders": { + "quantity": { + "content": "$1", + "example": "5" + } + } + }, + "submenu": { + "message": "Submenu" + }, + "toggleCollapse": { + "message": "Toggle collapse", + "description": "Toggling an expand/collapse state." } } diff --git a/apps/browser/src/_locales/lv/messages.json b/apps/browser/src/_locales/lv/messages.json index e3fd8d243da..cbf2c469124 100644 --- a/apps/browser/src/_locales/lv/messages.json +++ b/apps/browser/src/_locales/lv/messages.json @@ -140,7 +140,7 @@ "message": "Apstiprināšanas kods" }, "confirmIdentity": { - "message": "Apstiprināt identitāti, lai turpinātu." + "message": "Jāapstiprina identitāte, lai turpinātu." }, "account": { "message": "Konts" @@ -338,6 +338,9 @@ "other": { "message": "Cits" }, + "unlockMethodNeededToChangeTimeoutActionDesc": { + "message": "Jāuzstāda atslēgšanas veids, lai mainītu glabātavas noildzes darbību." + }, "rateExtension": { "message": "Novērtēt paplašinājumu" }, @@ -351,7 +354,7 @@ "message": "Apstiprināt identitāti" }, "yourVaultIsLocked": { - "message": "Glabātava ir slēgta. Nepieciešams norādīt galveno paroli, lai turpinātu." + "message": "Glabātava ir aizslēgta. Jāapstiprina identitāte, lai turpinātu." }, "unlock": { "message": "Atslēgt" @@ -556,7 +559,7 @@ "message": "Vienums labots" }, "deleteItemConfirmation": { - "message": "Vai tiešām pārvietot vienumu uz atkritni?" + "message": "Vai tiešām pārvietot uz atkritni?" }, "deletedItem": { "message": "Vienums pārvietots uz atkritni" @@ -630,6 +633,12 @@ "notificationChangeSave": { "message": "Jā, atjaunināt" }, + "notificationUnlockDesc": { + "message": "Jāatslēdz Bitwarden glabātava, lai pabeigtu automātiskās aizpildīšanas pieprasījumu." + }, + "notificationUnlock": { + "message": "Atslēgt" + }, "enableContextMenuItem": { "message": "Rādīt konteksta izvēlnes iespējas" }, @@ -786,8 +795,8 @@ "ppremiumSignUpStorage": { "message": "1 GB šifrētas krātuves datņu pielikumiem." }, - "ppremiumSignUpTwoStep": { - "message": "Tādas papildu divpakāpju pieteikšanās iespējas kā YubiKey, FIDO U2F un Duo." + "premiumSignUpTwoStepOptions": { + "message": "Tādas slēgtā pirmavota divpakāpju pieteikšanās iespējas kā YubiKey un Duo." }, "ppremiumSignUpReports": { "message": "Paroļu higiēnas, konta veselības un datu noplūžu pārskati, lai uzturētu glabātavu drošu." @@ -1440,9 +1449,6 @@ "restoreItem": { "message": "Atjaunot vienumu" }, - "restoreItemConfirmation": { - "message": "Jūs tiešām atjaunot šo vienumu?" - }, "restoredItem": { "message": "Vienums atjaunots" }, @@ -1537,7 +1543,7 @@ "message": "Atzīmējot šo rūtiņu, Tu piekrīti sekojošajam:" }, "acceptPoliciesRequired": { - "message": "Nav apstiprināti izmantošanas nosacījumi un privātuma politika." + "message": "Nav apstiprināti izmantošanas noteikumi un privātuma nosacījumi." }, "termsOfService": { "message": "Izmantošanas nosacījumi" @@ -1599,6 +1605,12 @@ "biometricsNotSupportedDesc": { "message": "Šajā ierīcē netiek atbalstīta pārlūka biometrija." }, + "biometricsFailedTitle": { + "message": "Biometrija neizdevās" + }, + "biometricsFailedDesc": { + "message": "Biometriju nevar pabeigt, jāapsver galvenās paroles izmantošana vai atteikšanās. Ja tas turpinās, lūgums sazināties ar Bitwarden atbalstu." + }, "nativeMessaginPermissionErrorTitle": { "message": "Atļauja nav nodrošināta" }, @@ -1633,15 +1645,15 @@ } }, "send": { - "message": "Sūtījums", + "message": "Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "searchSends": { - "message": "Meklēt Sūtījumus", + "message": "Meklēt Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "addSend": { - "message": "Pievienot Sūtījumu", + "message": "Pievienot Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "sendTypeText": { @@ -1651,11 +1663,11 @@ "message": "Datne" }, "allSends": { - "message": "Visi Sūtījumi", + "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ļuvju skaits", + "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." }, "expired": { @@ -1668,7 +1680,7 @@ "message": "Aizsargāts ar paroli" }, "copySendLink": { - "message": "Ievietot \"Send\" saiti starpliktuvē", + "message": "Ievietot Send saiti starpliktuvē", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "removePassword": { @@ -1681,11 +1693,11 @@ "message": "Parole noņemta" }, "deletedSend": { - "message": "Sūtījums dzēsts", + "message": "Send izdzēsts", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "sendLink": { - "message": "Sūtījuma saite", + "message": "Send saite", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "disabled": { @@ -1695,23 +1707,23 @@ "message": "Vai tiešām noņemt paroli?" }, "deleteSend": { - "message": "Dzēst Sūtījumu", + "message": "Izdzēst Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "deleteSendConfirmation": { - "message": "Vai tiešām vēlaties dzēst šo Sūtījumu?", + "message": "Vai tiešām izdzēst šo Send?", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "editSend": { - "message": "Rediģēt Sūtījumu", + "message": "Labot Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "sendTypeHeader": { - "message": "Kāds ir šī Sūtījums veids?", + "message": "Kāds ir šī Send veids?", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "sendNameDesc": { - "message": "Draudzīgs nosaukums, lai raksturotu šo Sūtījumu.", + "message": "Lasāms nosaukums, kas apraksta šo Send.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "sendFileDesc": { @@ -1721,14 +1733,14 @@ "message": "Dzēšanas datums" }, "deletionDateDesc": { - "message": "Sūtījums tiks neatgriezeniski dzēsts norādītajā datumā un laikā.", + "message": "Send tiks neatgriezeniski izdzēsts norādītajā datumā un laikā.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "expirationDate": { "message": "Derīguma beigu datums" }, "expirationDateDesc": { - "message": "Ja tas ir iestatīts, piekļuve šim Sūtījumam beigsies norādītajā datumā un laikā.", + "message": "Ja iestatīts, piekļuve šim Send beigsies norādītajā datumā un laikā.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "oneDay": { @@ -1747,59 +1759,59 @@ "message": "Pielāgots" }, "maximumAccessCount": { - "message": "Lielākais pieļaujamais piekļuvju skaits" + "message": "Lielākais pieļaujamais piekļuves reižu skaits" }, "maximumAccessCountDesc": { - "message": "Ja tas ir iestatīts, lietotāji vairs nevarēs piekļūt šim Sūtījumam, tiklīdz būs sasniegts maksimālais piekļuves skaits.", + "message": "Ja iestatīts, lietotāji nevarēs piekļūt šim Send, kad tiks sasniegts lielākais pieļaujamais piekļūšanas reižu skaits.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "sendPasswordDesc": { - "message": "Pēc izvēles pieprasīt paroli, lai lietotāji varētu piekļūt šim Sūtījumam.", + "message": "Pēc izvēles pieprasīt paroli, lai lietotāji varētu piekļūt šim Send.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "sendNotesDesc": { - "message": "Privātas piezīmes par šo Sūtījumu.", + "message": "Personīgas piezīmes par šo Send.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "sendDisableDesc": { - "message": "Deaktivizēt šo Sūtījumu, lai neviens tam nevarētu piekļūt.", + "message": "Izslēgt šo Send, lai neviens tam nevarētu piekļūt.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "sendShareDesc": { - "message": "Saglabāšanas brīdī ievietot šī \"Send\" saiti starpliktuvē.", + "message": "Saglabāšanas brīdī ievietot šī Send saiti starpliktuvē.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "sendTextDesc": { "message": "Teksts, kuru ir vēlme nosūtīt." }, "sendHideText": { - "message": "Pēc noklusējuma slēpt šī Sūtījuma tekstu.", + "message": "Pēc noklusējuma paslēpt šī Send tekstu.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "currentAccessCount": { "message": "Pašreizējais piekļuvju skaits" }, "createSend": { - "message": "Jauns Sūtījums", + "message": "Jauns Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "newPassword": { "message": "Jauna parole" }, "sendDisabled": { - "message": "Sūtījums noņemts", + "message": "Send noņemts", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "sendDisabledWarning": { - "message": "Uzņēmuma nosacījumu dēļ ir iespējams izdzēst tikai esošu \"Send\".", + "message": "Uzņēmuma nosacījumu dēļ ir iespējams izdzēst tikai esošu Send.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "createdSend": { - "message": "Sūtījums izveidots", + "message": "Send izveidots", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "editedSend": { - "message": "Sūtījums saglabāts", + "message": "Send saglabāts", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "sendLinuxChromiumFileWarning": { @@ -1812,14 +1824,14 @@ "message": "Lai izvēlētos datni, ja tiek izmantots Safari, paplašinājums ir jāatver jaunā logā, klikšķinot uz šī paziņojuma." }, "sendFileCalloutHeader": { - "message": "Pirms Jūs sākat" + "message": "Pirms sākšanas" }, "sendFirefoxCustomDatePopoutMessage1": { "message": "Lai izmantotu kalendāra veida datumu atlasītāju,", "description": "This will be used as part of a larger sentence, broken up to include links. The full sentence will read '**To use a calendar style date picker ** click here to pop out your window.'" }, "sendFirefoxCustomDatePopoutMessage2": { - "message": "noklikšķiniet šeit", + "message": "klikšķināt šeit", "description": "This will be used as part of a larger sentence, broken up to include links. The full sentence will read 'To use a calendar style date picker **click here** to pop out your window.'" }, "sendFirefoxCustomDatePopoutMessage3": { @@ -1845,7 +1857,7 @@ "message": "Slēpt e-pasta adresi no saņēmējiem." }, "sendOptionsPolicyInEffect": { - "message": "Viena vai vairākas organizācijas politikas ietekmē jūsu Sūtījuma opcijas." + "message": "Viens vai vairāki apvienības nosacījumi ietekmē Send iespējas." }, "passwordPrompt": { "message": "Galvenās paroles pārvaicāšana" @@ -2129,7 +2141,7 @@ "message": "Atpazīšanas vārdkopa" }, "fingerprintMatchInfo": { - "message": "Jāpārliecinās, ka glabātava ir atslēgta un atpazīšanas vārdkopa ir tāda pati arī citā ierīcē." + "message": "Lūgums pārliecināties, ka glabātava ir atslēgta un atpazīšanas vārdkopa ir tāda pati arī citā ierīcē." }, "resendNotification": { "message": "Atkārtoti nosūtīt paziņojumu" @@ -2140,7 +2152,7 @@ "notificationSentDevice": { "message": "Uz ierīci ir nosūtīts paziņojums." }, - "logInInitiated": { + "loginInitiated": { "message": "Uzsākta pieteikšanās" }, "exposedMasterPassword": { @@ -2221,19 +2233,42 @@ } } }, - "region": { - "message": "Apgabals" + "loggingInOn": { + "message": "Piesakās" }, "opensInANewWindow": { "message": "Atver jaunā logā" }, + "deviceApprovalRequired": { + "message": "Nepieciešams ierīces apstiprinājums. Zemāk jāatlasa apstiprinājuma iespēja:" + }, + "rememberThisDevice": { + "message": "Atcerēties šo ierīci" + }, + "uncheckIfPublicDevice": { + "message": "Jānoņem atzīme, ja tiek izmantota publiska ierīce" + }, + "approveFromYourOtherDevice": { + "message": "Jāapstiprina citā savā ierīcē" + }, + "requestAdminApproval": { + "message": "Pieprasīt pārvaldītāja apstiprinājumu" + }, + "approveWithMasterPassword": { + "message": "Apstiprināt ar galveno paroli" + }, + "ssoIdentifierRequired": { + "message": "Ir nepieciešams apvienības SSO identifikators." + }, "eu": { "message": "ES", "description": "European Union" }, - "us": { - "message": "ASV", - "description": "United States" + "usDomain": { + "message": "bitwarden.com" + }, + "euDomain": { + "message": "bitwarden.eu" }, "accessDenied": { "message": "Piekļuve liegta. Nav nepieciešamo atļauju, lai skatītu šo lapu." @@ -2243,5 +2278,133 @@ }, "display": { "message": "Attēlojums" + }, + "accountSuccessfullyCreated": { + "message": "Konts ir veiksmīgi izveidots." + }, + "adminApprovalRequested": { + "message": "Pieprasīts pārvaldītāja apstiprinājums" + }, + "adminApprovalRequestSentToAdmins": { + "message": "Pieprasījums tika nosūtīts pārvaldītājam." + }, + "youWillBeNotifiedOnceApproved": { + "message": "Tiks saņemts paziņojums, tiklīdz būs apstiprināts." + }, + "troubleLoggingIn": { + "message": "Neizdodas pieteikties?" + }, + "loginApproved": { + "message": "Pieteikšanās apstiprināta" + }, + "userEmailMissing": { + "message": "Trūkst lietotāja e-pasta adreses" + }, + "deviceTrusted": { + "message": "Ierīce ir uzticama" + }, + "inputRequired": { + "message": "Jāievada vērtība." + }, + "required": { + "message": "nepieciešams" + }, + "search": { + "message": "Meklēt" + }, + "inputMinLength": { + "message": "Ievadītajai vērtībai ir jābūt vismaz $COUNT$ rakstzīmes garai.", + "placeholders": { + "count": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxLength": { + "message": "Ievadītās vērtības garums nedrīkst pārsniegt $COUNT$ rakstzīmes.", + "placeholders": { + "count": { + "content": "$1", + "example": "20" + } + } + }, + "inputForbiddenCharacters": { + "message": "Šādas rakstzīmes nav atļautas: $CHARACTERS$", + "placeholders": { + "characters": { + "content": "$1", + "example": "@, #, $, %" + } + } + }, + "inputMinValue": { + "message": "Ievadītajai vērtībai jābūt vismaz $MIN$.", + "placeholders": { + "min": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxValue": { + "message": "Ievadītā vērtība nedrīkst pārsniegt $MAX$.", + "placeholders": { + "max": { + "content": "$1", + "example": "100" + } + } + }, + "multipleInputEmails": { + "message": "1 vai vairākas e-pasta adreses nav derīgas" + }, + "inputTrimValidator": { + "message": "Ievadītā vērtība nevar sastāvēt tikai no atstarpēm.", + "description": "Notification to inform the user that a form's input can't contain only whitespace." + }, + "inputEmail": { + "message": "Ievadītā vērtība nav e-pasta adrese." + }, + "fieldsNeedAttention": { + "message": "$COUNT$ augstāk esošajam(iem) laukam(iem) ir jāpievērš uzmanība.", + "placeholders": { + "count": { + "content": "$1", + "example": "4" + } + } + }, + "selectPlaceholder": { + "message": "-- Atlasīt --" + }, + "multiSelectPlaceholder": { + "message": "-- Rakstīt, lai atlasītu --" + }, + "multiSelectLoading": { + "message": "Iegūst iespējas..." + }, + "multiSelectNotFound": { + "message": "Netika atrasti vienumi" + }, + "multiSelectClearAll": { + "message": "Notīrīt visu" + }, + "plusNMore": { + "message": "+ vēl $QUANTITY$", + "placeholders": { + "quantity": { + "content": "$1", + "example": "5" + } + } + }, + "submenu": { + "message": "Apakšizvēlne" + }, + "toggleCollapse": { + "message": "Pārslēgt sakļaušanu", + "description": "Toggling an expand/collapse state." } } diff --git a/apps/browser/src/_locales/ml/messages.json b/apps/browser/src/_locales/ml/messages.json index fd59a7798cb..416b35f78ec 100644 --- a/apps/browser/src/_locales/ml/messages.json +++ b/apps/browser/src/_locales/ml/messages.json @@ -338,6 +338,9 @@ "other": { "message": "മറ്റുള്ളവ" }, + "unlockMethodNeededToChangeTimeoutActionDesc": { + "message": "Set up an unlock method to change your vault timeout action." + }, "rateExtension": { "message": "എക്സ്റ്റൻഷൻ റേറ്റ് ചെയ്യുക " }, @@ -630,6 +633,12 @@ "notificationChangeSave": { "message": "ശരി, ഇപ്പോൾ അപ്ഡേറ്റ് ചെയ്യുക" }, + "notificationUnlockDesc": { + "message": "Unlock your Bitwarden vault to complete the auto-fill request." + }, + "notificationUnlock": { + "message": "Unlock" + }, "enableContextMenuItem": { "message": "Show context menu options" }, @@ -786,8 +795,8 @@ "ppremiumSignUpStorage": { "message": "ഫയൽ അറ്റാച്ചുമെന്റുകൾക്കായി 1 ജിബി എൻക്രിപ്റ്റുചെയ്‌ത സംഭരണം." }, - "ppremiumSignUpTwoStep": { - "message": "രണ്ട്-ഘട്ട പ്രവേശന ഓപ്ഷനുകളായ Yubikey, FIDO U2F, Duo." + "premiumSignUpTwoStepOptions": { + "message": "Proprietary two-step login options such as YubiKey and Duo." }, "ppremiumSignUpReports": { "message": "നിങ്ങളുടെ വാൾട് സൂക്ഷിക്കുന്നതിന്. പാസ്‌വേഡ് ശുചിത്വം, അക്കൗണ്ട് ആരോഗ്യം, ഡാറ്റ ലംഘന റിപ്പോർട്ടുകൾ." @@ -1440,9 +1449,6 @@ "restoreItem": { "message": "ഇനം വീണ്ടെടുക്കുക " }, - "restoreItemConfirmation": { - "message": "ഈ ഇനം വീണ്ടെടുക്കണമെന്ന് ഉറപ്പാണോ?" - }, "restoredItem": { "message": "വീണ്ടെടുത്ത ഇനം" }, @@ -1599,6 +1605,12 @@ "biometricsNotSupportedDesc": { "message": "Browser biometrics is not supported on this device." }, + "biometricsFailedTitle": { + "message": "Biometrics failed" + }, + "biometricsFailedDesc": { + "message": "Biometrics cannot be completed, consider using a master password or logging out. If this persists, please contact Bitwarden support." + }, "nativeMessaginPermissionErrorTitle": { "message": "Permission not provided" }, @@ -2140,8 +2152,8 @@ "notificationSentDevice": { "message": "A notification has been sent to your device." }, - "logInInitiated": { - "message": "Log in initiated" + "loginInitiated": { + "message": "Login initiated" }, "exposedMasterPassword": { "message": "Exposed Master Password" @@ -2221,19 +2233,42 @@ } } }, - "region": { - "message": "Region" + "loggingInOn": { + "message": "Logging in on" }, "opensInANewWindow": { "message": "Opens in a new window" }, + "deviceApprovalRequired": { + "message": "Device approval required. Select an approval option below:" + }, + "rememberThisDevice": { + "message": "Remember this device" + }, + "uncheckIfPublicDevice": { + "message": "Uncheck if using a public device" + }, + "approveFromYourOtherDevice": { + "message": "Approve from your other device" + }, + "requestAdminApproval": { + "message": "Request admin approval" + }, + "approveWithMasterPassword": { + "message": "Approve with master password" + }, + "ssoIdentifierRequired": { + "message": "Organization SSO identifier is required." + }, "eu": { "message": "EU", "description": "European Union" }, - "us": { - "message": "US", - "description": "United States" + "usDomain": { + "message": "bitwarden.com" + }, + "euDomain": { + "message": "bitwarden.eu" }, "accessDenied": { "message": "Access denied. You do not have permission to view this page." @@ -2243,5 +2278,133 @@ }, "display": { "message": "Display" + }, + "accountSuccessfullyCreated": { + "message": "Account successfully created!" + }, + "adminApprovalRequested": { + "message": "Admin approval requested" + }, + "adminApprovalRequestSentToAdmins": { + "message": "Your request has been sent to your admin." + }, + "youWillBeNotifiedOnceApproved": { + "message": "You will be notified once approved." + }, + "troubleLoggingIn": { + "message": "Trouble logging in?" + }, + "loginApproved": { + "message": "Login approved" + }, + "userEmailMissing": { + "message": "User email missing" + }, + "deviceTrusted": { + "message": "Device trusted" + }, + "inputRequired": { + "message": "Input is required." + }, + "required": { + "message": "required" + }, + "search": { + "message": "Search" + }, + "inputMinLength": { + "message": "Input must be at least $COUNT$ characters long.", + "placeholders": { + "count": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxLength": { + "message": "Input must not exceed $COUNT$ characters in length.", + "placeholders": { + "count": { + "content": "$1", + "example": "20" + } + } + }, + "inputForbiddenCharacters": { + "message": "The following characters are not allowed: $CHARACTERS$", + "placeholders": { + "characters": { + "content": "$1", + "example": "@, #, $, %" + } + } + }, + "inputMinValue": { + "message": "Input value must be at least $MIN$.", + "placeholders": { + "min": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxValue": { + "message": "Input value must not exceed $MAX$.", + "placeholders": { + "max": { + "content": "$1", + "example": "100" + } + } + }, + "multipleInputEmails": { + "message": "1 or more emails are invalid" + }, + "inputTrimValidator": { + "message": "Input must not contain only whitespace.", + "description": "Notification to inform the user that a form's input can't contain only whitespace." + }, + "inputEmail": { + "message": "Input is not an email address." + }, + "fieldsNeedAttention": { + "message": "$COUNT$ field(s) above need your attention.", + "placeholders": { + "count": { + "content": "$1", + "example": "4" + } + } + }, + "selectPlaceholder": { + "message": "-- Select --" + }, + "multiSelectPlaceholder": { + "message": "-- Type to filter --" + }, + "multiSelectLoading": { + "message": "Retrieving options..." + }, + "multiSelectNotFound": { + "message": "No items found" + }, + "multiSelectClearAll": { + "message": "Clear all" + }, + "plusNMore": { + "message": "+ $QUANTITY$ more", + "placeholders": { + "quantity": { + "content": "$1", + "example": "5" + } + } + }, + "submenu": { + "message": "Submenu" + }, + "toggleCollapse": { + "message": "Toggle collapse", + "description": "Toggling an expand/collapse state." } } diff --git a/apps/browser/src/_locales/mr/messages.json b/apps/browser/src/_locales/mr/messages.json index 9e46b55f19e..e12aa7f8a65 100644 --- a/apps/browser/src/_locales/mr/messages.json +++ b/apps/browser/src/_locales/mr/messages.json @@ -3,39 +3,39 @@ "message": "Bitwarden" }, "extName": { - "message": "Bitwarden - Free Password Manager", + "message": "Bitwarden - विनामूल्य पासवर्ड व्यवस्थापक", "description": "Extension name, MUST be less than 40 characters (Safari restriction)" }, "extDesc": { - "message": "A secure and free password manager for all of your devices.", + "message": "तुमच्या सर्व उपकरणांसाठी एक सुरक्षित व विनामूल्य पासवर्ड व्यवस्थापक.", "description": "Extension description" }, "loginOrCreateNewAccount": { - "message": "Log in or create a new account to access your secure vault." + "message": "तुमच्या सुरक्षित तिजोरीत पोहचण्यासाठी लॉग इन करा किंवा नवीन खाते उघडा." }, "createAccount": { - "message": "Create account" + "message": "खाते तयार करा" }, "login": { - "message": "Log in" + "message": "प्रवेश करा" }, "enterpriseSingleSignOn": { "message": "Enterprise single sign-on" }, "cancel": { - "message": "Cancel" + "message": "रद्द" }, "close": { - "message": "Close" + "message": "मिटवा" }, "submit": { - "message": "Submit" + "message": "पाठवा" }, "emailAddress": { - "message": "Email address" + "message": "ईमेल पत्ता" }, "masterPass": { - "message": "Master password" + "message": "मुख्य पासवर्ड" }, "masterPassDesc": { "message": "The master password is the password you use to access your vault. It is very important that you do not forget your master password. There is no way to recover the password in the event that you forget it." @@ -47,49 +47,49 @@ "message": "Re-type master password" }, "masterPassHint": { - "message": "Master password hint (optional)" + "message": "मुख्य पासवर्डचा संकेत (पर्यायी)" }, "tab": { - "message": "Tab" + "message": "टॅब" }, "vault": { - "message": "Vault" + "message": "तिजोरी" }, "myVault": { - "message": "My vault" + "message": "माझी तिजोरी" }, "allVaults": { - "message": "All vaults" + "message": "सर्व तिजोऱ्या" }, "tools": { - "message": "Tools" + "message": "साधने" }, "settings": { - "message": "Settings" + "message": "मांडणी" }, "currentTab": { - "message": "Current tab" + "message": "वर्तमान टॅब" }, "copyPassword": { - "message": "Copy password" + "message": "पासवर्ड कॉपी करा" }, "copyNote": { - "message": "Copy note" + "message": "टीप कॉपी करा" }, "copyUri": { - "message": "Copy URI" + "message": "URI कॉपी करा" }, "copyUsername": { - "message": "Copy username" + "message": "वापरकर्तानाव कॉपी करा" }, "copyNumber": { - "message": "Copy number" + "message": "क्रमांक कॉपी करा" }, "copySecurityCode": { - "message": "Copy security code" + "message": "सुरक्षा कोड कॉपी करा" }, "autoFill": { - "message": "Auto-fill" + "message": "स्वयंभरण" }, "generatePasswordCopied": { "message": "Generate password (copied)" @@ -101,90 +101,90 @@ "message": "No matching logins" }, "unlockVaultMenu": { - "message": "Unlock your vault" + "message": "तिजोरी उघडा" }, "loginToVaultMenu": { - "message": "Log in to your vault" + "message": "तिजोरीत प्रवेश करा" }, "autoFillInfo": { "message": "There are no logins available to auto-fill for the current browser tab." }, "addLogin": { - "message": "Add a login" + "message": "लॉगिन जोडा" }, "addItem": { - "message": "Add item" + "message": "वस्तू जोडा" }, "passwordHint": { - "message": "Password hint" + "message": "पासवर्ड संकेत" }, "enterEmailToGetHint": { "message": "Enter your account email address to receive your master password hint." }, "getMasterPasswordHint": { - "message": "Get master password hint" + "message": "मुख्य पासवर्ड संकेत मिळवा" }, "continue": { - "message": "Continue" + "message": "पुढे" }, "sendVerificationCode": { - "message": "Send a verification code to your email" + "message": "तुमच्या ईमेलवर एक सत्यापन कोड पाठवा" }, "sendCode": { - "message": "Send code" + "message": "कोड पाठवा" }, "codeSent": { - "message": "Code sent" + "message": "कोड पाठवला" }, "verificationCode": { - "message": "Verification code" + "message": "सत्यापन कोड" }, "confirmIdentity": { - "message": "Confirm your identity to continue." + "message": "पुढे जाण्यासाठी तुमच्या ओळखीची पुष्टी करा." }, "account": { - "message": "Account" + "message": "खाते" }, "changeMasterPassword": { - "message": "Change master password" + "message": "मुख्य पासवर्ड बदला" }, "fingerprintPhrase": { - "message": "Fingerprint phrase", + "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." }, "yourAccountsFingerprint": { - "message": "Your account's fingerprint phrase", + "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": "Two-step login" + "message": "दोन टप्प्यात लॉगिन" }, "logOut": { - "message": "Log out" + "message": "बाहेर पडा" }, "about": { - "message": "About" + "message": "आमच्या विषयी" }, "version": { - "message": "Version" + "message": "आवृत्ती" }, "save": { - "message": "Save" + "message": "साठवा" }, "move": { - "message": "Move" + "message": "हलवा" }, "addFolder": { - "message": "Add folder" + "message": "फोल्डर जोडा" }, "name": { - "message": "Name" + "message": "नाव" }, "editFolder": { - "message": "Edit folder" + "message": "फोल्डर संपादित करा" }, "deleteFolder": { - "message": "Delete folder" + "message": "फोल्डर खोडून टाका" }, "folders": { "message": "Folders" @@ -205,7 +205,7 @@ "message": "Contact Bitwarden support" }, "sync": { - "message": "Sync" + "message": "संकालन" }, "syncVaultNow": { "message": "Sync vault now" @@ -214,10 +214,10 @@ "message": "Last sync:" }, "passGen": { - "message": "Password generator" + "message": "पासवर्ड जनित्र" }, "generator": { - "message": "Generator", + "message": "जनित्र", "description": "Short for 'Password Generator'." }, "passGenInfo": { @@ -227,7 +227,7 @@ "message": "Bitwarden web vault" }, "importItems": { - "message": "Import items" + "message": "वस्तू आयात करा" }, "select": { "message": "Select" @@ -236,13 +236,13 @@ "message": "Generate password" }, "regeneratePassword": { - "message": "Regenerate password" + "message": "पासवर्ड पुनर्जनित करा" }, "options": { - "message": "Options" + "message": "पर्याय" }, "length": { - "message": "Length" + "message": "लांबी" }, "uppercase": { "message": "Uppercase (A-Z)" @@ -300,61 +300,64 @@ "message": "Password" }, "passphrase": { - "message": "Passphrase" + "message": "वाक्यांश" }, "favorite": { - "message": "Favorite" + "message": "आवडते" }, "notes": { - "message": "Notes" + "message": "टिप" }, "note": { "message": "Note" }, "editItem": { - "message": "Edit item" + "message": "वस्तू संपादित करा" }, "folder": { - "message": "Folder" + "message": "फोल्डर" }, "deleteItem": { - "message": "Delete item" + "message": "वस्तू खोडून टाका" }, "viewItem": { - "message": "View item" + "message": "वस्तू बघा" }, "launch": { - "message": "Launch" + "message": "उघडा" }, "website": { - "message": "Website" + "message": "संकेतस्थळ" }, "toggleVisibility": { - "message": "Toggle visibility" + "message": "दृश्यात उलटवा" }, "manage": { - "message": "Manage" + "message": "व्यवस्थापन" }, "other": { - "message": "Other" + "message": "इतर" + }, + "unlockMethodNeededToChangeTimeoutActionDesc": { + "message": "Set up an unlock method to change your vault timeout action." }, "rateExtension": { - "message": "Rate the extension" + "message": "विस्तारकाचे मूल्यांकन करा" }, "rateExtensionDesc": { - "message": "Please consider helping us out with a good review!" + "message": "चांगला अभिप्राय देऊन आम्हाला मदत करा!" }, "browserNotSupportClipboard": { "message": "Your web browser does not support easy clipboard copying. Copy it manually instead." }, "verifyIdentity": { - "message": "Verify identity" + "message": "ओळख सत्यापित करा" }, "yourVaultIsLocked": { - "message": "Your vault is locked. Verify your identity to continue." + "message": "तुमची तिजोरीला कुलूप लावले आहे. पुढे जाण्यासाठी तुमची ओळख सत्यापित करा." }, "unlock": { - "message": "Unlock" + "message": "कुलूप उघडा" }, "loggedInAsOn": { "message": "Logged in as $EMAIL$ on $HOSTNAME$.", @@ -370,7 +373,7 @@ } }, "invalidMasterPassword": { - "message": "Invalid master password" + "message": "अवैध मुख्य पासवर्ड" }, "vaultTimeout": { "message": "Vault timeout" @@ -630,6 +633,12 @@ "notificationChangeSave": { "message": "Update" }, + "notificationUnlockDesc": { + "message": "Unlock your Bitwarden vault to complete the auto-fill request." + }, + "notificationUnlock": { + "message": "Unlock" + }, "enableContextMenuItem": { "message": "Show context menu options" }, @@ -786,8 +795,8 @@ "ppremiumSignUpStorage": { "message": "1 GB encrypted storage for file attachments." }, - "ppremiumSignUpTwoStep": { - "message": "Additional two-step login options such as YubiKey, FIDO U2F, and Duo." + "premiumSignUpTwoStepOptions": { + "message": "Proprietary two-step login options such as YubiKey and Duo." }, "ppremiumSignUpReports": { "message": "Password hygiene, account health, and data breach reports to keep your vault safe." @@ -1440,9 +1449,6 @@ "restoreItem": { "message": "Restore item" }, - "restoreItemConfirmation": { - "message": "Are you sure you want to restore this item?" - }, "restoredItem": { "message": "Item restored" }, @@ -1599,6 +1605,12 @@ "biometricsNotSupportedDesc": { "message": "Browser biometrics is not supported on this device." }, + "biometricsFailedTitle": { + "message": "Biometrics failed" + }, + "biometricsFailedDesc": { + "message": "Biometrics cannot be completed, consider using a master password or logging out. If this persists, please contact Bitwarden support." + }, "nativeMessaginPermissionErrorTitle": { "message": "Permission not provided" }, @@ -2140,8 +2152,8 @@ "notificationSentDevice": { "message": "A notification has been sent to your device." }, - "logInInitiated": { - "message": "Log in initiated" + "loginInitiated": { + "message": "Login initiated" }, "exposedMasterPassword": { "message": "Exposed Master Password" @@ -2221,19 +2233,42 @@ } } }, - "region": { - "message": "Region" + "loggingInOn": { + "message": "Logging in on" }, "opensInANewWindow": { "message": "Opens in a new window" }, + "deviceApprovalRequired": { + "message": "Device approval required. Select an approval option below:" + }, + "rememberThisDevice": { + "message": "Remember this device" + }, + "uncheckIfPublicDevice": { + "message": "Uncheck if using a public device" + }, + "approveFromYourOtherDevice": { + "message": "Approve from your other device" + }, + "requestAdminApproval": { + "message": "Request admin approval" + }, + "approveWithMasterPassword": { + "message": "Approve with master password" + }, + "ssoIdentifierRequired": { + "message": "Organization SSO identifier is required." + }, "eu": { "message": "EU", "description": "European Union" }, - "us": { - "message": "US", - "description": "United States" + "usDomain": { + "message": "bitwarden.com" + }, + "euDomain": { + "message": "bitwarden.eu" }, "accessDenied": { "message": "Access denied. You do not have permission to view this page." @@ -2243,5 +2278,133 @@ }, "display": { "message": "Display" + }, + "accountSuccessfullyCreated": { + "message": "Account successfully created!" + }, + "adminApprovalRequested": { + "message": "Admin approval requested" + }, + "adminApprovalRequestSentToAdmins": { + "message": "Your request has been sent to your admin." + }, + "youWillBeNotifiedOnceApproved": { + "message": "You will be notified once approved." + }, + "troubleLoggingIn": { + "message": "Trouble logging in?" + }, + "loginApproved": { + "message": "Login approved" + }, + "userEmailMissing": { + "message": "User email missing" + }, + "deviceTrusted": { + "message": "Device trusted" + }, + "inputRequired": { + "message": "Input is required." + }, + "required": { + "message": "required" + }, + "search": { + "message": "Search" + }, + "inputMinLength": { + "message": "Input must be at least $COUNT$ characters long.", + "placeholders": { + "count": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxLength": { + "message": "Input must not exceed $COUNT$ characters in length.", + "placeholders": { + "count": { + "content": "$1", + "example": "20" + } + } + }, + "inputForbiddenCharacters": { + "message": "The following characters are not allowed: $CHARACTERS$", + "placeholders": { + "characters": { + "content": "$1", + "example": "@, #, $, %" + } + } + }, + "inputMinValue": { + "message": "Input value must be at least $MIN$.", + "placeholders": { + "min": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxValue": { + "message": "Input value must not exceed $MAX$.", + "placeholders": { + "max": { + "content": "$1", + "example": "100" + } + } + }, + "multipleInputEmails": { + "message": "1 or more emails are invalid" + }, + "inputTrimValidator": { + "message": "Input must not contain only whitespace.", + "description": "Notification to inform the user that a form's input can't contain only whitespace." + }, + "inputEmail": { + "message": "Input is not an email address." + }, + "fieldsNeedAttention": { + "message": "$COUNT$ field(s) above need your attention.", + "placeholders": { + "count": { + "content": "$1", + "example": "4" + } + } + }, + "selectPlaceholder": { + "message": "-- Select --" + }, + "multiSelectPlaceholder": { + "message": "-- Type to filter --" + }, + "multiSelectLoading": { + "message": "Retrieving options..." + }, + "multiSelectNotFound": { + "message": "No items found" + }, + "multiSelectClearAll": { + "message": "Clear all" + }, + "plusNMore": { + "message": "+ $QUANTITY$ more", + "placeholders": { + "quantity": { + "content": "$1", + "example": "5" + } + } + }, + "submenu": { + "message": "Submenu" + }, + "toggleCollapse": { + "message": "Toggle collapse", + "description": "Toggling an expand/collapse state." } } diff --git a/apps/browser/src/_locales/my/messages.json b/apps/browser/src/_locales/my/messages.json index 9e46b55f19e..6aea5876eac 100644 --- a/apps/browser/src/_locales/my/messages.json +++ b/apps/browser/src/_locales/my/messages.json @@ -338,6 +338,9 @@ "other": { "message": "Other" }, + "unlockMethodNeededToChangeTimeoutActionDesc": { + "message": "Set up an unlock method to change your vault timeout action." + }, "rateExtension": { "message": "Rate the extension" }, @@ -630,6 +633,12 @@ "notificationChangeSave": { "message": "Update" }, + "notificationUnlockDesc": { + "message": "Unlock your Bitwarden vault to complete the auto-fill request." + }, + "notificationUnlock": { + "message": "Unlock" + }, "enableContextMenuItem": { "message": "Show context menu options" }, @@ -786,8 +795,8 @@ "ppremiumSignUpStorage": { "message": "1 GB encrypted storage for file attachments." }, - "ppremiumSignUpTwoStep": { - "message": "Additional two-step login options such as YubiKey, FIDO U2F, and Duo." + "premiumSignUpTwoStepOptions": { + "message": "Proprietary two-step login options such as YubiKey and Duo." }, "ppremiumSignUpReports": { "message": "Password hygiene, account health, and data breach reports to keep your vault safe." @@ -1440,9 +1449,6 @@ "restoreItem": { "message": "Restore item" }, - "restoreItemConfirmation": { - "message": "Are you sure you want to restore this item?" - }, "restoredItem": { "message": "Item restored" }, @@ -1599,6 +1605,12 @@ "biometricsNotSupportedDesc": { "message": "Browser biometrics is not supported on this device." }, + "biometricsFailedTitle": { + "message": "Biometrics failed" + }, + "biometricsFailedDesc": { + "message": "Biometrics cannot be completed, consider using a master password or logging out. If this persists, please contact Bitwarden support." + }, "nativeMessaginPermissionErrorTitle": { "message": "Permission not provided" }, @@ -2140,8 +2152,8 @@ "notificationSentDevice": { "message": "A notification has been sent to your device." }, - "logInInitiated": { - "message": "Log in initiated" + "loginInitiated": { + "message": "Login initiated" }, "exposedMasterPassword": { "message": "Exposed Master Password" @@ -2221,19 +2233,42 @@ } } }, - "region": { - "message": "Region" + "loggingInOn": { + "message": "Logging in on" }, "opensInANewWindow": { "message": "Opens in a new window" }, + "deviceApprovalRequired": { + "message": "Device approval required. Select an approval option below:" + }, + "rememberThisDevice": { + "message": "Remember this device" + }, + "uncheckIfPublicDevice": { + "message": "Uncheck if using a public device" + }, + "approveFromYourOtherDevice": { + "message": "Approve from your other device" + }, + "requestAdminApproval": { + "message": "Request admin approval" + }, + "approveWithMasterPassword": { + "message": "Approve with master password" + }, + "ssoIdentifierRequired": { + "message": "Organization SSO identifier is required." + }, "eu": { "message": "EU", "description": "European Union" }, - "us": { - "message": "US", - "description": "United States" + "usDomain": { + "message": "bitwarden.com" + }, + "euDomain": { + "message": "bitwarden.eu" }, "accessDenied": { "message": "Access denied. You do not have permission to view this page." @@ -2243,5 +2278,133 @@ }, "display": { "message": "Display" + }, + "accountSuccessfullyCreated": { + "message": "Account successfully created!" + }, + "adminApprovalRequested": { + "message": "Admin approval requested" + }, + "adminApprovalRequestSentToAdmins": { + "message": "Your request has been sent to your admin." + }, + "youWillBeNotifiedOnceApproved": { + "message": "You will be notified once approved." + }, + "troubleLoggingIn": { + "message": "Trouble logging in?" + }, + "loginApproved": { + "message": "Login approved" + }, + "userEmailMissing": { + "message": "User email missing" + }, + "deviceTrusted": { + "message": "Device trusted" + }, + "inputRequired": { + "message": "Input is required." + }, + "required": { + "message": "required" + }, + "search": { + "message": "Search" + }, + "inputMinLength": { + "message": "Input must be at least $COUNT$ characters long.", + "placeholders": { + "count": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxLength": { + "message": "Input must not exceed $COUNT$ characters in length.", + "placeholders": { + "count": { + "content": "$1", + "example": "20" + } + } + }, + "inputForbiddenCharacters": { + "message": "The following characters are not allowed: $CHARACTERS$", + "placeholders": { + "characters": { + "content": "$1", + "example": "@, #, $, %" + } + } + }, + "inputMinValue": { + "message": "Input value must be at least $MIN$.", + "placeholders": { + "min": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxValue": { + "message": "Input value must not exceed $MAX$.", + "placeholders": { + "max": { + "content": "$1", + "example": "100" + } + } + }, + "multipleInputEmails": { + "message": "1 or more emails are invalid" + }, + "inputTrimValidator": { + "message": "Input must not contain only whitespace.", + "description": "Notification to inform the user that a form's input can't contain only whitespace." + }, + "inputEmail": { + "message": "Input is not an email address." + }, + "fieldsNeedAttention": { + "message": "$COUNT$ field(s) above need your attention.", + "placeholders": { + "count": { + "content": "$1", + "example": "4" + } + } + }, + "selectPlaceholder": { + "message": "-- Select --" + }, + "multiSelectPlaceholder": { + "message": "-- Type to filter --" + }, + "multiSelectLoading": { + "message": "Retrieving options..." + }, + "multiSelectNotFound": { + "message": "No items found" + }, + "multiSelectClearAll": { + "message": "Clear all" + }, + "plusNMore": { + "message": "+ $QUANTITY$ more", + "placeholders": { + "quantity": { + "content": "$1", + "example": "5" + } + } + }, + "submenu": { + "message": "Submenu" + }, + "toggleCollapse": { + "message": "Toggle collapse", + "description": "Toggling an expand/collapse state." } } diff --git a/apps/browser/src/_locales/nb/messages.json b/apps/browser/src/_locales/nb/messages.json index 596a717c203..e806ea0a781 100644 --- a/apps/browser/src/_locales/nb/messages.json +++ b/apps/browser/src/_locales/nb/messages.json @@ -338,6 +338,9 @@ "other": { "message": "Annet" }, + "unlockMethodNeededToChangeTimeoutActionDesc": { + "message": "Set up an unlock method to change your vault timeout action." + }, "rateExtension": { "message": "Gi denne utvidelsen en vurdering" }, @@ -630,6 +633,12 @@ "notificationChangeSave": { "message": "Ja, oppdater nå" }, + "notificationUnlockDesc": { + "message": "Unlock your Bitwarden vault to complete the auto-fill request." + }, + "notificationUnlock": { + "message": "Unlock" + }, "enableContextMenuItem": { "message": "Vis alternativer for kontekstmeny" }, @@ -786,8 +795,8 @@ "ppremiumSignUpStorage": { "message": "1 GB med kryptert fillagring for filvedlegg." }, - "ppremiumSignUpTwoStep": { - "message": "Ytterligere 2-trinnsinnloggingsmuligheter, slik som YubiKey, FIDO U2F, og Duo." + "premiumSignUpTwoStepOptions": { + "message": "Proprietary two-step login options such as YubiKey and Duo." }, "ppremiumSignUpReports": { "message": "Passordhygiene, kontohelse, og databruddsrapporter som holder hvelvet ditt trygt." @@ -1440,9 +1449,6 @@ "restoreItem": { "message": "Gjenopprett objekt" }, - "restoreItemConfirmation": { - "message": "Er du sikker på at du vil gjenopprette dette elementet?" - }, "restoredItem": { "message": "Gjenopprettet objekt" }, @@ -1599,6 +1605,12 @@ "biometricsNotSupportedDesc": { "message": "Biometri i nettleseren støttes ikke på denne enheten." }, + "biometricsFailedTitle": { + "message": "Biometrics failed" + }, + "biometricsFailedDesc": { + "message": "Biometrics cannot be completed, consider using a master password or logging out. If this persists, please contact Bitwarden support." + }, "nativeMessaginPermissionErrorTitle": { "message": "Tillatelse er ikke gitt" }, @@ -2140,8 +2152,8 @@ "notificationSentDevice": { "message": "Et varsel er sendt til enheten din." }, - "logInInitiated": { - "message": "Innlogging startet" + "loginInitiated": { + "message": "Login initiated" }, "exposedMasterPassword": { "message": "Eksponert hovedpassord" @@ -2221,19 +2233,42 @@ } } }, - "region": { - "message": "Region" + "loggingInOn": { + "message": "Logging in on" }, "opensInANewWindow": { "message": "Opens in a new window" }, + "deviceApprovalRequired": { + "message": "Device approval required. Select an approval option below:" + }, + "rememberThisDevice": { + "message": "Remember this device" + }, + "uncheckIfPublicDevice": { + "message": "Uncheck if using a public device" + }, + "approveFromYourOtherDevice": { + "message": "Approve from your other device" + }, + "requestAdminApproval": { + "message": "Request admin approval" + }, + "approveWithMasterPassword": { + "message": "Approve with master password" + }, + "ssoIdentifierRequired": { + "message": "Organization SSO identifier is required." + }, "eu": { "message": "EU", "description": "European Union" }, - "us": { - "message": "US", - "description": "United States" + "usDomain": { + "message": "bitwarden.com" + }, + "euDomain": { + "message": "bitwarden.eu" }, "accessDenied": { "message": "Access denied. You do not have permission to view this page." @@ -2243,5 +2278,133 @@ }, "display": { "message": "Display" + }, + "accountSuccessfullyCreated": { + "message": "Account successfully created!" + }, + "adminApprovalRequested": { + "message": "Admin approval requested" + }, + "adminApprovalRequestSentToAdmins": { + "message": "Your request has been sent to your admin." + }, + "youWillBeNotifiedOnceApproved": { + "message": "You will be notified once approved." + }, + "troubleLoggingIn": { + "message": "Trouble logging in?" + }, + "loginApproved": { + "message": "Login approved" + }, + "userEmailMissing": { + "message": "User email missing" + }, + "deviceTrusted": { + "message": "Device trusted" + }, + "inputRequired": { + "message": "Input is required." + }, + "required": { + "message": "required" + }, + "search": { + "message": "Search" + }, + "inputMinLength": { + "message": "Input must be at least $COUNT$ characters long.", + "placeholders": { + "count": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxLength": { + "message": "Input must not exceed $COUNT$ characters in length.", + "placeholders": { + "count": { + "content": "$1", + "example": "20" + } + } + }, + "inputForbiddenCharacters": { + "message": "The following characters are not allowed: $CHARACTERS$", + "placeholders": { + "characters": { + "content": "$1", + "example": "@, #, $, %" + } + } + }, + "inputMinValue": { + "message": "Input value must be at least $MIN$.", + "placeholders": { + "min": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxValue": { + "message": "Input value must not exceed $MAX$.", + "placeholders": { + "max": { + "content": "$1", + "example": "100" + } + } + }, + "multipleInputEmails": { + "message": "1 or more emails are invalid" + }, + "inputTrimValidator": { + "message": "Input must not contain only whitespace.", + "description": "Notification to inform the user that a form's input can't contain only whitespace." + }, + "inputEmail": { + "message": "Input is not an email address." + }, + "fieldsNeedAttention": { + "message": "$COUNT$ field(s) above need your attention.", + "placeholders": { + "count": { + "content": "$1", + "example": "4" + } + } + }, + "selectPlaceholder": { + "message": "-- Select --" + }, + "multiSelectPlaceholder": { + "message": "-- Type to filter --" + }, + "multiSelectLoading": { + "message": "Retrieving options..." + }, + "multiSelectNotFound": { + "message": "No items found" + }, + "multiSelectClearAll": { + "message": "Clear all" + }, + "plusNMore": { + "message": "+ $QUANTITY$ more", + "placeholders": { + "quantity": { + "content": "$1", + "example": "5" + } + } + }, + "submenu": { + "message": "Submenu" + }, + "toggleCollapse": { + "message": "Toggle collapse", + "description": "Toggling an expand/collapse state." } } diff --git a/apps/browser/src/_locales/ne/messages.json b/apps/browser/src/_locales/ne/messages.json index 9e46b55f19e..6aea5876eac 100644 --- a/apps/browser/src/_locales/ne/messages.json +++ b/apps/browser/src/_locales/ne/messages.json @@ -338,6 +338,9 @@ "other": { "message": "Other" }, + "unlockMethodNeededToChangeTimeoutActionDesc": { + "message": "Set up an unlock method to change your vault timeout action." + }, "rateExtension": { "message": "Rate the extension" }, @@ -630,6 +633,12 @@ "notificationChangeSave": { "message": "Update" }, + "notificationUnlockDesc": { + "message": "Unlock your Bitwarden vault to complete the auto-fill request." + }, + "notificationUnlock": { + "message": "Unlock" + }, "enableContextMenuItem": { "message": "Show context menu options" }, @@ -786,8 +795,8 @@ "ppremiumSignUpStorage": { "message": "1 GB encrypted storage for file attachments." }, - "ppremiumSignUpTwoStep": { - "message": "Additional two-step login options such as YubiKey, FIDO U2F, and Duo." + "premiumSignUpTwoStepOptions": { + "message": "Proprietary two-step login options such as YubiKey and Duo." }, "ppremiumSignUpReports": { "message": "Password hygiene, account health, and data breach reports to keep your vault safe." @@ -1440,9 +1449,6 @@ "restoreItem": { "message": "Restore item" }, - "restoreItemConfirmation": { - "message": "Are you sure you want to restore this item?" - }, "restoredItem": { "message": "Item restored" }, @@ -1599,6 +1605,12 @@ "biometricsNotSupportedDesc": { "message": "Browser biometrics is not supported on this device." }, + "biometricsFailedTitle": { + "message": "Biometrics failed" + }, + "biometricsFailedDesc": { + "message": "Biometrics cannot be completed, consider using a master password or logging out. If this persists, please contact Bitwarden support." + }, "nativeMessaginPermissionErrorTitle": { "message": "Permission not provided" }, @@ -2140,8 +2152,8 @@ "notificationSentDevice": { "message": "A notification has been sent to your device." }, - "logInInitiated": { - "message": "Log in initiated" + "loginInitiated": { + "message": "Login initiated" }, "exposedMasterPassword": { "message": "Exposed Master Password" @@ -2221,19 +2233,42 @@ } } }, - "region": { - "message": "Region" + "loggingInOn": { + "message": "Logging in on" }, "opensInANewWindow": { "message": "Opens in a new window" }, + "deviceApprovalRequired": { + "message": "Device approval required. Select an approval option below:" + }, + "rememberThisDevice": { + "message": "Remember this device" + }, + "uncheckIfPublicDevice": { + "message": "Uncheck if using a public device" + }, + "approveFromYourOtherDevice": { + "message": "Approve from your other device" + }, + "requestAdminApproval": { + "message": "Request admin approval" + }, + "approveWithMasterPassword": { + "message": "Approve with master password" + }, + "ssoIdentifierRequired": { + "message": "Organization SSO identifier is required." + }, "eu": { "message": "EU", "description": "European Union" }, - "us": { - "message": "US", - "description": "United States" + "usDomain": { + "message": "bitwarden.com" + }, + "euDomain": { + "message": "bitwarden.eu" }, "accessDenied": { "message": "Access denied. You do not have permission to view this page." @@ -2243,5 +2278,133 @@ }, "display": { "message": "Display" + }, + "accountSuccessfullyCreated": { + "message": "Account successfully created!" + }, + "adminApprovalRequested": { + "message": "Admin approval requested" + }, + "adminApprovalRequestSentToAdmins": { + "message": "Your request has been sent to your admin." + }, + "youWillBeNotifiedOnceApproved": { + "message": "You will be notified once approved." + }, + "troubleLoggingIn": { + "message": "Trouble logging in?" + }, + "loginApproved": { + "message": "Login approved" + }, + "userEmailMissing": { + "message": "User email missing" + }, + "deviceTrusted": { + "message": "Device trusted" + }, + "inputRequired": { + "message": "Input is required." + }, + "required": { + "message": "required" + }, + "search": { + "message": "Search" + }, + "inputMinLength": { + "message": "Input must be at least $COUNT$ characters long.", + "placeholders": { + "count": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxLength": { + "message": "Input must not exceed $COUNT$ characters in length.", + "placeholders": { + "count": { + "content": "$1", + "example": "20" + } + } + }, + "inputForbiddenCharacters": { + "message": "The following characters are not allowed: $CHARACTERS$", + "placeholders": { + "characters": { + "content": "$1", + "example": "@, #, $, %" + } + } + }, + "inputMinValue": { + "message": "Input value must be at least $MIN$.", + "placeholders": { + "min": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxValue": { + "message": "Input value must not exceed $MAX$.", + "placeholders": { + "max": { + "content": "$1", + "example": "100" + } + } + }, + "multipleInputEmails": { + "message": "1 or more emails are invalid" + }, + "inputTrimValidator": { + "message": "Input must not contain only whitespace.", + "description": "Notification to inform the user that a form's input can't contain only whitespace." + }, + "inputEmail": { + "message": "Input is not an email address." + }, + "fieldsNeedAttention": { + "message": "$COUNT$ field(s) above need your attention.", + "placeholders": { + "count": { + "content": "$1", + "example": "4" + } + } + }, + "selectPlaceholder": { + "message": "-- Select --" + }, + "multiSelectPlaceholder": { + "message": "-- Type to filter --" + }, + "multiSelectLoading": { + "message": "Retrieving options..." + }, + "multiSelectNotFound": { + "message": "No items found" + }, + "multiSelectClearAll": { + "message": "Clear all" + }, + "plusNMore": { + "message": "+ $QUANTITY$ more", + "placeholders": { + "quantity": { + "content": "$1", + "example": "5" + } + } + }, + "submenu": { + "message": "Submenu" + }, + "toggleCollapse": { + "message": "Toggle collapse", + "description": "Toggling an expand/collapse state." } } diff --git a/apps/browser/src/_locales/nl/messages.json b/apps/browser/src/_locales/nl/messages.json index 130524de47b..f34016f70f0 100644 --- a/apps/browser/src/_locales/nl/messages.json +++ b/apps/browser/src/_locales/nl/messages.json @@ -338,6 +338,9 @@ "other": { "message": "Overig" }, + "unlockMethodNeededToChangeTimeoutActionDesc": { + "message": "Stel een ontgrendelingsmethode in om je kluis time-out actie te wijzigen." + }, "rateExtension": { "message": "Deze extensie beoordelen" }, @@ -630,6 +633,12 @@ "notificationChangeSave": { "message": "Ja, nu bijwerken" }, + "notificationUnlockDesc": { + "message": "Ontgrendel je Bitwarden-kluis om het auto-invulverzoek te voltooien." + }, + "notificationUnlock": { + "message": "Ontgrendelen" + }, "enableContextMenuItem": { "message": "Contextmenu-opties weergeven" }, @@ -786,8 +795,8 @@ "ppremiumSignUpStorage": { "message": "1 GB versleutelde opslag voor bijlagen." }, - "ppremiumSignUpTwoStep": { - "message": "Extra opties voor tweestapsaanmelding zoals YubiKey, FIDO U2F en Duo." + "premiumSignUpTwoStepOptions": { + "message": "Eigen opties voor tweestapsaanmelding zoals YubiKey en Duo." }, "ppremiumSignUpReports": { "message": "Wachtwoordhygiëne, gezondheid van je account en datalekken om je kluis veilig te houden." @@ -1440,9 +1449,6 @@ "restoreItem": { "message": "Item herstellen" }, - "restoreItemConfirmation": { - "message": "Weet je zeker dat je dit item wilt herstellen?" - }, "restoredItem": { "message": "Hersteld item" }, @@ -1599,6 +1605,12 @@ "biometricsNotSupportedDesc": { "message": "Dit apparaat ondersteunt geen browserbiometrie." }, + "biometricsFailedTitle": { + "message": "Biometrie mislukt" + }, + "biometricsFailedDesc": { + "message": "Kan biometrische authenticatie niet voltooien, gebruik een hoofdwachtwoord of log uit. Neem contact op met de ondersteuning van Bitwarden als dit blijft aanhouden." + }, "nativeMessaginPermissionErrorTitle": { "message": "Toestemming niet verleend" }, @@ -2140,7 +2152,7 @@ "notificationSentDevice": { "message": "Er is een melding naar je apparaat verzonden." }, - "logInInitiated": { + "loginInitiated": { "message": "Inloggen gestart" }, "exposedMasterPassword": { @@ -2221,19 +2233,42 @@ } } }, - "region": { - "message": "Regio" + "loggingInOn": { + "message": "Inloggen op" }, "opensInANewWindow": { "message": "Opent in een nieuw venster" }, + "deviceApprovalRequired": { + "message": "Apparaattoestemming vereist. Kies een goedkeuringsoptie hieronder:" + }, + "rememberThisDevice": { + "message": "Dit apparaat onthouden" + }, + "uncheckIfPublicDevice": { + "message": "Uitschakelen als je openbaar apparaat gebruikt" + }, + "approveFromYourOtherDevice": { + "message": "Goedkeuren vanaf je andere apparaat" + }, + "requestAdminApproval": { + "message": "Goedkeuring van beheerder vragen" + }, + "approveWithMasterPassword": { + "message": "Goedkeuren met hoofdwachtwoord" + }, + "ssoIdentifierRequired": { + "message": "Organisatie SSO-identificatie vereist." + }, "eu": { "message": "EU", "description": "European Union" }, - "us": { - "message": "US", - "description": "United States" + "usDomain": { + "message": "bitwarden.com" + }, + "euDomain": { + "message": "bitwarden.eu" }, "accessDenied": { "message": "Toegang geweigerd. Je hebt geen toestemming om deze pagina te bekijken." @@ -2243,5 +2278,133 @@ }, "display": { "message": "Display" + }, + "accountSuccessfullyCreated": { + "message": "Account succesvol aangemaakt!" + }, + "adminApprovalRequested": { + "message": "Goedkeuring van beheerder aangevraagd" + }, + "adminApprovalRequestSentToAdmins": { + "message": "Je verzoek is naar je beheerder verstuurd." + }, + "youWillBeNotifiedOnceApproved": { + "message": "Je krijgt een melding zodra je bent goedgekeurd." + }, + "troubleLoggingIn": { + "message": "Problemen met inloggen?" + }, + "loginApproved": { + "message": "Inloggen goedgekeurd" + }, + "userEmailMissing": { + "message": "Gebruikerse-mailadres ontbreekt" + }, + "deviceTrusted": { + "message": "Vertrouwd apparaat" + }, + "inputRequired": { + "message": "Invoer vereist." + }, + "required": { + "message": "vereist" + }, + "search": { + "message": "Zoeken" + }, + "inputMinLength": { + "message": "Invoer moet minimaal $COUNT$ tekens lang zijn.", + "placeholders": { + "count": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxLength": { + "message": "Invoer mag niet meer dan $COUNT$ tekens lang zijn.", + "placeholders": { + "count": { + "content": "$1", + "example": "20" + } + } + }, + "inputForbiddenCharacters": { + "message": "De volgende tekens zijn niet toegestaan: $CHARACTERS$", + "placeholders": { + "characters": { + "content": "$1", + "example": "@, #, $, %" + } + } + }, + "inputMinValue": { + "message": "Invoer moet minimaal $MIN$ zijn.", + "placeholders": { + "min": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxValue": { + "message": "Invoer mag niet hoger zijn dan $MAX$.", + "placeholders": { + "max": { + "content": "$1", + "example": "100" + } + } + }, + "multipleInputEmails": { + "message": "Een of meer e-mailadressen zijn ongeldig" + }, + "inputTrimValidator": { + "message": "Invoer mag niet alleen witruimte bevatten.", + "description": "Notification to inform the user that a form's input can't contain only whitespace." + }, + "inputEmail": { + "message": "Invoer is geen e-mailadres." + }, + "fieldsNeedAttention": { + "message": "$COUNT$ veld(en) hierboven hebben je aandacht nodig.", + "placeholders": { + "count": { + "content": "$1", + "example": "4" + } + } + }, + "selectPlaceholder": { + "message": "-- Selecteer --" + }, + "multiSelectPlaceholder": { + "message": "-- Type om te filteren --" + }, + "multiSelectLoading": { + "message": "Opties ophalen..." + }, + "multiSelectNotFound": { + "message": "Geen items gevonden" + }, + "multiSelectClearAll": { + "message": "Alles wissen" + }, + "plusNMore": { + "message": "+ $QUANTITY$ meer", + "placeholders": { + "quantity": { + "content": "$1", + "example": "5" + } + } + }, + "submenu": { + "message": "Submenu" + }, + "toggleCollapse": { + "message": "In-/Uitklappen", + "description": "Toggling an expand/collapse state." } } diff --git a/apps/browser/src/_locales/nn/messages.json b/apps/browser/src/_locales/nn/messages.json index 9e46b55f19e..6aea5876eac 100644 --- a/apps/browser/src/_locales/nn/messages.json +++ b/apps/browser/src/_locales/nn/messages.json @@ -338,6 +338,9 @@ "other": { "message": "Other" }, + "unlockMethodNeededToChangeTimeoutActionDesc": { + "message": "Set up an unlock method to change your vault timeout action." + }, "rateExtension": { "message": "Rate the extension" }, @@ -630,6 +633,12 @@ "notificationChangeSave": { "message": "Update" }, + "notificationUnlockDesc": { + "message": "Unlock your Bitwarden vault to complete the auto-fill request." + }, + "notificationUnlock": { + "message": "Unlock" + }, "enableContextMenuItem": { "message": "Show context menu options" }, @@ -786,8 +795,8 @@ "ppremiumSignUpStorage": { "message": "1 GB encrypted storage for file attachments." }, - "ppremiumSignUpTwoStep": { - "message": "Additional two-step login options such as YubiKey, FIDO U2F, and Duo." + "premiumSignUpTwoStepOptions": { + "message": "Proprietary two-step login options such as YubiKey and Duo." }, "ppremiumSignUpReports": { "message": "Password hygiene, account health, and data breach reports to keep your vault safe." @@ -1440,9 +1449,6 @@ "restoreItem": { "message": "Restore item" }, - "restoreItemConfirmation": { - "message": "Are you sure you want to restore this item?" - }, "restoredItem": { "message": "Item restored" }, @@ -1599,6 +1605,12 @@ "biometricsNotSupportedDesc": { "message": "Browser biometrics is not supported on this device." }, + "biometricsFailedTitle": { + "message": "Biometrics failed" + }, + "biometricsFailedDesc": { + "message": "Biometrics cannot be completed, consider using a master password or logging out. If this persists, please contact Bitwarden support." + }, "nativeMessaginPermissionErrorTitle": { "message": "Permission not provided" }, @@ -2140,8 +2152,8 @@ "notificationSentDevice": { "message": "A notification has been sent to your device." }, - "logInInitiated": { - "message": "Log in initiated" + "loginInitiated": { + "message": "Login initiated" }, "exposedMasterPassword": { "message": "Exposed Master Password" @@ -2221,19 +2233,42 @@ } } }, - "region": { - "message": "Region" + "loggingInOn": { + "message": "Logging in on" }, "opensInANewWindow": { "message": "Opens in a new window" }, + "deviceApprovalRequired": { + "message": "Device approval required. Select an approval option below:" + }, + "rememberThisDevice": { + "message": "Remember this device" + }, + "uncheckIfPublicDevice": { + "message": "Uncheck if using a public device" + }, + "approveFromYourOtherDevice": { + "message": "Approve from your other device" + }, + "requestAdminApproval": { + "message": "Request admin approval" + }, + "approveWithMasterPassword": { + "message": "Approve with master password" + }, + "ssoIdentifierRequired": { + "message": "Organization SSO identifier is required." + }, "eu": { "message": "EU", "description": "European Union" }, - "us": { - "message": "US", - "description": "United States" + "usDomain": { + "message": "bitwarden.com" + }, + "euDomain": { + "message": "bitwarden.eu" }, "accessDenied": { "message": "Access denied. You do not have permission to view this page." @@ -2243,5 +2278,133 @@ }, "display": { "message": "Display" + }, + "accountSuccessfullyCreated": { + "message": "Account successfully created!" + }, + "adminApprovalRequested": { + "message": "Admin approval requested" + }, + "adminApprovalRequestSentToAdmins": { + "message": "Your request has been sent to your admin." + }, + "youWillBeNotifiedOnceApproved": { + "message": "You will be notified once approved." + }, + "troubleLoggingIn": { + "message": "Trouble logging in?" + }, + "loginApproved": { + "message": "Login approved" + }, + "userEmailMissing": { + "message": "User email missing" + }, + "deviceTrusted": { + "message": "Device trusted" + }, + "inputRequired": { + "message": "Input is required." + }, + "required": { + "message": "required" + }, + "search": { + "message": "Search" + }, + "inputMinLength": { + "message": "Input must be at least $COUNT$ characters long.", + "placeholders": { + "count": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxLength": { + "message": "Input must not exceed $COUNT$ characters in length.", + "placeholders": { + "count": { + "content": "$1", + "example": "20" + } + } + }, + "inputForbiddenCharacters": { + "message": "The following characters are not allowed: $CHARACTERS$", + "placeholders": { + "characters": { + "content": "$1", + "example": "@, #, $, %" + } + } + }, + "inputMinValue": { + "message": "Input value must be at least $MIN$.", + "placeholders": { + "min": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxValue": { + "message": "Input value must not exceed $MAX$.", + "placeholders": { + "max": { + "content": "$1", + "example": "100" + } + } + }, + "multipleInputEmails": { + "message": "1 or more emails are invalid" + }, + "inputTrimValidator": { + "message": "Input must not contain only whitespace.", + "description": "Notification to inform the user that a form's input can't contain only whitespace." + }, + "inputEmail": { + "message": "Input is not an email address." + }, + "fieldsNeedAttention": { + "message": "$COUNT$ field(s) above need your attention.", + "placeholders": { + "count": { + "content": "$1", + "example": "4" + } + } + }, + "selectPlaceholder": { + "message": "-- Select --" + }, + "multiSelectPlaceholder": { + "message": "-- Type to filter --" + }, + "multiSelectLoading": { + "message": "Retrieving options..." + }, + "multiSelectNotFound": { + "message": "No items found" + }, + "multiSelectClearAll": { + "message": "Clear all" + }, + "plusNMore": { + "message": "+ $QUANTITY$ more", + "placeholders": { + "quantity": { + "content": "$1", + "example": "5" + } + } + }, + "submenu": { + "message": "Submenu" + }, + "toggleCollapse": { + "message": "Toggle collapse", + "description": "Toggling an expand/collapse state." } } diff --git a/apps/browser/src/_locales/or/messages.json b/apps/browser/src/_locales/or/messages.json index 9e46b55f19e..6aea5876eac 100644 --- a/apps/browser/src/_locales/or/messages.json +++ b/apps/browser/src/_locales/or/messages.json @@ -338,6 +338,9 @@ "other": { "message": "Other" }, + "unlockMethodNeededToChangeTimeoutActionDesc": { + "message": "Set up an unlock method to change your vault timeout action." + }, "rateExtension": { "message": "Rate the extension" }, @@ -630,6 +633,12 @@ "notificationChangeSave": { "message": "Update" }, + "notificationUnlockDesc": { + "message": "Unlock your Bitwarden vault to complete the auto-fill request." + }, + "notificationUnlock": { + "message": "Unlock" + }, "enableContextMenuItem": { "message": "Show context menu options" }, @@ -786,8 +795,8 @@ "ppremiumSignUpStorage": { "message": "1 GB encrypted storage for file attachments." }, - "ppremiumSignUpTwoStep": { - "message": "Additional two-step login options such as YubiKey, FIDO U2F, and Duo." + "premiumSignUpTwoStepOptions": { + "message": "Proprietary two-step login options such as YubiKey and Duo." }, "ppremiumSignUpReports": { "message": "Password hygiene, account health, and data breach reports to keep your vault safe." @@ -1440,9 +1449,6 @@ "restoreItem": { "message": "Restore item" }, - "restoreItemConfirmation": { - "message": "Are you sure you want to restore this item?" - }, "restoredItem": { "message": "Item restored" }, @@ -1599,6 +1605,12 @@ "biometricsNotSupportedDesc": { "message": "Browser biometrics is not supported on this device." }, + "biometricsFailedTitle": { + "message": "Biometrics failed" + }, + "biometricsFailedDesc": { + "message": "Biometrics cannot be completed, consider using a master password or logging out. If this persists, please contact Bitwarden support." + }, "nativeMessaginPermissionErrorTitle": { "message": "Permission not provided" }, @@ -2140,8 +2152,8 @@ "notificationSentDevice": { "message": "A notification has been sent to your device." }, - "logInInitiated": { - "message": "Log in initiated" + "loginInitiated": { + "message": "Login initiated" }, "exposedMasterPassword": { "message": "Exposed Master Password" @@ -2221,19 +2233,42 @@ } } }, - "region": { - "message": "Region" + "loggingInOn": { + "message": "Logging in on" }, "opensInANewWindow": { "message": "Opens in a new window" }, + "deviceApprovalRequired": { + "message": "Device approval required. Select an approval option below:" + }, + "rememberThisDevice": { + "message": "Remember this device" + }, + "uncheckIfPublicDevice": { + "message": "Uncheck if using a public device" + }, + "approveFromYourOtherDevice": { + "message": "Approve from your other device" + }, + "requestAdminApproval": { + "message": "Request admin approval" + }, + "approveWithMasterPassword": { + "message": "Approve with master password" + }, + "ssoIdentifierRequired": { + "message": "Organization SSO identifier is required." + }, "eu": { "message": "EU", "description": "European Union" }, - "us": { - "message": "US", - "description": "United States" + "usDomain": { + "message": "bitwarden.com" + }, + "euDomain": { + "message": "bitwarden.eu" }, "accessDenied": { "message": "Access denied. You do not have permission to view this page." @@ -2243,5 +2278,133 @@ }, "display": { "message": "Display" + }, + "accountSuccessfullyCreated": { + "message": "Account successfully created!" + }, + "adminApprovalRequested": { + "message": "Admin approval requested" + }, + "adminApprovalRequestSentToAdmins": { + "message": "Your request has been sent to your admin." + }, + "youWillBeNotifiedOnceApproved": { + "message": "You will be notified once approved." + }, + "troubleLoggingIn": { + "message": "Trouble logging in?" + }, + "loginApproved": { + "message": "Login approved" + }, + "userEmailMissing": { + "message": "User email missing" + }, + "deviceTrusted": { + "message": "Device trusted" + }, + "inputRequired": { + "message": "Input is required." + }, + "required": { + "message": "required" + }, + "search": { + "message": "Search" + }, + "inputMinLength": { + "message": "Input must be at least $COUNT$ characters long.", + "placeholders": { + "count": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxLength": { + "message": "Input must not exceed $COUNT$ characters in length.", + "placeholders": { + "count": { + "content": "$1", + "example": "20" + } + } + }, + "inputForbiddenCharacters": { + "message": "The following characters are not allowed: $CHARACTERS$", + "placeholders": { + "characters": { + "content": "$1", + "example": "@, #, $, %" + } + } + }, + "inputMinValue": { + "message": "Input value must be at least $MIN$.", + "placeholders": { + "min": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxValue": { + "message": "Input value must not exceed $MAX$.", + "placeholders": { + "max": { + "content": "$1", + "example": "100" + } + } + }, + "multipleInputEmails": { + "message": "1 or more emails are invalid" + }, + "inputTrimValidator": { + "message": "Input must not contain only whitespace.", + "description": "Notification to inform the user that a form's input can't contain only whitespace." + }, + "inputEmail": { + "message": "Input is not an email address." + }, + "fieldsNeedAttention": { + "message": "$COUNT$ field(s) above need your attention.", + "placeholders": { + "count": { + "content": "$1", + "example": "4" + } + } + }, + "selectPlaceholder": { + "message": "-- Select --" + }, + "multiSelectPlaceholder": { + "message": "-- Type to filter --" + }, + "multiSelectLoading": { + "message": "Retrieving options..." + }, + "multiSelectNotFound": { + "message": "No items found" + }, + "multiSelectClearAll": { + "message": "Clear all" + }, + "plusNMore": { + "message": "+ $QUANTITY$ more", + "placeholders": { + "quantity": { + "content": "$1", + "example": "5" + } + } + }, + "submenu": { + "message": "Submenu" + }, + "toggleCollapse": { + "message": "Toggle collapse", + "description": "Toggling an expand/collapse state." } } diff --git a/apps/browser/src/_locales/pl/messages.json b/apps/browser/src/_locales/pl/messages.json index 76b19d961ef..75f416b14e4 100644 --- a/apps/browser/src/_locales/pl/messages.json +++ b/apps/browser/src/_locales/pl/messages.json @@ -338,6 +338,9 @@ "other": { "message": "Inne" }, + "unlockMethodNeededToChangeTimeoutActionDesc": { + "message": "Ustaw metodę odblokowania, aby zmienić czas blokowania sejfu." + }, "rateExtension": { "message": "Oceń rozszerzenie" }, @@ -630,6 +633,12 @@ "notificationChangeSave": { "message": "Zaktualizuj" }, + "notificationUnlockDesc": { + "message": "Odblokuj swój sejf Bitwarden, aby ukończyć żądanie autouzupełniania." + }, + "notificationUnlock": { + "message": "Odblokuj" + }, "enableContextMenuItem": { "message": "Pokaż opcje menu kontekstowego" }, @@ -786,8 +795,8 @@ "ppremiumSignUpStorage": { "message": "1 GB miejsca na zaszyfrowane załączniki." }, - "ppremiumSignUpTwoStep": { - "message": "Dodatkowe opcje logowania dwustopniowego, takie jak klucze YubiKey, FIDO U2F oraz Duo." + "premiumSignUpTwoStepOptions": { + "message": "Własnościowe opcje logowania dwuetapowego, takie jak YubiKey i Duo." }, "ppremiumSignUpReports": { "message": "Raporty bezpieczeństwa haseł, stanu konta i raporty wycieków danych, aby Twoje dane były bezpieczne." @@ -1440,9 +1449,6 @@ "restoreItem": { "message": "Przywróć element" }, - "restoreItemConfirmation": { - "message": "Czy na pewno chcesz przywrócić ten element?" - }, "restoredItem": { "message": "Element został przywrócony" }, @@ -1599,6 +1605,12 @@ "biometricsNotSupportedDesc": { "message": "Dane biometryczne przeglądarki nie są obsługiwane na tym urządzeniu." }, + "biometricsFailedTitle": { + "message": "Dane biometryczne są błędne" + }, + "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." + }, "nativeMessaginPermissionErrorTitle": { "message": "Uprawnienie nie zostało przyznane" }, @@ -2140,7 +2152,7 @@ "notificationSentDevice": { "message": "Powiadomienie zostało wysłane na urządzenie." }, - "logInInitiated": { + "loginInitiated": { "message": "Logowanie rozpoczęte" }, "exposedMasterPassword": { @@ -2221,27 +2233,178 @@ } } }, - "region": { - "message": "Region" + "loggingInOn": { + "message": "Logowanie do" }, "opensInANewWindow": { "message": "Otwiera w nowym oknie" }, + "deviceApprovalRequired": { + "message": "Wymagane zatwierdzenie urządzenia. Wybierz opcję zatwierdzenia poniżej:" + }, + "rememberThisDevice": { + "message": "Zapamiętaj to urządzenie" + }, + "uncheckIfPublicDevice": { + "message": "Odznacz jeśli używasz publicznego urządzenia" + }, + "approveFromYourOtherDevice": { + "message": "Zatwierdź z innego twojego urządzenia" + }, + "requestAdminApproval": { + "message": "Poproś administratora o zatwierdzenie" + }, + "approveWithMasterPassword": { + "message": "Zatwierdź przy użyciu hasła głównego" + }, + "ssoIdentifierRequired": { + "message": "Identyfikator organizacji jest wymagany." + }, "eu": { "message": "UE", "description": "European Union" }, - "us": { - "message": "US", - "description": "United States" + "usDomain": { + "message": "bitwarden.com" + }, + "euDomain": { + "message": "bitwarden.eu" }, "accessDenied": { "message": "Odmowa dostępu. Nie masz uprawnień do przeglądania tej strony." }, "general": { - "message": "General" + "message": "Ogólne" }, "display": { - "message": "Display" + "message": "Wyświetl" + }, + "accountSuccessfullyCreated": { + "message": "Konto pomyślnie utworzone!" + }, + "adminApprovalRequested": { + "message": "Poproszono administratora o zatwierdzenie" + }, + "adminApprovalRequestSentToAdmins": { + "message": "Twoja prośba została wysłana do Twojego administratora." + }, + "youWillBeNotifiedOnceApproved": { + "message": "Zostaniesz powiadomiony po zatwierdzeniu." + }, + "troubleLoggingIn": { + "message": "Problem z zalogowaniem?" + }, + "loginApproved": { + "message": "Logowanie zatwierdzone" + }, + "userEmailMissing": { + "message": "Brak adresu e-mail użytkownika" + }, + "deviceTrusted": { + "message": "Zaufano urządzeniu" + }, + "inputRequired": { + "message": "Dane wejściowe są wymagane." + }, + "required": { + "message": "wymagane" + }, + "search": { + "message": "Szukaj" + }, + "inputMinLength": { + "message": "Dane wejściowe muszą zawierać co najmniej $COUNT$ znaki(-ów).", + "placeholders": { + "count": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxLength": { + "message": "Dane wejściowe nie mogą przekraczać długości $COUNT$ znaków.", + "placeholders": { + "count": { + "content": "$1", + "example": "20" + } + } + }, + "inputForbiddenCharacters": { + "message": "Następujące znaki są niedozwolone: $CHARACTERS$", + "placeholders": { + "characters": { + "content": "$1", + "example": "@, #, $, %" + } + } + }, + "inputMinValue": { + "message": "Wartość wejściowa musi wynosić co najmniej $MIN$.", + "placeholders": { + "min": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxValue": { + "message": "Wartość wejściowa nie może przekraczać $MAX$.", + "placeholders": { + "max": { + "content": "$1", + "example": "100" + } + } + }, + "multipleInputEmails": { + "message": "Co najmniej 1 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." + }, + "fieldsNeedAttention": { + "message": "Pola powyżej wymagające Twojej uwagi: $COUNT$.", + "placeholders": { + "count": { + "content": "$1", + "example": "4" + } + } + }, + "selectPlaceholder": { + "message": "-- Wybierz --" + }, + "multiSelectPlaceholder": { + "message": "-- Pisz, aby filtrować --" + }, + "multiSelectLoading": { + "message": "Pobieranie opcji..." + }, + "multiSelectNotFound": { + "message": "Nie znaleziono żadnych pozycji" + }, + "multiSelectClearAll": { + "message": "Wyczyść wszystko" + }, + "plusNMore": { + "message": "+ $QUANTITY$ więcej", + "placeholders": { + "quantity": { + "content": "$1", + "example": "5" + } + } + }, + "submenu": { + "message": "Podmenu" + }, + "toggleCollapse": { + "message": "Zwiń/rozwiń", + "description": "Toggling an expand/collapse state." } } diff --git a/apps/browser/src/_locales/pt_BR/messages.json b/apps/browser/src/_locales/pt_BR/messages.json index abcfbeb9e69..f8db10e49f8 100644 --- a/apps/browser/src/_locales/pt_BR/messages.json +++ b/apps/browser/src/_locales/pt_BR/messages.json @@ -338,6 +338,9 @@ "other": { "message": "Outros" }, + "unlockMethodNeededToChangeTimeoutActionDesc": { + "message": "Set up an unlock method to change your vault timeout action." + }, "rateExtension": { "message": "Avaliar a Extensão" }, @@ -630,6 +633,12 @@ "notificationChangeSave": { "message": "Atualizar" }, + "notificationUnlockDesc": { + "message": "Unlock your Bitwarden vault to complete the auto-fill request." + }, + "notificationUnlock": { + "message": "Unlock" + }, "enableContextMenuItem": { "message": "Mostrar opções de menu de contexto" }, @@ -786,8 +795,8 @@ "ppremiumSignUpStorage": { "message": "1 GB de armazenamento de arquivos encriptados." }, - "ppremiumSignUpTwoStep": { - "message": "Opções de autenticação de duas etapas adicionais como YubiKey, FIDO U2F, e Duo." + "premiumSignUpTwoStepOptions": { + "message": "Proprietary two-step login options such as YubiKey and Duo." }, "ppremiumSignUpReports": { "message": "Higiene de senha, saúde da conta, e relatórios sobre violação de dados para manter o seu cofre seguro." @@ -1440,9 +1449,6 @@ "restoreItem": { "message": "Restaurar Item" }, - "restoreItemConfirmation": { - "message": "Você tem certeza que deseja restaurar esse item?" - }, "restoredItem": { "message": "Item Restaurado" }, @@ -1599,6 +1605,12 @@ "biometricsNotSupportedDesc": { "message": "A biometria com o navegador não é suportada neste dispositivo." }, + "biometricsFailedTitle": { + "message": "Biometrics failed" + }, + "biometricsFailedDesc": { + "message": "Biometrics cannot be completed, consider using a master password or logging out. If this persists, please contact Bitwarden support." + }, "nativeMessaginPermissionErrorTitle": { "message": "Permissão não fornecida" }, @@ -2140,8 +2152,8 @@ "notificationSentDevice": { "message": "Uma notificação foi enviada para seu dispositivo." }, - "logInInitiated": { - "message": "Login iniciado" + "loginInitiated": { + "message": "Login initiated" }, "exposedMasterPassword": { "message": "Senha Mestra comprometida" @@ -2221,19 +2233,42 @@ } } }, - "region": { - "message": "Região" + "loggingInOn": { + "message": "Logging in on" }, "opensInANewWindow": { "message": "Abrir em uma nova janela" }, + "deviceApprovalRequired": { + "message": "Device approval required. Select an approval option below:" + }, + "rememberThisDevice": { + "message": "Remember this device" + }, + "uncheckIfPublicDevice": { + "message": "Uncheck if using a public device" + }, + "approveFromYourOtherDevice": { + "message": "Approve from your other device" + }, + "requestAdminApproval": { + "message": "Request admin approval" + }, + "approveWithMasterPassword": { + "message": "Approve with master password" + }, + "ssoIdentifierRequired": { + "message": "Organization SSO identifier is required." + }, "eu": { "message": "EU", "description": "European Union" }, - "us": { - "message": "US", - "description": "United States" + "usDomain": { + "message": "bitwarden.com" + }, + "euDomain": { + "message": "bitwarden.eu" }, "accessDenied": { "message": "Acesso negado. Você não tem permissão para ver esta página." @@ -2243,5 +2278,133 @@ }, "display": { "message": "Display" + }, + "accountSuccessfullyCreated": { + "message": "Account successfully created!" + }, + "adminApprovalRequested": { + "message": "Admin approval requested" + }, + "adminApprovalRequestSentToAdmins": { + "message": "Your request has been sent to your admin." + }, + "youWillBeNotifiedOnceApproved": { + "message": "You will be notified once approved." + }, + "troubleLoggingIn": { + "message": "Trouble logging in?" + }, + "loginApproved": { + "message": "Login approved" + }, + "userEmailMissing": { + "message": "User email missing" + }, + "deviceTrusted": { + "message": "Device trusted" + }, + "inputRequired": { + "message": "Input is required." + }, + "required": { + "message": "required" + }, + "search": { + "message": "Search" + }, + "inputMinLength": { + "message": "Input must be at least $COUNT$ characters long.", + "placeholders": { + "count": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxLength": { + "message": "Input must not exceed $COUNT$ characters in length.", + "placeholders": { + "count": { + "content": "$1", + "example": "20" + } + } + }, + "inputForbiddenCharacters": { + "message": "The following characters are not allowed: $CHARACTERS$", + "placeholders": { + "characters": { + "content": "$1", + "example": "@, #, $, %" + } + } + }, + "inputMinValue": { + "message": "Input value must be at least $MIN$.", + "placeholders": { + "min": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxValue": { + "message": "Input value must not exceed $MAX$.", + "placeholders": { + "max": { + "content": "$1", + "example": "100" + } + } + }, + "multipleInputEmails": { + "message": "1 or more emails are invalid" + }, + "inputTrimValidator": { + "message": "Input must not contain only whitespace.", + "description": "Notification to inform the user that a form's input can't contain only whitespace." + }, + "inputEmail": { + "message": "Input is not an email address." + }, + "fieldsNeedAttention": { + "message": "$COUNT$ field(s) above need your attention.", + "placeholders": { + "count": { + "content": "$1", + "example": "4" + } + } + }, + "selectPlaceholder": { + "message": "-- Select --" + }, + "multiSelectPlaceholder": { + "message": "-- Type to filter --" + }, + "multiSelectLoading": { + "message": "Retrieving options..." + }, + "multiSelectNotFound": { + "message": "No items found" + }, + "multiSelectClearAll": { + "message": "Clear all" + }, + "plusNMore": { + "message": "+ $QUANTITY$ more", + "placeholders": { + "quantity": { + "content": "$1", + "example": "5" + } + } + }, + "submenu": { + "message": "Submenu" + }, + "toggleCollapse": { + "message": "Toggle collapse", + "description": "Toggling an expand/collapse state." } } diff --git a/apps/browser/src/_locales/pt_PT/messages.json b/apps/browser/src/_locales/pt_PT/messages.json index 7e947511386..074ddb150e0 100644 --- a/apps/browser/src/_locales/pt_PT/messages.json +++ b/apps/browser/src/_locales/pt_PT/messages.json @@ -338,6 +338,9 @@ "other": { "message": "Outros" }, + "unlockMethodNeededToChangeTimeoutActionDesc": { + "message": "Configure um método de desbloqueio para alterar a ação de tempo limite do seu cofre." + }, "rateExtension": { "message": "Avaliar a extensão" }, @@ -630,6 +633,12 @@ "notificationChangeSave": { "message": "Atualizar" }, + "notificationUnlockDesc": { + "message": "Desbloqueie o seu cofre Bitwarden para completar o pedido de preenchimento automático." + }, + "notificationUnlock": { + "message": "Desbloquear" + }, "enableContextMenuItem": { "message": "Mostrar opções do menu de contexto" }, @@ -786,8 +795,8 @@ "ppremiumSignUpStorage": { "message": "1 GB de armazenamento encriptado para anexos de ficheiros." }, - "ppremiumSignUpTwoStep": { - "message": "Opções adicionais de verificação de dois passos, como YubiKey, FIDO U2F e Duo." + "premiumSignUpTwoStepOptions": { + "message": "Proprietary two-step login options such as YubiKey and Duo." }, "ppremiumSignUpReports": { "message": "Higiene de palavras-passe, saúde da conta e relatórios de violação de dados para manter o seu cofre seguro." @@ -1338,7 +1347,7 @@ "description": "ex. Date this item was created" }, "datePasswordUpdated": { - "message": "Palavra-passe atualizada", + "message": "Palavra-passe atualizada a", "description": "ex. Date this password was updated" }, "neverLockWarning": { @@ -1440,9 +1449,6 @@ "restoreItem": { "message": "Restaurar item" }, - "restoreItemConfirmation": { - "message": "Tem a certeza de que pretende restaurar este item?" - }, "restoredItem": { "message": "Item restaurado" }, @@ -1599,6 +1605,12 @@ "biometricsNotSupportedDesc": { "message": "A biometria do navegador não é suportada neste dispositivo." }, + "biometricsFailedTitle": { + "message": "Falha na biometria" + }, + "biometricsFailedDesc": { + "message": "A biometria não pode ser concluída, considere a possibilidade de utilizar uma palavra-passe mestra ou terminar a sessão. Se o problema persistir, contacte a assistência do Bitwarden." + }, "nativeMessaginPermissionErrorTitle": { "message": "Autorização não concedida" }, @@ -2123,7 +2135,7 @@ "message": "Iniciar sessão com o dispositivo" }, "loginWithDeviceEnabledInfo": { - "message": "O início de sessão com o dispositivo deve ser ativado nas definições da aplicação Bitwarden. Necessita de outra opção?" + "message": "O início de sessão com o dispositivo deve ser ativado nas definições da aplicação Bitwarden. Precisa de outra opção?" }, "fingerprintPhraseHeader": { "message": "Frase de impressão digital" @@ -2140,7 +2152,7 @@ "notificationSentDevice": { "message": "Foi enviada uma notificação para o seu dispositivo." }, - "logInInitiated": { + "loginInitiated": { "message": "A preparar o início de sessão" }, "exposedMasterPassword": { @@ -2221,19 +2233,42 @@ } } }, - "region": { - "message": "Região" + "loggingInOn": { + "message": "A iniciar sessão em" }, "opensInANewWindow": { "message": "Abrir numa nova janela" }, + "deviceApprovalRequired": { + "message": "É necessária a aprovação do dispositivo. Selecione uma opção de aprovação abaixo:" + }, + "rememberThisDevice": { + "message": "Lembrar este dispositivo" + }, + "uncheckIfPublicDevice": { + "message": "Desmarcar se estiver a utilizar um dispositivo público" + }, + "approveFromYourOtherDevice": { + "message": "Aprovar a partir do seu outro dispositivo" + }, + "requestAdminApproval": { + "message": "Pedir aprovação do administrador" + }, + "approveWithMasterPassword": { + "message": "Aprovar com a palavra-passe mestra" + }, + "ssoIdentifierRequired": { + "message": "É necessário o identificador de SSO da organização." + }, "eu": { "message": "UE", "description": "European Union" }, - "us": { - "message": "EUA", - "description": "United States" + "usDomain": { + "message": "bitwarden.com" + }, + "euDomain": { + "message": "bitwarden.eu" }, "accessDenied": { "message": "Acesso negado. Não tem permissão para visualizar esta página." @@ -2242,6 +2277,134 @@ "message": "Geral" }, "display": { - "message": "Display" + "message": "Ecrã" + }, + "accountSuccessfullyCreated": { + "message": "Conta criada com sucesso!" + }, + "adminApprovalRequested": { + "message": "Aprovação do administrador pedida" + }, + "adminApprovalRequestSentToAdmins": { + "message": "O seu pedido foi enviado ao seu administrador." + }, + "youWillBeNotifiedOnceApproved": { + "message": "Será notificado quando for aprovado." + }, + "troubleLoggingIn": { + "message": "Problemas a iniciar sessão?" + }, + "loginApproved": { + "message": "Início de sessão aprovado" + }, + "userEmailMissing": { + "message": "E-mail do utilizador em falta" + }, + "deviceTrusted": { + "message": "Dispositivo de confiança" + }, + "inputRequired": { + "message": "Campo necessário." + }, + "required": { + "message": "necessário" + }, + "search": { + "message": "Procurar" + }, + "inputMinLength": { + "message": "O campo deve ter pelo menos $COUNT$ caracteres.", + "placeholders": { + "count": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxLength": { + "message": "O campo não pode exceder os $COUNT$ caracteres de comprimento.", + "placeholders": { + "count": { + "content": "$1", + "example": "20" + } + } + }, + "inputForbiddenCharacters": { + "message": "Não são permitidos os seguintes caracteres: $CHARACTERS$", + "placeholders": { + "characters": { + "content": "$1", + "example": "@, #, $, %" + } + } + }, + "inputMinValue": { + "message": "O valor do campo tem de ser, pelo menos, $MIN$ caracteres.", + "placeholders": { + "min": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxValue": { + "message": "O valor do campo não pode exceder os $MAX$ caracteres.", + "placeholders": { + "max": { + "content": "$1", + "example": "100" + } + } + }, + "multipleInputEmails": { + "message": "1 ou mais e-mails são inválidos" + }, + "inputTrimValidator": { + "message": "O campo não deve conter apenas espaços em branco.", + "description": "Notification to inform the user that a form's input can't contain only whitespace." + }, + "inputEmail": { + "message": "O campo não é um endereço de e-mail." + }, + "fieldsNeedAttention": { + "message": "$COUNT$ campo(s) acima precisa(m) da sua atenção.", + "placeholders": { + "count": { + "content": "$1", + "example": "4" + } + } + }, + "selectPlaceholder": { + "message": "-- Selecionar --" + }, + "multiSelectPlaceholder": { + "message": "-- Escreva para filtrar --" + }, + "multiSelectLoading": { + "message": "A recuperar opções..." + }, + "multiSelectNotFound": { + "message": "Nenhum item encontrado" + }, + "multiSelectClearAll": { + "message": "Limpar tudo" + }, + "plusNMore": { + "message": "+ $QUANTITY$", + "placeholders": { + "quantity": { + "content": "$1", + "example": "5" + } + } + }, + "submenu": { + "message": "Submenu" + }, + "toggleCollapse": { + "message": "Alternar colapso", + "description": "Toggling an expand/collapse state." } } diff --git a/apps/browser/src/_locales/ro/messages.json b/apps/browser/src/_locales/ro/messages.json index 5a8879a4bcd..20c44ddcca2 100644 --- a/apps/browser/src/_locales/ro/messages.json +++ b/apps/browser/src/_locales/ro/messages.json @@ -196,13 +196,13 @@ "message": "Ajutor și feedback" }, "helpCenter": { - "message": "Bitwarden Help center" + "message": "Centrul de Ajutor Bitwarden" }, "communityForums": { - "message": "Explore Bitwarden community forums" + "message": "Explorează forumurile comunității Bitwarden" }, "contactSupport": { - "message": "Contact Bitwarden support" + "message": "Contactați asistența Bitwarden" }, "sync": { "message": "Sincronizare" @@ -338,6 +338,9 @@ "other": { "message": "Altele" }, + "unlockMethodNeededToChangeTimeoutActionDesc": { + "message": "Set up an unlock method to change your vault timeout action." + }, "rateExtension": { "message": "Evaluare extensie" }, @@ -439,7 +442,7 @@ "message": "Este necesară rescrierea parolei principale." }, "masterPasswordMinlength": { - "message": "Master password must be at least $VALUE$ characters long.", + "message": "Parola principală trebuie să aibă cel puțin $VALUE$ caractere.", "description": "The Master Password must be at least a specific number of characters long.", "placeholders": { "value": { @@ -630,6 +633,12 @@ "notificationChangeSave": { "message": "Actualizare" }, + "notificationUnlockDesc": { + "message": "Deblochează seiful Bitwarden pentru a finaliza solicitarea de completare automată." + }, + "notificationUnlock": { + "message": "Deblocare" + }, "enableContextMenuItem": { "message": "Afișați opțiunile meniului contextual" }, @@ -786,8 +795,8 @@ "ppremiumSignUpStorage": { "message": "1 GB spațiu de stocare criptat pentru atașamente de fișiere." }, - "ppremiumSignUpTwoStep": { - "message": "Opțiuni adiționale de conectare în două etape, cum ar fi YubiKey, FIDO U2F și Duo." + "premiumSignUpTwoStepOptions": { + "message": "Proprietary two-step login options such as YubiKey and Duo." }, "ppremiumSignUpReports": { "message": "Rapoarte privind igiena parolelor, sănătatea contului și breșele de date pentru a vă păstra seiful în siguranță." @@ -976,7 +985,7 @@ "message": "Dacă se detectează un formular de autentificare, completați-l automat la încărcarea paginii web." }, "experimentalFeature": { - "message": "Compromised or untrusted websites can exploit auto-fill on page load." + "message": "Site-urile web compromise sau nesigure pot exploata funcția de autocompletare la încărcarea paginii." }, "learnMoreAboutAutofill": { "message": "Learn more about auto-fill" @@ -1440,9 +1449,6 @@ "restoreItem": { "message": "Restabilire articol" }, - "restoreItemConfirmation": { - "message": "Sigur doriți să restabiliți acest articol?" - }, "restoredItem": { "message": "Articol restabilit" }, @@ -1462,7 +1468,7 @@ "message": "Articolul s-a completat automat " }, "insecurePageWarning": { - "message": "Warning: This is an unsecured HTTP page, and any information you submit can potentially be seen and changed by others. This Login was originally saved on a secure (HTTPS) page." + "message": "Avertisment: Aceasta este o pagină HTTP nesecurizată și orice informație pe care o trimiteți poate fi văzută și modificată de alte persoane. Această Parolă a fost salvată inițial pe o pagină securizată (HTTPS)." }, "insecurePageWarningFillPrompt": { "message": "Do you still wish to fill this login?" @@ -1599,6 +1605,12 @@ "biometricsNotSupportedDesc": { "message": "Biometria browserului nu este acceptată pe acest dispozitiv." }, + "biometricsFailedTitle": { + "message": "Biometrics failed" + }, + "biometricsFailedDesc": { + "message": "Biometrics cannot be completed, consider using a master password or logging out. If this persists, please contact Bitwarden support." + }, "nativeMessaginPermissionErrorTitle": { "message": "Permisiunea nu a fost furnizată" }, @@ -2140,8 +2152,8 @@ "notificationSentDevice": { "message": "A notification has been sent to your device." }, - "logInInitiated": { - "message": "Log in initiated" + "loginInitiated": { + "message": "Login initiated" }, "exposedMasterPassword": { "message": "Exposed Master Password" @@ -2221,19 +2233,42 @@ } } }, - "region": { - "message": "Region" + "loggingInOn": { + "message": "Logging in on" }, "opensInANewWindow": { "message": "Opens in a new window" }, + "deviceApprovalRequired": { + "message": "Device approval required. Select an approval option below:" + }, + "rememberThisDevice": { + "message": "Remember this device" + }, + "uncheckIfPublicDevice": { + "message": "Uncheck if using a public device" + }, + "approveFromYourOtherDevice": { + "message": "Approve from your other device" + }, + "requestAdminApproval": { + "message": "Request admin approval" + }, + "approveWithMasterPassword": { + "message": "Approve with master password" + }, + "ssoIdentifierRequired": { + "message": "Organization SSO identifier is required." + }, "eu": { "message": "EU", "description": "European Union" }, - "us": { - "message": "US", - "description": "United States" + "usDomain": { + "message": "bitwarden.com" + }, + "euDomain": { + "message": "bitwarden.eu" }, "accessDenied": { "message": "Access denied. You do not have permission to view this page." @@ -2243,5 +2278,133 @@ }, "display": { "message": "Display" + }, + "accountSuccessfullyCreated": { + "message": "Account successfully created!" + }, + "adminApprovalRequested": { + "message": "Admin approval requested" + }, + "adminApprovalRequestSentToAdmins": { + "message": "Your request has been sent to your admin." + }, + "youWillBeNotifiedOnceApproved": { + "message": "You will be notified once approved." + }, + "troubleLoggingIn": { + "message": "Trouble logging in?" + }, + "loginApproved": { + "message": "Login approved" + }, + "userEmailMissing": { + "message": "User email missing" + }, + "deviceTrusted": { + "message": "Device trusted" + }, + "inputRequired": { + "message": "Input is required." + }, + "required": { + "message": "required" + }, + "search": { + "message": "Search" + }, + "inputMinLength": { + "message": "Input must be at least $COUNT$ characters long.", + "placeholders": { + "count": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxLength": { + "message": "Input must not exceed $COUNT$ characters in length.", + "placeholders": { + "count": { + "content": "$1", + "example": "20" + } + } + }, + "inputForbiddenCharacters": { + "message": "The following characters are not allowed: $CHARACTERS$", + "placeholders": { + "characters": { + "content": "$1", + "example": "@, #, $, %" + } + } + }, + "inputMinValue": { + "message": "Input value must be at least $MIN$.", + "placeholders": { + "min": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxValue": { + "message": "Input value must not exceed $MAX$.", + "placeholders": { + "max": { + "content": "$1", + "example": "100" + } + } + }, + "multipleInputEmails": { + "message": "1 or more emails are invalid" + }, + "inputTrimValidator": { + "message": "Input must not contain only whitespace.", + "description": "Notification to inform the user that a form's input can't contain only whitespace." + }, + "inputEmail": { + "message": "Input is not an email address." + }, + "fieldsNeedAttention": { + "message": "$COUNT$ field(s) above need your attention.", + "placeholders": { + "count": { + "content": "$1", + "example": "4" + } + } + }, + "selectPlaceholder": { + "message": "-- Select --" + }, + "multiSelectPlaceholder": { + "message": "-- Type to filter --" + }, + "multiSelectLoading": { + "message": "Retrieving options..." + }, + "multiSelectNotFound": { + "message": "No items found" + }, + "multiSelectClearAll": { + "message": "Clear all" + }, + "plusNMore": { + "message": "+ $QUANTITY$ more", + "placeholders": { + "quantity": { + "content": "$1", + "example": "5" + } + } + }, + "submenu": { + "message": "Submenu" + }, + "toggleCollapse": { + "message": "Toggle collapse", + "description": "Toggling an expand/collapse state." } } diff --git a/apps/browser/src/_locales/ru/messages.json b/apps/browser/src/_locales/ru/messages.json index 938c35d1c27..738193fb48a 100644 --- a/apps/browser/src/_locales/ru/messages.json +++ b/apps/browser/src/_locales/ru/messages.json @@ -338,6 +338,9 @@ "other": { "message": "Прочее" }, + "unlockMethodNeededToChangeTimeoutActionDesc": { + "message": "Настройте способ разблокировки для изменения действия по тайм-ауту хранилища." + }, "rateExtension": { "message": "Оценить расширение" }, @@ -630,6 +633,12 @@ "notificationChangeSave": { "message": "Обновить" }, + "notificationUnlockDesc": { + "message": "Разблокируйте свое хранилище Bitwarden чтобы выполнить автозаполнение." + }, + "notificationUnlock": { + "message": "Разблокировать" + }, "enableContextMenuItem": { "message": "Показать опции контекстного меню" }, @@ -786,8 +795,8 @@ "ppremiumSignUpStorage": { "message": "1 ГБ зашифрованного хранилища для вложенных файлов." }, - "ppremiumSignUpTwoStep": { - "message": "Дополнительные варианты двухэтапной аутентификации, такие как YubiKey, FIDO U2F и Duo." + "premiumSignUpTwoStepOptions": { + "message": "Проприетарные варианты двухэтапной аутентификации, такие как YubiKey или Duo." }, "ppremiumSignUpReports": { "message": "Гигиена паролей, здоровье аккаунта и отчеты об утечках данных для обеспечения безопасности вашего хранилища." @@ -1440,9 +1449,6 @@ "restoreItem": { "message": "Восстановить элемент" }, - "restoreItemConfirmation": { - "message": "Вы уверены, что хотите восстановить этот элемент?" - }, "restoredItem": { "message": "Элемент восстановлен" }, @@ -1599,6 +1605,12 @@ "biometricsNotSupportedDesc": { "message": "Биометрия в браузере не поддерживается этом устройстве." }, + "biometricsFailedTitle": { + "message": "Сбой биометрии" + }, + "biometricsFailedDesc": { + "message": "Не удалось выполнить биометрическую идентификацию, попробуйте использовать мастер-пароль или выполнить выход. Если ситуация не изменится, обратитесь в службу поддержки Bitwarden." + }, "nativeMessaginPermissionErrorTitle": { "message": "Разрешение не представлено" }, @@ -1872,7 +1884,7 @@ "message": "Мастер-пароль недавно был изменен администратором вашей организации. Чтобы получить доступ к хранилищу, вы должны обновить его сейчас. В результате текущий сеанс будет завершен, потребуется повторный вход. Сеансы на других устройствах могут оставаться активными в течение одного часа." }, "updateWeakMasterPasswordWarning": { - "message": "Ваш мастер-пароль не соответствует требованиям политики вашей организации. Для доступа к хранилищу вы должны обновить свой мастер-пароль прямо сейчас. При этом текущая сессия будет завершена и потребуется повторная авторизация. Сессии на других устройствах могут оставаться активными в течение часа." + "message": "Ваш мастер-пароль не соответствует требованиям политики вашей организации. Для доступа к хранилищу вы должны обновить свой мастер-пароль прямо сейчас. При этом текущий сеанс будет завершен и потребуется повторная авторизация. Сеансы на других устройствах могут оставаться активными в течение часа." }, "resetPasswordPolicyAutoEnroll": { "message": "Автоматическое развертывание" @@ -2140,7 +2152,7 @@ "notificationSentDevice": { "message": "На ваше устройство отправлено уведомление." }, - "logInInitiated": { + "loginInitiated": { "message": "Вход инициирован" }, "exposedMasterPassword": { @@ -2221,19 +2233,42 @@ } } }, - "region": { - "message": "Регион" + "loggingInOn": { + "message": "Войти на" }, "opensInANewWindow": { "message": "Откроется в новом окне" }, + "deviceApprovalRequired": { + "message": "Требуется одобрение устройства. Выберите вариант ниже:" + }, + "rememberThisDevice": { + "message": "Запомнить это устройство" + }, + "uncheckIfPublicDevice": { + "message": "Снимите флажок, если используете общедоступное устройство" + }, + "approveFromYourOtherDevice": { + "message": "Одобрить с другого устройства" + }, + "requestAdminApproval": { + "message": "Запросить одобрение администратора" + }, + "approveWithMasterPassword": { + "message": "Одобрить с мастер-паролем" + }, + "ssoIdentifierRequired": { + "message": "Требуется идентификатор SSO организации." + }, "eu": { "message": "Европа", "description": "European Union" }, - "us": { - "message": "США", - "description": "United States" + "usDomain": { + "message": "bitwarden.com" + }, + "euDomain": { + "message": "bitwarden.eu" }, "accessDenied": { "message": "Доступ запрещен. У вас нет разрешения на просмотр этой страницы." @@ -2243,5 +2278,133 @@ }, "display": { "message": "Отображение" + }, + "accountSuccessfullyCreated": { + "message": "Аккаунт успешно создан!" + }, + "adminApprovalRequested": { + "message": "Запрошено одобрение администратора" + }, + "adminApprovalRequestSentToAdmins": { + "message": "Ваш запрос был отправлен администратору." + }, + "youWillBeNotifiedOnceApproved": { + "message": "Вас уведомят об одобрении." + }, + "troubleLoggingIn": { + "message": "Не удалось войти?" + }, + "loginApproved": { + "message": "Вход одобрен" + }, + "userEmailMissing": { + "message": "Отсутствует email пользователя" + }, + "deviceTrusted": { + "message": "Доверенное устройство" + }, + "inputRequired": { + "message": "Необходимо ввести данные." + }, + "required": { + "message": "обязательно" + }, + "search": { + "message": "Поиск" + }, + "inputMinLength": { + "message": "Вводимые данные должны содержать не менее $COUNT$ символов.", + "placeholders": { + "count": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxLength": { + "message": "Длина вводимых данных не должна превышать $COUNT$ символов.", + "placeholders": { + "count": { + "content": "$1", + "example": "20" + } + } + }, + "inputForbiddenCharacters": { + "message": "Не допускаются следующие символы: $CHARACTERS$", + "placeholders": { + "characters": { + "content": "$1", + "example": "@, #, $, %" + } + } + }, + "inputMinValue": { + "message": "Вводимое значение должно быть не менее $MIN$.", + "placeholders": { + "min": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxValue": { + "message": "Вводимое значение не должно превышать $MAX$.", + "placeholders": { + "max": { + "content": "$1", + "example": "100" + } + } + }, + "multipleInputEmails": { + "message": "Один или несколько адресов email недействительны" + }, + "inputTrimValidator": { + "message": "Введенные данные не должны содержать только пробелы.", + "description": "Notification to inform the user that a form's input can't contain only whitespace." + }, + "inputEmail": { + "message": "Введенные данные не являются адресом email." + }, + "fieldsNeedAttention": { + "message": "$COUNT$ поля(ей) выше требуют вашего внимания.", + "placeholders": { + "count": { + "content": "$1", + "example": "4" + } + } + }, + "selectPlaceholder": { + "message": "-- Выбрать --" + }, + "multiSelectPlaceholder": { + "message": "-- Введите для фильтрации --" + }, + "multiSelectLoading": { + "message": "Получение параметров..." + }, + "multiSelectNotFound": { + "message": "Элементов не найдено" + }, + "multiSelectClearAll": { + "message": "Очистить все" + }, + "plusNMore": { + "message": "еще + $QUANTITY$", + "placeholders": { + "quantity": { + "content": "$1", + "example": "5" + } + } + }, + "submenu": { + "message": "Подменю" + }, + "toggleCollapse": { + "message": "Свернуть/развернуть", + "description": "Toggling an expand/collapse state." } } diff --git a/apps/browser/src/_locales/si/messages.json b/apps/browser/src/_locales/si/messages.json index 5cac9ee12c8..cf3ac370c6d 100644 --- a/apps/browser/src/_locales/si/messages.json +++ b/apps/browser/src/_locales/si/messages.json @@ -338,6 +338,9 @@ "other": { "message": "වෙනත්" }, + "unlockMethodNeededToChangeTimeoutActionDesc": { + "message": "Set up an unlock method to change your vault timeout action." + }, "rateExtension": { "message": "දිගුව අනුපාතය" }, @@ -630,6 +633,12 @@ "notificationChangeSave": { "message": "යාවත්කාල" }, + "notificationUnlockDesc": { + "message": "Unlock your Bitwarden vault to complete the auto-fill request." + }, + "notificationUnlock": { + "message": "Unlock" + }, "enableContextMenuItem": { "message": "Show context menu options" }, @@ -786,8 +795,8 @@ "ppremiumSignUpStorage": { "message": "ගොනු ඇමුණුම් සඳහා 1 GB සංකේතාත්මක ගබඩා." }, - "ppremiumSignUpTwoStep": { - "message": "එවැනි YuBiKey, FIDO U2F, සහ Duo ලෙස අතිරේක පියවර දෙකක් පිවිසුම් විකල්ප." + "premiumSignUpTwoStepOptions": { + "message": "Proprietary two-step login options such as YubiKey and Duo." }, "ppremiumSignUpReports": { "message": "ඔබගේ සුරක්ෂිතාගාරය ආරක්ෂිතව තබා ගැනීම සඳහා මුරපදය සනීපාරක්ෂාව, ගිණුම් සෞඛ්යය සහ දත්ත උල්ලං ach නය වාර්තා කරයි." @@ -1440,9 +1449,6 @@ "restoreItem": { "message": "අයිතමය යළි පිහිටුවන්න" }, - "restoreItemConfirmation": { - "message": "ඔබට මෙම අයිතමය යථා තත්වයට පත් කිරීමට අවශ්ය බව ඔබට විශ්වාසද?" - }, "restoredItem": { "message": "ප්රතිෂ්ඨාපනය අයිතමය" }, @@ -1599,6 +1605,12 @@ "biometricsNotSupportedDesc": { "message": "බ්රව්සර් biometrics මෙම උපාංගය මත සහය නොදක්වයි." }, + "biometricsFailedTitle": { + "message": "Biometrics failed" + }, + "biometricsFailedDesc": { + "message": "Biometrics cannot be completed, consider using a master password or logging out. If this persists, please contact Bitwarden support." + }, "nativeMessaginPermissionErrorTitle": { "message": "අවසර ලබා දී නැත" }, @@ -2140,8 +2152,8 @@ "notificationSentDevice": { "message": "A notification has been sent to your device." }, - "logInInitiated": { - "message": "Log in initiated" + "loginInitiated": { + "message": "Login initiated" }, "exposedMasterPassword": { "message": "Exposed Master Password" @@ -2221,19 +2233,42 @@ } } }, - "region": { - "message": "Region" + "loggingInOn": { + "message": "Logging in on" }, "opensInANewWindow": { "message": "Opens in a new window" }, + "deviceApprovalRequired": { + "message": "Device approval required. Select an approval option below:" + }, + "rememberThisDevice": { + "message": "Remember this device" + }, + "uncheckIfPublicDevice": { + "message": "Uncheck if using a public device" + }, + "approveFromYourOtherDevice": { + "message": "Approve from your other device" + }, + "requestAdminApproval": { + "message": "Request admin approval" + }, + "approveWithMasterPassword": { + "message": "Approve with master password" + }, + "ssoIdentifierRequired": { + "message": "Organization SSO identifier is required." + }, "eu": { "message": "EU", "description": "European Union" }, - "us": { - "message": "US", - "description": "United States" + "usDomain": { + "message": "bitwarden.com" + }, + "euDomain": { + "message": "bitwarden.eu" }, "accessDenied": { "message": "Access denied. You do not have permission to view this page." @@ -2243,5 +2278,133 @@ }, "display": { "message": "Display" + }, + "accountSuccessfullyCreated": { + "message": "Account successfully created!" + }, + "adminApprovalRequested": { + "message": "Admin approval requested" + }, + "adminApprovalRequestSentToAdmins": { + "message": "Your request has been sent to your admin." + }, + "youWillBeNotifiedOnceApproved": { + "message": "You will be notified once approved." + }, + "troubleLoggingIn": { + "message": "Trouble logging in?" + }, + "loginApproved": { + "message": "Login approved" + }, + "userEmailMissing": { + "message": "User email missing" + }, + "deviceTrusted": { + "message": "Device trusted" + }, + "inputRequired": { + "message": "Input is required." + }, + "required": { + "message": "required" + }, + "search": { + "message": "Search" + }, + "inputMinLength": { + "message": "Input must be at least $COUNT$ characters long.", + "placeholders": { + "count": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxLength": { + "message": "Input must not exceed $COUNT$ characters in length.", + "placeholders": { + "count": { + "content": "$1", + "example": "20" + } + } + }, + "inputForbiddenCharacters": { + "message": "The following characters are not allowed: $CHARACTERS$", + "placeholders": { + "characters": { + "content": "$1", + "example": "@, #, $, %" + } + } + }, + "inputMinValue": { + "message": "Input value must be at least $MIN$.", + "placeholders": { + "min": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxValue": { + "message": "Input value must not exceed $MAX$.", + "placeholders": { + "max": { + "content": "$1", + "example": "100" + } + } + }, + "multipleInputEmails": { + "message": "1 or more emails are invalid" + }, + "inputTrimValidator": { + "message": "Input must not contain only whitespace.", + "description": "Notification to inform the user that a form's input can't contain only whitespace." + }, + "inputEmail": { + "message": "Input is not an email address." + }, + "fieldsNeedAttention": { + "message": "$COUNT$ field(s) above need your attention.", + "placeholders": { + "count": { + "content": "$1", + "example": "4" + } + } + }, + "selectPlaceholder": { + "message": "-- Select --" + }, + "multiSelectPlaceholder": { + "message": "-- Type to filter --" + }, + "multiSelectLoading": { + "message": "Retrieving options..." + }, + "multiSelectNotFound": { + "message": "No items found" + }, + "multiSelectClearAll": { + "message": "Clear all" + }, + "plusNMore": { + "message": "+ $QUANTITY$ more", + "placeholders": { + "quantity": { + "content": "$1", + "example": "5" + } + } + }, + "submenu": { + "message": "Submenu" + }, + "toggleCollapse": { + "message": "Toggle collapse", + "description": "Toggling an expand/collapse state." } } diff --git a/apps/browser/src/_locales/sk/messages.json b/apps/browser/src/_locales/sk/messages.json index 2fdd9c078d1..1b90bc94053 100644 --- a/apps/browser/src/_locales/sk/messages.json +++ b/apps/browser/src/_locales/sk/messages.json @@ -338,6 +338,9 @@ "other": { "message": "Ostatné" }, + "unlockMethodNeededToChangeTimeoutActionDesc": { + "message": "Nastavte metódu odomknutia, aby ste zmenili akciu pri vypršaní času trezoru." + }, "rateExtension": { "message": "Ohodnotiť rozšírenie" }, @@ -630,6 +633,12 @@ "notificationChangeSave": { "message": "Aktualizovať" }, + "notificationUnlockDesc": { + "message": "Odomknite svoj Bitwarden trezor a dokončite žiadosť o automatické vyplnenie." + }, + "notificationUnlock": { + "message": "Odomknúť" + }, "enableContextMenuItem": { "message": "Zobraziť možnosti kontextovej ponuky" }, @@ -786,8 +795,8 @@ "ppremiumSignUpStorage": { "message": "1 GB šifrovaného úložiska." }, - "ppremiumSignUpTwoStep": { - "message": "Ďalšie možnosti dvojstupňového prihlásenia ako YubiKey, FIDO U2F a Duo." + "premiumSignUpTwoStepOptions": { + "message": "Proprietary two-step login options such as YubiKey and Duo." }, "ppremiumSignUpReports": { "message": "Správy o sile hesla, zabezpečení účtov a únikoch dát ktoré vám pomôžu udržať vaše kontá v bezpečí." @@ -1440,9 +1449,6 @@ "restoreItem": { "message": "Obnoviť položku" }, - "restoreItemConfirmation": { - "message": "Naozaj chcete obnoviť túto položku?" - }, "restoredItem": { "message": "Obnovená položka" }, @@ -1599,6 +1605,12 @@ "biometricsNotSupportedDesc": { "message": "Biometria v prehliadači nie je podporovaná na tomto zariadení." }, + "biometricsFailedTitle": { + "message": "Biometria zlyhala" + }, + "biometricsFailedDesc": { + "message": "Biometria nebola vykonaná. Zvážte použitie hlavného hesla, alebo sa odhláste. Ak tento problém pretrváva, kontaktujte podporu Bitwarden." + }, "nativeMessaginPermissionErrorTitle": { "message": "Povolenie nebolo udelené" }, @@ -2140,7 +2152,7 @@ "notificationSentDevice": { "message": "Do vášho zariadenia bolo odoslané upozornenie." }, - "logInInitiated": { + "loginInitiated": { "message": "Iniciované prihlásenie" }, "exposedMasterPassword": { @@ -2221,19 +2233,42 @@ } } }, - "region": { - "message": "Región" + "loggingInOn": { + "message": "Prihlásenie na" }, "opensInANewWindow": { "message": "Otvárať v novom okne" }, + "deviceApprovalRequired": { + "message": "Vyžaduje sa schválenie zariadenia. Vyberte možnosť schválenia nižšie:" + }, + "rememberThisDevice": { + "message": "Zapamätať si toto zariadenie" + }, + "uncheckIfPublicDevice": { + "message": "Odčiarknite, ak používate verejné zariadenie" + }, + "approveFromYourOtherDevice": { + "message": "Schváliť z iného zariadenia" + }, + "requestAdminApproval": { + "message": "Žiadosť o schválenie správcom" + }, + "approveWithMasterPassword": { + "message": "Schváliť pomocou hlavného hesla" + }, + "ssoIdentifierRequired": { + "message": "Pole identifikátora SSO je povinné." + }, "eu": { "message": "EÚ", "description": "European Union" }, - "us": { - "message": "USA", - "description": "United States" + "usDomain": { + "message": "bitwarden.com" + }, + "euDomain": { + "message": "bitwarden.eu" }, "accessDenied": { "message": "Prístup zamietnutý. Nemáte oprávnenie na zobrazenie tejto stránky." @@ -2243,5 +2278,133 @@ }, "display": { "message": "Zobrazenie" + }, + "accountSuccessfullyCreated": { + "message": "Účet bol úspešne vytvorený!" + }, + "adminApprovalRequested": { + "message": "Vyžaduje sa schválenie správcom" + }, + "adminApprovalRequestSentToAdmins": { + "message": "Vaša žiadosť bola odoslaná správcovi." + }, + "youWillBeNotifiedOnceApproved": { + "message": "Po schválení budete informovaný." + }, + "troubleLoggingIn": { + "message": "Máte problémy s prihlásením?" + }, + "loginApproved": { + "message": "Schválené prihlásenie" + }, + "userEmailMissing": { + "message": "Chýba e-mail používateľa" + }, + "deviceTrusted": { + "message": "Dôveryhodné zariadenie" + }, + "inputRequired": { + "message": "Vstup je povinný." + }, + "required": { + "message": "povinné" + }, + "search": { + "message": "Hladať" + }, + "inputMinLength": { + "message": "Vstup musí mať aspoň $COUNT$ znakov.", + "placeholders": { + "count": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxLength": { + "message": "Nemôžete zadať viac než $COUNT$ znakov.", + "placeholders": { + "count": { + "content": "$1", + "example": "20" + } + } + }, + "inputForbiddenCharacters": { + "message": "Tieto znaky nie sú povolené: $CHARACTERS$", + "placeholders": { + "characters": { + "content": "$1", + "example": "@, #, $, %" + } + } + }, + "inputMinValue": { + "message": "Hodnota musí byť aspoň $MIN$.", + "placeholders": { + "min": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxValue": { + "message": "Zadaná hodnota nesmie prekročiť $MAX$.", + "placeholders": { + "max": { + "content": "$1", + "example": "100" + } + } + }, + "multipleInputEmails": { + "message": "1 alebo viac e-mailov je neplatných" + }, + "inputTrimValidator": { + "message": "Vstup nesmie obsahovať iba prázdne znaky.", + "description": "Notification to inform the user that a form's input can't contain only whitespace." + }, + "inputEmail": { + "message": "Vstupom nie je e-mailová adresa." + }, + "fieldsNeedAttention": { + "message": "Niektoré polia ($COUNT$) vyžadujú vašu pozornosť.", + "placeholders": { + "count": { + "content": "$1", + "example": "4" + } + } + }, + "selectPlaceholder": { + "message": "-- Vyberte --" + }, + "multiSelectPlaceholder": { + "message": "-- Začnite písať na filtrovanie --" + }, + "multiSelectLoading": { + "message": "Načítavajú sa možnosti..." + }, + "multiSelectNotFound": { + "message": "Nenašli sa žiadne položky" + }, + "multiSelectClearAll": { + "message": "Vyčistiť všetko" + }, + "plusNMore": { + "message": "+ $QUANTITY$ ďalších", + "placeholders": { + "quantity": { + "content": "$1", + "example": "5" + } + } + }, + "submenu": { + "message": "Podponuka" + }, + "toggleCollapse": { + "message": "Prepnúť zbalenie", + "description": "Toggling an expand/collapse state." } } diff --git a/apps/browser/src/_locales/sl/messages.json b/apps/browser/src/_locales/sl/messages.json index e7b9b7b8a71..cae2464dcb1 100644 --- a/apps/browser/src/_locales/sl/messages.json +++ b/apps/browser/src/_locales/sl/messages.json @@ -338,6 +338,9 @@ "other": { "message": "Drugo" }, + "unlockMethodNeededToChangeTimeoutActionDesc": { + "message": "Set up an unlock method to change your vault timeout action." + }, "rateExtension": { "message": "Ocenite to razširitev" }, @@ -630,6 +633,12 @@ "notificationChangeSave": { "message": "Da, posodobi zdaj" }, + "notificationUnlockDesc": { + "message": "Unlock your Bitwarden vault to complete the auto-fill request." + }, + "notificationUnlock": { + "message": "Unlock" + }, "enableContextMenuItem": { "message": "Prikaži možnosti kontekstnega menuja" }, @@ -786,8 +795,8 @@ "ppremiumSignUpStorage": { "message": "1 GB šifriranega prostora za shrambo podatkov." }, - "ppremiumSignUpTwoStep": { - "message": "Dodatne možnosti za prijavo v dveh korakih, n.pr. YubiKey, FIDO U2F in Duo." + "premiumSignUpTwoStepOptions": { + "message": "Proprietary two-step login options such as YubiKey and Duo." }, "ppremiumSignUpReports": { "message": "Higiena gesel, zdravje računa in poročila o kraji podatkov, ki vam pomagajo ohraniti varnost vašega trezorja." @@ -1440,9 +1449,6 @@ "restoreItem": { "message": "Obnovi element" }, - "restoreItemConfirmation": { - "message": "Ste prepričani, da želite obnoviti ta element?" - }, "restoredItem": { "message": "Element obnovljen" }, @@ -1599,6 +1605,12 @@ "biometricsNotSupportedDesc": { "message": "Browser biometrics is not supported on this device." }, + "biometricsFailedTitle": { + "message": "Biometrics failed" + }, + "biometricsFailedDesc": { + "message": "Biometrics cannot be completed, consider using a master password or logging out. If this persists, please contact Bitwarden support." + }, "nativeMessaginPermissionErrorTitle": { "message": "Dovoljenje manjka" }, @@ -2140,8 +2152,8 @@ "notificationSentDevice": { "message": "A notification has been sent to your device." }, - "logInInitiated": { - "message": "Log in initiated" + "loginInitiated": { + "message": "Login initiated" }, "exposedMasterPassword": { "message": "Exposed Master Password" @@ -2221,19 +2233,42 @@ } } }, - "region": { - "message": "Region" + "loggingInOn": { + "message": "Logging in on" }, "opensInANewWindow": { "message": "Odpre se v novem oknu" }, + "deviceApprovalRequired": { + "message": "Device approval required. Select an approval option below:" + }, + "rememberThisDevice": { + "message": "Remember this device" + }, + "uncheckIfPublicDevice": { + "message": "Uncheck if using a public device" + }, + "approveFromYourOtherDevice": { + "message": "Approve from your other device" + }, + "requestAdminApproval": { + "message": "Request admin approval" + }, + "approveWithMasterPassword": { + "message": "Approve with master password" + }, + "ssoIdentifierRequired": { + "message": "Organization SSO identifier is required." + }, "eu": { "message": "EU", "description": "European Union" }, - "us": { - "message": "US", - "description": "United States" + "usDomain": { + "message": "bitwarden.com" + }, + "euDomain": { + "message": "bitwarden.eu" }, "accessDenied": { "message": "Access denied. You do not have permission to view this page." @@ -2243,5 +2278,133 @@ }, "display": { "message": "Display" + }, + "accountSuccessfullyCreated": { + "message": "Account successfully created!" + }, + "adminApprovalRequested": { + "message": "Admin approval requested" + }, + "adminApprovalRequestSentToAdmins": { + "message": "Your request has been sent to your admin." + }, + "youWillBeNotifiedOnceApproved": { + "message": "You will be notified once approved." + }, + "troubleLoggingIn": { + "message": "Trouble logging in?" + }, + "loginApproved": { + "message": "Login approved" + }, + "userEmailMissing": { + "message": "User email missing" + }, + "deviceTrusted": { + "message": "Device trusted" + }, + "inputRequired": { + "message": "Input is required." + }, + "required": { + "message": "required" + }, + "search": { + "message": "Search" + }, + "inputMinLength": { + "message": "Input must be at least $COUNT$ characters long.", + "placeholders": { + "count": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxLength": { + "message": "Input must not exceed $COUNT$ characters in length.", + "placeholders": { + "count": { + "content": "$1", + "example": "20" + } + } + }, + "inputForbiddenCharacters": { + "message": "The following characters are not allowed: $CHARACTERS$", + "placeholders": { + "characters": { + "content": "$1", + "example": "@, #, $, %" + } + } + }, + "inputMinValue": { + "message": "Input value must be at least $MIN$.", + "placeholders": { + "min": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxValue": { + "message": "Input value must not exceed $MAX$.", + "placeholders": { + "max": { + "content": "$1", + "example": "100" + } + } + }, + "multipleInputEmails": { + "message": "1 or more emails are invalid" + }, + "inputTrimValidator": { + "message": "Input must not contain only whitespace.", + "description": "Notification to inform the user that a form's input can't contain only whitespace." + }, + "inputEmail": { + "message": "Input is not an email address." + }, + "fieldsNeedAttention": { + "message": "$COUNT$ field(s) above need your attention.", + "placeholders": { + "count": { + "content": "$1", + "example": "4" + } + } + }, + "selectPlaceholder": { + "message": "-- Select --" + }, + "multiSelectPlaceholder": { + "message": "-- Type to filter --" + }, + "multiSelectLoading": { + "message": "Retrieving options..." + }, + "multiSelectNotFound": { + "message": "No items found" + }, + "multiSelectClearAll": { + "message": "Clear all" + }, + "plusNMore": { + "message": "+ $QUANTITY$ more", + "placeholders": { + "quantity": { + "content": "$1", + "example": "5" + } + } + }, + "submenu": { + "message": "Submenu" + }, + "toggleCollapse": { + "message": "Toggle collapse", + "description": "Toggling an expand/collapse state." } } diff --git a/apps/browser/src/_locales/sr/messages.json b/apps/browser/src/_locales/sr/messages.json index 12d1c66da81..d4e5ee4f2a4 100644 --- a/apps/browser/src/_locales/sr/messages.json +++ b/apps/browser/src/_locales/sr/messages.json @@ -338,6 +338,9 @@ "other": { "message": "Остало" }, + "unlockMethodNeededToChangeTimeoutActionDesc": { + "message": "Подесите метод откључавања да бисте променили радњу временског ограничења сефа." + }, "rateExtension": { "message": "Оцени овај додатак" }, @@ -630,6 +633,12 @@ "notificationChangeSave": { "message": "Ажурирај" }, + "notificationUnlockDesc": { + "message": "Откључати Bitwarden сеф да би извршили ауто-пуњење." + }, + "notificationUnlock": { + "message": "Откључај" + }, "enableContextMenuItem": { "message": "Прикажи контекстни мени" }, @@ -786,8 +795,8 @@ "ppremiumSignUpStorage": { "message": "1ГБ шифровано складиште за прилоге." }, - "ppremiumSignUpTwoStep": { - "message": "Додатне опције пријаве у два корака као што су YubiKey, FIDO U2F, и Duo." + "premiumSignUpTwoStepOptions": { + "message": "Proprietary two-step login options such as YubiKey and Duo." }, "ppremiumSignUpReports": { "message": "Извештаји о хигијени лозинки, здравственом стању налога и кршењу података да бисте заштитили сеф." @@ -1440,9 +1449,6 @@ "restoreItem": { "message": "Врати ставку" }, - "restoreItemConfirmation": { - "message": "Да ли сте сигурни да желите да вратите ову ставку?" - }, "restoredItem": { "message": "Ставка враћена" }, @@ -1599,6 +1605,12 @@ "biometricsNotSupportedDesc": { "message": "Биометрија прегледача није подржана на овом уређају." }, + "biometricsFailedTitle": { + "message": "Биометрија није успела" + }, + "biometricsFailedDesc": { + "message": "Биометрија се не може завршити, размислите о коришћењу главне лозинке или одјавите се. Ако се ово настави, контактирајте подршку Bitwarden-а." + }, "nativeMessaginPermissionErrorTitle": { "message": "Дозвола није дата" }, @@ -2140,7 +2152,7 @@ "notificationSentDevice": { "message": "Обавештење је послато на ваш уређај." }, - "logInInitiated": { + "loginInitiated": { "message": "Пријава је покренута" }, "exposedMasterPassword": { @@ -2221,19 +2233,42 @@ } } }, - "region": { - "message": "Регион" + "loggingInOn": { + "message": "Пријављено на" }, "opensInANewWindow": { "message": "Отвара се у новом прозору" }, + "deviceApprovalRequired": { + "message": "Потребно је одобрење уређаја. Изаберите опцију одобрења испод:" + }, + "rememberThisDevice": { + "message": "Запамти овај уређај" + }, + "uncheckIfPublicDevice": { + "message": "Искључите ако се користи јавни уређај" + }, + "approveFromYourOtherDevice": { + "message": "Одобри са мојим другим уређајем" + }, + "requestAdminApproval": { + "message": "Затражити одобрење администратора" + }, + "approveWithMasterPassword": { + "message": "Одобрити са главном лозинком" + }, + "ssoIdentifierRequired": { + "message": "Потребан је SSO идентификатор организације." + }, "eu": { "message": "EU", "description": "European Union" }, - "us": { - "message": "US", - "description": "United States" + "usDomain": { + "message": "bitwarden.com" + }, + "euDomain": { + "message": "bitwarden.eu" }, "accessDenied": { "message": "Одбијен приступ. Немате дозволу да видите ову страницу." @@ -2243,5 +2278,133 @@ }, "display": { "message": "Приказ" + }, + "accountSuccessfullyCreated": { + "message": "Налог је успешно креиран!" + }, + "adminApprovalRequested": { + "message": "Захтевано је одобрење администратора" + }, + "adminApprovalRequestSentToAdmins": { + "message": "Ваш захтев је послат вашем администратору." + }, + "youWillBeNotifiedOnceApproved": { + "message": "Бићете обавештени када буде одобрено." + }, + "troubleLoggingIn": { + "message": "Имате проблема са пријављивањем?" + }, + "loginApproved": { + "message": "Пријава је одобрена" + }, + "userEmailMissing": { + "message": "Недостаје имејл корисника" + }, + "deviceTrusted": { + "message": "Уређај поуздан" + }, + "inputRequired": { + "message": "Унос је потребан." + }, + "required": { + "message": "обавезно" + }, + "search": { + "message": "Тражи" + }, + "inputMinLength": { + "message": "Унос трба имати најмање $COUNT$ слова.", + "placeholders": { + "count": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxLength": { + "message": "Унос не сме бити већи од $COUNT$ карактера.", + "placeholders": { + "count": { + "content": "$1", + "example": "20" + } + } + }, + "inputForbiddenCharacters": { + "message": "Следећи знакови нису дозвољени: $CHARACTERS$", + "placeholders": { + "characters": { + "content": "$1", + "example": "@, #, $, %" + } + } + }, + "inputMinValue": { + "message": "Вредност мора бити најмање $MIN$.", + "placeholders": { + "min": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxValue": { + "message": "Вредност не сме бити већа од $MAX$.", + "placeholders": { + "max": { + "content": "$1", + "example": "100" + } + } + }, + "multipleInputEmails": { + "message": "1 или више имејлова су неважећи" + }, + "inputTrimValidator": { + "message": "Унос не сме да садржи само размак.", + "description": "Notification to inform the user that a form's input can't contain only whitespace." + }, + "inputEmail": { + "message": "Унос није имејл." + }, + "fieldsNeedAttention": { + "message": "$COUNT$ поље(а) изнад захтевај(у) вашу пажњу.", + "placeholders": { + "count": { + "content": "$1", + "example": "4" + } + } + }, + "selectPlaceholder": { + "message": "-- Одабрати --" + }, + "multiSelectPlaceholder": { + "message": "-- Тип за филтрирање --" + }, + "multiSelectLoading": { + "message": "Преузимање опција..." + }, + "multiSelectNotFound": { + "message": "Нема предмета" + }, + "multiSelectClearAll": { + "message": "Обриши све" + }, + "plusNMore": { + "message": "+ још $QUANTITY$", + "placeholders": { + "quantity": { + "content": "$1", + "example": "5" + } + } + }, + "submenu": { + "message": "Под-мени" + }, + "toggleCollapse": { + "message": "Промени проширење", + "description": "Toggling an expand/collapse state." } } diff --git a/apps/browser/src/_locales/sv/messages.json b/apps/browser/src/_locales/sv/messages.json index 8b70f837265..7ab058680c4 100644 --- a/apps/browser/src/_locales/sv/messages.json +++ b/apps/browser/src/_locales/sv/messages.json @@ -11,7 +11,7 @@ "description": "Extension description" }, "loginOrCreateNewAccount": { - "message": "Logga in eller skapa ett nytt konto för att komma åt dina lösenord." + "message": "Logga in eller skapa ett nytt konto för att komma åt ditt säkra valv." }, "createAccount": { "message": "Skapa konto" @@ -338,11 +338,14 @@ "other": { "message": "Annat" }, + "unlockMethodNeededToChangeTimeoutActionDesc": { + "message": "Set up an unlock method to change your vault timeout action." + }, "rateExtension": { "message": "Betygsätt tillägget" }, "rateExtensionDesc": { - "message": "Överväg gärna att hjälpa oss genom att ge oss en bra recension!" + "message": "Överväg gärna att skriva en recension om oss!" }, "browserNotSupportClipboard": { "message": "Din webbläsare har inte stöd för att enkelt kopiera till urklipp. Kopiera till urklipp manuellt istället." @@ -370,7 +373,7 @@ } }, "invalidMasterPassword": { - "message": "Felaktigt huvudlösenord" + "message": "Ogiltigt huvudlösenord" }, "vaultTimeout": { "message": "Valvets tidsgräns" @@ -630,6 +633,12 @@ "notificationChangeSave": { "message": "Uppdatera" }, + "notificationUnlockDesc": { + "message": "Unlock your Bitwarden vault to complete the auto-fill request." + }, + "notificationUnlock": { + "message": "Unlock" + }, "enableContextMenuItem": { "message": "Visa alternativ för snabbmenyn" }, @@ -730,7 +739,7 @@ "message": "Kopiera verifieringskod" }, "attachments": { - "message": "Bifogade filer" + "message": "Bilagor" }, "deleteAttachment": { "message": "Radera bilaga" @@ -786,8 +795,8 @@ "ppremiumSignUpStorage": { "message": "1 GB lagring av krypterade filer." }, - "ppremiumSignUpTwoStep": { - "message": "Ytterligare alternativ för tvåstegsverifiering såsom YubiKey, FIDO U2F och Duo." + "premiumSignUpTwoStepOptions": { + "message": "Proprietary two-step login options such as YubiKey and Duo." }, "ppremiumSignUpReports": { "message": "Lösenordshygien, kontohälsa och dataintrångsrapporter för att hålla ditt valv säkert." @@ -1440,9 +1449,6 @@ "restoreItem": { "message": "Återställ objekt" }, - "restoreItemConfirmation": { - "message": "Är du säker på att du vill återställa detta objekt?" - }, "restoredItem": { "message": "Återställde objekt" }, @@ -1599,6 +1605,12 @@ "biometricsNotSupportedDesc": { "message": "Biometri i webbläsaren stöds inte på den här enheten." }, + "biometricsFailedTitle": { + "message": "Biometrics failed" + }, + "biometricsFailedDesc": { + "message": "Biometrics cannot be completed, consider using a master password or logging out. If this persists, please contact Bitwarden support." + }, "nativeMessaginPermissionErrorTitle": { "message": "Behörighet ej beviljad" }, @@ -2140,7 +2152,7 @@ "notificationSentDevice": { "message": "En avisering har skickats till din enhet." }, - "logInInitiated": { + "loginInitiated": { "message": "Inloggning påbörjad" }, "exposedMasterPassword": { @@ -2221,19 +2233,42 @@ } } }, - "region": { - "message": "Region" + "loggingInOn": { + "message": "Logga in på" }, "opensInANewWindow": { "message": "Öppnas i ett nytt fönster" }, + "deviceApprovalRequired": { + "message": "Device approval required. Select an approval option below:" + }, + "rememberThisDevice": { + "message": "Kom ihåg denna enhet" + }, + "uncheckIfPublicDevice": { + "message": "Uncheck if using a public device" + }, + "approveFromYourOtherDevice": { + "message": "Approve from your other device" + }, + "requestAdminApproval": { + "message": "Request admin approval" + }, + "approveWithMasterPassword": { + "message": "Godkänn med huvudlösenord" + }, + "ssoIdentifierRequired": { + "message": "Organization SSO identifier is required." + }, "eu": { "message": "EU", "description": "European Union" }, - "us": { - "message": "US", - "description": "United States" + "usDomain": { + "message": "bitwarden.com" + }, + "euDomain": { + "message": "bitwarden.eu" }, "accessDenied": { "message": "Access denied. You do not have permission to view this page." @@ -2243,5 +2278,133 @@ }, "display": { "message": "Display" + }, + "accountSuccessfullyCreated": { + "message": "Account successfully created!" + }, + "adminApprovalRequested": { + "message": "Admin approval requested" + }, + "adminApprovalRequestSentToAdmins": { + "message": "Your request has been sent to your admin." + }, + "youWillBeNotifiedOnceApproved": { + "message": "Du kommer att meddelas vid godkännande." + }, + "troubleLoggingIn": { + "message": "Problem med att logga in?" + }, + "loginApproved": { + "message": "Login approved" + }, + "userEmailMissing": { + "message": "User email missing" + }, + "deviceTrusted": { + "message": "Device trusted" + }, + "inputRequired": { + "message": "Input is required." + }, + "required": { + "message": "obligatoriskt" + }, + "search": { + "message": "Sök" + }, + "inputMinLength": { + "message": "Inmatningen måste innehålla minst $COUNT$ tecken.", + "placeholders": { + "count": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxLength": { + "message": "Input must not exceed $COUNT$ characters in length.", + "placeholders": { + "count": { + "content": "$1", + "example": "20" + } + } + }, + "inputForbiddenCharacters": { + "message": "Följande tecken är inte tillåtna: $CHARACTERS$", + "placeholders": { + "characters": { + "content": "$1", + "example": "@, #, $, %" + } + } + }, + "inputMinValue": { + "message": "Input value must be at least $MIN$.", + "placeholders": { + "min": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxValue": { + "message": "Input value must not exceed $MAX$.", + "placeholders": { + "max": { + "content": "$1", + "example": "100" + } + } + }, + "multipleInputEmails": { + "message": "En eller flera e-postadresser är ogiltiga" + }, + "inputTrimValidator": { + "message": "Input must not contain only whitespace.", + "description": "Notification to inform the user that a form's input can't contain only whitespace." + }, + "inputEmail": { + "message": "Inmatningen är inte en e-postadress." + }, + "fieldsNeedAttention": { + "message": "$COUNT$ fält ovan kräver din uppmärksamhet.", + "placeholders": { + "count": { + "content": "$1", + "example": "4" + } + } + }, + "selectPlaceholder": { + "message": "-- Välj --" + }, + "multiSelectPlaceholder": { + "message": "-- Skriv för att filtrera --" + }, + "multiSelectLoading": { + "message": "Hämtar alternativ..." + }, + "multiSelectNotFound": { + "message": "Inga objekt hittades" + }, + "multiSelectClearAll": { + "message": "Rensa alla" + }, + "plusNMore": { + "message": "+ $QUANTITY$ till", + "placeholders": { + "quantity": { + "content": "$1", + "example": "5" + } + } + }, + "submenu": { + "message": "Undermeny" + }, + "toggleCollapse": { + "message": "Toggle collapse", + "description": "Toggling an expand/collapse state." } } diff --git a/apps/browser/src/_locales/te/messages.json b/apps/browser/src/_locales/te/messages.json index 9e46b55f19e..6aea5876eac 100644 --- a/apps/browser/src/_locales/te/messages.json +++ b/apps/browser/src/_locales/te/messages.json @@ -338,6 +338,9 @@ "other": { "message": "Other" }, + "unlockMethodNeededToChangeTimeoutActionDesc": { + "message": "Set up an unlock method to change your vault timeout action." + }, "rateExtension": { "message": "Rate the extension" }, @@ -630,6 +633,12 @@ "notificationChangeSave": { "message": "Update" }, + "notificationUnlockDesc": { + "message": "Unlock your Bitwarden vault to complete the auto-fill request." + }, + "notificationUnlock": { + "message": "Unlock" + }, "enableContextMenuItem": { "message": "Show context menu options" }, @@ -786,8 +795,8 @@ "ppremiumSignUpStorage": { "message": "1 GB encrypted storage for file attachments." }, - "ppremiumSignUpTwoStep": { - "message": "Additional two-step login options such as YubiKey, FIDO U2F, and Duo." + "premiumSignUpTwoStepOptions": { + "message": "Proprietary two-step login options such as YubiKey and Duo." }, "ppremiumSignUpReports": { "message": "Password hygiene, account health, and data breach reports to keep your vault safe." @@ -1440,9 +1449,6 @@ "restoreItem": { "message": "Restore item" }, - "restoreItemConfirmation": { - "message": "Are you sure you want to restore this item?" - }, "restoredItem": { "message": "Item restored" }, @@ -1599,6 +1605,12 @@ "biometricsNotSupportedDesc": { "message": "Browser biometrics is not supported on this device." }, + "biometricsFailedTitle": { + "message": "Biometrics failed" + }, + "biometricsFailedDesc": { + "message": "Biometrics cannot be completed, consider using a master password or logging out. If this persists, please contact Bitwarden support." + }, "nativeMessaginPermissionErrorTitle": { "message": "Permission not provided" }, @@ -2140,8 +2152,8 @@ "notificationSentDevice": { "message": "A notification has been sent to your device." }, - "logInInitiated": { - "message": "Log in initiated" + "loginInitiated": { + "message": "Login initiated" }, "exposedMasterPassword": { "message": "Exposed Master Password" @@ -2221,19 +2233,42 @@ } } }, - "region": { - "message": "Region" + "loggingInOn": { + "message": "Logging in on" }, "opensInANewWindow": { "message": "Opens in a new window" }, + "deviceApprovalRequired": { + "message": "Device approval required. Select an approval option below:" + }, + "rememberThisDevice": { + "message": "Remember this device" + }, + "uncheckIfPublicDevice": { + "message": "Uncheck if using a public device" + }, + "approveFromYourOtherDevice": { + "message": "Approve from your other device" + }, + "requestAdminApproval": { + "message": "Request admin approval" + }, + "approveWithMasterPassword": { + "message": "Approve with master password" + }, + "ssoIdentifierRequired": { + "message": "Organization SSO identifier is required." + }, "eu": { "message": "EU", "description": "European Union" }, - "us": { - "message": "US", - "description": "United States" + "usDomain": { + "message": "bitwarden.com" + }, + "euDomain": { + "message": "bitwarden.eu" }, "accessDenied": { "message": "Access denied. You do not have permission to view this page." @@ -2243,5 +2278,133 @@ }, "display": { "message": "Display" + }, + "accountSuccessfullyCreated": { + "message": "Account successfully created!" + }, + "adminApprovalRequested": { + "message": "Admin approval requested" + }, + "adminApprovalRequestSentToAdmins": { + "message": "Your request has been sent to your admin." + }, + "youWillBeNotifiedOnceApproved": { + "message": "You will be notified once approved." + }, + "troubleLoggingIn": { + "message": "Trouble logging in?" + }, + "loginApproved": { + "message": "Login approved" + }, + "userEmailMissing": { + "message": "User email missing" + }, + "deviceTrusted": { + "message": "Device trusted" + }, + "inputRequired": { + "message": "Input is required." + }, + "required": { + "message": "required" + }, + "search": { + "message": "Search" + }, + "inputMinLength": { + "message": "Input must be at least $COUNT$ characters long.", + "placeholders": { + "count": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxLength": { + "message": "Input must not exceed $COUNT$ characters in length.", + "placeholders": { + "count": { + "content": "$1", + "example": "20" + } + } + }, + "inputForbiddenCharacters": { + "message": "The following characters are not allowed: $CHARACTERS$", + "placeholders": { + "characters": { + "content": "$1", + "example": "@, #, $, %" + } + } + }, + "inputMinValue": { + "message": "Input value must be at least $MIN$.", + "placeholders": { + "min": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxValue": { + "message": "Input value must not exceed $MAX$.", + "placeholders": { + "max": { + "content": "$1", + "example": "100" + } + } + }, + "multipleInputEmails": { + "message": "1 or more emails are invalid" + }, + "inputTrimValidator": { + "message": "Input must not contain only whitespace.", + "description": "Notification to inform the user that a form's input can't contain only whitespace." + }, + "inputEmail": { + "message": "Input is not an email address." + }, + "fieldsNeedAttention": { + "message": "$COUNT$ field(s) above need your attention.", + "placeholders": { + "count": { + "content": "$1", + "example": "4" + } + } + }, + "selectPlaceholder": { + "message": "-- Select --" + }, + "multiSelectPlaceholder": { + "message": "-- Type to filter --" + }, + "multiSelectLoading": { + "message": "Retrieving options..." + }, + "multiSelectNotFound": { + "message": "No items found" + }, + "multiSelectClearAll": { + "message": "Clear all" + }, + "plusNMore": { + "message": "+ $QUANTITY$ more", + "placeholders": { + "quantity": { + "content": "$1", + "example": "5" + } + } + }, + "submenu": { + "message": "Submenu" + }, + "toggleCollapse": { + "message": "Toggle collapse", + "description": "Toggling an expand/collapse state." } } diff --git a/apps/browser/src/_locales/th/messages.json b/apps/browser/src/_locales/th/messages.json index 2b93ace3a04..7fcf7835119 100644 --- a/apps/browser/src/_locales/th/messages.json +++ b/apps/browser/src/_locales/th/messages.json @@ -338,6 +338,9 @@ "other": { "message": "อื่น ๆ" }, + "unlockMethodNeededToChangeTimeoutActionDesc": { + "message": "Set up an unlock method to change your vault timeout action." + }, "rateExtension": { "message": "Rate the Extension" }, @@ -630,6 +633,12 @@ "notificationChangeSave": { "message": "Yes, Update Now" }, + "notificationUnlockDesc": { + "message": "Unlock your Bitwarden vault to complete the auto-fill request." + }, + "notificationUnlock": { + "message": "Unlock" + }, "enableContextMenuItem": { "message": "แสดงตัวเลือกเมนูบริบท" }, @@ -786,8 +795,8 @@ "ppremiumSignUpStorage": { "message": "1 GB of encrypted file storage." }, - "ppremiumSignUpTwoStep": { - "message": "ตัวเลือกการเข้าสู่ระบบแบบสองขั้นตอนเพิ่มเติม เช่น YubiKey, FIDO U2F และ Duo" + "premiumSignUpTwoStepOptions": { + "message": "Proprietary two-step login options such as YubiKey and Duo." }, "ppremiumSignUpReports": { "message": "สุขอนามัยของรหัสผ่าน ความสมบูรณ์ของบัญชี และรายงานการละเมิดข้อมูลเพื่อให้ตู้นิรภัยของคุณปลอดภัย" @@ -1440,9 +1449,6 @@ "restoreItem": { "message": "กู้คืนรายการ" }, - "restoreItemConfirmation": { - "message": "คุณแน่ใจหรือไม่ว่าต้องการกู้คืนรายการนี้" - }, "restoredItem": { "message": "คืนค่ารายการแล้ว" }, @@ -1599,6 +1605,12 @@ "biometricsNotSupportedDesc": { "message": "Browser biometrics is not supported on this device." }, + "biometricsFailedTitle": { + "message": "Biometrics failed" + }, + "biometricsFailedDesc": { + "message": "Biometrics cannot be completed, consider using a master password or logging out. If this persists, please contact Bitwarden support." + }, "nativeMessaginPermissionErrorTitle": { "message": "Permission not provided" }, @@ -2140,8 +2152,8 @@ "notificationSentDevice": { "message": "A notification has been sent to your device." }, - "logInInitiated": { - "message": "Log in initiated" + "loginInitiated": { + "message": "Login initiated" }, "exposedMasterPassword": { "message": "Exposed Master Password" @@ -2221,19 +2233,42 @@ } } }, - "region": { - "message": "Region" + "loggingInOn": { + "message": "Logging in on" }, "opensInANewWindow": { "message": "Opens in a new window" }, + "deviceApprovalRequired": { + "message": "Device approval required. Select an approval option below:" + }, + "rememberThisDevice": { + "message": "Remember this device" + }, + "uncheckIfPublicDevice": { + "message": "Uncheck if using a public device" + }, + "approveFromYourOtherDevice": { + "message": "Approve from your other device" + }, + "requestAdminApproval": { + "message": "Request admin approval" + }, + "approveWithMasterPassword": { + "message": "Approve with master password" + }, + "ssoIdentifierRequired": { + "message": "Organization SSO identifier is required." + }, "eu": { "message": "EU", "description": "European Union" }, - "us": { - "message": "US", - "description": "United States" + "usDomain": { + "message": "bitwarden.com" + }, + "euDomain": { + "message": "bitwarden.eu" }, "accessDenied": { "message": "Access denied. You do not have permission to view this page." @@ -2243,5 +2278,133 @@ }, "display": { "message": "Display" + }, + "accountSuccessfullyCreated": { + "message": "Account successfully created!" + }, + "adminApprovalRequested": { + "message": "Admin approval requested" + }, + "adminApprovalRequestSentToAdmins": { + "message": "Your request has been sent to your admin." + }, + "youWillBeNotifiedOnceApproved": { + "message": "You will be notified once approved." + }, + "troubleLoggingIn": { + "message": "Trouble logging in?" + }, + "loginApproved": { + "message": "Login approved" + }, + "userEmailMissing": { + "message": "User email missing" + }, + "deviceTrusted": { + "message": "Device trusted" + }, + "inputRequired": { + "message": "Input is required." + }, + "required": { + "message": "required" + }, + "search": { + "message": "Search" + }, + "inputMinLength": { + "message": "Input must be at least $COUNT$ characters long.", + "placeholders": { + "count": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxLength": { + "message": "Input must not exceed $COUNT$ characters in length.", + "placeholders": { + "count": { + "content": "$1", + "example": "20" + } + } + }, + "inputForbiddenCharacters": { + "message": "The following characters are not allowed: $CHARACTERS$", + "placeholders": { + "characters": { + "content": "$1", + "example": "@, #, $, %" + } + } + }, + "inputMinValue": { + "message": "Input value must be at least $MIN$.", + "placeholders": { + "min": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxValue": { + "message": "Input value must not exceed $MAX$.", + "placeholders": { + "max": { + "content": "$1", + "example": "100" + } + } + }, + "multipleInputEmails": { + "message": "1 or more emails are invalid" + }, + "inputTrimValidator": { + "message": "Input must not contain only whitespace.", + "description": "Notification to inform the user that a form's input can't contain only whitespace." + }, + "inputEmail": { + "message": "Input is not an email address." + }, + "fieldsNeedAttention": { + "message": "$COUNT$ field(s) above need your attention.", + "placeholders": { + "count": { + "content": "$1", + "example": "4" + } + } + }, + "selectPlaceholder": { + "message": "-- Select --" + }, + "multiSelectPlaceholder": { + "message": "-- Type to filter --" + }, + "multiSelectLoading": { + "message": "Retrieving options..." + }, + "multiSelectNotFound": { + "message": "No items found" + }, + "multiSelectClearAll": { + "message": "Clear all" + }, + "plusNMore": { + "message": "+ $QUANTITY$ more", + "placeholders": { + "quantity": { + "content": "$1", + "example": "5" + } + } + }, + "submenu": { + "message": "Submenu" + }, + "toggleCollapse": { + "message": "Toggle collapse", + "description": "Toggling an expand/collapse state." } } diff --git a/apps/browser/src/_locales/tr/messages.json b/apps/browser/src/_locales/tr/messages.json index f438c3baa91..4134a27d265 100644 --- a/apps/browser/src/_locales/tr/messages.json +++ b/apps/browser/src/_locales/tr/messages.json @@ -338,6 +338,9 @@ "other": { "message": "Diğer" }, + "unlockMethodNeededToChangeTimeoutActionDesc": { + "message": "Set up an unlock method to change your vault timeout action." + }, "rateExtension": { "message": "Uzantıyı değerlendirin" }, @@ -630,6 +633,12 @@ "notificationChangeSave": { "message": "Güncelle" }, + "notificationUnlockDesc": { + "message": "Otomatik doldurma isteğini tamamlamak için Bitwarden kasanızın kilidini açın." + }, + "notificationUnlock": { + "message": "Kilidi aç" + }, "enableContextMenuItem": { "message": "Bağlam menüsü seçeneklerini göster" }, @@ -786,8 +795,8 @@ "ppremiumSignUpStorage": { "message": "Dosya ekleri için 1 GB şifrelenmiş depolama." }, - "ppremiumSignUpTwoStep": { - "message": "YubiKey, FIDO U2F ve Duo gibi iki aşamalı giriş seçenekleri." + "premiumSignUpTwoStepOptions": { + "message": "YubiKey ve Duo gibi marka bazlı iki aşamalı giriş seçenekleri." }, "ppremiumSignUpReports": { "message": "Kasanızı güvende tutmak için parola hijyeni, hesap sağlığı ve veri ihlali raporları." @@ -1440,9 +1449,6 @@ "restoreItem": { "message": "Kaydı geri yükle" }, - "restoreItemConfirmation": { - "message": "Bu kaydı geri yüklemek istediğinizden emin misiniz?" - }, "restoredItem": { "message": "Kayıt geri yüklendi" }, @@ -1599,6 +1605,12 @@ "biometricsNotSupportedDesc": { "message": "Tarayıcı biyometrisi bu cihazda desteklenmiyor." }, + "biometricsFailedTitle": { + "message": "Biyometri doğrulanamadı" + }, + "biometricsFailedDesc": { + "message": "Biometrics cannot be completed, consider using a master password or logging out. If this persists, please contact Bitwarden support." + }, "nativeMessaginPermissionErrorTitle": { "message": "İzin verilmedi" }, @@ -2140,7 +2152,7 @@ "notificationSentDevice": { "message": "Cihazınıza bir bildirim gönderildi." }, - "logInInitiated": { + "loginInitiated": { "message": "Giriş başlatıldı" }, "exposedMasterPassword": { @@ -2221,19 +2233,42 @@ } } }, - "region": { - "message": "Bölge" + "loggingInOn": { + "message": "Giriş yapılan konum" }, "opensInANewWindow": { "message": "Yeni pencerede açılır" }, + "deviceApprovalRequired": { + "message": "Cihaz onayı gerekiyor. Lütfen onay yönteminizi seçin:" + }, + "rememberThisDevice": { + "message": "Bu cihazı hatırla" + }, + "uncheckIfPublicDevice": { + "message": "Paylaşılan bir cihaz kullanıyorsanız işaretlemeyin" + }, + "approveFromYourOtherDevice": { + "message": "Diğer cihazımdan onayla" + }, + "requestAdminApproval": { + "message": "Yönetici onayı iste" + }, + "approveWithMasterPassword": { + "message": "Ana parola ile onayla" + }, + "ssoIdentifierRequired": { + "message": "Kuruluş SSO tanımlayıcısı gereklidir." + }, "eu": { "message": "AB", "description": "European Union" }, - "us": { - "message": "ABD", - "description": "United States" + "usDomain": { + "message": "bitwarden.com" + }, + "euDomain": { + "message": "bitwarden.eu" }, "accessDenied": { "message": "Erişim engellendi. Bu sayfayı görüntüleme iznine sahip değilsiniz." @@ -2243,5 +2278,133 @@ }, "display": { "message": "Display" + }, + "accountSuccessfullyCreated": { + "message": "Hesap başarıyla oluşturuldu!" + }, + "adminApprovalRequested": { + "message": "Yönetici onayı istendi" + }, + "adminApprovalRequestSentToAdmins": { + "message": "İsteğiniz yöneticinize gönderildi." + }, + "youWillBeNotifiedOnceApproved": { + "message": "Onaylandıktan sonra bilgilendirileceksiniz." + }, + "troubleLoggingIn": { + "message": "Giriş yaparken sorun mu yaşıyorsunuz?" + }, + "loginApproved": { + "message": "Giriş onaylandı" + }, + "userEmailMissing": { + "message": "Kullanıcının e-postası eksik" + }, + "deviceTrusted": { + "message": "Cihaza güvenildi" + }, + "inputRequired": { + "message": "Input is required." + }, + "required": { + "message": "required" + }, + "search": { + "message": "Ara" + }, + "inputMinLength": { + "message": "Input must be at least $COUNT$ characters long.", + "placeholders": { + "count": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxLength": { + "message": "Input must not exceed $COUNT$ characters in length.", + "placeholders": { + "count": { + "content": "$1", + "example": "20" + } + } + }, + "inputForbiddenCharacters": { + "message": "The following characters are not allowed: $CHARACTERS$", + "placeholders": { + "characters": { + "content": "$1", + "example": "@, #, $, %" + } + } + }, + "inputMinValue": { + "message": "Girdi değeri en az $MIN$ olmalı.", + "placeholders": { + "min": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxValue": { + "message": "Input value must not exceed $MAX$.", + "placeholders": { + "max": { + "content": "$1", + "example": "100" + } + } + }, + "multipleInputEmails": { + "message": "1 or more emails are invalid" + }, + "inputTrimValidator": { + "message": "Input must not contain only whitespace.", + "description": "Notification to inform the user that a form's input can't contain only whitespace." + }, + "inputEmail": { + "message": "Input is not an email address." + }, + "fieldsNeedAttention": { + "message": "$COUNT$ field(s) above need your attention.", + "placeholders": { + "count": { + "content": "$1", + "example": "4" + } + } + }, + "selectPlaceholder": { + "message": "-- Select --" + }, + "multiSelectPlaceholder": { + "message": "-- Type to filter --" + }, + "multiSelectLoading": { + "message": "Retrieving options..." + }, + "multiSelectNotFound": { + "message": "Hiç kayıt bulunamadı" + }, + "multiSelectClearAll": { + "message": "Tümünü temizle" + }, + "plusNMore": { + "message": "+ $QUANTITY$ more", + "placeholders": { + "quantity": { + "content": "$1", + "example": "5" + } + } + }, + "submenu": { + "message": "Submenu" + }, + "toggleCollapse": { + "message": "Toggle collapse", + "description": "Toggling an expand/collapse state." } } diff --git a/apps/browser/src/_locales/uk/messages.json b/apps/browser/src/_locales/uk/messages.json index f9459c393a5..2d1a0b66291 100644 --- a/apps/browser/src/_locales/uk/messages.json +++ b/apps/browser/src/_locales/uk/messages.json @@ -338,6 +338,9 @@ "other": { "message": "Інше" }, + "unlockMethodNeededToChangeTimeoutActionDesc": { + "message": "Налаштуйте спосіб розблокування, щоб змінити час очікування сховища." + }, "rateExtension": { "message": "Оцінити розширення" }, @@ -630,6 +633,12 @@ "notificationChangeSave": { "message": "Оновити" }, + "notificationUnlockDesc": { + "message": "Розблокуйте своє сховище Bitwarden, щоб завершити запит автозаповнення." + }, + "notificationUnlock": { + "message": "Розблокувати" + }, "enableContextMenuItem": { "message": "Показувати в контекстному меню" }, @@ -786,8 +795,8 @@ "ppremiumSignUpStorage": { "message": "1 ГБ зашифрованого сховища для файлів." }, - "ppremiumSignUpTwoStep": { - "message": "Додаткові можливості двоетапної перевірки, наприклад, YubiKey, FIDO U2F та Duo." + "premiumSignUpTwoStepOptions": { + "message": "Proprietary two-step login options such as YubiKey and Duo." }, "ppremiumSignUpReports": { "message": "Гігієна паролів, здоров'я облікового запису, а також звіти про вразливості даних, щоб зберігати ваше сховище в безпеці." @@ -1440,9 +1449,6 @@ "restoreItem": { "message": "Відновити запис" }, - "restoreItemConfirmation": { - "message": "Ви дійсно хочете відновити цей запис?" - }, "restoredItem": { "message": "Запис відновлено" }, @@ -1599,6 +1605,12 @@ "biometricsNotSupportedDesc": { "message": "Біометрія в браузері не підтримується на цьому пристрої." }, + "biometricsFailedTitle": { + "message": "Збій біометрії" + }, + "biometricsFailedDesc": { + "message": "Неможливо виконати біометрію. Скористайтеся головним паролем або вийдіть із системи. Якщо проблема не зникне, зверніться до служби підтримки Bitwarden." + }, "nativeMessaginPermissionErrorTitle": { "message": "Дозвіл не надано" }, @@ -2140,7 +2152,7 @@ "notificationSentDevice": { "message": "Сповіщення було надіслано на ваш пристрій." }, - "logInInitiated": { + "loginInitiated": { "message": "Ініційовано вхід" }, "exposedMasterPassword": { @@ -2221,19 +2233,42 @@ } } }, - "region": { - "message": "Регіон" + "loggingInOn": { + "message": "Увійти на" }, "opensInANewWindow": { "message": "Відкривається у новому вікні" }, + "deviceApprovalRequired": { + "message": "Необхідне підтвердження пристрою. Виберіть варіант підтвердження нижче:" + }, + "rememberThisDevice": { + "message": "Запам'ятати цей пристрій" + }, + "uncheckIfPublicDevice": { + "message": "Зніміть позначку, якщо використовуєте загальнодоступний пристрій" + }, + "approveFromYourOtherDevice": { + "message": "Затвердіть з іншого пристрою" + }, + "requestAdminApproval": { + "message": "Запит підтвердження адміністратора" + }, + "approveWithMasterPassword": { + "message": "Затвердити з головним паролем" + }, + "ssoIdentifierRequired": { + "message": "Потрібен SSO-ідентифікатор організації." + }, "eu": { "message": "ЄС", "description": "European Union" }, - "us": { - "message": "США", - "description": "United States" + "usDomain": { + "message": "bitwarden.com" + }, + "euDomain": { + "message": "bitwarden.eu" }, "accessDenied": { "message": "Доступ заборонено. У вас немає дозволу на перегляд цієї сторінки." @@ -2243,5 +2278,133 @@ }, "display": { "message": "Екран" + }, + "accountSuccessfullyCreated": { + "message": "Обліковий запис успішно створено!" + }, + "adminApprovalRequested": { + "message": "Запитано затвердження адміністратором" + }, + "adminApprovalRequestSentToAdmins": { + "message": "Ваш запит відправлено адміністратору." + }, + "youWillBeNotifiedOnceApproved": { + "message": "Ви отримаєте сповіщення після затвердження." + }, + "troubleLoggingIn": { + "message": "Проблема під час входу?" + }, + "loginApproved": { + "message": "Вхід затверджено" + }, + "userEmailMissing": { + "message": "Немає адреси електронної пошти" + }, + "deviceTrusted": { + "message": "Довірений пристрій" + }, + "inputRequired": { + "message": "Необхідно ввести дані." + }, + "required": { + "message": "обов'язково" + }, + "search": { + "message": "Пошук" + }, + "inputMinLength": { + "message": "Введені дані мають бути довжиною принаймні $COUNT$ символів.", + "placeholders": { + "count": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxLength": { + "message": "Вхідне значення не повинно перевищувати $COUNT$ символів.", + "placeholders": { + "count": { + "content": "$1", + "example": "20" + } + } + }, + "inputForbiddenCharacters": { + "message": "Вказані символи заборонені: $CHARACTERS$", + "placeholders": { + "characters": { + "content": "$1", + "example": "@, #, $, %" + } + } + }, + "inputMinValue": { + "message": "Значення має бути принаймні $MIN$.", + "placeholders": { + "min": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxValue": { + "message": "Значення не може перевищувати $MAX$.", + "placeholders": { + "max": { + "content": "$1", + "example": "100" + } + } + }, + "multipleInputEmails": { + "message": "1 або більше адрес е-пошти недійсні" + }, + "inputTrimValidator": { + "message": "Введене значення не повинно містити лише пробіл.", + "description": "Notification to inform the user that a form's input can't contain only whitespace." + }, + "inputEmail": { + "message": "Введені дані не є адресою е-пошти." + }, + "fieldsNeedAttention": { + "message": "$COUNT$ поле (поля) вище потребують вашої уваги.", + "placeholders": { + "count": { + "content": "$1", + "example": "4" + } + } + }, + "selectPlaceholder": { + "message": "-- Оберіть--" + }, + "multiSelectPlaceholder": { + "message": "-- Введіть для фільтрування --" + }, + "multiSelectLoading": { + "message": "Параметри отримання..." + }, + "multiSelectNotFound": { + "message": "Нічого не знайдено" + }, + "multiSelectClearAll": { + "message": "Очистити все" + }, + "plusNMore": { + "message": "+ ще $QUANTITY$", + "placeholders": { + "quantity": { + "content": "$1", + "example": "5" + } + } + }, + "submenu": { + "message": "Підменю" + }, + "toggleCollapse": { + "message": "Згорнути/розгорнути", + "description": "Toggling an expand/collapse state." } } diff --git a/apps/browser/src/_locales/vi/messages.json b/apps/browser/src/_locales/vi/messages.json index 35234feeb38..5d71340db52 100644 --- a/apps/browser/src/_locales/vi/messages.json +++ b/apps/browser/src/_locales/vi/messages.json @@ -338,6 +338,9 @@ "other": { "message": "Khác" }, + "unlockMethodNeededToChangeTimeoutActionDesc": { + "message": "Set up an unlock method to change your vault timeout action." + }, "rateExtension": { "message": "Đánh giá tiện ích mở rộng" }, @@ -630,6 +633,12 @@ "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." + }, + "notificationUnlock": { + "message": "Mở khóa" + }, "enableContextMenuItem": { "message": "Hiển thị tuỳ chọn menu ngữ cảnh" }, @@ -786,8 +795,8 @@ "ppremiumSignUpStorage": { "message": "1GB bộ nhớ lưu trữ tập tin được mã hóa." }, - "ppremiumSignUpTwoStep": { - "message": "Tuỳ chọn đăng nhập 2 bước bổ sung như YubiKey, FIDO U2F, và Duo." + "premiumSignUpTwoStepOptions": { + "message": "Proprietary two-step login options such as YubiKey and 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." @@ -1440,9 +1449,6 @@ "restoreItem": { "message": "Khôi phục mục" }, - "restoreItemConfirmation": { - "message": "Bạn có chắc chắn muốn khôi phục mục này không?" - }, "restoredItem": { "message": "Mục đã được khôi phục" }, @@ -1462,16 +1468,16 @@ "message": "Đã tự động điền mục " }, "insecurePageWarning": { - "message": "Warning: This is an unsecured HTTP page, and any information you submit can potentially be seen and changed by others. This Login was originally saved on a secure (HTTPS) page." + "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)." }, "insecurePageWarningFillPrompt": { - "message": "Do you still wish to fill this login?" + "message": "Bạn vẫn muốn điền thông tin đăng nhập?" }, "autofillIframeWarning": { - "message": "The form is hosted by a different domain than the URI of your saved login. Choose OK to auto-fill anyway, or Cancel to stop." + "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." }, "autofillIframeWarningTip": { - "message": "To prevent this warning in the future, save this URI, $HOSTNAME$, to your Bitwarden login item for this site.", + "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.", "placeholders": { "hostname": { "content": "$1", @@ -1599,6 +1605,12 @@ "biometricsNotSupportedDesc": { "message": "Nhận dạng sinh trắc học trên trình duyệt không được hỗ trợ trên thiết bị này" }, + "biometricsFailedTitle": { + "message": "Biometrics failed" + }, + "biometricsFailedDesc": { + "message": "Biometrics cannot be completed, consider using a master password or logging out. If this persists, please contact Bitwarden support." + }, "nativeMessaginPermissionErrorTitle": { "message": "Quyền chưa được cấp" }, @@ -2140,8 +2152,8 @@ "notificationSentDevice": { "message": "Một thông báo đã được gửi đến thiết bị của bạn." }, - "logInInitiated": { - "message": "Log in initiated" + "loginInitiated": { + "message": "Login initiated" }, "exposedMasterPassword": { "message": "Mật khẩu chính bị lộ" @@ -2174,10 +2186,10 @@ } }, "autofillPageLoadPolicyActivated": { - "message": "Your organization policies have turned on auto-fill on page load." + "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." }, "howToAutofill": { - "message": "How to auto-fill" + "message": "Cách tự đồng điền" }, "autofillSelectInfoWithCommand": { "message": "Select an item from this page or use the shortcut: $COMMAND$", @@ -2195,16 +2207,16 @@ "message": "Got it" }, "autofillSettings": { - "message": "Auto-fill settings" + "message": "Cài đặt tự động điền" }, "autofillShortcut": { - "message": "Auto-fill keyboard shortcut" + "message": "Phím tắt tự động điền" }, "autofillShortcutNotSet": { - "message": "The auto-fill 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." }, "autofillShortcutText": { - "message": "The auto-fill shortcut is: $COMMAND$. Change this in the browser's settings.", + "message": "Phím tắt cho chức năng tự động điền là $COMMAND$. Vui lòng thay đổi trong cài đặt của trình duyệt.", "placeholders": { "command": { "content": "$1", @@ -2213,7 +2225,7 @@ } }, "autofillShortcutTextSafari": { - "message": "Default auto-fill shortcut: $COMMAND$.", + "message": "Phím tắt mặc định cho chức năng tự động điền: $COMMAND$.", "placeholders": { "command": { "content": "$1", @@ -2221,19 +2233,42 @@ } } }, - "region": { - "message": "Region" + "loggingInOn": { + "message": "Logging in on" }, "opensInANewWindow": { "message": "Opens in a new window" }, + "deviceApprovalRequired": { + "message": "Device approval required. Select an approval option below:" + }, + "rememberThisDevice": { + "message": "Remember this device" + }, + "uncheckIfPublicDevice": { + "message": "Uncheck if using a public device" + }, + "approveFromYourOtherDevice": { + "message": "Approve from your other device" + }, + "requestAdminApproval": { + "message": "Request admin approval" + }, + "approveWithMasterPassword": { + "message": "Approve with master password" + }, + "ssoIdentifierRequired": { + "message": "Organization SSO identifier is required." + }, "eu": { "message": "EU", "description": "European Union" }, - "us": { - "message": "US", - "description": "United States" + "usDomain": { + "message": "bitwarden.com" + }, + "euDomain": { + "message": "bitwarden.eu" }, "accessDenied": { "message": "Access denied. You do not have permission to view this page." @@ -2243,5 +2278,133 @@ }, "display": { "message": "Display" + }, + "accountSuccessfullyCreated": { + "message": "Account successfully created!" + }, + "adminApprovalRequested": { + "message": "Admin approval requested" + }, + "adminApprovalRequestSentToAdmins": { + "message": "Your request has been sent to your admin." + }, + "youWillBeNotifiedOnceApproved": { + "message": "You will be notified once approved." + }, + "troubleLoggingIn": { + "message": "Trouble logging in?" + }, + "loginApproved": { + "message": "Login approved" + }, + "userEmailMissing": { + "message": "User email missing" + }, + "deviceTrusted": { + "message": "Device trusted" + }, + "inputRequired": { + "message": "Input is required." + }, + "required": { + "message": "required" + }, + "search": { + "message": "Search" + }, + "inputMinLength": { + "message": "Input must be at least $COUNT$ characters long.", + "placeholders": { + "count": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxLength": { + "message": "Input must not exceed $COUNT$ characters in length.", + "placeholders": { + "count": { + "content": "$1", + "example": "20" + } + } + }, + "inputForbiddenCharacters": { + "message": "The following characters are not allowed: $CHARACTERS$", + "placeholders": { + "characters": { + "content": "$1", + "example": "@, #, $, %" + } + } + }, + "inputMinValue": { + "message": "Input value must be at least $MIN$.", + "placeholders": { + "min": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxValue": { + "message": "Input value must not exceed $MAX$.", + "placeholders": { + "max": { + "content": "$1", + "example": "100" + } + } + }, + "multipleInputEmails": { + "message": "1 or more emails are invalid" + }, + "inputTrimValidator": { + "message": "Input must not contain only whitespace.", + "description": "Notification to inform the user that a form's input can't contain only whitespace." + }, + "inputEmail": { + "message": "Input is not an email address." + }, + "fieldsNeedAttention": { + "message": "$COUNT$ field(s) above need your attention.", + "placeholders": { + "count": { + "content": "$1", + "example": "4" + } + } + }, + "selectPlaceholder": { + "message": "-- Select --" + }, + "multiSelectPlaceholder": { + "message": "-- Type to filter --" + }, + "multiSelectLoading": { + "message": "Retrieving options..." + }, + "multiSelectNotFound": { + "message": "No items found" + }, + "multiSelectClearAll": { + "message": "Clear all" + }, + "plusNMore": { + "message": "+ $QUANTITY$ more", + "placeholders": { + "quantity": { + "content": "$1", + "example": "5" + } + } + }, + "submenu": { + "message": "Submenu" + }, + "toggleCollapse": { + "message": "Toggle collapse", + "description": "Toggling an expand/collapse state." } } diff --git a/apps/browser/src/_locales/zh_CN/messages.json b/apps/browser/src/_locales/zh_CN/messages.json index daa7436e252..1fc419d0d16 100644 --- a/apps/browser/src/_locales/zh_CN/messages.json +++ b/apps/browser/src/_locales/zh_CN/messages.json @@ -263,7 +263,7 @@ "message": "单词分隔符" }, "capitalize": { - "message": "大写", + "message": "首字母大写", "description": "Make the first letter of a work uppercase." }, "includeNumber": { @@ -338,6 +338,9 @@ "other": { "message": "其他" }, + "unlockMethodNeededToChangeTimeoutActionDesc": { + "message": "设置一个解锁方式以更改您的密码库超时动作。" + }, "rateExtension": { "message": "为本扩展打分" }, @@ -357,7 +360,7 @@ "message": "解锁" }, "loggedInAsOn": { - "message": "以 $EMAIL$ 在 $HOSTNAME$ 上登录。", + "message": "已在 $HOSTNAME$ 上以 $EMAIL$ 身份登录。", "placeholders": { "email": { "content": "$1", @@ -630,6 +633,12 @@ "notificationChangeSave": { "message": "更新" }, + "notificationUnlockDesc": { + "message": "解锁 Bitwarden 密码库以完成自动填充请求。" + }, + "notificationUnlock": { + "message": "解锁​​​​" + }, "enableContextMenuItem": { "message": "显示上下文菜单选项" }, @@ -786,8 +795,8 @@ "ppremiumSignUpStorage": { "message": "1 GB 文件附件加密存储。" }, - "ppremiumSignUpTwoStep": { - "message": "额外的两步登录选项,如 YubiKey、FIDO U2F 和 Duo。" + "premiumSignUpTwoStepOptions": { + "message": "Proprietary two-step login options such as YubiKey and Duo." }, "ppremiumSignUpReports": { "message": "密码健康、账户体检以及数据泄露报告,保障您的密码库安全。" @@ -1440,9 +1449,6 @@ "restoreItem": { "message": "恢复项目" }, - "restoreItemConfirmation": { - "message": "您确定要恢复此项目吗?" - }, "restoredItem": { "message": "项目已恢复" }, @@ -1599,6 +1605,12 @@ "biometricsNotSupportedDesc": { "message": "此设备不支持浏览器生物识别。" }, + "biometricsFailedTitle": { + "message": "生物识别失败" + }, + "biometricsFailedDesc": { + "message": "生物识别无法完成,请尝试使用主密码或注销。如果仍无法解决,请联系 Bitwarden 支持。" + }, "nativeMessaginPermissionErrorTitle": { "message": "未提供权限" }, @@ -2140,7 +2152,7 @@ "notificationSentDevice": { "message": "通知已发送到您的设备。" }, - "logInInitiated": { + "loginInitiated": { "message": "登录已发起" }, "exposedMasterPassword": { @@ -2221,19 +2233,42 @@ } } }, - "region": { - "message": "区域" + "loggingInOn": { + "message": "登录到" }, "opensInANewWindow": { "message": "在新窗口中打开" }, + "deviceApprovalRequired": { + "message": "需要设备批准。请在下面选择一个批准选项:" + }, + "rememberThisDevice": { + "message": "记住此设备" + }, + "uncheckIfPublicDevice": { + "message": "若使用公共设备,请取消勾选" + }, + "approveFromYourOtherDevice": { + "message": "从您的其他设备批准" + }, + "requestAdminApproval": { + "message": "请求管理员批准" + }, + "approveWithMasterPassword": { + "message": "使用主密码批准" + }, + "ssoIdentifierRequired": { + "message": "必须填写组织 SSO 标识符。" + }, "eu": { "message": "欧盟", "description": "European Union" }, - "us": { - "message": "美国", - "description": "United States" + "usDomain": { + "message": "bitwarden.com" + }, + "euDomain": { + "message": "bitwarden.eu" }, "accessDenied": { "message": "访问被拒绝。您没有权限查看此页面。" @@ -2243,5 +2278,133 @@ }, "display": { "message": "显示" + }, + "accountSuccessfullyCreated": { + "message": "账户已成功创建!" + }, + "adminApprovalRequested": { + "message": "已请求管理员批准" + }, + "adminApprovalRequestSentToAdmins": { + "message": "您的请求已发送给您的管理员。" + }, + "youWillBeNotifiedOnceApproved": { + "message": "批准后,您将收到通知。" + }, + "troubleLoggingIn": { + "message": "登录遇到问题?" + }, + "loginApproved": { + "message": "登录已批准" + }, + "userEmailMissing": { + "message": "缺少用户电子邮件" + }, + "deviceTrusted": { + "message": "设备已信任" + }, + "inputRequired": { + "message": "必须输入内容。" + }, + "required": { + "message": "必填" + }, + "search": { + "message": "搜索" + }, + "inputMinLength": { + "message": "至少输入 $COUNT$ 个字符。", + "placeholders": { + "count": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxLength": { + "message": "输入长度不能超过 $COUNT$ 个字符。", + "placeholders": { + "count": { + "content": "$1", + "example": "20" + } + } + }, + "inputForbiddenCharacters": { + "message": "以下字符不被允许:$CHARACTERS$", + "placeholders": { + "characters": { + "content": "$1", + "example": "@, #, $, %" + } + } + }, + "inputMinValue": { + "message": "输入的值不能低于 $MIN$。", + "placeholders": { + "min": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxValue": { + "message": "输入的值不能超过 $MAX$。", + "placeholders": { + "max": { + "content": "$1", + "example": "100" + } + } + }, + "multipleInputEmails": { + "message": "一个或多个电子邮件地址无效" + }, + "inputTrimValidator": { + "message": "输入不能只包含空格。", + "description": "Notification to inform the user that a form's input can't contain only whitespace." + }, + "inputEmail": { + "message": "输入的不是电子邮件地址。" + }, + "fieldsNeedAttention": { + "message": "上面的 $COUNT$ 个字段需要您注意。", + "placeholders": { + "count": { + "content": "$1", + "example": "4" + } + } + }, + "selectPlaceholder": { + "message": "-- 选择 --" + }, + "multiSelectPlaceholder": { + "message": "-- 输入以筛选 --" + }, + "multiSelectLoading": { + "message": "正在获取选项..." + }, + "multiSelectNotFound": { + "message": "未找到任何条目" + }, + "multiSelectClearAll": { + "message": "清除全部" + }, + "plusNMore": { + "message": "+ $QUANTITY$ more", + "placeholders": { + "quantity": { + "content": "$1", + "example": "5" + } + } + }, + "submenu": { + "message": "子菜单" + }, + "toggleCollapse": { + "message": "切换折叠", + "description": "Toggling an expand/collapse state." } } diff --git a/apps/browser/src/_locales/zh_TW/messages.json b/apps/browser/src/_locales/zh_TW/messages.json index e2070bdd316..68eb917021e 100644 --- a/apps/browser/src/_locales/zh_TW/messages.json +++ b/apps/browser/src/_locales/zh_TW/messages.json @@ -338,6 +338,9 @@ "other": { "message": "其他" }, + "unlockMethodNeededToChangeTimeoutActionDesc": { + "message": "Set up an unlock method to change your vault timeout action." + }, "rateExtension": { "message": "為本套件評分" }, @@ -630,6 +633,12 @@ "notificationChangeSave": { "message": "更新" }, + "notificationUnlockDesc": { + "message": "Unlock your Bitwarden vault to complete the auto-fill request." + }, + "notificationUnlock": { + "message": "Unlock" + }, "enableContextMenuItem": { "message": "顯示內容選單選項" }, @@ -786,8 +795,8 @@ "ppremiumSignUpStorage": { "message": "用於檔案附件的 1 GB 加密儲存空間。" }, - "ppremiumSignUpTwoStep": { - "message": "YubiKey、FIDO U2F 和 Duo 等額外的兩步驟登入選項。" + "premiumSignUpTwoStepOptions": { + "message": "Proprietary two-step login options such as YubiKey and Duo." }, "ppremiumSignUpReports": { "message": "密碼健康度檢查、提供帳戶體檢以及資料外洩報告,以保障您的密碼庫安全。" @@ -1440,9 +1449,6 @@ "restoreItem": { "message": "還原項目" }, - "restoreItemConfirmation": { - "message": "您確定要還原此項目嗎?" - }, "restoredItem": { "message": "項目已還原" }, @@ -1599,6 +1605,12 @@ "biometricsNotSupportedDesc": { "message": "此裝置不支援瀏覽器生物特徵辨識。" }, + "biometricsFailedTitle": { + "message": "Biometrics failed" + }, + "biometricsFailedDesc": { + "message": "Biometrics cannot be completed, consider using a master password or logging out. If this persists, please contact Bitwarden support." + }, "nativeMessaginPermissionErrorTitle": { "message": "未提供權限" }, @@ -2140,8 +2152,8 @@ "notificationSentDevice": { "message": "已傳送通知至您的裝置。" }, - "logInInitiated": { - "message": "登入已起始" + "loginInitiated": { + "message": "Login initiated" }, "exposedMasterPassword": { "message": "已暴露的主密碼" @@ -2221,19 +2233,42 @@ } } }, - "region": { - "message": "區域" + "loggingInOn": { + "message": "Logging in on" }, "opensInANewWindow": { "message": "在新視窗開啟" }, + "deviceApprovalRequired": { + "message": "Device approval required. Select an approval option below:" + }, + "rememberThisDevice": { + "message": "Remember this device" + }, + "uncheckIfPublicDevice": { + "message": "Uncheck if using a public device" + }, + "approveFromYourOtherDevice": { + "message": "Approve from your other device" + }, + "requestAdminApproval": { + "message": "Request admin approval" + }, + "approveWithMasterPassword": { + "message": "Approve with master password" + }, + "ssoIdentifierRequired": { + "message": "Organization SSO identifier is required." + }, "eu": { - "message": "歐洲 (EU)", + "message": "EU", "description": "European Union" }, - "us": { - "message": "美國 (US)", - "description": "United States" + "usDomain": { + "message": "bitwarden.com" + }, + "euDomain": { + "message": "bitwarden.eu" }, "accessDenied": { "message": "拒絕存取。您沒有檢視此頁面的權限。" @@ -2243,5 +2278,133 @@ }, "display": { "message": "顯示" + }, + "accountSuccessfullyCreated": { + "message": "Account successfully created!" + }, + "adminApprovalRequested": { + "message": "Admin approval requested" + }, + "adminApprovalRequestSentToAdmins": { + "message": "Your request has been sent to your admin." + }, + "youWillBeNotifiedOnceApproved": { + "message": "You will be notified once approved." + }, + "troubleLoggingIn": { + "message": "Trouble logging in?" + }, + "loginApproved": { + "message": "Login approved" + }, + "userEmailMissing": { + "message": "User email missing" + }, + "deviceTrusted": { + "message": "Device trusted" + }, + "inputRequired": { + "message": "Input is required." + }, + "required": { + "message": "required" + }, + "search": { + "message": "Search" + }, + "inputMinLength": { + "message": "Input must be at least $COUNT$ characters long.", + "placeholders": { + "count": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxLength": { + "message": "Input must not exceed $COUNT$ characters in length.", + "placeholders": { + "count": { + "content": "$1", + "example": "20" + } + } + }, + "inputForbiddenCharacters": { + "message": "The following characters are not allowed: $CHARACTERS$", + "placeholders": { + "characters": { + "content": "$1", + "example": "@, #, $, %" + } + } + }, + "inputMinValue": { + "message": "Input value must be at least $MIN$.", + "placeholders": { + "min": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxValue": { + "message": "Input value must not exceed $MAX$.", + "placeholders": { + "max": { + "content": "$1", + "example": "100" + } + } + }, + "multipleInputEmails": { + "message": "1 or more emails are invalid" + }, + "inputTrimValidator": { + "message": "Input must not contain only whitespace.", + "description": "Notification to inform the user that a form's input can't contain only whitespace." + }, + "inputEmail": { + "message": "Input is not an email address." + }, + "fieldsNeedAttention": { + "message": "$COUNT$ field(s) above need your attention.", + "placeholders": { + "count": { + "content": "$1", + "example": "4" + } + } + }, + "selectPlaceholder": { + "message": "-- Select --" + }, + "multiSelectPlaceholder": { + "message": "-- Type to filter --" + }, + "multiSelectLoading": { + "message": "Retrieving options..." + }, + "multiSelectNotFound": { + "message": "No items found" + }, + "multiSelectClearAll": { + "message": "Clear all" + }, + "plusNMore": { + "message": "+ $QUANTITY$ more", + "placeholders": { + "quantity": { + "content": "$1", + "example": "5" + } + } + }, + "submenu": { + "message": "Submenu" + }, + "toggleCollapse": { + "message": "Toggle collapse", + "description": "Toggling an expand/collapse state." } } diff --git a/apps/browser/src/auth/background/service-factories/auth-request-crypto-service.factory.ts b/apps/browser/src/auth/background/service-factories/auth-request-crypto-service.factory.ts new file mode 100644 index 00000000000..e1757f98129 --- /dev/null +++ b/apps/browser/src/auth/background/service-factories/auth-request-crypto-service.factory.ts @@ -0,0 +1,29 @@ +import { AuthRequestCryptoServiceAbstraction } from "@bitwarden/common/auth/abstractions/auth-request-crypto.service.abstraction"; +import { AuthRequestCryptoServiceImplementation } from "@bitwarden/common/auth/services/auth-request-crypto.service.implementation"; + +import { + CryptoServiceInitOptions, + cryptoServiceFactory, +} from "../../../platform/background/service-factories/crypto-service.factory"; +import { + CachedServices, + FactoryOptions, + factory, +} from "../../../platform/background/service-factories/factory-options"; + +type AuthRequestCryptoServiceFactoryOptions = FactoryOptions; + +export type AuthRequestCryptoServiceInitOptions = AuthRequestCryptoServiceFactoryOptions & + CryptoServiceInitOptions; + +export function authRequestCryptoServiceFactory( + cache: { authRequestCryptoService?: AuthRequestCryptoServiceAbstraction } & CachedServices, + opts: AuthRequestCryptoServiceInitOptions +): Promise { + return factory( + cache, + "authRequestCryptoService", + opts, + async () => new AuthRequestCryptoServiceImplementation(await cryptoServiceFactory(cache, opts)) + ); +} diff --git a/apps/browser/src/auth/background/service-factories/auth-service.factory.ts b/apps/browser/src/auth/background/service-factories/auth-service.factory.ts index 5612cedb91c..6aaeb476369 100644 --- a/apps/browser/src/auth/background/service-factories/auth-service.factory.ts +++ b/apps/browser/src/auth/background/service-factories/auth-service.factory.ts @@ -52,6 +52,14 @@ import { PasswordStrengthServiceInitOptions, } from "../../../tools/background/service_factories/password-strength-service.factory"; +import { + authRequestCryptoServiceFactory, + AuthRequestCryptoServiceInitOptions, +} from "./auth-request-crypto-service.factory"; +import { + deviceTrustCryptoServiceFactory, + DeviceTrustCryptoServiceInitOptions, +} from "./device-trust-crypto-service.factory"; import { keyConnectorServiceFactory, KeyConnectorServiceInitOptions, @@ -75,7 +83,9 @@ export type AuthServiceInitOptions = AuthServiceFactoyOptions & I18nServiceInitOptions & EncryptServiceInitOptions & PolicyServiceInitOptions & - PasswordStrengthServiceInitOptions; + PasswordStrengthServiceInitOptions & + DeviceTrustCryptoServiceInitOptions & + AuthRequestCryptoServiceInitOptions; export function authServiceFactory( cache: { authService?: AbstractAuthService } & CachedServices, @@ -101,7 +111,9 @@ export function authServiceFactory( await i18nServiceFactory(cache, opts), await encryptServiceFactory(cache, opts), await passwordStrengthServiceFactory(cache, opts), - await policyServiceFactory(cache, opts) + await policyServiceFactory(cache, opts), + await deviceTrustCryptoServiceFactory(cache, opts), + await authRequestCryptoServiceFactory(cache, opts) ) ); } diff --git a/apps/browser/src/auth/background/service-factories/device-trust-crypto-service.factory.ts b/apps/browser/src/auth/background/service-factories/device-trust-crypto-service.factory.ts new file mode 100644 index 00000000000..430d50fea75 --- /dev/null +++ b/apps/browser/src/auth/background/service-factories/device-trust-crypto-service.factory.ts @@ -0,0 +1,74 @@ +import { DeviceTrustCryptoServiceAbstraction } from "@bitwarden/common/auth/abstractions/device-trust-crypto.service.abstraction"; +import { DeviceTrustCryptoService } from "@bitwarden/common/auth/services/device-trust-crypto.service.implementation"; + +import { + DevicesApiServiceInitOptions, + devicesApiServiceFactory, +} from "../../../background/service-factories/devices-api-service.factory"; +import { + AppIdServiceInitOptions, + appIdServiceFactory, +} from "../../../platform/background/service-factories/app-id-service.factory"; +import { + CryptoFunctionServiceInitOptions, + cryptoFunctionServiceFactory, +} from "../../../platform/background/service-factories/crypto-function-service.factory"; +import { + CryptoServiceInitOptions, + cryptoServiceFactory, +} from "../../../platform/background/service-factories/crypto-service.factory"; +import { + EncryptServiceInitOptions, + encryptServiceFactory, +} from "../../../platform/background/service-factories/encrypt-service.factory"; +import { + CachedServices, + FactoryOptions, + factory, +} from "../../../platform/background/service-factories/factory-options"; +import { + I18nServiceInitOptions, + i18nServiceFactory, +} from "../../../platform/background/service-factories/i18n-service.factory"; +import { + PlatformUtilsServiceInitOptions, + platformUtilsServiceFactory, +} from "../../../platform/background/service-factories/platform-utils-service.factory"; +import { + StateServiceInitOptions, + stateServiceFactory, +} from "../../../platform/background/service-factories/state-service.factory"; + +type DeviceTrustCryptoServiceFactoryOptions = FactoryOptions; + +export type DeviceTrustCryptoServiceInitOptions = DeviceTrustCryptoServiceFactoryOptions & + CryptoFunctionServiceInitOptions & + CryptoServiceInitOptions & + EncryptServiceInitOptions & + StateServiceInitOptions & + AppIdServiceInitOptions & + DevicesApiServiceInitOptions & + I18nServiceInitOptions & + PlatformUtilsServiceInitOptions; + +export function deviceTrustCryptoServiceFactory( + cache: { deviceTrustCryptoService?: DeviceTrustCryptoServiceAbstraction } & CachedServices, + opts: DeviceTrustCryptoServiceInitOptions +): Promise { + return factory( + cache, + "deviceTrustCryptoService", + opts, + async () => + new DeviceTrustCryptoService( + await cryptoFunctionServiceFactory(cache, opts), + await cryptoServiceFactory(cache, opts), + await encryptServiceFactory(cache, opts), + await stateServiceFactory(cache, opts), + await appIdServiceFactory(cache, opts), + await devicesApiServiceFactory(cache, opts), + await i18nServiceFactory(cache, opts), + await platformUtilsServiceFactory(cache, opts) + ) + ); +} diff --git a/apps/browser/src/auth/background/service-factories/user-verification-api-service.factory.ts b/apps/browser/src/auth/background/service-factories/user-verification-api-service.factory.ts new file mode 100644 index 00000000000..01bfb0f13cb --- /dev/null +++ b/apps/browser/src/auth/background/service-factories/user-verification-api-service.factory.ts @@ -0,0 +1,29 @@ +import { UserVerificationApiServiceAbstraction } from "@bitwarden/common/auth/abstractions/user-verification/user-verification-api.service.abstraction"; +import { UserVerificationApiService } from "@bitwarden/common/auth/services/user-verification/user-verification-api.service"; + +import { + ApiServiceInitOptions, + apiServiceFactory, +} from "../../../platform/background/service-factories/api-service.factory"; +import { + FactoryOptions, + CachedServices, + factory, +} from "../../../platform/background/service-factories/factory-options"; + +type UserVerificationApiServiceFactoryOptions = FactoryOptions; + +export type UserVerificationApiServiceInitOptions = UserVerificationApiServiceFactoryOptions & + ApiServiceInitOptions; + +export function userVerificationApiServiceFactory( + cache: { userVerificationApiService?: UserVerificationApiServiceAbstraction } & CachedServices, + opts: UserVerificationApiServiceInitOptions +): Promise { + return factory( + cache, + "userVerificationApiService", + opts, + async () => new UserVerificationApiService(await apiServiceFactory(cache, opts)) + ); +} diff --git a/apps/browser/src/auth/background/service-factories/user-verification-service.factory.ts b/apps/browser/src/auth/background/service-factories/user-verification-service.factory.ts new file mode 100644 index 00000000000..79d327c9485 --- /dev/null +++ b/apps/browser/src/auth/background/service-factories/user-verification-service.factory.ts @@ -0,0 +1,51 @@ +import { UserVerificationService as AbstractUserVerificationService } from "@bitwarden/common/auth/abstractions/user-verification/user-verification.service.abstraction"; +import { UserVerificationService } from "@bitwarden/common/auth/services/user-verification/user-verification.service"; + +import { + CryptoServiceInitOptions, + cryptoServiceFactory, +} from "../../../platform/background/service-factories/crypto-service.factory"; +import { + FactoryOptions, + CachedServices, + factory, +} from "../../../platform/background/service-factories/factory-options"; +import { + I18nServiceInitOptions, + i18nServiceFactory, +} from "../../../platform/background/service-factories/i18n-service.factory"; +import { + StateServiceInitOptions, + stateServiceFactory, +} from "../../../platform/background/service-factories/state-service.factory"; + +import { + UserVerificationApiServiceInitOptions, + userVerificationApiServiceFactory, +} from "./user-verification-api-service.factory"; + +type UserVerificationServiceFactoryOptions = FactoryOptions; + +export type UserVerificationServiceInitOptions = UserVerificationServiceFactoryOptions & + StateServiceInitOptions & + CryptoServiceInitOptions & + I18nServiceInitOptions & + UserVerificationApiServiceInitOptions; + +export function userVerificationServiceFactory( + cache: { userVerificationService?: AbstractUserVerificationService } & CachedServices, + opts: UserVerificationServiceInitOptions +): Promise { + return factory( + cache, + "userVerificationService", + opts, + async () => + new UserVerificationService( + await stateServiceFactory(cache, opts), + await cryptoServiceFactory(cache, opts), + await i18nServiceFactory(cache, opts), + await userVerificationApiServiceFactory(cache, opts) + ) + ); +} diff --git a/apps/browser/src/auth/popup/lock.component.html b/apps/browser/src/auth/popup/lock.component.html index cf964c15646..e787e0106d1 100644 --- a/apps/browser/src/auth/popup/lock.component.html +++ b/apps/browser/src/auth/popup/lock.component.html @@ -5,14 +5,20 @@ {{ "verifyIdentity" | i18n }}
- +
-
-
+
+
-
+
{ - document.getElementById(this.pinLock ? "pin" : "masterPassword").focus(); + document.getElementById(this.pinEnabled ? "pin" : "masterPassword")?.focus(); if ( this.biometricLock && !disableAutoBiometricsPrompt && @@ -93,7 +96,7 @@ export class LockComponent extends BaseLockComponent { }, 100); } - async unlockBiometric(): Promise { + override async unlockBiometric(): Promise { if (!this.biometricLock) { return; } diff --git a/apps/browser/src/auth/popup/login-decryption-options/login-decryption-options.component.html b/apps/browser/src/auth/popup/login-decryption-options/login-decryption-options.component.html new file mode 100644 index 00000000000..32e3ea0c598 --- /dev/null +++ b/apps/browser/src/auth/popup/login-decryption-options/login-decryption-options.component.html @@ -0,0 +1,108 @@ +
+
+

+ {{ "loginInitiated" | i18n }} +

+
+ + +
diff --git a/apps/browser/src/auth/popup/login-decryption-options/login-decryption-options.component.ts b/apps/browser/src/auth/popup/login-decryption-options/login-decryption-options.component.ts new file mode 100644 index 00000000000..7fac9a42b06 --- /dev/null +++ b/apps/browser/src/auth/popup/login-decryption-options/login-decryption-options.component.ts @@ -0,0 +1,18 @@ +import { Component } from "@angular/core"; + +import { BaseLoginDecryptionOptionsComponent } from "@bitwarden/angular/auth/components/base-login-decryption-options.component"; + +@Component({ + selector: "browser-login-decryption-options", + templateUrl: "login-decryption-options.component.html", +}) +export class LoginDecryptionOptionsComponent extends BaseLoginDecryptionOptionsComponent { + override async createUser(): Promise { + try { + await super.createUser(); + await this.router.navigate(["/tabs/vault"]); + } catch (error) { + this.validationService.showError(error); + } + } +} diff --git a/apps/browser/src/auth/popup/login-with-device.component.html b/apps/browser/src/auth/popup/login-with-device.component.html index d794b7d212b..127f7ec96fe 100644 --- a/apps/browser/src/auth/popup/login-with-device.component.html +++ b/apps/browser/src/auth/popup/login-with-device.component.html @@ -5,32 +5,57 @@
diff --git a/apps/browser/src/auth/popup/login-with-device.component.ts b/apps/browser/src/auth/popup/login-with-device.component.ts index cf0e57b5ee5..f3a1dfffaa0 100644 --- a/apps/browser/src/auth/popup/login-with-device.component.ts +++ b/apps/browser/src/auth/popup/login-with-device.component.ts @@ -1,10 +1,13 @@ +import { Location } from "@angular/common"; import { Component, OnDestroy, OnInit } from "@angular/core"; import { Router } from "@angular/router"; import { LoginWithDeviceComponent as BaseLoginWithDeviceComponent } from "@bitwarden/angular/auth/components/login-with-device.component"; import { AnonymousHubService } from "@bitwarden/common/abstractions/anonymousHub.service"; import { ApiService } from "@bitwarden/common/abstractions/api.service"; +import { AuthRequestCryptoServiceAbstraction } from "@bitwarden/common/auth/abstractions/auth-request-crypto.service.abstraction"; import { AuthService } from "@bitwarden/common/auth/abstractions/auth.service"; +import { DeviceTrustCryptoServiceAbstraction } from "@bitwarden/common/auth/abstractions/device-trust-crypto.service.abstraction"; import { LoginService } from "@bitwarden/common/auth/abstractions/login.service"; import { AppIdService } from "@bitwarden/common/platform/abstractions/app-id.service"; import { CryptoFunctionService } from "@bitwarden/common/platform/abstractions/crypto-function.service"; @@ -42,7 +45,10 @@ export class LoginWithDeviceComponent validationService: ValidationService, stateService: StateService, loginService: LoginService, - syncService: SyncService + syncService: SyncService, + deviceTrustCryptoService: DeviceTrustCryptoServiceAbstraction, + authReqCryptoService: AuthRequestCryptoServiceAbstraction, + private location: Location ) { super( router, @@ -59,10 +65,16 @@ export class LoginWithDeviceComponent anonymousHubService, validationService, stateService, - loginService + loginService, + deviceTrustCryptoService, + authReqCryptoService ); super.onSuccessfulLogin = async () => { await syncService.fullSync(true); }; } + + protected back() { + this.location.back(); + } } diff --git a/apps/browser/src/auth/popup/login.component.ts b/apps/browser/src/auth/popup/login.component.ts index 776b792fa1d..d9b789e4d81 100644 --- a/apps/browser/src/auth/popup/login.component.ts +++ b/apps/browser/src/auth/popup/login.component.ts @@ -4,8 +4,8 @@ import { ActivatedRoute, Router } from "@angular/router"; import { LoginComponent as BaseLoginComponent } from "@bitwarden/angular/auth/components/login.component"; import { FormValidationErrorsService } from "@bitwarden/angular/platform/abstractions/form-validation-errors.service"; -import { DevicesApiServiceAbstraction } from "@bitwarden/common/abstractions/devices/devices-api.service.abstraction"; import { AuthService } from "@bitwarden/common/auth/abstractions/auth.service"; +import { DevicesApiServiceAbstraction } from "@bitwarden/common/auth/abstractions/devices-api.service.abstraction"; import { LoginService } from "@bitwarden/common/auth/abstractions/login.service"; import { AppIdService } from "@bitwarden/common/platform/abstractions/app-id.service"; import { CryptoFunctionService } from "@bitwarden/common/platform/abstractions/crypto-function.service"; diff --git a/apps/browser/src/auth/popup/register.component.ts b/apps/browser/src/auth/popup/register.component.ts index ad7a9e1cc68..1599af2216c 100644 --- a/apps/browser/src/auth/popup/register.component.ts +++ b/apps/browser/src/auth/popup/register.component.ts @@ -4,7 +4,6 @@ import { Router } from "@angular/router"; import { RegisterComponent as BaseRegisterComponent } from "@bitwarden/angular/components/register.component"; import { FormValidationErrorsService } from "@bitwarden/angular/platform/abstractions/form-validation-errors.service"; -import { DialogServiceAbstraction } from "@bitwarden/angular/services/dialog"; import { ApiService } from "@bitwarden/common/abstractions/api.service"; import { AuditService } from "@bitwarden/common/abstractions/audit.service"; import { AuthService } from "@bitwarden/common/auth/abstractions/auth.service"; @@ -15,6 +14,7 @@ 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 { PasswordGenerationServiceAbstraction } from "@bitwarden/common/tools/generator/password"; +import { DialogService } from "@bitwarden/components"; @Component({ selector: "app-register", @@ -38,7 +38,7 @@ export class RegisterComponent extends BaseRegisterComponent { environmentService: EnvironmentService, logService: LogService, auditService: AuditService, - dialogService: DialogServiceAbstraction + dialogService: DialogService ) { super( formValidationErrorService, diff --git a/apps/browser/src/auth/popup/services/index.ts b/apps/browser/src/auth/popup/services/index.ts index 06bfe0009bd..63563f61fd9 100644 --- a/apps/browser/src/auth/popup/services/index.ts +++ b/apps/browser/src/auth/popup/services/index.ts @@ -1,2 +1 @@ -export { LockGuardService } from "./lock-guard.service"; export { UnauthGuardService } from "./unauth-guard.service"; diff --git a/apps/browser/src/auth/popup/services/lock-guard.service.ts b/apps/browser/src/auth/popup/services/lock-guard.service.ts deleted file mode 100644 index ef6ebc73aca..00000000000 --- a/apps/browser/src/auth/popup/services/lock-guard.service.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { Injectable } from "@angular/core"; - -import { LockGuard as BaseLockGuardService } from "@bitwarden/angular/auth/guards/lock.guard"; - -@Injectable() -export class LockGuardService extends BaseLockGuardService { - protected homepage = "tabs/current"; -} diff --git a/apps/browser/src/auth/popup/services/unauth-guard.service.ts b/apps/browser/src/auth/popup/services/unauth-guard.service.ts index 4aa700b5568..062239a7d36 100644 --- a/apps/browser/src/auth/popup/services/unauth-guard.service.ts +++ b/apps/browser/src/auth/popup/services/unauth-guard.service.ts @@ -1,6 +1,6 @@ import { Injectable } from "@angular/core"; -import { UnauthGuard as BaseUnauthGuardService } from "@bitwarden/angular/auth/guards/unauth.guard"; +import { UnauthGuard as BaseUnauthGuardService } from "@bitwarden/angular/auth/guards"; @Injectable() export class UnauthGuardService extends BaseUnauthGuardService { diff --git a/apps/browser/src/auth/popup/set-password.component.ts b/apps/browser/src/auth/popup/set-password.component.ts index 83ec3572737..73b092f32e0 100644 --- a/apps/browser/src/auth/popup/set-password.component.ts +++ b/apps/browser/src/auth/popup/set-password.component.ts @@ -2,7 +2,6 @@ import { Component } from "@angular/core"; import { ActivatedRoute, Router } from "@angular/router"; import { SetPasswordComponent as BaseSetPasswordComponent } from "@bitwarden/angular/components/set-password.component"; -import { DialogServiceAbstraction } from "@bitwarden/angular/services/dialog"; import { ApiService } from "@bitwarden/common/abstractions/api.service"; import { OrganizationUserService } from "@bitwarden/common/abstractions/organization-user/organization-user.service"; import { OrganizationApiServiceAbstraction } from "@bitwarden/common/admin-console/abstractions/organization/organization-api.service.abstraction"; @@ -15,6 +14,7 @@ import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/pl import { StateService } from "@bitwarden/common/platform/abstractions/state.service"; import { PasswordGenerationServiceAbstraction } from "@bitwarden/common/tools/generator/password"; import { SyncService } from "@bitwarden/common/vault/abstractions/sync/sync.service.abstraction"; +import { DialogService } from "@bitwarden/components"; @Component({ selector: "app-set-password", @@ -36,7 +36,7 @@ export class SetPasswordComponent extends BaseSetPasswordComponent { route: ActivatedRoute, organizationApiService: OrganizationApiServiceAbstraction, organizationUserService: OrganizationUserService, - dialogService: DialogServiceAbstraction + dialogService: DialogService ) { super( i18nService, diff --git a/apps/browser/src/auth/popup/sso.component.ts b/apps/browser/src/auth/popup/sso.component.ts index 2214e91687a..9d04701680e 100644 --- a/apps/browser/src/auth/popup/sso.component.ts +++ b/apps/browser/src/auth/popup/sso.component.ts @@ -1,11 +1,12 @@ -import { Component } from "@angular/core"; +import { Component, Inject } from "@angular/core"; import { ActivatedRoute, Router } from "@angular/router"; import { SsoComponent as BaseSsoComponent } from "@bitwarden/angular/auth/components/sso.component"; +import { WINDOW } from "@bitwarden/angular/services/injection-tokens"; import { ApiService } from "@bitwarden/common/abstractions/api.service"; -import { VaultTimeoutService } from "@bitwarden/common/abstractions/vaultTimeout/vaultTimeout.service"; import { AuthService } from "@bitwarden/common/auth/abstractions/auth.service"; import { AuthenticationStatus } from "@bitwarden/common/auth/enums/authentication-status"; +import { ConfigServiceAbstraction } from "@bitwarden/common/platform/abstractions/config/config.service.abstraction"; import { CryptoFunctionService } from "@bitwarden/common/platform/abstractions/crypto-function.service"; import { EnvironmentService } from "@bitwarden/common/platform/abstractions/environment.service"; import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; @@ -35,7 +36,8 @@ export class SsoComponent extends BaseSsoComponent { syncService: SyncService, environmentService: EnvironmentService, logService: LogService, - private vaultTimeoutService: VaultTimeoutService + configService: ConfigServiceAbstraction, + @Inject(WINDOW) private win: Window ) { super( authService, @@ -48,7 +50,8 @@ export class SsoComponent extends BaseSsoComponent { cryptoFunctionService, environmentService, passwordGenerationService, - logService + logService, + configService ); const url = this.environmentService.getWebVaultUrl(); @@ -57,15 +60,22 @@ export class SsoComponent extends BaseSsoComponent { this.clientId = "browser"; super.onSuccessfulLogin = async () => { - await syncService.fullSync(true); + syncService.fullSync(true); // If the vault is unlocked then this will clear keys from memory, which we don't want to do if ((await this.authService.getAuthStatus()) !== AuthenticationStatus.Unlocked) { BrowserApi.reloadOpenWindows(); } - const thisWindow = window.open("", "_self"); - thisWindow.close(); + this.win.close(); + }; + + super.onSuccessfulLoginTde = async () => { + syncService.fullSync(true); + }; + + super.onSuccessfulLoginTdeNavigate = async () => { + this.win.close(); }; } } diff --git a/apps/browser/src/auth/popup/two-factor.component.ts b/apps/browser/src/auth/popup/two-factor.component.ts index 21a2bd42f85..c0af31d25e5 100644 --- a/apps/browser/src/auth/popup/two-factor.component.ts +++ b/apps/browser/src/auth/popup/two-factor.component.ts @@ -1,9 +1,9 @@ -import { Component } from "@angular/core"; +import { Component, Inject } from "@angular/core"; import { ActivatedRoute, Router } from "@angular/router"; import { first } from "rxjs/operators"; import { TwoFactorComponent as BaseTwoFactorComponent } from "@bitwarden/angular/auth/components/two-factor.component"; -import { DialogServiceAbstraction, SimpleDialogType } from "@bitwarden/angular/services/dialog"; +import { WINDOW } from "@bitwarden/angular/services/injection-tokens"; import { ApiService } from "@bitwarden/common/abstractions/api.service"; import { AuthService } from "@bitwarden/common/auth/abstractions/auth.service"; import { LoginService } from "@bitwarden/common/auth/abstractions/login.service"; @@ -11,6 +11,7 @@ import { TwoFactorService } from "@bitwarden/common/auth/abstractions/two-factor import { TwoFactorProviderType } from "@bitwarden/common/auth/enums/two-factor-provider-type"; import { AppIdService } from "@bitwarden/common/platform/abstractions/app-id.service"; import { BroadcasterService } from "@bitwarden/common/platform/abstractions/broadcaster.service"; +import { ConfigServiceAbstraction } from "@bitwarden/common/platform/abstractions/config/config.service.abstraction"; import { EnvironmentService } from "@bitwarden/common/platform/abstractions/environment.service"; import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; import { LogService } from "@bitwarden/common/platform/abstractions/log.service"; @@ -18,6 +19,7 @@ import { MessagingService } from "@bitwarden/common/platform/abstractions/messag import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service"; import { StateService } from "@bitwarden/common/platform/abstractions/state.service"; import { SyncService } from "@bitwarden/common/vault/abstractions/sync/sync.service.abstraction"; +import { DialogService } from "@bitwarden/components"; import { BrowserApi } from "../../platform/browser/browser-api"; import { PopupUtilsService } from "../../popup/services/popup-utils.service"; @@ -48,7 +50,9 @@ export class TwoFactorComponent extends BaseTwoFactorComponent { twoFactorService: TwoFactorService, appIdService: AppIdService, loginService: LoginService, - private dialogService: DialogServiceAbstraction + configService: ConfigServiceAbstraction, + private dialogService: DialogService, + @Inject(WINDOW) protected win: Window ) { super( authService, @@ -56,19 +60,28 @@ export class TwoFactorComponent extends BaseTwoFactorComponent { i18nService, apiService, platformUtilsService, - window, + win, environmentService, stateService, route, logService, twoFactorService, appIdService, - loginService + loginService, + configService ); - super.onSuccessfulLogin = () => { - this.loginService.clearValues(); - return syncService.fullSync(true); + super.onSuccessfulLogin = async () => { + syncService.fullSync(true); }; + + super.onSuccessfulLoginTde = async () => { + syncService.fullSync(true); + }; + + super.onSuccessfulLoginTdeNavigate = async () => { + this.win.close(); + }; + super.successRoute = "/tabs/vault"; // FIXME: Chromium 110 has broken WebAuthn support in extensions via an iframe this.webAuthnNewTab = true; @@ -107,7 +120,7 @@ export class TwoFactorComponent extends BaseTwoFactorComponent { const confirmed = await this.dialogService.openSimpleDialog({ title: { key: "warning" }, content: { key: "popup2faCloseMessage" }, - type: SimpleDialogType.WARNING, + type: "warning", }); if (confirmed) { this.popupUtilsService.popOut(window); @@ -117,11 +130,11 @@ export class TwoFactorComponent extends BaseTwoFactorComponent { // eslint-disable-next-line rxjs-angular/prefer-takeuntil, rxjs/no-async-subscribe this.route.queryParams.pipe(first()).subscribe(async (qParams) => { if (qParams.sso === "true") { - super.onSuccessfulLogin = () => { + super.onSuccessfulLogin = async () => { // This is not awaited so we don't pause the application while the sync is happening. // This call is executed by the service that lives in the background script so it will continue // the sync even if this tab closes. - const syncPromise = this.syncService.fullSync(true); + this.syncService.fullSync(true); // Force sidebars (FF && Opera) to reload while exempting current window // because we are just going to close the current window. @@ -130,8 +143,6 @@ export class TwoFactorComponent extends BaseTwoFactorComponent { // We don't need this window anymore because the intent is for the user to be left // on the web vault screen which tells them to continue in the browser extension (sidebar or popup) BrowserApi.closeBitwardenExtensionTab(); - - return syncPromise; }; } }); diff --git a/apps/browser/src/autofill/background/context-menus.background.ts b/apps/browser/src/autofill/background/context-menus.background.ts index 681f86cdf67..bc26353cbd9 100644 --- a/apps/browser/src/autofill/background/context-menus.background.ts +++ b/apps/browser/src/autofill/background/context-menus.background.ts @@ -30,6 +30,7 @@ export default class ContextMenusBackground { msg.data.commandToRetry.msg.data, msg.data.commandToRetry.sender.tab ); + await BrowserApi.tabSendMessageData(sender.tab, "closeNotificationBar"); } } ); diff --git a/apps/browser/src/autofill/background/notification.background.ts b/apps/browser/src/autofill/background/notification.background.ts index 1f733f252c8..1cb006fa3a2 100644 --- a/apps/browser/src/autofill/background/notification.background.ts +++ b/apps/browser/src/autofill/background/notification.background.ts @@ -5,12 +5,14 @@ import { PolicyType } from "@bitwarden/common/admin-console/enums"; import { AuthService } from "@bitwarden/common/auth/abstractions/auth.service"; import { AuthenticationStatus } from "@bitwarden/common/auth/enums/authentication-status"; import { ThemeType } from "@bitwarden/common/enums"; +import { EnvironmentService } from "@bitwarden/common/platform/abstractions/environment.service"; import { Utils } from "@bitwarden/common/platform/misc/utils"; import { CipherService } from "@bitwarden/common/vault/abstractions/cipher.service"; import { FolderService } from "@bitwarden/common/vault/abstractions/folder/folder.service.abstraction"; import { CipherType } from "@bitwarden/common/vault/enums/cipher-type"; import { CipherView } from "@bitwarden/common/vault/models/view/cipher.view"; +import AddUnlockVaultQueueMessage from "../../background/models/add-unlock-vault-queue-message"; import AddChangePasswordQueueMessage from "../../background/models/addChangePasswordQueueMessage"; import AddLoginQueueMessage from "../../background/models/addLoginQueueMessage"; import AddLoginRuntimeMessage from "../../background/models/addLoginRuntimeMessage"; @@ -22,7 +24,11 @@ import { BrowserStateService } from "../../platform/services/abstractions/browse import { AutofillService } from "../services/abstractions/autofill.service"; export default class NotificationBackground { - private notificationQueue: (AddLoginQueueMessage | AddChangePasswordQueueMessage)[] = []; + private notificationQueue: ( + | AddLoginQueueMessage + | AddChangePasswordQueueMessage + | AddUnlockVaultQueueMessage + )[] = []; constructor( private autofillService: AutofillService, @@ -30,7 +36,8 @@ export default class NotificationBackground { private authService: AuthService, private policyService: PolicyService, private folderService: FolderService, - private stateService: BrowserStateService + private stateService: BrowserStateService, + private environmentService: EnvironmentService ) {} async init() { @@ -51,10 +58,7 @@ export default class NotificationBackground { async processMessage(msg: any, sender: chrome.runtime.MessageSender) { switch (msg.command) { case "unlockCompleted": - if (msg.data.target !== "notification.background") { - return; - } - await this.processMessage(msg.data.commandToRetry.msg, msg.data.commandToRetry.sender); + await this.handleUnlockCompleted(msg.data, sender); break; case "bgGetDataForTab": await this.getDataForTab(sender.tab, msg.responseCommand); @@ -80,7 +84,9 @@ export default class NotificationBackground { if ((await this.authService.getAuthStatus()) < AuthenticationStatus.Unlocked) { const retryMessage: LockedVaultPendingNotificationsItem = { commandToRetry: { - msg: msg, + msg: { + command: msg, + }, sender: sender, }, target: "notification.background", @@ -112,6 +118,9 @@ export default class NotificationBackground { break; } break; + case "promptForLogin": + await this.unlockVault(sender.tab); + break; default: break; } @@ -167,11 +176,21 @@ export default class NotificationBackground { isVaultLocked: this.notificationQueue[i].wasVaultLocked, theme: await this.getCurrentTheme(), removeIndividualVault: await this.removeIndividualVault(), + webVaultURL: await this.environmentService.getWebVaultUrl(), }, }); } else if (this.notificationQueue[i].type === NotificationQueueMessageType.ChangePassword) { BrowserApi.tabSendMessageData(tab, "openNotificationBar", { type: "change", + typeData: { + isVaultLocked: this.notificationQueue[i].wasVaultLocked, + theme: await this.getCurrentTheme(), + webVaultURL: await this.environmentService.getWebVaultUrl(), + }, + }); + } else if (this.notificationQueue[i].type === NotificationQueueMessageType.UnlockVault) { + BrowserApi.tabSendMessageData(tab, "openNotificationBar", { + type: "unlock", typeData: { isVaultLocked: this.notificationQueue[i].wasVaultLocked, theme: await this.getCurrentTheme(), @@ -301,6 +320,20 @@ export default class NotificationBackground { } } + private async unlockVault(tab: chrome.tabs.Tab) { + const currentAuthStatus = await this.authService.getAuthStatus(); + if (currentAuthStatus !== AuthenticationStatus.Locked || this.notificationQueue.length) { + return; + } + + const loginDomain = Utils.getDomain(tab.url); + if (!loginDomain) { + return; + } + + this.pushUnlockVaultToQueue(loginDomain, tab); + } + private async pushChangePasswordToQueue( cipherId: string, loginDomain: string, @@ -323,6 +356,20 @@ export default class NotificationBackground { await this.checkNotificationQueue(tab); } + private async pushUnlockVaultToQueue(loginDomain: string, tab: chrome.tabs.Tab) { + this.removeTabFromNotificationQueue(tab); + const message: AddUnlockVaultQueueMessage = { + type: NotificationQueueMessageType.UnlockVault, + domain: loginDomain, + tabId: tab.id, + expires: new Date(new Date().getTime() + 0.5 * 60000), // 30 seconds + wasVaultLocked: true, + }; + this.notificationQueue.push(message); + await this.checkNotificationQueue(tab); + this.removeTabFromNotificationQueue(tab); + } + private async saveOrUpdateCredentials(tab: chrome.tabs.Tab, edit: boolean, folderId?: string) { for (let i = this.notificationQueue.length - 1; i >= 0; i--) { const queueMessage = this.notificationQueue[i]; @@ -459,4 +506,22 @@ export default class NotificationBackground { this.policyService.policyAppliesToActiveUser$(PolicyType.PersonalOwnership) ); } + + private async handleUnlockCompleted( + messageData: LockedVaultPendingNotificationsItem, + sender: chrome.runtime.MessageSender + ): Promise { + if (messageData.commandToRetry.msg.command === "autofill_login") { + await BrowserApi.tabSendMessageData(sender.tab, "closeNotificationBar"); + } + + if (messageData.target !== "notification.background") { + return; + } + + await this.processMessage( + messageData.commandToRetry.msg.command, + messageData.commandToRetry.sender + ); + } } diff --git a/apps/browser/src/autofill/background/service_factories/autofill-service.factory.ts b/apps/browser/src/autofill/background/service_factories/autofill-service.factory.ts index a802fd8cf1c..efa5bdcffbb 100644 --- a/apps/browser/src/autofill/background/service_factories/autofill-service.factory.ts +++ b/apps/browser/src/autofill/background/service_factories/autofill-service.factory.ts @@ -2,6 +2,10 @@ import { TotpServiceInitOptions, totpServiceFactory, } from "../../../auth/background/service-factories/totp-service.factory"; +import { + UserVerificationServiceInitOptions, + userVerificationServiceFactory, +} from "../../../auth/background/service-factories/user-verification-service.factory"; import { EventCollectionServiceInitOptions, eventCollectionServiceFactory, @@ -38,7 +42,8 @@ export type AutoFillServiceInitOptions = AutoFillServiceOptions & TotpServiceInitOptions & EventCollectionServiceInitOptions & LogServiceInitOptions & - SettingsServiceInitOptions; + SettingsServiceInitOptions & + UserVerificationServiceInitOptions; export function autofillServiceFactory( cache: { autofillService?: AbstractAutoFillService } & CachedServices, @@ -55,7 +60,8 @@ export function autofillServiceFactory( await totpServiceFactory(cache, opts), await eventCollectionServiceFactory(cache, opts), await logServiceFactory(cache, opts), - await settingsServiceFactory(cache, opts) + await settingsServiceFactory(cache, opts), + await userVerificationServiceFactory(cache, opts) ) ); } diff --git a/apps/browser/src/autofill/background/tabs.background.ts b/apps/browser/src/autofill/background/tabs.background.ts index 0f724c84dd5..0655fd23b62 100644 --- a/apps/browser/src/autofill/background/tabs.background.ts +++ b/apps/browser/src/autofill/background/tabs.background.ts @@ -21,6 +21,8 @@ export default class TabsBackground { } this.focusedWindowId = windowId; + await this.main.refreshBadge(); + await this.main.refreshMenu(); this.main.messagingService.send("windowChanged"); }); diff --git a/apps/browser/src/autofill/browser/cipher-context-menu-handler.spec.ts b/apps/browser/src/autofill/browser/cipher-context-menu-handler.spec.ts index 53d3d100769..d7cac8d44b2 100644 --- a/apps/browser/src/autofill/browser/cipher-context-menu-handler.spec.ts +++ b/apps/browser/src/autofill/browser/cipher-context-menu-handler.spec.ts @@ -69,7 +69,7 @@ describe("CipherContextMenuHandler", () => { expect(mainContextMenuHandler.noLogins).toHaveBeenCalledTimes(1); }); - it("only adds valid ciphers", async () => { + it("only adds login ciphers including ciphers that require reprompt", async () => { authService.getAuthStatus.mockResolvedValue(AuthenticationStatus.Unlocked); mainContextMenuHandler.init.mockResolvedValue(true); @@ -81,13 +81,20 @@ describe("CipherContextMenuHandler", () => { name: "Test Cipher", login: { username: "Test Username" }, }; + const repromptCipher = { + id: "6", + type: CipherType.Login, + reprompt: CipherRepromptType.Password, + name: "Test Reprompt Cipher", + login: { username: "Test Username" }, + }; cipherService.getAllDecryptedForUrl.mockResolvedValue([ - null, - undefined, - { type: CipherType.Card }, - { type: CipherType.Login, reprompt: CipherRepromptType.Password }, - realCipher, + null, // invalid cipher + undefined, // invalid cipher + { type: CipherType.Card }, // invalid cipher + realCipher, // valid cipher + repromptCipher, ] as any[]); await sut.update("https://test.com"); @@ -96,7 +103,7 @@ describe("CipherContextMenuHandler", () => { expect(cipherService.getAllDecryptedForUrl).toHaveBeenCalledWith("https://test.com"); - expect(mainContextMenuHandler.loadOptions).toHaveBeenCalledTimes(1); + expect(mainContextMenuHandler.loadOptions).toHaveBeenCalledTimes(2); expect(mainContextMenuHandler.loadOptions).toHaveBeenCalledWith( "Test Cipher (Test Username)", @@ -104,6 +111,13 @@ describe("CipherContextMenuHandler", () => { "https://test.com", realCipher ); + + expect(mainContextMenuHandler.loadOptions).toHaveBeenCalledWith( + "Test Reprompt Cipher (Test Username)", + "6", + "https://test.com", + repromptCipher + ); }); }); }); 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 2eccc03c12b..6140db260f5 100644 --- a/apps/browser/src/autofill/browser/cipher-context-menu-handler.ts +++ b/apps/browser/src/autofill/browser/cipher-context-menu-handler.ts @@ -4,7 +4,6 @@ import { StateFactory } from "@bitwarden/common/platform/factories/state-factory import { Utils } from "@bitwarden/common/platform/misc/utils"; import { GlobalState } from "@bitwarden/common/platform/models/domain/global-state"; import { CipherService } from "@bitwarden/common/vault/abstractions/cipher.service"; -import { CipherRepromptType } from "@bitwarden/common/vault/enums/cipher-reprompt-type"; import { CipherType } from "@bitwarden/common/vault/enums/cipher-type"; import { CipherView } from "@bitwarden/common/vault/models/view/cipher.view"; @@ -67,9 +66,6 @@ export class CipherContextMenuHandler { clipboardWriteCallback: NOT_IMPLEMENTED, win: self, }, - stateMigrationServiceOptions: { - stateFactory: stateFactory, - }, stateServiceOptions: { stateFactory: stateFactory, }, @@ -81,6 +77,12 @@ export class CipherContextMenuHandler { ); } + static async windowsOnFocusChangedListener(windowId: number, serviceCache: CachedServices) { + const cipherContextMenuHandler = await CipherContextMenuHandler.create(serviceCache); + const tab = await BrowserApi.getTabFromCurrentWindow(); + await cipherContextMenuHandler.update(tab?.url); + } + static async tabsOnActivatedListener( activeInfo: chrome.tabs.TabActiveInfo, serviceCache: CachedServices @@ -171,11 +173,7 @@ export class CipherContextMenuHandler { } private async updateForCipher(url: string, cipher: CipherView) { - if ( - cipher == null || - cipher.type !== CipherType.Login || - cipher.reprompt !== CipherRepromptType.None - ) { + if (cipher == null || cipher.type !== CipherType.Login) { return; } diff --git a/apps/browser/src/autofill/browser/context-menu-clicked-handler.spec.ts b/apps/browser/src/autofill/browser/context-menu-clicked-handler.spec.ts index a9dbcbaacc5..021d15df89e 100644 --- a/apps/browser/src/autofill/browser/context-menu-clicked-handler.spec.ts +++ b/apps/browser/src/autofill/browser/context-menu-clicked-handler.spec.ts @@ -3,6 +3,7 @@ import { mock, MockProxy } from "jest-mock-extended"; import { EventCollectionService } from "@bitwarden/common/abstractions/event/event-collection.service"; import { TotpService } from "@bitwarden/common/abstractions/totp.service"; import { AuthService } from "@bitwarden/common/auth/abstractions/auth.service"; +import { UserVerificationService } from "@bitwarden/common/auth/abstractions/user-verification/user-verification.service.abstraction"; import { CipherService } from "@bitwarden/common/vault/abstractions/cipher.service"; import { CipherRepromptType } from "@bitwarden/common/vault/enums/cipher-reprompt-type"; import { CipherType } from "@bitwarden/common/vault/enums/cipher-type"; @@ -63,6 +64,7 @@ describe("ContextMenuClickedHandler", () => { let cipherService: MockProxy; let totpService: MockProxy; let eventCollectionService: MockProxy; + let userVerificationService: MockProxy; let sut: ContextMenuClickedHandler; @@ -82,7 +84,8 @@ describe("ContextMenuClickedHandler", () => { authService, cipherService, totpService, - eventCollectionService + eventCollectionService, + userVerificationService ); }); 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 a5cf1c70655..a6bff50a195 100644 --- a/apps/browser/src/autofill/browser/context-menu-clicked-handler.ts +++ b/apps/browser/src/autofill/browser/context-menu-clicked-handler.ts @@ -1,6 +1,7 @@ import { EventCollectionService } from "@bitwarden/common/abstractions/event/event-collection.service"; import { TotpService } from "@bitwarden/common/abstractions/totp.service"; import { AuthService } from "@bitwarden/common/auth/abstractions/auth.service"; +import { UserVerificationService } from "@bitwarden/common/auth/abstractions/user-verification/user-verification.service.abstraction"; import { AuthenticationStatus } from "@bitwarden/common/auth/enums/authentication-status"; import { EventType } from "@bitwarden/common/enums"; import { StateFactory } from "@bitwarden/common/platform/factories/state-factory"; @@ -14,6 +15,7 @@ import { AuthServiceInitOptions, } from "../../auth/background/service-factories/auth-service.factory"; import { totpServiceFactory } from "../../auth/background/service-factories/totp-service.factory"; +import { userVerificationServiceFactory } from "../../auth/background/service-factories/user-verification-service.factory"; import LockedVaultPendingNotificationsItem from "../../background/models/lockedVaultPendingNotificationsItem"; import { eventCollectionServiceFactory } from "../../background/service-factories/event-collection-service.factory"; import { Account } from "../../models/account"; @@ -56,7 +58,8 @@ export class ContextMenuClickedHandler { private authService: AuthService, private cipherService: CipherService, private totpService: TotpService, - private eventCollectionService: EventCollectionService + private eventCollectionService: EventCollectionService, + private userVerificationService: UserVerificationService ) {} static async mv3Create(cachedServices: CachedServices) { @@ -85,9 +88,6 @@ export class ContextMenuClickedHandler { clipboardWriteCallback: NOT_IMPLEMENTED, win: self, }, - stateMigrationServiceOptions: { - stateFactory: stateFactory, - }, stateServiceOptions: { stateFactory: stateFactory, }, @@ -109,7 +109,8 @@ export class ContextMenuClickedHandler { await authServiceFactory(cachedServices, serviceOptions), await cipherServiceFactory(cachedServices, serviceOptions), await totpServiceFactory(cachedServices, serviceOptions), - await eventCollectionServiceFactory(cachedServices, serviceOptions) + await eventCollectionServiceFactory(cachedServices, serviceOptions), + await userVerificationServiceFactory(cachedServices, serviceOptions) ); } @@ -203,21 +204,56 @@ export class ContextMenuClickedHandler { if (tab == null) { return; } - await this.autofillAction(tab, cipher); + + if (await this.isPasswordRepromptRequired(cipher)) { + await BrowserApi.tabSendMessageData(tab, "passwordReprompt", { + cipherId: cipher.id, + action: AUTOFILL_ID, + }); + } else { + await this.autofillAction(tab, cipher); + } + break; case COPY_USERNAME_ID: this.copyToClipboard({ text: cipher.login.username, tab: tab }); break; case COPY_PASSWORD_ID: - this.copyToClipboard({ text: cipher.login.password, tab: tab }); - this.eventCollectionService.collect(EventType.Cipher_ClientCopiedPassword, cipher.id); + if (await this.isPasswordRepromptRequired(cipher)) { + await BrowserApi.tabSendMessageData(tab, "passwordReprompt", { + cipherId: cipher.id, + action: COPY_PASSWORD_ID, + }); + } else { + this.copyToClipboard({ text: cipher.login.password, tab: tab }); + this.eventCollectionService.collect(EventType.Cipher_ClientCopiedPassword, cipher.id); + } + break; case COPY_VERIFICATIONCODE_ID: - this.copyToClipboard({ text: await this.totpService.getCode(cipher.login.totp), tab: tab }); + if (await this.isPasswordRepromptRequired(cipher)) { + await BrowserApi.tabSendMessageData(tab, "passwordReprompt", { + cipherId: cipher.id, + action: COPY_VERIFICATIONCODE_ID, + }); + } else { + this.copyToClipboard({ + text: await this.totpService.getCode(cipher.login.totp), + tab: tab, + }); + } + break; } } + private async isPasswordRepromptRequired(cipher: CipherView): Promise { + return ( + cipher.reprompt === CipherRepromptType.Password && + (await this.userVerificationService.hasMasterPasswordAndMasterKeyHash()) + ); + } + private async getIdentifier(tab: chrome.tabs.Tab, info: chrome.contextMenus.OnClickData) { return new Promise((resolve, reject) => { BrowserApi.sendTabsMessage( 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 9b16aa266db..b9af3dd191f 100644 --- a/apps/browser/src/autofill/browser/main-context-menu-handler.ts +++ b/apps/browser/src/autofill/browser/main-context-menu-handler.ts @@ -79,9 +79,6 @@ export class MainContextMenuHandler { logServiceOptions: { isDev: false, }, - stateMigrationServiceOptions: { - stateFactory: stateFactory, - }, stateServiceOptions: { stateFactory: stateFactory, }, diff --git a/apps/browser/src/autofill/content/autofill.js b/apps/browser/src/autofill/content/autofill.js index f6db33af97d..1833c09e159 100644 --- a/apps/browser/src/autofill/content/autofill.js +++ b/apps/browser/src/autofill/content/autofill.js @@ -768,8 +768,16 @@ // Detect if within an iframe, and the iframe is sandboxed function isSandboxed() { - // self.origin is 'null' if inside a frame with sandboxed csp or iframe tag - return self.origin == null || self.origin === 'null'; + // self.origin is 'null' if inside a frame with sandboxed csp or iframe tag + if (String(self.origin).toLowerCase() === "null") { + return true; + } + + if (window.frameElement?.hasAttribute("sandbox")) { + return true; + } + + return location.hostname === ""; } function doFill(fillScript) { diff --git a/apps/browser/src/autofill/content/autofillv2.ts b/apps/browser/src/autofill/content/autofillv2.ts index 8bf16ff879c..65813b3afe6 100644 --- a/apps/browser/src/autofill/content/autofillv2.ts +++ b/apps/browser/src/autofill/content/autofillv2.ts @@ -849,7 +849,15 @@ function fill(document: Document, fillScript: AutofillScript) { // Detect if within an iframe, and the iframe is sandboxed function isSandboxed() { // self.origin is 'null' if inside a frame with sandboxed csp or iframe tag - return self.origin == null || self.origin === "null"; + if (String(self.origin).toLowerCase() === "null") { + return true; + } + + if (window.frameElement?.hasAttribute("sandbox")) { + return true; + } + + return location.hostname === ""; } function doFill(fillScript: AutofillScript) { diff --git a/apps/browser/src/autofill/content/message_handler.ts b/apps/browser/src/autofill/content/message_handler.ts index 5302a5042be..5ef0abdb7cc 100644 --- a/apps/browser/src/autofill/content/message_handler.ts +++ b/apps/browser/src/autofill/content/message_handler.ts @@ -28,6 +28,7 @@ window.addEventListener( const forwardCommands = [ "promptForLogin", + "passwordReprompt", "addToLockedVaultPendingNotifications", "unlockCompleted", "addedCipher", diff --git a/apps/browser/src/autofill/content/notification-bar.ts b/apps/browser/src/autofill/content/notification-bar.ts index 330196dc648..5bccd1d2a22 100644 --- a/apps/browser/src/autofill/content/notification-bar.ts +++ b/apps/browser/src/autofill/content/notification-bar.ts @@ -3,6 +3,7 @@ import ChangePasswordRuntimeMessage from "../../background/models/changePassword import AutofillField from "../models/autofill-field"; import { WatchedForm } from "../models/watched-form"; import { FormData } from "../services/abstractions/autofill.service"; +import { UserSettings } from "../types"; interface HTMLElementWithFormOpId extends HTMLElement { formOpId: string; @@ -26,10 +27,64 @@ interface HTMLElementWithFormOpId extends HTMLElement { * and async scripts to finish loading. * https://developer.mozilla.org/en-US/docs/Web/API/Window/DOMContentLoaded_event */ -document.addEventListener("DOMContentLoaded", (event) => { - // Do not show the notification bar on the Bitwarden vault - // because they can add logins and change passwords there - if (window.location.hostname.endsWith("vault.bitwarden.com")) { +document.addEventListener("DOMContentLoaded", async (event) => { + // These are preferences for whether to show the notification bar based on the user's settings + // and they are set in the Settings > Options page in the browser extension. + let disabledAddLoginNotification = false; + let disabledChangedPasswordNotification = false; + let showNotificationBar = true; + + // Look up the active user id from storage + const activeUserIdKey = "activeUserId"; + let activeUserId: string; + await chrome.storage.local.get(activeUserIdKey, (obj: any) => { + if (obj == null || obj[activeUserIdKey] == null) { + return; + } + activeUserId = obj[activeUserIdKey]; + }); + + // Look up the user's settings from storage + await chrome.storage.local.get(activeUserId, (obj: any) => { + if (obj?.[activeUserId] == null) { + return; + } + + const userSettings: UserSettings = obj[activeUserId].settings; + + // Do not show the notification bar on the Bitwarden vault + // because they can add logins and change passwords there + if (window.location.origin === userSettings.serverConfig.environment.vault) { + showNotificationBar = false; + + return; + } + + // NeverDomains is a dictionary of domains that the user has chosen to never + // show the notification bar on (for login detail collection or password change). + // It is managed in the Settings > Excluded Domains page in the browser extension. + // Example: '{"bitwarden.com":null}' + const excludedDomainsDict = userSettings.neverDomains; + + if ( + excludedDomainsDict != null && + // eslint-disable-next-line + excludedDomainsDict.hasOwnProperty(window.location.hostname) + ) { + return; + } + + // Set local disabled preferences + disabledAddLoginNotification = userSettings.disableAddLoginNotification; + disabledChangedPasswordNotification = userSettings.disableChangedPasswordNotification; + + if (!disabledAddLoginNotification || !disabledChangedPasswordNotification) { + // If the user has not disabled both notifications, then handle the initial page change (null -> actual page) + handlePageChange(); + } + }); + + if (!showNotificationBar) { return; } @@ -77,53 +132,6 @@ document.addEventListener("DOMContentLoaded", (event) => { ]); const changePasswordButtonContainsNames = new Set(["pass", "change", "contras", "senha"]); - // These are preferences for whether to show the notification bar based on the user's settings - // and they are set in the Settings > Options page in the browser extension. - let disabledAddLoginNotification = false; - let disabledChangedPasswordNotification = false; - - // Look up the active user id from storage - const activeUserIdKey = "activeUserId"; - let activeUserId: string; - chrome.storage.local.get(activeUserIdKey, (obj: any) => { - if (obj == null || obj[activeUserIdKey] == null) { - return; - } - activeUserId = obj[activeUserIdKey]; - }); - - // Look up the user's settings from storage - chrome.storage.local.get(activeUserId, (obj: any) => { - if (obj?.[activeUserId] == null) { - return; - } - - const userSettings = obj[activeUserId].settings; - - // NeverDomains is a dictionary of domains that the user has chosen to never - // show the notification bar on (for login detail collection or password change). - // It is managed in the Settings > Excluded Domains page in the browser extension. - // Example: '{"bitwarden.com":null}' - const excludedDomainsDict = userSettings.neverDomains; - - if ( - excludedDomainsDict != null && - // eslint-disable-next-line - excludedDomainsDict.hasOwnProperty(window.location.hostname) - ) { - return; - } - - // Set local disabled preferences - disabledAddLoginNotification = userSettings.disableAddLoginNotification; - disabledChangedPasswordNotification = userSettings.disableChangedPasswordNotification; - - if (!disabledAddLoginNotification || !disabledChangedPasswordNotification) { - // If the user has not disabled both notifications, then handle the initial page change (null -> actual page) - handlePageChange(); - } - }); - // Message Processing // Listen for messages from the background script @@ -834,6 +842,7 @@ document.addEventListener("DOMContentLoaded", (event) => { isVaultLocked: typeData.isVaultLocked, theme: typeData.theme, removeIndividualVault: typeData.removeIndividualVault, + webVaultURL: typeData.webVaultURL, }; const barQueryString = new URLSearchParams(barQueryParams).toString(); const barPage = "notification/bar.html?" + barQueryString; diff --git a/apps/browser/src/autofill/notification/bar.html b/apps/browser/src/autofill/notification/bar.html index deec7fd512c..a6be58de70a 100644 --- a/apps/browser/src/autofill/notification/bar.html +++ b/apps/browser/src/autofill/notification/bar.html @@ -51,4 +51,13 @@
+ + diff --git a/apps/browser/src/autofill/notification/bar.ts b/apps/browser/src/autofill/notification/bar.ts index 59367dabee4..dcc4ce010f6 100644 --- a/apps/browser/src/autofill/notification/bar.ts +++ b/apps/browser/src/autofill/notification/bar.ts @@ -28,9 +28,20 @@ function load() { notificationEdit: chrome.i18n.getMessage("edit"), notificationChangeSave: chrome.i18n.getMessage("notificationChangeSave"), notificationChangeDesc: chrome.i18n.getMessage("notificationChangeDesc"), + notificationUnlock: chrome.i18n.getMessage("notificationUnlock"), + notificationUnlockDesc: chrome.i18n.getMessage("notificationUnlockDesc"), }; - document.getElementById("logo-link").title = i18n.appName; + const logoLink = document.getElementById("logo-link") as HTMLAnchorElement; + logoLink.title = i18n.appName; + + // Update logo link to user's regional domain + const webVaultURL = getQueryVariable("webVaultURL"); + const newVaultURL = webVaultURL && decodeURIComponent(webVaultURL); + + if (newVaultURL && newVaultURL !== logoLink.href) { + logoLink.href = newVaultURL; + } // i18n for "Add" template const addTemplate = document.getElementById("template-add") as HTMLTemplateElement; @@ -63,6 +74,13 @@ function load() { changeTemplate.content.getElementById("change-text").textContent = i18n.notificationChangeDesc; + const unlockTemplate = document.getElementById("template-unlock") as HTMLTemplateElement; + + const unlockButton = unlockTemplate.content.getElementById("unlock-vault"); + unlockButton.textContent = i18n.notificationUnlock; + + unlockTemplate.content.getElementById("unlock-text").textContent = i18n.notificationUnlockDesc; + // i18n for body content const closeButton = document.getElementById("close-button"); closeButton.title = i18n.close; @@ -71,6 +89,8 @@ function load() { handleTypeAdd(); } else if (getQueryVariable("type") === "change") { handleTypeChange(); + } else if (getQueryVariable("type") === "unlock") { + handleTypeUnlock(); } closeButton.addEventListener("click", (e) => { @@ -163,6 +183,17 @@ function handleTypeChange() { }); } +function handleTypeUnlock() { + setContent(document.getElementById("template-unlock") as HTMLTemplateElement); + + const unlockButton = document.getElementById("unlock-vault"); + unlockButton.addEventListener("click", (e) => { + sendPlatformMessage({ + command: "bgReopenPromptForLogin", + }); + }); +} + function setContent(template: HTMLTemplateElement) { const content = document.getElementById("content"); while (content.firstChild) { diff --git a/apps/browser/src/autofill/services/autofill.service.ts b/apps/browser/src/autofill/services/autofill.service.ts index 9ced0104b8e..571b4af7213 100644 --- a/apps/browser/src/autofill/services/autofill.service.ts +++ b/apps/browser/src/autofill/services/autofill.service.ts @@ -1,6 +1,7 @@ import { EventCollectionService } from "@bitwarden/common/abstractions/event/event-collection.service"; import { SettingsService } from "@bitwarden/common/abstractions/settings.service"; import { TotpService } from "@bitwarden/common/abstractions/totp.service"; +import { UserVerificationService } from "@bitwarden/common/auth/abstractions/user-verification/user-verification.service.abstraction"; import { EventType, FieldType, UriMatchType } from "@bitwarden/common/enums"; import { LogService } from "@bitwarden/common/platform/abstractions/log.service"; import { CipherService } from "@bitwarden/common/vault/abstractions/cipher.service"; @@ -45,7 +46,8 @@ export default class AutofillService implements AutofillServiceInterface { private totpService: TotpService, private eventCollectionService: EventCollectionService, private logService: LogService, - private settingsService: SettingsService + private settingsService: SettingsService, + private userVerificationService: UserVerificationService ) {} getFormsWithPasswordFields(pageDetails: AutofillPageDetails): FormData[] { @@ -234,7 +236,19 @@ export default class AutofillService implements AutofillServiceInterface { } } - if (cipher == null || cipher.reprompt !== CipherRepromptType.None) { + if (cipher == null) { + return null; + } + + if ( + cipher.reprompt !== CipherRepromptType.None && + (await this.userVerificationService.hasMasterPasswordAndMasterKeyHash()) + ) { + await BrowserApi.tabSendMessageData(tab, "passwordReprompt", { + cipherId: cipher.id, + action: "autofill", + }); + return null; } diff --git a/apps/browser/src/autofill/types/index.ts b/apps/browser/src/autofill/types/index.ts new file mode 100644 index 00000000000..d6891325353 --- /dev/null +++ b/apps/browser/src/autofill/types/index.ts @@ -0,0 +1,41 @@ +import { Region } from "@bitwarden/common/platform/abstractions/environment.service"; +import { VaultTimeoutAction } from "@bitwarden/common/src/enums/vault-timeout-action.enum"; + +export type UserSettings = { + avatarColor: string | null; + environmentUrls: { + api: string | null; + base: string | null; + events: string | null; + icons: string | null; + identity: string | null; + keyConnector: string | null; + notifications: string | null; + webVault: string | null; + }; + pinProtected: { [key: string]: any }; + region: Region; + serverConfig: { + environment: { + api: string | null; + cloudRegion: string | null; + identity: string | null; + notifications: string | null; + sso: string | null; + vault: string | null; + }; + featureStates: { [key: string]: any }; + gitHash: string; + server: { [key: string]: any }; + utcDate: string; + version: string; + }; + settings: { + equivalentDomains: string[][]; + }; + neverDomains?: { [key: string]: any }; + disableAddLoginNotification?: boolean; + disableChangedPasswordNotification?: boolean; + vaultTimeout: number; + vaultTimeoutAction: VaultTimeoutAction; +}; diff --git a/apps/browser/src/background/commands.background.ts b/apps/browser/src/background/commands.background.ts index 118953b9da0..0cbf91c6666 100644 --- a/apps/browser/src/background/commands.background.ts +++ b/apps/browser/src/background/commands.background.ts @@ -1,4 +1,4 @@ -import { VaultTimeoutService } from "@bitwarden/common/abstractions/vaultTimeout/vaultTimeout.service"; +import { VaultTimeoutService } from "@bitwarden/common/abstractions/vault-timeout/vault-timeout.service"; import { AuthService } from "@bitwarden/common/auth/abstractions/auth.service"; import { AuthenticationStatus } from "@bitwarden/common/auth/enums/authentication-status"; import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service"; diff --git a/apps/browser/src/background/idle.background.ts b/apps/browser/src/background/idle.background.ts index 3854d2383b4..7200301c795 100644 --- a/apps/browser/src/background/idle.background.ts +++ b/apps/browser/src/background/idle.background.ts @@ -1,5 +1,5 @@ import { NotificationsService } from "@bitwarden/common/abstractions/notifications.service"; -import { VaultTimeoutService } from "@bitwarden/common/abstractions/vaultTimeout/vaultTimeout.service"; +import { VaultTimeoutService } from "@bitwarden/common/abstractions/vault-timeout/vault-timeout.service"; import { VaultTimeoutAction } from "@bitwarden/common/enums/vault-timeout-action.enum"; import { BrowserStateService } from "../platform/services/abstractions/browser-state.service"; diff --git a/apps/browser/src/background/main.background.ts b/apps/browser/src/background/main.background.ts index 62fb1d85d5f..31e81c198f6 100644 --- a/apps/browser/src/background/main.background.ts +++ b/apps/browser/src/background/main.background.ts @@ -1,27 +1,33 @@ import { AvatarUpdateService as AvatarUpdateServiceAbstraction } from "@bitwarden/common/abstractions/account/avatar-update.service"; import { ApiService as ApiServiceAbstraction } from "@bitwarden/common/abstractions/api.service"; import { AuditService as AuditServiceAbstraction } from "@bitwarden/common/abstractions/audit.service"; +import { DevicesServiceAbstraction } from "@bitwarden/common/abstractions/devices/devices.service.abstraction"; import { EventCollectionService as EventCollectionServiceAbstraction } from "@bitwarden/common/abstractions/event/event-collection.service"; import { EventUploadService as EventUploadServiceAbstraction } from "@bitwarden/common/abstractions/event/event-upload.service"; import { NotificationsService as NotificationsServiceAbstraction } from "@bitwarden/common/abstractions/notifications.service"; import { SearchService as SearchServiceAbstraction } from "@bitwarden/common/abstractions/search.service"; import { SettingsService as SettingsServiceAbstraction } from "@bitwarden/common/abstractions/settings.service"; import { TotpService as TotpServiceAbstraction } from "@bitwarden/common/abstractions/totp.service"; -import { VaultTimeoutService as VaultTimeoutServiceAbstraction } from "@bitwarden/common/abstractions/vaultTimeout/vaultTimeout.service"; -import { VaultTimeoutSettingsService as VaultTimeoutSettingsServiceAbstraction } from "@bitwarden/common/abstractions/vaultTimeout/vaultTimeoutSettings.service"; -import { InternalOrganizationService as InternalOrganizationServiceAbstraction } from "@bitwarden/common/admin-console/abstractions/organization/organization.service.abstraction"; +import { VaultTimeoutSettingsService as VaultTimeoutSettingsServiceAbstraction } from "@bitwarden/common/abstractions/vault-timeout/vault-timeout-settings.service"; +import { InternalOrganizationServiceAbstraction } from "@bitwarden/common/admin-console/abstractions/organization/organization.service.abstraction"; import { PolicyApiServiceAbstraction } from "@bitwarden/common/admin-console/abstractions/policy/policy-api.service.abstraction"; import { InternalPolicyService as InternalPolicyServiceAbstraction } from "@bitwarden/common/admin-console/abstractions/policy/policy.service.abstraction"; import { ProviderService as ProviderServiceAbstraction } from "@bitwarden/common/admin-console/abstractions/provider.service"; import { PolicyApiService } from "@bitwarden/common/admin-console/services/policy/policy-api.service"; import { ProviderService } from "@bitwarden/common/admin-console/services/provider.service"; +import { AuthRequestCryptoServiceAbstraction } from "@bitwarden/common/auth/abstractions/auth-request-crypto.service.abstraction"; import { AuthService as AuthServiceAbstraction } from "@bitwarden/common/auth/abstractions/auth.service"; +import { DeviceTrustCryptoServiceAbstraction } from "@bitwarden/common/auth/abstractions/device-trust-crypto.service.abstraction"; +import { DevicesApiServiceAbstraction } from "@bitwarden/common/auth/abstractions/devices-api.service.abstraction"; import { KeyConnectorService as KeyConnectorServiceAbstraction } from "@bitwarden/common/auth/abstractions/key-connector.service"; import { TokenService as TokenServiceAbstraction } from "@bitwarden/common/auth/abstractions/token.service"; import { TwoFactorService as TwoFactorServiceAbstraction } from "@bitwarden/common/auth/abstractions/two-factor.service"; import { UserVerificationApiServiceAbstraction } from "@bitwarden/common/auth/abstractions/user-verification/user-verification-api.service.abstraction"; import { UserVerificationService as UserVerificationServiceAbstraction } from "@bitwarden/common/auth/abstractions/user-verification/user-verification.service.abstraction"; +import { AuthRequestCryptoServiceImplementation } from "@bitwarden/common/auth/services/auth-request-crypto.service.implementation"; import { AuthService } from "@bitwarden/common/auth/services/auth.service"; +import { DeviceTrustCryptoService } from "@bitwarden/common/auth/services/device-trust-crypto.service.implementation"; +import { DevicesApiServiceImplementation } from "@bitwarden/common/auth/services/devices-api.service.implementation"; import { KeyConnectorService } from "@bitwarden/common/auth/services/key-connector.service"; import { TokenService } from "@bitwarden/common/auth/services/token.service"; import { TwoFactorService } from "@bitwarden/common/auth/services/two-factor.service"; @@ -53,18 +59,18 @@ import { EncryptServiceImplementation } from "@bitwarden/common/platform/service import { MultithreadEncryptServiceImplementation } from "@bitwarden/common/platform/services/cryptography/multithread-encrypt.service.implementation"; import { FileUploadService } from "@bitwarden/common/platform/services/file-upload/file-upload.service"; import { MemoryStorageService } from "@bitwarden/common/platform/services/memory-storage.service"; -import { StateMigrationService } from "@bitwarden/common/platform/services/state-migration.service"; import { SystemService } from "@bitwarden/common/platform/services/system.service"; import { WebCryptoFunctionService } from "@bitwarden/common/platform/services/web-crypto-function.service"; import { AvatarUpdateService } from "@bitwarden/common/services/account/avatar-update.service"; import { ApiService } from "@bitwarden/common/services/api.service"; import { AuditService } from "@bitwarden/common/services/audit.service"; +import { DevicesServiceImplementation } from "@bitwarden/common/services/devices/devices.service.implementation"; import { EventCollectionService } from "@bitwarden/common/services/event/event-collection.service"; import { EventUploadService } from "@bitwarden/common/services/event/event-upload.service"; import { NotificationsService } from "@bitwarden/common/services/notifications.service"; import { SearchService } from "@bitwarden/common/services/search.service"; import { TotpService } from "@bitwarden/common/services/totp.service"; -import { VaultTimeoutSettingsService } from "@bitwarden/common/services/vaultTimeout/vaultTimeoutSettings.service"; +import { VaultTimeoutSettingsService } from "@bitwarden/common/services/vault-timeout/vault-timeout-settings.service"; import { PasswordGenerationService, PasswordGenerationServiceAbstraction, @@ -114,6 +120,7 @@ import { Account } from "../models/account"; import { BrowserApi } from "../platform/browser/browser-api"; import { flagEnabled } from "../platform/flags"; import { UpdateBadge } from "../platform/listeners/update-badge"; +import BrowserPopoutWindowService from "../platform/popup/browser-popout-window.service"; import { BrowserStateService as StateServiceAbstraction } from "../platform/services/abstractions/browser-state.service"; import { BrowserCryptoService } from "../platform/services/browser-crypto.service"; import { BrowserEnvironmentService } from "../platform/services/browser-environment.service"; @@ -127,7 +134,7 @@ import { KeyGenerationService } from "../platform/services/key-generation.servic import { LocalBackedSessionStorageService } from "../platform/services/local-backed-session-storage.service"; import { BrowserSendService } from "../services/browser-send.service"; import { BrowserSettingsService } from "../services/browser-settings.service"; -import VaultTimeoutService from "../services/vaultTimeout/vaultTimeout.service"; +import VaultTimeoutService from "../services/vault-timeout/vault-timeout.service"; import { BrowserFolderService } from "../vault/services/browser-folder.service"; import { VaultFilterService } from "../vault/services/vault-filter.service"; @@ -155,7 +162,7 @@ export default class MainBackground { cipherService: CipherServiceAbstraction; folderService: InternalFolderServiceAbstraction; collectionService: CollectionServiceAbstraction; - vaultTimeoutService: VaultTimeoutServiceAbstraction; + vaultTimeoutService: VaultTimeoutService; vaultTimeoutSettingsService: VaultTimeoutSettingsServiceAbstraction; syncService: SyncServiceAbstraction; passwordGenerationService: PasswordGenerationServiceAbstraction; @@ -169,7 +176,6 @@ export default class MainBackground { searchService: SearchServiceAbstraction; notificationsService: NotificationsServiceAbstraction; stateService: StateServiceAbstraction; - stateMigrationService: StateMigrationService; systemService: SystemServiceAbstraction; eventCollectionService: EventCollectionServiceAbstraction; eventUploadService: EventUploadServiceAbstraction; @@ -195,6 +201,11 @@ export default class MainBackground { cipherContextMenuHandler: CipherContextMenuHandler; configService: ConfigServiceAbstraction; configApiService: ConfigApiServiceAbstraction; + devicesApiService: DevicesApiServiceAbstraction; + devicesService: DevicesServiceAbstraction; + deviceTrustCryptoService: DeviceTrustCryptoServiceAbstraction; + authRequestCryptoService: AuthRequestCryptoServiceAbstraction; + browserPopoutWindowService: BrowserPopoutWindowService; // Passed to the popup for Safari to workaround issues with theming, downloading, etc. backgroundWindow = window; @@ -249,17 +260,11 @@ export default class MainBackground { new KeyGenerationService(this.cryptoFunctionService) ) : new MemoryStorageService(); - this.stateMigrationService = new StateMigrationService( - this.storageService, - this.secureStorageService, - new StateFactory(GlobalState, Account) - ); this.stateService = new BrowserStateService( this.storageService, this.secureStorageService, this.memoryStorageService, this.logService, - this.stateMigrationService, new StateFactory(GlobalState, Account) ); this.platformUtilsService = new BrowserPlatformUtilsService( @@ -385,6 +390,23 @@ export default class MainBackground { that.runtimeBackground.processMessage(message, that as any, null); }; })(); + + this.devicesApiService = new DevicesApiServiceImplementation(this.apiService); + this.deviceTrustCryptoService = new DeviceTrustCryptoService( + this.cryptoFunctionService, + this.cryptoService, + this.encryptService, + this.stateService, + this.appIdService, + this.devicesApiService, + this.i18nService, + this.platformUtilsService + ); + + this.devicesService = new DevicesServiceImplementation(this.devicesApiService); + + this.authRequestCryptoService = new AuthRequestCryptoServiceImplementation(this.cryptoService); + this.authService = new AuthService( this.cryptoService, this.apiService, @@ -400,14 +422,26 @@ export default class MainBackground { this.i18nService, this.encryptService, this.passwordStrengthService, - this.policyService + this.policyService, + this.deviceTrustCryptoService, + this.authRequestCryptoService + ); + + this.userVerificationApiService = new UserVerificationApiService(this.apiService); + + this.userVerificationService = new UserVerificationService( + this.stateService, + this.cryptoService, + this.i18nService, + this.userVerificationApiService ); this.vaultTimeoutSettingsService = new VaultTimeoutSettingsService( this.cryptoService, this.tokenService, this.policyService, - this.stateService + this.stateService, + this.userVerificationService ); this.vaultTimeoutService = new VaultTimeoutService( @@ -418,7 +452,6 @@ export default class MainBackground { this.platformUtilsService, this.messagingService, this.searchService, - this.keyConnectorService, this.stateService, this.authService, this.vaultTimeoutSettingsService, @@ -469,13 +502,15 @@ export default class MainBackground { this.eventUploadService ); this.totpService = new TotpService(this.cryptoFunctionService, this.logService); + this.autofillService = new AutofillService( this.cipherService, this.stateService, this.totpService, this.eventCollectionService, this.logService, - this.settingsService + this.settingsService, + this.userVerificationService ); this.auditService = new AuditService(this.cryptoFunctionService, this.apiService); this.exportService = new VaultExportService( @@ -497,21 +532,13 @@ export default class MainBackground { this.authService, this.messagingService ); - - this.userVerificationApiService = new UserVerificationApiService(this.apiService); - - this.userVerificationService = new UserVerificationService( - this.cryptoService, - this.i18nService, - this.userVerificationApiService - ); - this.configService = new ConfigService( this.stateService, this.configApiService, this.authService, this.environmentService ); + this.browserPopoutWindowService = new BrowserPopoutWindowService(); const systemUtilsServiceReloadCallback = () => { const forceWindowReload = @@ -543,7 +570,8 @@ export default class MainBackground { this.environmentService, this.messagingService, this.logService, - this.configService + this.configService, + this.browserPopoutWindowService ); this.nativeMessagingBackground = new NativeMessagingBackground( this.cryptoService, @@ -570,7 +598,8 @@ export default class MainBackground { this.authService, this.policyService, this.folderService, - this.stateService + this.stateService, + this.environmentService ); this.tabsBackground = new TabsBackground(this, this.notificationBackground); @@ -598,7 +627,8 @@ export default class MainBackground { this.authService, this.cipherService, this.totpService, - this.eventCollectionService + this.eventCollectionService, + this.userVerificationService ); this.contextMenusBackground = new ContextMenusBackground(contextMenuClickedHandler); @@ -643,7 +673,7 @@ export default class MainBackground { await this.stateService.init(); - await (this.vaultTimeoutService as VaultTimeoutService).init(true); + await this.vaultTimeoutService.init(true); await (this.i18nService as BrowserI18nService).init(); await (this.eventUploadService as EventUploadService).init(true); await this.runtimeBackground.init(); diff --git a/apps/browser/src/background/models/add-unlock-vault-queue-message.ts b/apps/browser/src/background/models/add-unlock-vault-queue-message.ts new file mode 100644 index 00000000000..9ddde271008 --- /dev/null +++ b/apps/browser/src/background/models/add-unlock-vault-queue-message.ts @@ -0,0 +1,6 @@ +import NotificationQueueMessage from "./notificationQueueMessage"; +import { NotificationQueueMessageType } from "./notificationQueueMessageType"; + +export default class AddUnlockVaultQueueMessage extends NotificationQueueMessage { + type: NotificationQueueMessageType.UnlockVault; +} diff --git a/apps/browser/src/background/models/lockedVaultPendingNotificationsItem.ts b/apps/browser/src/background/models/lockedVaultPendingNotificationsItem.ts index ec697b16994..53f8405cd50 100644 --- a/apps/browser/src/background/models/lockedVaultPendingNotificationsItem.ts +++ b/apps/browser/src/background/models/lockedVaultPendingNotificationsItem.ts @@ -1,6 +1,9 @@ export default class LockedVaultPendingNotificationsItem { commandToRetry: { - msg: any; + msg: { + command: string; + data?: any; + }; sender: chrome.runtime.MessageSender; }; target: string; diff --git a/apps/browser/src/background/models/notificationQueueMessageType.ts b/apps/browser/src/background/models/notificationQueueMessageType.ts index f5e4115c4f5..2ce1a1840d8 100644 --- a/apps/browser/src/background/models/notificationQueueMessageType.ts +++ b/apps/browser/src/background/models/notificationQueueMessageType.ts @@ -1,4 +1,5 @@ export enum NotificationQueueMessageType { AddLogin = 0, ChangePassword = 1, + UnlockVault = 2, } diff --git a/apps/browser/src/background/nativeMessaging.background.ts b/apps/browser/src/background/nativeMessaging.background.ts index 90c114a8650..d393022b7b9 100644 --- a/apps/browser/src/background/nativeMessaging.background.ts +++ b/apps/browser/src/background/nativeMessaging.background.ts @@ -10,7 +10,11 @@ import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/pl import { StateService } from "@bitwarden/common/platform/abstractions/state.service"; import { Utils } from "@bitwarden/common/platform/misc/utils"; import { EncString } from "@bitwarden/common/platform/models/domain/enc-string"; -import { SymmetricCryptoKey } from "@bitwarden/common/platform/models/domain/symmetric-crypto-key"; +import { + MasterKey, + SymmetricCryptoKey, + UserKey, +} from "@bitwarden/common/platform/models/domain/symmetric-crypto-key"; import { BrowserApi } from "../platform/browser/browser-api"; @@ -42,6 +46,7 @@ type ReceiveMessage = { // Unlock key keyB64?: string; + userKeyB64?: string; }; type ReceiveMessageOuter = { @@ -59,8 +64,8 @@ export class NativeMessagingBackground { private port: browser.runtime.Port | chrome.runtime.Port; private resolver: any = null; - private privateKey: ArrayBuffer = null; - private publicKey: ArrayBuffer = null; + private privateKey: Uint8Array = null; + private publicKey: Uint8Array = null; private secureSetupResolve: any = null; private sharedSecret: SymmetricCryptoKey; private appId: string; @@ -129,7 +134,7 @@ export class NativeMessagingBackground { const encrypted = Utils.fromB64ToArray(message.sharedSecret); const decrypted = await this.cryptoFunctionService.rsaDecrypt( - encrypted.buffer, + encrypted, this.privateKey, EncryptionAlgorithm ); @@ -320,16 +325,55 @@ export class NativeMessagingBackground { } if (message.response === "unlocked") { - await this.cryptoService.setKey( - new SymmetricCryptoKey(Utils.fromB64ToArray(message.keyB64).buffer) - ); + try { + if (message.userKeyB64) { + const userKey = new SymmetricCryptoKey( + Utils.fromB64ToArray(message.userKeyB64) + ) as UserKey; + await this.cryptoService.setUserKey(userKey); + } else if (message.keyB64) { + // Backwards compatibility to support cases in which the user hasn't updated their desktop app + // TODO: Remove after 2023.10 release (https://bitwarden.atlassian.net/browse/PM-3472) + let encUserKey = await this.stateService.getEncryptedCryptoSymmetricKey(); + encUserKey ||= await this.stateService.getMasterKeyEncryptedUserKey(); + if (!encUserKey) { + throw new Error("No encrypted user key found"); + } + const masterKey = new SymmetricCryptoKey( + Utils.fromB64ToArray(message.keyB64) + ) as MasterKey; + const userKey = await this.cryptoService.decryptUserKeyWithMasterKey( + masterKey, + new EncString(encUserKey) + ); + await this.cryptoService.setMasterKey(masterKey); + await this.cryptoService.setUserKey(userKey); + } else { + throw new Error("No key received"); + } + } catch (e) { + this.logService.error("Unable to set key: " + e); + this.messagingService.send("showDialog", { + title: { key: "biometricsFailedTitle" }, + content: { key: "biometricsFailedDesc" }, + acceptButtonText: { key: "ok" }, + cancelButtonText: null, + type: "danger", + }); + + // Exit early + if (this.resolver) { + this.resolver(message); + } + return; + } // Verify key is correct by attempting to decrypt a secret try { await this.cryptoService.getFingerprint(await this.stateService.getUserId()); } catch (e) { this.logService.error("Unable to verify key: " + e); - await this.cryptoService.clearKey(); + await this.cryptoService.clearKeys(); this.showWrongUserDialog(); // Exit early diff --git a/apps/browser/src/background/runtime.background.ts b/apps/browser/src/background/runtime.background.ts index 81f7376a94d..ee15c0a3b9c 100644 --- a/apps/browser/src/background/runtime.background.ts +++ b/apps/browser/src/background/runtime.background.ts @@ -8,6 +8,7 @@ import { Utils } from "@bitwarden/common/platform/misc/utils"; import { AutofillService } from "../autofill/services/abstractions/autofill.service"; import { BrowserApi } from "../platform/browser/browser-api"; +import { BrowserPopoutWindowService } from "../platform/popup/abstractions/browser-popout-window.service"; import { BrowserEnvironmentService } from "../platform/services/browser-environment.service"; import BrowserPlatformUtilsService from "../platform/services/browser-platform-utils.service"; @@ -30,7 +31,8 @@ export default class RuntimeBackground { private environmentService: BrowserEnvironmentService, private messagingService: MessagingService, private logService: LogService, - private configService: ConfigServiceAbstraction + private configService: ConfigServiceAbstraction, + private browserPopoutWindowService: BrowserPopoutWindowService ) { // onInstalled listener must be wired up before anything else, so we do it in the ctor chrome.runtime.onInstalled.addListener((details: any) => { @@ -59,6 +61,8 @@ export default class RuntimeBackground { } async processMessage(msg: any, sender: chrome.runtime.MessageSender, sendResponse: any) { + const cipherId = msg.data?.cipherId; + switch (msg.command) { case "loggedIn": case "unlocked": { @@ -66,7 +70,7 @@ export default class RuntimeBackground { if (this.lockedVaultPendingNotifications?.length > 0) { item = this.lockedVaultPendingNotifications.pop(); - BrowserApi.closeBitwardenExtensionTab(); + await this.browserPopoutWindowService.closeUnlockPrompt(); } await this.main.refreshBadge(); @@ -105,13 +109,23 @@ export default class RuntimeBackground { await this.main.openPopup(); break; case "promptForLogin": - BrowserApi.openBitwardenExtensionTab("popup/index.html", true); + case "bgReopenPromptForLogin": + await this.browserPopoutWindowService.openUnlockPrompt(sender.tab?.windowId); + break; + case "passwordReprompt": + if (cipherId) { + await this.browserPopoutWindowService.openPasswordRepromptPrompt(sender.tab?.windowId, { + cipherId: cipherId, + senderTabId: sender.tab.id, + action: msg.data?.action, + }); + } break; case "openAddEditCipher": { const addEditCipherUrl = - msg.data?.cipherId == null + cipherId == null ? "popup/index.html#/edit-cipher" - : "popup/index.html#/edit-cipher?cipherId=" + msg.data.cipherId; + : "popup/index.html#/edit-cipher?cipherId=" + cipherId; BrowserApi.openBitwardenExtensionTab(addEditCipherUrl, true); break; diff --git a/apps/browser/src/background/service-factories/devices-api-service.factory.ts b/apps/browser/src/background/service-factories/devices-api-service.factory.ts new file mode 100644 index 00000000000..8999b7c2c72 --- /dev/null +++ b/apps/browser/src/background/service-factories/devices-api-service.factory.ts @@ -0,0 +1,28 @@ +import { DevicesApiServiceAbstraction } from "@bitwarden/common/auth/abstractions/devices-api.service.abstraction"; +import { DevicesApiServiceImplementation } from "@bitwarden/common/auth/services/devices-api.service.implementation"; + +import { + ApiServiceInitOptions, + apiServiceFactory, +} from "../../platform/background/service-factories/api-service.factory"; +import { + FactoryOptions, + CachedServices, + factory, +} from "../../platform/background/service-factories/factory-options"; + +type DevicesApiServiceFactoryOptions = FactoryOptions; + +export type DevicesApiServiceInitOptions = DevicesApiServiceFactoryOptions & ApiServiceInitOptions; + +export function devicesApiServiceFactory( + cache: { devicesApiService?: DevicesApiServiceAbstraction } & CachedServices, + opts: DevicesApiServiceInitOptions +): Promise { + return factory( + cache, + "devicesApiService", + opts, + async () => new DevicesApiServiceImplementation(await apiServiceFactory(cache, opts)) + ); +} diff --git a/apps/browser/src/background/service-factories/vault-timeout-service.factory.ts b/apps/browser/src/background/service-factories/vault-timeout-service.factory.ts index 601867ad385..b019db3297d 100644 --- a/apps/browser/src/background/service-factories/vault-timeout-service.factory.ts +++ b/apps/browser/src/background/service-factories/vault-timeout-service.factory.ts @@ -1,13 +1,9 @@ -import { VaultTimeoutService as AbstractVaultTimeoutService } from "@bitwarden/common/abstractions/vaultTimeout/vaultTimeout.service"; +import { VaultTimeoutService as AbstractVaultTimeoutService } from "@bitwarden/common/abstractions/vault-timeout/vault-timeout.service"; import { authServiceFactory, AuthServiceInitOptions, } from "../../auth/background/service-factories/auth-service.factory"; -import { - keyConnectorServiceFactory, - KeyConnectorServiceInitOptions, -} from "../../auth/background/service-factories/key-connector-service.factory"; import { CryptoServiceInitOptions, cryptoServiceFactory, @@ -29,7 +25,7 @@ import { StateServiceInitOptions, stateServiceFactory, } from "../../platform/background/service-factories/state-service.factory"; -import VaultTimeoutService from "../../services/vaultTimeout/vaultTimeout.service"; +import VaultTimeoutService from "../../services/vault-timeout/vault-timeout.service"; import { cipherServiceFactory, CipherServiceInitOptions, @@ -64,7 +60,6 @@ export type VaultTimeoutServiceInitOptions = VaultTimeoutServiceFactoryOptions & PlatformUtilsServiceInitOptions & MessagingServiceInitOptions & SearchServiceInitOptions & - KeyConnectorServiceInitOptions & StateServiceInitOptions & AuthServiceInitOptions & VaultTimeoutSettingsServiceInitOptions; @@ -86,7 +81,6 @@ export function vaultTimeoutServiceFactory( await platformUtilsServiceFactory(cache, opts), await messagingServiceFactory(cache, opts), await searchServiceFactory(cache, opts), - await keyConnectorServiceFactory(cache, opts), await stateServiceFactory(cache, opts), await authServiceFactory(cache, opts), await vaultTimeoutSettingsServiceFactory(cache, opts), diff --git a/apps/browser/src/background/service-factories/vault-timeout-settings-service.factory.ts b/apps/browser/src/background/service-factories/vault-timeout-settings-service.factory.ts index 724993127b7..eda86c0a156 100644 --- a/apps/browser/src/background/service-factories/vault-timeout-settings-service.factory.ts +++ b/apps/browser/src/background/service-factories/vault-timeout-settings-service.factory.ts @@ -1,5 +1,5 @@ -import { VaultTimeoutSettingsService as AbstractVaultTimeoutSettingsService } from "@bitwarden/common/abstractions/vaultTimeout/vaultTimeoutSettings.service"; -import { VaultTimeoutSettingsService } from "@bitwarden/common/services/vaultTimeout/vaultTimeoutSettings.service"; +import { VaultTimeoutSettingsService as AbstractVaultTimeoutSettingsService } from "@bitwarden/common/abstractions/vault-timeout/vault-timeout-settings.service"; +import { VaultTimeoutSettingsService } from "@bitwarden/common/services/vault-timeout/vault-timeout-settings.service"; import { policyServiceFactory, @@ -9,6 +9,10 @@ import { tokenServiceFactory, TokenServiceInitOptions, } from "../../auth/background/service-factories/token-service.factory"; +import { + userVerificationServiceFactory, + UserVerificationServiceInitOptions, +} from "../../auth/background/service-factories/user-verification-service.factory"; import { CryptoServiceInitOptions, cryptoServiceFactory, @@ -29,7 +33,8 @@ export type VaultTimeoutSettingsServiceInitOptions = VaultTimeoutSettingsService CryptoServiceInitOptions & TokenServiceInitOptions & PolicyServiceInitOptions & - StateServiceInitOptions; + StateServiceInitOptions & + UserVerificationServiceInitOptions; export function vaultTimeoutSettingsServiceFactory( cache: { vaultTimeoutSettingsService?: AbstractVaultTimeoutSettingsService } & CachedServices, @@ -44,7 +49,8 @@ export function vaultTimeoutSettingsServiceFactory( await cryptoServiceFactory(cache, opts), await tokenServiceFactory(cache, opts), await policyServiceFactory(cache, opts), - await stateServiceFactory(cache, opts) + await stateServiceFactory(cache, opts), + await userVerificationServiceFactory(cache, opts) ) ); } diff --git a/apps/browser/src/manifest.json b/apps/browser/src/manifest.json index a23032ae6a2..7e471c39201 100644 --- a/apps/browser/src/manifest.json +++ b/apps/browser/src/manifest.json @@ -2,7 +2,7 @@ "manifest_version": 2, "name": "__MSG_extName__", "short_name": "__MSG_appName__", - "version": "2023.7.1", + "version": "2023.8.2", "description": "__MSG_extDesc__", "default_locale": "en", "author": "Bitwarden Inc.", @@ -105,7 +105,7 @@ "applications": { "gecko": { "id": "{446900e4-71c2-419f-a6a7-df9c091e268b}", - "strict_min_version": "42.0" + "strict_min_version": "91.0" } }, "sidebar_action": { diff --git a/apps/browser/src/manifest.v3.json b/apps/browser/src/manifest.v3.json index 9a742e64e48..321fdb0beb4 100644 --- a/apps/browser/src/manifest.v3.json +++ b/apps/browser/src/manifest.v3.json @@ -3,7 +3,7 @@ "minimum_chrome_version": "102.0", "name": "__MSG_extName__", "short_name": "__MSG_appName__", - "version": "2023.7.1", + "version": "2023.8.2", "description": "__MSG_extDesc__", "default_locale": "en", "author": "Bitwarden Inc.", @@ -113,7 +113,7 @@ "applications": { "gecko": { "id": "{446900e4-71c2-419f-a6a7-df9c091e268b}", - "strict_min_version": "42.0" + "strict_min_version": "91.0" } }, "sidebar_action": { diff --git a/apps/browser/src/platform/background.ts b/apps/browser/src/platform/background.ts index 949991df9f0..f7913dade9f 100644 --- a/apps/browser/src/platform/background.ts +++ b/apps/browser/src/platform/background.ts @@ -8,6 +8,7 @@ import { onCommandListener, onInstallListener, runtimeMessageListener, + windowsOnFocusChangedListener, tabsOnActivatedListener, tabsOnReplacedListener, tabsOnUpdatedListener, @@ -18,6 +19,7 @@ if (BrowserApi.manifestVersion === 3) { chrome.runtime.onInstalled.addListener(onInstallListener); chrome.alarms.onAlarm.addListener(onAlarmListener); registerAlarms(); + chrome.windows.onFocusChanged.addListener(windowsOnFocusChangedListener); chrome.tabs.onActivated.addListener(tabsOnActivatedListener); chrome.tabs.onReplaced.addListener(tabsOnReplacedListener); chrome.tabs.onUpdated.addListener(tabsOnUpdatedListener); diff --git a/apps/browser/src/platform/background/service-factories/state-migration-service.factory.ts b/apps/browser/src/platform/background/service-factories/state-migration-service.factory.ts deleted file mode 100644 index 8d4ee969583..00000000000 --- a/apps/browser/src/platform/background/service-factories/state-migration-service.factory.ts +++ /dev/null @@ -1,40 +0,0 @@ -import { StateFactory } from "@bitwarden/common/platform/factories/state-factory"; -import { GlobalState } from "@bitwarden/common/platform/models/domain/global-state"; -import { StateMigrationService } from "@bitwarden/common/platform/services/state-migration.service"; - -import { Account } from "../../../models/account"; - -import { CachedServices, factory, FactoryOptions } from "./factory-options"; -import { - diskStorageServiceFactory, - DiskStorageServiceInitOptions, - secureStorageServiceFactory, - SecureStorageServiceInitOptions, -} from "./storage-service.factory"; - -type StateMigrationServiceFactoryOptions = FactoryOptions & { - stateMigrationServiceOptions: { - stateFactory: StateFactory; - }; -}; - -export type StateMigrationServiceInitOptions = StateMigrationServiceFactoryOptions & - DiskStorageServiceInitOptions & - SecureStorageServiceInitOptions; - -export function stateMigrationServiceFactory( - cache: { stateMigrationService?: StateMigrationService } & CachedServices, - opts: StateMigrationServiceInitOptions -): Promise { - return factory( - cache, - "stateMigrationService", - opts, - async () => - new StateMigrationService( - await diskStorageServiceFactory(cache, opts), - await secureStorageServiceFactory(cache, opts), - opts.stateMigrationServiceOptions.stateFactory - ) - ); -} diff --git a/apps/browser/src/platform/background/service-factories/state-service.factory.ts b/apps/browser/src/platform/background/service-factories/state-service.factory.ts index f926d428890..7d3aaf9b6f3 100644 --- a/apps/browser/src/platform/background/service-factories/state-service.factory.ts +++ b/apps/browser/src/platform/background/service-factories/state-service.factory.ts @@ -6,10 +6,6 @@ import { BrowserStateService } from "../../services/browser-state.service"; import { CachedServices, factory, FactoryOptions } from "./factory-options"; import { logServiceFactory, LogServiceInitOptions } from "./log-service.factory"; -import { - stateMigrationServiceFactory, - StateMigrationServiceInitOptions, -} from "./state-migration-service.factory"; import { diskStorageServiceFactory, secureStorageServiceFactory, @@ -30,8 +26,7 @@ export type StateServiceInitOptions = StateServiceFactoryOptions & DiskStorageServiceInitOptions & SecureStorageServiceInitOptions & MemoryStorageServiceInitOptions & - LogServiceInitOptions & - StateMigrationServiceInitOptions; + LogServiceInitOptions; export async function stateServiceFactory( cache: { stateService?: BrowserStateService } & CachedServices, @@ -47,7 +42,6 @@ export async function stateServiceFactory( await secureStorageServiceFactory(cache, opts), await memoryStorageServiceFactory(cache, opts), await logServiceFactory(cache, opts), - await stateMigrationServiceFactory(cache, opts), opts.stateServiceOptions.stateFactory, opts.stateServiceOptions.useAccountCache ) diff --git a/apps/browser/src/platform/browser/browser-api.ts b/apps/browser/src/platform/browser/browser-api.ts index 7c646e5c7e6..675fd0b119e 100644 --- a/apps/browser/src/platform/browser/browser-api.ts +++ b/apps/browser/src/platform/browser/browser-api.ts @@ -17,6 +17,24 @@ export class BrowserApi { return chrome.runtime.getManifest().manifest_version; } + static getWindow(windowId?: number): Promise | void { + if (!windowId) { + return; + } + + return new Promise((resolve) => + chrome.windows.get(windowId, { populate: true }, (window) => resolve(window)) + ); + } + + static async createWindow(options: chrome.windows.CreateData): Promise { + return new Promise((resolve) => + chrome.windows.create(options, (window) => { + resolve(window); + }) + ); + } + static async getTabFromCurrentWindowId(): Promise | null { return await BrowserApi.tabsQueryFirst({ active: true, @@ -24,11 +42,20 @@ export class BrowserApi { }); } - static async getTab(tabId: number) { - if (tabId == null) { + static async getTab(tabId: number): Promise | null { + if (!tabId) { return null; } - return await chrome.tabs.get(tabId); + + if (BrowserApi.manifestVersion === 3) { + return await chrome.tabs.get(tabId); + } + + return new Promise((resolve) => + chrome.tabs.get(tabId, (tab) => { + resolve(tab); + }) + ); } static async getTabFromCurrentWindow(): Promise | null { @@ -105,6 +132,10 @@ export class BrowserApi { chrome.tabs.sendMessage(tabId, message, options, responseCallback); } + static async removeTab(tabId: number) { + await chrome.tabs.remove(tabId); + } + static async getPrivateModeWindows(): Promise { return (await browser.windows.getAll()).filter((win) => win.incognito); } @@ -165,7 +196,7 @@ export class BrowserApi { } const tabToClose = tabs[tabs.length - 1]; - chrome.tabs.remove(tabToClose.id); + BrowserApi.removeTab(tabToClose.id); } private static registeredMessageListeners: any[] = []; diff --git a/apps/browser/src/platform/listeners/index.ts b/apps/browser/src/platform/listeners/index.ts index cf4950023f3..60e304402aa 100644 --- a/apps/browser/src/platform/listeners/index.ts +++ b/apps/browser/src/platform/listeners/index.ts @@ -6,6 +6,11 @@ import { onCommandListener } from "./on-command-listener"; import { onInstallListener } from "./on-install-listener"; import { UpdateBadge } from "./update-badge"; +const windowsOnFocusChangedListener = combine([ + UpdateBadge.windowsOnFocusChangedListener, + CipherContextMenuHandler.windowsOnFocusChangedListener, +]); + const tabsOnActivatedListener = combine([ UpdateBadge.tabsOnActivatedListener, CipherContextMenuHandler.tabsOnActivatedListener, @@ -33,6 +38,7 @@ const runtimeMessageListener = combine< ]); export { + windowsOnFocusChangedListener, tabsOnActivatedListener, tabsOnReplacedListener, tabsOnUpdatedListener, diff --git a/apps/browser/src/platform/listeners/on-command-listener.ts b/apps/browser/src/platform/listeners/on-command-listener.ts index 65af31e173c..0e2cf03828d 100644 --- a/apps/browser/src/platform/listeners/on-command-listener.ts +++ b/apps/browser/src/platform/listeners/on-command-listener.ts @@ -47,9 +47,6 @@ const doAutoFillLogin = async (tab: chrome.tabs.Tab): Promise => { stateServiceOptions: { stateFactory: new StateFactory(GlobalState, Account), }, - stateMigrationServiceOptions: { - stateFactory: new StateFactory(GlobalState, Account), - }, apiServiceOptions: { logoutCallback: () => Promise.resolve(), }, @@ -94,9 +91,6 @@ const doGeneratePasswordToClipboard = async (tab: chrome.tabs.Tab): Promise Promise.resolve(), win: self, }, - stateMigrationServiceOptions: { - stateFactory: stateFactory, - }, stateServiceOptions: { stateFactory: stateFactory, }, diff --git a/apps/browser/src/platform/listeners/on-install-listener.ts b/apps/browser/src/platform/listeners/on-install-listener.ts index 480e811fd26..0394941e283 100644 --- a/apps/browser/src/platform/listeners/on-install-listener.ts +++ b/apps/browser/src/platform/listeners/on-install-listener.ts @@ -23,9 +23,6 @@ export async function onInstallListener(details: chrome.runtime.InstalledDetails stateServiceOptions: { stateFactory: new StateFactory(GlobalState, Account), }, - stateMigrationServiceOptions: { - stateFactory: new StateFactory(GlobalState, Account), - }, }; const environmentService = await environmentServiceFactory(cache, opts); diff --git a/apps/browser/src/platform/listeners/update-badge.ts b/apps/browser/src/platform/listeners/update-badge.ts index 4623ff30f05..1b692eb9b97 100644 --- a/apps/browser/src/platform/listeners/update-badge.ts +++ b/apps/browser/src/platform/listeners/update-badge.ts @@ -42,6 +42,13 @@ export class UpdateBadge { "deletedCipher", ]; + static async windowsOnFocusChangedListener( + windowId: number, + serviceCache: Record + ) { + await new UpdateBadge(self).run({ windowId, existingServices: serviceCache }); + } + static async tabsOnActivatedListener( activeInfo: chrome.tabs.TabActiveInfo, serviceCache: Record @@ -265,9 +272,6 @@ export class UpdateBadge { stateServiceOptions: { stateFactory: new StateFactory(GlobalState, Account), }, - stateMigrationServiceOptions: { - stateFactory: new StateFactory(GlobalState, Account), - }, apiServiceOptions: { logoutCallback: () => Promise.reject("not implemented"), }, diff --git a/apps/browser/src/platform/popup/abstractions/browser-popout-window.service.ts b/apps/browser/src/platform/popup/abstractions/browser-popout-window.service.ts new file mode 100644 index 00000000000..0b3f55ee990 --- /dev/null +++ b/apps/browser/src/platform/popup/abstractions/browser-popout-window.service.ts @@ -0,0 +1,15 @@ +interface BrowserPopoutWindowService { + openUnlockPrompt(senderWindowId: number): Promise; + closeUnlockPrompt(): Promise; + openPasswordRepromptPrompt( + senderWindowId: number, + promptData: { + action: string; + cipherId: string; + senderTabId: number; + } + ): Promise; + closePasswordRepromptPrompt(): Promise; +} + +export { BrowserPopoutWindowService }; diff --git a/apps/browser/src/platform/popup/browser-popout-window.service.ts b/apps/browser/src/platform/popup/browser-popout-window.service.ts new file mode 100644 index 00000000000..ee03e3a2ec4 --- /dev/null +++ b/apps/browser/src/platform/popup/browser-popout-window.service.ts @@ -0,0 +1,87 @@ +import { BrowserApi } from "../browser/browser-api"; + +import { BrowserPopoutWindowService as BrowserPopupWindowServiceInterface } from "./abstractions/browser-popout-window.service"; + +class BrowserPopoutWindowService implements BrowserPopupWindowServiceInterface { + private singleActionPopoutTabIds: Record = {}; + private defaultPopoutWindowOptions: chrome.windows.CreateData = { + type: "normal", + focused: true, + width: 500, + height: 800, + }; + + async openUnlockPrompt(senderWindowId: number) { + await this.openSingleActionPopout( + senderWindowId, + "popup/index.html?uilocation=popout", + "unlockPrompt" + ); + } + + async closeUnlockPrompt() { + await this.closeSingleActionPopout("unlockPrompt"); + } + + async openPasswordRepromptPrompt( + senderWindowId: number, + { + cipherId, + senderTabId, + action, + }: { + cipherId: string; + senderTabId: number; + action: string; + } + ) { + const promptWindowPath = + "popup/index.html#/view-cipher" + + "?uilocation=popout" + + `&cipherId=${cipherId}` + + `&senderTabId=${senderTabId}` + + `&action=${action}`; + + await this.openSingleActionPopout(senderWindowId, promptWindowPath, "passwordReprompt"); + } + + async closePasswordRepromptPrompt() { + await this.closeSingleActionPopout("passwordReprompt"); + } + + private async openSingleActionPopout( + senderWindowId: number, + popupWindowURL: string, + singleActionPopoutKey: string + ) { + const senderWindow = senderWindowId && (await BrowserApi.getWindow(senderWindowId)); + const url = chrome.extension.getURL(popupWindowURL); + const offsetRight = 15; + const offsetTop = 90; + const popupWidth = this.defaultPopoutWindowOptions.width; + const windowOptions = senderWindow + ? { + ...this.defaultPopoutWindowOptions, + url, + left: senderWindow.left + senderWindow.width - popupWidth - offsetRight, + top: senderWindow.top + offsetTop, + } + : { ...this.defaultPopoutWindowOptions, url }; + + const popupWindow = await BrowserApi.createWindow(windowOptions); + + await this.closeSingleActionPopout(singleActionPopoutKey); + this.singleActionPopoutTabIds[singleActionPopoutKey] = popupWindow?.tabs[0].id; + } + + private async closeSingleActionPopout(popoutKey: string) { + const tabId = this.singleActionPopoutTabIds[popoutKey]; + + if (tabId) { + await BrowserApi.removeTab(tabId); + } + this.singleActionPopoutTabIds[popoutKey] = null; + } +} + +export default BrowserPopoutWindowService; diff --git a/apps/browser/src/platform/services/browser-crypto.service.ts b/apps/browser/src/platform/services/browser-crypto.service.ts index 1018c270cb2..a6dce0f39e9 100644 --- a/apps/browser/src/platform/services/browser-crypto.service.ts +++ b/apps/browser/src/platform/services/browser-crypto.service.ts @@ -1,13 +1,32 @@ import { KeySuffixOptions } from "@bitwarden/common/enums"; +import { Utils } from "@bitwarden/common/platform/misc/utils"; +import { + SymmetricCryptoKey, + UserKey, +} from "@bitwarden/common/platform/models/domain/symmetric-crypto-key"; import { CryptoService } from "@bitwarden/common/platform/services/crypto.service"; export class BrowserCryptoService extends CryptoService { - protected async retrieveKeyFromStorage(keySuffix: KeySuffixOptions) { - if (keySuffix === "biometric") { + override async hasUserKeyStored(keySuffix: KeySuffixOptions, userId?: string): Promise { + if (keySuffix === KeySuffixOptions.Biometric) { + return await this.stateService.getBiometricUnlock({ userId: userId }); + } + return super.hasUserKeyStored(keySuffix, userId); + } + + /** + * Browser doesn't store biometric keys, so we retrieve them from the desktop and return + * if we successfully saved it into memory as the User Key + */ + protected override async getKeyFromStorage(keySuffix: KeySuffixOptions): Promise { + if (keySuffix === KeySuffixOptions.Biometric) { await this.platformUtilService.authenticateBiometric(); - return (await this.getKey())?.keyB64; + const userKey = await this.stateService.getUserKey(); + if (userKey) { + return new SymmetricCryptoKey(Utils.fromB64ToArray(userKey.keyB64)) as UserKey; + } } - return await super.retrieveKeyFromStorage(keySuffix); + return await super.getKeyFromStorage(keySuffix); } } diff --git a/apps/browser/src/platform/services/browser-platform-utils.service.ts b/apps/browser/src/platform/services/browser-platform-utils.service.ts index 79c52d615fb..018b1c623dc 100644 --- a/apps/browser/src/platform/services/browser-platform-utils.service.ts +++ b/apps/browser/src/platform/services/browser-platform-utils.service.ts @@ -314,10 +314,6 @@ export default class BrowserPlatformUtilsService implements PlatformUtilsService return false; } - if (this.isFirefox()) { - return parseInt((await browser.runtime.getBrowserInfo()).version.split(".")[0], 10) >= 87; - } - return true; } diff --git a/apps/browser/src/platform/services/browser-state.service.spec.ts b/apps/browser/src/platform/services/browser-state.service.spec.ts index 874e13b7d8f..0712416172c 100644 --- a/apps/browser/src/platform/services/browser-state.service.spec.ts +++ b/apps/browser/src/platform/services/browser-state.service.spec.ts @@ -8,7 +8,6 @@ import { import { StateFactory } from "@bitwarden/common/platform/factories/state-factory"; import { GlobalState } from "@bitwarden/common/platform/models/domain/global-state"; import { State } from "@bitwarden/common/platform/models/domain/state"; -import { StateMigrationService } from "@bitwarden/common/platform/services/state-migration.service"; import { SendType } from "@bitwarden/common/tools/send/enums/send-type"; import { SendView } from "@bitwarden/common/tools/send/models/view/send.view"; @@ -26,7 +25,6 @@ describe("Browser State Service", () => { let secureStorageService: MockProxy; let diskStorageService: MockProxy; let logService: MockProxy; - let stateMigrationService: MockProxy; let stateFactory: MockProxy>; let useAccountCache: boolean; @@ -39,9 +37,9 @@ describe("Browser State Service", () => { secureStorageService = mock(); diskStorageService = mock(); logService = mock(); - stateMigrationService = mock(); stateFactory = mock(); - useAccountCache = true; + // turn off account cache for tests + useAccountCache = false; state = new State(new GlobalState()); state.accounts[userId] = new Account({ @@ -63,7 +61,6 @@ describe("Browser State Service", () => { secureStorageService, memoryStorageService, logService, - stateMigrationService, stateFactory, useAccountCache ); diff --git a/apps/browser/src/platform/services/browser-state.service.ts b/apps/browser/src/platform/services/browser-state.service.ts index 37f50d6dc77..5e356e7fbe8 100644 --- a/apps/browser/src/platform/services/browser-state.service.ts +++ b/apps/browser/src/platform/services/browser-state.service.ts @@ -1,5 +1,11 @@ import { BehaviorSubject } from "rxjs"; +import { LogService } from "@bitwarden/common/platform/abstractions/log.service"; +import { + AbstractStorageService, + AbstractMemoryStorageService, +} from "@bitwarden/common/platform/abstractions/storage.service"; +import { StateFactory } from "@bitwarden/common/platform/factories/state-factory"; import { GlobalState } from "@bitwarden/common/platform/models/domain/global-state"; import { StorageOptions } from "@bitwarden/common/platform/models/domain/storage-options"; import { StateService as BaseStateService } from "@bitwarden/common/platform/services/state.service"; @@ -26,14 +32,42 @@ export class BrowserStateService protected activeAccountSubject: BehaviorSubject; @sessionSync({ initializer: (b: boolean) => b }) protected activeAccountUnlockedSubject: BehaviorSubject; - @sessionSync({ - initializer: Account.fromJSON as any, // TODO: Remove this any when all any types are removed from Account - initializeAs: "record", - }) - protected accountDiskCache: BehaviorSubject>; protected accountDeserializer = Account.fromJSON; + constructor( + storageService: AbstractStorageService, + secureStorageService: AbstractStorageService, + memoryStorageService: AbstractMemoryStorageService, + logService: LogService, + stateFactory: StateFactory, + useAccountCache = true + ) { + super( + storageService, + secureStorageService, + memoryStorageService, + logService, + stateFactory, + useAccountCache + ); + + // TODO: This is a hack to fix having a disk cache on both the popup and + // the background page that can get out of sync. We need to work out the + // best way to handle caching with multiple instances of the state service. + if (useAccountCache) { + chrome.storage.onChanged.addListener((changes, namespace) => { + if (namespace === "local") { + for (const key of Object.keys(changes)) { + if (key !== "accountActivity" && this.accountDiskCache.value[key]) { + this.deleteDiskCache(key); + } + } + } + }); + } + } + async addAccount(account: Account) { // Apply browser overrides to default account values account = new Account(account); @@ -132,4 +166,17 @@ export class BrowserStateService this.reconcileOptions(options, await this.defaultInMemoryOptions()) ); } + + // Overriding the base class to prevent deleting the cache on save. We register a storage listener + // to delete the cache in the constructor above. + protected override async saveAccountToDisk( + account: Account, + options: StorageOptions + ): Promise { + const storageLocation = options.useSecureStorage + ? this.secureStorageService + : this.storageService; + + await storageLocation.save(`${options.userId}`, account, options); + } } diff --git a/apps/browser/src/platform/services/local-backed-session-storage.service.spec.ts b/apps/browser/src/platform/services/local-backed-session-storage.service.spec.ts index d2da5f6fc1a..49465414721 100644 --- a/apps/browser/src/platform/services/local-backed-session-storage.service.spec.ts +++ b/apps/browser/src/platform/services/local-backed-session-storage.service.spec.ts @@ -21,9 +21,7 @@ describe("Browser Session Storage Service", () => { let localStorage: BrowserLocalStorageService; let sessionStorage: BrowserMemoryStorageService; - const key = new SymmetricCryptoKey( - Utils.fromUtf8ToArray("00000000000000000000000000000000").buffer - ); + const key = new SymmetricCryptoKey(Utils.fromUtf8ToArray("00000000000000000000000000000000")); let getSessionKeySpy: jest.SpyInstance; const mockEnc = (input: string) => Promise.resolve(new EncString("ENCRYPTED" + input)); diff --git a/apps/browser/src/popup/app-routing.module.ts b/apps/browser/src/popup/app-routing.module.ts index 7da3d3049f7..8ef51913f6d 100644 --- a/apps/browser/src/popup/app-routing.module.ts +++ b/apps/browser/src/popup/app-routing.module.ts @@ -1,14 +1,21 @@ import { Injectable, NgModule } from "@angular/core"; import { ActivatedRouteSnapshot, RouteReuseStrategy, RouterModule, Routes } from "@angular/router"; -import { AuthGuard } from "@bitwarden/angular/auth/guards/auth.guard"; -import { LockGuard } from "@bitwarden/angular/auth/guards/lock.guard"; -import { UnauthGuard } from "@bitwarden/angular/auth/guards/unauth.guard"; +import { + redirectGuard, + AuthGuard, + lockGuard, + tdeDecryptionRequiredGuard, + UnauthGuard, +} from "@bitwarden/angular/auth/guards"; +import { canAccessFeature } from "@bitwarden/angular/guard/feature-flag.guard"; +import { FeatureFlag } from "@bitwarden/common/enums/feature-flag.enum"; import { EnvironmentComponent } from "../auth/popup/environment.component"; import { HintComponent } from "../auth/popup/hint.component"; import { HomeComponent } from "../auth/popup/home.component"; import { LockComponent } from "../auth/popup/lock.component"; +import { LoginDecryptionOptionsComponent } from "../auth/popup/login-decryption-options/login-decryption-options.component"; import { LoginWithDeviceComponent } from "../auth/popup/login-with-device.component"; import { LoginComponent } from "../auth/popup/login.component"; import { RegisterComponent } from "../auth/popup/register.component"; @@ -49,8 +56,11 @@ import { TabsComponent } from "./tabs.component"; const routes: Routes = [ { path: "", - redirectTo: "home", pathMatch: "full", + children: [], // Children lets us have an empty component. + canActivate: [ + redirectGuard({ loggedIn: "/tabs/current", loggedOut: "/home", locked: "/lock" }), + ], }, { path: "vault", @@ -72,13 +82,19 @@ const routes: Routes = [ { path: "login-with-device", component: LoginWithDeviceComponent, - canActivate: [UnauthGuard], + canActivate: [], + data: { state: "login-with-device" }, + }, + { + path: "admin-approval-requested", + component: LoginWithDeviceComponent, + canActivate: [], data: { state: "login-with-device" }, }, { path: "lock", component: LockComponent, - canActivate: [LockGuard], + canActivate: [lockGuard()], data: { state: "lock" }, }, { @@ -93,6 +109,14 @@ const routes: Routes = [ canActivate: [UnauthGuard], data: { state: "2fa-options" }, }, + { + path: "login-initiated", + component: LoginDecryptionOptionsComponent, + canActivate: [ + tdeDecryptionRequiredGuard(), + canAccessFeature(FeatureFlag.TrustedDeviceEncryption), + ], + }, { path: "sso", component: SsoComponent, diff --git a/apps/browser/src/popup/app.component.ts b/apps/browser/src/popup/app.component.ts index 485b283407e..815109c5499 100644 --- a/apps/browser/src/popup/app.component.ts +++ b/apps/browser/src/popup/app.component.ts @@ -12,12 +12,12 @@ import { IndividualConfig, ToastrService } from "ngx-toastr"; import { filter, concatMap, Subject, takeUntil } from "rxjs"; import Swal from "sweetalert2"; -import { DialogServiceAbstraction, SimpleDialogOptions } from "@bitwarden/angular/services/dialog"; import { AuthService } from "@bitwarden/common/auth/abstractions/auth.service"; import { BroadcasterService } from "@bitwarden/common/platform/abstractions/broadcaster.service"; import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; import { MessagingService } from "@bitwarden/common/platform/abstractions/messaging.service"; import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service"; +import { DialogService, SimpleDialogOptions } from "@bitwarden/components"; import { BrowserApi } from "../platform/browser/browser-api"; import { BrowserStateService } from "../platform/services/abstractions/browser-state.service"; @@ -50,7 +50,7 @@ export class AppComponent implements OnInit, OnDestroy { private ngZone: NgZone, private sanitizer: DomSanitizer, private platformUtilsService: PlatformUtilsService, - private dialogService: DialogServiceAbstraction + private dialogService: DialogService ) {} async ngOnInit() { diff --git a/apps/browser/src/popup/app.module.ts b/apps/browser/src/popup/app.module.ts index 3665df7decc..f7539d6fa6e 100644 --- a/apps/browser/src/popup/app.module.ts +++ b/apps/browser/src/popup/app.module.ts @@ -20,6 +20,7 @@ import { EnvironmentComponent } from "../auth/popup/environment.component"; import { HintComponent } from "../auth/popup/hint.component"; import { HomeComponent } from "../auth/popup/home.component"; import { LockComponent } from "../auth/popup/lock.component"; +import { LoginDecryptionOptionsComponent } from "../auth/popup/login-decryption-options/login-decryption-options.component"; import { LoginWithDeviceComponent } from "../auth/popup/login-with-device.component"; import { LoginComponent } from "../auth/popup/login.component"; import { RegisterComponent } from "../auth/popup/register.component"; @@ -121,6 +122,7 @@ import "../platform/popup/locales"; LockComponent, LoginComponent, LoginWithDeviceComponent, + LoginDecryptionOptionsComponent, OptionsComponent, GeneratorComponent, PasswordGeneratorHistoryComponent, diff --git a/apps/browser/src/popup/components/user-verification.component.html b/apps/browser/src/popup/components/user-verification.component.html index 8d7f1ed8706..25bd81cf394 100644 --- a/apps/browser/src/popup/components/user-verification.component.html +++ b/apps/browser/src/popup/components/user-verification.component.html @@ -1,4 +1,4 @@ - +
- +
- +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+

{{ "loggingInAs" | i18n }} {{ data.userEmail }}

+ {{ "notYou" | i18n }} +
+ +
+
diff --git a/apps/desktop/src/auth/login/login-decryption-options/login-decryption-options.component.ts b/apps/desktop/src/auth/login/login-decryption-options/login-decryption-options.component.ts new file mode 100644 index 00000000000..f64ec977ce7 --- /dev/null +++ b/apps/desktop/src/auth/login/login-decryption-options/login-decryption-options.component.ts @@ -0,0 +1,19 @@ +import { Component } from "@angular/core"; + +import { BaseLoginDecryptionOptionsComponent } from "@bitwarden/angular/auth/components/base-login-decryption-options.component"; + +@Component({ + selector: "desktop-login-decryption-options", + templateUrl: "login-decryption-options.component.html", +}) +export class LoginDecryptionOptionsComponent extends BaseLoginDecryptionOptionsComponent { + override async createUser(): Promise { + try { + await super.createUser(); + this.messagingService.send("redrawMenu"); + await this.router.navigate(["/vault"]); + } catch (error) { + this.validationService.showError(error); + } + } +} diff --git a/apps/desktop/src/auth/login/login-with-device.component.html b/apps/desktop/src/auth/login/login-with-device.component.html index 29fb1034942..a81c92ad1d1 100644 --- a/apps/desktop/src/auth/login/login-with-device.component.html +++ b/apps/desktop/src/auth/login/login-with-device.component.html @@ -1,40 +1,72 @@
Bitwarden -

{{ "logInInitiated" | i18n }}

-
-
-
-
-

{{ "notificationSentDevice" | i18n }}

-

- {{ "fingerprintMatchInfo" | i18n }} -

-
+ +

{{ "loginInitiated" | i18n }}

-
-

{{ "fingerprintPhraseHeader" | i18n }}

- {{ fingerprintPhrase }} -
+
+
+
+
+

{{ "notificationSentDevice" | i18n }}

+

+ {{ "fingerprintMatchInfo" | i18n }} +

+
- +
+

{{ "fingerprintPhraseHeader" | i18n }}

+ {{ fingerprintPhrase }} +
-
-

- {{ "needAnotherOption" | i18n }} - - {{ "viewAllLoginOptions" | i18n }} - -

+ + +
+

+ {{ "needAnotherOption" | i18n }} + + {{ "viewAllLoginOptions" | i18n }} + +

+
-
+
+ + +

{{ "adminApprovalRequested" | i18n }}

+ +
+
+
+
+

{{ "adminApprovalRequestSentToAdmins" | i18n }}

+

{{ "youWillBeNotifiedOnceApproved" | i18n }}

+
+ +
+

{{ "fingerprintPhraseHeader" | i18n }}

+ {{ fingerprintPhrase }} +
+ +
+

+ {{ "troubleLoggingIn" | i18n }} + + {{ "viewAllLoginOptions" | i18n }} + +

+
+
+
+
+
diff --git a/apps/desktop/src/auth/login/login-with-device.component.ts b/apps/desktop/src/auth/login/login-with-device.component.ts index 3b3ee83ae49..daca2d19936 100644 --- a/apps/desktop/src/auth/login/login-with-device.component.ts +++ b/apps/desktop/src/auth/login/login-with-device.component.ts @@ -1,3 +1,4 @@ +import { Location } from "@angular/common"; import { Component, OnDestroy, OnInit, ViewChild, ViewContainerRef } from "@angular/core"; import { Router } from "@angular/router"; @@ -5,7 +6,9 @@ import { LoginWithDeviceComponent as BaseLoginWithDeviceComponent } from "@bitwa import { ModalService } from "@bitwarden/angular/services/modal.service"; import { AnonymousHubService } from "@bitwarden/common/abstractions/anonymousHub.service"; import { ApiService } from "@bitwarden/common/abstractions/api.service"; +import { AuthRequestCryptoServiceAbstraction } from "@bitwarden/common/auth/abstractions/auth-request-crypto.service.abstraction"; import { AuthService } from "@bitwarden/common/auth/abstractions/auth.service"; +import { DeviceTrustCryptoServiceAbstraction } from "@bitwarden/common/auth/abstractions/device-trust-crypto.service.abstraction"; import { LoginService } from "@bitwarden/common/auth/abstractions/login.service"; import { AppIdService } from "@bitwarden/common/platform/abstractions/app-id.service"; import { CryptoFunctionService } from "@bitwarden/common/platform/abstractions/crypto-function.service"; @@ -50,7 +53,10 @@ export class LoginWithDeviceComponent private modalService: ModalService, syncService: SyncService, stateService: StateService, - loginService: LoginService + loginService: LoginService, + deviceTrustCryptoService: DeviceTrustCryptoServiceAbstraction, + authReqCryptoService: AuthRequestCryptoServiceAbstraction, + private location: Location ) { super( router, @@ -67,7 +73,9 @@ export class LoginWithDeviceComponent anonymousHubService, validationService, stateService, - loginService + loginService, + deviceTrustCryptoService, + authReqCryptoService ); super.onSuccessfulLogin = () => { @@ -100,7 +108,7 @@ export class LoginWithDeviceComponent super.ngOnDestroy(); } - goToLogin() { - this.router.navigate(["/login"]); + back() { + this.location.back(); } } diff --git a/apps/desktop/src/auth/login/login.component.ts b/apps/desktop/src/auth/login/login.component.ts index 00aa0300f61..d1c6c88d14b 100644 --- a/apps/desktop/src/auth/login/login.component.ts +++ b/apps/desktop/src/auth/login/login.component.ts @@ -7,8 +7,8 @@ import { EnvironmentSelectorComponent } from "@bitwarden/angular/auth/components import { LoginComponent as BaseLoginComponent } from "@bitwarden/angular/auth/components/login.component"; import { FormValidationErrorsService } from "@bitwarden/angular/platform/abstractions/form-validation-errors.service"; import { ModalService } from "@bitwarden/angular/services/modal.service"; -import { DevicesApiServiceAbstraction } from "@bitwarden/common/abstractions/devices/devices-api.service.abstraction"; import { AuthService } from "@bitwarden/common/auth/abstractions/auth.service"; +import { DevicesApiServiceAbstraction } from "@bitwarden/common/auth/abstractions/devices-api.service.abstraction"; import { LoginService } from "@bitwarden/common/auth/abstractions/login.service"; import { AppIdService } from "@bitwarden/common/platform/abstractions/app-id.service"; import { BroadcasterService } from "@bitwarden/common/platform/abstractions/broadcaster.service"; @@ -182,6 +182,6 @@ export class LoginComponent extends BaseLoginComponent implements OnDestroy { private focusInput() { const email = this.loggedEmail; - document.getElementById(email == null || email === "" ? "email" : "masterPassword").focus(); + document.getElementById(email == null || email === "" ? "email" : "masterPassword")?.focus(); } } diff --git a/apps/desktop/src/auth/login/login.module.ts b/apps/desktop/src/auth/login/login.module.ts index 35ad83e9db0..9fb2b28915a 100644 --- a/apps/desktop/src/auth/login/login.module.ts +++ b/apps/desktop/src/auth/login/login.module.ts @@ -5,12 +5,18 @@ import { EnvironmentSelectorComponent } from "@bitwarden/angular/auth/components import { SharedModule } from "../../app/shared/shared.module"; +import { LoginDecryptionOptionsComponent } from "./login-decryption-options/login-decryption-options.component"; import { LoginWithDeviceComponent } from "./login-with-device.component"; import { LoginComponent } from "./login.component"; @NgModule({ imports: [SharedModule, RouterModule], - declarations: [LoginComponent, LoginWithDeviceComponent, EnvironmentSelectorComponent], + declarations: [ + LoginComponent, + LoginWithDeviceComponent, + EnvironmentSelectorComponent, + LoginDecryptionOptionsComponent, + ], exports: [LoginComponent, LoginWithDeviceComponent], }) export class LoginModule {} diff --git a/apps/desktop/src/auth/register.component.ts b/apps/desktop/src/auth/register.component.ts index f4324f12379..db38fd4721c 100644 --- a/apps/desktop/src/auth/register.component.ts +++ b/apps/desktop/src/auth/register.component.ts @@ -4,7 +4,6 @@ import { Router } from "@angular/router"; import { RegisterComponent as BaseRegisterComponent } from "@bitwarden/angular/components/register.component"; import { FormValidationErrorsService } from "@bitwarden/angular/platform/abstractions/form-validation-errors.service"; -import { DialogServiceAbstraction } from "@bitwarden/angular/services/dialog"; import { ApiService } from "@bitwarden/common/abstractions/api.service"; import { AuditService } from "@bitwarden/common/abstractions/audit.service"; import { AuthService } from "@bitwarden/common/auth/abstractions/auth.service"; @@ -16,6 +15,7 @@ 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 { PasswordGenerationServiceAbstraction } from "@bitwarden/common/tools/generator/password"; +import { DialogService } from "@bitwarden/components"; const BroadcasterSubscriptionId = "RegisterComponent"; @@ -40,7 +40,7 @@ export class RegisterComponent extends BaseRegisterComponent implements OnInit, private ngZone: NgZone, logService: LogService, auditService: AuditService, - dialogService: DialogServiceAbstraction + dialogService: DialogService ) { super( formValidationErrorService, diff --git a/apps/desktop/src/auth/set-password.component.ts b/apps/desktop/src/auth/set-password.component.ts index b710e96b7ee..fedd70b3133 100644 --- a/apps/desktop/src/auth/set-password.component.ts +++ b/apps/desktop/src/auth/set-password.component.ts @@ -2,7 +2,6 @@ import { Component, NgZone, OnDestroy } from "@angular/core"; import { ActivatedRoute, Router } from "@angular/router"; import { SetPasswordComponent as BaseSetPasswordComponent } from "@bitwarden/angular/components/set-password.component"; -import { DialogServiceAbstraction } from "@bitwarden/angular/services/dialog"; import { ApiService } from "@bitwarden/common/abstractions/api.service"; import { OrganizationUserService } from "@bitwarden/common/abstractions/organization-user/organization-user.service"; import { OrganizationApiServiceAbstraction } from "@bitwarden/common/admin-console/abstractions/organization/organization-api.service.abstraction"; @@ -16,6 +15,7 @@ import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/pl import { StateService } from "@bitwarden/common/platform/abstractions/state.service"; import { PasswordGenerationServiceAbstraction } from "@bitwarden/common/tools/generator/password"; import { SyncService } from "@bitwarden/common/vault/abstractions/sync/sync.service.abstraction"; +import { DialogService } from "@bitwarden/components"; const BroadcasterSubscriptionId = "SetPasswordComponent"; @@ -41,7 +41,7 @@ export class SetPasswordComponent extends BaseSetPasswordComponent implements On stateService: StateService, organizationApiService: OrganizationApiServiceAbstraction, organizationUserService: OrganizationUserService, - dialogService: DialogServiceAbstraction + dialogService: DialogService ) { super( i18nService, diff --git a/apps/desktop/src/auth/sso.component.ts b/apps/desktop/src/auth/sso.component.ts index 75f380b0ed3..22badf9d69d 100644 --- a/apps/desktop/src/auth/sso.component.ts +++ b/apps/desktop/src/auth/sso.component.ts @@ -4,6 +4,7 @@ import { ActivatedRoute, Router } from "@angular/router"; import { SsoComponent as BaseSsoComponent } from "@bitwarden/angular/auth/components/sso.component"; import { ApiService } from "@bitwarden/common/abstractions/api.service"; import { AuthService } from "@bitwarden/common/auth/abstractions/auth.service"; +import { ConfigServiceAbstraction } from "@bitwarden/common/platform/abstractions/config/config.service.abstraction"; import { CryptoFunctionService } from "@bitwarden/common/platform/abstractions/crypto-function.service"; import { EnvironmentService } from "@bitwarden/common/platform/abstractions/environment.service"; import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; @@ -30,7 +31,8 @@ export class SsoComponent extends BaseSsoComponent { cryptoFunctionService: CryptoFunctionService, environmentService: EnvironmentService, passwordGenerationService: PasswordGenerationServiceAbstraction, - logService: LogService + logService: LogService, + configService: ConfigServiceAbstraction ) { super( authService, @@ -43,11 +45,17 @@ export class SsoComponent extends BaseSsoComponent { cryptoFunctionService, environmentService, passwordGenerationService, - logService + logService, + configService ); - super.onSuccessfulLogin = () => { - return syncService.fullSync(true); + super.onSuccessfulLogin = async () => { + syncService.fullSync(true); }; + + super.onSuccessfulLoginTde = async () => { + syncService.fullSync(true); + }; + this.redirectUri = "bitwarden://sso-callback"; this.clientId = "desktop"; } diff --git a/apps/desktop/src/auth/two-factor.component.ts b/apps/desktop/src/auth/two-factor.component.ts index ee3764027a5..bf3545820b9 100644 --- a/apps/desktop/src/auth/two-factor.component.ts +++ b/apps/desktop/src/auth/two-factor.component.ts @@ -1,7 +1,8 @@ -import { Component, ViewChild, ViewContainerRef } from "@angular/core"; +import { Component, Inject, ViewChild, ViewContainerRef } from "@angular/core"; import { ActivatedRoute, Router } from "@angular/router"; import { TwoFactorComponent as BaseTwoFactorComponent } from "@bitwarden/angular/auth/components/two-factor.component"; +import { WINDOW } from "@bitwarden/angular/services/injection-tokens"; import { ModalService } from "@bitwarden/angular/services/modal.service"; import { ApiService } from "@bitwarden/common/abstractions/api.service"; import { AuthService } from "@bitwarden/common/auth/abstractions/auth.service"; @@ -9,6 +10,7 @@ import { LoginService } from "@bitwarden/common/auth/abstractions/login.service" import { TwoFactorService } from "@bitwarden/common/auth/abstractions/two-factor.service"; import { TwoFactorProviderType } from "@bitwarden/common/auth/enums/two-factor-provider-type"; import { AppIdService } from "@bitwarden/common/platform/abstractions/app-id.service"; +import { ConfigServiceAbstraction } from "@bitwarden/common/platform/abstractions/config/config.service.abstraction"; import { EnvironmentService } from "@bitwarden/common/platform/abstractions/environment.service"; import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; import { LogService } from "@bitwarden/common/platform/abstractions/log.service"; @@ -43,7 +45,9 @@ export class TwoFactorComponent extends BaseTwoFactorComponent { logService: LogService, twoFactorService: TwoFactorService, appIdService: AppIdService, - loginService: LoginService + loginService: LoginService, + configService: ConfigServiceAbstraction, + @Inject(WINDOW) protected win: Window ) { super( authService, @@ -51,18 +55,22 @@ export class TwoFactorComponent extends BaseTwoFactorComponent { i18nService, apiService, platformUtilsService, - window, + win, environmentService, stateService, route, logService, twoFactorService, appIdService, - loginService + loginService, + configService ); - super.onSuccessfulLogin = () => { - this.loginService.clearValues(); - return syncService.fullSync(true); + super.onSuccessfulLogin = async () => { + syncService.fullSync(true); + }; + + super.onSuccessfulLoginTde = async () => { + syncService.fullSync(true); }; } diff --git a/apps/desktop/src/images/eu-flag.png b/apps/desktop/src/images/eu-flag.png deleted file mode 100644 index 592bc95e0ce..00000000000 Binary files a/apps/desktop/src/images/eu-flag.png and /dev/null differ diff --git a/apps/desktop/src/images/flag-eu.svg b/apps/desktop/src/images/flag-eu.svg new file mode 100644 index 00000000000..bbfefd6b47a --- /dev/null +++ b/apps/desktop/src/images/flag-eu.svg @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/desktop/src/images/flag-us.svg b/apps/desktop/src/images/flag-us.svg new file mode 100644 index 00000000000..615946d4b59 --- /dev/null +++ b/apps/desktop/src/images/flag-us.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/apps/desktop/src/images/us-flag.png b/apps/desktop/src/images/us-flag.png deleted file mode 100644 index 543dc133247..00000000000 Binary files a/apps/desktop/src/images/us-flag.png and /dev/null differ diff --git a/apps/desktop/src/locales/af/messages.json b/apps/desktop/src/locales/af/messages.json index 59d7ef9c25d..fa880624311 100644 --- a/apps/desktop/src/locales/af/messages.json +++ b/apps/desktop/src/locales/af/messages.json @@ -1077,8 +1077,8 @@ "premiumSignUpStorage": { "message": "1 GG geënkripteerde berging vir lêeraanhegsels." }, - "premiumSignUpTwoStep": { - "message": "Bykomende tweestapaantekenopsies soos YubiKey, FIDO U2F en Duo." + "premiumSignUpTwoStepOptions": { + "message": "Proprietary two-step login options such as YubiKey and Duo." }, "premiumSignUpReports": { "message": "Wagwoordhigiëne, rekeningwelstand en databreukverslae om u kluis veilig te hou." @@ -1492,6 +1492,9 @@ "vaultTimeoutActionLogOutDesc": { "message": "Om toegang tot ’n uitgetekende kluis te kry moet u weer waarmerk." }, + "unlockMethodNeededToChangeTimeoutActionDesc": { + "message": "Set up an unlock method to change your vault timeout action." + }, "lock": { "message": "Vergrendel", "description": "Verb form: to make secure or inaccesible by" @@ -1512,12 +1515,6 @@ "permanentlyDeletedItem": { "message": "Permanent geskrapte item" }, - "restoreItem": { - "message": "Stel item terug" - }, - "restoreItemConfirmation": { - "message": "Is u seker u wil hierdie item terugstel?" - }, "restoredItem": { "message": "Teruggestelde item" }, @@ -2112,8 +2109,8 @@ "logInWithAnotherDevice": { "message": "Meld aan met 'n ander toestel" }, - "logInInitiated": { - "message": "Aan tekening geïnisieer" + "loginInitiated": { + "message": "Login initiated" }, "notificationSentDevice": { "message": "'n Kennisgewing was na jou toestel gestuur." @@ -2252,21 +2249,171 @@ "windowsBiometricUpdateWarningTitle": { "message": "Aanbevole bywerking van instellings" }, + "deviceApprovalRequired": { + "message": "Device approval required. Select an approval option below:" + }, + "rememberThisDevice": { + "message": "Remember this device" + }, + "uncheckIfPublicDevice": { + "message": "Uncheck if using a public device" + }, + "approveFromYourOtherDevice": { + "message": "Approve from your other device" + }, + "requestAdminApproval": { + "message": "Request admin approval" + }, + "approveWithMasterPassword": { + "message": "Approve with master password" + }, "region": { - "message": "Streek" + "message": "Region" + }, + "ssoIdentifierRequired": { + "message": "Organization SSO identifier is required." }, "eu": { "message": "EU", "description": "European Union" }, - "us": { - "message": "VS", - "description": "United States" + "loggingInOn": { + "message": "Logging in on" + }, + "usDomain": { + "message": "bitwarden.com" + }, + "euDomain": { + "message": "bitwarden.eu" }, "selfHosted": { "message": "Selghehuisves" }, "accessDenied": { "message": "Toegang geweier. U het nie toestemming om hierdie blad te sien nie." + }, + "accountSuccessfullyCreated": { + "message": "Account successfully created!" + }, + "adminApprovalRequested": { + "message": "Admin approval requested" + }, + "adminApprovalRequestSentToAdmins": { + "message": "Your request has been sent to your admin." + }, + "youWillBeNotifiedOnceApproved": { + "message": "You will be notified once approved." + }, + "troubleLoggingIn": { + "message": "Trouble logging in?" + }, + "loginApproved": { + "message": "Login approved" + }, + "userEmailMissing": { + "message": "User email missing" + }, + "deviceTrusted": { + "message": "Device trusted" + }, + "inputRequired": { + "message": "Input is required." + }, + "required": { + "message": "required" + }, + "search": { + "message": "Search" + }, + "inputMinLength": { + "message": "Input must be at least $COUNT$ characters long.", + "placeholders": { + "count": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxLength": { + "message": "Input must not exceed $COUNT$ characters in length.", + "placeholders": { + "count": { + "content": "$1", + "example": "20" + } + } + }, + "inputForbiddenCharacters": { + "message": "The following characters are not allowed: $CHARACTERS$", + "placeholders": { + "characters": { + "content": "$1", + "example": "@, #, $, %" + } + } + }, + "inputMinValue": { + "message": "Input value must be at least $MIN$.", + "placeholders": { + "min": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxValue": { + "message": "Input value must not exceed $MAX$.", + "placeholders": { + "max": { + "content": "$1", + "example": "100" + } + } + }, + "multipleInputEmails": { + "message": "1 or more emails are invalid" + }, + "inputTrimValidator": { + "message": "Input must not contain only whitespace.", + "description": "Notification to inform the user that a form's input can't contain only whitespace." + }, + "inputEmail": { + "message": "Input is not an email address." + }, + "fieldsNeedAttention": { + "message": "$COUNT$ field(s) above need your attention.", + "placeholders": { + "count": { + "content": "$1", + "example": "4" + } + } + }, + "selectPlaceholder": { + "message": "-- Select --" + }, + "multiSelectPlaceholder": { + "message": "-- Type to filter --" + }, + "multiSelectLoading": { + "message": "Retrieving options..." + }, + "multiSelectNotFound": { + "message": "No items found" + }, + "multiSelectClearAll": { + "message": "Clear all" + }, + "plusNMore": { + "message": "+ $QUANTITY$ more", + "placeholders": { + "quantity": { + "content": "$1", + "example": "5" + } + } + }, + "submenu": { + "message": "Submenu" } } diff --git a/apps/desktop/src/locales/ar/messages.json b/apps/desktop/src/locales/ar/messages.json index 9012f6ee1ff..914d2026267 100644 --- a/apps/desktop/src/locales/ar/messages.json +++ b/apps/desktop/src/locales/ar/messages.json @@ -1077,8 +1077,8 @@ "premiumSignUpStorage": { "message": "1 جيغابايت وحدة تخزين مشفرة لمرفقات الملفات." }, - "premiumSignUpTwoStep": { - "message": "خيارات تسجيل الدخول الإضافية من خطوتين مثل YubiKey و FIDO U2F و Duo." + "premiumSignUpTwoStepOptions": { + "message": "Proprietary two-step login options such as YubiKey and Duo." }, "premiumSignUpReports": { "message": "نظافة كلمة المرور، صحة الحساب، وتقارير خرق البيانات للحفاظ على سلامة خزنتك." @@ -1492,6 +1492,9 @@ "vaultTimeoutActionLogOutDesc": { "message": "تسجيل الخروج من الخزنة يتطلب إعادة المصادقة للوصول إليها مرة أخرى." }, + "unlockMethodNeededToChangeTimeoutActionDesc": { + "message": "Set up an unlock method to change your vault timeout action." + }, "lock": { "message": "قفل", "description": "Verb form: to make secure or inaccesible by" @@ -1512,12 +1515,6 @@ "permanentlyDeletedItem": { "message": "تم حذف العنصر بشكل دائم" }, - "restoreItem": { - "message": "استعادة العنصر" - }, - "restoreItemConfirmation": { - "message": "هل أنت متأكد من أنك تريد استعادة هذا العنصر؟" - }, "restoredItem": { "message": "العنصر المستعاد" }, @@ -2112,8 +2109,8 @@ "logInWithAnotherDevice": { "message": "تسجيل الدخول باستخدام جهاز آخر" }, - "logInInitiated": { - "message": "بدء تسجيل الدخول" + "loginInitiated": { + "message": "Login initiated" }, "notificationSentDevice": { "message": "تم إرسال إشعار إلى جهازك." @@ -2252,21 +2249,171 @@ "windowsBiometricUpdateWarningTitle": { "message": "تحديث الإعدادات الموصى بها" }, + "deviceApprovalRequired": { + "message": "Device approval required. Select an approval option below:" + }, + "rememberThisDevice": { + "message": "Remember this device" + }, + "uncheckIfPublicDevice": { + "message": "Uncheck if using a public device" + }, + "approveFromYourOtherDevice": { + "message": "Approve from your other device" + }, + "requestAdminApproval": { + "message": "Request admin approval" + }, + "approveWithMasterPassword": { + "message": "Approve with master password" + }, "region": { - "message": "المنطقة" + "message": "Region" + }, + "ssoIdentifierRequired": { + "message": "Organization SSO identifier is required." }, "eu": { - "message": "الاتحاد الأوروبي", + "message": "EU", "description": "European Union" }, - "us": { - "message": "الولايات المتحدة", - "description": "United States" + "loggingInOn": { + "message": "جارٍ تسجيل الدخول" + }, + "usDomain": { + "message": "bitwarden.com" + }, + "euDomain": { + "message": "bitwarden.eu" }, "selfHosted": { "message": "استضافة ذاتية" }, "accessDenied": { - "message": "Access denied. You do not have permission to view this page." + "message": "غير مسموح بالدخول. ليس لديك الصلاحية لعرض هذه الصفحة." + }, + "accountSuccessfullyCreated": { + "message": "Account successfully created!" + }, + "adminApprovalRequested": { + "message": "Admin approval requested" + }, + "adminApprovalRequestSentToAdmins": { + "message": "Your request has been sent to your admin." + }, + "youWillBeNotifiedOnceApproved": { + "message": "You will be notified once approved." + }, + "troubleLoggingIn": { + "message": "Trouble logging in?" + }, + "loginApproved": { + "message": "Login approved" + }, + "userEmailMissing": { + "message": "User email missing" + }, + "deviceTrusted": { + "message": "Device trusted" + }, + "inputRequired": { + "message": "Input is required." + }, + "required": { + "message": "required" + }, + "search": { + "message": "Search" + }, + "inputMinLength": { + "message": "Input must be at least $COUNT$ characters long.", + "placeholders": { + "count": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxLength": { + "message": "Input must not exceed $COUNT$ characters in length.", + "placeholders": { + "count": { + "content": "$1", + "example": "20" + } + } + }, + "inputForbiddenCharacters": { + "message": "The following characters are not allowed: $CHARACTERS$", + "placeholders": { + "characters": { + "content": "$1", + "example": "@, #, $, %" + } + } + }, + "inputMinValue": { + "message": "Input value must be at least $MIN$.", + "placeholders": { + "min": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxValue": { + "message": "Input value must not exceed $MAX$.", + "placeholders": { + "max": { + "content": "$1", + "example": "100" + } + } + }, + "multipleInputEmails": { + "message": "1 or more emails are invalid" + }, + "inputTrimValidator": { + "message": "Input must not contain only whitespace.", + "description": "Notification to inform the user that a form's input can't contain only whitespace." + }, + "inputEmail": { + "message": "Input is not an email address." + }, + "fieldsNeedAttention": { + "message": "$COUNT$ field(s) above need your attention.", + "placeholders": { + "count": { + "content": "$1", + "example": "4" + } + } + }, + "selectPlaceholder": { + "message": "-- Select --" + }, + "multiSelectPlaceholder": { + "message": "-- Type to filter --" + }, + "multiSelectLoading": { + "message": "Retrieving options..." + }, + "multiSelectNotFound": { + "message": "No items found" + }, + "multiSelectClearAll": { + "message": "Clear all" + }, + "plusNMore": { + "message": "+ $QUANTITY$ more", + "placeholders": { + "quantity": { + "content": "$1", + "example": "5" + } + } + }, + "submenu": { + "message": "Submenu" } } diff --git a/apps/desktop/src/locales/az/messages.json b/apps/desktop/src/locales/az/messages.json index 965db4209db..3256e1198b2 100644 --- a/apps/desktop/src/locales/az/messages.json +++ b/apps/desktop/src/locales/az/messages.json @@ -1077,8 +1077,8 @@ "premiumSignUpStorage": { "message": "Fayl qoşmaları üçün 1 GB şifrələnmiş saxlama sahəsi." }, - "premiumSignUpTwoStep": { - "message": "YubiKey, FIDO U2F və Duo kimi iki mərhələli giriş seçimləri." + "premiumSignUpTwoStepOptions": { + "message": "Proprietary two-step login options such as YubiKey and Duo." }, "premiumSignUpReports": { "message": "Anbarınızın təhlükəsiyini təmin etmək üçün parol gigiyenası, hesab sağlamlığı və verilənlərin pozulması hesabatları." @@ -1492,6 +1492,9 @@ "vaultTimeoutActionLogOutDesc": { "message": "Çıxış edilmiş bir anbar, təkrar müraciət etmək üçün yenidən kimlik təsdiqləmə tələb edir." }, + "unlockMethodNeededToChangeTimeoutActionDesc": { + "message": "Anbar vaxt bitməsi əməliyyatınızı dəyişdirmək üçün bir kilid açma üsulu quraşdırın." + }, "lock": { "message": "Kilidlə", "description": "Verb form: to make secure or inaccesible by" @@ -1512,12 +1515,6 @@ "permanentlyDeletedItem": { "message": "Element birdəfəlik silindi" }, - "restoreItem": { - "message": "Elementi bərpa et" - }, - "restoreItemConfirmation": { - "message": "Elementi bərpa etmək istədiyinizə əminsiniz?" - }, "restoredItem": { "message": "Element bərpa edildi" }, @@ -2112,8 +2109,8 @@ "logInWithAnotherDevice": { "message": "Başqa cihazla giriş et" }, - "logInInitiated": { - "message": "Giriş etmə başladıldı" + "loginInitiated": { + "message": "Giriş başladıldı" }, "notificationSentDevice": { "message": "Cihazınıza bir bildiriş göndərildi." @@ -2252,21 +2249,171 @@ "windowsBiometricUpdateWarningTitle": { "message": "Tövsiyə edilən Tənzimləmələr Güncəlləməsi" }, + "deviceApprovalRequired": { + "message": "Cihaz təsdiqi tələb olunur. Aşağıdan bir təsdiq variantı seçin:" + }, + "rememberThisDevice": { + "message": "Bu cihazı xatırla" + }, + "uncheckIfPublicDevice": { + "message": "Hər kəsə açıq bir cihaz istifadə edirsinizsə işarəni götürün" + }, + "approveFromYourOtherDevice": { + "message": "Digər cihazınızdan təsdiqləyin" + }, + "requestAdminApproval": { + "message": "Admin təsdiqini tələb et" + }, + "approveWithMasterPassword": { + "message": "Ana parolla təsdiqlə" + }, "region": { "message": "Bölgə" }, + "ssoIdentifierRequired": { + "message": "Təşkilat SSO identifikatoru tələb olunur." + }, "eu": { "message": "AB", "description": "European Union" }, - "us": { - "message": "ABŞ", - "description": "United States" + "loggingInOn": { + "message": "Giriş edilir" + }, + "usDomain": { + "message": "bitwarden.com" + }, + "euDomain": { + "message": "bitwarden.eu" }, "selfHosted": { "message": "Öz-özünə sahiblik edən" }, "accessDenied": { "message": "Müraciət rədd edildi. Bu səhifəyə baxmaq üçün icazəniz yoxdur." + }, + "accountSuccessfullyCreated": { + "message": "Hesab uğurla yaradıldı!" + }, + "adminApprovalRequested": { + "message": "Admin təsdiqi tələb olunur" + }, + "adminApprovalRequestSentToAdmins": { + "message": "Tələbiniz admininizə göndərildi." + }, + "youWillBeNotifiedOnceApproved": { + "message": "Təsdiqləndikdən sonra məlumatlandırılacaqsınız." + }, + "troubleLoggingIn": { + "message": "Girişdə problem var?" + }, + "loginApproved": { + "message": "Giriş təsdiqləndi" + }, + "userEmailMissing": { + "message": "İstifadəçi e-poçtu əskikdir" + }, + "deviceTrusted": { + "message": "Cihaz güvənlidir" + }, + "inputRequired": { + "message": "Giriş lazımdır." + }, + "required": { + "message": "tələb olunur" + }, + "search": { + "message": "Axtar" + }, + "inputMinLength": { + "message": "Giriş, ən azı $COUNT$ simvol uzunluğunda olmalıdır.", + "placeholders": { + "count": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxLength": { + "message": "Giriş uzunluğu $COUNT$ simvolu aşmamalıdır.", + "placeholders": { + "count": { + "content": "$1", + "example": "20" + } + } + }, + "inputForbiddenCharacters": { + "message": "Aşağıdakı simvollara icazə verilmir: $CHARACTERS$", + "placeholders": { + "characters": { + "content": "$1", + "example": "@, #, $, %" + } + } + }, + "inputMinValue": { + "message": "Giriş dəyəri ən azı $MIN$ olmalıdır.", + "placeholders": { + "min": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxValue": { + "message": "Giriş dəyəri $MAX$ dəyərini aşmamalıdır.", + "placeholders": { + "max": { + "content": "$1", + "example": "100" + } + } + }, + "multipleInputEmails": { + "message": "1 və ya daha çox e-poçt yararsızdır" + }, + "inputTrimValidator": { + "message": "Giriş, yalnız boşluq ehtiva etməməlidir.", + "description": "Notification to inform the user that a form's input can't contain only whitespace." + }, + "inputEmail": { + "message": "Giriş, bir e-poçt ünvanı deyil." + }, + "fieldsNeedAttention": { + "message": "Yuxarıdakı $COUNT$ sahənin diqqətinizə ehtiyacı var.", + "placeholders": { + "count": { + "content": "$1", + "example": "4" + } + } + }, + "selectPlaceholder": { + "message": "-- Seç --" + }, + "multiSelectPlaceholder": { + "message": "-- Filtrləmək üçün yazın --" + }, + "multiSelectLoading": { + "message": "Seçimlər alınır..." + }, + "multiSelectNotFound": { + "message": "Heç bir element tapılmadı" + }, + "multiSelectClearAll": { + "message": "Hamısını təmizlə" + }, + "plusNMore": { + "message": "daha $QUANTITY$ ədəd", + "placeholders": { + "quantity": { + "content": "$1", + "example": "5" + } + } + }, + "submenu": { + "message": "Alt menyu" } } diff --git a/apps/desktop/src/locales/be/messages.json b/apps/desktop/src/locales/be/messages.json index 1075fbe6da0..fc45db18b3f 100644 --- a/apps/desktop/src/locales/be/messages.json +++ b/apps/desktop/src/locales/be/messages.json @@ -1077,8 +1077,8 @@ "premiumSignUpStorage": { "message": "1 ГБ зашыфраванага сховішча для далучаных файлаў." }, - "premiumSignUpTwoStep": { - "message": "Дадатковыя варыянты двухэтапнага ўваходу, такія як YubiKey, FIDO U2F і Duo." + "premiumSignUpTwoStepOptions": { + "message": "Proprietary two-step login options such as YubiKey and Duo." }, "premiumSignUpReports": { "message": "Гігіена пароляў, здароўе ўліковага запісу і справаздачы аб уцечках даных для забеспячэння бяспекі вашага сховішча." @@ -1492,6 +1492,9 @@ "vaultTimeoutActionLogOutDesc": { "message": "Для таго, каб аднавіць доступ да сховішча, патрабуецца паўторная аўтарызацыя." }, + "unlockMethodNeededToChangeTimeoutActionDesc": { + "message": "Set up an unlock method to change your vault timeout action." + }, "lock": { "message": "Заблакіраваць", "description": "Verb form: to make secure or inaccesible by" @@ -1512,12 +1515,6 @@ "permanentlyDeletedItem": { "message": "Элемент выдалены назаўсёды" }, - "restoreItem": { - "message": "Аднавіць элемент" - }, - "restoreItemConfirmation": { - "message": "Вы сапраўды хочаце аднавіць гэты элемент?" - }, "restoredItem": { "message": "Элемент адноўлены" }, @@ -2112,8 +2109,8 @@ "logInWithAnotherDevice": { "message": "Увайсці з іншай прылады" }, - "logInInitiated": { - "message": "Ініцыяваны ўваход" + "loginInitiated": { + "message": "Login initiated" }, "notificationSentDevice": { "message": "Апавяшчэнне было адпраўлена на вашу прыладу." @@ -2252,21 +2249,171 @@ "windowsBiometricUpdateWarningTitle": { "message": "Рэкамендаваныя налады абнаўлення" }, + "deviceApprovalRequired": { + "message": "Device approval required. Select an approval option below:" + }, + "rememberThisDevice": { + "message": "Remember this device" + }, + "uncheckIfPublicDevice": { + "message": "Uncheck if using a public device" + }, + "approveFromYourOtherDevice": { + "message": "Approve from your other device" + }, + "requestAdminApproval": { + "message": "Request admin approval" + }, + "approveWithMasterPassword": { + "message": "Approve with master password" + }, "region": { - "message": "Рэгіён" + "message": "Region" + }, + "ssoIdentifierRequired": { + "message": "Organization SSO identifier is required." }, "eu": { - "message": "ЕС", + "message": "EU", "description": "European Union" }, - "us": { - "message": "ЗША", - "description": "United States" + "loggingInOn": { + "message": "Увайсці на" + }, + "usDomain": { + "message": "bitwarden.com" + }, + "euDomain": { + "message": "bitwarden.eu" }, "selfHosted": { "message": "Уласнае размяшчэнне" }, "accessDenied": { "message": "Доступ забаронены. У вас не дастаткова правоў для прагляду гэтай старонкі." + }, + "accountSuccessfullyCreated": { + "message": "Account successfully created!" + }, + "adminApprovalRequested": { + "message": "Admin approval requested" + }, + "adminApprovalRequestSentToAdmins": { + "message": "Your request has been sent to your admin." + }, + "youWillBeNotifiedOnceApproved": { + "message": "You will be notified once approved." + }, + "troubleLoggingIn": { + "message": "Trouble logging in?" + }, + "loginApproved": { + "message": "Login approved" + }, + "userEmailMissing": { + "message": "User email missing" + }, + "deviceTrusted": { + "message": "Device trusted" + }, + "inputRequired": { + "message": "Input is required." + }, + "required": { + "message": "required" + }, + "search": { + "message": "Search" + }, + "inputMinLength": { + "message": "Input must be at least $COUNT$ characters long.", + "placeholders": { + "count": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxLength": { + "message": "Input must not exceed $COUNT$ characters in length.", + "placeholders": { + "count": { + "content": "$1", + "example": "20" + } + } + }, + "inputForbiddenCharacters": { + "message": "The following characters are not allowed: $CHARACTERS$", + "placeholders": { + "characters": { + "content": "$1", + "example": "@, #, $, %" + } + } + }, + "inputMinValue": { + "message": "Input value must be at least $MIN$.", + "placeholders": { + "min": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxValue": { + "message": "Input value must not exceed $MAX$.", + "placeholders": { + "max": { + "content": "$1", + "example": "100" + } + } + }, + "multipleInputEmails": { + "message": "1 or more emails are invalid" + }, + "inputTrimValidator": { + "message": "Input must not contain only whitespace.", + "description": "Notification to inform the user that a form's input can't contain only whitespace." + }, + "inputEmail": { + "message": "Input is not an email address." + }, + "fieldsNeedAttention": { + "message": "$COUNT$ field(s) above need your attention.", + "placeholders": { + "count": { + "content": "$1", + "example": "4" + } + } + }, + "selectPlaceholder": { + "message": "-- Select --" + }, + "multiSelectPlaceholder": { + "message": "-- Type to filter --" + }, + "multiSelectLoading": { + "message": "Retrieving options..." + }, + "multiSelectNotFound": { + "message": "No items found" + }, + "multiSelectClearAll": { + "message": "Clear all" + }, + "plusNMore": { + "message": "+ $QUANTITY$ more", + "placeholders": { + "quantity": { + "content": "$1", + "example": "5" + } + } + }, + "submenu": { + "message": "Submenu" } } diff --git a/apps/desktop/src/locales/bg/messages.json b/apps/desktop/src/locales/bg/messages.json index 95231adb19a..2283ccbde6e 100644 --- a/apps/desktop/src/locales/bg/messages.json +++ b/apps/desktop/src/locales/bg/messages.json @@ -1077,8 +1077,8 @@ "premiumSignUpStorage": { "message": "1 ГБ пространство за файлове, които се шифроват." }, - "premiumSignUpTwoStep": { - "message": "Двустепенно удостоверяване чрез YubiKey, FIDO U2F и Duo." + "premiumSignUpTwoStepOptions": { + "message": "Proprietary two-step login options such as YubiKey and Duo." }, "premiumSignUpReports": { "message": "Проверки в списъците с публикувани пароли, проверка на регистрациите и доклади за пробивите в сигурността, което спомага трезорът ви да е допълнително защитен." @@ -1492,6 +1492,9 @@ "vaultTimeoutActionLogOutDesc": { "message": "При изход от трезора ще ви се наложи отново да се идентифицирате, за да го достъпите." }, + "unlockMethodNeededToChangeTimeoutActionDesc": { + "message": "Задайте метод за отключване, за да може да промените действието при изтичане на времето за достъп до трезора." + }, "lock": { "message": "Заключване", "description": "Verb form: to make secure or inaccesible by" @@ -1512,12 +1515,6 @@ "permanentlyDeletedItem": { "message": "Записът е изтрит окончателно" }, - "restoreItem": { - "message": "Възстановяване на запис" - }, - "restoreItemConfirmation": { - "message": "Сигурни ли сте, че искате да възстановите записа?" - }, "restoredItem": { "message": "Записът е възстановен" }, @@ -2112,7 +2109,7 @@ "logInWithAnotherDevice": { "message": "Вписване с друго устройство" }, - "logInInitiated": { + "loginInitiated": { "message": "Вписването е стартирано" }, "notificationSentDevice": { @@ -2252,21 +2249,171 @@ "windowsBiometricUpdateWarningTitle": { "message": "Препоръчителна промяна на настройките" }, + "deviceApprovalRequired": { + "message": "Изисква се одобрение на устройството. Изберете начин за одобрение по-долу:" + }, + "rememberThisDevice": { + "message": "Запомняне на това устройство" + }, + "uncheckIfPublicDevice": { + "message": "Махнете отметката, ако използвате публично устройство" + }, + "approveFromYourOtherDevice": { + "message": "Одобряване с другото Ви устройство" + }, + "requestAdminApproval": { + "message": "Подаване на заявка за одобрение от администратор" + }, + "approveWithMasterPassword": { + "message": "Одобряване с главната парола" + }, "region": { "message": "Регион" }, + "ssoIdentifierRequired": { + "message": "Идентификаторът за еднократна идентификация на организация е задължителен." + }, "eu": { "message": "ЕС", "description": "European Union" }, - "us": { - "message": "САЩ", - "description": "United States" + "loggingInOn": { + "message": "Вписване в" + }, + "usDomain": { + "message": "bitwarden.com" + }, + "euDomain": { + "message": "bitwarden.eu" }, "selfHosted": { "message": "Собствен хостинг" }, "accessDenied": { "message": "Достъпът е отказан. Нямате право за преглед на тази страница." + }, + "accountSuccessfullyCreated": { + "message": "Регистрацията е създадена успешно!" + }, + "adminApprovalRequested": { + "message": "Заявено е одобрение от администратор" + }, + "adminApprovalRequestSentToAdmins": { + "message": "Вашата заявка беше изпратена до администратора Ви." + }, + "youWillBeNotifiedOnceApproved": { + "message": "Ще получите известие, когато тя бъде одобрена." + }, + "troubleLoggingIn": { + "message": "Имате проблем с вписването?" + }, + "loginApproved": { + "message": "Вписването е одобрено" + }, + "userEmailMissing": { + "message": "Липсва е-поща на потребителя" + }, + "deviceTrusted": { + "message": "Устройството е доверено" + }, + "inputRequired": { + "message": "Полето е задължтелно да бъде попълнено." + }, + "required": { + "message": "задължително" + }, + "search": { + "message": "Търсене" + }, + "inputMinLength": { + "message": "Въведеният в полето текст трябва да бъде с дължина поне $COUNT$ знака.", + "placeholders": { + "count": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxLength": { + "message": "Полето не може да съдържа повече от $COUNT$ знака.", + "placeholders": { + "count": { + "content": "$1", + "example": "20" + } + } + }, + "inputForbiddenCharacters": { + "message": "Следните знаци не са позволени: $CHARACTERS$", + "placeholders": { + "characters": { + "content": "$1", + "example": "@, #, $, %" + } + } + }, + "inputMinValue": { + "message": "Въведената стойност трябва да бъде поне $MIN$.", + "placeholders": { + "min": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxValue": { + "message": "Въведената стойност не трябва да бъде по-голяма от $MAX$.", + "placeholders": { + "max": { + "content": "$1", + "example": "100" + } + } + }, + "multipleInputEmails": { + "message": "1 или повече е-пощи са неправилни" + }, + "inputTrimValidator": { + "message": "Въведеното не може да съдържа само интервали.", + "description": "Notification to inform the user that a form's input can't contain only whitespace." + }, + "inputEmail": { + "message": "Въведеният в полето текст не е адрес на е-поща." + }, + "fieldsNeedAttention": { + "message": "$COUNT$ поле(та) по-горе се нуждае/ят от вниманието Ви.", + "placeholders": { + "count": { + "content": "$1", + "example": "4" + } + } + }, + "selectPlaceholder": { + "message": "-- Изберете --" + }, + "multiSelectPlaceholder": { + "message": "-- Пишете тук за филтриране --" + }, + "multiSelectLoading": { + "message": "Зареждане на опциите…" + }, + "multiSelectNotFound": { + "message": "Няма намерени елементи" + }, + "multiSelectClearAll": { + "message": "Изчистване на всичко" + }, + "plusNMore": { + "message": "+ още $QUANTITY$", + "placeholders": { + "quantity": { + "content": "$1", + "example": "5" + } + } + }, + "submenu": { + "message": "Подменю" } } diff --git a/apps/desktop/src/locales/bn/messages.json b/apps/desktop/src/locales/bn/messages.json index 93d0c273940..e59dd9de8b9 100644 --- a/apps/desktop/src/locales/bn/messages.json +++ b/apps/desktop/src/locales/bn/messages.json @@ -1077,8 +1077,8 @@ "premiumSignUpStorage": { "message": "ফাইল সংযুক্তির জন্য ১ জিবি এনক্রিপ্টেড স্থান।" }, - "premiumSignUpTwoStep": { - "message": "YubiKey, FIDO U2F, ও Duo এর মতো অতিরিক্ত দ্বি-পদক্ষেপ লগইন বিকল্পগুলি।" + "premiumSignUpTwoStepOptions": { + "message": "Proprietary two-step login options such as YubiKey and Duo." }, "premiumSignUpReports": { "message": "আপনার ভল্টটি সুরক্ষিত রাখতে পাসওয়ার্ড স্বাস্থ্যকরন, অ্যাকাউন্ট স্বাস্থ্য এবং ডেটা লঙ্ঘনের প্রতিবেদন।" @@ -1492,6 +1492,9 @@ "vaultTimeoutActionLogOutDesc": { "message": "Re-authentication is required to access your vault again." }, + "unlockMethodNeededToChangeTimeoutActionDesc": { + "message": "Set up an unlock method to change your vault timeout action." + }, "lock": { "message": "Lock", "description": "Verb form: to make secure or inaccesible by" @@ -1512,12 +1515,6 @@ "permanentlyDeletedItem": { "message": "বস্তুটি স্থায়ীভাবে মুছে ফেলা হয়েছে" }, - "restoreItem": { - "message": "বস্তু পুনরুদ্ধার" - }, - "restoreItemConfirmation": { - "message": "আপনি কি নিশ্চিত যে আপনি এই বস্তুটি পুনরুদ্ধার করতে চান?" - }, "restoredItem": { "message": "বস্তু পুনরুদ্ধারকৃত" }, @@ -2112,8 +2109,8 @@ "logInWithAnotherDevice": { "message": "Log in with another device" }, - "logInInitiated": { - "message": "Log in initiated" + "loginInitiated": { + "message": "Login initiated" }, "notificationSentDevice": { "message": "A notification has been sent to your device." @@ -2252,21 +2249,171 @@ "windowsBiometricUpdateWarningTitle": { "message": "Recommended Settings Update" }, + "deviceApprovalRequired": { + "message": "Device approval required. Select an approval option below:" + }, + "rememberThisDevice": { + "message": "Remember this device" + }, + "uncheckIfPublicDevice": { + "message": "Uncheck if using a public device" + }, + "approveFromYourOtherDevice": { + "message": "Approve from your other device" + }, + "requestAdminApproval": { + "message": "Request admin approval" + }, + "approveWithMasterPassword": { + "message": "Approve with master password" + }, "region": { "message": "Region" }, + "ssoIdentifierRequired": { + "message": "Organization SSO identifier is required." + }, "eu": { "message": "EU", "description": "European Union" }, - "us": { - "message": "US", - "description": "United States" + "loggingInOn": { + "message": "Logging in on" + }, + "usDomain": { + "message": "bitwarden.com" + }, + "euDomain": { + "message": "bitwarden.eu" }, "selfHosted": { "message": "Self-hosted" }, "accessDenied": { "message": "Access denied. You do not have permission to view this page." + }, + "accountSuccessfullyCreated": { + "message": "Account successfully created!" + }, + "adminApprovalRequested": { + "message": "Admin approval requested" + }, + "adminApprovalRequestSentToAdmins": { + "message": "Your request has been sent to your admin." + }, + "youWillBeNotifiedOnceApproved": { + "message": "You will be notified once approved." + }, + "troubleLoggingIn": { + "message": "Trouble logging in?" + }, + "loginApproved": { + "message": "Login approved" + }, + "userEmailMissing": { + "message": "User email missing" + }, + "deviceTrusted": { + "message": "Device trusted" + }, + "inputRequired": { + "message": "Input is required." + }, + "required": { + "message": "required" + }, + "search": { + "message": "Search" + }, + "inputMinLength": { + "message": "Input must be at least $COUNT$ characters long.", + "placeholders": { + "count": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxLength": { + "message": "Input must not exceed $COUNT$ characters in length.", + "placeholders": { + "count": { + "content": "$1", + "example": "20" + } + } + }, + "inputForbiddenCharacters": { + "message": "The following characters are not allowed: $CHARACTERS$", + "placeholders": { + "characters": { + "content": "$1", + "example": "@, #, $, %" + } + } + }, + "inputMinValue": { + "message": "Input value must be at least $MIN$.", + "placeholders": { + "min": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxValue": { + "message": "Input value must not exceed $MAX$.", + "placeholders": { + "max": { + "content": "$1", + "example": "100" + } + } + }, + "multipleInputEmails": { + "message": "1 or more emails are invalid" + }, + "inputTrimValidator": { + "message": "Input must not contain only whitespace.", + "description": "Notification to inform the user that a form's input can't contain only whitespace." + }, + "inputEmail": { + "message": "Input is not an email address." + }, + "fieldsNeedAttention": { + "message": "$COUNT$ field(s) above need your attention.", + "placeholders": { + "count": { + "content": "$1", + "example": "4" + } + } + }, + "selectPlaceholder": { + "message": "-- Select --" + }, + "multiSelectPlaceholder": { + "message": "-- Type to filter --" + }, + "multiSelectLoading": { + "message": "Retrieving options..." + }, + "multiSelectNotFound": { + "message": "No items found" + }, + "multiSelectClearAll": { + "message": "Clear all" + }, + "plusNMore": { + "message": "+ $QUANTITY$ more", + "placeholders": { + "quantity": { + "content": "$1", + "example": "5" + } + } + }, + "submenu": { + "message": "Submenu" } } diff --git a/apps/desktop/src/locales/bs/messages.json b/apps/desktop/src/locales/bs/messages.json index eabfc7f8067..c88f7f392f1 100644 --- a/apps/desktop/src/locales/bs/messages.json +++ b/apps/desktop/src/locales/bs/messages.json @@ -1077,8 +1077,8 @@ "premiumSignUpStorage": { "message": "1 GB šifriranog prostora za pohranu podataka." }, - "premiumSignUpTwoStep": { - "message": "Dodatne mogućnosti za prijavu u dva koraka kao što su YubiKey, FIDO U2F i Duo." + "premiumSignUpTwoStepOptions": { + "message": "Proprietary two-step login options such as YubiKey and Duo." }, "premiumSignUpReports": { "message": "Higijenu lozinki, zdravlje računa i izvještaje o krađi podataka radi zaštite svojeg trezora." @@ -1492,6 +1492,9 @@ "vaultTimeoutActionLogOutDesc": { "message": "Re-authentication is required to access your vault again." }, + "unlockMethodNeededToChangeTimeoutActionDesc": { + "message": "Set up an unlock method to change your vault timeout action." + }, "lock": { "message": "Lock", "description": "Verb form: to make secure or inaccesible by" @@ -1512,12 +1515,6 @@ "permanentlyDeletedItem": { "message": "Item permanently deleted" }, - "restoreItem": { - "message": "Restore item" - }, - "restoreItemConfirmation": { - "message": "Are you sure you want to restore this item?" - }, "restoredItem": { "message": "Item restored" }, @@ -2112,8 +2109,8 @@ "logInWithAnotherDevice": { "message": "Log in with another device" }, - "logInInitiated": { - "message": "Log in initiated" + "loginInitiated": { + "message": "Login initiated" }, "notificationSentDevice": { "message": "A notification has been sent to your device." @@ -2252,21 +2249,171 @@ "windowsBiometricUpdateWarningTitle": { "message": "Recommended Settings Update" }, + "deviceApprovalRequired": { + "message": "Device approval required. Select an approval option below:" + }, + "rememberThisDevice": { + "message": "Remember this device" + }, + "uncheckIfPublicDevice": { + "message": "Uncheck if using a public device" + }, + "approveFromYourOtherDevice": { + "message": "Approve from your other device" + }, + "requestAdminApproval": { + "message": "Request admin approval" + }, + "approveWithMasterPassword": { + "message": "Approve with master password" + }, "region": { "message": "Region" }, + "ssoIdentifierRequired": { + "message": "Organization SSO identifier is required." + }, "eu": { "message": "EU", "description": "European Union" }, - "us": { - "message": "US", - "description": "United States" + "loggingInOn": { + "message": "Logging in on" + }, + "usDomain": { + "message": "bitwarden.com" + }, + "euDomain": { + "message": "bitwarden.eu" }, "selfHosted": { "message": "Self-hosted" }, "accessDenied": { "message": "Access denied. You do not have permission to view this page." + }, + "accountSuccessfullyCreated": { + "message": "Account successfully created!" + }, + "adminApprovalRequested": { + "message": "Admin approval requested" + }, + "adminApprovalRequestSentToAdmins": { + "message": "Your request has been sent to your admin." + }, + "youWillBeNotifiedOnceApproved": { + "message": "You will be notified once approved." + }, + "troubleLoggingIn": { + "message": "Trouble logging in?" + }, + "loginApproved": { + "message": "Login approved" + }, + "userEmailMissing": { + "message": "User email missing" + }, + "deviceTrusted": { + "message": "Device trusted" + }, + "inputRequired": { + "message": "Input is required." + }, + "required": { + "message": "required" + }, + "search": { + "message": "Search" + }, + "inputMinLength": { + "message": "Input must be at least $COUNT$ characters long.", + "placeholders": { + "count": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxLength": { + "message": "Input must not exceed $COUNT$ characters in length.", + "placeholders": { + "count": { + "content": "$1", + "example": "20" + } + } + }, + "inputForbiddenCharacters": { + "message": "The following characters are not allowed: $CHARACTERS$", + "placeholders": { + "characters": { + "content": "$1", + "example": "@, #, $, %" + } + } + }, + "inputMinValue": { + "message": "Input value must be at least $MIN$.", + "placeholders": { + "min": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxValue": { + "message": "Input value must not exceed $MAX$.", + "placeholders": { + "max": { + "content": "$1", + "example": "100" + } + } + }, + "multipleInputEmails": { + "message": "1 or more emails are invalid" + }, + "inputTrimValidator": { + "message": "Input must not contain only whitespace.", + "description": "Notification to inform the user that a form's input can't contain only whitespace." + }, + "inputEmail": { + "message": "Input is not an email address." + }, + "fieldsNeedAttention": { + "message": "$COUNT$ field(s) above need your attention.", + "placeholders": { + "count": { + "content": "$1", + "example": "4" + } + } + }, + "selectPlaceholder": { + "message": "-- Select --" + }, + "multiSelectPlaceholder": { + "message": "-- Type to filter --" + }, + "multiSelectLoading": { + "message": "Retrieving options..." + }, + "multiSelectNotFound": { + "message": "No items found" + }, + "multiSelectClearAll": { + "message": "Clear all" + }, + "plusNMore": { + "message": "+ $QUANTITY$ more", + "placeholders": { + "quantity": { + "content": "$1", + "example": "5" + } + } + }, + "submenu": { + "message": "Submenu" } } diff --git a/apps/desktop/src/locales/ca/messages.json b/apps/desktop/src/locales/ca/messages.json index 5429a271a2a..9850e4b82a9 100644 --- a/apps/desktop/src/locales/ca/messages.json +++ b/apps/desktop/src/locales/ca/messages.json @@ -1077,8 +1077,8 @@ "premiumSignUpStorage": { "message": "1 GB d'emmagatzematge xifrat per als fitxers adjunts." }, - "premiumSignUpTwoStep": { - "message": "Opcions addicionals d'inici de sessió en dues passes com ara YubiKey, FIDO U2F i Duo." + "premiumSignUpTwoStepOptions": { + "message": "Proprietary two-step login options such as YubiKey and Duo." }, "premiumSignUpReports": { "message": "Requisits d'higiene de la contrasenya, salut del compte i informe d'infraccions de dades per mantenir la seguretat de la vostra caixa forta." @@ -1492,6 +1492,9 @@ "vaultTimeoutActionLogOutDesc": { "message": "Una caixa forta desconnectada requereix que torneu a autentificar-vos per accedir-hi de nou." }, + "unlockMethodNeededToChangeTimeoutActionDesc": { + "message": "Set up an unlock method to change your vault timeout action." + }, "lock": { "message": "Bloqueja", "description": "Verb form: to make secure or inaccesible by" @@ -1512,12 +1515,6 @@ "permanentlyDeletedItem": { "message": "Element suprimit definitivament" }, - "restoreItem": { - "message": "Restaura l'element" - }, - "restoreItemConfirmation": { - "message": "Esteu segur que voleu restaurar aquest element?" - }, "restoredItem": { "message": "Element restaurat" }, @@ -2112,8 +2109,8 @@ "logInWithAnotherDevice": { "message": "Inicia sessió amb un altre dispositiu" }, - "logInInitiated": { - "message": "S'ha iniciat la sessió" + "loginInitiated": { + "message": "Login initiated" }, "notificationSentDevice": { "message": "S'ha enviat una notificació al vostre dispositiu." @@ -2252,21 +2249,171 @@ "windowsBiometricUpdateWarningTitle": { "message": "Actualització de configuració recomanada" }, + "deviceApprovalRequired": { + "message": "Device approval required. Select an approval option below:" + }, + "rememberThisDevice": { + "message": "Remember this device" + }, + "uncheckIfPublicDevice": { + "message": "Uncheck if using a public device" + }, + "approveFromYourOtherDevice": { + "message": "Approve from your other device" + }, + "requestAdminApproval": { + "message": "Request admin approval" + }, + "approveWithMasterPassword": { + "message": "Approve with master password" + }, "region": { - "message": "Regió" + "message": "Region" + }, + "ssoIdentifierRequired": { + "message": "Organization SSO identifier is required." }, "eu": { - "message": "UE", + "message": "EU", "description": "European Union" }, - "us": { - "message": "EUA", - "description": "United States" + "loggingInOn": { + "message": "Logging in on" + }, + "usDomain": { + "message": "bitwarden.com" + }, + "euDomain": { + "message": "bitwarden.eu" }, "selfHosted": { "message": "Autoallotjat" }, "accessDenied": { "message": "Accés denegat. No teniu permís per veure aquesta pàgina." + }, + "accountSuccessfullyCreated": { + "message": "Account successfully created!" + }, + "adminApprovalRequested": { + "message": "Admin approval requested" + }, + "adminApprovalRequestSentToAdmins": { + "message": "Your request has been sent to your admin." + }, + "youWillBeNotifiedOnceApproved": { + "message": "You will be notified once approved." + }, + "troubleLoggingIn": { + "message": "Trouble logging in?" + }, + "loginApproved": { + "message": "Login approved" + }, + "userEmailMissing": { + "message": "User email missing" + }, + "deviceTrusted": { + "message": "Device trusted" + }, + "inputRequired": { + "message": "Input is required." + }, + "required": { + "message": "required" + }, + "search": { + "message": "Search" + }, + "inputMinLength": { + "message": "Input must be at least $COUNT$ characters long.", + "placeholders": { + "count": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxLength": { + "message": "Input must not exceed $COUNT$ characters in length.", + "placeholders": { + "count": { + "content": "$1", + "example": "20" + } + } + }, + "inputForbiddenCharacters": { + "message": "The following characters are not allowed: $CHARACTERS$", + "placeholders": { + "characters": { + "content": "$1", + "example": "@, #, $, %" + } + } + }, + "inputMinValue": { + "message": "Input value must be at least $MIN$.", + "placeholders": { + "min": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxValue": { + "message": "Input value must not exceed $MAX$.", + "placeholders": { + "max": { + "content": "$1", + "example": "100" + } + } + }, + "multipleInputEmails": { + "message": "1 or more emails are invalid" + }, + "inputTrimValidator": { + "message": "Input must not contain only whitespace.", + "description": "Notification to inform the user that a form's input can't contain only whitespace." + }, + "inputEmail": { + "message": "Input is not an email address." + }, + "fieldsNeedAttention": { + "message": "$COUNT$ field(s) above need your attention.", + "placeholders": { + "count": { + "content": "$1", + "example": "4" + } + } + }, + "selectPlaceholder": { + "message": "-- Select --" + }, + "multiSelectPlaceholder": { + "message": "-- Type to filter --" + }, + "multiSelectLoading": { + "message": "Retrieving options..." + }, + "multiSelectNotFound": { + "message": "No items found" + }, + "multiSelectClearAll": { + "message": "Clear all" + }, + "plusNMore": { + "message": "+ $QUANTITY$ more", + "placeholders": { + "quantity": { + "content": "$1", + "example": "5" + } + } + }, + "submenu": { + "message": "Submenu" } } diff --git a/apps/desktop/src/locales/cs/messages.json b/apps/desktop/src/locales/cs/messages.json index d09e9809aad..4ce336733f6 100644 --- a/apps/desktop/src/locales/cs/messages.json +++ b/apps/desktop/src/locales/cs/messages.json @@ -1077,8 +1077,8 @@ "premiumSignUpStorage": { "message": "1 GB šifrovaného uložiště pro přílohy." }, - "premiumSignUpTwoStep": { - "message": "Další možnosti dvoufázového přihlášení, jako je například YubiKey, FIDO U2F a Duo." + "premiumSignUpTwoStepOptions": { + "message": "Proprietary two-step login options such as YubiKey and Duo." }, "premiumSignUpReports": { "message": "Reporty o hygieně Vašich hesel, zdraví účtu a narušeních bezpečnosti." @@ -1492,6 +1492,9 @@ "vaultTimeoutActionLogOutDesc": { "message": "Budete odhlášeni. Pro opětovný přístup k trezoru bude vyžadováno ověření." }, + "unlockMethodNeededToChangeTimeoutActionDesc": { + "message": "Nastavte metodu odemknutí, abyste změnili časový limit Vašeho trezoru." + }, "lock": { "message": "Zamknout", "description": "Verb form: to make secure or inaccesible by" @@ -1512,12 +1515,6 @@ "permanentlyDeletedItem": { "message": "Položka byla trvale smazána" }, - "restoreItem": { - "message": "Obnovit položku" - }, - "restoreItemConfirmation": { - "message": "Opravdu chcete tuto položku obnovit?" - }, "restoredItem": { "message": "Položka byla obnovena" }, @@ -2112,7 +2109,7 @@ "logInWithAnotherDevice": { "message": "Přihlásit se pomocí jiného zařízení" }, - "logInInitiated": { + "loginInitiated": { "message": "Bylo zahájeno přihlášení" }, "notificationSentDevice": { @@ -2252,21 +2249,171 @@ "windowsBiometricUpdateWarningTitle": { "message": "Aktualizace doporučených nastavení" }, + "deviceApprovalRequired": { + "message": "Vyžaduje se schválení zařízení. Vyberte možnost schválení níže:" + }, + "rememberThisDevice": { + "message": "Zapamatovat toto zařízení" + }, + "uncheckIfPublicDevice": { + "message": "Odškrtněte, pokud používáte veřejné zařízení" + }, + "approveFromYourOtherDevice": { + "message": "Schválit s mým dalším zařízením" + }, + "requestAdminApproval": { + "message": "Žádost o schválení správcem" + }, + "approveWithMasterPassword": { + "message": "Schválit hlavním heslem" + }, "region": { - "message": "Region" + "message": "Oblast" + }, + "ssoIdentifierRequired": { + "message": "Je vyžadován SSO identifikátor organizace." }, "eu": { "message": "EU", "description": "European Union" }, - "us": { - "message": "US", - "description": "United States" + "loggingInOn": { + "message": "Přihlašování na" + }, + "usDomain": { + "message": "bitwarden.com" + }, + "euDomain": { + "message": "bitwarden.eu" }, "selfHosted": { "message": "Vlastní hosting" }, "accessDenied": { "message": "Přístup byl odepřen. Nemáte oprávnění k zobrazení této stránky." + }, + "accountSuccessfullyCreated": { + "message": "Účet byl úspěšně vytvořen!" + }, + "adminApprovalRequested": { + "message": "Bylo vyžádáno schválení správcem" + }, + "adminApprovalRequestSentToAdmins": { + "message": "Váš požadavek byl odeslán Vašemu správci." + }, + "youWillBeNotifiedOnceApproved": { + "message": "Po schválení budete upozorněni." + }, + "troubleLoggingIn": { + "message": "Potíže s přihlášením?" + }, + "loginApproved": { + "message": "Přihlášení bylo schváleno" + }, + "userEmailMissing": { + "message": "Chybí e-mail uživatele" + }, + "deviceTrusted": { + "message": "Zařízení zařazeno mezi důvěryhodné" + }, + "inputRequired": { + "message": "Je vyžadován vstup." + }, + "required": { + "message": "vyžadováno" + }, + "search": { + "message": "Hledat" + }, + "inputMinLength": { + "message": "Vstup musí mít alespoň $COUNT$ znaků.", + "placeholders": { + "count": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxLength": { + "message": "Vstup nesmí být delší než $COUNT$ znaků.", + "placeholders": { + "count": { + "content": "$1", + "example": "20" + } + } + }, + "inputForbiddenCharacters": { + "message": "Následující znaky nejsou povoleny: $CHARACTERS$", + "placeholders": { + "characters": { + "content": "$1", + "example": "@, #, $, %" + } + } + }, + "inputMinValue": { + "message": "Vstupní hodnota musí být alespoň $MIN$.", + "placeholders": { + "min": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxValue": { + "message": "Vstupní hodnota nesmí přesáhnout $MAX$.", + "placeholders": { + "max": { + "content": "$1", + "example": "100" + } + } + }, + "multipleInputEmails": { + "message": "1 nebo více e-mailů jsou neplatné" + }, + "inputTrimValidator": { + "message": "Vstup nesmí obsahovat jen mezery.", + "description": "Notification to inform the user that a form's input can't contain only whitespace." + }, + "inputEmail": { + "message": "Vstup není e-mailová adresa." + }, + "fieldsNeedAttention": { + "message": "$COUNT$ polí výše vyžaduje Vaši pozornost.", + "placeholders": { + "count": { + "content": "$1", + "example": "4" + } + } + }, + "selectPlaceholder": { + "message": "-- Vybrat --" + }, + "multiSelectPlaceholder": { + "message": "-- Pište pro filtrování --" + }, + "multiSelectLoading": { + "message": "Načítání voleb..." + }, + "multiSelectNotFound": { + "message": "Nebyly nalezeny žádné položky" + }, + "multiSelectClearAll": { + "message": "Vymazat vše" + }, + "plusNMore": { + "message": "+ $QUANTITY$ dalších", + "placeholders": { + "quantity": { + "content": "$1", + "example": "5" + } + } + }, + "submenu": { + "message": "Podmenu" } } diff --git a/apps/desktop/src/locales/cy/messages.json b/apps/desktop/src/locales/cy/messages.json index ed828fa2255..38e81a83bfd 100644 --- a/apps/desktop/src/locales/cy/messages.json +++ b/apps/desktop/src/locales/cy/messages.json @@ -1077,8 +1077,8 @@ "premiumSignUpStorage": { "message": "1 GB encrypted storage for file attachments." }, - "premiumSignUpTwoStep": { - "message": "Additional two-step login options such as YubiKey, FIDO U2F, and Duo." + "premiumSignUpTwoStepOptions": { + "message": "Proprietary two-step login options such as YubiKey and Duo." }, "premiumSignUpReports": { "message": "Password hygiene, account health, and data breach reports to keep your vault safe." @@ -1492,6 +1492,9 @@ "vaultTimeoutActionLogOutDesc": { "message": "Re-authentication is required to access your vault again." }, + "unlockMethodNeededToChangeTimeoutActionDesc": { + "message": "Set up an unlock method to change your vault timeout action." + }, "lock": { "message": "Lock", "description": "Verb form: to make secure or inaccesible by" @@ -1512,12 +1515,6 @@ "permanentlyDeletedItem": { "message": "Item permanently deleted" }, - "restoreItem": { - "message": "Restore item" - }, - "restoreItemConfirmation": { - "message": "Are you sure you want to restore this item?" - }, "restoredItem": { "message": "Item restored" }, @@ -2112,8 +2109,8 @@ "logInWithAnotherDevice": { "message": "Log in with another device" }, - "logInInitiated": { - "message": "Log in initiated" + "loginInitiated": { + "message": "Login initiated" }, "notificationSentDevice": { "message": "A notification has been sent to your device." @@ -2252,21 +2249,171 @@ "windowsBiometricUpdateWarningTitle": { "message": "Recommended Settings Update" }, + "deviceApprovalRequired": { + "message": "Device approval required. Select an approval option below:" + }, + "rememberThisDevice": { + "message": "Remember this device" + }, + "uncheckIfPublicDevice": { + "message": "Uncheck if using a public device" + }, + "approveFromYourOtherDevice": { + "message": "Approve from your other device" + }, + "requestAdminApproval": { + "message": "Request admin approval" + }, + "approveWithMasterPassword": { + "message": "Approve with master password" + }, "region": { "message": "Region" }, + "ssoIdentifierRequired": { + "message": "Organization SSO identifier is required." + }, "eu": { "message": "EU", "description": "European Union" }, - "us": { - "message": "US", - "description": "United States" + "loggingInOn": { + "message": "Logging in on" + }, + "usDomain": { + "message": "bitwarden.com" + }, + "euDomain": { + "message": "bitwarden.eu" }, "selfHosted": { "message": "Self-hosted" }, "accessDenied": { "message": "Access denied. You do not have permission to view this page." + }, + "accountSuccessfullyCreated": { + "message": "Account successfully created!" + }, + "adminApprovalRequested": { + "message": "Admin approval requested" + }, + "adminApprovalRequestSentToAdmins": { + "message": "Your request has been sent to your admin." + }, + "youWillBeNotifiedOnceApproved": { + "message": "You will be notified once approved." + }, + "troubleLoggingIn": { + "message": "Trouble logging in?" + }, + "loginApproved": { + "message": "Login approved" + }, + "userEmailMissing": { + "message": "User email missing" + }, + "deviceTrusted": { + "message": "Device trusted" + }, + "inputRequired": { + "message": "Input is required." + }, + "required": { + "message": "required" + }, + "search": { + "message": "Search" + }, + "inputMinLength": { + "message": "Input must be at least $COUNT$ characters long.", + "placeholders": { + "count": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxLength": { + "message": "Input must not exceed $COUNT$ characters in length.", + "placeholders": { + "count": { + "content": "$1", + "example": "20" + } + } + }, + "inputForbiddenCharacters": { + "message": "The following characters are not allowed: $CHARACTERS$", + "placeholders": { + "characters": { + "content": "$1", + "example": "@, #, $, %" + } + } + }, + "inputMinValue": { + "message": "Input value must be at least $MIN$.", + "placeholders": { + "min": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxValue": { + "message": "Input value must not exceed $MAX$.", + "placeholders": { + "max": { + "content": "$1", + "example": "100" + } + } + }, + "multipleInputEmails": { + "message": "1 or more emails are invalid" + }, + "inputTrimValidator": { + "message": "Input must not contain only whitespace.", + "description": "Notification to inform the user that a form's input can't contain only whitespace." + }, + "inputEmail": { + "message": "Input is not an email address." + }, + "fieldsNeedAttention": { + "message": "$COUNT$ field(s) above need your attention.", + "placeholders": { + "count": { + "content": "$1", + "example": "4" + } + } + }, + "selectPlaceholder": { + "message": "-- Select --" + }, + "multiSelectPlaceholder": { + "message": "-- Type to filter --" + }, + "multiSelectLoading": { + "message": "Retrieving options..." + }, + "multiSelectNotFound": { + "message": "No items found" + }, + "multiSelectClearAll": { + "message": "Clear all" + }, + "plusNMore": { + "message": "+ $QUANTITY$ more", + "placeholders": { + "quantity": { + "content": "$1", + "example": "5" + } + } + }, + "submenu": { + "message": "Submenu" } } diff --git a/apps/desktop/src/locales/da/messages.json b/apps/desktop/src/locales/da/messages.json index fda5cea1451..157e1313ff5 100644 --- a/apps/desktop/src/locales/da/messages.json +++ b/apps/desktop/src/locales/da/messages.json @@ -1077,8 +1077,8 @@ "premiumSignUpStorage": { "message": "1 GB krypteret lagerplads til filvedhæftninger." }, - "premiumSignUpTwoStep": { - "message": "Yderligere totrins-loginmuligheder, såsom YubiKey, FIDO U2F og Duo." + "premiumSignUpTwoStepOptions": { + "message": "Proprietære totrins-login muligheder, såsom YubiKey og Duo." }, "premiumSignUpReports": { "message": "Adgangskodehygiejne, kontosundhed og rapporter om datalæk til at holde din boks sikker." @@ -1492,6 +1492,9 @@ "vaultTimeoutActionLogOutDesc": { "message": "Gengodkendelse kræves for at få adgang til din boks igen." }, + "unlockMethodNeededToChangeTimeoutActionDesc": { + "message": "Opsæt en oplåsningsmetode til at ændre bokstimeouthandlingen." + }, "lock": { "message": "Lås", "description": "Verb form: to make secure or inaccesible by" @@ -1512,12 +1515,6 @@ "permanentlyDeletedItem": { "message": "Emne slettet permanent" }, - "restoreItem": { - "message": "Gendan emne" - }, - "restoreItemConfirmation": { - "message": "Sikker på, at du vil gendanne dette emne?" - }, "restoredItem": { "message": "Emne gendannet" }, @@ -2112,7 +2109,7 @@ "logInWithAnotherDevice": { "message": "Log ind med en anden enhed" }, - "logInInitiated": { + "loginInitiated": { "message": "Indlogning påbegyndt" }, "notificationSentDevice": { @@ -2252,21 +2249,171 @@ "windowsBiometricUpdateWarningTitle": { "message": "Anbefalet indstillingsopdatering" }, + "deviceApprovalRequired": { + "message": "Enhedsgodkendelse kræves. Vælg en godkendelsesmulighed nedenfor:" + }, + "rememberThisDevice": { + "message": "Husk denne enhed" + }, + "uncheckIfPublicDevice": { + "message": "Slå fra, hvis en offentlig enhed benyttes" + }, + "approveFromYourOtherDevice": { + "message": "Godkend med min anden enhed" + }, + "requestAdminApproval": { + "message": "Anmod om admin-godkendelse" + }, + "approveWithMasterPassword": { + "message": "Godkend med hovedadgangskode" + }, "region": { "message": "Region" }, + "ssoIdentifierRequired": { + "message": "Organisations SSO-identifikator kræves." + }, "eu": { "message": "EU", "description": "European Union" }, - "us": { - "message": "USA", - "description": "United States" + "loggingInOn": { + "message": "Logger ind på" + }, + "usDomain": { + "message": "bitwarden.com" + }, + "euDomain": { + "message": "bitwarden.eu" }, "selfHosted": { "message": "Selv-hostet" }, "accessDenied": { "message": "Adgang nægtet. Nødvendig tilladelse til at se siden mangler." + }, + "accountSuccessfullyCreated": { + "message": "Konto oprettet!" + }, + "adminApprovalRequested": { + "message": "Admin-godkendelse udbedt" + }, + "adminApprovalRequestSentToAdmins": { + "message": "Anmodningen er sendt til din admin." + }, + "youWillBeNotifiedOnceApproved": { + "message": "Du underrettes, når godkendelse foreligger." + }, + "troubleLoggingIn": { + "message": "Problemer med at logge ind?" + }, + "loginApproved": { + "message": "Indlogning godkendt" + }, + "userEmailMissing": { + "message": "Brugers e-mail mangler" + }, + "deviceTrusted": { + "message": "Enhed betroet" + }, + "inputRequired": { + "message": "Input obligatorisk." + }, + "required": { + "message": "obligatorisk" + }, + "search": { + "message": "Søg" + }, + "inputMinLength": { + "message": "Input skal udgøre minimum $COUNT$ tegn.", + "placeholders": { + "count": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxLength": { + "message": "Input må maksimalt udgøre $COUNT$ tegn.", + "placeholders": { + "count": { + "content": "$1", + "example": "20" + } + } + }, + "inputForbiddenCharacters": { + "message": "Flg. tegn er ikke tilladt: $CHARACTERS$", + "placeholders": { + "characters": { + "content": "$1", + "example": "@, #, $, %" + } + } + }, + "inputMinValue": { + "message": "Inputværdi skal være mindst $MIN$.", + "placeholders": { + "min": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxValue": { + "message": "Inputværdi må ikke overstige $MAX$.", + "placeholders": { + "max": { + "content": "$1", + "example": "100" + } + } + }, + "multipleInputEmails": { + "message": "1 eller flere e-mails er ugyldige" + }, + "inputTrimValidator": { + "message": "Input må ikke indeholde kun mellemrum.", + "description": "Notification to inform the user that a form's input can't contain only whitespace." + }, + "inputEmail": { + "message": "Input er ikke en e-mailadresse." + }, + "fieldsNeedAttention": { + "message": "$COUNT$ felt(er) ovenfor kræver opmærksomhed.", + "placeholders": { + "count": { + "content": "$1", + "example": "4" + } + } + }, + "selectPlaceholder": { + "message": "-- Vælg --" + }, + "multiSelectPlaceholder": { + "message": "-- Skriv for at filtrere --" + }, + "multiSelectLoading": { + "message": "Henter indstillinger…" + }, + "multiSelectNotFound": { + "message": "Ingen emner fundet" + }, + "multiSelectClearAll": { + "message": "Ryd alt" + }, + "plusNMore": { + "message": "+ $QUANTITY$ flere", + "placeholders": { + "quantity": { + "content": "$1", + "example": "5" + } + } + }, + "submenu": { + "message": "Undermenu" } } diff --git a/apps/desktop/src/locales/de/messages.json b/apps/desktop/src/locales/de/messages.json index 6a521490b70..d16eb636284 100644 --- a/apps/desktop/src/locales/de/messages.json +++ b/apps/desktop/src/locales/de/messages.json @@ -163,7 +163,7 @@ "message": "Reisepassnummer" }, "licenseNumber": { - "message": "Führerscheinnummer" + "message": "Lizenznummer" }, "email": { "message": "E-Mail" @@ -491,7 +491,7 @@ "message": "Ordner gelöscht" }, "loginOrCreateNewAccount": { - "message": "Einloggen oder einen neuen Account erstellen, um auf den Tresor zuzugreifen." + "message": "Melde dich an oder erstelle ein neues Konto, um auf deinen Tresor zuzugreifen." }, "createAccount": { "message": "Konto erstellen" @@ -615,7 +615,7 @@ } }, "rememberMe": { - "message": "Eingeloggt bleiben" + "message": "Angemeldet bleiben" }, "sendVerificationCodeEmailAgain": { "message": "E-Mail mit Bestätigungscode erneut versenden" @@ -824,7 +824,7 @@ "message": "Entsperren" }, "loggedInAsOn": { - "message": "Eingeloggt als $EMAIL$ auf $HOSTNAME$.", + "message": "Angemeldet als $EMAIL$ auf $HOSTNAME$.", "placeholders": { "email": { "content": "$1", @@ -1077,8 +1077,8 @@ "premiumSignUpStorage": { "message": "1 GB verschlüsselter Speicherplatz für Dateianhänge." }, - "premiumSignUpTwoStep": { - "message": "Zusätzliche Zwei-Faktor-Anmeldung über YubiKey, FIDO U2F, und Duo." + "premiumSignUpTwoStepOptions": { + "message": "Proprietäre Optionen für die Zwei-Faktor Authentifizierung wie YubiKey und Duo." }, "premiumSignUpReports": { "message": "Berichte über Kennworthygiene, Kontostatus und Datenschutzverletzungen, um Ihren Tresor sicher zu halten." @@ -1492,6 +1492,9 @@ "vaultTimeoutActionLogOutDesc": { "message": "Um wieder auf deinen Tresor zugreifen zu können, ist eine erneute Authentifizierung erforderlich." }, + "unlockMethodNeededToChangeTimeoutActionDesc": { + "message": "Richte eine Entsperrmethode ein, um deine Aktion bei Timeout-Timeout zu ändern." + }, "lock": { "message": "Sperren", "description": "Verb form: to make secure or inaccesible by" @@ -1512,12 +1515,6 @@ "permanentlyDeletedItem": { "message": "Eintrag dauerhaft gelöscht" }, - "restoreItem": { - "message": "Eintrag wiederherstellen" - }, - "restoreItemConfirmation": { - "message": "Soll dieser Eintrag wirklich wiederhergestellt werden?" - }, "restoredItem": { "message": "Eintrag wiederhergestellt" }, @@ -2112,7 +2109,7 @@ "logInWithAnotherDevice": { "message": "Mit einem anderen Gerät anmelden" }, - "logInInitiated": { + "loginInitiated": { "message": "Anmeldung eingeleitet" }, "notificationSentDevice": { @@ -2252,21 +2249,171 @@ "windowsBiometricUpdateWarningTitle": { "message": "Empfohlene Aktualisierung der Einstellungen" }, + "deviceApprovalRequired": { + "message": "Geräte-Genehmigung erforderlich. Wähle unten eine Genehmigungsoption aus:" + }, + "rememberThisDevice": { + "message": "Dieses Gerät merken" + }, + "uncheckIfPublicDevice": { + "message": "Deaktivieren, wenn ein öffentliches Gerät verwendet wird" + }, + "approveFromYourOtherDevice": { + "message": "Von deinem anderen Gerät genehmigen" + }, + "requestAdminApproval": { + "message": "Admin-Genehmigung anfragen" + }, + "approveWithMasterPassword": { + "message": "Mit Master-Passwort genehmigen" + }, "region": { "message": "Region" }, + "ssoIdentifierRequired": { + "message": "SSO-Kennung der Organisation erforderlich." + }, "eu": { "message": "EU", "description": "European Union" }, - "us": { - "message": "US", - "description": "United States" + "loggingInOn": { + "message": "Anmelden bei" + }, + "usDomain": { + "message": "bitwarden.com" + }, + "euDomain": { + "message": "bitwarden.eu" }, "selfHosted": { "message": "Selbst gehostet" }, "accessDenied": { "message": "Zugriff verweigert. Du hast keine Berechtigung, diese Seite anzuzeigen." + }, + "accountSuccessfullyCreated": { + "message": "Konto erfolgreich erstellt!" + }, + "adminApprovalRequested": { + "message": "Admin-Genehmigung angefragt" + }, + "adminApprovalRequestSentToAdmins": { + "message": "Deine Anfrage wurde an deinen Administrator gesendet." + }, + "youWillBeNotifiedOnceApproved": { + "message": "Nach einer Genehmigung wirst du benachrichtigt." + }, + "troubleLoggingIn": { + "message": "Probleme beim Anmelden?" + }, + "loginApproved": { + "message": "Anmeldung genehmigt" + }, + "userEmailMissing": { + "message": "E-Mail-Adresse des Benutzers fehlt" + }, + "deviceTrusted": { + "message": "Gerät wird vertraut" + }, + "inputRequired": { + "message": "Eingabe ist erforderlich." + }, + "required": { + "message": "Erforderlich" + }, + "search": { + "message": "Suche" + }, + "inputMinLength": { + "message": "Die Eingabe muss mindestens $COUNT$ Zeichen lang sein.", + "placeholders": { + "count": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxLength": { + "message": "Die Eingabe darf $COUNT$ Zeichen nicht überschreiten.", + "placeholders": { + "count": { + "content": "$1", + "example": "20" + } + } + }, + "inputForbiddenCharacters": { + "message": "Die folgenden Zeichen sind nicht erlaubt: $CHARACTERS$", + "placeholders": { + "characters": { + "content": "$1", + "example": "@, #, $, %" + } + } + }, + "inputMinValue": { + "message": "Der Eingabewert muss mindestens $MIN$ betragen.", + "placeholders": { + "min": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxValue": { + "message": "Der Eingabewert darf $MAX$ nicht überschreiten.", + "placeholders": { + "max": { + "content": "$1", + "example": "100" + } + } + }, + "multipleInputEmails": { + "message": "Mindestens 1 E-Mail-Adresse ist ungültig" + }, + "inputTrimValidator": { + "message": "Die Eingabe darf nicht nur Leerzeichen enthalten.", + "description": "Notification to inform the user that a form's input can't contain only whitespace." + }, + "inputEmail": { + "message": "Die Eingabe ist keine E-Mail-Adresse." + }, + "fieldsNeedAttention": { + "message": "$COUNT$ Feld(er) oben benötigen deine Aufmerksamkeit.", + "placeholders": { + "count": { + "content": "$1", + "example": "4" + } + } + }, + "selectPlaceholder": { + "message": "-- Auswählen --" + }, + "multiSelectPlaceholder": { + "message": "-- Schreiben zum Filtern --" + }, + "multiSelectLoading": { + "message": "Optionen werden abgerufen..." + }, + "multiSelectNotFound": { + "message": "Keine Einträge gefunden" + }, + "multiSelectClearAll": { + "message": "Alles löschen" + }, + "plusNMore": { + "message": "+ $QUANTITY$ mehr", + "placeholders": { + "quantity": { + "content": "$1", + "example": "5" + } + } + }, + "submenu": { + "message": "Untermenü" } } diff --git a/apps/desktop/src/locales/el/messages.json b/apps/desktop/src/locales/el/messages.json index d6c8d1e50c3..fd800e8d713 100644 --- a/apps/desktop/src/locales/el/messages.json +++ b/apps/desktop/src/locales/el/messages.json @@ -1077,8 +1077,8 @@ "premiumSignUpStorage": { "message": "1 GB κρυπτογραφημένο αποθηκευτικό χώρο για συνημμένα αρχεία." }, - "premiumSignUpTwoStep": { - "message": "Πρόσθετες επιλογές σύνδεσης δύο βημάτων, όπως το YubiKey, το FIDO U2F και το Duo." + "premiumSignUpTwoStepOptions": { + "message": "Proprietary two-step login options such as YubiKey and Duo." }, "premiumSignUpReports": { "message": "Ασφάλεια κωδικών, υγιής λογαριασμός και αναφορές παραβίασης δεδομένων για να διατηρήσετε ασφαλή τη λίστα σας." @@ -1393,7 +1393,7 @@ "message": "Ξεκλειδώστε με το Windows Hello" }, "additionalWindowsHelloSettings": { - "message": "Additional Windows Hello settings" + "message": "Πρόσθετες ρυθμίσεις του Windows Hello" }, "windowsHelloConsentMessage": { "message": "Επαληθεύστε για το Bitwarden." @@ -1408,13 +1408,13 @@ "message": "Ξεκλειδώστε το vault σας" }, "autoPromptWindowsHello": { - "message": "Ζητήστε από τα Windows Γεια σας κατά την έναρξη" + "message": "Εμφάνιση Windows Hello κατά την εκκίνηση της εφαρμογής" }, "autoPromptTouchId": { "message": "Ερώτηση για το Touch ID κατά την εκκίνηση" }, "requirePasswordOnStart": { - "message": "Require password or PIN on app start" + "message": "Να απαιτείται κωδικός πρόσβασης ή PIN κατά την εκκίνηση της εφαρμογής" }, "recommendedForSecurity": { "message": "Συνίσταται για ασφάλεια." @@ -1492,6 +1492,9 @@ "vaultTimeoutActionLogOutDesc": { "message": "Ένα αποσυνδεδεμένο vault απαιτεί να κάνετε ξανά έλεγχο ταυτότητας για να αποκτήσετε πρόσβαση σε αυτό." }, + "unlockMethodNeededToChangeTimeoutActionDesc": { + "message": "Set up an unlock method to change your vault timeout action." + }, "lock": { "message": "Κλείδωμα", "description": "Verb form: to make secure or inaccesible by" @@ -1512,12 +1515,6 @@ "permanentlyDeletedItem": { "message": "Μόνιμα Διεγραμμένο Στοιχείο" }, - "restoreItem": { - "message": "Ανάκτηση Στοιχείου" - }, - "restoreItemConfirmation": { - "message": "Είστε βέβαιοι ότι θέλετε να ανακτήσετε αυτό το στοιχείο;" - }, "restoredItem": { "message": "Στοιχείο που έχει Ανακτηθεί" }, @@ -2112,8 +2109,8 @@ "logInWithAnotherDevice": { "message": "Συνδεθείτε με άλλη συσκευή" }, - "logInInitiated": { - "message": "Η σύνδεση ξεκίνησε" + "loginInitiated": { + "message": "Login initiated" }, "notificationSentDevice": { "message": "Μια ειδοποίηση έχει σταλεί στη συσκευή σας." @@ -2252,21 +2249,171 @@ "windowsBiometricUpdateWarningTitle": { "message": "Ενημέρωση Προτεινόμενων Ρυθμίσεων" }, + "deviceApprovalRequired": { + "message": "Device approval required. Select an approval option below:" + }, + "rememberThisDevice": { + "message": "Remember this device" + }, + "uncheckIfPublicDevice": { + "message": "Uncheck if using a public device" + }, + "approveFromYourOtherDevice": { + "message": "Approve from your other device" + }, + "requestAdminApproval": { + "message": "Request admin approval" + }, + "approveWithMasterPassword": { + "message": "Approve with master password" + }, "region": { - "message": "Περιοχή" + "message": "Region" + }, + "ssoIdentifierRequired": { + "message": "Organization SSO identifier is required." }, "eu": { - "message": "ΕΕ", + "message": "EU", "description": "European Union" }, - "us": { - "message": "ΗΠΑ", - "description": "United States" + "loggingInOn": { + "message": "Logging in on" + }, + "usDomain": { + "message": "bitwarden.com" + }, + "euDomain": { + "message": "bitwarden.eu" }, "selfHosted": { "message": "Self-hosted" }, "accessDenied": { "message": "Access denied. You do not have permission to view this page." + }, + "accountSuccessfullyCreated": { + "message": "Account successfully created!" + }, + "adminApprovalRequested": { + "message": "Admin approval requested" + }, + "adminApprovalRequestSentToAdmins": { + "message": "Your request has been sent to your admin." + }, + "youWillBeNotifiedOnceApproved": { + "message": "You will be notified once approved." + }, + "troubleLoggingIn": { + "message": "Trouble logging in?" + }, + "loginApproved": { + "message": "Login approved" + }, + "userEmailMissing": { + "message": "User email missing" + }, + "deviceTrusted": { + "message": "Device trusted" + }, + "inputRequired": { + "message": "Input is required." + }, + "required": { + "message": "required" + }, + "search": { + "message": "Search" + }, + "inputMinLength": { + "message": "Input must be at least $COUNT$ characters long.", + "placeholders": { + "count": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxLength": { + "message": "Input must not exceed $COUNT$ characters in length.", + "placeholders": { + "count": { + "content": "$1", + "example": "20" + } + } + }, + "inputForbiddenCharacters": { + "message": "The following characters are not allowed: $CHARACTERS$", + "placeholders": { + "characters": { + "content": "$1", + "example": "@, #, $, %" + } + } + }, + "inputMinValue": { + "message": "Input value must be at least $MIN$.", + "placeholders": { + "min": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxValue": { + "message": "Input value must not exceed $MAX$.", + "placeholders": { + "max": { + "content": "$1", + "example": "100" + } + } + }, + "multipleInputEmails": { + "message": "1 or more emails are invalid" + }, + "inputTrimValidator": { + "message": "Input must not contain only whitespace.", + "description": "Notification to inform the user that a form's input can't contain only whitespace." + }, + "inputEmail": { + "message": "Input is not an email address." + }, + "fieldsNeedAttention": { + "message": "$COUNT$ field(s) above need your attention.", + "placeholders": { + "count": { + "content": "$1", + "example": "4" + } + } + }, + "selectPlaceholder": { + "message": "-- Select --" + }, + "multiSelectPlaceholder": { + "message": "-- Type to filter --" + }, + "multiSelectLoading": { + "message": "Retrieving options..." + }, + "multiSelectNotFound": { + "message": "No items found" + }, + "multiSelectClearAll": { + "message": "Clear all" + }, + "plusNMore": { + "message": "+ $QUANTITY$ more", + "placeholders": { + "quantity": { + "content": "$1", + "example": "5" + } + } + }, + "submenu": { + "message": "Submenu" } } diff --git a/apps/desktop/src/locales/en/messages.json b/apps/desktop/src/locales/en/messages.json index 9debdbc13fe..dbcb70d5e0c 100644 --- a/apps/desktop/src/locales/en/messages.json +++ b/apps/desktop/src/locales/en/messages.json @@ -1077,8 +1077,8 @@ "premiumSignUpStorage": { "message": "1 GB encrypted storage for file attachments." }, - "premiumSignUpTwoStep": { - "message": "Additional two-step login options such as YubiKey, FIDO U2F, and Duo." + "premiumSignUpTwoStepOptions": { + "message": "Proprietary two-step login options such as YubiKey and Duo." }, "premiumSignUpReports": { "message": "Password hygiene, account health, and data breach reports to keep your vault safe." @@ -1492,6 +1492,9 @@ "vaultTimeoutActionLogOutDesc": { "message": "Re-authentication is required to access your vault again." }, + "unlockMethodNeededToChangeTimeoutActionDesc": { + "message": "Set up an unlock method to change your vault timeout action." + }, "lock": { "message": "Lock", "description": "Verb form: to make secure or inaccesible by" @@ -1512,12 +1515,6 @@ "permanentlyDeletedItem": { "message": "Item permanently deleted" }, - "restoreItem": { - "message": "Restore item" - }, - "restoreItemConfirmation": { - "message": "Are you sure you want to restore this item?" - }, "restoredItem": { "message": "Item restored" }, @@ -2112,8 +2109,8 @@ "logInWithAnotherDevice": { "message": "Log in with another device" }, - "logInInitiated": { - "message": "Log in initiated" + "loginInitiated": { + "message": "Login initiated" }, "notificationSentDevice": { "message": "A notification has been sent to your device." @@ -2252,21 +2249,171 @@ "windowsBiometricUpdateWarningTitle": { "message": "Recommended Settings Update" }, + "deviceApprovalRequired": { + "message": "Device approval required. Select an approval option below:" + }, + "rememberThisDevice": { + "message": "Remember this device" + }, + "uncheckIfPublicDevice": { + "message": "Uncheck if using a public device" + }, + "approveFromYourOtherDevice": { + "message": "Approve from your other device" + }, + "requestAdminApproval": { + "message": "Request admin approval" + }, + "approveWithMasterPassword": { + "message": "Approve with master password" + }, "region": { "message": "Region" }, + "ssoIdentifierRequired": { + "message": "Organization SSO identifier is required." + }, "eu": { "message": "EU", "description": "European Union" }, - "us": { - "message": "US", - "description": "United States" + "loggingInOn": { + "message": "Logging in on" + }, + "usDomain": { + "message": "bitwarden.com" + }, + "euDomain": { + "message": "bitwarden.eu" }, "selfHosted": { "message": "Self-hosted" }, "accessDenied": { "message": "Access denied. You do not have permission to view this page." + }, + "accountSuccessfullyCreated": { + "message": "Account successfully created!" + }, + "adminApprovalRequested": { + "message": "Admin approval requested" + }, + "adminApprovalRequestSentToAdmins": { + "message": "Your request has been sent to your admin." + }, + "youWillBeNotifiedOnceApproved": { + "message": "You will be notified once approved." + }, + "troubleLoggingIn": { + "message": "Trouble logging in?" + }, + "loginApproved": { + "message": "Login approved" + }, + "userEmailMissing": { + "message": "User email missing" + }, + "deviceTrusted": { + "message": "Device trusted" + }, + "inputRequired": { + "message": "Input is required." + }, + "required": { + "message": "required" + }, + "search": { + "message": "Search" + }, + "inputMinLength": { + "message": "Input must be at least $COUNT$ characters long.", + "placeholders": { + "count": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxLength": { + "message": "Input must not exceed $COUNT$ characters in length.", + "placeholders": { + "count": { + "content": "$1", + "example": "20" + } + } + }, + "inputForbiddenCharacters": { + "message": "The following characters are not allowed: $CHARACTERS$", + "placeholders": { + "characters": { + "content": "$1", + "example": "@, #, $, %" + } + } + }, + "inputMinValue": { + "message": "Input value must be at least $MIN$.", + "placeholders": { + "min": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxValue": { + "message": "Input value must not exceed $MAX$.", + "placeholders": { + "max": { + "content": "$1", + "example": "100" + } + } + }, + "multipleInputEmails": { + "message": "1 or more emails are invalid" + }, + "inputTrimValidator": { + "message": "Input must not contain only whitespace.", + "description": "Notification to inform the user that a form's input can't contain only whitespace." + }, + "inputEmail": { + "message": "Input is not an email address." + }, + "fieldsNeedAttention": { + "message": "$COUNT$ field(s) above need your attention.", + "placeholders": { + "count": { + "content": "$1", + "example": "4" + } + } + }, + "selectPlaceholder": { + "message": "-- Select --" + }, + "multiSelectPlaceholder": { + "message": "-- Type to filter --" + }, + "multiSelectLoading": { + "message": "Retrieving options..." + }, + "multiSelectNotFound": { + "message": "No items found" + }, + "multiSelectClearAll": { + "message": "Clear all" + }, + "plusNMore": { + "message": "+ $QUANTITY$ more", + "placeholders": { + "quantity": { + "content": "$1", + "example": "5" + } + } + }, + "submenu": { + "message": "Submenu" } } diff --git a/apps/desktop/src/locales/en_GB/messages.json b/apps/desktop/src/locales/en_GB/messages.json index 6a679b10417..6bc9772eb88 100644 --- a/apps/desktop/src/locales/en_GB/messages.json +++ b/apps/desktop/src/locales/en_GB/messages.json @@ -1077,8 +1077,8 @@ "premiumSignUpStorage": { "message": "1 GB encrypted storage for file attachments." }, - "premiumSignUpTwoStep": { - "message": "Additional two-step login options such as YubiKey, FIDO U2F, and Duo." + "premiumSignUpTwoStepOptions": { + "message": "Proprietary two-step login options such as YubiKey and Duo." }, "premiumSignUpReports": { "message": "Password hygiene, account health, and data breach reports to keep your vault safe." @@ -1492,6 +1492,9 @@ "vaultTimeoutActionLogOutDesc": { "message": "Re-authentication is required to access your vault again." }, + "unlockMethodNeededToChangeTimeoutActionDesc": { + "message": "Set up an unlock method to change your vault timeout action." + }, "lock": { "message": "Lock", "description": "Verb form: to make secure or inaccesible by" @@ -1512,12 +1515,6 @@ "permanentlyDeletedItem": { "message": "Item permanently deleted" }, - "restoreItem": { - "message": "Restore item" - }, - "restoreItemConfirmation": { - "message": "Are you sure you want to restore this item?" - }, "restoredItem": { "message": "Item restored" }, @@ -2112,8 +2109,8 @@ "logInWithAnotherDevice": { "message": "Log in with another device" }, - "logInInitiated": { - "message": "Log in initiated" + "loginInitiated": { + "message": "Login initiated" }, "notificationSentDevice": { "message": "A notification has been sent to your device." @@ -2252,21 +2249,171 @@ "windowsBiometricUpdateWarningTitle": { "message": "Recommended Settings Update" }, + "deviceApprovalRequired": { + "message": "Device approval required. Select an approval option below:" + }, + "rememberThisDevice": { + "message": "Remember this device" + }, + "uncheckIfPublicDevice": { + "message": "Uncheck if using a public device" + }, + "approveFromYourOtherDevice": { + "message": "Approve from your other device" + }, + "requestAdminApproval": { + "message": "Request admin approval" + }, + "approveWithMasterPassword": { + "message": "Approve with master password" + }, "region": { "message": "Region" }, + "ssoIdentifierRequired": { + "message": "Organization SSO identifier is required." + }, "eu": { "message": "EU", "description": "European Union" }, - "us": { - "message": "US", - "description": "United States" + "loggingInOn": { + "message": "Logging in on" + }, + "usDomain": { + "message": "bitwarden.com" + }, + "euDomain": { + "message": "bitwarden.eu" }, "selfHosted": { "message": "Self-hosted" }, "accessDenied": { "message": "Access denied. You do not have permission to view this page." + }, + "accountSuccessfullyCreated": { + "message": "Account successfully created!" + }, + "adminApprovalRequested": { + "message": "Admin approval requested" + }, + "adminApprovalRequestSentToAdmins": { + "message": "Your request has been sent to your admin." + }, + "youWillBeNotifiedOnceApproved": { + "message": "You will be notified once approved." + }, + "troubleLoggingIn": { + "message": "Trouble logging in?" + }, + "loginApproved": { + "message": "Login approved" + }, + "userEmailMissing": { + "message": "User email missing" + }, + "deviceTrusted": { + "message": "Device trusted" + }, + "inputRequired": { + "message": "Input is required." + }, + "required": { + "message": "required" + }, + "search": { + "message": "Search" + }, + "inputMinLength": { + "message": "Input must be at least $COUNT$ characters long.", + "placeholders": { + "count": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxLength": { + "message": "Input must not exceed $COUNT$ characters in length.", + "placeholders": { + "count": { + "content": "$1", + "example": "20" + } + } + }, + "inputForbiddenCharacters": { + "message": "The following characters are not allowed: $CHARACTERS$", + "placeholders": { + "characters": { + "content": "$1", + "example": "@, #, $, %" + } + } + }, + "inputMinValue": { + "message": "Input value must be at least $MIN$.", + "placeholders": { + "min": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxValue": { + "message": "Input value must not exceed $MAX$.", + "placeholders": { + "max": { + "content": "$1", + "example": "100" + } + } + }, + "multipleInputEmails": { + "message": "1 or more emails are invalid" + }, + "inputTrimValidator": { + "message": "Input must not contain only whitespace.", + "description": "Notification to inform the user that a form's input can't contain only whitespace." + }, + "inputEmail": { + "message": "Input is not an email address." + }, + "fieldsNeedAttention": { + "message": "$COUNT$ field(s) above need your attention.", + "placeholders": { + "count": { + "content": "$1", + "example": "4" + } + } + }, + "selectPlaceholder": { + "message": "-- Select --" + }, + "multiSelectPlaceholder": { + "message": "-- Type to filter --" + }, + "multiSelectLoading": { + "message": "Retrieving options..." + }, + "multiSelectNotFound": { + "message": "No items found" + }, + "multiSelectClearAll": { + "message": "Clear all" + }, + "plusNMore": { + "message": "+ $QUANTITY$ more", + "placeholders": { + "quantity": { + "content": "$1", + "example": "5" + } + } + }, + "submenu": { + "message": "Submenu" } } diff --git a/apps/desktop/src/locales/en_IN/messages.json b/apps/desktop/src/locales/en_IN/messages.json index 637e752218d..363648da567 100644 --- a/apps/desktop/src/locales/en_IN/messages.json +++ b/apps/desktop/src/locales/en_IN/messages.json @@ -1077,8 +1077,8 @@ "premiumSignUpStorage": { "message": "1 GB encrypted storage for file attachments." }, - "premiumSignUpTwoStep": { - "message": "Additional two-step login options such as YubiKey, FIDO U2F, and Duo." + "premiumSignUpTwoStepOptions": { + "message": "Proprietary two-step login options such as YubiKey and Duo." }, "premiumSignUpReports": { "message": "Password hygiene, account health, and data breach reports to keep your vault safe." @@ -1492,6 +1492,9 @@ "vaultTimeoutActionLogOutDesc": { "message": "A logged out vault requires that you re-authenticate to access it again." }, + "unlockMethodNeededToChangeTimeoutActionDesc": { + "message": "Set up an unlock method to change your vault timeout action." + }, "lock": { "message": "Lock", "description": "Verb form: to make secure or inaccesible by" @@ -1512,12 +1515,6 @@ "permanentlyDeletedItem": { "message": "Permanently deleted item" }, - "restoreItem": { - "message": "Restore item" - }, - "restoreItemConfirmation": { - "message": "Are you sure you want to restore this item?" - }, "restoredItem": { "message": "Restored item" }, @@ -2112,8 +2109,8 @@ "logInWithAnotherDevice": { "message": "Log in with another device" }, - "logInInitiated": { - "message": "Log in initiated" + "loginInitiated": { + "message": "Login initiated" }, "notificationSentDevice": { "message": "A notification has been sent to your device." @@ -2252,21 +2249,171 @@ "windowsBiometricUpdateWarningTitle": { "message": "Recommended Settings Update" }, + "deviceApprovalRequired": { + "message": "Device approval required. Select an approval option below:" + }, + "rememberThisDevice": { + "message": "Remember this device" + }, + "uncheckIfPublicDevice": { + "message": "Uncheck if using a public device" + }, + "approveFromYourOtherDevice": { + "message": "Approve from your other device" + }, + "requestAdminApproval": { + "message": "Request admin approval" + }, + "approveWithMasterPassword": { + "message": "Approve with master password" + }, "region": { "message": "Region" }, + "ssoIdentifierRequired": { + "message": "Organization SSO identifier is required." + }, "eu": { "message": "EU", "description": "European Union" }, - "us": { - "message": "US", - "description": "United States" + "loggingInOn": { + "message": "Logging in on" + }, + "usDomain": { + "message": "bitwarden.com" + }, + "euDomain": { + "message": "bitwarden.eu" }, "selfHosted": { "message": "Self-hosted" }, "accessDenied": { "message": "Access denied. You do not have permission to view this page." + }, + "accountSuccessfullyCreated": { + "message": "Account successfully created!" + }, + "adminApprovalRequested": { + "message": "Admin approval requested" + }, + "adminApprovalRequestSentToAdmins": { + "message": "Your request has been sent to your admin." + }, + "youWillBeNotifiedOnceApproved": { + "message": "You will be notified once approved." + }, + "troubleLoggingIn": { + "message": "Trouble logging in?" + }, + "loginApproved": { + "message": "Login approved" + }, + "userEmailMissing": { + "message": "User email missing" + }, + "deviceTrusted": { + "message": "Device trusted" + }, + "inputRequired": { + "message": "Input is required." + }, + "required": { + "message": "required" + }, + "search": { + "message": "Search" + }, + "inputMinLength": { + "message": "Input must be at least $COUNT$ characters long.", + "placeholders": { + "count": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxLength": { + "message": "Input must not exceed $COUNT$ characters in length.", + "placeholders": { + "count": { + "content": "$1", + "example": "20" + } + } + }, + "inputForbiddenCharacters": { + "message": "The following characters are not allowed: $CHARACTERS$", + "placeholders": { + "characters": { + "content": "$1", + "example": "@, #, $, %" + } + } + }, + "inputMinValue": { + "message": "Input value must be at least $MIN$.", + "placeholders": { + "min": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxValue": { + "message": "Input value must not exceed $MAX$.", + "placeholders": { + "max": { + "content": "$1", + "example": "100" + } + } + }, + "multipleInputEmails": { + "message": "1 or more emails are invalid" + }, + "inputTrimValidator": { + "message": "Input must not contain only whitespace.", + "description": "Notification to inform the user that a form's input can't contain only whitespace." + }, + "inputEmail": { + "message": "Input is not an email address." + }, + "fieldsNeedAttention": { + "message": "$COUNT$ field(s) above need your attention.", + "placeholders": { + "count": { + "content": "$1", + "example": "4" + } + } + }, + "selectPlaceholder": { + "message": "-- Select --" + }, + "multiSelectPlaceholder": { + "message": "-- Type to filter --" + }, + "multiSelectLoading": { + "message": "Retrieving options..." + }, + "multiSelectNotFound": { + "message": "No items found" + }, + "multiSelectClearAll": { + "message": "Clear all" + }, + "plusNMore": { + "message": "+ $QUANTITY$ more", + "placeholders": { + "quantity": { + "content": "$1", + "example": "5" + } + } + }, + "submenu": { + "message": "Submenu" } } diff --git a/apps/desktop/src/locales/eo/messages.json b/apps/desktop/src/locales/eo/messages.json index 1ece91c1e15..66195d90739 100644 --- a/apps/desktop/src/locales/eo/messages.json +++ b/apps/desktop/src/locales/eo/messages.json @@ -1077,8 +1077,8 @@ "premiumSignUpStorage": { "message": "1 GB encrypted storage for file attachments." }, - "premiumSignUpTwoStep": { - "message": "Additional two-step login options such as YubiKey, FIDO U2F, and Duo." + "premiumSignUpTwoStepOptions": { + "message": "Proprietary two-step login options such as YubiKey and Duo." }, "premiumSignUpReports": { "message": "Password hygiene, account health, and data breach reports to keep your vault safe." @@ -1492,6 +1492,9 @@ "vaultTimeoutActionLogOutDesc": { "message": "Re-authentication is required to access your vault again." }, + "unlockMethodNeededToChangeTimeoutActionDesc": { + "message": "Set up an unlock method to change your vault timeout action." + }, "lock": { "message": "Lock", "description": "Verb form: to make secure or inaccesible by" @@ -1512,12 +1515,6 @@ "permanentlyDeletedItem": { "message": "Item permanently deleted" }, - "restoreItem": { - "message": "Restore item" - }, - "restoreItemConfirmation": { - "message": "Are you sure you want to restore this item?" - }, "restoredItem": { "message": "Item restored" }, @@ -2112,8 +2109,8 @@ "logInWithAnotherDevice": { "message": "Log in with another device" }, - "logInInitiated": { - "message": "Log in initiated" + "loginInitiated": { + "message": "Login initiated" }, "notificationSentDevice": { "message": "A notification has been sent to your device." @@ -2252,21 +2249,171 @@ "windowsBiometricUpdateWarningTitle": { "message": "Recommended Settings Update" }, + "deviceApprovalRequired": { + "message": "Device approval required. Select an approval option below:" + }, + "rememberThisDevice": { + "message": "Remember this device" + }, + "uncheckIfPublicDevice": { + "message": "Uncheck if using a public device" + }, + "approveFromYourOtherDevice": { + "message": "Approve from your other device" + }, + "requestAdminApproval": { + "message": "Request admin approval" + }, + "approveWithMasterPassword": { + "message": "Approve with master password" + }, "region": { "message": "Region" }, + "ssoIdentifierRequired": { + "message": "Organization SSO identifier is required." + }, "eu": { "message": "EU", "description": "European Union" }, - "us": { - "message": "US", - "description": "United States" + "loggingInOn": { + "message": "Logging in on" + }, + "usDomain": { + "message": "bitwarden.com" + }, + "euDomain": { + "message": "bitwarden.eu" }, "selfHosted": { "message": "Self-hosted" }, "accessDenied": { "message": "Access denied. You do not have permission to view this page." + }, + "accountSuccessfullyCreated": { + "message": "Account successfully created!" + }, + "adminApprovalRequested": { + "message": "Admin approval requested" + }, + "adminApprovalRequestSentToAdmins": { + "message": "Your request has been sent to your admin." + }, + "youWillBeNotifiedOnceApproved": { + "message": "You will be notified once approved." + }, + "troubleLoggingIn": { + "message": "Trouble logging in?" + }, + "loginApproved": { + "message": "Login approved" + }, + "userEmailMissing": { + "message": "User email missing" + }, + "deviceTrusted": { + "message": "Device trusted" + }, + "inputRequired": { + "message": "Input is required." + }, + "required": { + "message": "required" + }, + "search": { + "message": "Search" + }, + "inputMinLength": { + "message": "Input must be at least $COUNT$ characters long.", + "placeholders": { + "count": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxLength": { + "message": "Input must not exceed $COUNT$ characters in length.", + "placeholders": { + "count": { + "content": "$1", + "example": "20" + } + } + }, + "inputForbiddenCharacters": { + "message": "The following characters are not allowed: $CHARACTERS$", + "placeholders": { + "characters": { + "content": "$1", + "example": "@, #, $, %" + } + } + }, + "inputMinValue": { + "message": "Input value must be at least $MIN$.", + "placeholders": { + "min": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxValue": { + "message": "Input value must not exceed $MAX$.", + "placeholders": { + "max": { + "content": "$1", + "example": "100" + } + } + }, + "multipleInputEmails": { + "message": "1 or more emails are invalid" + }, + "inputTrimValidator": { + "message": "Input must not contain only whitespace.", + "description": "Notification to inform the user that a form's input can't contain only whitespace." + }, + "inputEmail": { + "message": "Input is not an email address." + }, + "fieldsNeedAttention": { + "message": "$COUNT$ field(s) above need your attention.", + "placeholders": { + "count": { + "content": "$1", + "example": "4" + } + } + }, + "selectPlaceholder": { + "message": "-- Select --" + }, + "multiSelectPlaceholder": { + "message": "-- Type to filter --" + }, + "multiSelectLoading": { + "message": "Retrieving options..." + }, + "multiSelectNotFound": { + "message": "No items found" + }, + "multiSelectClearAll": { + "message": "Clear all" + }, + "plusNMore": { + "message": "+ $QUANTITY$ more", + "placeholders": { + "quantity": { + "content": "$1", + "example": "5" + } + } + }, + "submenu": { + "message": "Submenu" } } diff --git a/apps/desktop/src/locales/es/messages.json b/apps/desktop/src/locales/es/messages.json index c86bde31e87..b40c409d1b0 100644 --- a/apps/desktop/src/locales/es/messages.json +++ b/apps/desktop/src/locales/es/messages.json @@ -1077,8 +1077,8 @@ "premiumSignUpStorage": { "message": "1GB de espacio en disco cifrado." }, - "premiumSignUpTwoStep": { - "message": "Métodos de autenticación en dos pasos adicionales como YubiKey, FIDO U2F y Duo." + "premiumSignUpTwoStepOptions": { + "message": "Proprietary two-step login options such as YubiKey and Duo." }, "premiumSignUpReports": { "message": "Higiene de contraseña, salud de la cuenta e informes de violaciones de datos para mantener tu caja fuerte segura." @@ -1492,6 +1492,9 @@ "vaultTimeoutActionLogOutDesc": { "message": "Cerrar sesión en la caja fuerte requiere que vuelvas a autenticarte para acceder nuevamente a ella." }, + "unlockMethodNeededToChangeTimeoutActionDesc": { + "message": "Set up an unlock method to change your vault timeout action." + }, "lock": { "message": "Bloquear", "description": "Verb form: to make secure or inaccesible by" @@ -1512,12 +1515,6 @@ "permanentlyDeletedItem": { "message": "Elemento eliminado de forma permanente" }, - "restoreItem": { - "message": "Restaurar elemento" - }, - "restoreItemConfirmation": { - "message": "¿Estás seguro de que quieres restaurar este elemento?" - }, "restoredItem": { "message": "Elemento restaurado" }, @@ -2112,8 +2109,8 @@ "logInWithAnotherDevice": { "message": "Iniciar sesión con otro dispositivo" }, - "logInInitiated": { - "message": "Inicio de sesión en proceso" + "loginInitiated": { + "message": "Login initiated" }, "notificationSentDevice": { "message": "Se ha enviado una notificación a tu dispositivo." @@ -2252,21 +2249,171 @@ "windowsBiometricUpdateWarningTitle": { "message": "Actualización de ajustes recomendados" }, + "deviceApprovalRequired": { + "message": "Device approval required. Select an approval option below:" + }, + "rememberThisDevice": { + "message": "Remember this device" + }, + "uncheckIfPublicDevice": { + "message": "Uncheck if using a public device" + }, + "approveFromYourOtherDevice": { + "message": "Approve from your other device" + }, + "requestAdminApproval": { + "message": "Request admin approval" + }, + "approveWithMasterPassword": { + "message": "Approve with master password" + }, "region": { - "message": "Región" + "message": "Region" + }, + "ssoIdentifierRequired": { + "message": "Organization SSO identifier is required." }, "eu": { - "message": "Unión Europea", + "message": "EU", "description": "European Union" }, - "us": { - "message": "EE.UU.", - "description": "United States" + "loggingInOn": { + "message": "Logging in on" + }, + "usDomain": { + "message": "bitwarden.com" + }, + "euDomain": { + "message": "bitwarden.eu" }, "selfHosted": { "message": "Autoalojado" }, "accessDenied": { "message": "Acceso denegado. No tiene permiso para ver esta página." + }, + "accountSuccessfullyCreated": { + "message": "Account successfully created!" + }, + "adminApprovalRequested": { + "message": "Admin approval requested" + }, + "adminApprovalRequestSentToAdmins": { + "message": "Your request has been sent to your admin." + }, + "youWillBeNotifiedOnceApproved": { + "message": "You will be notified once approved." + }, + "troubleLoggingIn": { + "message": "Trouble logging in?" + }, + "loginApproved": { + "message": "Login approved" + }, + "userEmailMissing": { + "message": "User email missing" + }, + "deviceTrusted": { + "message": "Device trusted" + }, + "inputRequired": { + "message": "Input is required." + }, + "required": { + "message": "required" + }, + "search": { + "message": "Search" + }, + "inputMinLength": { + "message": "Input must be at least $COUNT$ characters long.", + "placeholders": { + "count": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxLength": { + "message": "Input must not exceed $COUNT$ characters in length.", + "placeholders": { + "count": { + "content": "$1", + "example": "20" + } + } + }, + "inputForbiddenCharacters": { + "message": "The following characters are not allowed: $CHARACTERS$", + "placeholders": { + "characters": { + "content": "$1", + "example": "@, #, $, %" + } + } + }, + "inputMinValue": { + "message": "Input value must be at least $MIN$.", + "placeholders": { + "min": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxValue": { + "message": "Input value must not exceed $MAX$.", + "placeholders": { + "max": { + "content": "$1", + "example": "100" + } + } + }, + "multipleInputEmails": { + "message": "1 or more emails are invalid" + }, + "inputTrimValidator": { + "message": "Input must not contain only whitespace.", + "description": "Notification to inform the user that a form's input can't contain only whitespace." + }, + "inputEmail": { + "message": "Input is not an email address." + }, + "fieldsNeedAttention": { + "message": "$COUNT$ field(s) above need your attention.", + "placeholders": { + "count": { + "content": "$1", + "example": "4" + } + } + }, + "selectPlaceholder": { + "message": "-- Select --" + }, + "multiSelectPlaceholder": { + "message": "-- Type to filter --" + }, + "multiSelectLoading": { + "message": "Retrieving options..." + }, + "multiSelectNotFound": { + "message": "No items found" + }, + "multiSelectClearAll": { + "message": "Clear all" + }, + "plusNMore": { + "message": "+ $QUANTITY$ more", + "placeholders": { + "quantity": { + "content": "$1", + "example": "5" + } + } + }, + "submenu": { + "message": "Submenu" } } diff --git a/apps/desktop/src/locales/et/messages.json b/apps/desktop/src/locales/et/messages.json index c2757bab62c..fb74084186c 100644 --- a/apps/desktop/src/locales/et/messages.json +++ b/apps/desktop/src/locales/et/messages.json @@ -1077,8 +1077,8 @@ "premiumSignUpStorage": { "message": "1 GB ulatuses krüpteeritud salvestusruum." }, - "premiumSignUpTwoStep": { - "message": "Lisavõimalused kaheastmeliseks kinnitamiseks, näiteks YubiKey, FIDO U2F ja Duo." + "premiumSignUpTwoStepOptions": { + "message": "Proprietary two-step login options such as YubiKey and Duo." }, "premiumSignUpReports": { "message": "Parooli hügieen, konto seisukord ja andmelekete raportid aitavad hoidlat turvalisena hoida." @@ -1492,6 +1492,9 @@ "vaultTimeoutActionLogOutDesc": { "message": "Hoidlast väljalogimine nõuab taaskordseks ligipääsuks uut autentimist." }, + "unlockMethodNeededToChangeTimeoutActionDesc": { + "message": "Set up an unlock method to change your vault timeout action." + }, "lock": { "message": "Lukusta", "description": "Verb form: to make secure or inaccesible by" @@ -1512,12 +1515,6 @@ "permanentlyDeletedItem": { "message": "Kirje on jäädavalt kustutatud" }, - "restoreItem": { - "message": "Taasta kirje" - }, - "restoreItemConfirmation": { - "message": "Oled kindel, et soovid selle kirje taastada?" - }, "restoredItem": { "message": "Kirje on taastatud" }, @@ -2112,8 +2109,8 @@ "logInWithAnotherDevice": { "message": "Logi sisse läbi teise seadme" }, - "logInInitiated": { - "message": "Sisselogimine on käivitatud" + "loginInitiated": { + "message": "Login initiated" }, "notificationSentDevice": { "message": "Sinu seadmesse saadeti teavitus." @@ -2252,21 +2249,171 @@ "windowsBiometricUpdateWarningTitle": { "message": "Recommended Settings Update" }, + "deviceApprovalRequired": { + "message": "Device approval required. Select an approval option below:" + }, + "rememberThisDevice": { + "message": "Remember this device" + }, + "uncheckIfPublicDevice": { + "message": "Uncheck if using a public device" + }, + "approveFromYourOtherDevice": { + "message": "Approve from your other device" + }, + "requestAdminApproval": { + "message": "Request admin approval" + }, + "approveWithMasterPassword": { + "message": "Approve with master password" + }, "region": { "message": "Region" }, + "ssoIdentifierRequired": { + "message": "Organization SSO identifier is required." + }, "eu": { "message": "EU", "description": "European Union" }, - "us": { - "message": "US", - "description": "United States" + "loggingInOn": { + "message": "Logging in on" + }, + "usDomain": { + "message": "bitwarden.com" + }, + "euDomain": { + "message": "bitwarden.eu" }, "selfHosted": { "message": "Self-hosted" }, "accessDenied": { "message": "Access denied. You do not have permission to view this page." + }, + "accountSuccessfullyCreated": { + "message": "Account successfully created!" + }, + "adminApprovalRequested": { + "message": "Admin approval requested" + }, + "adminApprovalRequestSentToAdmins": { + "message": "Your request has been sent to your admin." + }, + "youWillBeNotifiedOnceApproved": { + "message": "You will be notified once approved." + }, + "troubleLoggingIn": { + "message": "Trouble logging in?" + }, + "loginApproved": { + "message": "Login approved" + }, + "userEmailMissing": { + "message": "User email missing" + }, + "deviceTrusted": { + "message": "Device trusted" + }, + "inputRequired": { + "message": "Input is required." + }, + "required": { + "message": "required" + }, + "search": { + "message": "Search" + }, + "inputMinLength": { + "message": "Input must be at least $COUNT$ characters long.", + "placeholders": { + "count": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxLength": { + "message": "Input must not exceed $COUNT$ characters in length.", + "placeholders": { + "count": { + "content": "$1", + "example": "20" + } + } + }, + "inputForbiddenCharacters": { + "message": "The following characters are not allowed: $CHARACTERS$", + "placeholders": { + "characters": { + "content": "$1", + "example": "@, #, $, %" + } + } + }, + "inputMinValue": { + "message": "Input value must be at least $MIN$.", + "placeholders": { + "min": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxValue": { + "message": "Input value must not exceed $MAX$.", + "placeholders": { + "max": { + "content": "$1", + "example": "100" + } + } + }, + "multipleInputEmails": { + "message": "1 or more emails are invalid" + }, + "inputTrimValidator": { + "message": "Input must not contain only whitespace.", + "description": "Notification to inform the user that a form's input can't contain only whitespace." + }, + "inputEmail": { + "message": "Input is not an email address." + }, + "fieldsNeedAttention": { + "message": "$COUNT$ field(s) above need your attention.", + "placeholders": { + "count": { + "content": "$1", + "example": "4" + } + } + }, + "selectPlaceholder": { + "message": "-- Select --" + }, + "multiSelectPlaceholder": { + "message": "-- Type to filter --" + }, + "multiSelectLoading": { + "message": "Retrieving options..." + }, + "multiSelectNotFound": { + "message": "No items found" + }, + "multiSelectClearAll": { + "message": "Clear all" + }, + "plusNMore": { + "message": "+ $QUANTITY$ more", + "placeholders": { + "quantity": { + "content": "$1", + "example": "5" + } + } + }, + "submenu": { + "message": "Submenu" } } diff --git a/apps/desktop/src/locales/eu/messages.json b/apps/desktop/src/locales/eu/messages.json index b308429cec1..4c3931490df 100644 --- a/apps/desktop/src/locales/eu/messages.json +++ b/apps/desktop/src/locales/eu/messages.json @@ -1077,8 +1077,8 @@ "premiumSignUpStorage": { "message": "Eranskinentzako 1GB-eko zifratutako biltegia." }, - "premiumSignUpTwoStep": { - "message": "YubiKey, FIDO U2F eta Duo bezalako bi urratseko saio hasierarako aukera gehigarriak." + "premiumSignUpTwoStepOptions": { + "message": "Proprietary two-step login options such as YubiKey and Duo." }, "premiumSignUpReports": { "message": "Pasahitzaren higienea, kontuaren egoera eta datu-bortxaketen txostenak, kutxa gotorra seguru mantentzeko." @@ -1492,6 +1492,9 @@ "vaultTimeoutActionLogOutDesc": { "message": "Berriro autentifikatzea beharrezkoa da kutxa gotorrean berriro sartzeko." }, + "unlockMethodNeededToChangeTimeoutActionDesc": { + "message": "Set up an unlock method to change your vault timeout action." + }, "lock": { "message": "Blokeatu", "description": "Verb form: to make secure or inaccesible by" @@ -1512,12 +1515,6 @@ "permanentlyDeletedItem": { "message": "Elementua betirako ezabatua" }, - "restoreItem": { - "message": "Berreskuratu elementua" - }, - "restoreItemConfirmation": { - "message": "Ziur al zaude elementu hau berreskuratu nahi duzula?" - }, "restoredItem": { "message": "Elementua berreskuratua" }, @@ -2112,8 +2109,8 @@ "logInWithAnotherDevice": { "message": "Hasi saioa beste gailu batekin" }, - "logInInitiated": { - "message": "Log in initiated" + "loginInitiated": { + "message": "Login initiated" }, "notificationSentDevice": { "message": "A notification has been sent to your device." @@ -2252,21 +2249,171 @@ "windowsBiometricUpdateWarningTitle": { "message": "Recommended Settings Update" }, + "deviceApprovalRequired": { + "message": "Device approval required. Select an approval option below:" + }, + "rememberThisDevice": { + "message": "Remember this device" + }, + "uncheckIfPublicDevice": { + "message": "Uncheck if using a public device" + }, + "approveFromYourOtherDevice": { + "message": "Approve from your other device" + }, + "requestAdminApproval": { + "message": "Request admin approval" + }, + "approveWithMasterPassword": { + "message": "Approve with master password" + }, "region": { "message": "Region" }, + "ssoIdentifierRequired": { + "message": "Organization SSO identifier is required." + }, "eu": { "message": "EU", "description": "European Union" }, - "us": { - "message": "US", - "description": "United States" + "loggingInOn": { + "message": "Logging in on" + }, + "usDomain": { + "message": "bitwarden.com" + }, + "euDomain": { + "message": "bitwarden.eu" }, "selfHosted": { "message": "Self-hosted" }, "accessDenied": { "message": "Access denied. You do not have permission to view this page." + }, + "accountSuccessfullyCreated": { + "message": "Account successfully created!" + }, + "adminApprovalRequested": { + "message": "Admin approval requested" + }, + "adminApprovalRequestSentToAdmins": { + "message": "Your request has been sent to your admin." + }, + "youWillBeNotifiedOnceApproved": { + "message": "You will be notified once approved." + }, + "troubleLoggingIn": { + "message": "Trouble logging in?" + }, + "loginApproved": { + "message": "Login approved" + }, + "userEmailMissing": { + "message": "User email missing" + }, + "deviceTrusted": { + "message": "Device trusted" + }, + "inputRequired": { + "message": "Input is required." + }, + "required": { + "message": "required" + }, + "search": { + "message": "Search" + }, + "inputMinLength": { + "message": "Input must be at least $COUNT$ characters long.", + "placeholders": { + "count": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxLength": { + "message": "Input must not exceed $COUNT$ characters in length.", + "placeholders": { + "count": { + "content": "$1", + "example": "20" + } + } + }, + "inputForbiddenCharacters": { + "message": "The following characters are not allowed: $CHARACTERS$", + "placeholders": { + "characters": { + "content": "$1", + "example": "@, #, $, %" + } + } + }, + "inputMinValue": { + "message": "Input value must be at least $MIN$.", + "placeholders": { + "min": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxValue": { + "message": "Input value must not exceed $MAX$.", + "placeholders": { + "max": { + "content": "$1", + "example": "100" + } + } + }, + "multipleInputEmails": { + "message": "1 or more emails are invalid" + }, + "inputTrimValidator": { + "message": "Input must not contain only whitespace.", + "description": "Notification to inform the user that a form's input can't contain only whitespace." + }, + "inputEmail": { + "message": "Input is not an email address." + }, + "fieldsNeedAttention": { + "message": "$COUNT$ field(s) above need your attention.", + "placeholders": { + "count": { + "content": "$1", + "example": "4" + } + } + }, + "selectPlaceholder": { + "message": "-- Select --" + }, + "multiSelectPlaceholder": { + "message": "-- Type to filter --" + }, + "multiSelectLoading": { + "message": "Retrieving options..." + }, + "multiSelectNotFound": { + "message": "No items found" + }, + "multiSelectClearAll": { + "message": "Clear all" + }, + "plusNMore": { + "message": "+ $QUANTITY$ more", + "placeholders": { + "quantity": { + "content": "$1", + "example": "5" + } + } + }, + "submenu": { + "message": "Submenu" } } diff --git a/apps/desktop/src/locales/fa/messages.json b/apps/desktop/src/locales/fa/messages.json index 65af270448b..9e5f6f8468c 100644 --- a/apps/desktop/src/locales/fa/messages.json +++ b/apps/desktop/src/locales/fa/messages.json @@ -1077,8 +1077,8 @@ "premiumSignUpStorage": { "message": "۱ گیگابایت فضای ذخیره‌سازی رمزنگاری شده برای پرونده‌های پیوست." }, - "premiumSignUpTwoStep": { - "message": "گزینه‌های ورود دو مرحله‌ای اضافی مانند YubiKey, FIDO U2F و Duo." + "premiumSignUpTwoStepOptions": { + "message": "Proprietary two-step login options such as YubiKey and Duo." }, "premiumSignUpReports": { "message": "گزارش‌های بهداشت رمز عبور، سلامت حساب و نقض داده‌ها برای ایمن نگهداشتن گاوصندوق شما." @@ -1492,6 +1492,9 @@ "vaultTimeoutActionLogOutDesc": { "message": "یک گاوصندوق خارج شده درخواست احراز هویت مجدد را برای دسترسی آن می‌دهد." }, + "unlockMethodNeededToChangeTimeoutActionDesc": { + "message": "Set up an unlock method to change your vault timeout action." + }, "lock": { "message": "قفل", "description": "Verb form: to make secure or inaccesible by" @@ -1512,12 +1515,6 @@ "permanentlyDeletedItem": { "message": "مورد برای همیشه حذف شد" }, - "restoreItem": { - "message": "بازیابی مورد" - }, - "restoreItemConfirmation": { - "message": "آیا مطمئن هستید که می‌خواهید این مورد را بازیابی کنید؟" - }, "restoredItem": { "message": "مورد بازیابی شد" }, @@ -2112,8 +2109,8 @@ "logInWithAnotherDevice": { "message": "با دستگاه دیگری وارد شوید" }, - "logInInitiated": { - "message": "ورود به سیستم آغاز شد" + "loginInitiated": { + "message": "Login initiated" }, "notificationSentDevice": { "message": "یک اعلان به دستگاه شما ارسال شده است." @@ -2252,21 +2249,171 @@ "windowsBiometricUpdateWarningTitle": { "message": "به‌روز رسانی تنظیمات توصیه شده" }, + "deviceApprovalRequired": { + "message": "Device approval required. Select an approval option below:" + }, + "rememberThisDevice": { + "message": "Remember this device" + }, + "uncheckIfPublicDevice": { + "message": "Uncheck if using a public device" + }, + "approveFromYourOtherDevice": { + "message": "Approve from your other device" + }, + "requestAdminApproval": { + "message": "Request admin approval" + }, + "approveWithMasterPassword": { + "message": "Approve with master password" + }, "region": { - "message": "منطقه" + "message": "Region" + }, + "ssoIdentifierRequired": { + "message": "Organization SSO identifier is required." }, "eu": { - "message": "اروپا", + "message": "EU", "description": "European Union" }, - "us": { - "message": "امریکا", - "description": "United States" + "loggingInOn": { + "message": "Logging in on" + }, + "usDomain": { + "message": "bitwarden.com" + }, + "euDomain": { + "message": "bitwarden.eu" }, "selfHosted": { "message": "خود میزبان" }, "accessDenied": { "message": "دسترسی رد شد. شما اجازه مشاهده این صفحه را ندارید." + }, + "accountSuccessfullyCreated": { + "message": "Account successfully created!" + }, + "adminApprovalRequested": { + "message": "Admin approval requested" + }, + "adminApprovalRequestSentToAdmins": { + "message": "Your request has been sent to your admin." + }, + "youWillBeNotifiedOnceApproved": { + "message": "You will be notified once approved." + }, + "troubleLoggingIn": { + "message": "Trouble logging in?" + }, + "loginApproved": { + "message": "Login approved" + }, + "userEmailMissing": { + "message": "User email missing" + }, + "deviceTrusted": { + "message": "Device trusted" + }, + "inputRequired": { + "message": "Input is required." + }, + "required": { + "message": "required" + }, + "search": { + "message": "Search" + }, + "inputMinLength": { + "message": "Input must be at least $COUNT$ characters long.", + "placeholders": { + "count": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxLength": { + "message": "Input must not exceed $COUNT$ characters in length.", + "placeholders": { + "count": { + "content": "$1", + "example": "20" + } + } + }, + "inputForbiddenCharacters": { + "message": "The following characters are not allowed: $CHARACTERS$", + "placeholders": { + "characters": { + "content": "$1", + "example": "@, #, $, %" + } + } + }, + "inputMinValue": { + "message": "Input value must be at least $MIN$.", + "placeholders": { + "min": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxValue": { + "message": "Input value must not exceed $MAX$.", + "placeholders": { + "max": { + "content": "$1", + "example": "100" + } + } + }, + "multipleInputEmails": { + "message": "1 or more emails are invalid" + }, + "inputTrimValidator": { + "message": "Input must not contain only whitespace.", + "description": "Notification to inform the user that a form's input can't contain only whitespace." + }, + "inputEmail": { + "message": "Input is not an email address." + }, + "fieldsNeedAttention": { + "message": "$COUNT$ field(s) above need your attention.", + "placeholders": { + "count": { + "content": "$1", + "example": "4" + } + } + }, + "selectPlaceholder": { + "message": "-- Select --" + }, + "multiSelectPlaceholder": { + "message": "-- Type to filter --" + }, + "multiSelectLoading": { + "message": "Retrieving options..." + }, + "multiSelectNotFound": { + "message": "No items found" + }, + "multiSelectClearAll": { + "message": "Clear all" + }, + "plusNMore": { + "message": "+ $QUANTITY$ more", + "placeholders": { + "quantity": { + "content": "$1", + "example": "5" + } + } + }, + "submenu": { + "message": "Submenu" } } diff --git a/apps/desktop/src/locales/fi/messages.json b/apps/desktop/src/locales/fi/messages.json index 6f28c0c9afd..9025306a708 100644 --- a/apps/desktop/src/locales/fi/messages.json +++ b/apps/desktop/src/locales/fi/messages.json @@ -33,7 +33,7 @@ "message": "Kokoelmat" }, "searchVault": { - "message": "Hae holvista" + "message": "Etsi holvista" }, "addItem": { "message": "Lisää kohde" @@ -442,16 +442,16 @@ "message": "Vältä epäselviä merkkejä" }, "searchCollection": { - "message": "Hae kokoelmasta" + "message": "Etsi kokoelmasta" }, "searchFolder": { - "message": "Hae kansiosta" + "message": "Etsi kansiosta" }, "searchFavorites": { - "message": "Hae suosikeista" + "message": "Etsi suosikeista" }, "searchType": { - "message": "Hae tyypeistä", + "message": "Etsi tyypistä", "description": "Search item type" }, "newAttachment": { @@ -1077,8 +1077,8 @@ "premiumSignUpStorage": { "message": "1 Gt salattua tallennustilaa tiedostoliitteille." }, - "premiumSignUpTwoStep": { - "message": "Muita kaksivaiheisen kirjautumisen todennusmenetelmiä kuten YubiKey, FIDO U2F ja Duo Security." + "premiumSignUpTwoStepOptions": { + "message": "Proprietary two-step login options such as YubiKey and Duo." }, "premiumSignUpReports": { "message": "Salasanahygienian, tilin terveyden ja tietovuotojen raportointitoiminnot pitävät holvisi turvassa." @@ -1492,6 +1492,9 @@ "vaultTimeoutActionLogOutDesc": { "message": "Holvisi käyttö edellyttää uutta todennusta." }, + "unlockMethodNeededToChangeTimeoutActionDesc": { + "message": "Muuta holvisi aikakatkaisutoimintoa määrittämällä lukituksen avaustapa." + }, "lock": { "message": "Lukitse", "description": "Verb form: to make secure or inaccesible by" @@ -1501,7 +1504,7 @@ "description": "Noun: a special folder to hold deleted items" }, "searchTrash": { - "message": "Hae roskakorista" + "message": "Etsi roskakorista" }, "permanentlyDeleteItem": { "message": "Poista kohde pysyvästi" @@ -1512,12 +1515,6 @@ "permanentlyDeletedItem": { "message": "Kohde poistettiin pysyvästi" }, - "restoreItem": { - "message": "Palauta kohde" - }, - "restoreItemConfirmation": { - "message": "Haluatko varmasti palauttaa kohteen?" - }, "restoredItem": { "message": "Kohde palautettiin" }, @@ -1676,7 +1673,7 @@ "message": "Teksti" }, "searchSends": { - "message": "Hae Sendeistä", + "message": "Etsi Sendeistä", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "editSend": { @@ -2049,10 +2046,10 @@ "message": "Kaikki holvit" }, "searchOrganization": { - "message": "Hae organisaatiosta" + "message": "Etsi organisaatiosta" }, "searchMyVault": { - "message": "Hae omasta holvista" + "message": "Etsi omasta holvista" }, "forwardedEmail": { "message": "Sähköpostialias välitykseen" @@ -2112,7 +2109,7 @@ "logInWithAnotherDevice": { "message": "Laitteella kirjautuminen" }, - "logInInitiated": { + "loginInitiated": { "message": "Kirjautuminen aloitettu" }, "notificationSentDevice": { @@ -2252,21 +2249,171 @@ "windowsBiometricUpdateWarningTitle": { "message": "Suositeltava asetusmuutos" }, + "deviceApprovalRequired": { + "message": "Laitehyväksyntä vaaditaan. Valitse hyväksyntätapa alta:" + }, + "rememberThisDevice": { + "message": "Muista tämä laite" + }, + "uncheckIfPublicDevice": { + "message": "Poista käytöstä julkisilla laitteilla" + }, + "approveFromYourOtherDevice": { + "message": "Hyväksy muilta laitteiltasi" + }, + "requestAdminApproval": { + "message": "Pyydä hyväksyntää ylläpidolta" + }, + "approveWithMasterPassword": { + "message": "Hyväksy pääsalasanalla" + }, "region": { "message": "Alue" }, + "ssoIdentifierRequired": { + "message": "Organisaation kertakirjautumistunniste tarvitaan." + }, "eu": { "message": "EU", "description": "European Union" }, - "us": { - "message": "US", - "description": "United States" + "loggingInOn": { + "message": "Kirjaudutaan sijaintiin" + }, + "usDomain": { + "message": "bitwarden.com" + }, + "euDomain": { + "message": "bitwarden.eu" }, "selfHosted": { "message": "Itse ylläpidetty" }, "accessDenied": { "message": "Pääsy estetty. Sinulla ei ole oikeutta avata sivua." + }, + "accountSuccessfullyCreated": { + "message": "Tilin luonti onnistui!" + }, + "adminApprovalRequested": { + "message": "Hyväksyntää pyydetty ylläpidolta" + }, + "adminApprovalRequestSentToAdmins": { + "message": "Pyyntösi on välitetty ylläpidolle." + }, + "youWillBeNotifiedOnceApproved": { + "message": "Saat ilmoituksen kun se on hyväksytty." + }, + "troubleLoggingIn": { + "message": "Ongelmia kirjautumisessa?" + }, + "loginApproved": { + "message": "Kirjautuminen hyväksyttiin" + }, + "userEmailMissing": { + "message": "Käyttäjän sähköpostiosoite puuttuu" + }, + "deviceTrusted": { + "message": "Laitteeseen luotettu" + }, + "inputRequired": { + "message": "Syöte vaaditaan." + }, + "required": { + "message": "pakollinen" + }, + "search": { + "message": "Etsi" + }, + "inputMinLength": { + "message": "Syötteen tulee sisältää ainakin $COUNT$ merkkiä.", + "placeholders": { + "count": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxLength": { + "message": "Syötteen enimmäismerkkimäärä on $COUNT$.", + "placeholders": { + "count": { + "content": "$1", + "example": "20" + } + } + }, + "inputForbiddenCharacters": { + "message": "Seuraavia merkkejä ei sallita: $CHARACTERS$", + "placeholders": { + "characters": { + "content": "$1", + "example": "@, #, $, %" + } + } + }, + "inputMinValue": { + "message": "Syötteen vähimmäisarvo on $MIN$.", + "placeholders": { + "min": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxValue": { + "message": "Syötteen enimmäisarvo on $MAX$.", + "placeholders": { + "max": { + "content": "$1", + "example": "100" + } + } + }, + "multipleInputEmails": { + "message": "Ainakin yksi sähköpostiosoite on virheellinen" + }, + "inputTrimValidator": { + "message": "Syöte ei voi sisältää vain tyhjiä merkkejä.", + "description": "Notification to inform the user that a form's input can't contain only whitespace." + }, + "inputEmail": { + "message": "Syöte ei ole sähköpostiosoite." + }, + "fieldsNeedAttention": { + "message": "$COUNT$ yllä oleva(a) kenttä(ä) vaatii huomiotasi.", + "placeholders": { + "count": { + "content": "$1", + "example": "4" + } + } + }, + "selectPlaceholder": { + "message": "-- Valitse --" + }, + "multiSelectPlaceholder": { + "message": "-- Suodatettava tyyppi --" + }, + "multiSelectLoading": { + "message": "Noudetaan vaihtoehtoja..." + }, + "multiSelectNotFound": { + "message": "Kohteita ei löytynyt" + }, + "multiSelectClearAll": { + "message": "Tyhjennä kaikki" + }, + "plusNMore": { + "message": "+ $QUANTITY$ lisää", + "placeholders": { + "quantity": { + "content": "$1", + "example": "5" + } + } + }, + "submenu": { + "message": "Alavalikko" } } diff --git a/apps/desktop/src/locales/fil/messages.json b/apps/desktop/src/locales/fil/messages.json index 590d96aeb8d..87b9bde0c46 100644 --- a/apps/desktop/src/locales/fil/messages.json +++ b/apps/desktop/src/locales/fil/messages.json @@ -1077,8 +1077,8 @@ "premiumSignUpStorage": { "message": "1 GB naka encrypt na imbakan para sa mga attachment ng file." }, - "premiumSignUpTwoStep": { - "message": "Karagdagang dalawang hakbang na mga pagpipilian sa pag login tulad ng YubiKey, FIDO U2F, at Duo." + "premiumSignUpTwoStepOptions": { + "message": "Proprietary two-step login options such as YubiKey and Duo." }, "premiumSignUpReports": { "message": "Kalinisan ng password, kalusugan ng account, at mga ulat ng paglabag sa data upang mapanatiling ligtas ang iyong vault." @@ -1492,6 +1492,9 @@ "vaultTimeoutActionLogOutDesc": { "message": "Kailangan ang muling pagpapatunay upang ma access muli ang iyong vault." }, + "unlockMethodNeededToChangeTimeoutActionDesc": { + "message": "Set up an unlock method to change your vault timeout action." + }, "lock": { "message": "I-lock", "description": "Verb form: to make secure or inaccesible by" @@ -1512,12 +1515,6 @@ "permanentlyDeletedItem": { "message": "Item permanenteng tinanggal" }, - "restoreItem": { - "message": "Ibalik ang item" - }, - "restoreItemConfirmation": { - "message": "Sigurado ka bang gusto mong ibalik ang item na ito?" - }, "restoredItem": { "message": "Item na nai-restore" }, @@ -2112,8 +2109,8 @@ "logInWithAnotherDevice": { "message": "Mag log in gamit ang ibang device" }, - "logInInitiated": { - "message": "Mag log in na sinimulan" + "loginInitiated": { + "message": "Login initiated" }, "notificationSentDevice": { "message": "Naipadala na ang notification sa iyong device." @@ -2252,21 +2249,171 @@ "windowsBiometricUpdateWarningTitle": { "message": "Recommended Settings Update" }, + "deviceApprovalRequired": { + "message": "Device approval required. Select an approval option below:" + }, + "rememberThisDevice": { + "message": "Remember this device" + }, + "uncheckIfPublicDevice": { + "message": "Uncheck if using a public device" + }, + "approveFromYourOtherDevice": { + "message": "Approve from your other device" + }, + "requestAdminApproval": { + "message": "Request admin approval" + }, + "approveWithMasterPassword": { + "message": "Approve with master password" + }, "region": { "message": "Region" }, + "ssoIdentifierRequired": { + "message": "Organization SSO identifier is required." + }, "eu": { "message": "EU", "description": "European Union" }, - "us": { - "message": "US", - "description": "United States" + "loggingInOn": { + "message": "Logging in on" + }, + "usDomain": { + "message": "bitwarden.com" + }, + "euDomain": { + "message": "bitwarden.eu" }, "selfHosted": { "message": "Self-hosted" }, "accessDenied": { "message": "Access denied. You do not have permission to view this page." + }, + "accountSuccessfullyCreated": { + "message": "Account successfully created!" + }, + "adminApprovalRequested": { + "message": "Admin approval requested" + }, + "adminApprovalRequestSentToAdmins": { + "message": "Your request has been sent to your admin." + }, + "youWillBeNotifiedOnceApproved": { + "message": "You will be notified once approved." + }, + "troubleLoggingIn": { + "message": "Trouble logging in?" + }, + "loginApproved": { + "message": "Login approved" + }, + "userEmailMissing": { + "message": "User email missing" + }, + "deviceTrusted": { + "message": "Device trusted" + }, + "inputRequired": { + "message": "Input is required." + }, + "required": { + "message": "required" + }, + "search": { + "message": "Search" + }, + "inputMinLength": { + "message": "Input must be at least $COUNT$ characters long.", + "placeholders": { + "count": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxLength": { + "message": "Input must not exceed $COUNT$ characters in length.", + "placeholders": { + "count": { + "content": "$1", + "example": "20" + } + } + }, + "inputForbiddenCharacters": { + "message": "The following characters are not allowed: $CHARACTERS$", + "placeholders": { + "characters": { + "content": "$1", + "example": "@, #, $, %" + } + } + }, + "inputMinValue": { + "message": "Input value must be at least $MIN$.", + "placeholders": { + "min": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxValue": { + "message": "Input value must not exceed $MAX$.", + "placeholders": { + "max": { + "content": "$1", + "example": "100" + } + } + }, + "multipleInputEmails": { + "message": "1 or more emails are invalid" + }, + "inputTrimValidator": { + "message": "Input must not contain only whitespace.", + "description": "Notification to inform the user that a form's input can't contain only whitespace." + }, + "inputEmail": { + "message": "Input is not an email address." + }, + "fieldsNeedAttention": { + "message": "$COUNT$ field(s) above need your attention.", + "placeholders": { + "count": { + "content": "$1", + "example": "4" + } + } + }, + "selectPlaceholder": { + "message": "-- Select --" + }, + "multiSelectPlaceholder": { + "message": "-- Type to filter --" + }, + "multiSelectLoading": { + "message": "Retrieving options..." + }, + "multiSelectNotFound": { + "message": "No items found" + }, + "multiSelectClearAll": { + "message": "Clear all" + }, + "plusNMore": { + "message": "+ $QUANTITY$ more", + "placeholders": { + "quantity": { + "content": "$1", + "example": "5" + } + } + }, + "submenu": { + "message": "Submenu" } } diff --git a/apps/desktop/src/locales/fr/messages.json b/apps/desktop/src/locales/fr/messages.json index 15c54705fa6..3f249000bd5 100644 --- a/apps/desktop/src/locales/fr/messages.json +++ b/apps/desktop/src/locales/fr/messages.json @@ -1077,8 +1077,8 @@ "premiumSignUpStorage": { "message": "1 Go de stockage chiffré pour les fichiers joints." }, - "premiumSignUpTwoStep": { - "message": "Options additionnelles d'identification à deux étapes telles que YubiKey, FIDO U2F et Duo." + "premiumSignUpTwoStepOptions": { + "message": "Options de connexion propriétaires à deux facteurs telles que YubiKey et Duo." }, "premiumSignUpReports": { "message": "Hygiène du mot de passe, santé du compte et rapports sur les brèches de données pour assurer la sécurité de votre coffre." @@ -1492,6 +1492,9 @@ "vaultTimeoutActionLogOutDesc": { "message": "Une nouvelle authentification est requise pour accéder à nouveau à votre coffre." }, + "unlockMethodNeededToChangeTimeoutActionDesc": { + "message": "Set up an unlock method to change your vault timeout action." + }, "lock": { "message": "Verrouiller", "description": "Verb form: to make secure or inaccesible by" @@ -1512,12 +1515,6 @@ "permanentlyDeletedItem": { "message": "Élément supprimé définitivement" }, - "restoreItem": { - "message": "Restaurer l'élément" - }, - "restoreItemConfirmation": { - "message": "Êtes-vous sûr de vouloir restaurer cet élément ?" - }, "restoredItem": { "message": "Élément restauré" }, @@ -2112,8 +2109,8 @@ "logInWithAnotherDevice": { "message": "Connectez-vous avec un autre appareil" }, - "logInInitiated": { - "message": "Connexion initiée" + "loginInitiated": { + "message": "Login initiated" }, "notificationSentDevice": { "message": "Une notification a été envoyée à votre appareil." @@ -2252,21 +2249,171 @@ "windowsBiometricUpdateWarningTitle": { "message": "Une mise à jour des paramètres est recommandée" }, + "deviceApprovalRequired": { + "message": "Device approval required. Select an approval option below:" + }, + "rememberThisDevice": { + "message": "Remember this device" + }, + "uncheckIfPublicDevice": { + "message": "Uncheck if using a public device" + }, + "approveFromYourOtherDevice": { + "message": "Approve from your other device" + }, + "requestAdminApproval": { + "message": "Request admin approval" + }, + "approveWithMasterPassword": { + "message": "Approve with master password" + }, "region": { - "message": "Région" + "message": "Region" + }, + "ssoIdentifierRequired": { + "message": "Organization SSO identifier is required." }, "eu": { "message": "EU", "description": "European Union" }, - "us": { - "message": "US", - "description": "United States" + "loggingInOn": { + "message": "Connexion sur" + }, + "usDomain": { + "message": "bitwarden.com" + }, + "euDomain": { + "message": "bitwarden.eu" }, "selfHosted": { "message": "Auto-hébergé" }, "accessDenied": { "message": "Accès refusé. Vous n'avez pas l'autorisation de voir cette page." + }, + "accountSuccessfullyCreated": { + "message": "Account successfully created!" + }, + "adminApprovalRequested": { + "message": "Admin approval requested" + }, + "adminApprovalRequestSentToAdmins": { + "message": "Your request has been sent to your admin." + }, + "youWillBeNotifiedOnceApproved": { + "message": "You will be notified once approved." + }, + "troubleLoggingIn": { + "message": "Trouble logging in?" + }, + "loginApproved": { + "message": "Login approved" + }, + "userEmailMissing": { + "message": "User email missing" + }, + "deviceTrusted": { + "message": "Device trusted" + }, + "inputRequired": { + "message": "Input is required." + }, + "required": { + "message": "required" + }, + "search": { + "message": "Search" + }, + "inputMinLength": { + "message": "Input must be at least $COUNT$ characters long.", + "placeholders": { + "count": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxLength": { + "message": "Input must not exceed $COUNT$ characters in length.", + "placeholders": { + "count": { + "content": "$1", + "example": "20" + } + } + }, + "inputForbiddenCharacters": { + "message": "The following characters are not allowed: $CHARACTERS$", + "placeholders": { + "characters": { + "content": "$1", + "example": "@, #, $, %" + } + } + }, + "inputMinValue": { + "message": "Input value must be at least $MIN$.", + "placeholders": { + "min": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxValue": { + "message": "Input value must not exceed $MAX$.", + "placeholders": { + "max": { + "content": "$1", + "example": "100" + } + } + }, + "multipleInputEmails": { + "message": "1 or more emails are invalid" + }, + "inputTrimValidator": { + "message": "Input must not contain only whitespace.", + "description": "Notification to inform the user that a form's input can't contain only whitespace." + }, + "inputEmail": { + "message": "Input is not an email address." + }, + "fieldsNeedAttention": { + "message": "$COUNT$ field(s) above need your attention.", + "placeholders": { + "count": { + "content": "$1", + "example": "4" + } + } + }, + "selectPlaceholder": { + "message": "-- Select --" + }, + "multiSelectPlaceholder": { + "message": "-- Type to filter --" + }, + "multiSelectLoading": { + "message": "Retrieving options..." + }, + "multiSelectNotFound": { + "message": "No items found" + }, + "multiSelectClearAll": { + "message": "Clear all" + }, + "plusNMore": { + "message": "+ $QUANTITY$ more", + "placeholders": { + "quantity": { + "content": "$1", + "example": "5" + } + } + }, + "submenu": { + "message": "Submenu" } } diff --git a/apps/desktop/src/locales/gl/messages.json b/apps/desktop/src/locales/gl/messages.json index ed828fa2255..38e81a83bfd 100644 --- a/apps/desktop/src/locales/gl/messages.json +++ b/apps/desktop/src/locales/gl/messages.json @@ -1077,8 +1077,8 @@ "premiumSignUpStorage": { "message": "1 GB encrypted storage for file attachments." }, - "premiumSignUpTwoStep": { - "message": "Additional two-step login options such as YubiKey, FIDO U2F, and Duo." + "premiumSignUpTwoStepOptions": { + "message": "Proprietary two-step login options such as YubiKey and Duo." }, "premiumSignUpReports": { "message": "Password hygiene, account health, and data breach reports to keep your vault safe." @@ -1492,6 +1492,9 @@ "vaultTimeoutActionLogOutDesc": { "message": "Re-authentication is required to access your vault again." }, + "unlockMethodNeededToChangeTimeoutActionDesc": { + "message": "Set up an unlock method to change your vault timeout action." + }, "lock": { "message": "Lock", "description": "Verb form: to make secure or inaccesible by" @@ -1512,12 +1515,6 @@ "permanentlyDeletedItem": { "message": "Item permanently deleted" }, - "restoreItem": { - "message": "Restore item" - }, - "restoreItemConfirmation": { - "message": "Are you sure you want to restore this item?" - }, "restoredItem": { "message": "Item restored" }, @@ -2112,8 +2109,8 @@ "logInWithAnotherDevice": { "message": "Log in with another device" }, - "logInInitiated": { - "message": "Log in initiated" + "loginInitiated": { + "message": "Login initiated" }, "notificationSentDevice": { "message": "A notification has been sent to your device." @@ -2252,21 +2249,171 @@ "windowsBiometricUpdateWarningTitle": { "message": "Recommended Settings Update" }, + "deviceApprovalRequired": { + "message": "Device approval required. Select an approval option below:" + }, + "rememberThisDevice": { + "message": "Remember this device" + }, + "uncheckIfPublicDevice": { + "message": "Uncheck if using a public device" + }, + "approveFromYourOtherDevice": { + "message": "Approve from your other device" + }, + "requestAdminApproval": { + "message": "Request admin approval" + }, + "approveWithMasterPassword": { + "message": "Approve with master password" + }, "region": { "message": "Region" }, + "ssoIdentifierRequired": { + "message": "Organization SSO identifier is required." + }, "eu": { "message": "EU", "description": "European Union" }, - "us": { - "message": "US", - "description": "United States" + "loggingInOn": { + "message": "Logging in on" + }, + "usDomain": { + "message": "bitwarden.com" + }, + "euDomain": { + "message": "bitwarden.eu" }, "selfHosted": { "message": "Self-hosted" }, "accessDenied": { "message": "Access denied. You do not have permission to view this page." + }, + "accountSuccessfullyCreated": { + "message": "Account successfully created!" + }, + "adminApprovalRequested": { + "message": "Admin approval requested" + }, + "adminApprovalRequestSentToAdmins": { + "message": "Your request has been sent to your admin." + }, + "youWillBeNotifiedOnceApproved": { + "message": "You will be notified once approved." + }, + "troubleLoggingIn": { + "message": "Trouble logging in?" + }, + "loginApproved": { + "message": "Login approved" + }, + "userEmailMissing": { + "message": "User email missing" + }, + "deviceTrusted": { + "message": "Device trusted" + }, + "inputRequired": { + "message": "Input is required." + }, + "required": { + "message": "required" + }, + "search": { + "message": "Search" + }, + "inputMinLength": { + "message": "Input must be at least $COUNT$ characters long.", + "placeholders": { + "count": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxLength": { + "message": "Input must not exceed $COUNT$ characters in length.", + "placeholders": { + "count": { + "content": "$1", + "example": "20" + } + } + }, + "inputForbiddenCharacters": { + "message": "The following characters are not allowed: $CHARACTERS$", + "placeholders": { + "characters": { + "content": "$1", + "example": "@, #, $, %" + } + } + }, + "inputMinValue": { + "message": "Input value must be at least $MIN$.", + "placeholders": { + "min": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxValue": { + "message": "Input value must not exceed $MAX$.", + "placeholders": { + "max": { + "content": "$1", + "example": "100" + } + } + }, + "multipleInputEmails": { + "message": "1 or more emails are invalid" + }, + "inputTrimValidator": { + "message": "Input must not contain only whitespace.", + "description": "Notification to inform the user that a form's input can't contain only whitespace." + }, + "inputEmail": { + "message": "Input is not an email address." + }, + "fieldsNeedAttention": { + "message": "$COUNT$ field(s) above need your attention.", + "placeholders": { + "count": { + "content": "$1", + "example": "4" + } + } + }, + "selectPlaceholder": { + "message": "-- Select --" + }, + "multiSelectPlaceholder": { + "message": "-- Type to filter --" + }, + "multiSelectLoading": { + "message": "Retrieving options..." + }, + "multiSelectNotFound": { + "message": "No items found" + }, + "multiSelectClearAll": { + "message": "Clear all" + }, + "plusNMore": { + "message": "+ $QUANTITY$ more", + "placeholders": { + "quantity": { + "content": "$1", + "example": "5" + } + } + }, + "submenu": { + "message": "Submenu" } } diff --git a/apps/desktop/src/locales/he/messages.json b/apps/desktop/src/locales/he/messages.json index 46f39122f14..ad625991fa1 100644 --- a/apps/desktop/src/locales/he/messages.json +++ b/apps/desktop/src/locales/he/messages.json @@ -1077,8 +1077,8 @@ "premiumSignUpStorage": { "message": "1 ג'יגה של מקום אחסון מוצפן עבור קבצים מצורפים." }, - "premiumSignUpTwoStep": { - "message": "אפשרויות כניסה דו שלבית מתקדמות כמו YubiKey, FIDO U2F, וDuo." + "premiumSignUpTwoStepOptions": { + "message": "Proprietary two-step login options such as YubiKey and Duo." }, "premiumSignUpReports": { "message": "היגיינת סיסמאות, מצב בריאות החשבון, ודיווחים מעודכנים על פרצות חדשות בכדי לשמור על הכספת שלך בטוחה." @@ -1492,6 +1492,9 @@ "vaultTimeoutActionLogOutDesc": { "message": "יש לבצע אימות מחדש כדי לגשת לכספת שוב." }, + "unlockMethodNeededToChangeTimeoutActionDesc": { + "message": "Set up an unlock method to change your vault timeout action." + }, "lock": { "message": "נעילה", "description": "Verb form: to make secure or inaccesible by" @@ -1512,12 +1515,6 @@ "permanentlyDeletedItem": { "message": "פריט שנמחק לצמיתות" }, - "restoreItem": { - "message": "שחזר פריט" - }, - "restoreItemConfirmation": { - "message": "האם אתה בטוח שברצונך לשחזר פריט זה?" - }, "restoredItem": { "message": "פריט ששוחזר" }, @@ -2112,8 +2109,8 @@ "logInWithAnotherDevice": { "message": "התחבר עם מכשיר אחר" }, - "logInInitiated": { - "message": "התחברות החלה" + "loginInitiated": { + "message": "Login initiated" }, "notificationSentDevice": { "message": "התראה נשלחה למכשירך." @@ -2252,21 +2249,171 @@ "windowsBiometricUpdateWarningTitle": { "message": "Recommended Settings Update" }, + "deviceApprovalRequired": { + "message": "Device approval required. Select an approval option below:" + }, + "rememberThisDevice": { + "message": "Remember this device" + }, + "uncheckIfPublicDevice": { + "message": "Uncheck if using a public device" + }, + "approveFromYourOtherDevice": { + "message": "Approve from your other device" + }, + "requestAdminApproval": { + "message": "Request admin approval" + }, + "approveWithMasterPassword": { + "message": "Approve with master password" + }, "region": { "message": "Region" }, + "ssoIdentifierRequired": { + "message": "Organization SSO identifier is required." + }, "eu": { "message": "EU", "description": "European Union" }, - "us": { - "message": "US", - "description": "United States" + "loggingInOn": { + "message": "Logging in on" + }, + "usDomain": { + "message": "bitwarden.com" + }, + "euDomain": { + "message": "bitwarden.eu" }, "selfHosted": { "message": "Self-hosted" }, "accessDenied": { "message": "Access denied. You do not have permission to view this page." + }, + "accountSuccessfullyCreated": { + "message": "Account successfully created!" + }, + "adminApprovalRequested": { + "message": "Admin approval requested" + }, + "adminApprovalRequestSentToAdmins": { + "message": "Your request has been sent to your admin." + }, + "youWillBeNotifiedOnceApproved": { + "message": "You will be notified once approved." + }, + "troubleLoggingIn": { + "message": "Trouble logging in?" + }, + "loginApproved": { + "message": "Login approved" + }, + "userEmailMissing": { + "message": "User email missing" + }, + "deviceTrusted": { + "message": "Device trusted" + }, + "inputRequired": { + "message": "Input is required." + }, + "required": { + "message": "required" + }, + "search": { + "message": "Search" + }, + "inputMinLength": { + "message": "Input must be at least $COUNT$ characters long.", + "placeholders": { + "count": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxLength": { + "message": "Input must not exceed $COUNT$ characters in length.", + "placeholders": { + "count": { + "content": "$1", + "example": "20" + } + } + }, + "inputForbiddenCharacters": { + "message": "The following characters are not allowed: $CHARACTERS$", + "placeholders": { + "characters": { + "content": "$1", + "example": "@, #, $, %" + } + } + }, + "inputMinValue": { + "message": "Input value must be at least $MIN$.", + "placeholders": { + "min": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxValue": { + "message": "Input value must not exceed $MAX$.", + "placeholders": { + "max": { + "content": "$1", + "example": "100" + } + } + }, + "multipleInputEmails": { + "message": "1 or more emails are invalid" + }, + "inputTrimValidator": { + "message": "Input must not contain only whitespace.", + "description": "Notification to inform the user that a form's input can't contain only whitespace." + }, + "inputEmail": { + "message": "Input is not an email address." + }, + "fieldsNeedAttention": { + "message": "$COUNT$ field(s) above need your attention.", + "placeholders": { + "count": { + "content": "$1", + "example": "4" + } + } + }, + "selectPlaceholder": { + "message": "-- Select --" + }, + "multiSelectPlaceholder": { + "message": "-- Type to filter --" + }, + "multiSelectLoading": { + "message": "Retrieving options..." + }, + "multiSelectNotFound": { + "message": "No items found" + }, + "multiSelectClearAll": { + "message": "Clear all" + }, + "plusNMore": { + "message": "+ $QUANTITY$ more", + "placeholders": { + "quantity": { + "content": "$1", + "example": "5" + } + } + }, + "submenu": { + "message": "Submenu" } } diff --git a/apps/desktop/src/locales/hi/messages.json b/apps/desktop/src/locales/hi/messages.json index 1b1a8a1b8e5..156a431a2d2 100644 --- a/apps/desktop/src/locales/hi/messages.json +++ b/apps/desktop/src/locales/hi/messages.json @@ -1077,8 +1077,8 @@ "premiumSignUpStorage": { "message": "1 GB encrypted storage for file attachments." }, - "premiumSignUpTwoStep": { - "message": "Additional two-step login options such as YubiKey, FIDO U2F, and Duo." + "premiumSignUpTwoStepOptions": { + "message": "Proprietary two-step login options such as YubiKey and Duo." }, "premiumSignUpReports": { "message": "Password hygiene, account health, and data breach reports to keep your vault safe." @@ -1492,6 +1492,9 @@ "vaultTimeoutActionLogOutDesc": { "message": "Re-authentication is required to access your vault again." }, + "unlockMethodNeededToChangeTimeoutActionDesc": { + "message": "Set up an unlock method to change your vault timeout action." + }, "lock": { "message": "Lock", "description": "Verb form: to make secure or inaccesible by" @@ -1512,12 +1515,6 @@ "permanentlyDeletedItem": { "message": "Item permanently deleted" }, - "restoreItem": { - "message": "Restore item" - }, - "restoreItemConfirmation": { - "message": "Are you sure you want to restore this item?" - }, "restoredItem": { "message": "Item restored" }, @@ -2112,8 +2109,8 @@ "logInWithAnotherDevice": { "message": "Log in with another device" }, - "logInInitiated": { - "message": "Log in initiated" + "loginInitiated": { + "message": "Login initiated" }, "notificationSentDevice": { "message": "A notification has been sent to your device." @@ -2252,21 +2249,171 @@ "windowsBiometricUpdateWarningTitle": { "message": "Recommended Settings Update" }, + "deviceApprovalRequired": { + "message": "Device approval required. Select an approval option below:" + }, + "rememberThisDevice": { + "message": "Remember this device" + }, + "uncheckIfPublicDevice": { + "message": "Uncheck if using a public device" + }, + "approveFromYourOtherDevice": { + "message": "Approve from your other device" + }, + "requestAdminApproval": { + "message": "Request admin approval" + }, + "approveWithMasterPassword": { + "message": "Approve with master password" + }, "region": { "message": "Region" }, + "ssoIdentifierRequired": { + "message": "Organization SSO identifier is required." + }, "eu": { "message": "EU", "description": "European Union" }, - "us": { - "message": "US", - "description": "United States" + "loggingInOn": { + "message": "Logging in on" + }, + "usDomain": { + "message": "bitwarden.com" + }, + "euDomain": { + "message": "bitwarden.eu" }, "selfHosted": { "message": "Self-hosted" }, "accessDenied": { "message": "Access denied. You do not have permission to view this page." + }, + "accountSuccessfullyCreated": { + "message": "Account successfully created!" + }, + "adminApprovalRequested": { + "message": "Admin approval requested" + }, + "adminApprovalRequestSentToAdmins": { + "message": "Your request has been sent to your admin." + }, + "youWillBeNotifiedOnceApproved": { + "message": "You will be notified once approved." + }, + "troubleLoggingIn": { + "message": "Trouble logging in?" + }, + "loginApproved": { + "message": "Login approved" + }, + "userEmailMissing": { + "message": "User email missing" + }, + "deviceTrusted": { + "message": "Device trusted" + }, + "inputRequired": { + "message": "Input is required." + }, + "required": { + "message": "required" + }, + "search": { + "message": "Search" + }, + "inputMinLength": { + "message": "Input must be at least $COUNT$ characters long.", + "placeholders": { + "count": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxLength": { + "message": "Input must not exceed $COUNT$ characters in length.", + "placeholders": { + "count": { + "content": "$1", + "example": "20" + } + } + }, + "inputForbiddenCharacters": { + "message": "The following characters are not allowed: $CHARACTERS$", + "placeholders": { + "characters": { + "content": "$1", + "example": "@, #, $, %" + } + } + }, + "inputMinValue": { + "message": "Input value must be at least $MIN$.", + "placeholders": { + "min": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxValue": { + "message": "Input value must not exceed $MAX$.", + "placeholders": { + "max": { + "content": "$1", + "example": "100" + } + } + }, + "multipleInputEmails": { + "message": "1 or more emails are invalid" + }, + "inputTrimValidator": { + "message": "Input must not contain only whitespace.", + "description": "Notification to inform the user that a form's input can't contain only whitespace." + }, + "inputEmail": { + "message": "Input is not an email address." + }, + "fieldsNeedAttention": { + "message": "$COUNT$ field(s) above need your attention.", + "placeholders": { + "count": { + "content": "$1", + "example": "4" + } + } + }, + "selectPlaceholder": { + "message": "-- Select --" + }, + "multiSelectPlaceholder": { + "message": "-- Type to filter --" + }, + "multiSelectLoading": { + "message": "Retrieving options..." + }, + "multiSelectNotFound": { + "message": "No items found" + }, + "multiSelectClearAll": { + "message": "Clear all" + }, + "plusNMore": { + "message": "+ $QUANTITY$ more", + "placeholders": { + "quantity": { + "content": "$1", + "example": "5" + } + } + }, + "submenu": { + "message": "Submenu" } } diff --git a/apps/desktop/src/locales/hr/messages.json b/apps/desktop/src/locales/hr/messages.json index 23b4bebbabb..42966a51575 100644 --- a/apps/desktop/src/locales/hr/messages.json +++ b/apps/desktop/src/locales/hr/messages.json @@ -1077,8 +1077,8 @@ "premiumSignUpStorage": { "message": "1 GB šifriranog prostora za pohranu podataka." }, - "premiumSignUpTwoStep": { - "message": "Dodatne mogućnosti za prijavu dvostrukom autentifikacijom kao što su YubiKey, FIDO U2F i Duo." + "premiumSignUpTwoStepOptions": { + "message": "Proprietary two-step login options such as YubiKey and Duo." }, "premiumSignUpReports": { "message": "Higijenu lozinki, zdravlje računa i izvještaje o krađi podatak radi zaštite svojeg trezora." @@ -1492,6 +1492,9 @@ "vaultTimeoutActionLogOutDesc": { "message": "Potrebno je ponovno unijeti korisničko ime i glavnu lozinku za pristup tvom trezoru." }, + "unlockMethodNeededToChangeTimeoutActionDesc": { + "message": "Set up an unlock method to change your vault timeout action." + }, "lock": { "message": "Zaključaj", "description": "Verb form: to make secure or inaccesible by" @@ -1512,12 +1515,6 @@ "permanentlyDeletedItem": { "message": "Stavka trajno izbrisana" }, - "restoreItem": { - "message": "Vrati stavku" - }, - "restoreItemConfirmation": { - "message": "Sigurno želiš vratiti ovu stavku?" - }, "restoredItem": { "message": "Stavka vraćena" }, @@ -2112,8 +2109,8 @@ "logInWithAnotherDevice": { "message": "Prijava drugim uređajem" }, - "logInInitiated": { - "message": "Pokrenuta prijava" + "loginInitiated": { + "message": "Login initiated" }, "notificationSentDevice": { "message": "Obavijest je poslana na tvoj uređaj." @@ -2252,21 +2249,171 @@ "windowsBiometricUpdateWarningTitle": { "message": "Recommended Settings Update" }, + "deviceApprovalRequired": { + "message": "Device approval required. Select an approval option below:" + }, + "rememberThisDevice": { + "message": "Remember this device" + }, + "uncheckIfPublicDevice": { + "message": "Uncheck if using a public device" + }, + "approveFromYourOtherDevice": { + "message": "Approve from your other device" + }, + "requestAdminApproval": { + "message": "Request admin approval" + }, + "approveWithMasterPassword": { + "message": "Approve with master password" + }, "region": { "message": "Region" }, + "ssoIdentifierRequired": { + "message": "Organization SSO identifier is required." + }, "eu": { "message": "EU", "description": "European Union" }, - "us": { - "message": "US", - "description": "United States" + "loggingInOn": { + "message": "Logging in on" + }, + "usDomain": { + "message": "bitwarden.com" + }, + "euDomain": { + "message": "bitwarden.eu" }, "selfHosted": { "message": "Self-hosted" }, "accessDenied": { "message": "Access denied. You do not have permission to view this page." + }, + "accountSuccessfullyCreated": { + "message": "Account successfully created!" + }, + "adminApprovalRequested": { + "message": "Admin approval requested" + }, + "adminApprovalRequestSentToAdmins": { + "message": "Your request has been sent to your admin." + }, + "youWillBeNotifiedOnceApproved": { + "message": "You will be notified once approved." + }, + "troubleLoggingIn": { + "message": "Trouble logging in?" + }, + "loginApproved": { + "message": "Login approved" + }, + "userEmailMissing": { + "message": "User email missing" + }, + "deviceTrusted": { + "message": "Device trusted" + }, + "inputRequired": { + "message": "Input is required." + }, + "required": { + "message": "required" + }, + "search": { + "message": "Search" + }, + "inputMinLength": { + "message": "Input must be at least $COUNT$ characters long.", + "placeholders": { + "count": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxLength": { + "message": "Input must not exceed $COUNT$ characters in length.", + "placeholders": { + "count": { + "content": "$1", + "example": "20" + } + } + }, + "inputForbiddenCharacters": { + "message": "The following characters are not allowed: $CHARACTERS$", + "placeholders": { + "characters": { + "content": "$1", + "example": "@, #, $, %" + } + } + }, + "inputMinValue": { + "message": "Input value must be at least $MIN$.", + "placeholders": { + "min": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxValue": { + "message": "Input value must not exceed $MAX$.", + "placeholders": { + "max": { + "content": "$1", + "example": "100" + } + } + }, + "multipleInputEmails": { + "message": "1 or more emails are invalid" + }, + "inputTrimValidator": { + "message": "Input must not contain only whitespace.", + "description": "Notification to inform the user that a form's input can't contain only whitespace." + }, + "inputEmail": { + "message": "Input is not an email address." + }, + "fieldsNeedAttention": { + "message": "$COUNT$ field(s) above need your attention.", + "placeholders": { + "count": { + "content": "$1", + "example": "4" + } + } + }, + "selectPlaceholder": { + "message": "-- Select --" + }, + "multiSelectPlaceholder": { + "message": "-- Type to filter --" + }, + "multiSelectLoading": { + "message": "Retrieving options..." + }, + "multiSelectNotFound": { + "message": "No items found" + }, + "multiSelectClearAll": { + "message": "Clear all" + }, + "plusNMore": { + "message": "+ $QUANTITY$ more", + "placeholders": { + "quantity": { + "content": "$1", + "example": "5" + } + } + }, + "submenu": { + "message": "Submenu" } } diff --git a/apps/desktop/src/locales/hu/messages.json b/apps/desktop/src/locales/hu/messages.json index b1897f6e4b8..796da6fdece 100644 --- a/apps/desktop/src/locales/hu/messages.json +++ b/apps/desktop/src/locales/hu/messages.json @@ -1077,8 +1077,8 @@ "premiumSignUpStorage": { "message": "1 GB titkosított fájlmelléklet tárhely." }, - "premiumSignUpTwoStep": { - "message": "További olyan kétlépcsős bejelentkezési opciók mint a YubiKey, FIDO U2F és Duo." + "premiumSignUpTwoStepOptions": { + "message": "Proprietary two-step login options such as YubiKey and Duo." }, "premiumSignUpReports": { "message": "Jelszó higiénia, felhasználói fiók biztonsága, és adatszivárgási jelentések a széf biztonsága érdekében." @@ -1492,6 +1492,9 @@ "vaultTimeoutActionLogOutDesc": { "message": "A lezárt széfnél szükséges az újbóli hitelesítés az ismételt hozzáféréshez." }, + "unlockMethodNeededToChangeTimeoutActionDesc": { + "message": "Állítsunk be egy feloldási módot a széf időkifutási műveletének módosításához." + }, "lock": { "message": "Lezárás", "description": "Verb form: to make secure or inaccesible by" @@ -1512,12 +1515,6 @@ "permanentlyDeletedItem": { "message": "Elem végleges törlése" }, - "restoreItem": { - "message": "Elem visszaállítása" - }, - "restoreItemConfirmation": { - "message": "Biztosan visszaállításra kerüljön ezt az elem?" - }, "restoredItem": { "message": "Visszaállított elem" }, @@ -2112,7 +2109,7 @@ "logInWithAnotherDevice": { "message": "Bejelentkezés más eszközzel" }, - "logInInitiated": { + "loginInitiated": { "message": "A bejelentkezés elindításra került." }, "notificationSentDevice": { @@ -2252,21 +2249,171 @@ "windowsBiometricUpdateWarningTitle": { "message": "Ajánlott beállítások frissítése" }, + "deviceApprovalRequired": { + "message": "Az eszköz jóváhagyása szükséges. Válasszunk egy jóváhagyási lehetőséget lentebb:" + }, + "rememberThisDevice": { + "message": "Eszköz megjegyzése" + }, + "uncheckIfPublicDevice": { + "message": "Töröljük a jelölést, ha nyilvános eszközt használunk." + }, + "approveFromYourOtherDevice": { + "message": "Jóváhagyás másik eszközzel" + }, + "requestAdminApproval": { + "message": "Adminisztrátori jóváhagyás kérés" + }, + "approveWithMasterPassword": { + "message": "Jóváhagyás mesterjelszóval" + }, "region": { "message": "Régió" }, + "ssoIdentifierRequired": { + "message": "A szervezeti SSO azonosító megadása szükséges." + }, "eu": { "message": "EU", "description": "European Union" }, - "us": { - "message": "US", - "description": "United States" + "loggingInOn": { + "message": "Bejelentkezés:" + }, + "usDomain": { + "message": "bitwarden.com" + }, + "euDomain": { + "message": "bitwarden.eu" }, "selfHosted": { "message": "Saját kiszolgáló" }, "accessDenied": { "message": "A hozzáférés megtagadásra került. Nincs jogosultság az oldal megtekintésére." + }, + "accountSuccessfullyCreated": { + "message": "A fiók sikeresen létrehozásra került." + }, + "adminApprovalRequested": { + "message": "Adminisztrátori jóváhagyás kérés történt" + }, + "adminApprovalRequestSentToAdmins": { + "message": "A kérés elküldésre került az adminisztrátornak." + }, + "youWillBeNotifiedOnceApproved": { + "message": "A jóváhagyás után értesítés érkezik." + }, + "troubleLoggingIn": { + "message": "Probléma van a bejelentkezéssel?" + }, + "loginApproved": { + "message": "A bejelentkezés jóváhagyásra került." + }, + "userEmailMissing": { + "message": "A felhasználói email cím hiányzik." + }, + "deviceTrusted": { + "message": "Az eszköz megbízható." + }, + "inputRequired": { + "message": "Az adatbevitel kötelező." + }, + "required": { + "message": "kötelező" + }, + "search": { + "message": "Keresés" + }, + "inputMinLength": { + "message": "Az adat legyen legalább $COUNT$ karakter hosszú.", + "placeholders": { + "count": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxLength": { + "message": "A bevitel nem haladhatja meg $COUNT$ karakter hosszt.", + "placeholders": { + "count": { + "content": "$1", + "example": "20" + } + } + }, + "inputForbiddenCharacters": { + "message": "A következő karakterek nem engedélyezettek: $CHARACTERS$", + "placeholders": { + "characters": { + "content": "$1", + "example": "@, #, $, %" + } + } + }, + "inputMinValue": { + "message": "A beviteli érték legyen legalább $MIN$.", + "placeholders": { + "min": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxValue": { + "message": "A beviteli érték ne haladja meg $MAX$ értéket.", + "placeholders": { + "max": { + "content": "$1", + "example": "100" + } + } + }, + "multipleInputEmails": { + "message": "1 vagy több email cím érvénytelen." + }, + "inputTrimValidator": { + "message": "A bevitel nem tartalmazhat csak fehér szóköz karaktert.", + "description": "Notification to inform the user that a form's input can't contain only whitespace." + }, + "inputEmail": { + "message": "Az megadott bevitel nem email cím." + }, + "fieldsNeedAttention": { + "message": "$COUNT$ mező fentebb figyelmet érdemel.", + "placeholders": { + "count": { + "content": "$1", + "example": "4" + } + } + }, + "selectPlaceholder": { + "message": "-- Választás --" + }, + "multiSelectPlaceholder": { + "message": "-- Gépelés a szűréshez --" + }, + "multiSelectLoading": { + "message": "Az opciók beolvasása folyamatban can..." + }, + "multiSelectNotFound": { + "message": "Nem található elem." + }, + "multiSelectClearAll": { + "message": "Összes törlése" + }, + "plusNMore": { + "message": "+ $QUANTITY$ további", + "placeholders": { + "quantity": { + "content": "$1", + "example": "5" + } + } + }, + "submenu": { + "message": "Almenü" } } diff --git a/apps/desktop/src/locales/id/messages.json b/apps/desktop/src/locales/id/messages.json index c4a8b77566c..b976d1b8fd9 100644 --- a/apps/desktop/src/locales/id/messages.json +++ b/apps/desktop/src/locales/id/messages.json @@ -1077,8 +1077,8 @@ "premiumSignUpStorage": { "message": "1 GB penyimpanan berkas yang dienkripsi." }, - "premiumSignUpTwoStep": { - "message": "Pilihan info masuk dua langkah tambahan seperti YubiKey, FIDO U2F, dan Duo." + "premiumSignUpTwoStepOptions": { + "message": "Proprietary two-step login options such as YubiKey and Duo." }, "premiumSignUpReports": { "message": "Kebersihan kata sandi, kesehatan akun, dan laporan pelanggaran data untuk menjaga brankas Anda tetap aman." @@ -1492,6 +1492,9 @@ "vaultTimeoutActionLogOutDesc": { "message": "Brankas akan keluar dan Anda diminta untuk memasukkan password utama untuk mengakses kembali." }, + "unlockMethodNeededToChangeTimeoutActionDesc": { + "message": "Set up an unlock method to change your vault timeout action." + }, "lock": { "message": "Kunci", "description": "Verb form: to make secure or inaccesible by" @@ -1512,12 +1515,6 @@ "permanentlyDeletedItem": { "message": "Item Terhapus Permanen" }, - "restoreItem": { - "message": "Pulihkan Item" - }, - "restoreItemConfirmation": { - "message": "Apakah Anda yakin ingin memulihkan item ini?" - }, "restoredItem": { "message": "Item Yang Dipulihkan" }, @@ -2112,8 +2109,8 @@ "logInWithAnotherDevice": { "message": "Log in with another device" }, - "logInInitiated": { - "message": "Log in initiated" + "loginInitiated": { + "message": "Login initiated" }, "notificationSentDevice": { "message": "A notification has been sent to your device." @@ -2252,21 +2249,171 @@ "windowsBiometricUpdateWarningTitle": { "message": "Recommended Settings Update" }, + "deviceApprovalRequired": { + "message": "Device approval required. Select an approval option below:" + }, + "rememberThisDevice": { + "message": "Remember this device" + }, + "uncheckIfPublicDevice": { + "message": "Uncheck if using a public device" + }, + "approveFromYourOtherDevice": { + "message": "Approve from your other device" + }, + "requestAdminApproval": { + "message": "Request admin approval" + }, + "approveWithMasterPassword": { + "message": "Approve with master password" + }, "region": { "message": "Region" }, + "ssoIdentifierRequired": { + "message": "Organization SSO identifier is required." + }, "eu": { "message": "EU", "description": "European Union" }, - "us": { - "message": "US", - "description": "United States" + "loggingInOn": { + "message": "Logging in on" + }, + "usDomain": { + "message": "bitwarden.com" + }, + "euDomain": { + "message": "bitwarden.eu" }, "selfHosted": { "message": "Self-hosted" }, "accessDenied": { "message": "Access denied. You do not have permission to view this page." + }, + "accountSuccessfullyCreated": { + "message": "Account successfully created!" + }, + "adminApprovalRequested": { + "message": "Admin approval requested" + }, + "adminApprovalRequestSentToAdmins": { + "message": "Your request has been sent to your admin." + }, + "youWillBeNotifiedOnceApproved": { + "message": "You will be notified once approved." + }, + "troubleLoggingIn": { + "message": "Trouble logging in?" + }, + "loginApproved": { + "message": "Login approved" + }, + "userEmailMissing": { + "message": "User email missing" + }, + "deviceTrusted": { + "message": "Device trusted" + }, + "inputRequired": { + "message": "Input is required." + }, + "required": { + "message": "required" + }, + "search": { + "message": "Search" + }, + "inputMinLength": { + "message": "Input must be at least $COUNT$ characters long.", + "placeholders": { + "count": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxLength": { + "message": "Input must not exceed $COUNT$ characters in length.", + "placeholders": { + "count": { + "content": "$1", + "example": "20" + } + } + }, + "inputForbiddenCharacters": { + "message": "The following characters are not allowed: $CHARACTERS$", + "placeholders": { + "characters": { + "content": "$1", + "example": "@, #, $, %" + } + } + }, + "inputMinValue": { + "message": "Input value must be at least $MIN$.", + "placeholders": { + "min": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxValue": { + "message": "Input value must not exceed $MAX$.", + "placeholders": { + "max": { + "content": "$1", + "example": "100" + } + } + }, + "multipleInputEmails": { + "message": "1 or more emails are invalid" + }, + "inputTrimValidator": { + "message": "Input must not contain only whitespace.", + "description": "Notification to inform the user that a form's input can't contain only whitespace." + }, + "inputEmail": { + "message": "Input is not an email address." + }, + "fieldsNeedAttention": { + "message": "$COUNT$ field(s) above need your attention.", + "placeholders": { + "count": { + "content": "$1", + "example": "4" + } + } + }, + "selectPlaceholder": { + "message": "-- Select --" + }, + "multiSelectPlaceholder": { + "message": "-- Type to filter --" + }, + "multiSelectLoading": { + "message": "Retrieving options..." + }, + "multiSelectNotFound": { + "message": "No items found" + }, + "multiSelectClearAll": { + "message": "Clear all" + }, + "plusNMore": { + "message": "+ $QUANTITY$ more", + "placeholders": { + "quantity": { + "content": "$1", + "example": "5" + } + } + }, + "submenu": { + "message": "Submenu" } } diff --git a/apps/desktop/src/locales/it/messages.json b/apps/desktop/src/locales/it/messages.json index fbbcb2f08c1..f294888cc38 100644 --- a/apps/desktop/src/locales/it/messages.json +++ b/apps/desktop/src/locales/it/messages.json @@ -1077,8 +1077,8 @@ "premiumSignUpStorage": { "message": "1 GB di spazio di archiviazione criptato per gli allegati." }, - "premiumSignUpTwoStep": { - "message": "Più opzioni di verifica in due passaggi come YubiKey, FIDO U2F, e Duo." + "premiumSignUpTwoStepOptions": { + "message": "Proprietary two-step login options such as YubiKey and Duo." }, "premiumSignUpReports": { "message": "Sicurezza delle password, integrità dell'account e rapporti sulle violazioni dei dati per mantenere la tua cassaforte sicura." @@ -1492,6 +1492,9 @@ "vaultTimeoutActionLogOutDesc": { "message": "Dovrai autenticarti di nuovo per accedere alla tua cassaforte." }, + "unlockMethodNeededToChangeTimeoutActionDesc": { + "message": "Imposta un metodo di sblocco per modificare l'azione timeout cassaforte." + }, "lock": { "message": "Blocca", "description": "Verb form: to make secure or inaccesible by" @@ -1512,12 +1515,6 @@ "permanentlyDeletedItem": { "message": "Elemento eliminato definitivamente" }, - "restoreItem": { - "message": "Ripristina elemento" - }, - "restoreItemConfirmation": { - "message": "Sei sicuro di voler ripristinare questo elemento?" - }, "restoredItem": { "message": "Elemento ripristinato" }, @@ -2112,8 +2109,8 @@ "logInWithAnotherDevice": { "message": "Accedi con un altro dispositivo" }, - "logInInitiated": { - "message": "Login avviato" + "loginInitiated": { + "message": "Accesso avviato" }, "notificationSentDevice": { "message": "Una notifica è stata inviata al tuo dispositivo." @@ -2252,21 +2249,171 @@ "windowsBiometricUpdateWarningTitle": { "message": "Aggiornamento delle impostazioni consigliato" }, + "deviceApprovalRequired": { + "message": "Approvazione del dispositivo obbligatoria. Seleziona un'opzione di approvazione:" + }, + "rememberThisDevice": { + "message": "Ricorda questo dispositivo" + }, + "uncheckIfPublicDevice": { + "message": "Deseleziona se stai usando un dispositivo pubblico" + }, + "approveFromYourOtherDevice": { + "message": "Approva dall'altro tuo dispositivo" + }, + "requestAdminApproval": { + "message": "Richiedi approvazione dell'amministratore" + }, + "approveWithMasterPassword": { + "message": "Approva con password principale" + }, "region": { "message": "Regione" }, + "ssoIdentifierRequired": { + "message": "Identificatore SSO dell'organizzazione obbligatorio." + }, "eu": { - "message": "UE", + "message": "EU", "description": "European Union" }, - "us": { - "message": "US", - "description": "United States" + "loggingInOn": { + "message": "Accedendo su" + }, + "usDomain": { + "message": "bitwarden.com" + }, + "euDomain": { + "message": "bitwarden.eu" }, "selfHosted": { "message": "Self-hosted" }, "accessDenied": { "message": "Accesso negato. Non hai i permessi necessari per visualizzare questa pagina." + }, + "accountSuccessfullyCreated": { + "message": "Account creato!" + }, + "adminApprovalRequested": { + "message": "Approvazione dell'amministratore richiesta" + }, + "adminApprovalRequestSentToAdmins": { + "message": "La tua richiesta è stata inviata al tuo amministratore." + }, + "youWillBeNotifiedOnceApproved": { + "message": "Riceverai una notifica una volta approvato." + }, + "troubleLoggingIn": { + "message": "Problemi ad accedere?" + }, + "loginApproved": { + "message": "Accesso approvato" + }, + "userEmailMissing": { + "message": "Email utente mancante" + }, + "deviceTrusted": { + "message": "Dispositivo fidato" + }, + "inputRequired": { + "message": "Input obbligatorio." + }, + "required": { + "message": "obbligatorio" + }, + "search": { + "message": "Cerca" + }, + "inputMinLength": { + "message": "L'input deve essere lungo almeno $COUNT$ caratteri.", + "placeholders": { + "count": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxLength": { + "message": "L'input non deve essere più lungo di $COUNT$ caratteri.", + "placeholders": { + "count": { + "content": "$1", + "example": "20" + } + } + }, + "inputForbiddenCharacters": { + "message": "Questi caratteri non sono permessi: $CHARACTERS$", + "placeholders": { + "characters": { + "content": "$1", + "example": "@, #, $, %" + } + } + }, + "inputMinValue": { + "message": "Il valore immesso deve essere almeno $MIN$.", + "placeholders": { + "min": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxValue": { + "message": "Il valore immesso non deve superare $MAX$.", + "placeholders": { + "max": { + "content": "$1", + "example": "100" + } + } + }, + "multipleInputEmails": { + "message": "Una o più email non sono valide" + }, + "inputTrimValidator": { + "message": "L'input non può contenere solo spazi.", + "description": "Notification to inform the user that a form's input can't contain only whitespace." + }, + "inputEmail": { + "message": "L'input non è un indirizzo email." + }, + "fieldsNeedAttention": { + "message": "$COUNT$ campi qui sopra richiedono la tua attenzione.", + "placeholders": { + "count": { + "content": "$1", + "example": "4" + } + } + }, + "selectPlaceholder": { + "message": "-- Seleziona --" + }, + "multiSelectPlaceholder": { + "message": "-- Digita per filtrare --" + }, + "multiSelectLoading": { + "message": "Ottenendo opzioni..." + }, + "multiSelectNotFound": { + "message": "Nessun elemento trovato" + }, + "multiSelectClearAll": { + "message": "Cancella tutto" + }, + "plusNMore": { + "message": "+$QUANTITY$ in più", + "placeholders": { + "quantity": { + "content": "$1", + "example": "5" + } + } + }, + "submenu": { + "message": "Sottomenu" } } diff --git a/apps/desktop/src/locales/ja/messages.json b/apps/desktop/src/locales/ja/messages.json index 6e89627a5e9..f8c11aca7e5 100644 --- a/apps/desktop/src/locales/ja/messages.json +++ b/apps/desktop/src/locales/ja/messages.json @@ -1077,8 +1077,8 @@ "premiumSignUpStorage": { "message": "1GB の暗号化されたファイルストレージ。" }, - "premiumSignUpTwoStep": { - "message": "YubiKey、FIDO U2F、Duoなどの追加の2段階認証ログインオプション" + "premiumSignUpTwoStepOptions": { + "message": "YubiKey、Duo などのプロプライエタリな2段階認証オプション。" }, "premiumSignUpReports": { "message": "保管庫を安全に保つための、パスワードやアカウントの健全性、データ侵害に関するレポート。" @@ -1492,6 +1492,9 @@ "vaultTimeoutActionLogOutDesc": { "message": "ログアウトした保管庫にアクセスするには、再認証してください。" }, + "unlockMethodNeededToChangeTimeoutActionDesc": { + "message": "保管庫のタイムアウト動作を変更するには、ロック解除方法を設定してください。" + }, "lock": { "message": "ロック", "description": "Verb form: to make secure or inaccesible by" @@ -1512,12 +1515,6 @@ "permanentlyDeletedItem": { "message": "完全に削除されたアイテム" }, - "restoreItem": { - "message": "アイテムをリストア" - }, - "restoreItemConfirmation": { - "message": "このアイテムをリストアしますか?" - }, "restoredItem": { "message": "リストアされたアイテム" }, @@ -1684,7 +1681,7 @@ "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "myVault": { - "message": "保管庫" + "message": "自分の保管庫" }, "text": { "message": "テキスト" @@ -2052,7 +2049,7 @@ "message": "組織の検索" }, "searchMyVault": { - "message": "保管庫を検索" + "message": "自分の保管庫内を検索" }, "forwardedEmail": { "message": "転送されたメールエイリアス" @@ -2112,7 +2109,7 @@ "logInWithAnotherDevice": { "message": "別のデバイスでログイン" }, - "logInInitiated": { + "loginInitiated": { "message": "ログイン開始" }, "notificationSentDevice": { @@ -2252,21 +2249,171 @@ "windowsBiometricUpdateWarningTitle": { "message": "設定の更新を推奨" }, + "deviceApprovalRequired": { + "message": "デバイスの承認が必要です。以下から承認オプションを選択してください:" + }, + "rememberThisDevice": { + "message": "このデバイスを記憶する" + }, + "uncheckIfPublicDevice": { + "message": "パブリックデバイスを使用している場合はチェックしないでください" + }, + "approveFromYourOtherDevice": { + "message": "他のデバイスから承認する" + }, + "requestAdminApproval": { + "message": "管理者の承認を要求する" + }, + "approveWithMasterPassword": { + "message": "マスターパスワードで承認する" + }, "region": { "message": "リージョン" }, + "ssoIdentifierRequired": { + "message": "組織の SSO ID が必要です。" + }, "eu": { "message": "EU", "description": "European Union" }, - "us": { - "message": "米国", - "description": "United States" + "loggingInOn": { + "message": "ログイン先" + }, + "usDomain": { + "message": "bitwarden.com" + }, + "euDomain": { + "message": "bitwarden.eu" }, "selfHosted": { "message": "自己ホスト型" }, "accessDenied": { "message": "アクセスが拒否されました。このページを表示する権限がありません。" + }, + "accountSuccessfullyCreated": { + "message": "アカウントを正常に作成しました!" + }, + "adminApprovalRequested": { + "message": "管理者の承認を要求しました" + }, + "adminApprovalRequestSentToAdmins": { + "message": "要求を管理者に送信しました。" + }, + "youWillBeNotifiedOnceApproved": { + "message": "承認されると通知されます。 " + }, + "troubleLoggingIn": { + "message": "ログインできない場合" + }, + "loginApproved": { + "message": "ログインが承認されました" + }, + "userEmailMissing": { + "message": "ユーザーのメールアドレスがありません" + }, + "deviceTrusted": { + "message": "信頼されたデバイス" + }, + "inputRequired": { + "message": "入力が必要です。" + }, + "required": { + "message": "必須" + }, + "search": { + "message": "検索" + }, + "inputMinLength": { + "message": "$COUNT$ 文字以上でなければなりません。", + "placeholders": { + "count": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxLength": { + "message": "$COUNT$ 文字を超えてはいけません。", + "placeholders": { + "count": { + "content": "$1", + "example": "20" + } + } + }, + "inputForbiddenCharacters": { + "message": "次の文字は許可されていません: $CHARACTERS$", + "placeholders": { + "characters": { + "content": "$1", + "example": "@, #, $, %" + } + } + }, + "inputMinValue": { + "message": "入力値は少なくとも$MIN$桁でなければなりません。", + "placeholders": { + "min": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxValue": { + "message": "入力値は$MAX$桁を超えてはいけません。", + "placeholders": { + "max": { + "content": "$1", + "example": "100" + } + } + }, + "multipleInputEmails": { + "message": "1つ以上のメールアドレスが無効です" + }, + "inputTrimValidator": { + "message": "値を空白のみにしないでください。", + "description": "Notification to inform the user that a form's input can't contain only whitespace." + }, + "inputEmail": { + "message": "入力したものはメールアドレスではありません。" + }, + "fieldsNeedAttention": { + "message": "上記の $COUNT$ 点を確認してください。", + "placeholders": { + "count": { + "content": "$1", + "example": "4" + } + } + }, + "selectPlaceholder": { + "message": "-- 選択 --" + }, + "multiSelectPlaceholder": { + "message": "-- 入力して絞り込み --" + }, + "multiSelectLoading": { + "message": "オプションを取得中..." + }, + "multiSelectNotFound": { + "message": "アイテムが見つかりません" + }, + "multiSelectClearAll": { + "message": "すべてクリア" + }, + "plusNMore": { + "message": "+ $QUANTITY$ 個以上", + "placeholders": { + "quantity": { + "content": "$1", + "example": "5" + } + } + }, + "submenu": { + "message": "サブメニュー" } } diff --git a/apps/desktop/src/locales/ka/messages.json b/apps/desktop/src/locales/ka/messages.json index ed828fa2255..38e81a83bfd 100644 --- a/apps/desktop/src/locales/ka/messages.json +++ b/apps/desktop/src/locales/ka/messages.json @@ -1077,8 +1077,8 @@ "premiumSignUpStorage": { "message": "1 GB encrypted storage for file attachments." }, - "premiumSignUpTwoStep": { - "message": "Additional two-step login options such as YubiKey, FIDO U2F, and Duo." + "premiumSignUpTwoStepOptions": { + "message": "Proprietary two-step login options such as YubiKey and Duo." }, "premiumSignUpReports": { "message": "Password hygiene, account health, and data breach reports to keep your vault safe." @@ -1492,6 +1492,9 @@ "vaultTimeoutActionLogOutDesc": { "message": "Re-authentication is required to access your vault again." }, + "unlockMethodNeededToChangeTimeoutActionDesc": { + "message": "Set up an unlock method to change your vault timeout action." + }, "lock": { "message": "Lock", "description": "Verb form: to make secure or inaccesible by" @@ -1512,12 +1515,6 @@ "permanentlyDeletedItem": { "message": "Item permanently deleted" }, - "restoreItem": { - "message": "Restore item" - }, - "restoreItemConfirmation": { - "message": "Are you sure you want to restore this item?" - }, "restoredItem": { "message": "Item restored" }, @@ -2112,8 +2109,8 @@ "logInWithAnotherDevice": { "message": "Log in with another device" }, - "logInInitiated": { - "message": "Log in initiated" + "loginInitiated": { + "message": "Login initiated" }, "notificationSentDevice": { "message": "A notification has been sent to your device." @@ -2252,21 +2249,171 @@ "windowsBiometricUpdateWarningTitle": { "message": "Recommended Settings Update" }, + "deviceApprovalRequired": { + "message": "Device approval required. Select an approval option below:" + }, + "rememberThisDevice": { + "message": "Remember this device" + }, + "uncheckIfPublicDevice": { + "message": "Uncheck if using a public device" + }, + "approveFromYourOtherDevice": { + "message": "Approve from your other device" + }, + "requestAdminApproval": { + "message": "Request admin approval" + }, + "approveWithMasterPassword": { + "message": "Approve with master password" + }, "region": { "message": "Region" }, + "ssoIdentifierRequired": { + "message": "Organization SSO identifier is required." + }, "eu": { "message": "EU", "description": "European Union" }, - "us": { - "message": "US", - "description": "United States" + "loggingInOn": { + "message": "Logging in on" + }, + "usDomain": { + "message": "bitwarden.com" + }, + "euDomain": { + "message": "bitwarden.eu" }, "selfHosted": { "message": "Self-hosted" }, "accessDenied": { "message": "Access denied. You do not have permission to view this page." + }, + "accountSuccessfullyCreated": { + "message": "Account successfully created!" + }, + "adminApprovalRequested": { + "message": "Admin approval requested" + }, + "adminApprovalRequestSentToAdmins": { + "message": "Your request has been sent to your admin." + }, + "youWillBeNotifiedOnceApproved": { + "message": "You will be notified once approved." + }, + "troubleLoggingIn": { + "message": "Trouble logging in?" + }, + "loginApproved": { + "message": "Login approved" + }, + "userEmailMissing": { + "message": "User email missing" + }, + "deviceTrusted": { + "message": "Device trusted" + }, + "inputRequired": { + "message": "Input is required." + }, + "required": { + "message": "required" + }, + "search": { + "message": "Search" + }, + "inputMinLength": { + "message": "Input must be at least $COUNT$ characters long.", + "placeholders": { + "count": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxLength": { + "message": "Input must not exceed $COUNT$ characters in length.", + "placeholders": { + "count": { + "content": "$1", + "example": "20" + } + } + }, + "inputForbiddenCharacters": { + "message": "The following characters are not allowed: $CHARACTERS$", + "placeholders": { + "characters": { + "content": "$1", + "example": "@, #, $, %" + } + } + }, + "inputMinValue": { + "message": "Input value must be at least $MIN$.", + "placeholders": { + "min": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxValue": { + "message": "Input value must not exceed $MAX$.", + "placeholders": { + "max": { + "content": "$1", + "example": "100" + } + } + }, + "multipleInputEmails": { + "message": "1 or more emails are invalid" + }, + "inputTrimValidator": { + "message": "Input must not contain only whitespace.", + "description": "Notification to inform the user that a form's input can't contain only whitespace." + }, + "inputEmail": { + "message": "Input is not an email address." + }, + "fieldsNeedAttention": { + "message": "$COUNT$ field(s) above need your attention.", + "placeholders": { + "count": { + "content": "$1", + "example": "4" + } + } + }, + "selectPlaceholder": { + "message": "-- Select --" + }, + "multiSelectPlaceholder": { + "message": "-- Type to filter --" + }, + "multiSelectLoading": { + "message": "Retrieving options..." + }, + "multiSelectNotFound": { + "message": "No items found" + }, + "multiSelectClearAll": { + "message": "Clear all" + }, + "plusNMore": { + "message": "+ $QUANTITY$ more", + "placeholders": { + "quantity": { + "content": "$1", + "example": "5" + } + } + }, + "submenu": { + "message": "Submenu" } } diff --git a/apps/desktop/src/locales/km/messages.json b/apps/desktop/src/locales/km/messages.json index ed828fa2255..38e81a83bfd 100644 --- a/apps/desktop/src/locales/km/messages.json +++ b/apps/desktop/src/locales/km/messages.json @@ -1077,8 +1077,8 @@ "premiumSignUpStorage": { "message": "1 GB encrypted storage for file attachments." }, - "premiumSignUpTwoStep": { - "message": "Additional two-step login options such as YubiKey, FIDO U2F, and Duo." + "premiumSignUpTwoStepOptions": { + "message": "Proprietary two-step login options such as YubiKey and Duo." }, "premiumSignUpReports": { "message": "Password hygiene, account health, and data breach reports to keep your vault safe." @@ -1492,6 +1492,9 @@ "vaultTimeoutActionLogOutDesc": { "message": "Re-authentication is required to access your vault again." }, + "unlockMethodNeededToChangeTimeoutActionDesc": { + "message": "Set up an unlock method to change your vault timeout action." + }, "lock": { "message": "Lock", "description": "Verb form: to make secure or inaccesible by" @@ -1512,12 +1515,6 @@ "permanentlyDeletedItem": { "message": "Item permanently deleted" }, - "restoreItem": { - "message": "Restore item" - }, - "restoreItemConfirmation": { - "message": "Are you sure you want to restore this item?" - }, "restoredItem": { "message": "Item restored" }, @@ -2112,8 +2109,8 @@ "logInWithAnotherDevice": { "message": "Log in with another device" }, - "logInInitiated": { - "message": "Log in initiated" + "loginInitiated": { + "message": "Login initiated" }, "notificationSentDevice": { "message": "A notification has been sent to your device." @@ -2252,21 +2249,171 @@ "windowsBiometricUpdateWarningTitle": { "message": "Recommended Settings Update" }, + "deviceApprovalRequired": { + "message": "Device approval required. Select an approval option below:" + }, + "rememberThisDevice": { + "message": "Remember this device" + }, + "uncheckIfPublicDevice": { + "message": "Uncheck if using a public device" + }, + "approveFromYourOtherDevice": { + "message": "Approve from your other device" + }, + "requestAdminApproval": { + "message": "Request admin approval" + }, + "approveWithMasterPassword": { + "message": "Approve with master password" + }, "region": { "message": "Region" }, + "ssoIdentifierRequired": { + "message": "Organization SSO identifier is required." + }, "eu": { "message": "EU", "description": "European Union" }, - "us": { - "message": "US", - "description": "United States" + "loggingInOn": { + "message": "Logging in on" + }, + "usDomain": { + "message": "bitwarden.com" + }, + "euDomain": { + "message": "bitwarden.eu" }, "selfHosted": { "message": "Self-hosted" }, "accessDenied": { "message": "Access denied. You do not have permission to view this page." + }, + "accountSuccessfullyCreated": { + "message": "Account successfully created!" + }, + "adminApprovalRequested": { + "message": "Admin approval requested" + }, + "adminApprovalRequestSentToAdmins": { + "message": "Your request has been sent to your admin." + }, + "youWillBeNotifiedOnceApproved": { + "message": "You will be notified once approved." + }, + "troubleLoggingIn": { + "message": "Trouble logging in?" + }, + "loginApproved": { + "message": "Login approved" + }, + "userEmailMissing": { + "message": "User email missing" + }, + "deviceTrusted": { + "message": "Device trusted" + }, + "inputRequired": { + "message": "Input is required." + }, + "required": { + "message": "required" + }, + "search": { + "message": "Search" + }, + "inputMinLength": { + "message": "Input must be at least $COUNT$ characters long.", + "placeholders": { + "count": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxLength": { + "message": "Input must not exceed $COUNT$ characters in length.", + "placeholders": { + "count": { + "content": "$1", + "example": "20" + } + } + }, + "inputForbiddenCharacters": { + "message": "The following characters are not allowed: $CHARACTERS$", + "placeholders": { + "characters": { + "content": "$1", + "example": "@, #, $, %" + } + } + }, + "inputMinValue": { + "message": "Input value must be at least $MIN$.", + "placeholders": { + "min": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxValue": { + "message": "Input value must not exceed $MAX$.", + "placeholders": { + "max": { + "content": "$1", + "example": "100" + } + } + }, + "multipleInputEmails": { + "message": "1 or more emails are invalid" + }, + "inputTrimValidator": { + "message": "Input must not contain only whitespace.", + "description": "Notification to inform the user that a form's input can't contain only whitespace." + }, + "inputEmail": { + "message": "Input is not an email address." + }, + "fieldsNeedAttention": { + "message": "$COUNT$ field(s) above need your attention.", + "placeholders": { + "count": { + "content": "$1", + "example": "4" + } + } + }, + "selectPlaceholder": { + "message": "-- Select --" + }, + "multiSelectPlaceholder": { + "message": "-- Type to filter --" + }, + "multiSelectLoading": { + "message": "Retrieving options..." + }, + "multiSelectNotFound": { + "message": "No items found" + }, + "multiSelectClearAll": { + "message": "Clear all" + }, + "plusNMore": { + "message": "+ $QUANTITY$ more", + "placeholders": { + "quantity": { + "content": "$1", + "example": "5" + } + } + }, + "submenu": { + "message": "Submenu" } } diff --git a/apps/desktop/src/locales/kn/messages.json b/apps/desktop/src/locales/kn/messages.json index 0d1ea3265af..bfc29e570a1 100644 --- a/apps/desktop/src/locales/kn/messages.json +++ b/apps/desktop/src/locales/kn/messages.json @@ -1077,8 +1077,8 @@ "premiumSignUpStorage": { "message": "ಫೈಲ್ ಲಗತ್ತುಗಳಿಗಾಗಿ 1 ಜಿಬಿ ಎನ್‌ಕ್ರಿಪ್ಟ್ ಮಾಡಿದ ಸಂಗ್ರಹ." }, - "premiumSignUpTwoStep": { - "message": "ಹೆಚ್ಚುವರಿ ಎರಡು-ಹಂತದ ಲಾಗಿನ್ ಆಯ್ಕೆಗಳಾದ ಯೂಬಿಕೆ, ಎಫ್‌ಐಡಿಒ ಯು 2 ಎಫ್, ಮತ್ತು ಡ್ಯುವೋ." + "premiumSignUpTwoStepOptions": { + "message": "Proprietary two-step login options such as YubiKey and Duo." }, "premiumSignUpReports": { "message": "ನಿಮ್ಮ ವಾಲ್ಟ್ ಅನ್ನು ಸುರಕ್ಷಿತವಾಗಿರಿಸಲು ಪಾಸ್ವರ್ಡ್ ನೈರ್ಮಲ್ಯ, ಖಾತೆ ಆರೋಗ್ಯ ಮತ್ತು ಡೇಟಾ ಉಲ್ಲಂಘನೆ ವರದಿಗಳು." @@ -1492,6 +1492,9 @@ "vaultTimeoutActionLogOutDesc": { "message": "ಲಾಗ್ out ಟ್ ವಾಲ್ಟ್‌ಗೆ ನೀವು ಅದನ್ನು ಮತ್ತೆ ಪ್ರವೇಶಿಸಲು ಮರು ದೃಢೀಕರಿಸುವ ಅಗತ್ಯವಿದೆ." }, + "unlockMethodNeededToChangeTimeoutActionDesc": { + "message": "Set up an unlock method to change your vault timeout action." + }, "lock": { "message": "ಲಾಕ್‌", "description": "Verb form: to make secure or inaccesible by" @@ -1512,12 +1515,6 @@ "permanentlyDeletedItem": { "message": "ಶಾಶ್ವತವಾಗಿ ಅಳಿಸಲಾದ ಐಟಂ" }, - "restoreItem": { - "message": "ಐಟಂ ಅನ್ನು ಮರುಸ್ಥಾಪಿಸಿ" - }, - "restoreItemConfirmation": { - "message": "ಈ ಐಟಂ ಅನ್ನು ಮರುಸ್ಥಾಪಿಸಲು ನೀವು ಖಚಿತವಾಗಿ ಬಯಸುವಿರಾ?" - }, "restoredItem": { "message": "ಐಟಂ ಅನ್ನು ಮರುಸ್ಥಾಪಿಸಲಾಗಿದೆ" }, @@ -2112,8 +2109,8 @@ "logInWithAnotherDevice": { "message": "Log in with another device" }, - "logInInitiated": { - "message": "Log in initiated" + "loginInitiated": { + "message": "Login initiated" }, "notificationSentDevice": { "message": "A notification has been sent to your device." @@ -2252,21 +2249,171 @@ "windowsBiometricUpdateWarningTitle": { "message": "Recommended Settings Update" }, + "deviceApprovalRequired": { + "message": "Device approval required. Select an approval option below:" + }, + "rememberThisDevice": { + "message": "Remember this device" + }, + "uncheckIfPublicDevice": { + "message": "Uncheck if using a public device" + }, + "approveFromYourOtherDevice": { + "message": "Approve from your other device" + }, + "requestAdminApproval": { + "message": "Request admin approval" + }, + "approveWithMasterPassword": { + "message": "Approve with master password" + }, "region": { "message": "Region" }, + "ssoIdentifierRequired": { + "message": "Organization SSO identifier is required." + }, "eu": { "message": "EU", "description": "European Union" }, - "us": { - "message": "US", - "description": "United States" + "loggingInOn": { + "message": "Logging in on" + }, + "usDomain": { + "message": "bitwarden.com" + }, + "euDomain": { + "message": "bitwarden.eu" }, "selfHosted": { "message": "Self-hosted" }, "accessDenied": { "message": "Access denied. You do not have permission to view this page." + }, + "accountSuccessfullyCreated": { + "message": "Account successfully created!" + }, + "adminApprovalRequested": { + "message": "Admin approval requested" + }, + "adminApprovalRequestSentToAdmins": { + "message": "Your request has been sent to your admin." + }, + "youWillBeNotifiedOnceApproved": { + "message": "You will be notified once approved." + }, + "troubleLoggingIn": { + "message": "Trouble logging in?" + }, + "loginApproved": { + "message": "Login approved" + }, + "userEmailMissing": { + "message": "User email missing" + }, + "deviceTrusted": { + "message": "Device trusted" + }, + "inputRequired": { + "message": "Input is required." + }, + "required": { + "message": "required" + }, + "search": { + "message": "Search" + }, + "inputMinLength": { + "message": "Input must be at least $COUNT$ characters long.", + "placeholders": { + "count": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxLength": { + "message": "Input must not exceed $COUNT$ characters in length.", + "placeholders": { + "count": { + "content": "$1", + "example": "20" + } + } + }, + "inputForbiddenCharacters": { + "message": "The following characters are not allowed: $CHARACTERS$", + "placeholders": { + "characters": { + "content": "$1", + "example": "@, #, $, %" + } + } + }, + "inputMinValue": { + "message": "Input value must be at least $MIN$.", + "placeholders": { + "min": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxValue": { + "message": "Input value must not exceed $MAX$.", + "placeholders": { + "max": { + "content": "$1", + "example": "100" + } + } + }, + "multipleInputEmails": { + "message": "1 or more emails are invalid" + }, + "inputTrimValidator": { + "message": "Input must not contain only whitespace.", + "description": "Notification to inform the user that a form's input can't contain only whitespace." + }, + "inputEmail": { + "message": "Input is not an email address." + }, + "fieldsNeedAttention": { + "message": "$COUNT$ field(s) above need your attention.", + "placeholders": { + "count": { + "content": "$1", + "example": "4" + } + } + }, + "selectPlaceholder": { + "message": "-- Select --" + }, + "multiSelectPlaceholder": { + "message": "-- Type to filter --" + }, + "multiSelectLoading": { + "message": "Retrieving options..." + }, + "multiSelectNotFound": { + "message": "No items found" + }, + "multiSelectClearAll": { + "message": "Clear all" + }, + "plusNMore": { + "message": "+ $QUANTITY$ more", + "placeholders": { + "quantity": { + "content": "$1", + "example": "5" + } + } + }, + "submenu": { + "message": "Submenu" } } diff --git a/apps/desktop/src/locales/ko/messages.json b/apps/desktop/src/locales/ko/messages.json index 2699d1797d9..7bff705c8ec 100644 --- a/apps/desktop/src/locales/ko/messages.json +++ b/apps/desktop/src/locales/ko/messages.json @@ -1077,8 +1077,8 @@ "premiumSignUpStorage": { "message": "1GB의 암호화된 파일 저장소." }, - "premiumSignUpTwoStep": { - "message": "YubiKey나 FIDO U2F, Duo 등의 추가적인 2단계 인증 옵션." + "premiumSignUpTwoStepOptions": { + "message": "Proprietary two-step login options such as YubiKey and Duo." }, "premiumSignUpReports": { "message": "보관함을 안전하게 유지하기 위한 암호 위생, 계정 상태, 데이터 유출 보고서" @@ -1492,6 +1492,9 @@ "vaultTimeoutActionLogOutDesc": { "message": "로그아웃한 보관함에 다시 접근하려면 다시 인증해야 합니다." }, + "unlockMethodNeededToChangeTimeoutActionDesc": { + "message": "Set up an unlock method to change your vault timeout action." + }, "lock": { "message": "잠금", "description": "Verb form: to make secure or inaccesible by" @@ -1512,12 +1515,6 @@ "permanentlyDeletedItem": { "message": "영구적으로 삭제된 항목" }, - "restoreItem": { - "message": "항목 복원" - }, - "restoreItemConfirmation": { - "message": "정말 이 항목을 복원하시겠습니까?" - }, "restoredItem": { "message": "복원된 항목" }, @@ -2112,8 +2109,8 @@ "logInWithAnotherDevice": { "message": "다른 기기로 로그인" }, - "logInInitiated": { - "message": "Log in initiated" + "loginInitiated": { + "message": "Login initiated" }, "notificationSentDevice": { "message": "기기에 알림이 전송되었습니다." @@ -2252,21 +2249,171 @@ "windowsBiometricUpdateWarningTitle": { "message": "Recommended Settings Update" }, + "deviceApprovalRequired": { + "message": "Device approval required. Select an approval option below:" + }, + "rememberThisDevice": { + "message": "Remember this device" + }, + "uncheckIfPublicDevice": { + "message": "Uncheck if using a public device" + }, + "approveFromYourOtherDevice": { + "message": "Approve from your other device" + }, + "requestAdminApproval": { + "message": "Request admin approval" + }, + "approveWithMasterPassword": { + "message": "Approve with master password" + }, "region": { "message": "Region" }, + "ssoIdentifierRequired": { + "message": "Organization SSO identifier is required." + }, "eu": { "message": "EU", "description": "European Union" }, - "us": { - "message": "US", - "description": "United States" + "loggingInOn": { + "message": "Logging in on" + }, + "usDomain": { + "message": "bitwarden.com" + }, + "euDomain": { + "message": "bitwarden.eu" }, "selfHosted": { "message": "Self-hosted" }, "accessDenied": { "message": "Access denied. You do not have permission to view this page." + }, + "accountSuccessfullyCreated": { + "message": "Account successfully created!" + }, + "adminApprovalRequested": { + "message": "Admin approval requested" + }, + "adminApprovalRequestSentToAdmins": { + "message": "Your request has been sent to your admin." + }, + "youWillBeNotifiedOnceApproved": { + "message": "You will be notified once approved." + }, + "troubleLoggingIn": { + "message": "Trouble logging in?" + }, + "loginApproved": { + "message": "Login approved" + }, + "userEmailMissing": { + "message": "User email missing" + }, + "deviceTrusted": { + "message": "Device trusted" + }, + "inputRequired": { + "message": "Input is required." + }, + "required": { + "message": "required" + }, + "search": { + "message": "Search" + }, + "inputMinLength": { + "message": "Input must be at least $COUNT$ characters long.", + "placeholders": { + "count": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxLength": { + "message": "Input must not exceed $COUNT$ characters in length.", + "placeholders": { + "count": { + "content": "$1", + "example": "20" + } + } + }, + "inputForbiddenCharacters": { + "message": "The following characters are not allowed: $CHARACTERS$", + "placeholders": { + "characters": { + "content": "$1", + "example": "@, #, $, %" + } + } + }, + "inputMinValue": { + "message": "Input value must be at least $MIN$.", + "placeholders": { + "min": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxValue": { + "message": "Input value must not exceed $MAX$.", + "placeholders": { + "max": { + "content": "$1", + "example": "100" + } + } + }, + "multipleInputEmails": { + "message": "1 or more emails are invalid" + }, + "inputTrimValidator": { + "message": "Input must not contain only whitespace.", + "description": "Notification to inform the user that a form's input can't contain only whitespace." + }, + "inputEmail": { + "message": "Input is not an email address." + }, + "fieldsNeedAttention": { + "message": "$COUNT$ field(s) above need your attention.", + "placeholders": { + "count": { + "content": "$1", + "example": "4" + } + } + }, + "selectPlaceholder": { + "message": "-- Select --" + }, + "multiSelectPlaceholder": { + "message": "-- Type to filter --" + }, + "multiSelectLoading": { + "message": "Retrieving options..." + }, + "multiSelectNotFound": { + "message": "No items found" + }, + "multiSelectClearAll": { + "message": "Clear all" + }, + "plusNMore": { + "message": "+ $QUANTITY$ more", + "placeholders": { + "quantity": { + "content": "$1", + "example": "5" + } + } + }, + "submenu": { + "message": "Submenu" } } diff --git a/apps/desktop/src/locales/lt/messages.json b/apps/desktop/src/locales/lt/messages.json new file mode 100644 index 00000000000..38e81a83bfd --- /dev/null +++ b/apps/desktop/src/locales/lt/messages.json @@ -0,0 +1,2419 @@ +{ + "bitwarden": { + "message": "Bitwarden" + }, + "filters": { + "message": "Filters" + }, + "allItems": { + "message": "All items" + }, + "favorites": { + "message": "Favorites" + }, + "types": { + "message": "Types" + }, + "typeLogin": { + "message": "Login" + }, + "typeCard": { + "message": "Card" + }, + "typeIdentity": { + "message": "Identity" + }, + "typeSecureNote": { + "message": "Secure note" + }, + "folders": { + "message": "Folders" + }, + "collections": { + "message": "Collections" + }, + "searchVault": { + "message": "Search vault" + }, + "addItem": { + "message": "Add item" + }, + "shared": { + "message": "Shared" + }, + "share": { + "message": "Share" + }, + "moveToOrganization": { + "message": "Move to organization" + }, + "movedItemToOrg": { + "message": "$ITEMNAME$ moved to $ORGNAME$", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + }, + "orgname": { + "content": "$2", + "example": "Company Name" + } + } + }, + "moveToOrgDesc": { + "message": "Choose an organization that you wish to move this item to. Moving to an organization transfers ownership of the item to that organization. You will no longer be the direct owner of this item once it has been moved." + }, + "attachments": { + "message": "Attachments" + }, + "viewItem": { + "message": "View item" + }, + "name": { + "message": "Name" + }, + "uri": { + "message": "URI" + }, + "uriPosition": { + "message": "URI $POSITION$", + "description": "A listing of URIs. Ex: URI 1, URI 2, URI 3, etc.", + "placeholders": { + "position": { + "content": "$1", + "example": "2" + } + } + }, + "newUri": { + "message": "New URI" + }, + "username": { + "message": "Username" + }, + "password": { + "message": "Password" + }, + "passphrase": { + "message": "Passphrase" + }, + "editItem": { + "message": "Edit item" + }, + "emailAddress": { + "message": "Email address" + }, + "verificationCodeTotp": { + "message": "Verification code (TOTP)" + }, + "website": { + "message": "Website" + }, + "notes": { + "message": "Notes" + }, + "customFields": { + "message": "Custom fields" + }, + "launch": { + "message": "Launch" + }, + "copyValue": { + "message": "Copy value", + "description": "Copy value to clipboard" + }, + "minimizeOnCopyToClipboard": { + "message": "Minimize when copying to clipboard" + }, + "minimizeOnCopyToClipboardDesc": { + "message": "Minimize application when copying an item's data to the clipboard." + }, + "toggleVisibility": { + "message": "Toggle visibility" + }, + "toggleCollapse": { + "message": "Toggle collapse", + "description": "Toggling an expand/collapse state." + }, + "cardholderName": { + "message": "Cardholder name" + }, + "number": { + "message": "Number" + }, + "brand": { + "message": "Brand" + }, + "expiration": { + "message": "Expiration" + }, + "securityCode": { + "message": "Security code" + }, + "identityName": { + "message": "Identity name" + }, + "company": { + "message": "Company" + }, + "ssn": { + "message": "Social Security number" + }, + "passportNumber": { + "message": "Passport number" + }, + "licenseNumber": { + "message": "License number" + }, + "email": { + "message": "Email" + }, + "phone": { + "message": "Phone" + }, + "address": { + "message": "Address" + }, + "premiumRequired": { + "message": "Premium required" + }, + "premiumRequiredDesc": { + "message": "A Premium membership is required to use this feature." + }, + "errorOccurred": { + "message": "An error has occurred." + }, + "error": { + "message": "Error" + }, + "january": { + "message": "January" + }, + "february": { + "message": "February" + }, + "march": { + "message": "March" + }, + "april": { + "message": "April" + }, + "may": { + "message": "May" + }, + "june": { + "message": "June" + }, + "july": { + "message": "July" + }, + "august": { + "message": "August" + }, + "september": { + "message": "September" + }, + "october": { + "message": "October" + }, + "november": { + "message": "November" + }, + "december": { + "message": "December" + }, + "ex": { + "message": "ex.", + "description": "Short abbreviation for 'example'." + }, + "title": { + "message": "Title" + }, + "mr": { + "message": "Mr" + }, + "mrs": { + "message": "Mrs" + }, + "ms": { + "message": "Ms" + }, + "mx": { + "message": "Mx" + }, + "dr": { + "message": "Dr" + }, + "expirationMonth": { + "message": "Expiration month" + }, + "expirationYear": { + "message": "Expiration year" + }, + "select": { + "message": "Select" + }, + "other": { + "message": "Other" + }, + "generatePassword": { + "message": "Generate password" + }, + "type": { + "message": "Type" + }, + "firstName": { + "message": "First name" + }, + "middleName": { + "message": "Middle name" + }, + "lastName": { + "message": "Last name" + }, + "fullName": { + "message": "Full name" + }, + "address1": { + "message": "Address 1" + }, + "address2": { + "message": "Address 2" + }, + "address3": { + "message": "Address 3" + }, + "cityTown": { + "message": "City / Town" + }, + "stateProvince": { + "message": "State / Province" + }, + "zipPostalCode": { + "message": "Zip / Postal code" + }, + "country": { + "message": "Country" + }, + "save": { + "message": "Save" + }, + "cancel": { + "message": "Cancel" + }, + "delete": { + "message": "Delete" + }, + "favorite": { + "message": "Favorite" + }, + "edit": { + "message": "Edit" + }, + "authenticatorKeyTotp": { + "message": "Authenticator key (TOTP)" + }, + "folder": { + "message": "Folder" + }, + "newCustomField": { + "message": "New custom field" + }, + "value": { + "message": "Value" + }, + "dragToSort": { + "message": "Drag to sort" + }, + "cfTypeText": { + "message": "Text" + }, + "cfTypeHidden": { + "message": "Hidden" + }, + "cfTypeBoolean": { + "message": "Boolean" + }, + "cfTypeLinked": { + "message": "Linked", + "description": "This describes a field that is 'linked' (related) to another field." + }, + "linkedValue": { + "message": "Linked value", + "description": "This describes a value that is 'linked' (related) to another value." + }, + "remove": { + "message": "Remove" + }, + "nameRequired": { + "message": "Name is required." + }, + "addedItem": { + "message": "Item added" + }, + "editedItem": { + "message": "Item saved" + }, + "deleteItem": { + "message": "Delete item" + }, + "deleteFolder": { + "message": "Delete folder" + }, + "deleteAttachment": { + "message": "Delete attachment" + }, + "deleteItemConfirmation": { + "message": "Do you really want to send to the trash?" + }, + "deletedItem": { + "message": "Item sent to trash" + }, + "overwritePasswordConfirmation": { + "message": "Are you sure you want to overwrite the current password?" + }, + "overwriteUsername": { + "message": "Overwrite username" + }, + "overwriteUsernameConfirmation": { + "message": "Are you sure you want to overwrite the current username?" + }, + "noneFolder": { + "message": "No folder", + "description": "This is the folder for uncategorized items" + }, + "addFolder": { + "message": "Add folder" + }, + "editFolder": { + "message": "Edit folder" + }, + "regeneratePassword": { + "message": "Regenerate password" + }, + "copyPassword": { + "message": "Copy password" + }, + "copyUri": { + "message": "Copy URI" + }, + "copyVerificationCodeTotp": { + "message": "Copy verification code (TOTP)" + }, + "length": { + "message": "Length" + }, + "uppercase": { + "message": "Uppercase (A-Z)" + }, + "lowercase": { + "message": "Lowercase (a-z)" + }, + "numbers": { + "message": "Numbers (0-9)" + }, + "specialCharacters": { + "message": "Special characters (!@#$%^&*)" + }, + "numWords": { + "message": "Number of words" + }, + "wordSeparator": { + "message": "Word separator" + }, + "capitalize": { + "message": "Capitalize", + "description": "Make the first letter of a word uppercase." + }, + "includeNumber": { + "message": "Include number" + }, + "close": { + "message": "Close" + }, + "minNumbers": { + "message": "Minimum numbers" + }, + "minSpecial": { + "message": "Minimum special", + "description": "Minimum Special Characters" + }, + "ambiguous": { + "message": "Avoid ambiguous characters" + }, + "searchCollection": { + "message": "Search collection" + }, + "searchFolder": { + "message": "Search folder" + }, + "searchFavorites": { + "message": "Search favorites" + }, + "searchType": { + "message": "Search type", + "description": "Search item type" + }, + "newAttachment": { + "message": "Add new attachment" + }, + "deletedAttachment": { + "message": "Attachment deleted" + }, + "deleteAttachmentConfirmation": { + "message": "Are you sure you want to delete this attachment?" + }, + "attachmentSaved": { + "message": "Attachment saved" + }, + "file": { + "message": "File" + }, + "selectFile": { + "message": "Select a file" + }, + "maxFileSize": { + "message": "Maximum file size is 500 MB." + }, + "updateKey": { + "message": "You cannot use this feature until you update your encryption key." + }, + "editedFolder": { + "message": "Folder saved" + }, + "addedFolder": { + "message": "Folder added" + }, + "deleteFolderConfirmation": { + "message": "Are you sure you want to delete this folder?" + }, + "deletedFolder": { + "message": "Folder deleted" + }, + "loginOrCreateNewAccount": { + "message": "Log in or create a new account to access your secure vault." + }, + "createAccount": { + "message": "Create account" + }, + "logIn": { + "message": "Log in" + }, + "submit": { + "message": "Submit" + }, + "masterPass": { + "message": "Master password" + }, + "masterPassDesc": { + "message": "The master password is the password you use to access your vault. It is very important that you do not forget your master password. There is no way to recover the password in the event that you forget it." + }, + "masterPassHintDesc": { + "message": "A master password hint can help you remember your password if you forget it." + }, + "reTypeMasterPass": { + "message": "Re-type master password" + }, + "masterPassHint": { + "message": "Master password hint (optional)" + }, + "settings": { + "message": "Settings" + }, + "passwordHint": { + "message": "Password hint" + }, + "enterEmailToGetHint": { + "message": "Enter your account email address to receive your master password hint." + }, + "getMasterPasswordHint": { + "message": "Get master password hint" + }, + "emailRequired": { + "message": "Email address is required." + }, + "invalidEmail": { + "message": "Invalid email address." + }, + "masterPasswordRequired": { + "message": "Master password is required." + }, + "confirmMasterPasswordRequired": { + "message": "Master password retype is required." + }, + "masterPasswordMinlength": { + "message": "Master password must be at least $VALUE$ characters long.", + "description": "The Master Password must be at least a specific number of characters long.", + "placeholders": { + "value": { + "content": "$1", + "example": "8" + } + } + }, + "masterPassDoesntMatch": { + "message": "Master password confirmation does not match." + }, + "newAccountCreated": { + "message": "Your new account has been created! You may now log in." + }, + "masterPassSent": { + "message": "We've sent you an email with your master password hint." + }, + "unexpectedError": { + "message": "An unexpected error has occurred." + }, + "itemInformation": { + "message": "Item information" + }, + "noItemsInList": { + "message": "There are no items to list." + }, + "sendVerificationCode": { + "message": "Send a verification code to your email" + }, + "sendCode": { + "message": "Send code" + }, + "codeSent": { + "message": "Code sent" + }, + "verificationCode": { + "message": "Verification code" + }, + "confirmIdentity": { + "message": "Confirm your identity to continue." + }, + "verificationCodeRequired": { + "message": "Verification code is required." + }, + "invalidVerificationCode": { + "message": "Invalid verification code" + }, + "continue": { + "message": "Continue" + }, + "enterVerificationCodeApp": { + "message": "Enter the 6 digit verification code from your authenticator app." + }, + "enterVerificationCodeEmail": { + "message": "Enter the 6 digit verification code that was emailed to $EMAIL$.", + "placeholders": { + "email": { + "content": "$1", + "example": "example@gmail.com" + } + } + }, + "verificationCodeEmailSent": { + "message": "Verification email sent to $EMAIL$.", + "placeholders": { + "email": { + "content": "$1", + "example": "example@gmail.com" + } + } + }, + "rememberMe": { + "message": "Remember me" + }, + "sendVerificationCodeEmailAgain": { + "message": "Send verification code email again" + }, + "useAnotherTwoStepMethod": { + "message": "Use another two-step login method" + }, + "insertYubiKey": { + "message": "Insert your YubiKey into your computer's USB port, then touch its button." + }, + "insertU2f": { + "message": "Insert your security key into your computer's USB port. If it has a button, touch it." + }, + "recoveryCodeDesc": { + "message": "Lost access to all of your two-factor providers? Use your recovery code to turn off all two-factor providers on your account." + }, + "recoveryCodeTitle": { + "message": "Recovery code" + }, + "authenticatorAppTitle": { + "message": "Authenticator app" + }, + "authenticatorAppDesc": { + "message": "Use an authenticator app (such as Authy or Google Authenticator) to generate time-based verification codes.", + "description": "'Authy' and 'Google Authenticator' are product names and should not be translated." + }, + "yubiKeyTitle": { + "message": "YubiKey OTP security key" + }, + "yubiKeyDesc": { + "message": "Use a YubiKey to access your account. Works with YubiKey 4, 4 Nano, 4C, and NEO devices." + }, + "duoDesc": { + "message": "Verify with Duo Security using the Duo Mobile app, SMS, phone call, or U2F security key.", + "description": "'Duo Security' and 'Duo Mobile' are product names and should not be translated." + }, + "duoOrganizationDesc": { + "message": "Verify with Duo Security for your organization using the Duo Mobile app, SMS, phone call, or U2F security key.", + "description": "'Duo Security' and 'Duo Mobile' are product names and should not be translated." + }, + "webAuthnTitle": { + "message": "FIDO2 WebAuthn" + }, + "webAuthnDesc": { + "message": "Use any WebAuthn compatible security key to access your account." + }, + "emailTitle": { + "message": "Email" + }, + "emailDesc": { + "message": "Verification codes will be emailed to you." + }, + "loginUnavailable": { + "message": "Login unavailable" + }, + "noTwoStepProviders": { + "message": "This account has two-step login set up, however, none of the configured two-step providers are supported by this device." + }, + "noTwoStepProviders2": { + "message": "Please add additional providers that are better supported across devices (such as an authenticator app)." + }, + "twoStepOptions": { + "message": "Two-step login options" + }, + "selfHostedEnvironment": { + "message": "Self-hosted environment" + }, + "selfHostedEnvironmentFooter": { + "message": "Specify the base URL of your on-premises hosted Bitwarden installation." + }, + "customEnvironment": { + "message": "Custom environment" + }, + "customEnvironmentFooter": { + "message": "For advanced users. You can specify the base URL of each service independently." + }, + "baseUrl": { + "message": "Server URL" + }, + "apiUrl": { + "message": "API server URL" + }, + "webVaultUrl": { + "message": "Web vault server URL" + }, + "identityUrl": { + "message": "Identity server URL" + }, + "notificationsUrl": { + "message": "Notifications server URL" + }, + "iconsUrl": { + "message": "Icons server URL" + }, + "environmentSaved": { + "message": "Environment URLs saved" + }, + "ok": { + "message": "Ok" + }, + "yes": { + "message": "Yes" + }, + "no": { + "message": "No" + }, + "overwritePassword": { + "message": "Overwrite password" + }, + "learnMore": { + "message": "Learn more" + }, + "featureUnavailable": { + "message": "Feature unavailable" + }, + "loggedOut": { + "message": "Logged out" + }, + "loginExpired": { + "message": "Your login session has expired." + }, + "logOutConfirmation": { + "message": "Are you sure you want to log out?" + }, + "logOut": { + "message": "Log out" + }, + "addNewLogin": { + "message": "New login" + }, + "addNewItem": { + "message": "New item" + }, + "addNewFolder": { + "message": "New folder" + }, + "view": { + "message": "View" + }, + "account": { + "message": "Account" + }, + "loading": { + "message": "Loading..." + }, + "lockVault": { + "message": "Lock vault" + }, + "passwordGenerator": { + "message": "Password generator" + }, + "contactUs": { + "message": "Contact us" + }, + "helpAndFeedback": { + "message": "Help and feedback" + }, + "getHelp": { + "message": "Get help" + }, + "fileBugReport": { + "message": "File a bug report" + }, + "blog": { + "message": "Blog" + }, + "followUs": { + "message": "Follow us" + }, + "syncVault": { + "message": "Sync vault" + }, + "changeMasterPass": { + "message": "Change master password" + }, + "changeMasterPasswordConfirmation": { + "message": "You can change your master password on the bitwarden.com web vault. Do you want to visit the website now?" + }, + "fingerprintPhrase": { + "message": "Fingerprint phrase", + "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": "Your account's fingerprint phrase", + "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." + }, + "goToWebVault": { + "message": "Go to web vault" + }, + "getMobileApp": { + "message": "Get mobile app" + }, + "getBrowserExtension": { + "message": "Get browser extension" + }, + "syncingComplete": { + "message": "Syncing complete" + }, + "syncingFailed": { + "message": "Syncing failed" + }, + "yourVaultIsLocked": { + "message": "Your vault is locked. Verify your identity to continue." + }, + "unlock": { + "message": "Unlock" + }, + "loggedInAsOn": { + "message": "Logged in as $EMAIL$ on $HOSTNAME$.", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + }, + "hostname": { + "content": "$2", + "example": "bitwarden.com" + } + } + }, + "invalidMasterPassword": { + "message": "Invalid master password" + }, + "twoStepLoginConfirmation": { + "message": "Two-step login makes your account more secure by requiring you to verify your login with another device such as a security key, authenticator app, SMS, phone call, or email. Two-step login can be set up on the bitwarden.com web vault. Do you want to visit the website now?" + }, + "twoStepLogin": { + "message": "Two-step login" + }, + "vaultTimeout": { + "message": "Vault timeout" + }, + "vaultTimeoutDesc": { + "message": "Choose when your vault will take the vault timeout action." + }, + "immediately": { + "message": "Immediately" + }, + "tenSeconds": { + "message": "10 seconds" + }, + "twentySeconds": { + "message": "20 seconds" + }, + "thirtySeconds": { + "message": "30 seconds" + }, + "oneMinute": { + "message": "1 minute" + }, + "twoMinutes": { + "message": "2 minutes" + }, + "fiveMinutes": { + "message": "5 minutes" + }, + "fifteenMinutes": { + "message": "15 minutes" + }, + "thirtyMinutes": { + "message": "30 minutes" + }, + "oneHour": { + "message": "1 hour" + }, + "fourHours": { + "message": "4 hours" + }, + "onIdle": { + "message": "On system idle" + }, + "onSleep": { + "message": "On system sleep" + }, + "onLocked": { + "message": "On system lock" + }, + "onRestart": { + "message": "On restart" + }, + "never": { + "message": "Never" + }, + "security": { + "message": "Security" + }, + "clearClipboard": { + "message": "Clear clipboard", + "description": "Clipboard is the operating system thing where you copy/paste data to on your device." + }, + "clearClipboardDesc": { + "message": "Automatically clear copied values from your clipboard.", + "description": "Clipboard is the operating system thing where you copy/paste data to on your device." + }, + "enableFavicon": { + "message": "Show website icons" + }, + "faviconDesc": { + "message": "Show a recognizable image next to each login." + }, + "enableMinToTray": { + "message": "Minimize to tray icon" + }, + "enableMinToTrayDesc": { + "message": "When minimizing the window, show an icon in the system tray instead." + }, + "enableMinToMenuBar": { + "message": "Minimize to menu bar" + }, + "enableMinToMenuBarDesc": { + "message": "When minimizing the window, show an icon in the menu bar instead." + }, + "enableCloseToTray": { + "message": "Close to tray icon" + }, + "enableCloseToTrayDesc": { + "message": "When closing the window, show an icon in the system tray instead." + }, + "enableCloseToMenuBar": { + "message": "Close to menu bar" + }, + "enableCloseToMenuBarDesc": { + "message": "When closing the window, show an icon in the menu bar instead." + }, + "enableTray": { + "message": "Show tray icon" + }, + "enableTrayDesc": { + "message": "Always show an icon in the system tray." + }, + "startToTray": { + "message": "Start to tray icon" + }, + "startToTrayDesc": { + "message": "When the application is first started, only show an icon in the system tray." + }, + "startToMenuBar": { + "message": "Start to menu bar" + }, + "startToMenuBarDesc": { + "message": "When the application is first started, only show an icon in the menu bar." + }, + "openAtLogin": { + "message": "Start automatically on login" + }, + "openAtLoginDesc": { + "message": "Start the Bitwarden desktop application automatically on login." + }, + "alwaysShowDock": { + "message": "Always show in the Dock" + }, + "alwaysShowDockDesc": { + "message": "Show the Bitwarden icon in the Dock even when minimized to the menu bar." + }, + "confirmTrayTitle": { + "message": "Confirm hiding tray" + }, + "confirmTrayDesc": { + "message": "Turning off this setting will also turn off all other tray related settings." + }, + "language": { + "message": "Language" + }, + "languageDesc": { + "message": "Change the language used by the application. Restart is required." + }, + "theme": { + "message": "Theme" + }, + "themeDesc": { + "message": "Change the application's color theme." + }, + "dark": { + "message": "Dark", + "description": "Dark color" + }, + "light": { + "message": "Light", + "description": "Light color" + }, + "copy": { + "message": "Copy", + "description": "Copy to clipboard" + }, + "checkForUpdates": { + "message": "Check for updates…" + }, + "version": { + "message": "Version $VERSION_NUM$", + "placeholders": { + "version_num": { + "content": "$1", + "example": "1.2.3" + } + } + }, + "restartToUpdate": { + "message": "Restart to update" + }, + "restartToUpdateDesc": { + "message": "Version $VERSION_NUM$ is ready to install. You must restart the application to complete the installation. Do you want to restart and update now?", + "placeholders": { + "version_num": { + "content": "$1", + "example": "1.2.3" + } + } + }, + "updateAvailable": { + "message": "Update available" + }, + "updateAvailableDesc": { + "message": "An update was found. Do you want to download it now?" + }, + "restart": { + "message": "Restart" + }, + "later": { + "message": "Later" + }, + "noUpdatesAvailable": { + "message": "No updates are currently available. You are using the latest version." + }, + "updateError": { + "message": "Update error" + }, + "unknown": { + "message": "Unknown" + }, + "copyUsername": { + "message": "Copy username" + }, + "copyNumber": { + "message": "Copy number", + "description": "Copy credit card number" + }, + "copySecurityCode": { + "message": "Copy security code", + "description": "Copy credit card security code (CVV)" + }, + "premiumMembership": { + "message": "Premium membership" + }, + "premiumManage": { + "message": "Manage membership" + }, + "premiumManageAlert": { + "message": "You can manage your membership on the bitwarden.com web vault. Do you want to visit the website now?" + }, + "premiumRefresh": { + "message": "Refresh membership" + }, + "premiumNotCurrentMember": { + "message": "You are not currently a Premium member." + }, + "premiumSignUpAndGet": { + "message": "Sign up for a Premium membership and get:" + }, + "premiumSignUpStorage": { + "message": "1 GB encrypted storage for file attachments." + }, + "premiumSignUpTwoStepOptions": { + "message": "Proprietary two-step login options such as YubiKey and Duo." + }, + "premiumSignUpReports": { + "message": "Password hygiene, account health, and data breach reports to keep your vault safe." + }, + "premiumSignUpTotp": { + "message": "TOTP verification code (2FA) generator for logins in your vault." + }, + "premiumSignUpSupport": { + "message": "Priority customer support." + }, + "premiumSignUpFuture": { + "message": "All future premium features. More coming soon!" + }, + "premiumPurchase": { + "message": "Purchase Premium" + }, + "premiumPurchaseAlert": { + "message": "You can purchase premium membership on the bitwarden.com web vault. Do you want to visit the website now?" + }, + "premiumCurrentMember": { + "message": "You are a premium member!" + }, + "premiumCurrentMemberThanks": { + "message": "Thank you for supporting Bitwarden." + }, + "premiumPrice": { + "message": "All for just $PRICE$ /year!", + "placeholders": { + "price": { + "content": "$1", + "example": "$10" + } + } + }, + "refreshComplete": { + "message": "Refresh complete" + }, + "passwordHistory": { + "message": "Password history" + }, + "clear": { + "message": "Clear", + "description": "To clear something out. example: To clear browser history." + }, + "noPasswordsInList": { + "message": "There are no passwords to list." + }, + "undo": { + "message": "Undo" + }, + "redo": { + "message": "Redo" + }, + "cut": { + "message": "Cut", + "description": "Cut to clipboard" + }, + "paste": { + "message": "Paste", + "description": "Paste from clipboard" + }, + "selectAll": { + "message": "Select all" + }, + "zoomIn": { + "message": "Zoom in" + }, + "zoomOut": { + "message": "Zoom out" + }, + "resetZoom": { + "message": "Reset zoom" + }, + "toggleFullScreen": { + "message": "Toggle full screen" + }, + "reload": { + "message": "Reload" + }, + "toggleDevTools": { + "message": "Toggle developer tools" + }, + "minimize": { + "message": "Minimize", + "description": "Minimize window" + }, + "zoom": { + "message": "Zoom" + }, + "bringAllToFront": { + "message": "Bring all to front", + "description": "Bring all windows to front (foreground)" + }, + "aboutBitwarden": { + "message": "About Bitwarden" + }, + "services": { + "message": "Services" + }, + "hideBitwarden": { + "message": "Hide Bitwarden" + }, + "hideOthers": { + "message": "Hide others" + }, + "showAll": { + "message": "Show all" + }, + "quitBitwarden": { + "message": "Quit Bitwarden" + }, + "valueCopied": { + "message": "$VALUE$ copied", + "description": "Value has been copied to the clipboard.", + "placeholders": { + "value": { + "content": "$1", + "example": "Password" + } + } + }, + "help": { + "message": "Help" + }, + "window": { + "message": "Window" + }, + "checkPassword": { + "message": "Check if password has been exposed." + }, + "passwordExposed": { + "message": "This password has been exposed $VALUE$ time(s) in data breaches. You should change it.", + "placeholders": { + "value": { + "content": "$1", + "example": "2" + } + } + }, + "passwordSafe": { + "message": "This password was not found in any known data breaches. It should be safe to use." + }, + "baseDomain": { + "message": "Base domain", + "description": "Domain name. Ex. website.com" + }, + "domainName": { + "message": "Domain name", + "description": "Domain name. Ex. website.com" + }, + "host": { + "message": "Host", + "description": "A URL's host value. For example, the host of https://sub.domain.com:443 is 'sub.domain.com:443'." + }, + "exact": { + "message": "Exact" + }, + "startsWith": { + "message": "Starts with" + }, + "regEx": { + "message": "Regular expression", + "description": "A programming term, also known as 'RegEx'." + }, + "matchDetection": { + "message": "Match detection", + "description": "URI match detection for auto-fill." + }, + "defaultMatchDetection": { + "message": "Default match detection", + "description": "Default URI match detection for auto-fill." + }, + "toggleOptions": { + "message": "Toggle options" + }, + "organization": { + "message": "Organization", + "description": "An entity of multiple related people (ex. a team or business organization)." + }, + "default": { + "message": "Default" + }, + "exit": { + "message": "Exit" + }, + "showHide": { + "message": "Show / Hide", + "description": "Text for a button that toggles the visibility of the window. Shows the window when it is hidden or hides the window if it is currently open." + }, + "hideToTray": { + "message": "Hide to tray" + }, + "alwaysOnTop": { + "message": "Always on top", + "description": "Application window should always stay on top of other windows" + }, + "dateUpdated": { + "message": "Updated", + "description": "ex. Date this item was updated" + }, + "dateCreated": { + "message": "Created", + "description": "ex. Date this item was created" + }, + "datePasswordUpdated": { + "message": "Password updated", + "description": "ex. Date this password was updated" + }, + "exportVault": { + "message": "Export vault" + }, + "fileFormat": { + "message": "File format" + }, + "hCaptchaUrl": { + "message": "hCaptcha Url", + "description": "hCaptcha is the name of a website, should not be translated" + }, + "loadAccessibilityCookie": { + "message": "Load accessibility cookie" + }, + "registerAccessibilityUser": { + "message": "Register as an accessibility user at", + "description": "ex. Register as an accessibility user at hcaptcha.com" + }, + "copyPasteLink": { + "message": "Copy and paste the link sent to your email below" + }, + "enterhCaptchaUrl": { + "message": "Enter URL to load accessibility cookie for hCaptcha", + "description": "hCaptcha is the name of a website, should not be translated" + }, + "hCaptchaUrlRequired": { + "message": "hCaptcha Url is required", + "description": "hCaptcha is the name of a website, should not be translated" + }, + "invalidUrl": { + "message": "Invalid Url" + }, + "done": { + "message": "Done" + }, + "accessibilityCookieSaved": { + "message": "Accessibility cookie saved!" + }, + "noAccessibilityCookieSaved": { + "message": "No accessibility cookie saved" + }, + "warning": { + "message": "WARNING", + "description": "WARNING (should stay in capitalized letters if the language permits)" + }, + "confirmVaultExport": { + "message": "Confirm vault export" + }, + "exportWarningDesc": { + "message": "This export contains your vault data in an unencrypted format. You should not store or send the exported file over unsecure channels (such as email). Delete it immediately after you are done using it." + }, + "encExportKeyWarningDesc": { + "message": "This export encrypts your data using your account's encryption key. If you ever rotate your account's encryption key you should export again since you will not be able to decrypt this export file." + }, + "encExportAccountWarningDesc": { + "message": "Account encryption keys are unique to each Bitwarden user account, so you can't import an encrypted export into a different account." + }, + "noOrganizationsList": { + "message": "You do not belong to any organizations. Organizations allow you to securely share items with other users." + }, + "noCollectionsInList": { + "message": "There are no collections to list." + }, + "ownership": { + "message": "Ownership" + }, + "whoOwnsThisItem": { + "message": "Who owns this item?" + }, + "strong": { + "message": "Strong", + "description": "ex. A strong password. Scale: Weak -> Good -> Strong" + }, + "good": { + "message": "Good", + "description": "ex. A good password. Scale: Weak -> Good -> Strong" + }, + "weak": { + "message": "Weak", + "description": "ex. A weak password. Scale: Weak -> Good -> Strong" + }, + "weakMasterPassword": { + "message": "Weak master password" + }, + "weakMasterPasswordDesc": { + "message": "The master password you have chosen is weak. You should use a strong master password (or a passphrase) to properly protect your Bitwarden account. Are you sure you want to use this master password?" + }, + "pin": { + "message": "PIN", + "description": "PIN code. Ex. The short code (often numeric) that you use to unlock a device." + }, + "unlockWithPin": { + "message": "Unlock with PIN" + }, + "setYourPinCode": { + "message": "Set your PIN code for unlocking Bitwarden. Your PIN settings will be reset if you ever fully log out of the application." + }, + "pinRequired": { + "message": "PIN code is required." + }, + "invalidPin": { + "message": "Invalid PIN code." + }, + "unlockWithWindowsHello": { + "message": "Unlock with Windows Hello" + }, + "additionalWindowsHelloSettings": { + "message": "Additional Windows Hello settings" + }, + "windowsHelloConsentMessage": { + "message": "Verify for Bitwarden." + }, + "unlockWithTouchId": { + "message": "Unlock with Touch ID" + }, + "additionalTouchIdSettings": { + "message": "Additional Touch ID settings" + }, + "touchIdConsentMessage": { + "message": "unlock your vault" + }, + "autoPromptWindowsHello": { + "message": "Ask for Windows Hello on app start" + }, + "autoPromptTouchId": { + "message": "Ask for Touch ID on app start" + }, + "requirePasswordOnStart": { + "message": "Require password or PIN on app start" + }, + "recommendedForSecurity": { + "message": "Recommended for security." + }, + "lockWithMasterPassOnRestart": { + "message": "Lock with master password on restart" + }, + "deleteAccount": { + "message": "Delete account" + }, + "deleteAccountDesc": { + "message": "Proceed below to delete your account and all vault data." + }, + "deleteAccountWarning": { + "message": "Deleting your account is permanent. It cannot be undone." + }, + "accountDeleted": { + "message": "Account deleted" + }, + "accountDeletedDesc": { + "message": "Your account has been closed and all associated data has been deleted." + }, + "preferences": { + "message": "Preferences" + }, + "enableMenuBar": { + "message": "Show menu bar icon" + }, + "enableMenuBarDesc": { + "message": "Always show an icon in the menu bar." + }, + "hideToMenuBar": { + "message": "Hide to menu bar" + }, + "selectOneCollection": { + "message": "You must select at least one collection." + }, + "premiumUpdated": { + "message": "You've upgraded to Premium." + }, + "restore": { + "message": "Restore" + }, + "premiumManageAlertAppStore": { + "message": "You can manage your subscription from the App Store. Do you want to visit the App Store now?" + }, + "legal": { + "message": "Legal", + "description": "Noun. As in 'legal documents', like our terms of service and privacy policy." + }, + "termsOfService": { + "message": "Terms of Service" + }, + "privacyPolicy": { + "message": "Privacy Policy" + }, + "unsavedChangesConfirmation": { + "message": "Are you sure you want to leave? If you leave now then your current information will not be saved." + }, + "unsavedChangesTitle": { + "message": "Unsaved changes" + }, + "clone": { + "message": "Clone" + }, + "passwordGeneratorPolicyInEffect": { + "message": "One or more organization policies are affecting your generator settings." + }, + "vaultTimeoutAction": { + "message": "Vault timeout action" + }, + "vaultTimeoutActionLockDesc": { + "message": "Master password or other unlock method is required to access your vault again." + }, + "vaultTimeoutActionLogOutDesc": { + "message": "Re-authentication is required to access your vault again." + }, + "unlockMethodNeededToChangeTimeoutActionDesc": { + "message": "Set up an unlock method to change your vault timeout action." + }, + "lock": { + "message": "Lock", + "description": "Verb form: to make secure or inaccesible by" + }, + "trash": { + "message": "Trash", + "description": "Noun: a special folder to hold deleted items" + }, + "searchTrash": { + "message": "Search trash" + }, + "permanentlyDeleteItem": { + "message": "Permanently delete item" + }, + "permanentlyDeleteItemConfirmation": { + "message": "Are you sure you want to permanently delete this item?" + }, + "permanentlyDeletedItem": { + "message": "Item permanently deleted" + }, + "restoredItem": { + "message": "Item restored" + }, + "permanentlyDelete": { + "message": "Permanently delete" + }, + "vaultTimeoutLogOutConfirmation": { + "message": "Logging out will remove all access to your vault and requires online authentication after the timeout period. Are you sure you want to use this setting?" + }, + "vaultTimeoutLogOutConfirmationTitle": { + "message": "Timeout action confirmation" + }, + "enterpriseSingleSignOn": { + "message": "Enterprise single sign-on" + }, + "setMasterPassword": { + "message": "Set master password" + }, + "ssoCompleteRegistration": { + "message": "In order to complete logging in with SSO, please set a master password to access and protect your vault." + }, + "currentMasterPass": { + "message": "Current master password" + }, + "newMasterPass": { + "message": "New master password" + }, + "confirmNewMasterPass": { + "message": "Confirm new master password" + }, + "masterPasswordPolicyInEffect": { + "message": "One or more organization policies require your master password to meet the following requirements:" + }, + "policyInEffectMinComplexity": { + "message": "Minimum complexity score of $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, + "policyInEffectMinLength": { + "message": "Minimum length of $LENGTH$", + "placeholders": { + "length": { + "content": "$1", + "example": "14" + } + } + }, + "policyInEffectUppercase": { + "message": "Contain one or more uppercase characters" + }, + "policyInEffectLowercase": { + "message": "Contain one or more lowercase characters" + }, + "policyInEffectNumbers": { + "message": "Contain one or more numbers" + }, + "policyInEffectSpecial": { + "message": "Contain one or more of the following special characters $CHARS$", + "placeholders": { + "chars": { + "content": "$1", + "example": "!@#$%^&*" + } + } + }, + "masterPasswordPolicyRequirementsNotMet": { + "message": "Your new master password does not meet the policy requirements." + }, + "acceptPolicies": { + "message": "By checking this box you agree to the following:" + }, + "acceptPoliciesRequired": { + "message": "Terms of Service and Privacy Policy have not been acknowledged." + }, + "enableBrowserIntegration": { + "message": "Allow browser integration" + }, + "enableBrowserIntegrationDesc": { + "message": "Used for biometrics in browser." + }, + "enableDuckDuckGoBrowserIntegration": { + "message": "Allow DuckDuckGo browser integration" + }, + "enableDuckDuckGoBrowserIntegrationDesc": { + "message": "Use your Bitwarden vault when browsing with DuckDuckGo." + }, + "browserIntegrationUnsupportedTitle": { + "message": "Browser integration not supported" + }, + "browserIntegrationMasOnlyDesc": { + "message": "Unfortunately browser integration is only supported in the Mac App Store version for now." + }, + "browserIntegrationWindowsStoreDesc": { + "message": "Unfortunately browser integration is currently not supported in the Microsoft Store version." + }, + "browserIntegrationLinuxDesc": { + "message": "Unfortunately browser integration is currently not supported in the linux version." + }, + "enableBrowserIntegrationFingerprint": { + "message": "Require verification for browser integration" + }, + "enableBrowserIntegrationFingerprintDesc": { + "message": "Add an additional layer of security by requiring fingerprint phrase confirmation when establishing a link between your desktop and browser. This requires user action and verification each time a connection is created." + }, + "approve": { + "message": "Approve" + }, + "verifyBrowserTitle": { + "message": "Verify browser connection" + }, + "verifyBrowserDesc": { + "message": "Please ensure the shown fingerprint is identical to the fingerprint showed in the browser extension." + }, + "verifyNativeMessagingConnectionTitle": { + "message": "$APPID$ wants to connect to Bitwarden", + "placeholders": { + "appid": { + "content": "$1", + "example": "My App" + } + } + }, + "verifyNativeMessagingConnectionDesc": { + "message": "Would you like to approve this request?" + }, + "verifyNativeMessagingConnectionWarning": { + "message": "If you did not initiate this request, do not approve it." + }, + "biometricsNotEnabledTitle": { + "message": "Biometrics not set up" + }, + "biometricsNotEnabledDesc": { + "message": "Browser biometrics requires desktop biometrics to be set up in the settings first." + }, + "personalOwnershipSubmitError": { + "message": "Due to an enterprise policy, you are restricted from saving items to your individual vault. Change the ownership option to an organization and choose from available collections." + }, + "hintEqualsPassword": { + "message": "Your password hint cannot be the same as your password." + }, + "personalOwnershipPolicyInEffect": { + "message": "An organization policy is affecting your ownership options." + }, + "allSends": { + "message": "All Sends", + "description": "'Sends' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendTypeFile": { + "message": "File" + }, + "sendTypeText": { + "message": "Text" + }, + "searchSends": { + "message": "Search Sends", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "editSend": { + "message": "Edit Send", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "myVault": { + "message": "My vault" + }, + "text": { + "message": "Text" + }, + "deletionDate": { + "message": "Deletion date" + }, + "deletionDateDesc": { + "message": "The Send will be permanently deleted on the specified date and time.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "expirationDate": { + "message": "Expiration date" + }, + "expirationDateDesc": { + "message": "If set, access to this Send will expire on the specified date and time.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "maxAccessCount": { + "message": "Maximum access count", + "description": "This text will be displayed after a Send has been accessed the maximum amount of times." + }, + "maxAccessCountDesc": { + "message": "If set, users will no longer be able to access this Send once the maximum access count is reached.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "currentAccessCount": { + "message": "Current access count" + }, + "disableSend": { + "message": "Deactivate this Send so that no one can access it.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendPasswordDesc": { + "message": "Optionally require a password for users to access this Send.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendNotesDesc": { + "message": "Private notes about this Send.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendLink": { + "message": "Send link", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendLinkLabel": { + "message": "Send link", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "textHiddenByDefault": { + "message": "When accessing the Send, hide the text by default", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "createdSend": { + "message": "Send added", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "editedSend": { + "message": "Send saved", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "deletedSend": { + "message": "Send deleted", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "newPassword": { + "message": "New password" + }, + "whatTypeOfSend": { + "message": "What type of Send is this?", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "createSend": { + "message": "New Send", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendTextDesc": { + "message": "The text you want to send." + }, + "sendFileDesc": { + "message": "The file you want to send." + }, + "days": { + "message": "$DAYS$ days", + "placeholders": { + "days": { + "content": "$1", + "example": "1" + } + } + }, + "oneDay": { + "message": "1 day" + }, + "custom": { + "message": "Custom" + }, + "deleteSendConfirmation": { + "message": "Are you sure you want to delete this Send?", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "copySendLinkToClipboard": { + "message": "Copy Send link to clipboard", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "copySendLinkOnSave": { + "message": "Copy the link to share this Send to my clipboard upon save." + }, + "sendDisabled": { + "message": "Send removed", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendDisabledWarning": { + "message": "Due to an enterprise policy, you are only able to delete an existing Send.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "copyLink": { + "message": "Copy link" + }, + "disabled": { + "message": "Disabled" + }, + "removePassword": { + "message": "Remove password" + }, + "removedPassword": { + "message": "Password removed" + }, + "removePasswordConfirmation": { + "message": "Are you sure you want to remove the password?" + }, + "maxAccessCountReached": { + "message": "Max access count reached" + }, + "expired": { + "message": "Expired" + }, + "pendingDeletion": { + "message": "Pending deletion" + }, + "webAuthnAuthenticate": { + "message": "Authenticate WebAuthn" + }, + "hideEmail": { + "message": "Hide my email address from recipients." + }, + "sendOptionsPolicyInEffect": { + "message": "One or more organization policies are affecting your Send options." + }, + "emailVerificationRequired": { + "message": "Email verification required" + }, + "emailVerificationRequiredDesc": { + "message": "You must verify your email to use this feature." + }, + "passwordPrompt": { + "message": "Master password re-prompt" + }, + "passwordConfirmation": { + "message": "Master password confirmation" + }, + "passwordConfirmationDesc": { + "message": "This action is protected. To continue, please re-enter your master password to verify your identity." + }, + "updatedMasterPassword": { + "message": "Updated master password" + }, + "updateMasterPassword": { + "message": "Update master password" + }, + "updateMasterPasswordWarning": { + "message": "Your master password was recently changed by an administrator in your organization. In order to access the vault, you must update it now. Proceeding will log you out of your current session, requiring you to log back in. Active sessions on other devices may continue to remain active for up to one hour." + }, + "updateWeakMasterPasswordWarning": { + "message": "Your master password does not meet one or more of your organization policies. In order to access the vault, you must update your master password now. Proceeding will log you out of your current session, requiring you to log back in. Active sessions on other devices may continue to remain active for up to one hour." + }, + "hours": { + "message": "Hours" + }, + "minutes": { + "message": "Minutes" + }, + "vaultTimeoutPolicyInEffect": { + "message": "Your organization policies have set your maximum allowed vault timeout to $HOURS$ hour(s) and $MINUTES$ minute(s).", + "placeholders": { + "hours": { + "content": "$1", + "example": "5" + }, + "minutes": { + "content": "$2", + "example": "5" + } + } + }, + "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$.", + "placeholders": { + "hours": { + "content": "$1", + "example": "5" + }, + "minutes": { + "content": "$2", + "example": "5" + }, + "action": { + "content": "$3", + "example": "Lock" + } + } + }, + "vaultTimeoutActionPolicyInEffect": { + "message": "Your organization policies have set your vault timeout action to $ACTION$.", + "placeholders": { + "action": { + "content": "$1", + "example": "Lock" + } + } + }, + "vaultTimeoutTooLarge": { + "message": "Your vault timeout exceeds the restrictions set by your organization." + }, + "resetPasswordPolicyAutoEnroll": { + "message": "Automatic enrollment" + }, + "resetPasswordAutoEnrollInviteWarning": { + "message": "This organization has an enterprise policy that will automatically enroll you in password reset. Enrollment will allow organization administrators to change your master password." + }, + "vaultExportDisabled": { + "message": "Vault export removed" + }, + "personalVaultExportPolicyInEffect": { + "message": "One or more organization policies prevents you from exporting your personal vault." + }, + "addAccount": { + "message": "Add account" + }, + "removeMasterPassword": { + "message": "Remove master password" + }, + "removedMasterPassword": { + "message": "Master password removed" + }, + "convertOrganizationEncryptionDesc": { + "message": "$ORGANIZATION$ is using SSO with a self-hosted key server. A master password is no longer required to log in for members of this organization.", + "placeholders": { + "organization": { + "content": "$1", + "example": "My Org Name" + } + } + }, + "leaveOrganization": { + "message": "Leave organization" + }, + "leaveOrganizationConfirmation": { + "message": "Are you sure you want to leave this organization?" + }, + "leftOrganization": { + "message": "You have left the organization." + }, + "ssoKeyConnectorError": { + "message": "Key connector error: make sure key connector is available and working correctly." + }, + "lockAllVaults": { + "message": "Lock all vaults" + }, + "accountLimitReached": { + "message": "No more than 5 accounts may be logged in at the same time." + }, + "accountPreferences": { + "message": "Preferences" + }, + "appPreferences": { + "message": "App settings (all accounts)" + }, + "accountSwitcherLimitReached": { + "message": "Account limit reached. Log out of an account to add another." + }, + "settingsTitle": { + "message": "App settings for $EMAIL$", + "placeholders": { + "email": { + "content": "$1", + "example": "jdoe@example.com" + } + } + }, + "switchAccount": { + "message": "Switch account" + }, + "options": { + "message": "Options" + }, + "sessionTimeout": { + "message": "Your session has timed out. Please go back and try logging in again." + }, + "exportingPersonalVaultTitle": { + "message": "Exporting individual vault" + }, + "exportingPersonalVaultDescription": { + "message": "Only the individual vault items associated with $EMAIL$ will be exported. Organization vault items will not be included.", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + } + } + }, + "locked": { + "message": "Locked" + }, + "unlocked": { + "message": "Unlocked" + }, + "generator": { + "message": "Generator" + }, + "whatWouldYouLikeToGenerate": { + "message": "What would you like to generate?" + }, + "passwordType": { + "message": "Password type" + }, + "regenerateUsername": { + "message": "Regenerate username" + }, + "generateUsername": { + "message": "Generate username" + }, + "usernameType": { + "message": "Username type" + }, + "plusAddressedEmail": { + "message": "Plus addressed email", + "description": "Username generator option that appends a random sub-address to the username. For example: address+subaddress@email.com" + }, + "plusAddressedEmailDesc": { + "message": "Use your email provider's sub-addressing capabilities." + }, + "catchallEmail": { + "message": "Catch-all email" + }, + "catchallEmailDesc": { + "message": "Use your domain's configured catch-all inbox." + }, + "random": { + "message": "Random" + }, + "randomWord": { + "message": "Random word" + }, + "websiteName": { + "message": "Website name" + }, + "service": { + "message": "Service" + }, + "allVaults": { + "message": "All vaults" + }, + "searchOrganization": { + "message": "Search organization" + }, + "searchMyVault": { + "message": "Search my vault" + }, + "forwardedEmail": { + "message": "Forwarded email alias" + }, + "forwardedEmailDesc": { + "message": "Generate an email alias with an external forwarding service." + }, + "hostname": { + "message": "Hostname", + "description": "Part of a URL." + }, + "apiAccessToken": { + "message": "API Access Token" + }, + "apiKey": { + "message": "API key" + }, + "premiumSubcriptionRequired": { + "message": "Premium subscription required" + }, + "organizationIsDisabled": { + "message": "Organization suspended" + }, + "disabledOrganizationFilterError": { + "message": "Items in suspended organizations cannot be accessed. Contact your organization owner for assistance." + }, + "neverLockWarning": { + "message": "Are you sure you want to use the \"Never\" option? Setting your lock options to \"Never\" stores your vault's encryption key on your device. If you use this option you should ensure that you keep your device properly protected." + }, + "vault": { + "message": "Vault" + }, + "loginWithMasterPassword": { + "message": "Log in with master password" + }, + "loggingInAs": { + "message": "Logging in as" + }, + "rememberEmail": { + "message": "Remember email" + }, + "notYou": { + "message": "Not you?" + }, + "newAroundHere": { + "message": "New around here?" + }, + "loggingInTo": { + "message": "Logging in to $DOMAIN$", + "placeholders": { + "domain": { + "content": "$1", + "example": "example.com" + } + } + }, + "logInWithAnotherDevice": { + "message": "Log in with another device" + }, + "loginInitiated": { + "message": "Login initiated" + }, + "notificationSentDevice": { + "message": "A notification has been sent to your device." + }, + "fingerprintMatchInfo": { + "message": "Please make sure your vault is unlocked and Fingerprint phrase matches the other device." + }, + "fingerprintPhraseHeader": { + "message": "Fingerprint phrase" + }, + "needAnotherOption": { + "message": "Log in with device must be set up in the settings of the Bitwarden app. Need another option?" + }, + "viewAllLoginOptions": { + "message": "View all login options" + }, + "resendNotification": { + "message": "Resend notification" + }, + "toggleCharacterCount": { + "message": "Toggle character count", + "description": "'Character count' describes a feature that displays a number next to each character of the password." + }, + "areYouTryingtoLogin": { + "message": "Are you trying to log in?" + }, + "logInAttemptBy": { + "message": "Login attempt by $EMAIL$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + } + } + }, + "deviceType": { + "message": "Device Type" + }, + "ipAddress": { + "message": "IP Address" + }, + "time": { + "message": "Time" + }, + "confirmLogIn": { + "message": "Confirm login" + }, + "denyLogIn": { + "message": "Deny login" + }, + "approveLoginRequests": { + "message": "Approve login requests" + }, + "logInConfirmedForEmailOnDevice": { + "message": "Login confirmed for $EMAIL$ on $DEVICE$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + }, + "device": { + "content": "$2", + "example": "iOS" + } + } + }, + "youDeniedALogInAttemptFromAnotherDevice": { + "message": "You denied a login attempt from another device. If this really was you, try to log in with the device again." + }, + "justNow": { + "message": "Just now" + }, + "requestedXMinutesAgo": { + "message": "Requested $MINUTES$ minutes ago", + "placeholders": { + "minutes": { + "content": "$1", + "example": "5" + } + } + }, + "loginRequestHasAlreadyExpired": { + "message": "Login request has already expired." + }, + "thisRequestIsNoLongerValid": { + "message": "This request is no longer valid." + }, + "approveLoginRequestDesc": { + "message": "Use this device to approve login requests made from other devices." + }, + "confirmLoginAtemptForMail": { + "message": "Confirm login attempt for $EMAIL$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + } + } + }, + "logInRequested": { + "message": "Log in requested" + }, + "exposedMasterPassword": { + "message": "Exposed Master Password" + }, + "exposedMasterPasswordDesc": { + "message": "Password found in a data breach. Use a unique password to protect your account. Are you sure you want to use an exposed password?" + }, + "weakAndExposedMasterPassword": { + "message": "Weak and Exposed Master Password" + }, + "weakAndBreachedMasterPasswordDesc": { + "message": "Weak password identified and found in a data breach. Use a strong and unique password to protect your account. Are you sure you want to use this password?" + }, + "checkForBreaches": { + "message": "Check known data breaches for this password" + }, + "important": { + "message": "Important:" + }, + "masterPasswordHint": { + "message": "Your master password cannot be recovered if you forget it!" + }, + "characterMinimum": { + "message": "$LENGTH$ character minimum", + "placeholders": { + "length": { + "content": "$1", + "example": "14" + } + } + }, + "windowsBiometricUpdateWarning": { + "message": "Bitwarden recommends updating your biometric settings to require your master password (or PIN) on the first unlock. Would you like to update your settings now?" + }, + "windowsBiometricUpdateWarningTitle": { + "message": "Recommended Settings Update" + }, + "deviceApprovalRequired": { + "message": "Device approval required. Select an approval option below:" + }, + "rememberThisDevice": { + "message": "Remember this device" + }, + "uncheckIfPublicDevice": { + "message": "Uncheck if using a public device" + }, + "approveFromYourOtherDevice": { + "message": "Approve from your other device" + }, + "requestAdminApproval": { + "message": "Request admin approval" + }, + "approveWithMasterPassword": { + "message": "Approve with master password" + }, + "region": { + "message": "Region" + }, + "ssoIdentifierRequired": { + "message": "Organization SSO identifier is required." + }, + "eu": { + "message": "EU", + "description": "European Union" + }, + "loggingInOn": { + "message": "Logging in on" + }, + "usDomain": { + "message": "bitwarden.com" + }, + "euDomain": { + "message": "bitwarden.eu" + }, + "selfHosted": { + "message": "Self-hosted" + }, + "accessDenied": { + "message": "Access denied. You do not have permission to view this page." + }, + "accountSuccessfullyCreated": { + "message": "Account successfully created!" + }, + "adminApprovalRequested": { + "message": "Admin approval requested" + }, + "adminApprovalRequestSentToAdmins": { + "message": "Your request has been sent to your admin." + }, + "youWillBeNotifiedOnceApproved": { + "message": "You will be notified once approved." + }, + "troubleLoggingIn": { + "message": "Trouble logging in?" + }, + "loginApproved": { + "message": "Login approved" + }, + "userEmailMissing": { + "message": "User email missing" + }, + "deviceTrusted": { + "message": "Device trusted" + }, + "inputRequired": { + "message": "Input is required." + }, + "required": { + "message": "required" + }, + "search": { + "message": "Search" + }, + "inputMinLength": { + "message": "Input must be at least $COUNT$ characters long.", + "placeholders": { + "count": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxLength": { + "message": "Input must not exceed $COUNT$ characters in length.", + "placeholders": { + "count": { + "content": "$1", + "example": "20" + } + } + }, + "inputForbiddenCharacters": { + "message": "The following characters are not allowed: $CHARACTERS$", + "placeholders": { + "characters": { + "content": "$1", + "example": "@, #, $, %" + } + } + }, + "inputMinValue": { + "message": "Input value must be at least $MIN$.", + "placeholders": { + "min": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxValue": { + "message": "Input value must not exceed $MAX$.", + "placeholders": { + "max": { + "content": "$1", + "example": "100" + } + } + }, + "multipleInputEmails": { + "message": "1 or more emails are invalid" + }, + "inputTrimValidator": { + "message": "Input must not contain only whitespace.", + "description": "Notification to inform the user that a form's input can't contain only whitespace." + }, + "inputEmail": { + "message": "Input is not an email address." + }, + "fieldsNeedAttention": { + "message": "$COUNT$ field(s) above need your attention.", + "placeholders": { + "count": { + "content": "$1", + "example": "4" + } + } + }, + "selectPlaceholder": { + "message": "-- Select --" + }, + "multiSelectPlaceholder": { + "message": "-- Type to filter --" + }, + "multiSelectLoading": { + "message": "Retrieving options..." + }, + "multiSelectNotFound": { + "message": "No items found" + }, + "multiSelectClearAll": { + "message": "Clear all" + }, + "plusNMore": { + "message": "+ $QUANTITY$ more", + "placeholders": { + "quantity": { + "content": "$1", + "example": "5" + } + } + }, + "submenu": { + "message": "Submenu" + } +} diff --git a/apps/desktop/src/locales/lv/messages.json b/apps/desktop/src/locales/lv/messages.json index 9c3fe1bc315..5d75ee2208d 100644 --- a/apps/desktop/src/locales/lv/messages.json +++ b/apps/desktop/src/locales/lv/messages.json @@ -582,7 +582,7 @@ "message": "Apstiprinājuma kods" }, "confirmIdentity": { - "message": "Apstiprināt identitāti, lai turpinātu." + "message": "Jāapstiprina identitāte, lai turpinātu." }, "verificationCodeRequired": { "message": "Ir nepieciešams apstiprinājuma kods." @@ -818,7 +818,7 @@ "message": "Sinhronizācija neizdevās" }, "yourVaultIsLocked": { - "message": "Glabātava ir slēgta. Jāapstiprina identitāte, lai turpinātu." + "message": "Glabātava ir aizslēgta. Jāapstiprina identitāte, lai turpinātu." }, "unlock": { "message": "Atslēgt" @@ -1077,8 +1077,8 @@ "premiumSignUpStorage": { "message": "1 GB šifrētas krātuves datņu pielikumiem." }, - "premiumSignUpTwoStep": { - "message": "Tādas papildu divpakāpju pieteikšanās iespējas kā YubiKey, FIDO U2F un Duo." + "premiumSignUpTwoStepOptions": { + "message": "Proprietary two-step login options such as YubiKey and Duo." }, "premiumSignUpReports": { "message": "Paroļu higiēnas, konta veselības un datu noplūžu pārskati, lai uzturētu glabātavu drošu." @@ -1492,6 +1492,9 @@ "vaultTimeoutActionLogOutDesc": { "message": "Ir nepieciešama atkārtota pieteikšanās, lai atkal piekļūtu glabātavai." }, + "unlockMethodNeededToChangeTimeoutActionDesc": { + "message": "Jāuzstāda atslēgšanas veids, lai mainītu glabātavas noildzes darbību." + }, "lock": { "message": "Aizslēgt", "description": "Verb form: to make secure or inaccesible by" @@ -1512,12 +1515,6 @@ "permanentlyDeletedItem": { "message": "Vienums neatgriezeniski izdzēsts" }, - "restoreItem": { - "message": "Atjaunot vienumu" - }, - "restoreItemConfirmation": { - "message": "Vai tiešām atjaunot šo vienumu?" - }, "restoredItem": { "message": "Vienums atjaunots" }, @@ -1594,7 +1591,7 @@ "message": "Atzīmējot šo rūtiņu, Tu piekrīti sekojošajam:" }, "acceptPoliciesRequired": { - "message": "Nav apstiprināti izmantošanas nosacījumi un privātuma politika." + "message": "Nav apstiprināti izmantošanas noteikumi un privātuma nosacījumi." }, "enableBrowserIntegration": { "message": "Iespējot sasaistīšanu ar pārlūku" @@ -1666,7 +1663,7 @@ "message": "Apvienības nosacījumi ietekmē Tavas īpašumtiesību iespējas." }, "allSends": { - "message": "Visi \"Send\"", + "message": "Visi Send", "description": "'Sends' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "sendTypeFile": { @@ -1676,11 +1673,11 @@ "message": "Teksts" }, "searchSends": { - "message": "Meklēt \"Send\"", + "message": "Meklēt Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "editSend": { - "message": "Labot \"Send\"", + "message": "Labot Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "myVault": { @@ -1693,72 +1690,72 @@ "message": "Dzēšanas datums" }, "deletionDateDesc": { - "message": "\"Send\" tiks pastāvīgi izdzēsts norādītajā dienā un laikā.", + "message": "Send tiks neatgriezeniski izdzēsts norādītajā datumā un laikā.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "expirationDate": { "message": "Derīguma beigu datums" }, "expirationDateDesc": { - "message": "Ja uzstādīts, piekļuve šim \"Send\" beigsies norādītajā dienā un laikā.", + "message": "Ja iestatīts, piekļuve šim Send beigsies norādītajā datumā un laikā.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "maxAccessCount": { - "message": "Lielākais pieļaujamais piekļuvju skaits", + "message": "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." }, "maxAccessCountDesc": { - "message": "Ja uzstādīts, lietotāji nevarēs piekļūt šim \"Send\", kad tiks sasniegts lielākais pieļaujamais piekļūšanas reižu skaits.", + "message": "Ja iestatīts, lietotāji nevarēs piekļūt šim Send, kad tiks sasniegts lielākais pieļaujamais piekļūšanas reižu skaits.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "currentAccessCount": { "message": "Pašreizējais piekļuvju skaits" }, "disableSend": { - "message": "Atspējot šo \"Send\", lai neviens tam nevarētu piekļūt.", + "message": "Izslēgt šo Send, lai neviens tam nevarētu piekļūt.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "sendPasswordDesc": { - "message": "Pēc izvēles pieprasīt lietotājiem paroli, lai viņi varētu piekļūt šim \"Send\".", + "message": "Pēc izvēles pieprasīt paroli, lai lietotāji varētu piekļūt šim Send.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "sendNotesDesc": { - "message": "Personīgās piezīmes par šo \"Send\".", + "message": "Personīgas piezīmes par šo Send.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "sendLink": { - "message": "\"Send\" saite", + "message": "Send saite", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "sendLinkLabel": { - "message": "\"Send\" saite", + "message": "Send saite", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "textHiddenByDefault": { - "message": "Kad piekļūst šim \"Send\", pēc noklusējuma paslēpt saturu", + "message": "Pēc noklusējuma paslēpt tekstu, kad piekļūst Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "createdSend": { - "message": "\"Send\" izveidots", + "message": "Send pievienots", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "editedSend": { - "message": "\"Send\" labots", + "message": "Send saglabāts", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "deletedSend": { - "message": "\"Send\" izdzēsts", + "message": "Send izdzēsts", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "newPassword": { "message": "Jauna parole" }, "whatTypeOfSend": { - "message": "Kāds veids ir šim \"Send\"?", + "message": "Kāds ir šī Send veids?", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "createSend": { - "message": "Izveidot \"Send\"", + "message": "Jauns Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "sendTextDesc": { @@ -1783,22 +1780,22 @@ "message": "Pielāgots" }, "deleteSendConfirmation": { - "message": "Vai tiešām izdzēst šo \"Send\"?", + "message": "Vai tiešām izdzēst šo Send?", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "copySendLinkToClipboard": { - "message": "Ievietot \"Send\" saiti starpliktuvē", + "message": "Ievietot Send saiti starpliktuvē", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "copySendLinkOnSave": { - "message": "Saglabājot ievietot šī \"Send\" saiti starpliktuvē." + "message": "Saglabāšanas brīdī ievietot saiti starpliktuvē, lai kopīgotu šo Send." }, "sendDisabled": { - "message": "\"Send\" atspējots", + "message": "Send noņemts", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "sendDisabledWarning": { - "message": "Uzņēmuma nosacījumu dēļ ir iespējams izdzēst tikai esošu \"Send\".", + "message": "Uzņēmuma nosacījumu dēļ ir iespējams izdzēst tikai esošu Send.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "copyLink": { @@ -1817,7 +1814,7 @@ "message": "Vai tiešām noņemt paroli?" }, "maxAccessCountReached": { - "message": "Sasniegts lielākais pieļaujamais piekļuvju skaits" + "message": "Sasniegts lielākais pieļaujamais piekļuves reižu skaits" }, "expired": { "message": "Beidzies izmantošanas laiks" @@ -1832,7 +1829,7 @@ "message": "Slēpt e-pasta adresi no saņēmējiem." }, "sendOptionsPolicyInEffect": { - "message": "Viens vai vairāki apvienības nosacījumi ietekmē \"Send\" iestatījumus." + "message": "Viens vai vairāki apvienības nosacījumi ietekmē Send iespējas." }, "emailVerificationRequired": { "message": "Nepieciešama e-pasta adreses apstiprināšana" @@ -2112,14 +2109,14 @@ "logInWithAnotherDevice": { "message": "Pieteikties ar citu ierīci" }, - "logInInitiated": { + "loginInitiated": { "message": "Uzsākta pieteikšanās" }, "notificationSentDevice": { "message": "Uz jūsu ierīci ir nosūtīts paziņojums." }, "fingerprintMatchInfo": { - "message": "Jāpārliecinās, ka glabātava ir atslēgta un atpazīšanas vārdkopa ir tāda pati arī citā ierīcē." + "message": "Lūgums pārliecināties, ka glabātava ir atslēgta un atpazīšanas vārdkopa ir tāda pati arī citā ierīcē." }, "fingerprintPhraseHeader": { "message": "Atpazīšanas vārdkopa" @@ -2252,21 +2249,171 @@ "windowsBiometricUpdateWarningTitle": { "message": "Ieteicamie iestatījumu atjauninājumi" }, + "deviceApprovalRequired": { + "message": "Nepieciešams ierīces apstiprinājums. Zemāk jāatlasa apstiprinājuma iespēja:" + }, + "rememberThisDevice": { + "message": "Atcerēties šo ierīci" + }, + "uncheckIfPublicDevice": { + "message": "Jānoņem atzīme, ja tiek izmantota publiska ierīce" + }, + "approveFromYourOtherDevice": { + "message": "Jāapstiprina citā savā ierīcē" + }, + "requestAdminApproval": { + "message": "Pieprasīt pārvaldītāja apstiprinājumu" + }, + "approveWithMasterPassword": { + "message": "Apstiprināt ar galveno paroli" + }, "region": { "message": "Apgabals" }, + "ssoIdentifierRequired": { + "message": "Ir nepieciešams apvienības SSO identifikators." + }, "eu": { "message": "ES", "description": "European Union" }, - "us": { - "message": "ASV", - "description": "United States" + "loggingInOn": { + "message": "Piesakās" + }, + "usDomain": { + "message": "bitwarden.com" + }, + "euDomain": { + "message": "bitwarden.eu" }, "selfHosted": { "message": "Pašizvietots" }, "accessDenied": { "message": "Piekļuve liegta. Nav nepieciešamo atļauju, lai skatītu šo lapu." + }, + "accountSuccessfullyCreated": { + "message": "Konts ir veiksmīgi izveidots." + }, + "adminApprovalRequested": { + "message": "Pieprasīts pārvaldītāja apstiprinājums" + }, + "adminApprovalRequestSentToAdmins": { + "message": "Pieprasījums tika nosūtīts pārvaldītājam." + }, + "youWillBeNotifiedOnceApproved": { + "message": "Tiks saņemts paziņojums, tiklīdz būs apstiprināts." + }, + "troubleLoggingIn": { + "message": "Neizdodas pieteikties?" + }, + "loginApproved": { + "message": "Pieteikšanās apstiprināta" + }, + "userEmailMissing": { + "message": "Trūkst lietotāja e-pasta adreses" + }, + "deviceTrusted": { + "message": "Ierīce ir uzticama" + }, + "inputRequired": { + "message": "Jāievada vērtība." + }, + "required": { + "message": "nepieciešams" + }, + "search": { + "message": "Meklēt" + }, + "inputMinLength": { + "message": "Ievadītajai vērtībai ir jābūt vismaz $COUNT$ rakstzīmes garai.", + "placeholders": { + "count": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxLength": { + "message": "Ievadītās vērtības garums nedrīkst pārsniegt $COUNT$ rakstzīmes.", + "placeholders": { + "count": { + "content": "$1", + "example": "20" + } + } + }, + "inputForbiddenCharacters": { + "message": "Šādas rakstzīmes nav atļautas: $CHARACTERS$", + "placeholders": { + "characters": { + "content": "$1", + "example": "@, #, $, %" + } + } + }, + "inputMinValue": { + "message": "Ievadītajai vērtībai jābūt vismaz $MIN$.", + "placeholders": { + "min": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxValue": { + "message": "Ievadītā vērtība nedrīkst pārsniegt $MAX$.", + "placeholders": { + "max": { + "content": "$1", + "example": "100" + } + } + }, + "multipleInputEmails": { + "message": "1 vai vairākas e-pasta adreses nav derīgas" + }, + "inputTrimValidator": { + "message": "Ievadītā vērtība nevar sastāvēt tikai no atstarpēm.", + "description": "Notification to inform the user that a form's input can't contain only whitespace." + }, + "inputEmail": { + "message": "Ievadītā vērtība nav e-pasta adrese." + }, + "fieldsNeedAttention": { + "message": "$COUNT$ augstāk esošajam(iem) laukam(iem) ir jāpievērš uzmanība.", + "placeholders": { + "count": { + "content": "$1", + "example": "4" + } + } + }, + "selectPlaceholder": { + "message": "-- Atlasīt --" + }, + "multiSelectPlaceholder": { + "message": "-- Rakstīt, lai atlasītu --" + }, + "multiSelectLoading": { + "message": "Iegūst iespējas..." + }, + "multiSelectNotFound": { + "message": "Netika atrasti vienumi" + }, + "multiSelectClearAll": { + "message": "Notīrīt visu" + }, + "plusNMore": { + "message": "+ vēl $QUANTITY$", + "placeholders": { + "quantity": { + "content": "$1", + "example": "5" + } + } + }, + "submenu": { + "message": "Apakšizvēlne" } } diff --git a/apps/desktop/src/locales/me/messages.json b/apps/desktop/src/locales/me/messages.json index 98bb03ef7d4..20336258846 100644 --- a/apps/desktop/src/locales/me/messages.json +++ b/apps/desktop/src/locales/me/messages.json @@ -1077,8 +1077,8 @@ "premiumSignUpStorage": { "message": "1 GB šifrovanog skladišta za priloge datoteka." }, - "premiumSignUpTwoStep": { - "message": "Dodatne opcije prijave u dva koraka kao što su YubiKey, FIDO U2F i Duo." + "premiumSignUpTwoStepOptions": { + "message": "Proprietary two-step login options such as YubiKey and Duo." }, "premiumSignUpReports": { "message": "Higijena lozinke, zdravlje računa i podaci o krađi podataka kako bi trezor bio siguran." @@ -1492,6 +1492,9 @@ "vaultTimeoutActionLogOutDesc": { "message": "Re-authentication is required to access your vault again." }, + "unlockMethodNeededToChangeTimeoutActionDesc": { + "message": "Set up an unlock method to change your vault timeout action." + }, "lock": { "message": "Lock", "description": "Verb form: to make secure or inaccesible by" @@ -1512,12 +1515,6 @@ "permanentlyDeletedItem": { "message": "Item permanently deleted" }, - "restoreItem": { - "message": "Restore item" - }, - "restoreItemConfirmation": { - "message": "Are you sure you want to restore this item?" - }, "restoredItem": { "message": "Item restored" }, @@ -2112,8 +2109,8 @@ "logInWithAnotherDevice": { "message": "Log in with another device" }, - "logInInitiated": { - "message": "Log in initiated" + "loginInitiated": { + "message": "Login initiated" }, "notificationSentDevice": { "message": "A notification has been sent to your device." @@ -2252,21 +2249,171 @@ "windowsBiometricUpdateWarningTitle": { "message": "Recommended Settings Update" }, + "deviceApprovalRequired": { + "message": "Device approval required. Select an approval option below:" + }, + "rememberThisDevice": { + "message": "Remember this device" + }, + "uncheckIfPublicDevice": { + "message": "Uncheck if using a public device" + }, + "approveFromYourOtherDevice": { + "message": "Approve from your other device" + }, + "requestAdminApproval": { + "message": "Request admin approval" + }, + "approveWithMasterPassword": { + "message": "Approve with master password" + }, "region": { "message": "Region" }, + "ssoIdentifierRequired": { + "message": "Organization SSO identifier is required." + }, "eu": { "message": "EU", "description": "European Union" }, - "us": { - "message": "US", - "description": "United States" + "loggingInOn": { + "message": "Logging in on" + }, + "usDomain": { + "message": "bitwarden.com" + }, + "euDomain": { + "message": "bitwarden.eu" }, "selfHosted": { "message": "Self-hosted" }, "accessDenied": { "message": "Access denied. You do not have permission to view this page." + }, + "accountSuccessfullyCreated": { + "message": "Account successfully created!" + }, + "adminApprovalRequested": { + "message": "Admin approval requested" + }, + "adminApprovalRequestSentToAdmins": { + "message": "Your request has been sent to your admin." + }, + "youWillBeNotifiedOnceApproved": { + "message": "You will be notified once approved." + }, + "troubleLoggingIn": { + "message": "Trouble logging in?" + }, + "loginApproved": { + "message": "Login approved" + }, + "userEmailMissing": { + "message": "User email missing" + }, + "deviceTrusted": { + "message": "Device trusted" + }, + "inputRequired": { + "message": "Input is required." + }, + "required": { + "message": "required" + }, + "search": { + "message": "Search" + }, + "inputMinLength": { + "message": "Input must be at least $COUNT$ characters long.", + "placeholders": { + "count": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxLength": { + "message": "Input must not exceed $COUNT$ characters in length.", + "placeholders": { + "count": { + "content": "$1", + "example": "20" + } + } + }, + "inputForbiddenCharacters": { + "message": "The following characters are not allowed: $CHARACTERS$", + "placeholders": { + "characters": { + "content": "$1", + "example": "@, #, $, %" + } + } + }, + "inputMinValue": { + "message": "Input value must be at least $MIN$.", + "placeholders": { + "min": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxValue": { + "message": "Input value must not exceed $MAX$.", + "placeholders": { + "max": { + "content": "$1", + "example": "100" + } + } + }, + "multipleInputEmails": { + "message": "1 or more emails are invalid" + }, + "inputTrimValidator": { + "message": "Input must not contain only whitespace.", + "description": "Notification to inform the user that a form's input can't contain only whitespace." + }, + "inputEmail": { + "message": "Input is not an email address." + }, + "fieldsNeedAttention": { + "message": "$COUNT$ field(s) above need your attention.", + "placeholders": { + "count": { + "content": "$1", + "example": "4" + } + } + }, + "selectPlaceholder": { + "message": "-- Select --" + }, + "multiSelectPlaceholder": { + "message": "-- Type to filter --" + }, + "multiSelectLoading": { + "message": "Retrieving options..." + }, + "multiSelectNotFound": { + "message": "No items found" + }, + "multiSelectClearAll": { + "message": "Clear all" + }, + "plusNMore": { + "message": "+ $QUANTITY$ more", + "placeholders": { + "quantity": { + "content": "$1", + "example": "5" + } + } + }, + "submenu": { + "message": "Submenu" } } diff --git a/apps/desktop/src/locales/ml/messages.json b/apps/desktop/src/locales/ml/messages.json index 18292129999..18b448b1d1e 100644 --- a/apps/desktop/src/locales/ml/messages.json +++ b/apps/desktop/src/locales/ml/messages.json @@ -1077,8 +1077,8 @@ "premiumSignUpStorage": { "message": "ഫയൽ അറ്റാച്ചുമെന്റുകൾക്കായി 1 GB എൻക്രിപ്റ്റുചെയ്‌ത സ്റ്റോറേജ്." }, - "premiumSignUpTwoStep": { - "message": "രണ്ട്-ഘട്ട പ്രവേശന ഓപ്ഷനുകളായ Yubikey, FIDO U2F, Duo." + "premiumSignUpTwoStepOptions": { + "message": "Proprietary two-step login options such as YubiKey and Duo." }, "premiumSignUpReports": { "message": "നിങ്ങളുടെ വാൾട് സൂക്ഷിക്കുന്നതിന്. പാസ്‌വേഡ് ശുചിത്വം, അക്കൗണ്ട് ആരോഗ്യം, ഡാറ്റ ലംഘന റിപ്പോർട്ടുകൾ." @@ -1492,6 +1492,9 @@ "vaultTimeoutActionLogOutDesc": { "message": "ലോഗ് ഔട്ട് ചെയ്ത വാൾട് വീണ്ടും അക്സസ്സ് ചെയ്യാൻ ഓതെന്റിക്കേഷൻ ആവശ്യം വേരും." }, + "unlockMethodNeededToChangeTimeoutActionDesc": { + "message": "Set up an unlock method to change your vault timeout action." + }, "lock": { "message": "പൂട്ടുക", "description": "Verb form: to make secure or inaccesible by" @@ -1512,12 +1515,6 @@ "permanentlyDeletedItem": { "message": "എന്നെന്നേക്കുമായി നീക്കം ചെയ്ത ഇനം" }, - "restoreItem": { - "message": "ഇനം വീണ്ടെടുക്കുക" - }, - "restoreItemConfirmation": { - "message": "ഈ ഇനം വീണ്ടെടുക്കണമെന്ന് ഉറപ്പാണോ?" - }, "restoredItem": { "message": "വീണ്ടെടുത്ത ഇനങ്ങൾ" }, @@ -2112,8 +2109,8 @@ "logInWithAnotherDevice": { "message": "Log in with another device" }, - "logInInitiated": { - "message": "Log in initiated" + "loginInitiated": { + "message": "Login initiated" }, "notificationSentDevice": { "message": "A notification has been sent to your device." @@ -2252,21 +2249,171 @@ "windowsBiometricUpdateWarningTitle": { "message": "Recommended Settings Update" }, + "deviceApprovalRequired": { + "message": "Device approval required. Select an approval option below:" + }, + "rememberThisDevice": { + "message": "Remember this device" + }, + "uncheckIfPublicDevice": { + "message": "Uncheck if using a public device" + }, + "approveFromYourOtherDevice": { + "message": "Approve from your other device" + }, + "requestAdminApproval": { + "message": "Request admin approval" + }, + "approveWithMasterPassword": { + "message": "Approve with master password" + }, "region": { "message": "Region" }, + "ssoIdentifierRequired": { + "message": "Organization SSO identifier is required." + }, "eu": { "message": "EU", "description": "European Union" }, - "us": { - "message": "US", - "description": "United States" + "loggingInOn": { + "message": "Logging in on" + }, + "usDomain": { + "message": "bitwarden.com" + }, + "euDomain": { + "message": "bitwarden.eu" }, "selfHosted": { "message": "Self-hosted" }, "accessDenied": { "message": "Access denied. You do not have permission to view this page." + }, + "accountSuccessfullyCreated": { + "message": "Account successfully created!" + }, + "adminApprovalRequested": { + "message": "Admin approval requested" + }, + "adminApprovalRequestSentToAdmins": { + "message": "Your request has been sent to your admin." + }, + "youWillBeNotifiedOnceApproved": { + "message": "You will be notified once approved." + }, + "troubleLoggingIn": { + "message": "Trouble logging in?" + }, + "loginApproved": { + "message": "Login approved" + }, + "userEmailMissing": { + "message": "User email missing" + }, + "deviceTrusted": { + "message": "Device trusted" + }, + "inputRequired": { + "message": "Input is required." + }, + "required": { + "message": "required" + }, + "search": { + "message": "Search" + }, + "inputMinLength": { + "message": "Input must be at least $COUNT$ characters long.", + "placeholders": { + "count": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxLength": { + "message": "Input must not exceed $COUNT$ characters in length.", + "placeholders": { + "count": { + "content": "$1", + "example": "20" + } + } + }, + "inputForbiddenCharacters": { + "message": "The following characters are not allowed: $CHARACTERS$", + "placeholders": { + "characters": { + "content": "$1", + "example": "@, #, $, %" + } + } + }, + "inputMinValue": { + "message": "Input value must be at least $MIN$.", + "placeholders": { + "min": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxValue": { + "message": "Input value must not exceed $MAX$.", + "placeholders": { + "max": { + "content": "$1", + "example": "100" + } + } + }, + "multipleInputEmails": { + "message": "1 or more emails are invalid" + }, + "inputTrimValidator": { + "message": "Input must not contain only whitespace.", + "description": "Notification to inform the user that a form's input can't contain only whitespace." + }, + "inputEmail": { + "message": "Input is not an email address." + }, + "fieldsNeedAttention": { + "message": "$COUNT$ field(s) above need your attention.", + "placeholders": { + "count": { + "content": "$1", + "example": "4" + } + } + }, + "selectPlaceholder": { + "message": "-- Select --" + }, + "multiSelectPlaceholder": { + "message": "-- Type to filter --" + }, + "multiSelectLoading": { + "message": "Retrieving options..." + }, + "multiSelectNotFound": { + "message": "No items found" + }, + "multiSelectClearAll": { + "message": "Clear all" + }, + "plusNMore": { + "message": "+ $QUANTITY$ more", + "placeholders": { + "quantity": { + "content": "$1", + "example": "5" + } + } + }, + "submenu": { + "message": "Submenu" } } diff --git a/apps/desktop/src/locales/mr/messages.json b/apps/desktop/src/locales/mr/messages.json index ed828fa2255..38e81a83bfd 100644 --- a/apps/desktop/src/locales/mr/messages.json +++ b/apps/desktop/src/locales/mr/messages.json @@ -1077,8 +1077,8 @@ "premiumSignUpStorage": { "message": "1 GB encrypted storage for file attachments." }, - "premiumSignUpTwoStep": { - "message": "Additional two-step login options such as YubiKey, FIDO U2F, and Duo." + "premiumSignUpTwoStepOptions": { + "message": "Proprietary two-step login options such as YubiKey and Duo." }, "premiumSignUpReports": { "message": "Password hygiene, account health, and data breach reports to keep your vault safe." @@ -1492,6 +1492,9 @@ "vaultTimeoutActionLogOutDesc": { "message": "Re-authentication is required to access your vault again." }, + "unlockMethodNeededToChangeTimeoutActionDesc": { + "message": "Set up an unlock method to change your vault timeout action." + }, "lock": { "message": "Lock", "description": "Verb form: to make secure or inaccesible by" @@ -1512,12 +1515,6 @@ "permanentlyDeletedItem": { "message": "Item permanently deleted" }, - "restoreItem": { - "message": "Restore item" - }, - "restoreItemConfirmation": { - "message": "Are you sure you want to restore this item?" - }, "restoredItem": { "message": "Item restored" }, @@ -2112,8 +2109,8 @@ "logInWithAnotherDevice": { "message": "Log in with another device" }, - "logInInitiated": { - "message": "Log in initiated" + "loginInitiated": { + "message": "Login initiated" }, "notificationSentDevice": { "message": "A notification has been sent to your device." @@ -2252,21 +2249,171 @@ "windowsBiometricUpdateWarningTitle": { "message": "Recommended Settings Update" }, + "deviceApprovalRequired": { + "message": "Device approval required. Select an approval option below:" + }, + "rememberThisDevice": { + "message": "Remember this device" + }, + "uncheckIfPublicDevice": { + "message": "Uncheck if using a public device" + }, + "approveFromYourOtherDevice": { + "message": "Approve from your other device" + }, + "requestAdminApproval": { + "message": "Request admin approval" + }, + "approveWithMasterPassword": { + "message": "Approve with master password" + }, "region": { "message": "Region" }, + "ssoIdentifierRequired": { + "message": "Organization SSO identifier is required." + }, "eu": { "message": "EU", "description": "European Union" }, - "us": { - "message": "US", - "description": "United States" + "loggingInOn": { + "message": "Logging in on" + }, + "usDomain": { + "message": "bitwarden.com" + }, + "euDomain": { + "message": "bitwarden.eu" }, "selfHosted": { "message": "Self-hosted" }, "accessDenied": { "message": "Access denied. You do not have permission to view this page." + }, + "accountSuccessfullyCreated": { + "message": "Account successfully created!" + }, + "adminApprovalRequested": { + "message": "Admin approval requested" + }, + "adminApprovalRequestSentToAdmins": { + "message": "Your request has been sent to your admin." + }, + "youWillBeNotifiedOnceApproved": { + "message": "You will be notified once approved." + }, + "troubleLoggingIn": { + "message": "Trouble logging in?" + }, + "loginApproved": { + "message": "Login approved" + }, + "userEmailMissing": { + "message": "User email missing" + }, + "deviceTrusted": { + "message": "Device trusted" + }, + "inputRequired": { + "message": "Input is required." + }, + "required": { + "message": "required" + }, + "search": { + "message": "Search" + }, + "inputMinLength": { + "message": "Input must be at least $COUNT$ characters long.", + "placeholders": { + "count": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxLength": { + "message": "Input must not exceed $COUNT$ characters in length.", + "placeholders": { + "count": { + "content": "$1", + "example": "20" + } + } + }, + "inputForbiddenCharacters": { + "message": "The following characters are not allowed: $CHARACTERS$", + "placeholders": { + "characters": { + "content": "$1", + "example": "@, #, $, %" + } + } + }, + "inputMinValue": { + "message": "Input value must be at least $MIN$.", + "placeholders": { + "min": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxValue": { + "message": "Input value must not exceed $MAX$.", + "placeholders": { + "max": { + "content": "$1", + "example": "100" + } + } + }, + "multipleInputEmails": { + "message": "1 or more emails are invalid" + }, + "inputTrimValidator": { + "message": "Input must not contain only whitespace.", + "description": "Notification to inform the user that a form's input can't contain only whitespace." + }, + "inputEmail": { + "message": "Input is not an email address." + }, + "fieldsNeedAttention": { + "message": "$COUNT$ field(s) above need your attention.", + "placeholders": { + "count": { + "content": "$1", + "example": "4" + } + } + }, + "selectPlaceholder": { + "message": "-- Select --" + }, + "multiSelectPlaceholder": { + "message": "-- Type to filter --" + }, + "multiSelectLoading": { + "message": "Retrieving options..." + }, + "multiSelectNotFound": { + "message": "No items found" + }, + "multiSelectClearAll": { + "message": "Clear all" + }, + "plusNMore": { + "message": "+ $QUANTITY$ more", + "placeholders": { + "quantity": { + "content": "$1", + "example": "5" + } + } + }, + "submenu": { + "message": "Submenu" } } diff --git a/apps/desktop/src/locales/my/messages.json b/apps/desktop/src/locales/my/messages.json index ceeb67d0f74..29d7954de21 100644 --- a/apps/desktop/src/locales/my/messages.json +++ b/apps/desktop/src/locales/my/messages.json @@ -1077,8 +1077,8 @@ "premiumSignUpStorage": { "message": "1 GB encrypted storage for file attachments." }, - "premiumSignUpTwoStep": { - "message": "Additional two-step login options such as YubiKey, FIDO U2F, and Duo." + "premiumSignUpTwoStepOptions": { + "message": "Proprietary two-step login options such as YubiKey and Duo." }, "premiumSignUpReports": { "message": "Password hygiene, account health, and data breach reports to keep your vault safe." @@ -1492,6 +1492,9 @@ "vaultTimeoutActionLogOutDesc": { "message": "Re-authentication is required to access your vault again." }, + "unlockMethodNeededToChangeTimeoutActionDesc": { + "message": "Set up an unlock method to change your vault timeout action." + }, "lock": { "message": "Lock", "description": "Verb form: to make secure or inaccesible by" @@ -1512,12 +1515,6 @@ "permanentlyDeletedItem": { "message": "Item permanently deleted" }, - "restoreItem": { - "message": "Restore item" - }, - "restoreItemConfirmation": { - "message": "Are you sure you want to restore this item?" - }, "restoredItem": { "message": "Item restored" }, @@ -2112,8 +2109,8 @@ "logInWithAnotherDevice": { "message": "Log in with another device" }, - "logInInitiated": { - "message": "Log in initiated" + "loginInitiated": { + "message": "Login initiated" }, "notificationSentDevice": { "message": "A notification has been sent to your device." @@ -2252,21 +2249,171 @@ "windowsBiometricUpdateWarningTitle": { "message": "Recommended Settings Update" }, + "deviceApprovalRequired": { + "message": "Device approval required. Select an approval option below:" + }, + "rememberThisDevice": { + "message": "Remember this device" + }, + "uncheckIfPublicDevice": { + "message": "Uncheck if using a public device" + }, + "approveFromYourOtherDevice": { + "message": "Approve from your other device" + }, + "requestAdminApproval": { + "message": "Request admin approval" + }, + "approveWithMasterPassword": { + "message": "Approve with master password" + }, "region": { "message": "Region" }, + "ssoIdentifierRequired": { + "message": "Organization SSO identifier is required." + }, "eu": { "message": "EU", "description": "European Union" }, - "us": { - "message": "US", - "description": "United States" + "loggingInOn": { + "message": "Logging in on" + }, + "usDomain": { + "message": "bitwarden.com" + }, + "euDomain": { + "message": "bitwarden.eu" }, "selfHosted": { "message": "Self-hosted" }, "accessDenied": { "message": "Access denied. You do not have permission to view this page." + }, + "accountSuccessfullyCreated": { + "message": "Account successfully created!" + }, + "adminApprovalRequested": { + "message": "Admin approval requested" + }, + "adminApprovalRequestSentToAdmins": { + "message": "Your request has been sent to your admin." + }, + "youWillBeNotifiedOnceApproved": { + "message": "You will be notified once approved." + }, + "troubleLoggingIn": { + "message": "Trouble logging in?" + }, + "loginApproved": { + "message": "Login approved" + }, + "userEmailMissing": { + "message": "User email missing" + }, + "deviceTrusted": { + "message": "Device trusted" + }, + "inputRequired": { + "message": "Input is required." + }, + "required": { + "message": "required" + }, + "search": { + "message": "Search" + }, + "inputMinLength": { + "message": "Input must be at least $COUNT$ characters long.", + "placeholders": { + "count": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxLength": { + "message": "Input must not exceed $COUNT$ characters in length.", + "placeholders": { + "count": { + "content": "$1", + "example": "20" + } + } + }, + "inputForbiddenCharacters": { + "message": "The following characters are not allowed: $CHARACTERS$", + "placeholders": { + "characters": { + "content": "$1", + "example": "@, #, $, %" + } + } + }, + "inputMinValue": { + "message": "Input value must be at least $MIN$.", + "placeholders": { + "min": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxValue": { + "message": "Input value must not exceed $MAX$.", + "placeholders": { + "max": { + "content": "$1", + "example": "100" + } + } + }, + "multipleInputEmails": { + "message": "1 or more emails are invalid" + }, + "inputTrimValidator": { + "message": "Input must not contain only whitespace.", + "description": "Notification to inform the user that a form's input can't contain only whitespace." + }, + "inputEmail": { + "message": "Input is not an email address." + }, + "fieldsNeedAttention": { + "message": "$COUNT$ field(s) above need your attention.", + "placeholders": { + "count": { + "content": "$1", + "example": "4" + } + } + }, + "selectPlaceholder": { + "message": "-- Select --" + }, + "multiSelectPlaceholder": { + "message": "-- Type to filter --" + }, + "multiSelectLoading": { + "message": "Retrieving options..." + }, + "multiSelectNotFound": { + "message": "No items found" + }, + "multiSelectClearAll": { + "message": "Clear all" + }, + "plusNMore": { + "message": "+ $QUANTITY$ more", + "placeholders": { + "quantity": { + "content": "$1", + "example": "5" + } + } + }, + "submenu": { + "message": "Submenu" } } diff --git a/apps/desktop/src/locales/nb/messages.json b/apps/desktop/src/locales/nb/messages.json index 9123788514f..f4f65b9f536 100644 --- a/apps/desktop/src/locales/nb/messages.json +++ b/apps/desktop/src/locales/nb/messages.json @@ -1077,8 +1077,8 @@ "premiumSignUpStorage": { "message": "1 GB med kryptert fillagring." }, - "premiumSignUpTwoStep": { - "message": "Ytterligere 2-trinnsinnloggingsmuligheter, slik som YubiKey, FIDO U2F, og Duo." + "premiumSignUpTwoStepOptions": { + "message": "Proprietary two-step login options such as YubiKey and Duo." }, "premiumSignUpReports": { "message": "Passordhygiene, kontohelse, og databruddsrapporter som holder hvelvet ditt trygt." @@ -1492,6 +1492,9 @@ "vaultTimeoutActionLogOutDesc": { "message": "Et utlogget hvelv krever at du autentiserer deg selv på nytt for å få tilgang til det igjen." }, + "unlockMethodNeededToChangeTimeoutActionDesc": { + "message": "Set up an unlock method to change your vault timeout action." + }, "lock": { "message": "Lås", "description": "Verb form: to make secure or inaccesible by" @@ -1512,12 +1515,6 @@ "permanentlyDeletedItem": { "message": "Slett objektet permanent" }, - "restoreItem": { - "message": "Gjenopprett objekt" - }, - "restoreItemConfirmation": { - "message": "Er du sikker på at du vil gjenopprette dette objektet?" - }, "restoredItem": { "message": "Gjenopprettet objekt" }, @@ -2112,8 +2109,8 @@ "logInWithAnotherDevice": { "message": "Logg inn med en annen enhet" }, - "logInInitiated": { - "message": "Log in initiated" + "loginInitiated": { + "message": "Login initiated" }, "notificationSentDevice": { "message": "A notification has been sent to your device." @@ -2252,21 +2249,171 @@ "windowsBiometricUpdateWarningTitle": { "message": "Recommended Settings Update" }, + "deviceApprovalRequired": { + "message": "Device approval required. Select an approval option below:" + }, + "rememberThisDevice": { + "message": "Remember this device" + }, + "uncheckIfPublicDevice": { + "message": "Uncheck if using a public device" + }, + "approveFromYourOtherDevice": { + "message": "Approve from your other device" + }, + "requestAdminApproval": { + "message": "Request admin approval" + }, + "approveWithMasterPassword": { + "message": "Approve with master password" + }, "region": { "message": "Region" }, + "ssoIdentifierRequired": { + "message": "Organization SSO identifier is required." + }, "eu": { "message": "EU", "description": "European Union" }, - "us": { - "message": "US", - "description": "United States" + "loggingInOn": { + "message": "Logging in on" + }, + "usDomain": { + "message": "bitwarden.com" + }, + "euDomain": { + "message": "bitwarden.eu" }, "selfHosted": { "message": "Self-hosted" }, "accessDenied": { "message": "Access denied. You do not have permission to view this page." + }, + "accountSuccessfullyCreated": { + "message": "Account successfully created!" + }, + "adminApprovalRequested": { + "message": "Admin approval requested" + }, + "adminApprovalRequestSentToAdmins": { + "message": "Your request has been sent to your admin." + }, + "youWillBeNotifiedOnceApproved": { + "message": "You will be notified once approved." + }, + "troubleLoggingIn": { + "message": "Trouble logging in?" + }, + "loginApproved": { + "message": "Login approved" + }, + "userEmailMissing": { + "message": "User email missing" + }, + "deviceTrusted": { + "message": "Device trusted" + }, + "inputRequired": { + "message": "Input is required." + }, + "required": { + "message": "required" + }, + "search": { + "message": "Search" + }, + "inputMinLength": { + "message": "Input must be at least $COUNT$ characters long.", + "placeholders": { + "count": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxLength": { + "message": "Input must not exceed $COUNT$ characters in length.", + "placeholders": { + "count": { + "content": "$1", + "example": "20" + } + } + }, + "inputForbiddenCharacters": { + "message": "The following characters are not allowed: $CHARACTERS$", + "placeholders": { + "characters": { + "content": "$1", + "example": "@, #, $, %" + } + } + }, + "inputMinValue": { + "message": "Input value must be at least $MIN$.", + "placeholders": { + "min": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxValue": { + "message": "Input value must not exceed $MAX$.", + "placeholders": { + "max": { + "content": "$1", + "example": "100" + } + } + }, + "multipleInputEmails": { + "message": "1 or more emails are invalid" + }, + "inputTrimValidator": { + "message": "Input must not contain only whitespace.", + "description": "Notification to inform the user that a form's input can't contain only whitespace." + }, + "inputEmail": { + "message": "Input is not an email address." + }, + "fieldsNeedAttention": { + "message": "$COUNT$ field(s) above need your attention.", + "placeholders": { + "count": { + "content": "$1", + "example": "4" + } + } + }, + "selectPlaceholder": { + "message": "-- Select --" + }, + "multiSelectPlaceholder": { + "message": "-- Type to filter --" + }, + "multiSelectLoading": { + "message": "Retrieving options..." + }, + "multiSelectNotFound": { + "message": "No items found" + }, + "multiSelectClearAll": { + "message": "Clear all" + }, + "plusNMore": { + "message": "+ $QUANTITY$ more", + "placeholders": { + "quantity": { + "content": "$1", + "example": "5" + } + } + }, + "submenu": { + "message": "Submenu" } } diff --git a/apps/desktop/src/locales/ne/messages.json b/apps/desktop/src/locales/ne/messages.json index ed828fa2255..38e81a83bfd 100644 --- a/apps/desktop/src/locales/ne/messages.json +++ b/apps/desktop/src/locales/ne/messages.json @@ -1077,8 +1077,8 @@ "premiumSignUpStorage": { "message": "1 GB encrypted storage for file attachments." }, - "premiumSignUpTwoStep": { - "message": "Additional two-step login options such as YubiKey, FIDO U2F, and Duo." + "premiumSignUpTwoStepOptions": { + "message": "Proprietary two-step login options such as YubiKey and Duo." }, "premiumSignUpReports": { "message": "Password hygiene, account health, and data breach reports to keep your vault safe." @@ -1492,6 +1492,9 @@ "vaultTimeoutActionLogOutDesc": { "message": "Re-authentication is required to access your vault again." }, + "unlockMethodNeededToChangeTimeoutActionDesc": { + "message": "Set up an unlock method to change your vault timeout action." + }, "lock": { "message": "Lock", "description": "Verb form: to make secure or inaccesible by" @@ -1512,12 +1515,6 @@ "permanentlyDeletedItem": { "message": "Item permanently deleted" }, - "restoreItem": { - "message": "Restore item" - }, - "restoreItemConfirmation": { - "message": "Are you sure you want to restore this item?" - }, "restoredItem": { "message": "Item restored" }, @@ -2112,8 +2109,8 @@ "logInWithAnotherDevice": { "message": "Log in with another device" }, - "logInInitiated": { - "message": "Log in initiated" + "loginInitiated": { + "message": "Login initiated" }, "notificationSentDevice": { "message": "A notification has been sent to your device." @@ -2252,21 +2249,171 @@ "windowsBiometricUpdateWarningTitle": { "message": "Recommended Settings Update" }, + "deviceApprovalRequired": { + "message": "Device approval required. Select an approval option below:" + }, + "rememberThisDevice": { + "message": "Remember this device" + }, + "uncheckIfPublicDevice": { + "message": "Uncheck if using a public device" + }, + "approveFromYourOtherDevice": { + "message": "Approve from your other device" + }, + "requestAdminApproval": { + "message": "Request admin approval" + }, + "approveWithMasterPassword": { + "message": "Approve with master password" + }, "region": { "message": "Region" }, + "ssoIdentifierRequired": { + "message": "Organization SSO identifier is required." + }, "eu": { "message": "EU", "description": "European Union" }, - "us": { - "message": "US", - "description": "United States" + "loggingInOn": { + "message": "Logging in on" + }, + "usDomain": { + "message": "bitwarden.com" + }, + "euDomain": { + "message": "bitwarden.eu" }, "selfHosted": { "message": "Self-hosted" }, "accessDenied": { "message": "Access denied. You do not have permission to view this page." + }, + "accountSuccessfullyCreated": { + "message": "Account successfully created!" + }, + "adminApprovalRequested": { + "message": "Admin approval requested" + }, + "adminApprovalRequestSentToAdmins": { + "message": "Your request has been sent to your admin." + }, + "youWillBeNotifiedOnceApproved": { + "message": "You will be notified once approved." + }, + "troubleLoggingIn": { + "message": "Trouble logging in?" + }, + "loginApproved": { + "message": "Login approved" + }, + "userEmailMissing": { + "message": "User email missing" + }, + "deviceTrusted": { + "message": "Device trusted" + }, + "inputRequired": { + "message": "Input is required." + }, + "required": { + "message": "required" + }, + "search": { + "message": "Search" + }, + "inputMinLength": { + "message": "Input must be at least $COUNT$ characters long.", + "placeholders": { + "count": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxLength": { + "message": "Input must not exceed $COUNT$ characters in length.", + "placeholders": { + "count": { + "content": "$1", + "example": "20" + } + } + }, + "inputForbiddenCharacters": { + "message": "The following characters are not allowed: $CHARACTERS$", + "placeholders": { + "characters": { + "content": "$1", + "example": "@, #, $, %" + } + } + }, + "inputMinValue": { + "message": "Input value must be at least $MIN$.", + "placeholders": { + "min": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxValue": { + "message": "Input value must not exceed $MAX$.", + "placeholders": { + "max": { + "content": "$1", + "example": "100" + } + } + }, + "multipleInputEmails": { + "message": "1 or more emails are invalid" + }, + "inputTrimValidator": { + "message": "Input must not contain only whitespace.", + "description": "Notification to inform the user that a form's input can't contain only whitespace." + }, + "inputEmail": { + "message": "Input is not an email address." + }, + "fieldsNeedAttention": { + "message": "$COUNT$ field(s) above need your attention.", + "placeholders": { + "count": { + "content": "$1", + "example": "4" + } + } + }, + "selectPlaceholder": { + "message": "-- Select --" + }, + "multiSelectPlaceholder": { + "message": "-- Type to filter --" + }, + "multiSelectLoading": { + "message": "Retrieving options..." + }, + "multiSelectNotFound": { + "message": "No items found" + }, + "multiSelectClearAll": { + "message": "Clear all" + }, + "plusNMore": { + "message": "+ $QUANTITY$ more", + "placeholders": { + "quantity": { + "content": "$1", + "example": "5" + } + } + }, + "submenu": { + "message": "Submenu" } } diff --git a/apps/desktop/src/locales/nl/messages.json b/apps/desktop/src/locales/nl/messages.json index 9e7834e88f1..a124cede5cf 100644 --- a/apps/desktop/src/locales/nl/messages.json +++ b/apps/desktop/src/locales/nl/messages.json @@ -1077,8 +1077,8 @@ "premiumSignUpStorage": { "message": "1 GB versleutelde opslag voor bijlagen." }, - "premiumSignUpTwoStep": { - "message": "Extra opties voor tweestapsaanmelding zoals YubiKey, FIDO U2F en Duo." + "premiumSignUpTwoStepOptions": { + "message": "Eigen opties voor tweestapsaanmelding zoals YubiKey en Duo." }, "premiumSignUpReports": { "message": "Rapportage op wachtwoordhygiëne, gezondheid van je account en gegevensinbreuk om je kluis veilig te houden." @@ -1492,6 +1492,9 @@ "vaultTimeoutActionLogOutDesc": { "message": "Om toegang te krijgen tot een uitgelogde kluis te krijgen moet je opnieuw inloggen." }, + "unlockMethodNeededToChangeTimeoutActionDesc": { + "message": "Stel een ontgrendelingsmethode in om je kluis time-out actie te wijzigen." + }, "lock": { "message": "Vergrendelen", "description": "Verb form: to make secure or inaccesible by" @@ -1512,12 +1515,6 @@ "permanentlyDeletedItem": { "message": "Definitief verwijderd item" }, - "restoreItem": { - "message": "Item herstellen" - }, - "restoreItemConfirmation": { - "message": "Weet je zeker dat je dit item wilt herstellen?" - }, "restoredItem": { "message": "Hersteld item" }, @@ -2112,7 +2109,7 @@ "logInWithAnotherDevice": { "message": "Inloggen met een ander apparaat" }, - "logInInitiated": { + "loginInitiated": { "message": "Inloggen gestart" }, "notificationSentDevice": { @@ -2252,21 +2249,171 @@ "windowsBiometricUpdateWarningTitle": { "message": "Aanbevolen instellingen" }, + "deviceApprovalRequired": { + "message": "Apparaattoestemming vereist. Kies een goedkeuringsoptie hieronder:" + }, + "rememberThisDevice": { + "message": "Dit apparaat onthouden" + }, + "uncheckIfPublicDevice": { + "message": "Uitschakelen als je openbaar apparaat gebruikt" + }, + "approveFromYourOtherDevice": { + "message": "Goedkeuren vanaf je andere apparaat" + }, + "requestAdminApproval": { + "message": "Goedkeuring van beheerder vragen" + }, + "approveWithMasterPassword": { + "message": "Goedkeuren met hoofdwachtwoord" + }, "region": { "message": "Regio" }, + "ssoIdentifierRequired": { + "message": "Organisatie SSO-identificatie vereist." + }, "eu": { "message": "EU", "description": "European Union" }, - "us": { - "message": "US", - "description": "United States" + "loggingInOn": { + "message": "Inloggen op" + }, + "usDomain": { + "message": "bitwarden.com" + }, + "euDomain": { + "message": "bitwarden.eu" }, "selfHosted": { "message": "Zelfgehost" }, "accessDenied": { "message": "Toegang geweigerd. Je hebt geen toestemming om deze pagina te bekijken." + }, + "accountSuccessfullyCreated": { + "message": "Account succesvol aangemaakt!" + }, + "adminApprovalRequested": { + "message": "Goedkeuring van beheerder aangevraagd" + }, + "adminApprovalRequestSentToAdmins": { + "message": "Je verzoek is naar je beheerder verstuurd." + }, + "youWillBeNotifiedOnceApproved": { + "message": "Je krijgt een melding zodra je bent goedgekeurd." + }, + "troubleLoggingIn": { + "message": "Problemen met inloggen?" + }, + "loginApproved": { + "message": "Inloggen goedgekeurd" + }, + "userEmailMissing": { + "message": "Gebruikerse-mailadres ontbreekt" + }, + "deviceTrusted": { + "message": "Vertrouwd apparaat" + }, + "inputRequired": { + "message": "Invoer vereist." + }, + "required": { + "message": "vereist" + }, + "search": { + "message": "Zoeken" + }, + "inputMinLength": { + "message": "Invoer moet minimaal $COUNT$ tekens lang zijn.", + "placeholders": { + "count": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxLength": { + "message": "Invoer mag niet meer dan $COUNT$ tekens lang zijn.", + "placeholders": { + "count": { + "content": "$1", + "example": "20" + } + } + }, + "inputForbiddenCharacters": { + "message": "De volgende tekens zijn niet toegestaan: $CHARACTERS$", + "placeholders": { + "characters": { + "content": "$1", + "example": "@, #, $, %" + } + } + }, + "inputMinValue": { + "message": "Invoer moet minimaal $MIN$ zijn.", + "placeholders": { + "min": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxValue": { + "message": "Invoer mag niet hoger zijn dan $MAX$.", + "placeholders": { + "max": { + "content": "$1", + "example": "100" + } + } + }, + "multipleInputEmails": { + "message": "Een of meer e-mailadressen zijn ongeldig" + }, + "inputTrimValidator": { + "message": "Invoer mag niet alleen witruimte bevatten.", + "description": "Notification to inform the user that a form's input can't contain only whitespace." + }, + "inputEmail": { + "message": "Invoer is geen e-mailadres." + }, + "fieldsNeedAttention": { + "message": "$COUNT$ veld(en) hierboven hebben je aandacht nodig.", + "placeholders": { + "count": { + "content": "$1", + "example": "4" + } + } + }, + "selectPlaceholder": { + "message": "-- Selecteer --" + }, + "multiSelectPlaceholder": { + "message": "-- Type om te filteren --" + }, + "multiSelectLoading": { + "message": "Opties ophalen..." + }, + "multiSelectNotFound": { + "message": "Geen items gevonden" + }, + "multiSelectClearAll": { + "message": "Alles wissen" + }, + "plusNMore": { + "message": "+ $QUANTITY$ meer", + "placeholders": { + "quantity": { + "content": "$1", + "example": "5" + } + } + }, + "submenu": { + "message": "Submenu" } } diff --git a/apps/desktop/src/locales/nn/messages.json b/apps/desktop/src/locales/nn/messages.json index d0750b4d2c1..46dee838abf 100644 --- a/apps/desktop/src/locales/nn/messages.json +++ b/apps/desktop/src/locales/nn/messages.json @@ -1077,8 +1077,8 @@ "premiumSignUpStorage": { "message": "1 GB encrypted storage for file attachments." }, - "premiumSignUpTwoStep": { - "message": "Additional two-step login options such as YubiKey, FIDO U2F, and Duo." + "premiumSignUpTwoStepOptions": { + "message": "Proprietary two-step login options such as YubiKey and Duo." }, "premiumSignUpReports": { "message": "Password hygiene, account health, and data breach reports to keep your vault safe." @@ -1492,6 +1492,9 @@ "vaultTimeoutActionLogOutDesc": { "message": "Re-authentication is required to access your vault again." }, + "unlockMethodNeededToChangeTimeoutActionDesc": { + "message": "Set up an unlock method to change your vault timeout action." + }, "lock": { "message": "Lås", "description": "Verb form: to make secure or inaccesible by" @@ -1512,12 +1515,6 @@ "permanentlyDeletedItem": { "message": "Item permanently deleted" }, - "restoreItem": { - "message": "Restore item" - }, - "restoreItemConfirmation": { - "message": "Are you sure you want to restore this item?" - }, "restoredItem": { "message": "Item restored" }, @@ -2112,8 +2109,8 @@ "logInWithAnotherDevice": { "message": "Log in with another device" }, - "logInInitiated": { - "message": "Log in initiated" + "loginInitiated": { + "message": "Login initiated" }, "notificationSentDevice": { "message": "A notification has been sent to your device." @@ -2252,21 +2249,171 @@ "windowsBiometricUpdateWarningTitle": { "message": "Recommended Settings Update" }, + "deviceApprovalRequired": { + "message": "Device approval required. Select an approval option below:" + }, + "rememberThisDevice": { + "message": "Remember this device" + }, + "uncheckIfPublicDevice": { + "message": "Uncheck if using a public device" + }, + "approveFromYourOtherDevice": { + "message": "Approve from your other device" + }, + "requestAdminApproval": { + "message": "Request admin approval" + }, + "approveWithMasterPassword": { + "message": "Approve with master password" + }, "region": { "message": "Region" }, + "ssoIdentifierRequired": { + "message": "Organization SSO identifier is required." + }, "eu": { "message": "EU", "description": "European Union" }, - "us": { - "message": "US", - "description": "United States" + "loggingInOn": { + "message": "Logging in on" + }, + "usDomain": { + "message": "bitwarden.com" + }, + "euDomain": { + "message": "bitwarden.eu" }, "selfHosted": { "message": "Self-hosted" }, "accessDenied": { "message": "Access denied. You do not have permission to view this page." + }, + "accountSuccessfullyCreated": { + "message": "Account successfully created!" + }, + "adminApprovalRequested": { + "message": "Admin approval requested" + }, + "adminApprovalRequestSentToAdmins": { + "message": "Your request has been sent to your admin." + }, + "youWillBeNotifiedOnceApproved": { + "message": "You will be notified once approved." + }, + "troubleLoggingIn": { + "message": "Trouble logging in?" + }, + "loginApproved": { + "message": "Login approved" + }, + "userEmailMissing": { + "message": "User email missing" + }, + "deviceTrusted": { + "message": "Device trusted" + }, + "inputRequired": { + "message": "Input is required." + }, + "required": { + "message": "required" + }, + "search": { + "message": "Search" + }, + "inputMinLength": { + "message": "Input must be at least $COUNT$ characters long.", + "placeholders": { + "count": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxLength": { + "message": "Input must not exceed $COUNT$ characters in length.", + "placeholders": { + "count": { + "content": "$1", + "example": "20" + } + } + }, + "inputForbiddenCharacters": { + "message": "The following characters are not allowed: $CHARACTERS$", + "placeholders": { + "characters": { + "content": "$1", + "example": "@, #, $, %" + } + } + }, + "inputMinValue": { + "message": "Input value must be at least $MIN$.", + "placeholders": { + "min": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxValue": { + "message": "Input value must not exceed $MAX$.", + "placeholders": { + "max": { + "content": "$1", + "example": "100" + } + } + }, + "multipleInputEmails": { + "message": "1 or more emails are invalid" + }, + "inputTrimValidator": { + "message": "Input must not contain only whitespace.", + "description": "Notification to inform the user that a form's input can't contain only whitespace." + }, + "inputEmail": { + "message": "Input is not an email address." + }, + "fieldsNeedAttention": { + "message": "$COUNT$ field(s) above need your attention.", + "placeholders": { + "count": { + "content": "$1", + "example": "4" + } + } + }, + "selectPlaceholder": { + "message": "-- Select --" + }, + "multiSelectPlaceholder": { + "message": "-- Type to filter --" + }, + "multiSelectLoading": { + "message": "Retrieving options..." + }, + "multiSelectNotFound": { + "message": "No items found" + }, + "multiSelectClearAll": { + "message": "Clear all" + }, + "plusNMore": { + "message": "+ $QUANTITY$ more", + "placeholders": { + "quantity": { + "content": "$1", + "example": "5" + } + } + }, + "submenu": { + "message": "Submenu" } } diff --git a/apps/desktop/src/locales/or/messages.json b/apps/desktop/src/locales/or/messages.json index 02495ffc371..d6cf45a696e 100644 --- a/apps/desktop/src/locales/or/messages.json +++ b/apps/desktop/src/locales/or/messages.json @@ -1077,8 +1077,8 @@ "premiumSignUpStorage": { "message": "1 GB encrypted storage for file attachments." }, - "premiumSignUpTwoStep": { - "message": "Additional two-step login options such as YubiKey, FIDO U2F, and Duo." + "premiumSignUpTwoStepOptions": { + "message": "Proprietary two-step login options such as YubiKey and Duo." }, "premiumSignUpReports": { "message": "Password hygiene, account health, and data breach reports to keep your vault safe." @@ -1492,6 +1492,9 @@ "vaultTimeoutActionLogOutDesc": { "message": "Re-authentication is required to access your vault again." }, + "unlockMethodNeededToChangeTimeoutActionDesc": { + "message": "Set up an unlock method to change your vault timeout action." + }, "lock": { "message": "Lock", "description": "Verb form: to make secure or inaccesible by" @@ -1512,12 +1515,6 @@ "permanentlyDeletedItem": { "message": "Item permanently deleted" }, - "restoreItem": { - "message": "Restore item" - }, - "restoreItemConfirmation": { - "message": "Are you sure you want to restore this item?" - }, "restoredItem": { "message": "Item restored" }, @@ -2112,8 +2109,8 @@ "logInWithAnotherDevice": { "message": "Log in with another device" }, - "logInInitiated": { - "message": "Log in initiated" + "loginInitiated": { + "message": "Login initiated" }, "notificationSentDevice": { "message": "A notification has been sent to your device." @@ -2252,21 +2249,171 @@ "windowsBiometricUpdateWarningTitle": { "message": "Recommended Settings Update" }, + "deviceApprovalRequired": { + "message": "Device approval required. Select an approval option below:" + }, + "rememberThisDevice": { + "message": "Remember this device" + }, + "uncheckIfPublicDevice": { + "message": "Uncheck if using a public device" + }, + "approveFromYourOtherDevice": { + "message": "Approve from your other device" + }, + "requestAdminApproval": { + "message": "Request admin approval" + }, + "approveWithMasterPassword": { + "message": "Approve with master password" + }, "region": { "message": "Region" }, + "ssoIdentifierRequired": { + "message": "Organization SSO identifier is required." + }, "eu": { "message": "EU", "description": "European Union" }, - "us": { - "message": "US", - "description": "United States" + "loggingInOn": { + "message": "Logging in on" + }, + "usDomain": { + "message": "bitwarden.com" + }, + "euDomain": { + "message": "bitwarden.eu" }, "selfHosted": { "message": "Self-hosted" }, "accessDenied": { "message": "Access denied. You do not have permission to view this page." + }, + "accountSuccessfullyCreated": { + "message": "Account successfully created!" + }, + "adminApprovalRequested": { + "message": "Admin approval requested" + }, + "adminApprovalRequestSentToAdmins": { + "message": "Your request has been sent to your admin." + }, + "youWillBeNotifiedOnceApproved": { + "message": "You will be notified once approved." + }, + "troubleLoggingIn": { + "message": "Trouble logging in?" + }, + "loginApproved": { + "message": "Login approved" + }, + "userEmailMissing": { + "message": "User email missing" + }, + "deviceTrusted": { + "message": "Device trusted" + }, + "inputRequired": { + "message": "Input is required." + }, + "required": { + "message": "required" + }, + "search": { + "message": "Search" + }, + "inputMinLength": { + "message": "Input must be at least $COUNT$ characters long.", + "placeholders": { + "count": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxLength": { + "message": "Input must not exceed $COUNT$ characters in length.", + "placeholders": { + "count": { + "content": "$1", + "example": "20" + } + } + }, + "inputForbiddenCharacters": { + "message": "The following characters are not allowed: $CHARACTERS$", + "placeholders": { + "characters": { + "content": "$1", + "example": "@, #, $, %" + } + } + }, + "inputMinValue": { + "message": "Input value must be at least $MIN$.", + "placeholders": { + "min": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxValue": { + "message": "Input value must not exceed $MAX$.", + "placeholders": { + "max": { + "content": "$1", + "example": "100" + } + } + }, + "multipleInputEmails": { + "message": "1 or more emails are invalid" + }, + "inputTrimValidator": { + "message": "Input must not contain only whitespace.", + "description": "Notification to inform the user that a form's input can't contain only whitespace." + }, + "inputEmail": { + "message": "Input is not an email address." + }, + "fieldsNeedAttention": { + "message": "$COUNT$ field(s) above need your attention.", + "placeholders": { + "count": { + "content": "$1", + "example": "4" + } + } + }, + "selectPlaceholder": { + "message": "-- Select --" + }, + "multiSelectPlaceholder": { + "message": "-- Type to filter --" + }, + "multiSelectLoading": { + "message": "Retrieving options..." + }, + "multiSelectNotFound": { + "message": "No items found" + }, + "multiSelectClearAll": { + "message": "Clear all" + }, + "plusNMore": { + "message": "+ $QUANTITY$ more", + "placeholders": { + "quantity": { + "content": "$1", + "example": "5" + } + } + }, + "submenu": { + "message": "Submenu" } } diff --git a/apps/desktop/src/locales/pl/messages.json b/apps/desktop/src/locales/pl/messages.json index 2cd26384181..ce85ae771dd 100644 --- a/apps/desktop/src/locales/pl/messages.json +++ b/apps/desktop/src/locales/pl/messages.json @@ -1077,8 +1077,8 @@ "premiumSignUpStorage": { "message": "1 GB miejsca na zaszyfrowane załączniki." }, - "premiumSignUpTwoStep": { - "message": "Dodatkowe opcje logowania dwustopniowego, takie jak klucze YubiKey, FIDO U2F oraz Duo." + "premiumSignUpTwoStepOptions": { + "message": "Własnościowe opcje logowania dwuetapowego, takie jak YubiKey i Duo." }, "premiumSignUpReports": { "message": "Raporty bezpieczeństwa haseł, stanu konta i raporty wycieków danych, aby Twoje dane były bezpieczne." @@ -1492,6 +1492,9 @@ "vaultTimeoutActionLogOutDesc": { "message": "Zaloguj się ponownie, aby uzyskać dostęp do sejfu." }, + "unlockMethodNeededToChangeTimeoutActionDesc": { + "message": "Ustaw metodę odblokowania, aby zmienić czas blokowania sejfu." + }, "lock": { "message": "Zablokuj", "description": "Verb form: to make secure or inaccesible by" @@ -1512,12 +1515,6 @@ "permanentlyDeletedItem": { "message": "Element został trwale usunięty" }, - "restoreItem": { - "message": "Przywróć element" - }, - "restoreItemConfirmation": { - "message": "Czy na pewno chcesz przywrócić ten element?" - }, "restoredItem": { "message": "Element został przywrócony" }, @@ -2112,7 +2109,7 @@ "logInWithAnotherDevice": { "message": "Logowanie innym urządzeniem" }, - "logInInitiated": { + "loginInitiated": { "message": "Logowanie rozpoczęte" }, "notificationSentDevice": { @@ -2252,21 +2249,171 @@ "windowsBiometricUpdateWarningTitle": { "message": "Aktualizacja ustawień zalecanych" }, + "deviceApprovalRequired": { + "message": "Wymagane zatwierdzenie urządzenia. Wybierz opcję zatwierdzenia poniżej:" + }, + "rememberThisDevice": { + "message": "Zapamiętaj to urządzenie" + }, + "uncheckIfPublicDevice": { + "message": "Odznacz jeśli używasz publicznego urządzenia" + }, + "approveFromYourOtherDevice": { + "message": "Zatwierdź z twojego innego urządzenia" + }, + "requestAdminApproval": { + "message": "Poproś administratora o zatwierdzenie" + }, + "approveWithMasterPassword": { + "message": "Zatwierdź przy użyciu hasła głównego" + }, "region": { "message": "Region" }, + "ssoIdentifierRequired": { + "message": "Identyfikator organizacji jest wymagany." + }, "eu": { "message": "UE", "description": "European Union" }, - "us": { - "message": "US", - "description": "United States" + "loggingInOn": { + "message": "Logowanie do" + }, + "usDomain": { + "message": "bitwarden.com" + }, + "euDomain": { + "message": "bitwarden.eu" }, "selfHosted": { "message": "Samodzielnie hostowany" }, "accessDenied": { "message": "Odmowa dostępu. Nie masz uprawnień do przeglądania tej strony." + }, + "accountSuccessfullyCreated": { + "message": "Konto pomyślnie utworzone!" + }, + "adminApprovalRequested": { + "message": "Poproszono administratora o zatwierdzenie" + }, + "adminApprovalRequestSentToAdmins": { + "message": "Twoja prośba została wysłana do Twojego administratora." + }, + "youWillBeNotifiedOnceApproved": { + "message": "Zostaniesz powiadomiony po zatwierdzeniu." + }, + "troubleLoggingIn": { + "message": "Problem z zalogowaniem?" + }, + "loginApproved": { + "message": "Logowanie zatwierdzone" + }, + "userEmailMissing": { + "message": "Brak adresu e-mail użytkownika" + }, + "deviceTrusted": { + "message": "Zaufano urządzeniu" + }, + "inputRequired": { + "message": "Dane wejściowe są wymagane." + }, + "required": { + "message": "wymagane" + }, + "search": { + "message": "Szukaj" + }, + "inputMinLength": { + "message": "Dane wejściowe muszą zawierać co najmniej $COUNT$ znaki(-ów).", + "placeholders": { + "count": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxLength": { + "message": "Dane wejściowe nie mogą przekraczać długości $COUNT$ znaków.", + "placeholders": { + "count": { + "content": "$1", + "example": "20" + } + } + }, + "inputForbiddenCharacters": { + "message": "Następujące znaki są niedozwolone: $CHARACTERS$", + "placeholders": { + "characters": { + "content": "$1", + "example": "@, #, $, %" + } + } + }, + "inputMinValue": { + "message": "Wartość wejściowa musi wynosić co najmniej $MIN$.", + "placeholders": { + "min": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxValue": { + "message": "Wartość wejściowa nie może przekraczać $MAX$.", + "placeholders": { + "max": { + "content": "$1", + "example": "100" + } + } + }, + "multipleInputEmails": { + "message": "Co najmniej 1 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." + }, + "fieldsNeedAttention": { + "message": "Pola powyżej wymagające Twojej uwagi: $COUNT$.", + "placeholders": { + "count": { + "content": "$1", + "example": "4" + } + } + }, + "selectPlaceholder": { + "message": "-- Wybierz --" + }, + "multiSelectPlaceholder": { + "message": "-- Pisz, aby filtrować --" + }, + "multiSelectLoading": { + "message": "Pobieranie opcji..." + }, + "multiSelectNotFound": { + "message": "Nie znaleziono żadnych pozycji" + }, + "multiSelectClearAll": { + "message": "Wyczyść wszystko" + }, + "plusNMore": { + "message": "+ $QUANTITY$ więcej", + "placeholders": { + "quantity": { + "content": "$1", + "example": "5" + } + } + }, + "submenu": { + "message": "Podmenu" } } diff --git a/apps/desktop/src/locales/pt_BR/messages.json b/apps/desktop/src/locales/pt_BR/messages.json index 6db0402ba44..8e3aac885c3 100644 --- a/apps/desktop/src/locales/pt_BR/messages.json +++ b/apps/desktop/src/locales/pt_BR/messages.json @@ -1077,8 +1077,8 @@ "premiumSignUpStorage": { "message": "1 GB de armazenamento de arquivos encriptados." }, - "premiumSignUpTwoStep": { - "message": "Opções de autenticação em duas etapas adicionais como YubiKey, FIDO U2F, e Duo." + "premiumSignUpTwoStepOptions": { + "message": "Proprietary two-step login options such as YubiKey and Duo." }, "premiumSignUpReports": { "message": "Higiene de senha, saúde da conta, e relatórios sobre violação de dados para manter o seu cofre seguro." @@ -1492,6 +1492,9 @@ "vaultTimeoutActionLogOutDesc": { "message": "Uma sessão encerrada com o cofre requer que você autentique-se novamente para acessá-lo de novo." }, + "unlockMethodNeededToChangeTimeoutActionDesc": { + "message": "Set up an unlock method to change your vault timeout action." + }, "lock": { "message": "Bloquear", "description": "Verb form: to make secure or inaccesible by" @@ -1512,12 +1515,6 @@ "permanentlyDeletedItem": { "message": "Item Permanentemente Excluído" }, - "restoreItem": { - "message": "Restaurar Item" - }, - "restoreItemConfirmation": { - "message": "Você tem certeza que deseja restaurar esse item?" - }, "restoredItem": { "message": "Item Restaurado" }, @@ -2112,8 +2109,8 @@ "logInWithAnotherDevice": { "message": "Fazer login com outro dispositivo" }, - "logInInitiated": { - "message": "Login iniciado" + "loginInitiated": { + "message": "Login initiated" }, "notificationSentDevice": { "message": "Uma notificação foi enviada para seu dispositivo." @@ -2252,21 +2249,171 @@ "windowsBiometricUpdateWarningTitle": { "message": "Recommended Settings Update" }, + "deviceApprovalRequired": { + "message": "Device approval required. Select an approval option below:" + }, + "rememberThisDevice": { + "message": "Remember this device" + }, + "uncheckIfPublicDevice": { + "message": "Uncheck if using a public device" + }, + "approveFromYourOtherDevice": { + "message": "Approve from your other device" + }, + "requestAdminApproval": { + "message": "Request admin approval" + }, + "approveWithMasterPassword": { + "message": "Approve with master password" + }, "region": { "message": "Region" }, + "ssoIdentifierRequired": { + "message": "Organization SSO identifier is required." + }, "eu": { "message": "EU", "description": "European Union" }, - "us": { - "message": "US", - "description": "United States" + "loggingInOn": { + "message": "Logging in on" + }, + "usDomain": { + "message": "bitwarden.com" + }, + "euDomain": { + "message": "bitwarden.eu" }, "selfHosted": { "message": "Self-hosted" }, "accessDenied": { "message": "Access denied. You do not have permission to view this page." + }, + "accountSuccessfullyCreated": { + "message": "Account successfully created!" + }, + "adminApprovalRequested": { + "message": "Admin approval requested" + }, + "adminApprovalRequestSentToAdmins": { + "message": "Your request has been sent to your admin." + }, + "youWillBeNotifiedOnceApproved": { + "message": "You will be notified once approved." + }, + "troubleLoggingIn": { + "message": "Trouble logging in?" + }, + "loginApproved": { + "message": "Login approved" + }, + "userEmailMissing": { + "message": "User email missing" + }, + "deviceTrusted": { + "message": "Device trusted" + }, + "inputRequired": { + "message": "Input is required." + }, + "required": { + "message": "required" + }, + "search": { + "message": "Search" + }, + "inputMinLength": { + "message": "Input must be at least $COUNT$ characters long.", + "placeholders": { + "count": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxLength": { + "message": "Input must not exceed $COUNT$ characters in length.", + "placeholders": { + "count": { + "content": "$1", + "example": "20" + } + } + }, + "inputForbiddenCharacters": { + "message": "The following characters are not allowed: $CHARACTERS$", + "placeholders": { + "characters": { + "content": "$1", + "example": "@, #, $, %" + } + } + }, + "inputMinValue": { + "message": "Input value must be at least $MIN$.", + "placeholders": { + "min": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxValue": { + "message": "Input value must not exceed $MAX$.", + "placeholders": { + "max": { + "content": "$1", + "example": "100" + } + } + }, + "multipleInputEmails": { + "message": "1 or more emails are invalid" + }, + "inputTrimValidator": { + "message": "Input must not contain only whitespace.", + "description": "Notification to inform the user that a form's input can't contain only whitespace." + }, + "inputEmail": { + "message": "Input is not an email address." + }, + "fieldsNeedAttention": { + "message": "$COUNT$ field(s) above need your attention.", + "placeholders": { + "count": { + "content": "$1", + "example": "4" + } + } + }, + "selectPlaceholder": { + "message": "-- Select --" + }, + "multiSelectPlaceholder": { + "message": "-- Type to filter --" + }, + "multiSelectLoading": { + "message": "Retrieving options..." + }, + "multiSelectNotFound": { + "message": "No items found" + }, + "multiSelectClearAll": { + "message": "Clear all" + }, + "plusNMore": { + "message": "+ $QUANTITY$ more", + "placeholders": { + "quantity": { + "content": "$1", + "example": "5" + } + } + }, + "submenu": { + "message": "Submenu" } } diff --git a/apps/desktop/src/locales/pt_PT/messages.json b/apps/desktop/src/locales/pt_PT/messages.json index 27bb153abeb..52188383594 100644 --- a/apps/desktop/src/locales/pt_PT/messages.json +++ b/apps/desktop/src/locales/pt_PT/messages.json @@ -1077,8 +1077,8 @@ "premiumSignUpStorage": { "message": "1 GB de armazenamento encriptado para anexos de ficheiros." }, - "premiumSignUpTwoStep": { - "message": "Opções adicionais de verificação de dois passos, como YubiKey, FIDO U2F e Duo." + "premiumSignUpTwoStepOptions": { + "message": "Proprietary two-step login options such as YubiKey and Duo." }, "premiumSignUpReports": { "message": "Higiene de palavras-passe, saúde da conta e relatórios de violação de dados para manter o seu cofre seguro." @@ -1284,7 +1284,7 @@ "description": "ex. Date this item was created" }, "datePasswordUpdated": { - "message": "Palavra-passe atualizada", + "message": "Palavra-passe atualizada a", "description": "ex. Date this password was updated" }, "exportVault": { @@ -1492,6 +1492,9 @@ "vaultTimeoutActionLogOutDesc": { "message": "É necessária uma nova autenticação para aceder novamente ao seu cofre." }, + "unlockMethodNeededToChangeTimeoutActionDesc": { + "message": "Configure um método de desbloqueio para alterar a ação de tempo limite do seu cofre." + }, "lock": { "message": "Bloquear", "description": "Verb form: to make secure or inaccesible by" @@ -1512,12 +1515,6 @@ "permanentlyDeletedItem": { "message": "Item eliminado permanentemente" }, - "restoreItem": { - "message": "Restaurar item" - }, - "restoreItemConfirmation": { - "message": "Tem a certeza de que pretende restaurar este item?" - }, "restoredItem": { "message": "Item restaurado" }, @@ -2112,7 +2109,7 @@ "logInWithAnotherDevice": { "message": "Iniciar sessão com outro dispositivo" }, - "logInInitiated": { + "loginInitiated": { "message": "A preparar o início de sessão" }, "notificationSentDevice": { @@ -2125,7 +2122,7 @@ "message": "Frase de impressão digital" }, "needAnotherOption": { - "message": "O início de sessão com o dispositivo deve ser ativado nas definições da aplicação Bitwarden. Necessita de outra opção?" + "message": "O início de sessão com o dispositivo deve ser ativado nas definições da aplicação Bitwarden. Precisa de outra opção?" }, "viewAllLoginOptions": { "message": "Ver todas as opções de início de sessão" @@ -2252,21 +2249,171 @@ "windowsBiometricUpdateWarningTitle": { "message": "Atualização de definições recomendadas" }, + "deviceApprovalRequired": { + "message": "É necessária a aprovação do dispositivo. Selecione uma opção de aprovação abaixo:" + }, + "rememberThisDevice": { + "message": "Lembrar este dispositivo" + }, + "uncheckIfPublicDevice": { + "message": "Desmarcar se estiver a utilizar um dispositivo público" + }, + "approveFromYourOtherDevice": { + "message": "Aprovar a partir do seu outro dispositivo" + }, + "requestAdminApproval": { + "message": "Pedir aprovação do administrador" + }, + "approveWithMasterPassword": { + "message": "Aprovar com a palavra-passe mestra" + }, "region": { "message": "Região" }, + "ssoIdentifierRequired": { + "message": "É necessário o identificador de SSO da organização." + }, "eu": { "message": "UE", "description": "European Union" }, - "us": { - "message": "EUA", - "description": "United States" + "loggingInOn": { + "message": "A iniciar sessão em" + }, + "usDomain": { + "message": "bitwarden.com" + }, + "euDomain": { + "message": "bitwarden.eu" }, "selfHosted": { "message": "Auto-hospedado" }, "accessDenied": { "message": "Acesso negado. Não tem permissão para visualizar esta página." + }, + "accountSuccessfullyCreated": { + "message": "Conta criada com sucesso!" + }, + "adminApprovalRequested": { + "message": "Aprovação do administrador pedida" + }, + "adminApprovalRequestSentToAdmins": { + "message": "O seu pedido foi enviado ao seu administrador." + }, + "youWillBeNotifiedOnceApproved": { + "message": "Será notificado quando for aprovado." + }, + "troubleLoggingIn": { + "message": "Problemas a iniciar sessão?" + }, + "loginApproved": { + "message": "Início de sessão aprovado" + }, + "userEmailMissing": { + "message": "E-mail do utilizador em falta" + }, + "deviceTrusted": { + "message": "Dispositivo de confiança" + }, + "inputRequired": { + "message": "Campo necessário." + }, + "required": { + "message": "necessário" + }, + "search": { + "message": "Procurar" + }, + "inputMinLength": { + "message": "O campo deve ter pelo menos $COUNT$ caracteres.", + "placeholders": { + "count": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxLength": { + "message": "O campo não pode exceder os $COUNT$ caracteres de comprimento.", + "placeholders": { + "count": { + "content": "$1", + "example": "20" + } + } + }, + "inputForbiddenCharacters": { + "message": "Não são permitidos os seguintes caracteres: $CHARACTERS$", + "placeholders": { + "characters": { + "content": "$1", + "example": "@, #, $, %" + } + } + }, + "inputMinValue": { + "message": "O valor do campo tem de ser, pelo menos, $MIN$ caracteres.", + "placeholders": { + "min": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxValue": { + "message": "O valor do campo não pode exceder os $MAX$ caracteres.", + "placeholders": { + "max": { + "content": "$1", + "example": "100" + } + } + }, + "multipleInputEmails": { + "message": "1 ou mais e-mails são inválidos" + }, + "inputTrimValidator": { + "message": "O campo não deve conter apenas espaços em branco.", + "description": "Notification to inform the user that a form's input can't contain only whitespace." + }, + "inputEmail": { + "message": "O campo não é um endereço de e-mail." + }, + "fieldsNeedAttention": { + "message": "$COUNT$ campo(s) acima precisa(m) da sua atenção.", + "placeholders": { + "count": { + "content": "$1", + "example": "4" + } + } + }, + "selectPlaceholder": { + "message": "-- Selecionar --" + }, + "multiSelectPlaceholder": { + "message": "-- Escreva para filtrar --" + }, + "multiSelectLoading": { + "message": "A recuperar opções..." + }, + "multiSelectNotFound": { + "message": "Nenhum item encontrado" + }, + "multiSelectClearAll": { + "message": "Limpar tudo" + }, + "plusNMore": { + "message": "+ $QUANTITY$", + "placeholders": { + "quantity": { + "content": "$1", + "example": "5" + } + } + }, + "submenu": { + "message": "Submenu" } } diff --git a/apps/desktop/src/locales/ro/messages.json b/apps/desktop/src/locales/ro/messages.json index e0babc049c9..ca46af9d5d5 100644 --- a/apps/desktop/src/locales/ro/messages.json +++ b/apps/desktop/src/locales/ro/messages.json @@ -1077,8 +1077,8 @@ "premiumSignUpStorage": { "message": "1 GB spațiu de stocare criptat pentru atașamente de fișiere." }, - "premiumSignUpTwoStep": { - "message": "Opțiuni adiționale de autentificare în două etape, cum ar fi YubiKey, FIDO U2F și Duo." + "premiumSignUpTwoStepOptions": { + "message": "Proprietary two-step login options such as YubiKey and Duo." }, "premiumSignUpReports": { "message": "Rapoarte privind igiena parolelor, sănătatea contului și breșele de date pentru a vă păstra seiful în siguranță." @@ -1492,6 +1492,9 @@ "vaultTimeoutActionLogOutDesc": { "message": "Este necesară o nouă autentificare pentru a vă accesa din nou seiful." }, + "unlockMethodNeededToChangeTimeoutActionDesc": { + "message": "Set up an unlock method to change your vault timeout action." + }, "lock": { "message": "Blocare", "description": "Verb form: to make secure or inaccesible by" @@ -1512,12 +1515,6 @@ "permanentlyDeletedItem": { "message": "Articol șters permanent" }, - "restoreItem": { - "message": "Restaurare articol" - }, - "restoreItemConfirmation": { - "message": "Sigur doriți să restabiliți acest articol?" - }, "restoredItem": { "message": "Articol restabilit" }, @@ -2112,8 +2109,8 @@ "logInWithAnotherDevice": { "message": "Autentificați-vă cu un alt dispozitiv" }, - "logInInitiated": { - "message": "Log in initiated" + "loginInitiated": { + "message": "Login initiated" }, "notificationSentDevice": { "message": "A notification has been sent to your device." @@ -2252,21 +2249,171 @@ "windowsBiometricUpdateWarningTitle": { "message": "Recommended Settings Update" }, + "deviceApprovalRequired": { + "message": "Device approval required. Select an approval option below:" + }, + "rememberThisDevice": { + "message": "Remember this device" + }, + "uncheckIfPublicDevice": { + "message": "Uncheck if using a public device" + }, + "approveFromYourOtherDevice": { + "message": "Approve from your other device" + }, + "requestAdminApproval": { + "message": "Request admin approval" + }, + "approveWithMasterPassword": { + "message": "Approve with master password" + }, "region": { "message": "Region" }, + "ssoIdentifierRequired": { + "message": "Organization SSO identifier is required." + }, "eu": { "message": "EU", "description": "European Union" }, - "us": { - "message": "US", - "description": "United States" + "loggingInOn": { + "message": "Logging in on" + }, + "usDomain": { + "message": "bitwarden.com" + }, + "euDomain": { + "message": "bitwarden.eu" }, "selfHosted": { "message": "Self-hosted" }, "accessDenied": { "message": "Access denied. You do not have permission to view this page." + }, + "accountSuccessfullyCreated": { + "message": "Account successfully created!" + }, + "adminApprovalRequested": { + "message": "Admin approval requested" + }, + "adminApprovalRequestSentToAdmins": { + "message": "Your request has been sent to your admin." + }, + "youWillBeNotifiedOnceApproved": { + "message": "You will be notified once approved." + }, + "troubleLoggingIn": { + "message": "Trouble logging in?" + }, + "loginApproved": { + "message": "Login approved" + }, + "userEmailMissing": { + "message": "User email missing" + }, + "deviceTrusted": { + "message": "Device trusted" + }, + "inputRequired": { + "message": "Input is required." + }, + "required": { + "message": "required" + }, + "search": { + "message": "Search" + }, + "inputMinLength": { + "message": "Input must be at least $COUNT$ characters long.", + "placeholders": { + "count": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxLength": { + "message": "Input must not exceed $COUNT$ characters in length.", + "placeholders": { + "count": { + "content": "$1", + "example": "20" + } + } + }, + "inputForbiddenCharacters": { + "message": "The following characters are not allowed: $CHARACTERS$", + "placeholders": { + "characters": { + "content": "$1", + "example": "@, #, $, %" + } + } + }, + "inputMinValue": { + "message": "Input value must be at least $MIN$.", + "placeholders": { + "min": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxValue": { + "message": "Input value must not exceed $MAX$.", + "placeholders": { + "max": { + "content": "$1", + "example": "100" + } + } + }, + "multipleInputEmails": { + "message": "1 or more emails are invalid" + }, + "inputTrimValidator": { + "message": "Input must not contain only whitespace.", + "description": "Notification to inform the user that a form's input can't contain only whitespace." + }, + "inputEmail": { + "message": "Input is not an email address." + }, + "fieldsNeedAttention": { + "message": "$COUNT$ field(s) above need your attention.", + "placeholders": { + "count": { + "content": "$1", + "example": "4" + } + } + }, + "selectPlaceholder": { + "message": "-- Select --" + }, + "multiSelectPlaceholder": { + "message": "-- Type to filter --" + }, + "multiSelectLoading": { + "message": "Retrieving options..." + }, + "multiSelectNotFound": { + "message": "No items found" + }, + "multiSelectClearAll": { + "message": "Clear all" + }, + "plusNMore": { + "message": "+ $QUANTITY$ more", + "placeholders": { + "quantity": { + "content": "$1", + "example": "5" + } + } + }, + "submenu": { + "message": "Submenu" } } diff --git a/apps/desktop/src/locales/ru/messages.json b/apps/desktop/src/locales/ru/messages.json index 0dfccf048be..7785e84f1cf 100644 --- a/apps/desktop/src/locales/ru/messages.json +++ b/apps/desktop/src/locales/ru/messages.json @@ -1077,8 +1077,8 @@ "premiumSignUpStorage": { "message": "1 ГБ зашифрованного хранилища для вложенных файлов." }, - "premiumSignUpTwoStep": { - "message": "Дополнительные варианты двухэтапной аутентификации, такие как YubiKey, FIDO U2F и Duo." + "premiumSignUpTwoStepOptions": { + "message": "Proprietary two-step login options such as YubiKey and Duo." }, "premiumSignUpReports": { "message": "Гигиена паролей, здоровье аккаунта и отчеты об утечках данных для обеспечения безопасности вашего хранилища." @@ -1492,6 +1492,9 @@ "vaultTimeoutActionLogOutDesc": { "message": "Чтобы получить доступ к хранилищу после выхода из него требуется повторная авторизация." }, + "unlockMethodNeededToChangeTimeoutActionDesc": { + "message": "Настройте способ разблокировки для изменения действия по тайм-ауту хранилища." + }, "lock": { "message": "Блокировка", "description": "Verb form: to make secure or inaccesible by" @@ -1512,12 +1515,6 @@ "permanentlyDeletedItem": { "message": "Элемент удален навсегда" }, - "restoreItem": { - "message": "Восстановить элемент" - }, - "restoreItemConfirmation": { - "message": "Вы уверены, что хотите восстановить этот элемент?" - }, "restoredItem": { "message": "Элемент восстановлен" }, @@ -1859,7 +1856,7 @@ "message": "Мастер-пароль недавно был изменен администратором вашей организации. Чтобы получить доступ к хранилищу, вы должны обновить его сейчас. В результате текущий сеанс будет завершен, потребуется повторный вход. Сеансы на других устройствах могут оставаться активными в течение одного часа." }, "updateWeakMasterPasswordWarning": { - "message": "Ваш мастер-пароль не соответствует требованиям политики вашей организации. Для доступа к хранилищу вы должны обновить свой мастер-пароль прямо сейчас. При этом текущая сессия будет завершена и потребуется повторная авторизация. Сессии на других устройствах могут оставаться активными в течение часа." + "message": "Ваш мастер-пароль не соответствует требованиям политики вашей организации. Для доступа к хранилищу вы должны обновить свой мастер-пароль прямо сейчас. При этом текущий сеанс будет завершен и потребуется повторная авторизация. Сеансы на других устройствах могут оставаться активными в течение часа." }, "hours": { "message": "Час." @@ -2112,7 +2109,7 @@ "logInWithAnotherDevice": { "message": "Войти с другого устройства" }, - "logInInitiated": { + "loginInitiated": { "message": "Вход инициирован" }, "notificationSentDevice": { @@ -2252,21 +2249,171 @@ "windowsBiometricUpdateWarningTitle": { "message": "Рекомендуемое обновление настроек" }, + "deviceApprovalRequired": { + "message": "Требуется одобрение устройства. Выберите вариант ниже:" + }, + "rememberThisDevice": { + "message": "Запомнить это устройство" + }, + "uncheckIfPublicDevice": { + "message": "Снимите флажок, если используете общедоступное устройство" + }, + "approveFromYourOtherDevice": { + "message": "Одобрить с другого устройства" + }, + "requestAdminApproval": { + "message": "Запросить одобрение администратора" + }, + "approveWithMasterPassword": { + "message": "Одобрить с мастер-паролем" + }, "region": { "message": "Регион" }, + "ssoIdentifierRequired": { + "message": "Требуется идентификатор SSO организации." + }, "eu": { "message": "Европа", "description": "European Union" }, - "us": { - "message": "США", - "description": "United States" + "loggingInOn": { + "message": "Войти на" + }, + "usDomain": { + "message": "bitwarden.com" + }, + "euDomain": { + "message": "bitwarden.eu" }, "selfHosted": { "message": "Собственный хостинг" }, "accessDenied": { "message": "Доступ запрещен. У вас нет разрешения на просмотр этой страницы." + }, + "accountSuccessfullyCreated": { + "message": "Аккаунт успешно создан!" + }, + "adminApprovalRequested": { + "message": "Запрошено одобрение администратора" + }, + "adminApprovalRequestSentToAdmins": { + "message": "Ваш запрос был отправлен администратору." + }, + "youWillBeNotifiedOnceApproved": { + "message": "Вас уведомят об одобрении." + }, + "troubleLoggingIn": { + "message": "Не удалось войти?" + }, + "loginApproved": { + "message": "Вход одобрен" + }, + "userEmailMissing": { + "message": "Отсутствует email пользователя" + }, + "deviceTrusted": { + "message": "Доверенное устройство" + }, + "inputRequired": { + "message": "Необходимо ввести данные." + }, + "required": { + "message": "обязательно" + }, + "search": { + "message": "Поиск" + }, + "inputMinLength": { + "message": "Вводимые данные должны содержать не менее $COUNT$ символов.", + "placeholders": { + "count": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxLength": { + "message": "Длина вводимых данных не должна превышать $COUNT$ символов.", + "placeholders": { + "count": { + "content": "$1", + "example": "20" + } + } + }, + "inputForbiddenCharacters": { + "message": "Не допускаются следующие символы: $CHARACTERS$", + "placeholders": { + "characters": { + "content": "$1", + "example": "@, #, $, %" + } + } + }, + "inputMinValue": { + "message": "Вводимое значение должно быть не менее $MIN$.", + "placeholders": { + "min": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxValue": { + "message": "Вводимое значение не должно превышать $MAX$.", + "placeholders": { + "max": { + "content": "$1", + "example": "100" + } + } + }, + "multipleInputEmails": { + "message": "Один или несколько адресов email недействительны" + }, + "inputTrimValidator": { + "message": "Введенные данные не должны содержать только пробелы.", + "description": "Notification to inform the user that a form's input can't contain only whitespace." + }, + "inputEmail": { + "message": "Введенные данные не являются адресом email." + }, + "fieldsNeedAttention": { + "message": "$COUNT$ поля(ей) выше требуют вашего внимания.", + "placeholders": { + "count": { + "content": "$1", + "example": "4" + } + } + }, + "selectPlaceholder": { + "message": "-- Выбрать --" + }, + "multiSelectPlaceholder": { + "message": "-- Введите для фильтрации --" + }, + "multiSelectLoading": { + "message": "Получение параметров..." + }, + "multiSelectNotFound": { + "message": "Элементов не найдено" + }, + "multiSelectClearAll": { + "message": "Очистить все" + }, + "plusNMore": { + "message": "еще + $QUANTITY$", + "placeholders": { + "quantity": { + "content": "$1", + "example": "5" + } + } + }, + "submenu": { + "message": "Подменю" } } diff --git a/apps/desktop/src/locales/si/messages.json b/apps/desktop/src/locales/si/messages.json index 7fe72ca1226..e2e5347aeb9 100644 --- a/apps/desktop/src/locales/si/messages.json +++ b/apps/desktop/src/locales/si/messages.json @@ -1077,8 +1077,8 @@ "premiumSignUpStorage": { "message": "1 GB encrypted storage for file attachments." }, - "premiumSignUpTwoStep": { - "message": "Additional two-step login options such as YubiKey, FIDO U2F, and Duo." + "premiumSignUpTwoStepOptions": { + "message": "Proprietary two-step login options such as YubiKey and Duo." }, "premiumSignUpReports": { "message": "Password hygiene, account health, and data breach reports to keep your vault safe." @@ -1492,6 +1492,9 @@ "vaultTimeoutActionLogOutDesc": { "message": "Re-authentication is required to access your vault again." }, + "unlockMethodNeededToChangeTimeoutActionDesc": { + "message": "Set up an unlock method to change your vault timeout action." + }, "lock": { "message": "Lock", "description": "Verb form: to make secure or inaccesible by" @@ -1512,12 +1515,6 @@ "permanentlyDeletedItem": { "message": "Item permanently deleted" }, - "restoreItem": { - "message": "Restore item" - }, - "restoreItemConfirmation": { - "message": "Are you sure you want to restore this item?" - }, "restoredItem": { "message": "Item restored" }, @@ -2112,8 +2109,8 @@ "logInWithAnotherDevice": { "message": "Log in with another device" }, - "logInInitiated": { - "message": "Log in initiated" + "loginInitiated": { + "message": "Login initiated" }, "notificationSentDevice": { "message": "A notification has been sent to your device." @@ -2252,21 +2249,171 @@ "windowsBiometricUpdateWarningTitle": { "message": "Recommended Settings Update" }, + "deviceApprovalRequired": { + "message": "Device approval required. Select an approval option below:" + }, + "rememberThisDevice": { + "message": "Remember this device" + }, + "uncheckIfPublicDevice": { + "message": "Uncheck if using a public device" + }, + "approveFromYourOtherDevice": { + "message": "Approve from your other device" + }, + "requestAdminApproval": { + "message": "Request admin approval" + }, + "approveWithMasterPassword": { + "message": "Approve with master password" + }, "region": { "message": "Region" }, + "ssoIdentifierRequired": { + "message": "Organization SSO identifier is required." + }, "eu": { "message": "EU", "description": "European Union" }, - "us": { - "message": "US", - "description": "United States" + "loggingInOn": { + "message": "Logging in on" + }, + "usDomain": { + "message": "bitwarden.com" + }, + "euDomain": { + "message": "bitwarden.eu" }, "selfHosted": { "message": "Self-hosted" }, "accessDenied": { "message": "Access denied. You do not have permission to view this page." + }, + "accountSuccessfullyCreated": { + "message": "Account successfully created!" + }, + "adminApprovalRequested": { + "message": "Admin approval requested" + }, + "adminApprovalRequestSentToAdmins": { + "message": "Your request has been sent to your admin." + }, + "youWillBeNotifiedOnceApproved": { + "message": "You will be notified once approved." + }, + "troubleLoggingIn": { + "message": "Trouble logging in?" + }, + "loginApproved": { + "message": "Login approved" + }, + "userEmailMissing": { + "message": "User email missing" + }, + "deviceTrusted": { + "message": "Device trusted" + }, + "inputRequired": { + "message": "Input is required." + }, + "required": { + "message": "required" + }, + "search": { + "message": "Search" + }, + "inputMinLength": { + "message": "Input must be at least $COUNT$ characters long.", + "placeholders": { + "count": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxLength": { + "message": "Input must not exceed $COUNT$ characters in length.", + "placeholders": { + "count": { + "content": "$1", + "example": "20" + } + } + }, + "inputForbiddenCharacters": { + "message": "The following characters are not allowed: $CHARACTERS$", + "placeholders": { + "characters": { + "content": "$1", + "example": "@, #, $, %" + } + } + }, + "inputMinValue": { + "message": "Input value must be at least $MIN$.", + "placeholders": { + "min": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxValue": { + "message": "Input value must not exceed $MAX$.", + "placeholders": { + "max": { + "content": "$1", + "example": "100" + } + } + }, + "multipleInputEmails": { + "message": "1 or more emails are invalid" + }, + "inputTrimValidator": { + "message": "Input must not contain only whitespace.", + "description": "Notification to inform the user that a form's input can't contain only whitespace." + }, + "inputEmail": { + "message": "Input is not an email address." + }, + "fieldsNeedAttention": { + "message": "$COUNT$ field(s) above need your attention.", + "placeholders": { + "count": { + "content": "$1", + "example": "4" + } + } + }, + "selectPlaceholder": { + "message": "-- Select --" + }, + "multiSelectPlaceholder": { + "message": "-- Type to filter --" + }, + "multiSelectLoading": { + "message": "Retrieving options..." + }, + "multiSelectNotFound": { + "message": "No items found" + }, + "multiSelectClearAll": { + "message": "Clear all" + }, + "plusNMore": { + "message": "+ $QUANTITY$ more", + "placeholders": { + "quantity": { + "content": "$1", + "example": "5" + } + } + }, + "submenu": { + "message": "Submenu" } } diff --git a/apps/desktop/src/locales/sk/messages.json b/apps/desktop/src/locales/sk/messages.json index 30418ea8ca6..41411606590 100644 --- a/apps/desktop/src/locales/sk/messages.json +++ b/apps/desktop/src/locales/sk/messages.json @@ -1077,8 +1077,8 @@ "premiumSignUpStorage": { "message": "1 GB šifrovaného úložiska." }, - "premiumSignUpTwoStep": { - "message": "Ďalšie možnosti dvojstupňového prihlásenia ako YubiKey, FIDO U2F a Duo." + "premiumSignUpTwoStepOptions": { + "message": "Proprietary two-step login options such as YubiKey and Duo." }, "premiumSignUpReports": { "message": "Správy o sile hesla, zabezpečení účtov a únikoch dát ktoré vám pomôžu udržať vaše kontá v bezpečí." @@ -1492,6 +1492,9 @@ "vaultTimeoutActionLogOutDesc": { "message": "Odhlásený trezor bude vyžadovať opätovné prihlásenie aby ste k nemu mohli pristupovať." }, + "unlockMethodNeededToChangeTimeoutActionDesc": { + "message": "Nastavte metódu odomknutia, aby ste zmenili akciu pri vypršaní času trezoru." + }, "lock": { "message": "Uzamknúť", "description": "Verb form: to make secure or inaccesible by" @@ -1512,12 +1515,6 @@ "permanentlyDeletedItem": { "message": "Položka natrvalo odstránená" }, - "restoreItem": { - "message": "Obnoviť položku" - }, - "restoreItemConfirmation": { - "message": "Naozaj chcete obnoviť túto položku?" - }, "restoredItem": { "message": "Obnovená položka" }, @@ -2112,7 +2109,7 @@ "logInWithAnotherDevice": { "message": "Prihlásenie pomocou iného zariadenia" }, - "logInInitiated": { + "loginInitiated": { "message": "Iniciované prihlásenie" }, "notificationSentDevice": { @@ -2252,21 +2249,171 @@ "windowsBiometricUpdateWarningTitle": { "message": "Odporúčaná aktualizácia nastavenia" }, + "deviceApprovalRequired": { + "message": "Vyžaduje sa schválenie zariadenia. Vyberte možnosť schválenia nižšie:" + }, + "rememberThisDevice": { + "message": "Zapamätať si toto zariadenie" + }, + "uncheckIfPublicDevice": { + "message": "Odčiarknite, ak používate verejné zariadenie" + }, + "approveFromYourOtherDevice": { + "message": "Schváliť z iného zariadenia" + }, + "requestAdminApproval": { + "message": "Žiadosť o schválenie správcom" + }, + "approveWithMasterPassword": { + "message": "Schváliť pomocou hlavného hesla" + }, "region": { "message": "Región" }, + "ssoIdentifierRequired": { + "message": "Pole identifikátora SSO je povinné." + }, "eu": { "message": "EÚ", "description": "European Union" }, - "us": { - "message": "USA", - "description": "United States" + "loggingInOn": { + "message": "Prihlásenie na" + }, + "usDomain": { + "message": "bitwarden.com" + }, + "euDomain": { + "message": "bitwarden.eu" }, "selfHosted": { "message": "Vlastný hosting" }, "accessDenied": { "message": "Prístup zamietnutý. Nemáte oprávnenie na zobrazenie tejto stránky." + }, + "accountSuccessfullyCreated": { + "message": "Účet bol úspešne vytvorený!" + }, + "adminApprovalRequested": { + "message": "Vyžaduje sa schválenie správcom" + }, + "adminApprovalRequestSentToAdmins": { + "message": "Vaša žiadosť bola odoslaná správcovi." + }, + "youWillBeNotifiedOnceApproved": { + "message": "Po schválení budete informovaný." + }, + "troubleLoggingIn": { + "message": "Máte problémy s prihlásením?" + }, + "loginApproved": { + "message": "Schválené prihlásenie" + }, + "userEmailMissing": { + "message": "Chýba e-mail používateľa" + }, + "deviceTrusted": { + "message": "Dôveryhodné zariadenie" + }, + "inputRequired": { + "message": "Vstup je povinný." + }, + "required": { + "message": "povinné" + }, + "search": { + "message": "Hladať" + }, + "inputMinLength": { + "message": "Vstup musí mať aspoň $COUNT$ znakov.", + "placeholders": { + "count": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxLength": { + "message": "Nemôžete zadať viac než $COUNT$ znakov.", + "placeholders": { + "count": { + "content": "$1", + "example": "20" + } + } + }, + "inputForbiddenCharacters": { + "message": "Tieto znaky nie sú povolené: $CHARACTERS$", + "placeholders": { + "characters": { + "content": "$1", + "example": "@, #, $, %" + } + } + }, + "inputMinValue": { + "message": "Hodnota musí byť aspoň $MIN$.", + "placeholders": { + "min": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxValue": { + "message": "Zadaná hodnota nesmie prekročiť $MAX$.", + "placeholders": { + "max": { + "content": "$1", + "example": "100" + } + } + }, + "multipleInputEmails": { + "message": "1 alebo viac e-mailov je neplatných" + }, + "inputTrimValidator": { + "message": "Vstup nesmie obsahovať iba prázdne znaky.", + "description": "Notification to inform the user that a form's input can't contain only whitespace." + }, + "inputEmail": { + "message": "Vstupom nie je e-mailová adresa." + }, + "fieldsNeedAttention": { + "message": "Niektoré polia ($COUNT$) vyžadujú vašu pozornosť.", + "placeholders": { + "count": { + "content": "$1", + "example": "4" + } + } + }, + "selectPlaceholder": { + "message": "-- Vyberte --" + }, + "multiSelectPlaceholder": { + "message": "-- Začnite písať na filtrovanie --" + }, + "multiSelectLoading": { + "message": "Načítavajú sa možnosti..." + }, + "multiSelectNotFound": { + "message": "Nenašli sa žiadne položky" + }, + "multiSelectClearAll": { + "message": "Vyčistiť všetko" + }, + "plusNMore": { + "message": "+ $QUANTITY$ ďalších", + "placeholders": { + "quantity": { + "content": "$1", + "example": "5" + } + } + }, + "submenu": { + "message": "Podponuka" } } diff --git a/apps/desktop/src/locales/sl/messages.json b/apps/desktop/src/locales/sl/messages.json index 5d4f40ed148..089da060600 100644 --- a/apps/desktop/src/locales/sl/messages.json +++ b/apps/desktop/src/locales/sl/messages.json @@ -1077,8 +1077,8 @@ "premiumSignUpStorage": { "message": "1 GB encrypted storage for file attachments." }, - "premiumSignUpTwoStep": { - "message": "Additional two-step login options such as YubiKey, FIDO U2F, and Duo." + "premiumSignUpTwoStepOptions": { + "message": "Proprietary two-step login options such as YubiKey and Duo." }, "premiumSignUpReports": { "message": "Password hygiene, account health, and data breach reports to keep your vault safe." @@ -1492,6 +1492,9 @@ "vaultTimeoutActionLogOutDesc": { "message": "Re-authentication is required to access your vault again." }, + "unlockMethodNeededToChangeTimeoutActionDesc": { + "message": "Set up an unlock method to change your vault timeout action." + }, "lock": { "message": "Lock", "description": "Verb form: to make secure or inaccesible by" @@ -1512,12 +1515,6 @@ "permanentlyDeletedItem": { "message": "Item permanently deleted" }, - "restoreItem": { - "message": "Restore item" - }, - "restoreItemConfirmation": { - "message": "Are you sure you want to restore this item?" - }, "restoredItem": { "message": "Item restored" }, @@ -2112,8 +2109,8 @@ "logInWithAnotherDevice": { "message": "Log in with another device" }, - "logInInitiated": { - "message": "Log in initiated" + "loginInitiated": { + "message": "Login initiated" }, "notificationSentDevice": { "message": "A notification has been sent to your device." @@ -2252,21 +2249,171 @@ "windowsBiometricUpdateWarningTitle": { "message": "Recommended Settings Update" }, + "deviceApprovalRequired": { + "message": "Device approval required. Select an approval option below:" + }, + "rememberThisDevice": { + "message": "Remember this device" + }, + "uncheckIfPublicDevice": { + "message": "Uncheck if using a public device" + }, + "approveFromYourOtherDevice": { + "message": "Approve from your other device" + }, + "requestAdminApproval": { + "message": "Request admin approval" + }, + "approveWithMasterPassword": { + "message": "Approve with master password" + }, "region": { "message": "Region" }, + "ssoIdentifierRequired": { + "message": "Organization SSO identifier is required." + }, "eu": { "message": "EU", "description": "European Union" }, - "us": { - "message": "US", - "description": "United States" + "loggingInOn": { + "message": "Logging in on" + }, + "usDomain": { + "message": "bitwarden.com" + }, + "euDomain": { + "message": "bitwarden.eu" }, "selfHosted": { "message": "Self-hosted" }, "accessDenied": { "message": "Access denied. You do not have permission to view this page." + }, + "accountSuccessfullyCreated": { + "message": "Account successfully created!" + }, + "adminApprovalRequested": { + "message": "Admin approval requested" + }, + "adminApprovalRequestSentToAdmins": { + "message": "Your request has been sent to your admin." + }, + "youWillBeNotifiedOnceApproved": { + "message": "You will be notified once approved." + }, + "troubleLoggingIn": { + "message": "Trouble logging in?" + }, + "loginApproved": { + "message": "Login approved" + }, + "userEmailMissing": { + "message": "User email missing" + }, + "deviceTrusted": { + "message": "Device trusted" + }, + "inputRequired": { + "message": "Input is required." + }, + "required": { + "message": "required" + }, + "search": { + "message": "Search" + }, + "inputMinLength": { + "message": "Input must be at least $COUNT$ characters long.", + "placeholders": { + "count": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxLength": { + "message": "Input must not exceed $COUNT$ characters in length.", + "placeholders": { + "count": { + "content": "$1", + "example": "20" + } + } + }, + "inputForbiddenCharacters": { + "message": "The following characters are not allowed: $CHARACTERS$", + "placeholders": { + "characters": { + "content": "$1", + "example": "@, #, $, %" + } + } + }, + "inputMinValue": { + "message": "Input value must be at least $MIN$.", + "placeholders": { + "min": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxValue": { + "message": "Input value must not exceed $MAX$.", + "placeholders": { + "max": { + "content": "$1", + "example": "100" + } + } + }, + "multipleInputEmails": { + "message": "1 or more emails are invalid" + }, + "inputTrimValidator": { + "message": "Input must not contain only whitespace.", + "description": "Notification to inform the user that a form's input can't contain only whitespace." + }, + "inputEmail": { + "message": "Input is not an email address." + }, + "fieldsNeedAttention": { + "message": "$COUNT$ field(s) above need your attention.", + "placeholders": { + "count": { + "content": "$1", + "example": "4" + } + } + }, + "selectPlaceholder": { + "message": "-- Select --" + }, + "multiSelectPlaceholder": { + "message": "-- Type to filter --" + }, + "multiSelectLoading": { + "message": "Retrieving options..." + }, + "multiSelectNotFound": { + "message": "No items found" + }, + "multiSelectClearAll": { + "message": "Clear all" + }, + "plusNMore": { + "message": "+ $QUANTITY$ more", + "placeholders": { + "quantity": { + "content": "$1", + "example": "5" + } + } + }, + "submenu": { + "message": "Submenu" } } diff --git a/apps/desktop/src/locales/sr/messages.json b/apps/desktop/src/locales/sr/messages.json index cea5d01ff98..b5712de8625 100644 --- a/apps/desktop/src/locales/sr/messages.json +++ b/apps/desktop/src/locales/sr/messages.json @@ -1077,8 +1077,8 @@ "premiumSignUpStorage": { "message": "1ГБ шифровано складиште за прилоге." }, - "premiumSignUpTwoStep": { - "message": "Додатне опције пријаве у два корака као што су YubiKey, FIDO U2F, и Duo." + "premiumSignUpTwoStepOptions": { + "message": "Proprietary two-step login options such as YubiKey and Duo." }, "premiumSignUpReports": { "message": "Извештаји о хигијени лозинки, здравственом стању налога и кршењу података да бисте заштитили сеф." @@ -1492,6 +1492,9 @@ "vaultTimeoutActionLogOutDesc": { "message": "Одјављени сеф захтева да поново потврдите идентитет да бисте му поново приступили." }, + "unlockMethodNeededToChangeTimeoutActionDesc": { + "message": "Подесите метод откључавања да бисте променили радњу временског ограничења сефа." + }, "lock": { "message": "Закључај", "description": "Verb form: to make secure or inaccesible by" @@ -1512,12 +1515,6 @@ "permanentlyDeletedItem": { "message": "Трајно избрисана ставка" }, - "restoreItem": { - "message": "Врати ставку" - }, - "restoreItemConfirmation": { - "message": "Да ли сте сигурни да желите да вратите ову ставку?" - }, "restoredItem": { "message": "Ставка враћена" }, @@ -2112,7 +2109,7 @@ "logInWithAnotherDevice": { "message": "Пријавите се са другим уређајем" }, - "logInInitiated": { + "loginInitiated": { "message": "Пријава је покренута" }, "notificationSentDevice": { @@ -2252,21 +2249,171 @@ "windowsBiometricUpdateWarningTitle": { "message": "Препоручено ажурирање поставки" }, + "deviceApprovalRequired": { + "message": "Потребно је одобрење уређаја. Изаберите опцију одобрења испод:" + }, + "rememberThisDevice": { + "message": "Запамти овај уређај" + }, + "uncheckIfPublicDevice": { + "message": "Искључите ако се користи јавни уређај" + }, + "approveFromYourOtherDevice": { + "message": "Одобри са мојим другим уређајем" + }, + "requestAdminApproval": { + "message": "Затражити одобрење администратора" + }, + "approveWithMasterPassword": { + "message": "Одобрити са главном лозинком" + }, "region": { "message": "Регион" }, + "ssoIdentifierRequired": { + "message": "Потребан је SSO идентификатор организације." + }, "eu": { "message": "EU", "description": "European Union" }, - "us": { - "message": "US", - "description": "United States" + "loggingInOn": { + "message": "Пријављено на" + }, + "usDomain": { + "message": "bitwarden.com" + }, + "euDomain": { + "message": "bitwarden.eu" }, "selfHosted": { "message": "Личан хостинг" }, "accessDenied": { "message": "Одбијен приступ. Немате дозволу да видите ову страницу." + }, + "accountSuccessfullyCreated": { + "message": "Налог је успешно креиран!" + }, + "adminApprovalRequested": { + "message": "Захтевано је одобрење администратора" + }, + "adminApprovalRequestSentToAdmins": { + "message": "Ваш захтев је послат вашем администратору." + }, + "youWillBeNotifiedOnceApproved": { + "message": "Бићете обавештени када буде одобрено." + }, + "troubleLoggingIn": { + "message": "Имате проблема са пријављивањем?" + }, + "loginApproved": { + "message": "Пријава је одобрена" + }, + "userEmailMissing": { + "message": "Недостаје имејл корисника" + }, + "deviceTrusted": { + "message": "Уређај поуздан" + }, + "inputRequired": { + "message": "Унос је потребан." + }, + "required": { + "message": "обавезно" + }, + "search": { + "message": "Тражи" + }, + "inputMinLength": { + "message": "Унос трба имати најмање $COUNT$ слова.", + "placeholders": { + "count": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxLength": { + "message": "Унос не сме бити већи од $COUNT$ карактера.", + "placeholders": { + "count": { + "content": "$1", + "example": "20" + } + } + }, + "inputForbiddenCharacters": { + "message": "Следећи знакови нису дозвољени: $CHARACTERS$", + "placeholders": { + "characters": { + "content": "$1", + "example": "@, #, $, %" + } + } + }, + "inputMinValue": { + "message": "Вредност мора бити најмање $MIN$.", + "placeholders": { + "min": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxValue": { + "message": "Вредност не сме бити већа од $MAX$.", + "placeholders": { + "max": { + "content": "$1", + "example": "100" + } + } + }, + "multipleInputEmails": { + "message": "1 или више имејлова су неважећи" + }, + "inputTrimValidator": { + "message": "Унос не сме да садржи само размак.", + "description": "Notification to inform the user that a form's input can't contain only whitespace." + }, + "inputEmail": { + "message": "Унос није имејл." + }, + "fieldsNeedAttention": { + "message": "$COUNT$ поље(а) изнад захтевај(у) вашу пажњу.", + "placeholders": { + "count": { + "content": "$1", + "example": "4" + } + } + }, + "selectPlaceholder": { + "message": "-- Одабрати --" + }, + "multiSelectPlaceholder": { + "message": "-- Тип за филтрирање --" + }, + "multiSelectLoading": { + "message": "Преузимање опција..." + }, + "multiSelectNotFound": { + "message": "Нема предмета" + }, + "multiSelectClearAll": { + "message": "Обриши све" + }, + "plusNMore": { + "message": "+ још $QUANTITY$", + "placeholders": { + "quantity": { + "content": "$1", + "example": "5" + } + } + }, + "submenu": { + "message": "Под-мени" } } diff --git a/apps/desktop/src/locales/sv/messages.json b/apps/desktop/src/locales/sv/messages.json index 8dab78a718b..b224bb083c5 100644 --- a/apps/desktop/src/locales/sv/messages.json +++ b/apps/desktop/src/locales/sv/messages.json @@ -33,7 +33,7 @@ "message": "Samlingar" }, "searchVault": { - "message": "Sök i valvet" + "message": "Sök i valv" }, "addItem": { "message": "Lägg till objekt" @@ -1077,8 +1077,8 @@ "premiumSignUpStorage": { "message": "1 GB krypterad lagring." }, - "premiumSignUpTwoStep": { - "message": "Ytterligare alternativ för tvåstegsverifiering såsom YubiKey, FIDO U2F och Duo." + "premiumSignUpTwoStepOptions": { + "message": "Proprietary two-step login options such as YubiKey and Duo." }, "premiumSignUpReports": { "message": "Lösenordshygien, kontohälsa och dataintrångsrapporter för att skydda ditt valv." @@ -1492,6 +1492,9 @@ "vaultTimeoutActionLogOutDesc": { "message": "Återautentisering krävs för att komma åt ditt valv igen." }, + "unlockMethodNeededToChangeTimeoutActionDesc": { + "message": "Set up an unlock method to change your vault timeout action." + }, "lock": { "message": "Lås", "description": "Verb form: to make secure or inaccesible by" @@ -1512,12 +1515,6 @@ "permanentlyDeletedItem": { "message": "Raderade objekt permanent" }, - "restoreItem": { - "message": "Återställ objekt" - }, - "restoreItemConfirmation": { - "message": "Är du säker på att du vill återställa detta objekt?" - }, "restoredItem": { "message": "Återställde objekt" }, @@ -2112,7 +2109,7 @@ "logInWithAnotherDevice": { "message": "Logga in med en annan enhet" }, - "logInInitiated": { + "loginInitiated": { "message": "Inloggning påbörjad" }, "notificationSentDevice": { @@ -2252,21 +2249,171 @@ "windowsBiometricUpdateWarningTitle": { "message": "Recommended Settings Update" }, + "deviceApprovalRequired": { + "message": "Device approval required. Select an approval option below:" + }, + "rememberThisDevice": { + "message": "Kom ihåg denna enhet" + }, + "uncheckIfPublicDevice": { + "message": "Uncheck if using a public device" + }, + "approveFromYourOtherDevice": { + "message": "Approve from your other device" + }, + "requestAdminApproval": { + "message": "Request admin approval" + }, + "approveWithMasterPassword": { + "message": "Godkänn med huvudlösenord" + }, "region": { "message": "Region" }, + "ssoIdentifierRequired": { + "message": "Organization SSO identifier is required." + }, "eu": { "message": "EU", "description": "European Union" }, - "us": { - "message": "US", - "description": "United States" + "loggingInOn": { + "message": "Logga in på" + }, + "usDomain": { + "message": "bitwarden.com" + }, + "euDomain": { + "message": "bitwarden.eu" }, "selfHosted": { "message": "Self-hosted" }, "accessDenied": { "message": "Access denied. You do not have permission to view this page." + }, + "accountSuccessfullyCreated": { + "message": "Account successfully created!" + }, + "adminApprovalRequested": { + "message": "Admin approval requested" + }, + "adminApprovalRequestSentToAdmins": { + "message": "Your request has been sent to your admin." + }, + "youWillBeNotifiedOnceApproved": { + "message": "Du kommer att meddelas vid godkännande." + }, + "troubleLoggingIn": { + "message": "Trouble logging in?" + }, + "loginApproved": { + "message": "Login approved" + }, + "userEmailMissing": { + "message": "User email missing" + }, + "deviceTrusted": { + "message": "Device trusted" + }, + "inputRequired": { + "message": "Input is required." + }, + "required": { + "message": "obligatoriskt" + }, + "search": { + "message": "Sök" + }, + "inputMinLength": { + "message": "Inmatningen måste innehålla minst $COUNT$ tecken.", + "placeholders": { + "count": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxLength": { + "message": "Input must not exceed $COUNT$ characters in length.", + "placeholders": { + "count": { + "content": "$1", + "example": "20" + } + } + }, + "inputForbiddenCharacters": { + "message": "Följande tecken är inte tillåtna: $CHARACTERS$", + "placeholders": { + "characters": { + "content": "$1", + "example": "@, #, $, %" + } + } + }, + "inputMinValue": { + "message": "Input value must be at least $MIN$.", + "placeholders": { + "min": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxValue": { + "message": "Input value must not exceed $MAX$.", + "placeholders": { + "max": { + "content": "$1", + "example": "100" + } + } + }, + "multipleInputEmails": { + "message": "En eller flera e-postadresser är ogiltiga" + }, + "inputTrimValidator": { + "message": "Input must not contain only whitespace.", + "description": "Notification to inform the user that a form's input can't contain only whitespace." + }, + "inputEmail": { + "message": "Inmatningen är inte en e-postadress." + }, + "fieldsNeedAttention": { + "message": "$COUNT$ fält ovan kräver din uppmärksamhet.", + "placeholders": { + "count": { + "content": "$1", + "example": "4" + } + } + }, + "selectPlaceholder": { + "message": "-- Välj --" + }, + "multiSelectPlaceholder": { + "message": "-- Skriv för att filtrera --" + }, + "multiSelectLoading": { + "message": "Hämtar alternativ..." + }, + "multiSelectNotFound": { + "message": "Inga objekt hittades" + }, + "multiSelectClearAll": { + "message": "Rensa alla" + }, + "plusNMore": { + "message": "+ $QUANTITY$ till", + "placeholders": { + "quantity": { + "content": "$1", + "example": "5" + } + } + }, + "submenu": { + "message": "Undermeny" } } diff --git a/apps/desktop/src/locales/te/messages.json b/apps/desktop/src/locales/te/messages.json index ed828fa2255..38e81a83bfd 100644 --- a/apps/desktop/src/locales/te/messages.json +++ b/apps/desktop/src/locales/te/messages.json @@ -1077,8 +1077,8 @@ "premiumSignUpStorage": { "message": "1 GB encrypted storage for file attachments." }, - "premiumSignUpTwoStep": { - "message": "Additional two-step login options such as YubiKey, FIDO U2F, and Duo." + "premiumSignUpTwoStepOptions": { + "message": "Proprietary two-step login options such as YubiKey and Duo." }, "premiumSignUpReports": { "message": "Password hygiene, account health, and data breach reports to keep your vault safe." @@ -1492,6 +1492,9 @@ "vaultTimeoutActionLogOutDesc": { "message": "Re-authentication is required to access your vault again." }, + "unlockMethodNeededToChangeTimeoutActionDesc": { + "message": "Set up an unlock method to change your vault timeout action." + }, "lock": { "message": "Lock", "description": "Verb form: to make secure or inaccesible by" @@ -1512,12 +1515,6 @@ "permanentlyDeletedItem": { "message": "Item permanently deleted" }, - "restoreItem": { - "message": "Restore item" - }, - "restoreItemConfirmation": { - "message": "Are you sure you want to restore this item?" - }, "restoredItem": { "message": "Item restored" }, @@ -2112,8 +2109,8 @@ "logInWithAnotherDevice": { "message": "Log in with another device" }, - "logInInitiated": { - "message": "Log in initiated" + "loginInitiated": { + "message": "Login initiated" }, "notificationSentDevice": { "message": "A notification has been sent to your device." @@ -2252,21 +2249,171 @@ "windowsBiometricUpdateWarningTitle": { "message": "Recommended Settings Update" }, + "deviceApprovalRequired": { + "message": "Device approval required. Select an approval option below:" + }, + "rememberThisDevice": { + "message": "Remember this device" + }, + "uncheckIfPublicDevice": { + "message": "Uncheck if using a public device" + }, + "approveFromYourOtherDevice": { + "message": "Approve from your other device" + }, + "requestAdminApproval": { + "message": "Request admin approval" + }, + "approveWithMasterPassword": { + "message": "Approve with master password" + }, "region": { "message": "Region" }, + "ssoIdentifierRequired": { + "message": "Organization SSO identifier is required." + }, "eu": { "message": "EU", "description": "European Union" }, - "us": { - "message": "US", - "description": "United States" + "loggingInOn": { + "message": "Logging in on" + }, + "usDomain": { + "message": "bitwarden.com" + }, + "euDomain": { + "message": "bitwarden.eu" }, "selfHosted": { "message": "Self-hosted" }, "accessDenied": { "message": "Access denied. You do not have permission to view this page." + }, + "accountSuccessfullyCreated": { + "message": "Account successfully created!" + }, + "adminApprovalRequested": { + "message": "Admin approval requested" + }, + "adminApprovalRequestSentToAdmins": { + "message": "Your request has been sent to your admin." + }, + "youWillBeNotifiedOnceApproved": { + "message": "You will be notified once approved." + }, + "troubleLoggingIn": { + "message": "Trouble logging in?" + }, + "loginApproved": { + "message": "Login approved" + }, + "userEmailMissing": { + "message": "User email missing" + }, + "deviceTrusted": { + "message": "Device trusted" + }, + "inputRequired": { + "message": "Input is required." + }, + "required": { + "message": "required" + }, + "search": { + "message": "Search" + }, + "inputMinLength": { + "message": "Input must be at least $COUNT$ characters long.", + "placeholders": { + "count": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxLength": { + "message": "Input must not exceed $COUNT$ characters in length.", + "placeholders": { + "count": { + "content": "$1", + "example": "20" + } + } + }, + "inputForbiddenCharacters": { + "message": "The following characters are not allowed: $CHARACTERS$", + "placeholders": { + "characters": { + "content": "$1", + "example": "@, #, $, %" + } + } + }, + "inputMinValue": { + "message": "Input value must be at least $MIN$.", + "placeholders": { + "min": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxValue": { + "message": "Input value must not exceed $MAX$.", + "placeholders": { + "max": { + "content": "$1", + "example": "100" + } + } + }, + "multipleInputEmails": { + "message": "1 or more emails are invalid" + }, + "inputTrimValidator": { + "message": "Input must not contain only whitespace.", + "description": "Notification to inform the user that a form's input can't contain only whitespace." + }, + "inputEmail": { + "message": "Input is not an email address." + }, + "fieldsNeedAttention": { + "message": "$COUNT$ field(s) above need your attention.", + "placeholders": { + "count": { + "content": "$1", + "example": "4" + } + } + }, + "selectPlaceholder": { + "message": "-- Select --" + }, + "multiSelectPlaceholder": { + "message": "-- Type to filter --" + }, + "multiSelectLoading": { + "message": "Retrieving options..." + }, + "multiSelectNotFound": { + "message": "No items found" + }, + "multiSelectClearAll": { + "message": "Clear all" + }, + "plusNMore": { + "message": "+ $QUANTITY$ more", + "placeholders": { + "quantity": { + "content": "$1", + "example": "5" + } + } + }, + "submenu": { + "message": "Submenu" } } diff --git a/apps/desktop/src/locales/th/messages.json b/apps/desktop/src/locales/th/messages.json index 45c05455bae..32f10e27404 100644 --- a/apps/desktop/src/locales/th/messages.json +++ b/apps/desktop/src/locales/th/messages.json @@ -1077,8 +1077,8 @@ "premiumSignUpStorage": { "message": "1 GB of encrypted file storage." }, - "premiumSignUpTwoStep": { - "message": "Additional two-step login options such as YubiKey, FIDO U2F, and Duo." + "premiumSignUpTwoStepOptions": { + "message": "Proprietary two-step login options such as YubiKey and Duo." }, "premiumSignUpReports": { "message": "Password hygiene, account health, and data breach reports to keep your vault safe." @@ -1492,6 +1492,9 @@ "vaultTimeoutActionLogOutDesc": { "message": "Re-authentication is required to access your vault again." }, + "unlockMethodNeededToChangeTimeoutActionDesc": { + "message": "Set up an unlock method to change your vault timeout action." + }, "lock": { "message": "Lock", "description": "Verb form: to make secure or inaccesible by" @@ -1512,12 +1515,6 @@ "permanentlyDeletedItem": { "message": "Item permanently deleted" }, - "restoreItem": { - "message": "Restore item" - }, - "restoreItemConfirmation": { - "message": "Are you sure you want to restore this item?" - }, "restoredItem": { "message": "Item restored" }, @@ -2112,8 +2109,8 @@ "logInWithAnotherDevice": { "message": "Log in with another device" }, - "logInInitiated": { - "message": "Log in initiated" + "loginInitiated": { + "message": "Login initiated" }, "notificationSentDevice": { "message": "A notification has been sent to your device." @@ -2252,21 +2249,171 @@ "windowsBiometricUpdateWarningTitle": { "message": "Recommended Settings Update" }, + "deviceApprovalRequired": { + "message": "Device approval required. Select an approval option below:" + }, + "rememberThisDevice": { + "message": "Remember this device" + }, + "uncheckIfPublicDevice": { + "message": "Uncheck if using a public device" + }, + "approveFromYourOtherDevice": { + "message": "Approve from your other device" + }, + "requestAdminApproval": { + "message": "Request admin approval" + }, + "approveWithMasterPassword": { + "message": "Approve with master password" + }, "region": { "message": "Region" }, + "ssoIdentifierRequired": { + "message": "Organization SSO identifier is required." + }, "eu": { "message": "EU", "description": "European Union" }, - "us": { - "message": "US", - "description": "United States" + "loggingInOn": { + "message": "Logging in on" + }, + "usDomain": { + "message": "bitwarden.com" + }, + "euDomain": { + "message": "bitwarden.eu" }, "selfHosted": { "message": "Self-hosted" }, "accessDenied": { "message": "Access denied. You do not have permission to view this page." + }, + "accountSuccessfullyCreated": { + "message": "Account successfully created!" + }, + "adminApprovalRequested": { + "message": "Admin approval requested" + }, + "adminApprovalRequestSentToAdmins": { + "message": "Your request has been sent to your admin." + }, + "youWillBeNotifiedOnceApproved": { + "message": "You will be notified once approved." + }, + "troubleLoggingIn": { + "message": "Trouble logging in?" + }, + "loginApproved": { + "message": "Login approved" + }, + "userEmailMissing": { + "message": "User email missing" + }, + "deviceTrusted": { + "message": "Device trusted" + }, + "inputRequired": { + "message": "Input is required." + }, + "required": { + "message": "required" + }, + "search": { + "message": "Search" + }, + "inputMinLength": { + "message": "Input must be at least $COUNT$ characters long.", + "placeholders": { + "count": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxLength": { + "message": "Input must not exceed $COUNT$ characters in length.", + "placeholders": { + "count": { + "content": "$1", + "example": "20" + } + } + }, + "inputForbiddenCharacters": { + "message": "The following characters are not allowed: $CHARACTERS$", + "placeholders": { + "characters": { + "content": "$1", + "example": "@, #, $, %" + } + } + }, + "inputMinValue": { + "message": "Input value must be at least $MIN$.", + "placeholders": { + "min": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxValue": { + "message": "Input value must not exceed $MAX$.", + "placeholders": { + "max": { + "content": "$1", + "example": "100" + } + } + }, + "multipleInputEmails": { + "message": "1 or more emails are invalid" + }, + "inputTrimValidator": { + "message": "Input must not contain only whitespace.", + "description": "Notification to inform the user that a form's input can't contain only whitespace." + }, + "inputEmail": { + "message": "Input is not an email address." + }, + "fieldsNeedAttention": { + "message": "$COUNT$ field(s) above need your attention.", + "placeholders": { + "count": { + "content": "$1", + "example": "4" + } + } + }, + "selectPlaceholder": { + "message": "-- Select --" + }, + "multiSelectPlaceholder": { + "message": "-- Type to filter --" + }, + "multiSelectLoading": { + "message": "Retrieving options..." + }, + "multiSelectNotFound": { + "message": "No items found" + }, + "multiSelectClearAll": { + "message": "Clear all" + }, + "plusNMore": { + "message": "+ $QUANTITY$ more", + "placeholders": { + "quantity": { + "content": "$1", + "example": "5" + } + } + }, + "submenu": { + "message": "Submenu" } } diff --git a/apps/desktop/src/locales/tr/messages.json b/apps/desktop/src/locales/tr/messages.json index 9e98dbee2c3..ff5185c7141 100644 --- a/apps/desktop/src/locales/tr/messages.json +++ b/apps/desktop/src/locales/tr/messages.json @@ -1077,8 +1077,8 @@ "premiumSignUpStorage": { "message": "Dosya ekleri için 1 GB şifrelenmiş depolama." }, - "premiumSignUpTwoStep": { - "message": "YubiKey, FIDO U2F ve Duo gibi iki aşamalı giriş seçenekleri." + "premiumSignUpTwoStepOptions": { + "message": "YubiKey ve Duo gibi marka bazlı iki aşamalı giriş seçenekleri." }, "premiumSignUpReports": { "message": "Kasanızı güvende tutmak için parola hijyeni, hesap sağlığı ve veri ihlali raporları." @@ -1492,6 +1492,9 @@ "vaultTimeoutActionLogOutDesc": { "message": "Çıkış yapılmış bir kasaya tekrardan erişmek için yeniden kimlik doğrulaması gerekir." }, + "unlockMethodNeededToChangeTimeoutActionDesc": { + "message": "Kasa zaman aşımı eyleminizi değiştirmek için kilit açma yönteminizi ayarlayın." + }, "lock": { "message": "Kilitle", "description": "Verb form: to make secure or inaccesible by" @@ -1512,12 +1515,6 @@ "permanentlyDeletedItem": { "message": "Kayıt kalıcı olarak silindi" }, - "restoreItem": { - "message": "Kaydı geri yükle" - }, - "restoreItemConfirmation": { - "message": "Bu ögeyi geri yüklemek istediğinizden emin misiniz?" - }, "restoredItem": { "message": "Kayıt geri yüklendi" }, @@ -2112,7 +2109,7 @@ "logInWithAnotherDevice": { "message": "Başka bir cihazla giriş yap" }, - "logInInitiated": { + "loginInitiated": { "message": "Giriş başlatıldı" }, "notificationSentDevice": { @@ -2252,21 +2249,171 @@ "windowsBiometricUpdateWarningTitle": { "message": "Önerilen Ayarlar Güncellemesi" }, + "deviceApprovalRequired": { + "message": "Cihaz onayı gerekiyor. Lütfen onay yönteminizi seçin:" + }, + "rememberThisDevice": { + "message": "Bu cihazı hatırla" + }, + "uncheckIfPublicDevice": { + "message": "Paylaşılan bir cihaz kullanıyorsanız işaretlemeyin" + }, + "approveFromYourOtherDevice": { + "message": "Diğer cihazımdan onayla" + }, + "requestAdminApproval": { + "message": "Yönetici onayı iste" + }, + "approveWithMasterPassword": { + "message": "Ana parola ile onayla" + }, "region": { "message": "Bölge" }, + "ssoIdentifierRequired": { + "message": "Kuruluş SSO tanımlayıcısı gereklidir." + }, "eu": { "message": "AB", "description": "European Union" }, - "us": { - "message": "ABD", - "description": "United States" + "loggingInOn": { + "message": "Giriş yapılan konum" + }, + "usDomain": { + "message": "bitwarden.com" + }, + "euDomain": { + "message": "bitwarden.eu" }, "selfHosted": { "message": "Barındırılan" }, "accessDenied": { "message": "Erişim engellendi. Bu sayfayı görüntüleme iznine sahip değilsiniz." + }, + "accountSuccessfullyCreated": { + "message": "Hesap başarıyla oluşturuldu!" + }, + "adminApprovalRequested": { + "message": "Yönetici onayı istendi" + }, + "adminApprovalRequestSentToAdmins": { + "message": "İsteğiniz yöneticinize gönderildi." + }, + "youWillBeNotifiedOnceApproved": { + "message": "Onaylandıktan sonra bilgilendirileceksiniz." + }, + "troubleLoggingIn": { + "message": "Giriş yaparken sorun mu yaşıyorsunuz?" + }, + "loginApproved": { + "message": "Giriş onaylandı" + }, + "userEmailMissing": { + "message": "Kullanıcının e-postası eksik" + }, + "deviceTrusted": { + "message": "Cihaza güvenildi" + }, + "inputRequired": { + "message": "Girdi gerekli." + }, + "required": { + "message": "gerekli" + }, + "search": { + "message": "Search" + }, + "inputMinLength": { + "message": "Girdi en az $COUNT$ karakter uzunluğunda olmalıdır.", + "placeholders": { + "count": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxLength": { + "message": "Girdi $COUNT$ karakter uzunluğunu geçmemelidir.", + "placeholders": { + "count": { + "content": "$1", + "example": "20" + } + } + }, + "inputForbiddenCharacters": { + "message": "Şu karakterlere izin verilmez: $CHARACTERS$", + "placeholders": { + "characters": { + "content": "$1", + "example": "@, #, $, %" + } + } + }, + "inputMinValue": { + "message": "Girdi değeri en az $MIN$ olmalı.", + "placeholders": { + "min": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxValue": { + "message": "Girdi değeri en fazla $MAX$ olmalı.", + "placeholders": { + "max": { + "content": "$1", + "example": "100" + } + } + }, + "multipleInputEmails": { + "message": "Bir veya daha fazla e-posta geçersiz" + }, + "inputTrimValidator": { + "message": "Girdi yalnızca boşluktan ibaret olamaz.", + "description": "Notification to inform the user that a form's input can't contain only whitespace." + }, + "inputEmail": { + "message": "Girdi bir e-posta adresi değil." + }, + "fieldsNeedAttention": { + "message": "Yukarıdaki $COUNT$ alanla ilgilenmeniz gerekiyor.", + "placeholders": { + "count": { + "content": "$1", + "example": "4" + } + } + }, + "selectPlaceholder": { + "message": "-- Seçin --" + }, + "multiSelectPlaceholder": { + "message": "-- Filtrelemek için yazın --" + }, + "multiSelectLoading": { + "message": "Seçenekler alınıyor..." + }, + "multiSelectNotFound": { + "message": "Hiç kayıt bulunamadı" + }, + "multiSelectClearAll": { + "message": "Tümünü temizle" + }, + "plusNMore": { + "message": "+ $QUANTITY$ more", + "placeholders": { + "quantity": { + "content": "$1", + "example": "5" + } + } + }, + "submenu": { + "message": "Alt menü" } } diff --git a/apps/desktop/src/locales/uk/messages.json b/apps/desktop/src/locales/uk/messages.json index ed4da8b553a..09a7ec512bc 100644 --- a/apps/desktop/src/locales/uk/messages.json +++ b/apps/desktop/src/locales/uk/messages.json @@ -1077,8 +1077,8 @@ "premiumSignUpStorage": { "message": "1 ГБ зашифрованого сховища для файлів." }, - "premiumSignUpTwoStep": { - "message": "Додаткові можливості двоетапної перевірки, наприклад, YubiKey, FIDO U2F та Duo." + "premiumSignUpTwoStepOptions": { + "message": "Proprietary two-step login options such as YubiKey and Duo." }, "premiumSignUpReports": { "message": "Гігієна паролів, здоров'я облікового запису, а також звіти про вразливості даних, щоб зберігати ваше сховище в безпеці." @@ -1492,6 +1492,9 @@ "vaultTimeoutActionLogOutDesc": { "message": "Щоб відновити доступ до сховища, необхідно повторно авторизуватись." }, + "unlockMethodNeededToChangeTimeoutActionDesc": { + "message": "Налаштуйте спосіб розблокування, щоб змінити час очікування сховища." + }, "lock": { "message": "Блокувати", "description": "Verb form: to make secure or inaccesible by" @@ -1512,12 +1515,6 @@ "permanentlyDeletedItem": { "message": "Запис остаточно видалено" }, - "restoreItem": { - "message": "Відновити запис" - }, - "restoreItemConfirmation": { - "message": "Ви дійсно хочете відновити цей запис?" - }, "restoredItem": { "message": "Запис відновлено" }, @@ -2112,7 +2109,7 @@ "logInWithAnotherDevice": { "message": "Увійти з іншого пристрою" }, - "logInInitiated": { + "loginInitiated": { "message": "Ініційовано вхід" }, "notificationSentDevice": { @@ -2252,21 +2249,171 @@ "windowsBiometricUpdateWarningTitle": { "message": "Оновлення рекомендованих налаштувань" }, + "deviceApprovalRequired": { + "message": "Необхідне підтвердження пристрою. Виберіть варіант підтвердження нижче:" + }, + "rememberThisDevice": { + "message": "Запам'ятати цей пристрій" + }, + "uncheckIfPublicDevice": { + "message": "Зніміть позначку, якщо використовуєте загальнодоступний пристрій" + }, + "approveFromYourOtherDevice": { + "message": "Затвердіть з іншого пристрою" + }, + "requestAdminApproval": { + "message": "Запит підтвердження адміністратора" + }, + "approveWithMasterPassword": { + "message": "Затвердити з головним паролем" + }, "region": { "message": "Регіон" }, + "ssoIdentifierRequired": { + "message": "Потрібен SSO-ідентифікатор організації." + }, "eu": { "message": "ЄС", "description": "European Union" }, - "us": { - "message": "США", - "description": "United States" + "loggingInOn": { + "message": "Увійти на" + }, + "usDomain": { + "message": "bitwarden.com" + }, + "euDomain": { + "message": "bitwarden.eu" }, "selfHosted": { "message": "Власне розміщення" }, "accessDenied": { "message": "Доступ заборонено. У вас немає дозволу на перегляд цієї сторінки." + }, + "accountSuccessfullyCreated": { + "message": "Обліковий запис успішно створено!" + }, + "adminApprovalRequested": { + "message": "Запитано затвердження адміністратором" + }, + "adminApprovalRequestSentToAdmins": { + "message": "Ваш запит відправлено адміністратору." + }, + "youWillBeNotifiedOnceApproved": { + "message": "Ви отримаєте сповіщення після затвердження." + }, + "troubleLoggingIn": { + "message": "Проблема під час входу?" + }, + "loginApproved": { + "message": "Вхід затверджено" + }, + "userEmailMissing": { + "message": "Немає адреси електронної пошти" + }, + "deviceTrusted": { + "message": "Довірений пристрій" + }, + "inputRequired": { + "message": "Необхідно ввести дані." + }, + "required": { + "message": "обов'язково" + }, + "search": { + "message": "Пошук" + }, + "inputMinLength": { + "message": "Введені дані мають бути довжиною принаймні $COUNT$ символів.", + "placeholders": { + "count": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxLength": { + "message": "Вхідне значення не повинно перевищувати $COUNT$ символів.", + "placeholders": { + "count": { + "content": "$1", + "example": "20" + } + } + }, + "inputForbiddenCharacters": { + "message": "Вказані символи заборонені: $CHARACTERS$", + "placeholders": { + "characters": { + "content": "$1", + "example": "@, #, $, %" + } + } + }, + "inputMinValue": { + "message": "Значення має бути принаймні $MIN$.", + "placeholders": { + "min": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxValue": { + "message": "Значення не може перевищувати $MAX$.", + "placeholders": { + "max": { + "content": "$1", + "example": "100" + } + } + }, + "multipleInputEmails": { + "message": "1 або більше адрес е-пошти недійсні" + }, + "inputTrimValidator": { + "message": "Введене значення не повинно містити лише пробіл.", + "description": "Notification to inform the user that a form's input can't contain only whitespace." + }, + "inputEmail": { + "message": "Введені дані не є адресою е-пошти." + }, + "fieldsNeedAttention": { + "message": "$COUNT$ поле (поля) вище потребують вашої уваги.", + "placeholders": { + "count": { + "content": "$1", + "example": "4" + } + } + }, + "selectPlaceholder": { + "message": "-- Оберіть--" + }, + "multiSelectPlaceholder": { + "message": "-- Введіть для фільтрування --" + }, + "multiSelectLoading": { + "message": "Параметри отримання..." + }, + "multiSelectNotFound": { + "message": "Нічого не знайдено" + }, + "multiSelectClearAll": { + "message": "Очистити все" + }, + "plusNMore": { + "message": "+ ще $QUANTITY$", + "placeholders": { + "quantity": { + "content": "$1", + "example": "5" + } + } + }, + "submenu": { + "message": "Підменю" } } diff --git a/apps/desktop/src/locales/vi/messages.json b/apps/desktop/src/locales/vi/messages.json index e8b951fd61a..dcbedbe2938 100644 --- a/apps/desktop/src/locales/vi/messages.json +++ b/apps/desktop/src/locales/vi/messages.json @@ -1077,8 +1077,8 @@ "premiumSignUpStorage": { "message": "1GB bộ nhớ lưu trữ tập tin được mã hóa." }, - "premiumSignUpTwoStep": { - "message": "Các tùy chọn xác thực hai lớp bổ sung như YubiKey, FIDO U2F và Duo." + "premiumSignUpTwoStepOptions": { + "message": "Proprietary two-step login options such as YubiKey and Duo." }, "premiumSignUpReports": { "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." @@ -1492,6 +1492,9 @@ "vaultTimeoutActionLogOutDesc": { "message": "Kho bị đăng xuất sẽ yêu cầu bạn xác thực lại để có thể truy cập." }, + "unlockMethodNeededToChangeTimeoutActionDesc": { + "message": "Set up an unlock method to change your vault timeout action." + }, "lock": { "message": "Khóa", "description": "Verb form: to make secure or inaccesible by" @@ -1512,12 +1515,6 @@ "permanentlyDeletedItem": { "message": "Đã xóa vĩnh viễn mục" }, - "restoreItem": { - "message": "Khôi phục mục" - }, - "restoreItemConfirmation": { - "message": "Bạn có chắc chắn muốn khôi phục mục này không?" - }, "restoredItem": { "message": "Mục đã được khôi phục" }, @@ -2112,8 +2109,8 @@ "logInWithAnotherDevice": { "message": "Log in with another device" }, - "logInInitiated": { - "message": "Log in initiated" + "loginInitiated": { + "message": "Login initiated" }, "notificationSentDevice": { "message": "A notification has been sent to your device." @@ -2252,21 +2249,171 @@ "windowsBiometricUpdateWarningTitle": { "message": "Recommended Settings Update" }, + "deviceApprovalRequired": { + "message": "Device approval required. Select an approval option below:" + }, + "rememberThisDevice": { + "message": "Remember this device" + }, + "uncheckIfPublicDevice": { + "message": "Uncheck if using a public device" + }, + "approveFromYourOtherDevice": { + "message": "Approve from your other device" + }, + "requestAdminApproval": { + "message": "Request admin approval" + }, + "approveWithMasterPassword": { + "message": "Approve with master password" + }, "region": { "message": "Region" }, + "ssoIdentifierRequired": { + "message": "Organization SSO identifier is required." + }, "eu": { "message": "EU", "description": "European Union" }, - "us": { - "message": "US", - "description": "United States" + "loggingInOn": { + "message": "Logging in on" + }, + "usDomain": { + "message": "bitwarden.com" + }, + "euDomain": { + "message": "bitwarden.eu" }, "selfHosted": { "message": "Self-hosted" }, "accessDenied": { "message": "Access denied. You do not have permission to view this page." + }, + "accountSuccessfullyCreated": { + "message": "Account successfully created!" + }, + "adminApprovalRequested": { + "message": "Admin approval requested" + }, + "adminApprovalRequestSentToAdmins": { + "message": "Your request has been sent to your admin." + }, + "youWillBeNotifiedOnceApproved": { + "message": "You will be notified once approved." + }, + "troubleLoggingIn": { + "message": "Trouble logging in?" + }, + "loginApproved": { + "message": "Login approved" + }, + "userEmailMissing": { + "message": "User email missing" + }, + "deviceTrusted": { + "message": "Device trusted" + }, + "inputRequired": { + "message": "Input is required." + }, + "required": { + "message": "required" + }, + "search": { + "message": "Search" + }, + "inputMinLength": { + "message": "Input must be at least $COUNT$ characters long.", + "placeholders": { + "count": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxLength": { + "message": "Input must not exceed $COUNT$ characters in length.", + "placeholders": { + "count": { + "content": "$1", + "example": "20" + } + } + }, + "inputForbiddenCharacters": { + "message": "The following characters are not allowed: $CHARACTERS$", + "placeholders": { + "characters": { + "content": "$1", + "example": "@, #, $, %" + } + } + }, + "inputMinValue": { + "message": "Input value must be at least $MIN$.", + "placeholders": { + "min": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxValue": { + "message": "Input value must not exceed $MAX$.", + "placeholders": { + "max": { + "content": "$1", + "example": "100" + } + } + }, + "multipleInputEmails": { + "message": "1 or more emails are invalid" + }, + "inputTrimValidator": { + "message": "Input must not contain only whitespace.", + "description": "Notification to inform the user that a form's input can't contain only whitespace." + }, + "inputEmail": { + "message": "Input is not an email address." + }, + "fieldsNeedAttention": { + "message": "$COUNT$ field(s) above need your attention.", + "placeholders": { + "count": { + "content": "$1", + "example": "4" + } + } + }, + "selectPlaceholder": { + "message": "-- Select --" + }, + "multiSelectPlaceholder": { + "message": "-- Type to filter --" + }, + "multiSelectLoading": { + "message": "Retrieving options..." + }, + "multiSelectNotFound": { + "message": "No items found" + }, + "multiSelectClearAll": { + "message": "Clear all" + }, + "plusNMore": { + "message": "+ $QUANTITY$ more", + "placeholders": { + "quantity": { + "content": "$1", + "example": "5" + } + } + }, + "submenu": { + "message": "Submenu" } } diff --git a/apps/desktop/src/locales/zh_CN/messages.json b/apps/desktop/src/locales/zh_CN/messages.json index 60cfa90e841..ff74b521eed 100644 --- a/apps/desktop/src/locales/zh_CN/messages.json +++ b/apps/desktop/src/locales/zh_CN/messages.json @@ -422,7 +422,7 @@ "message": "单词分隔符" }, "capitalize": { - "message": "大写", + "message": "首字母大写", "description": "Make the first letter of a word uppercase." }, "includeNumber": { @@ -824,7 +824,7 @@ "message": "解锁​​​​" }, "loggedInAsOn": { - "message": "已使用 $EMAIL$ 在 $HOSTNAME$ 上登录。", + "message": "已在 $HOSTNAME$ 上以 $EMAIL$ 身份登录。", "placeholders": { "email": { "content": "$1", @@ -1077,8 +1077,8 @@ "premiumSignUpStorage": { "message": "1 GB 文件附件加密存储。" }, - "premiumSignUpTwoStep": { - "message": "额外的两步登录选项,如 YubiKey、FIDO U2F 和 Duo。" + "premiumSignUpTwoStepOptions": { + "message": "Proprietary two-step login options such as YubiKey and Duo." }, "premiumSignUpReports": { "message": "密码健康、账户体检以及数据泄露报告,保障您的密码库安全。" @@ -1492,6 +1492,9 @@ "vaultTimeoutActionLogOutDesc": { "message": "需要重新验证才能再次访问您的密码库。" }, + "unlockMethodNeededToChangeTimeoutActionDesc": { + "message": "设置一个解锁方式以更改您的密码库超时动作。" + }, "lock": { "message": "锁定", "description": "Verb form: to make secure or inaccesible by" @@ -1512,12 +1515,6 @@ "permanentlyDeletedItem": { "message": "项目已永久删除" }, - "restoreItem": { - "message": "恢复项目" - }, - "restoreItemConfirmation": { - "message": "您确定要恢复此项目吗?" - }, "restoredItem": { "message": "项目已恢复" }, @@ -2112,7 +2109,7 @@ "logInWithAnotherDevice": { "message": "使用其他设备登录" }, - "logInInitiated": { + "loginInitiated": { "message": "登录已发起" }, "notificationSentDevice": { @@ -2252,21 +2249,171 @@ "windowsBiometricUpdateWarningTitle": { "message": "推荐的设置更新" }, + "deviceApprovalRequired": { + "message": "需要设备批准。请在下面选择一个批准选项:" + }, + "rememberThisDevice": { + "message": "记住此设备" + }, + "uncheckIfPublicDevice": { + "message": "若使用公共设备,请取消勾选" + }, + "approveFromYourOtherDevice": { + "message": "从您的其他设备批准" + }, + "requestAdminApproval": { + "message": "请求管理员批准" + }, + "approveWithMasterPassword": { + "message": "使用主密码批准" + }, "region": { "message": "区域" }, + "ssoIdentifierRequired": { + "message": "必须填写组织 SSO 标识符。" + }, "eu": { "message": "欧盟", "description": "European Union" }, - "us": { - "message": "美国", - "description": "United States" + "loggingInOn": { + "message": "登录到" + }, + "usDomain": { + "message": "bitwarden.com" + }, + "euDomain": { + "message": "bitwarden.eu" }, "selfHosted": { "message": "自托管" }, "accessDenied": { "message": "访问被拒绝。您没有权限查看此页面。" + }, + "accountSuccessfullyCreated": { + "message": "账户已成功创建!" + }, + "adminApprovalRequested": { + "message": "已请求管理员批准" + }, + "adminApprovalRequestSentToAdmins": { + "message": "您的请求已发送给您的管理员。" + }, + "youWillBeNotifiedOnceApproved": { + "message": "批准后,您将收到通知。" + }, + "troubleLoggingIn": { + "message": "登录遇到问题?" + }, + "loginApproved": { + "message": "登录已批准" + }, + "userEmailMissing": { + "message": "缺少用户电子邮件" + }, + "deviceTrusted": { + "message": "设备已信任" + }, + "inputRequired": { + "message": "必须输入内容。" + }, + "required": { + "message": "必填" + }, + "search": { + "message": "搜索" + }, + "inputMinLength": { + "message": "至少输入 $COUNT$ 个字符。", + "placeholders": { + "count": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxLength": { + "message": "输入长度不能超过 $COUNT$ 个字符。", + "placeholders": { + "count": { + "content": "$1", + "example": "20" + } + } + }, + "inputForbiddenCharacters": { + "message": "以下字符不被允许:$CHARACTERS$", + "placeholders": { + "characters": { + "content": "$1", + "example": "@, #, $, %" + } + } + }, + "inputMinValue": { + "message": "输入的值不能低于 $MIN$。", + "placeholders": { + "min": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxValue": { + "message": "输入的值不能超过 $MAX$。", + "placeholders": { + "max": { + "content": "$1", + "example": "100" + } + } + }, + "multipleInputEmails": { + "message": "一个或多个电子邮件地址无效" + }, + "inputTrimValidator": { + "message": "输入不能只包含空格。", + "description": "Notification to inform the user that a form's input can't contain only whitespace." + }, + "inputEmail": { + "message": "输入的不是电子邮件地址。" + }, + "fieldsNeedAttention": { + "message": "上面的 $COUNT$ 个字段需要您注意。", + "placeholders": { + "count": { + "content": "$1", + "example": "4" + } + } + }, + "selectPlaceholder": { + "message": "-- 选择 --" + }, + "multiSelectPlaceholder": { + "message": "-- 输入以筛选 --" + }, + "multiSelectLoading": { + "message": "正在获取选项..." + }, + "multiSelectNotFound": { + "message": "未找到任何条目" + }, + "multiSelectClearAll": { + "message": "清除全部" + }, + "plusNMore": { + "message": "+ $QUANTITY$ more", + "placeholders": { + "quantity": { + "content": "$1", + "example": "5" + } + } + }, + "submenu": { + "message": "子菜单" } } diff --git a/apps/desktop/src/locales/zh_TW/messages.json b/apps/desktop/src/locales/zh_TW/messages.json index 44252535210..1de910b1b44 100644 --- a/apps/desktop/src/locales/zh_TW/messages.json +++ b/apps/desktop/src/locales/zh_TW/messages.json @@ -542,7 +542,7 @@ "message": "必須再次輸入主密碼。" }, "masterPasswordMinlength": { - "message": "Master password must be at least $VALUE$ characters long.", + "message": "主密碼需要至少 $VALUE$ 個字元。", "description": "The Master Password must be at least a specific number of characters long.", "placeholders": { "value": { @@ -771,7 +771,7 @@ "message": "聯絡我們" }, "helpAndFeedback": { - "message": "Help and feedback" + "message": "幫助和意見回饋" }, "getHelp": { "message": "尋求幫助" @@ -1077,8 +1077,8 @@ "premiumSignUpStorage": { "message": "用於檔案附件的 1 GB 的加密檔案儲存空間。" }, - "premiumSignUpTwoStep": { - "message": "YubiKey、FIDO U2F 和 Duo 等額外的兩步驟登入選項。" + "premiumSignUpTwoStepOptions": { + "message": "Proprietary two-step login options such as YubiKey and Duo." }, "premiumSignUpReports": { "message": "密碼健康度檢查、提供帳戶體檢以及資料外洩報告,以保障您的密碼庫安全。" @@ -1393,7 +1393,7 @@ "message": "使用 Windows Hello 解鎖" }, "additionalWindowsHelloSettings": { - "message": "Additional Windows Hello settings" + "message": "額外的 Windows Hello 設定" }, "windowsHelloConsentMessage": { "message": "驗證 Bitwarden。" @@ -1402,7 +1402,7 @@ "message": "使用 Touch ID 解鎖" }, "additionalTouchIdSettings": { - "message": "Additional Touch ID settings" + "message": "額外的 Touch ID 設定" }, "touchIdConsentMessage": { "message": "解鎖您的密碼庫" @@ -1414,7 +1414,7 @@ "message": "啟動時詢問 Touch ID" }, "requirePasswordOnStart": { - "message": "Require password or PIN on app start" + "message": "需要在啟動應用程式時輸入密碼或 PIN 碼。" }, "recommendedForSecurity": { "message": "Recommended for security." @@ -1492,6 +1492,9 @@ "vaultTimeoutActionLogOutDesc": { "message": "需要重新驗證才能再次存取密碼庫。" }, + "unlockMethodNeededToChangeTimeoutActionDesc": { + "message": "Set up an unlock method to change your vault timeout action." + }, "lock": { "message": "鎖定", "description": "Verb form: to make secure or inaccesible by" @@ -1512,12 +1515,6 @@ "permanentlyDeletedItem": { "message": "項目已永久刪除" }, - "restoreItem": { - "message": "還原項目" - }, - "restoreItemConfirmation": { - "message": "您確定要恢復此項目嗎?" - }, "restoredItem": { "message": "項目已還原" }, @@ -1540,7 +1537,7 @@ "message": "要完成 SSO 登入設定,請設定一組主密碼以存取和保護您的密碼庫。" }, "currentMasterPass": { - "message": "Current master password" + "message": "目前的主密碼" }, "newMasterPass": { "message": "新的主密碼" @@ -2112,11 +2109,11 @@ "logInWithAnotherDevice": { "message": "使用其他裝置登入" }, - "logInInitiated": { - "message": "Log in initiated" + "loginInitiated": { + "message": "登入已發起" }, "notificationSentDevice": { - "message": "A notification has been sent to your device." + "message": "已傳送通知至您的裝置。" }, "fingerprintMatchInfo": { "message": "Please make sure your vault is unlocked and Fingerprint phrase matches the other device." @@ -2128,17 +2125,17 @@ "message": "Log in with device must be set up in the settings of the Bitwarden app. Need another option?" }, "viewAllLoginOptions": { - "message": "View all login options" + "message": "檢視所有登入選項" }, "resendNotification": { - "message": "Resend notification" + "message": "重新傳送通知" }, "toggleCharacterCount": { "message": "切換字元計數", "description": "'Character count' describes a feature that displays a number next to each character of the password." }, "areYouTryingtoLogin": { - "message": "Are you trying to log in?" + "message": "您正在嘗試登入嗎?" }, "logInAttemptBy": { "message": "Login attempt by $EMAIL$", @@ -2150,22 +2147,22 @@ } }, "deviceType": { - "message": "Device Type" + "message": "裝置類別" }, "ipAddress": { - "message": "IP Address" + "message": "IP 位址" }, "time": { - "message": "Time" + "message": "時間" }, "confirmLogIn": { - "message": "Confirm login" + "message": "確認登入" }, "denyLogIn": { - "message": "Deny login" + "message": "拒絕登入" }, "approveLoginRequests": { - "message": "Approve login requests" + "message": "批准登入要求" }, "logInConfirmedForEmailOnDevice": { "message": "Login confirmed for $EMAIL$ on $DEVICE$", @@ -2184,7 +2181,7 @@ "message": "You denied a login attempt from another device. If this really was you, try to log in with the device again." }, "justNow": { - "message": "Just now" + "message": "剛剛" }, "requestedXMinutesAgo": { "message": "Requested $MINUTES$ minutes ago", @@ -2196,7 +2193,7 @@ } }, "loginRequestHasAlreadyExpired": { - "message": "Login request has already expired." + "message": "登入要求已逾期。" }, "thisRequestIsNoLongerValid": { "message": "This request is no longer valid." @@ -2205,7 +2202,7 @@ "message": "Use this device to approve login requests made from other devices." }, "confirmLoginAtemptForMail": { - "message": "Confirm login attempt for $EMAIL$", + "message": "確認 $EMAIL$ 的登入嘗試", "placeholders": { "email": { "content": "$1", @@ -2214,31 +2211,31 @@ } }, "logInRequested": { - "message": "Log in requested" + "message": "已要求登入" }, "exposedMasterPassword": { - "message": "Exposed Master Password" + "message": "已暴露的主密碼" }, "exposedMasterPasswordDesc": { "message": "Password found in a data breach. Use a unique password to protect your account. Are you sure you want to use an exposed password?" }, "weakAndExposedMasterPassword": { - "message": "Weak and Exposed Master Password" + "message": "強度不足且已暴露的主密碼" }, "weakAndBreachedMasterPasswordDesc": { "message": "Weak password identified and found in a data breach. Use a strong and unique password to protect your account. Are you sure you want to use this password?" }, "checkForBreaches": { - "message": "Check known data breaches for this password" + "message": "檢查外洩密碼資料庫中是否有此密碼" }, "important": { - "message": "Important:" + "message": "重要:" }, "masterPasswordHint": { - "message": "Your master password cannot be recovered if you forget it!" + "message": "如果您忘記主密碼,沒有復原的方法!" }, "characterMinimum": { - "message": "$LENGTH$ character minimum", + "message": "$LENGTH$ 個字元以上", "placeholders": { "length": { "content": "$1", @@ -2252,21 +2249,171 @@ "windowsBiometricUpdateWarningTitle": { "message": "Recommended Settings Update" }, + "deviceApprovalRequired": { + "message": "Device approval required. Select an approval option below:" + }, + "rememberThisDevice": { + "message": "記住這個裝置" + }, + "uncheckIfPublicDevice": { + "message": "Uncheck if using a public device" + }, + "approveFromYourOtherDevice": { + "message": "Approve from your other device" + }, + "requestAdminApproval": { + "message": "Request admin approval" + }, + "approveWithMasterPassword": { + "message": "Approve with master password" + }, "region": { - "message": "Region" + "message": "區域" + }, + "ssoIdentifierRequired": { + "message": "Organization SSO identifier is required." }, "eu": { "message": "EU", "description": "European Union" }, - "us": { - "message": "US", - "description": "United States" + "loggingInOn": { + "message": "Logging in on" + }, + "usDomain": { + "message": "bitwarden.com" + }, + "euDomain": { + "message": "bitwarden.eu" }, "selfHosted": { - "message": "Self-hosted" + "message": "自建" }, "accessDenied": { - "message": "Access denied. You do not have permission to view this page." + "message": "拒絕存取。您沒有檢視此頁面的權限。" + }, + "accountSuccessfullyCreated": { + "message": "成功建立帳號!" + }, + "adminApprovalRequested": { + "message": "需要管理員批准" + }, + "adminApprovalRequestSentToAdmins": { + "message": "Your request has been sent to your admin." + }, + "youWillBeNotifiedOnceApproved": { + "message": "You will be notified once approved." + }, + "troubleLoggingIn": { + "message": "登入時遇到困難?" + }, + "loginApproved": { + "message": "Login approved" + }, + "userEmailMissing": { + "message": "User email missing" + }, + "deviceTrusted": { + "message": "Device trusted" + }, + "inputRequired": { + "message": "Input is required." + }, + "required": { + "message": "必填" + }, + "search": { + "message": "搜尋" + }, + "inputMinLength": { + "message": "必須輸入至少 $COUNT$ 個字元。", + "placeholders": { + "count": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxLength": { + "message": "輸入的內容長度不得超過 $COUNT$ 字元。", + "placeholders": { + "count": { + "content": "$1", + "example": "20" + } + } + }, + "inputForbiddenCharacters": { + "message": "The following characters are not allowed: $CHARACTERS$", + "placeholders": { + "characters": { + "content": "$1", + "example": "@, #, $, %" + } + } + }, + "inputMinValue": { + "message": "Input value must be at least $MIN$.", + "placeholders": { + "min": { + "content": "$1", + "example": "8" + } + } + }, + "inputMaxValue": { + "message": "Input value must not exceed $MAX$.", + "placeholders": { + "max": { + "content": "$1", + "example": "100" + } + } + }, + "multipleInputEmails": { + "message": "一個或多個電子郵件無效。" + }, + "inputTrimValidator": { + "message": "Input must not contain only whitespace.", + "description": "Notification to inform the user that a form's input can't contain only whitespace." + }, + "inputEmail": { + "message": "Input is not an email address." + }, + "fieldsNeedAttention": { + "message": "$COUNT$ field(s) above need your attention.", + "placeholders": { + "count": { + "content": "$1", + "example": "4" + } + } + }, + "selectPlaceholder": { + "message": "-- 選擇 --" + }, + "multiSelectPlaceholder": { + "message": "-- Type to filter --" + }, + "multiSelectLoading": { + "message": "正在取得選項…" + }, + "multiSelectNotFound": { + "message": "找不到任何項目" + }, + "multiSelectClearAll": { + "message": "全部清除" + }, + "plusNMore": { + "message": "+ $QUANTITY$ more", + "placeholders": { + "quantity": { + "content": "$1", + "example": "5" + } + } + }, + "submenu": { + "message": "子選單" } } diff --git a/apps/desktop/src/main.ts b/apps/desktop/src/main.ts index 9f15d0d24d9..5107d31b1c5 100644 --- a/apps/desktop/src/main.ts +++ b/apps/desktop/src/main.ts @@ -90,7 +90,6 @@ export class Main { null, this.memoryStorageService, this.logService, - null, new StateFactory(GlobalState, Account), false // Do not use disk caching because this will get out of sync with the renderer service ); diff --git a/apps/desktop/src/main/menu/menu.account.ts b/apps/desktop/src/main/menu/menu.account.ts index 10a6d6d77d5..5060a4934c5 100644 --- a/apps/desktop/src/main/menu/menu.account.ts +++ b/apps/desktop/src/main/menu/menu.account.ts @@ -15,14 +15,15 @@ export class AccountMenu implements IMenubarMenu { } get items(): MenuItemConstructorOptions[] { - return [ - this.premiumMembership, - this.changeMasterPassword, - this.twoStepLogin, - this.fingerprintPhrase, - this.separator, - this.deleteAccount, - ]; + const items = [this.premiumMembership]; + if (this._hasMasterPassword) { + items.push(this.changeMasterPassword); + } + items.push(this.twoStepLogin); + items.push(this.fingerprintPhrase); + items.push(this.separator); + items.push(this.deleteAccount); + return items; } private readonly _i18nService: I18nService; @@ -30,19 +31,22 @@ export class AccountMenu implements IMenubarMenu { private readonly _webVaultUrl: string; private readonly _window: BrowserWindow; private readonly _isLocked: boolean; + private readonly _hasMasterPassword: boolean; constructor( i18nService: I18nService, messagingService: MessagingService, webVaultUrl: string, window: BrowserWindow, - isLocked: boolean + isLocked: boolean, + hasMasterPassword: boolean ) { this._i18nService = i18nService; this._messagingService = messagingService; this._webVaultUrl = webVaultUrl; this._window = window; this._isLocked = isLocked; + this._hasMasterPassword = hasMasterPassword; } private get premiumMembership(): MenuItemConstructorOptions { diff --git a/apps/desktop/src/main/menu/menu.bitwarden.ts b/apps/desktop/src/main/menu/menu.bitwarden.ts index 3c3a16702ee..6873f679de7 100644 --- a/apps/desktop/src/main/menu/menu.bitwarden.ts +++ b/apps/desktop/src/main/menu/menu.bitwarden.ts @@ -52,9 +52,10 @@ export class BitwardenMenu extends FirstMenu implements IMenubarMenu { updater: UpdaterMain, window: BrowserWindow, accounts: { [userId: string]: MenuAccount }, - isLocked: boolean + isLocked: boolean, + isLockable: boolean ) { - super(i18nService, messagingService, updater, window, accounts, isLocked); + super(i18nService, messagingService, updater, window, accounts, isLocked, isLockable); } private get aboutBitwarden(): MenuItemConstructorOptions { diff --git a/apps/desktop/src/main/menu/menu.file.ts b/apps/desktop/src/main/menu/menu.file.ts index 618acdc7fe1..173b6066aba 100644 --- a/apps/desktop/src/main/menu/menu.file.ts +++ b/apps/desktop/src/main/menu/menu.file.ts @@ -51,9 +51,10 @@ export class FileMenu extends FirstMenu implements IMenubarMenu { updater: UpdaterMain, window: BrowserWindow, accounts: { [userId: string]: MenuAccount }, - isLocked: boolean + isLocked: boolean, + isLockable: boolean ) { - super(i18nService, messagingService, updater, window, accounts, isLocked); + super(i18nService, messagingService, updater, window, accounts, isLocked, isLockable); } private get addNewLogin(): MenuItemConstructorOptions { diff --git a/apps/desktop/src/main/menu/menu.first.ts b/apps/desktop/src/main/menu/menu.first.ts index 805956f2632..b164e280d0b 100644 --- a/apps/desktop/src/main/menu/menu.first.ts +++ b/apps/desktop/src/main/menu/menu.first.ts @@ -9,33 +9,24 @@ import { UpdaterMain } from "../updater.main"; import { MenuAccount } from "./menu.updater"; export class FirstMenu { - protected readonly _i18nService: I18nService; - protected readonly _updater: UpdaterMain; - protected readonly _messagingService: MessagingService; - protected readonly _accounts: { [userId: string]: MenuAccount }; - protected readonly _window: BrowserWindow; - protected readonly _isLocked: boolean; - constructor( - i18nService: I18nService, - messagingService: MessagingService, - updater: UpdaterMain, - window: BrowserWindow, - accounts: { [userId: string]: MenuAccount }, - isLocked: boolean - ) { - this._i18nService = i18nService; - this._updater = updater; - this._messagingService = messagingService; - this._window = window; - this._accounts = accounts; - this._isLocked = isLocked; - } + protected readonly _i18nService: I18nService, + protected readonly _messagingService: MessagingService, + protected readonly _updater: UpdaterMain, + protected readonly _window: BrowserWindow, + protected readonly _accounts: { [userId: string]: MenuAccount }, + protected readonly _isLocked: boolean, + protected readonly _isLockable: boolean + ) {} protected get hasAccounts(): boolean { return this._accounts != null && Object.keys(this._accounts).length > 0; } + protected get hasLockableAccounts(): boolean { + return this._accounts != null && Object.values(this._accounts).some((a) => a.isLockable); + } + protected get checkForUpdates(): MenuItemConstructorOptions { return { id: "checkForUpdates", @@ -66,23 +57,29 @@ export class FirstMenu { id: "lock", label: this.localize("lockVault"), submenu: this.lockSubmenu, - enabled: this.hasAccounts, + enabled: this.hasLockableAccounts, }; } protected get lockSubmenu(): MenuItemConstructorOptions[] { const value: MenuItemConstructorOptions[] = []; for (const userId in this._accounts) { - if (userId == null) { + if (!userId) { + continue; + } + + const account = this._accounts[userId]; + + if (account == null || !account.isLockable) { continue; } value.push({ - label: this._accounts[userId].email, - id: `lockNow_${this._accounts[userId].userId}`, - click: () => this.sendMessage("lockVault", { userId: this._accounts[userId].userId }), - enabled: !this._accounts[userId].isLocked, - visible: this._accounts[userId].isAuthenticated, + label: account.email, + id: `lockNow_${account.userId}`, + click: () => this.sendMessage("lockVault", { userId: account.userId }), + enabled: !account.isLocked, + visible: account.isAuthenticated, }); } return value; diff --git a/apps/desktop/src/main/menu/menu.updater.ts b/apps/desktop/src/main/menu/menu.updater.ts index 75454a56f86..170804cae25 100644 --- a/apps/desktop/src/main/menu/menu.updater.ts +++ b/apps/desktop/src/main/menu/menu.updater.ts @@ -1,5 +1,4 @@ export class MenuUpdateRequest { - hideChangeMasterPassword: boolean; activeUserId: string; accounts: { [userId: string]: MenuAccount }; } @@ -7,6 +6,8 @@ export class MenuUpdateRequest { export class MenuAccount { isAuthenticated: boolean; isLocked: boolean; + isLockable: boolean; userId: string; email: string; + hasMasterPassword: boolean; } diff --git a/apps/desktop/src/main/menu/menubar.ts b/apps/desktop/src/main/menu/menubar.ts index 6ac28a1c8db..c3f37ecbffb 100644 --- a/apps/desktop/src/main/menu/menubar.ts +++ b/apps/desktop/src/main/menu/menubar.ts @@ -62,6 +62,10 @@ export class Menubar { isLocked = updateRequest.accounts[updateRequest.activeUserId]?.isLocked ?? true; } + const isLockable = !isLocked && updateRequest?.accounts[updateRequest.activeUserId]?.isLockable; + const hasMasterPassword = + updateRequest?.accounts[updateRequest.activeUserId]?.hasMasterPassword ?? false; + this.items = [ new FileMenu( i18nService, @@ -69,11 +73,19 @@ export class Menubar { updaterMain, windowMain.win, updateRequest?.accounts, - isLocked + isLocked, + isLockable ), new EditMenu(i18nService, messagingService, isLocked), new ViewMenu(i18nService, messagingService, isLocked), - new AccountMenu(i18nService, messagingService, webVaultUrl, windowMain.win, isLocked), + new AccountMenu( + i18nService, + messagingService, + webVaultUrl, + windowMain.win, + isLocked, + hasMasterPassword + ), new WindowMenu(i18nService, messagingService, windowMain), new HelpMenu( i18nService, @@ -91,7 +103,8 @@ export class Menubar { updaterMain, windowMain.win, updateRequest?.accounts, - isLocked + isLocked, + isLockable ), ], ...this.items, diff --git a/apps/desktop/src/main/window.main.ts b/apps/desktop/src/main/window.main.ts index 6faac0c684c..4ea28c74c5f 100644 --- a/apps/desktop/src/main/window.main.ts +++ b/apps/desktop/src/main/window.main.ts @@ -236,7 +236,7 @@ export class WindowMain { case "light": return "#ededed"; case "dark": - return "#222222"; + return "#15181e"; case "nord": return "#3b4252"; } diff --git a/apps/desktop/src/package-lock.json b/apps/desktop/src/package-lock.json index 519cd72140c..54af2baea1e 100644 --- a/apps/desktop/src/package-lock.json +++ b/apps/desktop/src/package-lock.json @@ -1,12 +1,12 @@ { "name": "@bitwarden/desktop", - "version": "2023.7.1", + "version": "2023.8.3", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@bitwarden/desktop", - "version": "2023.7.1", + "version": "2023.8.3", "license": "GPL-3.0", "dependencies": { "@bitwarden/desktop-native": "file:../desktop_native" diff --git a/apps/desktop/src/package.json b/apps/desktop/src/package.json index 4fe55b4fed1..b171046bcef 100644 --- a/apps/desktop/src/package.json +++ b/apps/desktop/src/package.json @@ -2,7 +2,7 @@ "name": "@bitwarden/desktop", "productName": "Bitwarden", "description": "A secure and free password manager for all of your devices.", - "version": "2023.7.1", + "version": "2023.8.3", "author": "Bitwarden Inc. (https://bitwarden.com)", "homepage": "https://bitwarden.com", "license": "GPL-3.0", diff --git a/apps/desktop/src/platform/services/electron-crypto.service.spec.ts b/apps/desktop/src/platform/services/electron-crypto.service.spec.ts new file mode 100644 index 00000000000..92f9391b131 --- /dev/null +++ b/apps/desktop/src/platform/services/electron-crypto.service.spec.ts @@ -0,0 +1,91 @@ +import { mock, mockReset } from "jest-mock-extended"; + +import { CryptoFunctionService } from "@bitwarden/common/platform/abstractions/crypto-function.service"; +import { EncryptService } from "@bitwarden/common/platform/abstractions/encrypt.service"; +import { LogService } from "@bitwarden/common/platform/abstractions/log.service"; +import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service"; +import { + SymmetricCryptoKey, + UserKey, +} from "@bitwarden/common/platform/models/domain/symmetric-crypto-key"; +import { CsprngArray } from "@bitwarden/common/types/csprng"; + +import { ElectronCryptoService } from "./electron-crypto.service"; +import { ElectronStateService } from "./electron-state.service.abstraction"; + +describe("electronCryptoService", () => { + let electronCryptoService: ElectronCryptoService; + + const cryptoFunctionService = mock(); + const encryptService = mock(); + const platformUtilService = mock(); + const logService = mock(); + const stateService = mock(); + + const mockUserId = "mock user id"; + + beforeEach(() => { + mockReset(cryptoFunctionService); + mockReset(encryptService); + mockReset(platformUtilService); + mockReset(logService); + mockReset(stateService); + + electronCryptoService = new ElectronCryptoService( + cryptoFunctionService, + encryptService, + platformUtilService, + logService, + stateService + ); + }); + + it("instantiates", () => { + expect(electronCryptoService).not.toBeFalsy(); + }); + + describe("setUserKey", () => { + let mockUserKey: UserKey; + + beforeEach(() => { + const mockRandomBytes = new Uint8Array(64) as CsprngArray; + mockUserKey = new SymmetricCryptoKey(mockRandomBytes) as UserKey; + }); + + describe("Biometric Key refresh", () => { + it("sets an Biometric key if getBiometricUnlock is true and the platform supports secure storage", async () => { + stateService.getBiometricUnlock.mockResolvedValue(true); + platformUtilService.supportsSecureStorage.mockReturnValue(true); + stateService.getBiometricRequirePasswordOnStart.mockResolvedValue(false); + + await electronCryptoService.setUserKey(mockUserKey, mockUserId); + + expect(stateService.setUserKeyBiometric).toHaveBeenCalledWith( + expect.objectContaining({ key: expect.any(String), clientEncKeyHalf: null }), + { + userId: mockUserId, + } + ); + }); + + it("clears the Biometric key if getBiometricUnlock is false or the platform does not support secure storage", async () => { + stateService.getBiometricUnlock.mockResolvedValue(true); + platformUtilService.supportsSecureStorage.mockReturnValue(false); + + await electronCryptoService.setUserKey(mockUserKey, mockUserId); + + expect(stateService.setUserKeyBiometric).toHaveBeenCalledWith(null, { + userId: mockUserId, + }); + }); + + it("clears the old deprecated Biometric key whenever a User Key is set", async () => { + await electronCryptoService.setUserKey(mockUserKey, mockUserId); + + expect(stateService.setCryptoMasterKeyBiometric).toHaveBeenCalledWith(null, { + userId: mockUserId, + }); + }); + }); + }); +}); diff --git a/apps/desktop/src/platform/services/electron-crypto.service.ts b/apps/desktop/src/platform/services/electron-crypto.service.ts index 1fb90e52ca4..e21d2001977 100644 --- a/apps/desktop/src/platform/services/electron-crypto.service.ts +++ b/apps/desktop/src/platform/services/electron-crypto.service.ts @@ -4,7 +4,12 @@ import { EncryptService } from "@bitwarden/common/platform/abstractions/encrypt. 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"; -import { SymmetricCryptoKey } from "@bitwarden/common/platform/models/domain/symmetric-crypto-key"; +import { EncString } from "@bitwarden/common/platform/models/domain/enc-string"; +import { + MasterKey, + SymmetricCryptoKey, + UserKey, +} from "@bitwarden/common/platform/models/domain/symmetric-crypto-key"; import { CryptoService } from "@bitwarden/common/platform/services/crypto.service"; import { CsprngString } from "@bitwarden/common/types/csprng"; @@ -21,36 +26,80 @@ export class ElectronCryptoService extends CryptoService { super(cryptoFunctionService, encryptService, platformUtilsService, logService, stateService); } - protected override async storeKey(key: SymmetricCryptoKey, userId?: string) { - await super.storeKey(key, userId); + override async hasUserKeyStored(keySuffix: KeySuffixOptions, userId?: string): Promise { + if (keySuffix === KeySuffixOptions.Biometric) { + // TODO: Remove after 2023.10 release (https://bitwarden.atlassian.net/browse/PM-3474) + const oldKey = await this.stateService.hasCryptoMasterKeyBiometric({ userId: userId }); + return oldKey || (await this.stateService.hasUserKeyBiometric({ userId: userId })); + } + return super.hasUserKeyStored(keySuffix, userId); + } + + override async clearStoredUserKey(keySuffix: KeySuffixOptions, userId?: string): Promise { + if (keySuffix === KeySuffixOptions.Biometric) { + this.stateService.setUserKeyBiometric(null, { userId: userId }); + this.clearDeprecatedKeys(KeySuffixOptions.Biometric, userId); + return; + } + super.clearStoredUserKey(keySuffix, userId); + } + + protected override async storeAdditionalKeys(key: UserKey, userId?: string) { + await super.storeAdditionalKeys(key, userId); const storeBiometricKey = await this.shouldStoreKey(KeySuffixOptions.Biometric, userId); if (storeBiometricKey) { await this.storeBiometricKey(key, userId); } else { - await this.stateService.setCryptoMasterKeyBiometric(null, { userId: userId }); + await this.stateService.setUserKeyBiometric(null, { userId: userId }); } + await this.clearDeprecatedKeys(KeySuffixOptions.Biometric, userId); } - protected async storeBiometricKey(key: SymmetricCryptoKey, userId?: string): Promise { + protected override async getKeyFromStorage( + keySuffix: KeySuffixOptions, + userId?: string + ): Promise { + if (keySuffix === KeySuffixOptions.Biometric) { + await this.migrateBiometricKeyIfNeeded(userId); + const userKey = await this.stateService.getUserKeyBiometric({ userId: userId }); + return new SymmetricCryptoKey(Utils.fromB64ToArray(userKey)) as UserKey; + } + return await super.getKeyFromStorage(keySuffix, userId); + } + + protected async storeBiometricKey(key: UserKey, userId?: string): Promise { let clientEncKeyHalf: CsprngString = null; if (await this.stateService.getBiometricRequirePasswordOnStart({ userId })) { clientEncKeyHalf = await this.getBiometricEncryptionClientKeyHalf(userId); } - await this.stateService.setCryptoMasterKeyBiometric( + await this.stateService.setUserKeyBiometric( { key: key.keyB64, clientEncKeyHalf }, { userId: userId } ); } + protected async shouldStoreKey(keySuffix: KeySuffixOptions, userId?: string): Promise { + if (keySuffix === KeySuffixOptions.Biometric) { + const biometricUnlock = await this.stateService.getBiometricUnlock({ userId: userId }); + return biometricUnlock && this.platformUtilService.supportsSecureStorage(); + } + return await super.shouldStoreKey(keySuffix, userId); + } + + protected override async clearAllStoredUserKeys(userId?: string): Promise { + await this.stateService.setUserKeyBiometric(null, { userId: userId }); + super.clearAllStoredUserKeys(userId); + } + private async getBiometricEncryptionClientKeyHalf(userId?: string): Promise { try { let biometricKey = await this.stateService .getBiometricEncryptionClientKeyHalf({ userId }) .then((result) => result?.decrypt(null /* user encrypted */)) .then((result) => result as CsprngString); - const userKey = await this.getKeyForUserEncryption(); + const userKey = await this.getUserKeyWithLegacySupport(); if (biometricKey == null && userKey != null) { const keyBytes = await this.cryptoFunctionService.randomBytes(32); biometricKey = Utils.fromBufferToUtf8(keyBytes) as CsprngString; @@ -63,4 +112,34 @@ export class ElectronCryptoService extends CryptoService { return null; } } + + // --LEGACY METHODS-- + // We previously used the master key for additional keys, but now we use the user key. + // These methods support migrating the old keys to the new ones. + // TODO: Remove after 2023.10 release (https://bitwarden.atlassian.net/browse/PM-3475) + + override async clearDeprecatedKeys(keySuffix: KeySuffixOptions, userId?: string) { + if (keySuffix === KeySuffixOptions.Biometric) { + await this.stateService.setCryptoMasterKeyBiometric(null, { userId: userId }); + } + + super.clearDeprecatedKeys(keySuffix, userId); + } + + private async migrateBiometricKeyIfNeeded(userId?: string) { + if (await this.stateService.hasCryptoMasterKeyBiometric({ userId })) { + const oldBiometricKey = await this.stateService.getCryptoMasterKeyBiometric({ userId }); + // decrypt + const masterKey = new SymmetricCryptoKey(Utils.fromB64ToArray(oldBiometricKey)) as MasterKey; + let encUserKey = await this.stateService.getEncryptedCryptoSymmetricKey(); + encUserKey = encUserKey ?? (await this.stateService.getMasterKeyEncryptedUserKey()); + if (!encUserKey) { + throw new Error("No user key found during biometric migration"); + } + const userKey = await this.decryptUserKeyWithMasterKey(masterKey, new EncString(encUserKey)); + // migrate + await this.storeBiometricKey(userKey, userId); + await this.stateService.setCryptoMasterKeyBiometric(null, { userId }); + } + } } diff --git a/apps/desktop/src/platform/services/electron-state.service.ts b/apps/desktop/src/platform/services/electron-state.service.ts index 7c3ff38a1b5..0503aeb52a3 100644 --- a/apps/desktop/src/platform/services/electron-state.service.ts +++ b/apps/desktop/src/platform/services/electron-state.service.ts @@ -98,7 +98,11 @@ export class ElectronStateService options ); - return new SymmetricCryptoKey(Utils.fromB64ToArray(b64DeviceKey).buffer) as DeviceKey; + if (b64DeviceKey == null) { + return null; + } + + return new SymmetricCryptoKey(Utils.fromB64ToArray(b64DeviceKey)) as DeviceKey; } override async setDeviceKey(value: DeviceKey, options?: StorageOptions): Promise { diff --git a/apps/desktop/src/scss/box.scss b/apps/desktop/src/scss/box.scss index 2b720eac69c..9dbdc80a5bf 100644 --- a/apps/desktop/src/scss/box.scss +++ b/apps/desktop/src/scss/box.scss @@ -504,3 +504,26 @@ } } } + +.details { + .inner-content { + .box-content-row-flex:not([type="button"]) { + @media (max-width: 875px) { + flex-direction: column; + align-items: start; + } + + .action-buttons { + @media (max-width: 875px) { + margin-left: 0; + } + } + + .row-btn:first-of-type { + @media (max-width: 875px) { + margin-left: -8px; + } + } + } + } +} diff --git a/apps/desktop/src/scss/environment.scss b/apps/desktop/src/scss/environment.scss index d2bdfeeb66d..b9e3eaa7b23 100644 --- a/apps/desktop/src/scss/environment.scss +++ b/apps/desktop/src/scss/environment.scss @@ -86,15 +86,14 @@ img { margin-bottom: -2px; - width: 22px; height: 14px; } .img-us { - content: url("../images/us-flag.png"); + content: url("../images/flag-us.svg"); } .img-eu { - content: url("../images/eu-flag.png"); + content: url("../images/flag-eu.svg"); } } diff --git a/apps/desktop/src/scss/misc.scss b/apps/desktop/src/scss/misc.scss index a72b7754c13..8ed6a9b54be 100644 --- a/apps/desktop/src/scss/misc.scss +++ b/apps/desktop/src/scss/misc.scss @@ -561,7 +561,6 @@ h2, h3, label, a, -button, p, img, .box-header, diff --git a/apps/desktop/src/scss/pages.scss b/apps/desktop/src/scss/pages.scss index 5b3ad4a8583..fda75e834f3 100644 --- a/apps/desktop/src/scss/pages.scss +++ b/apps/desktop/src/scss/pages.scss @@ -5,7 +5,8 @@ #lock-page, #sso-page, #set-password-page, -#remove-password-page { +#remove-password-page, +#login-decryption-options-page { display: flex; justify-content: center; align-items: center; @@ -53,7 +54,8 @@ #hint-page, #two-factor-page, #lock-page, -#update-temp-password-page { +#update-temp-password-page, +#login-decryption-options-page { .content { width: 325px; transition: width 0.25s linear; @@ -189,7 +191,8 @@ } #login-page, -#login-with-device-page { +#login-with-device-page, +#login-decryption-options-page { flex-direction: column; justify-content: unset; padding-top: 20px; @@ -273,3 +276,14 @@ } } } + +#login-decryption-options-page { + .standard-bottom-margin { + margin-bottom: 20px; + } + + #rememberThisDeviceHintText { + font-size: $font-size-small; + color: $text-muted; + } +} diff --git a/apps/desktop/src/scss/plugins.scss b/apps/desktop/src/scss/plugins.scss index 1bb171bb804..aed093d53be 100644 --- a/apps/desktop/src/scss/plugins.scss +++ b/apps/desktop/src/scss/plugins.scss @@ -5,11 +5,17 @@ .toast-container { .toast-close-button { + @include themify($themes) { + color: themed("toastTextColor"); + } font-size: 18px; margin-right: 4px; } .ngx-toastr { + @include themify($themes) { + color: themed("toastTextColor"); + } align-items: center; background-image: none !important; border-radius: $border-radius; diff --git a/apps/desktop/src/scss/variables.scss b/apps/desktop/src/scss/variables.scss index 439eff2f2f0..3ad4c0f0754 100644 --- a/apps/desktop/src/scss/variables.scss +++ b/apps/desktop/src/scss/variables.scss @@ -20,10 +20,10 @@ $gray-light: #777; $text-muted: $gray-light; $brand-primary: #175ddc; -$brand-danger: #dd4b39; -$brand-success: #00a65a; +$brand-danger: #c83522; +$brand-success: #017e45; $brand-info: #555555; -$brand-warning: #bf7e16; +$brand-warning: #8b6609; $brand-primary-accent: #1252a3; $background-color: white; @@ -66,7 +66,6 @@ $themes: ( listItemBackgroundColor: $background-color, listItemBackgroundHoverColor: $list-item-hover, listItemBorderColor: $border-color, - groupingsActiveColor: darken($background-color-alt, 5%), disabledIconColor: $list-icon-color, headingColor: $gray-light, headingButtonColor: lighten($gray-light, 30%), @@ -96,6 +95,7 @@ $themes: ( passwordCountText: #212529, calloutBorderColor: $border-color-dark, calloutBackgroundColor: $background-color, + toastTextColor: #ffffff, accountSwitcherBackgroundColor: $background-color, accountSwitcherTextColor: #ffffff, svgSuffix: "-light.svg", @@ -104,60 +104,60 @@ $themes: ( ), dark: ( textColor: #ffffff, - borderColor: #2f2f2f, - backgroundColor: #363636, + borderColor: #15181e, + backgroundColor: #1f242e, borderColorAlt: #6e788a, - backgroundColorAlt: #3d3d3d, + backgroundColorAlt: #2f343d, // Ensure the `window.main.ts` is updated with this value - backgroundColorAlt2: #222222, - scrollbarColor: #4d4d4d, - scrollbarHoverColor: #5f5f5f, - boxBackgroundColor: #363636, - boxBackgroundHoverColor: #3f3f3f, - boxBorderColor: #2f2f2f, - headerBackgroundColor: #363636, - headerBorderColor: #272727, - headerInputBackgroundColor: #222222, - headerInputBackgroundFocusColor: #1d1d1d, + backgroundColorAlt2: #15181e, + scrollbarColor: #6e788a, + scrollbarHoverColor: #8d94a5, + boxBackgroundColor: #2f343d, + boxBackgroundHoverColor: #3c424e, + boxBorderColor: #4c525f, + headerBackgroundColor: #2f343d, + headerBorderColor: #15181e, + headerInputBackgroundColor: #3c424e, + headerInputBackgroundFocusColor: #4c525f, headerInputColor: #ffffff, - headerInputPlaceholderColor: #707070, - listItemBackgroundColor: #363636, - listItemBackgroundHoverColor: #3c3c3c, - listItemBorderColor: #2f2f2f, - groupingsActiveColor: #292929, - disabledIconColor: #c7c7cd, - headingColor: #a3a3a3, - headingButtonColor: #a3a3a3, + headerInputPlaceholderColor: #bac0ce, + listItemBackgroundColor: #1f242e, + listItemBackgroundHoverColor: #2f343d, + listItemBorderColor: #4c525f, + disabledIconColor: #6e7689, + headingColor: #bac0ce, + headingButtonColor: #bac0ce, headingButtonHoverColor: #ffffff, - labelColor: #a3a3a3, - mutedColor: #a3a3a3, - totpStrokeColor: #cacaca, - boxRowButtonColor: #cacaca, + labelColor: #bac0ce, + mutedColor: #bac0ce, + totpStrokeColor: #4c525f, + boxRowButtonColor: #bac0ce, boxRowButtonHoverColor: #ffffff, - inputBorderColor: #222222, - inputBackgroundColor: #363636, - inputPlaceholderColor: #707070, - buttonBackgroundColor: #363636, - buttonBorderColor: #1f1f1f, - buttonColor: #e0e0e0, - buttonPrimaryColor: #46ace7, - buttonDangerColor: #ff3e24, - primaryColor: #52bdfb, - primaryAccentColor: #3ea1da, - dangerColor: #ff3e24, - successColor: $brand-success, - infoColor: $brand-info, - warningColor: $brand-warning, + inputBorderColor: #4c525f, + inputBackgroundColor: #2f343d, + inputPlaceholderColor: #bac0ce, + buttonBackgroundColor: #272b32, + buttonBorderColor: #4c525f, + buttonColor: #bac0ce, + buttonPrimaryColor: #6f9df1, + buttonDangerColor: #ff8d85, + primaryColor: #6f9df1, + primaryAccentColor: #6f9df1, + dangerColor: #ff8d85, + successColor: #52e07c, + infoColor: #a4b0c6, + warningColor: #ffeb66, logoSuffix: "white", - passwordNumberColor: #52bdfb, - passwordSpecialColor: #ff7c70, + passwordNumberColor: #6f9df1, + passwordSpecialColor: #ff8d85, passwordCountText: #ffffff, - calloutBorderColor: #2f2f2f, - calloutBackgroundColor: #363636, - accountSwitcherBackgroundColor: #2f2f2f, + calloutBorderColor: #4c525f, + calloutBackgroundColor: #3c424e, + toastTextColor: #1f242e, + accountSwitcherBackgroundColor: #2f343d, accountSwitcherTextColor: #ffffff, svgSuffix: "-dark.svg", - hrColor: #a3a3a3, + hrColor: #bac0ce, codeColor: $code-color, ), nord: ( @@ -182,7 +182,6 @@ $themes: ( listItemBackgroundColor: $nord2, listItemBackgroundHoverColor: $nord3, listItemBorderColor: $nord1, - groupingsActiveColor: $nord3, disabledIconColor: $nord5, headingColor: $nord4, headingButtonColor: $nord5, @@ -212,6 +211,7 @@ $themes: ( passwordCountText: $nord5, calloutBorderColor: $nord1, calloutBackgroundColor: $nord2, + toastTextColor: #000000, accountSwitcherBackgroundColor: $nord0, accountSwitcherTextColor: $nord5, svgSuffix: "-dark.svg", diff --git a/apps/desktop/src/services/electron-dialog.service.ts b/apps/desktop/src/services/electron-dialog.service.ts deleted file mode 100644 index e49e39e811b..00000000000 --- a/apps/desktop/src/services/electron-dialog.service.ts +++ /dev/null @@ -1,62 +0,0 @@ -import { ipcRenderer } from "electron"; - -import { - DialogService, - SimpleDialogOptions, - SimpleDialogType, -} from "@bitwarden/angular/services/dialog"; - -// Electron supports a limited set of dialog types -// https://www.electronjs.org/docs/latest/api/dialog#dialogshowmessageboxbrowserwindow-options -const electronTypeMap: Record = { - [SimpleDialogType.PRIMARY]: "info", - [SimpleDialogType.SUCCESS]: "info", - [SimpleDialogType.INFO]: "info", - [SimpleDialogType.WARNING]: "warning", - [SimpleDialogType.DANGER]: "error", -}; - -export class ElectronDialogService extends DialogService { - async openSimpleDialog(options: SimpleDialogOptions) { - const defaultCancel = - options.cancelButtonText === undefined - ? options.acceptButtonText == null - ? "no" - : "cancel" - : null; - - return this.legacyShowDialog( - this.translate(options.content), - this.translate(options.title), - this.translate(options.acceptButtonText, "yes"), - this.translate(options.cancelButtonText, defaultCancel), - options.type - ); - } - - private async legacyShowDialog( - body: string, - title?: string, - confirmText?: string, - cancelText?: string, - type?: SimpleDialogType - ) { - const buttons = [confirmText == null ? this.i18nService.t("ok") : confirmText]; - if (cancelText != null) { - buttons.push(cancelText); - } - - const result = await ipcRenderer.invoke("showMessageBox", { - type: electronTypeMap[type] ?? "none", - title: title, - message: title, - detail: body, - buttons: buttons, - cancelId: buttons.length === 2 ? 1 : null, - defaultId: 0, - noLink: true, - }); - - return Promise.resolve(result.response === 0); - } -} diff --git a/apps/desktop/src/services/native-message-handler.service.ts b/apps/desktop/src/services/native-message-handler.service.ts index 1921ea5fa05..9f5f1d460df 100644 --- a/apps/desktop/src/services/native-message-handler.service.ts +++ b/apps/desktop/src/services/native-message-handler.service.ts @@ -8,7 +8,7 @@ import { CryptoService } from "@bitwarden/common/platform/abstractions/crypto.se import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; import { MessagingService } from "@bitwarden/common/platform/abstractions/messaging.service"; import { Utils } from "@bitwarden/common/platform/misc/utils"; -import { EncString } from "@bitwarden/common/platform/models/domain/enc-string"; +import { EncryptedString, EncString } from "@bitwarden/common/platform/models/domain/enc-string"; import { SymmetricCryptoKey } from "@bitwarden/common/platform/models/domain/symmetric-crypto-key"; import { StateService } from "@bitwarden/common/platform/services/state.service"; @@ -70,7 +70,7 @@ export class NativeMessageHandlerService { } try { - const remotePublicKey = Utils.fromB64ToArray(publicKey).buffer; + const remotePublicKey = Utils.fromB64ToArray(publicKey); const ddgEnabled = await this.stateService.getEnableDuckDuckGoBrowserIntegration(); if (!ddgEnabled) { @@ -144,7 +144,9 @@ export class NativeMessageHandlerService { } private async handleEncryptedMessage(message: EncryptedMessage) { - message.encryptedCommand = EncString.fromJSON(message.encryptedCommand.toString()); + message.encryptedCommand = EncString.fromJSON( + message.encryptedCommand.toString() as EncryptedString + ); const decryptedCommandData = await this.decryptPayload(message); const { command } = decryptedCommandData; diff --git a/apps/desktop/src/services/native-messaging.service.ts b/apps/desktop/src/services/native-messaging.service.ts index 494a65b6703..3928778f313 100644 --- a/apps/desktop/src/services/native-messaging.service.ts +++ b/apps/desktop/src/services/native-messaging.service.ts @@ -56,7 +56,7 @@ export class NativeMessagingService { // Request to setup secure encryption if ("command" in rawMessage && rawMessage.command === "setupEncryption") { - const remotePublicKey = Utils.fromB64ToArray(rawMessage.publicKey).buffer; + const remotePublicKey = Utils.fromB64ToArray(rawMessage.publicKey); // Validate the UserId to ensure we are logged into the same account. const accounts = await firstValueFrom(this.stateService.accounts$); @@ -136,14 +136,23 @@ export class NativeMessagingService { }); } - const key = await this.cryptoService.getKeyFromStorage( + const userKey = await this.cryptoService.getUserKeyFromStorage( KeySuffixOptions.Biometric, message.userId ); + const masterKey = await this.cryptoService.getMasterKey(message.userId); - if (key != null) { + if (userKey != null) { + // we send the master key still for backwards compatibility + // with older browser extensions + // TODO: Remove after 2023.10 release (https://bitwarden.atlassian.net/browse/PM-3472) this.send( - { command: "biometricUnlock", response: "unlocked", keyB64: key.keyB64 }, + { + command: "biometricUnlock", + response: "unlocked", + keyB64: masterKey?.keyB64, + userKeyB64: userKey.keyB64, + }, appId ); } else { @@ -169,7 +178,7 @@ export class NativeMessagingService { ipcRenderer.send("nativeMessagingReply", { appId: appId, message: encrypted }); } - private async secureCommunication(remotePublicKey: ArrayBuffer, appId: string) { + private async secureCommunication(remotePublicKey: Uint8Array, appId: string) { const secret = await this.cryptoFunctionService.randomBytes(64); this.sharedSecrets.set(appId, new SymmetricCryptoKey(secret)); diff --git a/apps/desktop/src/vault/app/accounts/premium.component.html b/apps/desktop/src/vault/app/accounts/premium.component.html index b91a021f9cc..b3a847dce12 100644 --- a/apps/desktop/src/vault/app/accounts/premium.component.html +++ b/apps/desktop/src/vault/app/accounts/premium.component.html @@ -17,7 +17,7 @@
  • - {{ "premiumSignUpTwoStep" | i18n }} + {{ "premiumSignUpTwoStepOptions" | i18n }}
  • diff --git a/apps/desktop/src/vault/app/accounts/premium.component.ts b/apps/desktop/src/vault/app/accounts/premium.component.ts index 13116fd3ed4..b4dff821cc8 100644 --- a/apps/desktop/src/vault/app/accounts/premium.component.ts +++ b/apps/desktop/src/vault/app/accounts/premium.component.ts @@ -1,12 +1,13 @@ import { Component } from "@angular/core"; -import { DialogServiceAbstraction } from "@bitwarden/angular/services/dialog"; import { PremiumComponent as BasePremiumComponent } from "@bitwarden/angular/vault/components/premium.component"; import { ApiService } from "@bitwarden/common/abstractions/api.service"; +import { EnvironmentService } from "@bitwarden/common/platform/abstractions/environment.service"; import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; import { LogService } from "@bitwarden/common/platform/abstractions/log.service"; import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service"; import { StateService } from "@bitwarden/common/platform/abstractions/state.service"; +import { DialogService } from "@bitwarden/components"; @Component({ selector: "app-premium", @@ -19,8 +20,17 @@ export class PremiumComponent extends BasePremiumComponent { apiService: ApiService, logService: LogService, stateService: StateService, - dialogService: DialogServiceAbstraction + dialogService: DialogService, + environmentService: EnvironmentService ) { - super(i18nService, platformUtilsService, apiService, logService, stateService, dialogService); + super( + i18nService, + platformUtilsService, + apiService, + logService, + stateService, + dialogService, + environmentService + ); } } diff --git a/apps/desktop/src/vault/app/vault/add-edit.component.ts b/apps/desktop/src/vault/app/vault/add-edit.component.ts index aa7eba32838..8a90d6a7e1a 100644 --- a/apps/desktop/src/vault/app/vault/add-edit.component.ts +++ b/apps/desktop/src/vault/app/vault/add-edit.component.ts @@ -1,7 +1,6 @@ import { Component, NgZone, OnChanges, OnDestroy, ViewChild } from "@angular/core"; import { NgForm } from "@angular/forms"; -import { DialogServiceAbstraction } from "@bitwarden/angular/services/dialog"; import { AddEditComponent as BaseAddEditComponent } from "@bitwarden/angular/vault/components/add-edit.component"; import { AuditService } from "@bitwarden/common/abstractions/audit.service"; import { EventCollectionService } from "@bitwarden/common/abstractions/event/event-collection.service"; @@ -18,6 +17,7 @@ import { CipherService } from "@bitwarden/common/vault/abstractions/cipher.servi import { CollectionService } from "@bitwarden/common/vault/abstractions/collection.service"; import { FolderService } from "@bitwarden/common/vault/abstractions/folder/folder.service.abstraction"; import { PasswordRepromptService } from "@bitwarden/common/vault/abstractions/password-reprompt.service"; +import { DialogService } from "@bitwarden/components"; const BroadcasterSubscriptionId = "AddEditComponent"; @@ -45,7 +45,7 @@ export class AddEditComponent extends BaseAddEditComponent implements OnChanges, logService: LogService, organizationService: OrganizationService, sendApiService: SendApiService, - dialogService: DialogServiceAbstraction + dialogService: DialogService ) { super( cipherService, diff --git a/apps/desktop/src/vault/app/vault/attachments.component.ts b/apps/desktop/src/vault/app/vault/attachments.component.ts index edee15fc4e5..bcb1704c0d0 100644 --- a/apps/desktop/src/vault/app/vault/attachments.component.ts +++ b/apps/desktop/src/vault/app/vault/attachments.component.ts @@ -1,6 +1,5 @@ import { Component } from "@angular/core"; -import { DialogServiceAbstraction } from "@bitwarden/angular/services/dialog"; import { AttachmentsComponent as BaseAttachmentsComponent } from "@bitwarden/angular/vault/components/attachments.component"; import { ApiService } from "@bitwarden/common/abstractions/api.service"; import { CryptoService } from "@bitwarden/common/platform/abstractions/crypto.service"; @@ -10,6 +9,7 @@ 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 { CipherService } from "@bitwarden/common/vault/abstractions/cipher.service"; +import { DialogService } from "@bitwarden/components"; @Component({ selector: "app-vault-attachments", @@ -25,7 +25,7 @@ export class AttachmentsComponent extends BaseAttachmentsComponent { logService: LogService, stateService: StateService, fileDownloadService: FileDownloadService, - dialogService: DialogServiceAbstraction + dialogService: DialogService ) { super( cipherService, diff --git a/apps/desktop/src/vault/app/vault/folder-add-edit.component.ts b/apps/desktop/src/vault/app/vault/folder-add-edit.component.ts index d9035ad7416..a4055441599 100644 --- a/apps/desktop/src/vault/app/vault/folder-add-edit.component.ts +++ b/apps/desktop/src/vault/app/vault/folder-add-edit.component.ts @@ -1,13 +1,13 @@ import { Component } from "@angular/core"; import { FormBuilder } from "@angular/forms"; -import { DialogServiceAbstraction } from "@bitwarden/angular/services/dialog"; import { FolderAddEditComponent as BaseFolderAddEditComponent } from "@bitwarden/angular/vault/components/folder-add-edit.component"; import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; import { LogService } from "@bitwarden/common/platform/abstractions/log.service"; import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service"; import { FolderApiServiceAbstraction } from "@bitwarden/common/vault/abstractions/folder/folder-api.service.abstraction"; import { FolderService } from "@bitwarden/common/vault/abstractions/folder/folder.service.abstraction"; +import { DialogService } from "@bitwarden/components"; @Component({ selector: "app-folder-add-edit", @@ -20,7 +20,7 @@ export class FolderAddEditComponent extends BaseFolderAddEditComponent { i18nService: I18nService, platformUtilsService: PlatformUtilsService, logService: LogService, - dialogService: DialogServiceAbstraction, + dialogService: DialogService, formBuilder: FormBuilder ) { super( diff --git a/apps/desktop/src/vault/app/vault/vault.component.ts b/apps/desktop/src/vault/app/vault/vault.component.ts index 5405a913a75..a058f080543 100644 --- a/apps/desktop/src/vault/app/vault/vault.component.ts +++ b/apps/desktop/src/vault/app/vault/vault.component.ts @@ -11,7 +11,6 @@ import { ActivatedRoute, Router } from "@angular/router"; import { first } from "rxjs/operators"; import { ModalRef } from "@bitwarden/angular/components/modal/modal.ref"; -import { DialogServiceAbstraction, SimpleDialogType } from "@bitwarden/angular/services/dialog"; import { ModalService } from "@bitwarden/angular/services/modal.service"; import { VaultFilter } from "@bitwarden/angular/vault/vault-filter/models/vault-filter.model"; import { ApiService } from "@bitwarden/common/abstractions/api.service"; @@ -29,6 +28,7 @@ import { CipherRepromptType } from "@bitwarden/common/vault/enums/cipher-repromp import { CipherType } from "@bitwarden/common/vault/enums/cipher-type"; import { CipherView } from "@bitwarden/common/vault/models/view/cipher.view"; import { FolderView } from "@bitwarden/common/vault/models/view/folder.view"; +import { DialogService } from "@bitwarden/components"; import { SearchBarService } from "../../../app/layout/search/search-bar.service"; import { GeneratorComponent } from "../../../app/tools/generator.component"; @@ -102,7 +102,7 @@ export class VaultComponent implements OnInit, OnDestroy { private stateService: StateService, private searchBarService: SearchBarService, private apiService: ApiService, - private dialogService: DialogServiceAbstraction + private dialogService: DialogService ) {} async ngOnInit() { @@ -684,7 +684,7 @@ export class VaultComponent implements OnInit, OnDestroy { const confirmed = await this.dialogService.openSimpleDialog({ title: { key: "unsavedChangesTitle" }, content: { key: "unsavedChangesConfirmation" }, - type: SimpleDialogType.WARNING, + type: "warning", }); return !confirmed; } diff --git a/apps/desktop/src/vault/app/vault/view.component.ts b/apps/desktop/src/vault/app/vault/view.component.ts index 07fd92e0320..b6bf63d6e64 100644 --- a/apps/desktop/src/vault/app/vault/view.component.ts +++ b/apps/desktop/src/vault/app/vault/view.component.ts @@ -7,7 +7,6 @@ import { Output, } from "@angular/core"; -import { DialogServiceAbstraction } from "@bitwarden/angular/services/dialog"; import { ViewComponent as BaseViewComponent } from "@bitwarden/angular/vault/components/view.component"; import { ApiService } from "@bitwarden/common/abstractions/api.service"; import { AuditService } from "@bitwarden/common/abstractions/audit.service"; @@ -26,6 +25,7 @@ import { CipherService } from "@bitwarden/common/vault/abstractions/cipher.servi import { FolderService } from "@bitwarden/common/vault/abstractions/folder/folder.service.abstraction"; import { PasswordRepromptService } from "@bitwarden/common/vault/abstractions/password-reprompt.service"; import { CipherView } from "@bitwarden/common/vault/models/view/cipher.view"; +import { DialogService } from "@bitwarden/components"; const BroadcasterSubscriptionId = "ViewComponent"; @@ -55,7 +55,7 @@ export class ViewComponent extends BaseViewComponent implements OnChanges { logService: LogService, stateService: StateService, fileDownloadService: FileDownloadService, - dialogService: DialogServiceAbstraction + dialogService: DialogService ) { super( cipherService, diff --git a/apps/desktop/tsconfig.json b/apps/desktop/tsconfig.json index bf55862559a..d587997f9e6 100644 --- a/apps/desktop/tsconfig.json +++ b/apps/desktop/tsconfig.json @@ -11,9 +11,11 @@ "baseUrl": ".", "paths": { "@bitwarden/angular/*": ["../../libs/angular/src/*"], + "@bitwarden/auth": ["../../libs/auth/src"], "@bitwarden/common/*": ["../../libs/common/src/*"], "@bitwarden/components": ["../../libs/components/src"], - "@bitwarden/exporter/*": ["../../libs/exporter/src/*"] + "@bitwarden/exporter/*": ["../../libs/exporter/src/*"], + "@bitwarden/vault": ["../../libs/vault/src"] }, "useDefineForClassFields": false }, diff --git a/apps/web/package.json b/apps/web/package.json index e2ec49d7327..1624e0d491d 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -1,6 +1,6 @@ { "name": "@bitwarden/web-vault", - "version": "2023.7.0", + "version": "2023.8.2", "scripts": { "build:oss": "webpack", "build:bit": "webpack -c ../../bitwarden_license/bit-web/webpack.config.js", diff --git a/apps/web/src/app/admin-console/organizations/guards/is-paid-org.guard.ts b/apps/web/src/app/admin-console/organizations/guards/is-paid-org.guard.ts index 10d39d110e4..2d18ff56cfc 100644 --- a/apps/web/src/app/admin-console/organizations/guards/is-paid-org.guard.ts +++ b/apps/web/src/app/admin-console/organizations/guards/is-paid-org.guard.ts @@ -1,9 +1,9 @@ import { Injectable } from "@angular/core"; import { ActivatedRouteSnapshot, CanActivate, Router, RouterStateSnapshot } from "@angular/router"; -import { DialogServiceAbstraction, SimpleDialogType } from "@bitwarden/angular/services/dialog"; import { OrganizationService } from "@bitwarden/common/admin-console/abstractions/organization/organization.service.abstraction"; import { MessagingService } from "@bitwarden/common/platform/abstractions/messaging.service"; +import { DialogService } from "@bitwarden/components"; @Injectable({ providedIn: "root", @@ -13,7 +13,7 @@ export class IsPaidOrgGuard implements CanActivate { private router: Router, private organizationService: OrganizationService, private messagingService: MessagingService, - private dialogService: DialogServiceAbstraction + private dialogService: DialogService ) {} async canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) { @@ -31,7 +31,7 @@ export class IsPaidOrgGuard implements CanActivate { content: { key: "notAvailableForFreeOrganization" }, acceptButtonText: { key: "ok" }, cancelButtonText: null, - type: SimpleDialogType.INFO, + type: "info", }); return false; } else { diff --git a/apps/web/src/app/admin-console/organizations/manage/entity-events.component.ts b/apps/web/src/app/admin-console/organizations/manage/entity-events.component.ts index e27efc43dbd..afcb315e5ac 100644 --- a/apps/web/src/app/admin-console/organizations/manage/entity-events.component.ts +++ b/apps/web/src/app/admin-console/organizations/manage/entity-events.component.ts @@ -3,7 +3,6 @@ import { Component, Inject, OnInit } from "@angular/core"; import { FormBuilder } from "@angular/forms"; import { UserNamePipe } from "@bitwarden/angular/pipes/user-name.pipe"; -import { DialogServiceAbstraction } from "@bitwarden/angular/services/dialog"; import { ApiService } from "@bitwarden/common/abstractions/api.service"; import { OrganizationUserService } from "@bitwarden/common/abstractions/organization-user/organization-user.service"; import { EventResponse } from "@bitwarden/common/models/response/event.response"; @@ -13,7 +12,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 { ValidationService } from "@bitwarden/common/platform/abstractions/validation.service"; -import { TableDataSource } from "@bitwarden/components"; +import { DialogService, TableDataSource } from "@bitwarden/components"; import { EventService } from "../../../core"; import { SharedModule } from "../../../shared"; @@ -186,7 +185,7 @@ export class EntityEventsComponent implements OnInit { * @param config Configuration for the dialog */ export const openEntityEventsDialog = ( - dialogService: DialogServiceAbstraction, + dialogService: DialogService, config: DialogConfig ) => { return dialogService.open(EntityEventsComponent, config); diff --git a/apps/web/src/app/admin-console/organizations/manage/group-add-edit.component.ts b/apps/web/src/app/admin-console/organizations/manage/group-add-edit.component.ts index 11b32f430be..d2f4fb1d20d 100644 --- a/apps/web/src/app/admin-console/organizations/manage/group-add-edit.component.ts +++ b/apps/web/src/app/admin-console/organizations/manage/group-add-edit.component.ts @@ -3,7 +3,6 @@ import { ChangeDetectorRef, Component, Inject, OnDestroy, OnInit } from "@angula import { FormBuilder, Validators } from "@angular/forms"; import { catchError, combineLatest, from, map, of, Subject, switchMap, takeUntil } from "rxjs"; -import { DialogServiceAbstraction, SimpleDialogType } from "@bitwarden/angular/services/dialog"; import { ApiService } from "@bitwarden/common/abstractions/api.service"; import { OrganizationUserService } from "@bitwarden/common/abstractions/organization-user/organization-user.service"; import { ErrorResponse } from "@bitwarden/common/models/response/error.response"; @@ -14,6 +13,7 @@ import { CollectionService } from "@bitwarden/common/vault/abstractions/collecti import { CollectionData } from "@bitwarden/common/vault/models/data/collection.data"; import { Collection } from "@bitwarden/common/vault/models/domain/collection"; import { CollectionDetailsResponse } from "@bitwarden/common/vault/models/response/collection.response"; +import { DialogService } from "@bitwarden/components"; import { InternalGroupService as GroupService, GroupView } from "../core"; import { @@ -64,7 +64,7 @@ export enum GroupAddEditDialogResultType { * @param config Configuration for the dialog */ export const openGroupAddEditDialog = ( - dialogService: DialogServiceAbstraction, + dialogService: DialogService, config: DialogConfig ) => { return dialogService.open( @@ -181,7 +181,7 @@ export class GroupAddEditComponent implements OnInit, OnDestroy { private logService: LogService, private formBuilder: FormBuilder, private changeDetectorRef: ChangeDetectorRef, - private dialogService: DialogServiceAbstraction + private dialogService: DialogService ) { this.tabIndex = params.initialTab ?? GroupAddEditTabType.Info; } @@ -273,7 +273,7 @@ export class GroupAddEditComponent implements OnInit, OnDestroy { const confirmed = await this.dialogService.openSimpleDialog({ title: this.group.name, content: { key: "deleteGroupConfirmation" }, - type: SimpleDialogType.WARNING, + type: "warning", }); if (!confirmed) { return false; diff --git a/apps/web/src/app/admin-console/organizations/manage/groups.component.ts b/apps/web/src/app/admin-console/organizations/manage/groups.component.ts index 82e5acba213..f2167c0e5f3 100644 --- a/apps/web/src/app/admin-console/organizations/manage/groups.component.ts +++ b/apps/web/src/app/admin-console/organizations/manage/groups.component.ts @@ -15,7 +15,6 @@ import { import { first } from "rxjs/operators"; import { SearchPipe } from "@bitwarden/angular/pipes/search.pipe"; -import { DialogServiceAbstraction, SimpleDialogType } from "@bitwarden/angular/services/dialog"; import { ModalService } from "@bitwarden/angular/services/modal.service"; import { ApiService } from "@bitwarden/common/abstractions/api.service"; import { SearchService } from "@bitwarden/common/abstractions/search.service"; @@ -32,6 +31,7 @@ import { CollectionResponse, } from "@bitwarden/common/vault/models/response/collection.response"; import { CollectionView } from "@bitwarden/common/vault/models/view/collection.view"; +import { DialogService } from "@bitwarden/components"; import { InternalGroupService as GroupService, GroupView } from "../core"; @@ -127,7 +127,7 @@ export class GroupsComponent implements OnInit, OnDestroy { private route: ActivatedRoute, private i18nService: I18nService, private modalService: ModalService, - private dialogService: DialogServiceAbstraction, + private dialogService: DialogService, private platformUtilsService: PlatformUtilsService, private searchService: SearchService, private logService: LogService, @@ -236,7 +236,7 @@ export class GroupsComponent implements OnInit, OnDestroy { const confirmed = await this.dialogService.openSimpleDialog({ title: groupRow.details.name, content: { key: "deleteGroupConfirmation" }, - type: SimpleDialogType.WARNING, + type: "warning", }); if (!confirmed) { return false; @@ -269,7 +269,7 @@ export class GroupsComponent implements OnInit, OnDestroy { placeholders: [groupsToDelete.length.toString()], }, content: deleteMessage, - type: SimpleDialogType.WARNING, + type: "warning", }); if (!confirmed) { return false; diff --git a/apps/web/src/app/admin-console/organizations/manage/user-confirm.component.ts b/apps/web/src/app/admin-console/organizations/manage/user-confirm.component.ts index 4d3cd0b6ede..22f080b9912 100644 --- a/apps/web/src/app/admin-console/organizations/manage/user-confirm.component.ts +++ b/apps/web/src/app/admin-console/organizations/manage/user-confirm.component.ts @@ -28,10 +28,7 @@ export class UserConfirmComponent implements OnInit { async ngOnInit() { try { if (this.publicKey != null) { - const fingerprint = await this.cryptoService.getFingerprint( - this.userId, - this.publicKey.buffer - ); + const fingerprint = await this.cryptoService.getFingerprint(this.userId, this.publicKey); if (fingerprint != null) { this.fingerprint = fingerprint.join("-"); } diff --git a/apps/web/src/app/admin-console/organizations/members/components/bulk/bulk-confirm.component.ts b/apps/web/src/app/admin-console/organizations/members/components/bulk/bulk-confirm.component.ts index 669a8954eee..ae754faabe7 100644 --- a/apps/web/src/app/admin-console/organizations/members/components/bulk/bulk-confirm.component.ts +++ b/apps/web/src/app/admin-console/organizations/members/components/bulk/bulk-confirm.component.ts @@ -7,6 +7,7 @@ import { OrganizationUserStatusType } from "@bitwarden/common/admin-console/enum import { CryptoService } from "@bitwarden/common/platform/abstractions/crypto.service"; import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; import { Utils } from "@bitwarden/common/platform/misc/utils"; +import { SymmetricCryptoKey } from "@bitwarden/common/platform/models/domain/symmetric-crypto-key"; import { BulkUserDetails } from "./bulk-status.component"; @@ -47,7 +48,7 @@ export class BulkConfirmComponent implements OnInit { for (const entry of response.data) { const publicKey = Utils.fromB64ToArray(entry.key); - const fingerprint = await this.cryptoService.getFingerprint(entry.userId, publicKey.buffer); + const fingerprint = await this.cryptoService.getFingerprint(entry.userId, publicKey); if (fingerprint != null) { this.publicKeys.set(entry.id, publicKey); this.fingerprints.set(entry.id, fingerprint.join("-")); @@ -67,7 +68,7 @@ export class BulkConfirmComponent implements OnInit { if (publicKey == null) { continue; } - const encryptedKey = await this.cryptoService.rsaEncrypt(key.key, publicKey.buffer); + const encryptedKey = await this.cryptoService.rsaEncrypt(key.key, publicKey); userIdsWithKeys.push({ id: user.id, key: encryptedKey.encryptedString, @@ -98,7 +99,7 @@ export class BulkConfirmComponent implements OnInit { ); } - protected getCryptoKey() { + protected getCryptoKey(): Promise { return this.cryptoService.getOrgKey(this.organizationId); } diff --git a/apps/web/src/app/admin-console/organizations/members/components/bulk/bulk-enable-sm-dialog.component.ts b/apps/web/src/app/admin-console/organizations/members/components/bulk/bulk-enable-sm-dialog.component.ts index 9bb8fcbb100..b76b640513c 100644 --- a/apps/web/src/app/admin-console/organizations/members/components/bulk/bulk-enable-sm-dialog.component.ts +++ b/apps/web/src/app/admin-console/organizations/members/components/bulk/bulk-enable-sm-dialog.component.ts @@ -1,11 +1,10 @@ import { DialogRef, DIALOG_DATA } from "@angular/cdk/dialog"; import { Component, Inject, OnInit } from "@angular/core"; -import { DialogServiceAbstraction } from "@bitwarden/angular/services/dialog"; import { OrganizationUserService } from "@bitwarden/common/abstractions/organization-user/organization-user.service"; import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service"; -import { TableDataSource } from "@bitwarden/components"; +import { DialogService, TableDataSource } from "@bitwarden/components"; import { OrganizationUserView } from "../../../core"; @@ -44,7 +43,7 @@ export class BulkEnableSecretsManagerDialogComponent implements OnInit { this.dialogRef.close(); }; - static open(dialogService: DialogServiceAbstraction, data: BulkEnableSecretsManagerDialogData) { + static open(dialogService: DialogService, data: BulkEnableSecretsManagerDialogData) { return dialogService.open( BulkEnableSecretsManagerDialogComponent, { data } diff --git a/apps/web/src/app/admin-console/organizations/members/components/member-dialog/member-dialog.component.html b/apps/web/src/app/admin-console/organizations/members/components/member-dialog/member-dialog.component.html index 2f48789209f..8c506837880 100644 --- a/apps/web/src/app/admin-console/organizations/members/components/member-dialog/member-dialog.component.html +++ b/apps/web/src/app/admin-console/organizations/members/components/member-dialog/member-dialog.component.html @@ -246,7 +246,7 @@ (change)="handleDependentPermissions()" />
  • diff --git a/apps/web/src/app/admin-console/organizations/members/components/member-dialog/member-dialog.component.ts b/apps/web/src/app/admin-console/organizations/members/components/member-dialog/member-dialog.component.ts index f449b7f206a..1d1a156269b 100644 --- a/apps/web/src/app/admin-console/organizations/members/components/member-dialog/member-dialog.component.ts +++ b/apps/web/src/app/admin-console/organizations/members/components/member-dialog/member-dialog.component.ts @@ -3,7 +3,6 @@ import { Component, Inject, OnDestroy, OnInit } from "@angular/core"; import { FormBuilder, Validators } from "@angular/forms"; import { combineLatest, of, shareReplay, Subject, switchMap, takeUntil } from "rxjs"; -import { DialogServiceAbstraction, SimpleDialogType } from "@bitwarden/angular/services/dialog"; import { OrganizationUserService } from "@bitwarden/common/abstractions/organization-user/organization-user.service"; import { OrganizationService } from "@bitwarden/common/admin-console/abstractions/organization/organization.service.abstraction"; import { @@ -15,6 +14,7 @@ import { Organization } from "@bitwarden/common/admin-console/models/domain/orga import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service"; import { CollectionView } from "@bitwarden/common/vault/models/view/collection.view"; +import { DialogService } from "@bitwarden/components"; import { flagEnabled } from "../../../../../../utils/flags"; import { CollectionAdminService } from "../../../../../vault/core/collection-admin.service"; @@ -134,7 +134,7 @@ export class MemberDialogComponent implements OnInit, OnDestroy { private groupService: GroupService, private userService: UserAdminService, private organizationUserService: OrganizationUserService, - private dialogService: DialogServiceAbstraction + private dialogService: DialogService ) {} async ngOnInit() { @@ -302,7 +302,7 @@ export class MemberDialogComponent implements OnInit, OnDestroy { } handleDependentPermissions() { - // Manage Password Reset must have Manage Users enabled + // Manage Password Reset (Account Recovery) must have Manage Users enabled if ( this.permissionsGroup.value.manageResetPassword && !this.permissionsGroup.value.manageUsers @@ -312,7 +312,7 @@ export class MemberDialogComponent implements OnInit, OnDestroy { this.platformUtilsService.showToast( "info", null, - this.i18nService.t("resetPasswordManageUsers") + this.i18nService.t("accountRecoveryManageUsers") ); } } @@ -389,7 +389,7 @@ export class MemberDialogComponent implements OnInit, OnDestroy { let confirmed = await this.dialogService.openSimpleDialog({ title: { key: "removeUserIdAccess", placeholders: [this.params.name] }, content: { key: message }, - type: SimpleDialogType.WARNING, + type: "warning", }); if (!confirmed) { @@ -426,7 +426,7 @@ export class MemberDialogComponent implements OnInit, OnDestroy { title: { key: "revokeUserId", placeholders: [this.params.name] }, content: { key: "revokeUserConfirmation" }, acceptButtonText: { key: "revokeAccess" }, - type: SimpleDialogType.WARNING, + type: "warning", }); if (!confirmed) { @@ -496,7 +496,7 @@ export class MemberDialogComponent implements OnInit, OnDestroy { key: "removeOrgUserNoMasterPasswordDesc", placeholders: [this.params.name], }, - type: SimpleDialogType.WARNING, + type: "warning", }); } } @@ -557,7 +557,7 @@ function mapToGroupAccessSelections(groups: string[]): AccessItemValue[] { * @param config Configuration for the dialog */ export function openUserAddEditDialog( - dialogService: DialogServiceAbstraction, + dialogService: DialogService, config: DialogConfig ) { return dialogService.open(MemberDialogComponent, config); diff --git a/apps/web/src/app/admin-console/organizations/members/components/reset-password.component.ts b/apps/web/src/app/admin-console/organizations/members/components/reset-password.component.ts index 55f935c575e..7d0fae37e0a 100644 --- a/apps/web/src/app/admin-console/organizations/members/components/reset-password.component.ts +++ b/apps/web/src/app/admin-console/organizations/members/components/reset-password.component.ts @@ -10,7 +10,6 @@ import { import { Subject, takeUntil } from "rxjs"; import zxcvbn from "zxcvbn"; -import { DialogServiceAbstraction, SimpleDialogType } from "@bitwarden/angular/services/dialog"; import { PasswordStrengthComponent } from "@bitwarden/angular/shared/components/password-strength/password-strength.component"; import { OrganizationUserService } from "@bitwarden/common/abstractions/organization-user/organization-user.service"; import { OrganizationUserResetPasswordRequest } from "@bitwarden/common/abstractions/organization-user/requests"; @@ -23,8 +22,12 @@ 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"; import { EncString } from "@bitwarden/common/platform/models/domain/enc-string"; -import { SymmetricCryptoKey } from "@bitwarden/common/platform/models/domain/symmetric-crypto-key"; +import { + SymmetricCryptoKey, + UserKey, +} from "@bitwarden/common/platform/models/domain/symmetric-crypto-key"; import { PasswordGenerationServiceAbstraction } from "@bitwarden/common/tools/generator/password"; +import { DialogService } from "@bitwarden/components"; @Component({ selector: "app-reset-password", @@ -54,7 +57,7 @@ export class ResetPasswordComponent implements OnInit, OnDestroy { private cryptoService: CryptoService, private logService: LogService, private organizationUserService: OrganizationUserService, - private dialogService: DialogServiceAbstraction + private dialogService: DialogService ) {} async ngOnInit() { @@ -140,7 +143,7 @@ export class ResetPasswordComponent implements OnInit, OnDestroy { const result = await this.dialogService.openSimpleDialog({ title: { key: "weakMasterPassword" }, content: { key: "weakMasterPasswordDesc" }, - type: SimpleDialogType.WARNING, + type: "warning", }); if (!result) { @@ -171,26 +174,32 @@ export class ResetPasswordComponent implements OnInit, OnDestroy { orgSymKey ); - // Decrypt User's Reset Password Key to get EncKey + // Decrypt User's Reset Password Key to get UserKey const decValue = await this.cryptoService.rsaDecrypt(resetPasswordKey, decPrivateKey); - const userEncKey = new SymmetricCryptoKey(decValue); + const existingUserKey = new SymmetricCryptoKey(decValue) as UserKey; - // Create new key and hash new password - const newKey = await this.cryptoService.makeKey( + // Create new master key and hash new password + const newMasterKey = await this.cryptoService.makeMasterKey( this.newPassword, this.email.trim().toLowerCase(), kdfType, new KdfConfig(kdfIterations, kdfMemory, kdfParallelism) ); - const newPasswordHash = await this.cryptoService.hashPassword(this.newPassword, newKey); + const newMasterKeyHash = await this.cryptoService.hashMasterKey( + this.newPassword, + newMasterKey + ); - // Create new encKey for the User - const newEncKey = await this.cryptoService.remakeEncKey(newKey, userEncKey); + // Create new encrypted user key for the User + const newUserKey = await this.cryptoService.encryptUserKeyWithMasterKey( + newMasterKey, + existingUserKey + ); // Create request const request = new OrganizationUserResetPasswordRequest(); - request.key = newEncKey[1].encryptedString; - request.newMasterPasswordHash = newPasswordHash; + request.key = newUserKey[1].encryptedString; + request.newMasterPasswordHash = newMasterKeyHash; // Change user's password return this.organizationUserService.putOrganizationUserResetPassword( diff --git a/apps/web/src/app/admin-console/organizations/members/people.component.ts b/apps/web/src/app/admin-console/organizations/members/people.component.ts index ec353fa7ff4..e696609d170 100644 --- a/apps/web/src/app/admin-console/organizations/members/people.component.ts +++ b/apps/web/src/app/admin-console/organizations/members/people.component.ts @@ -16,12 +16,6 @@ import { import { SearchPipe } from "@bitwarden/angular/pipes/search.pipe"; import { UserNamePipe } from "@bitwarden/angular/pipes/user-name.pipe"; -import { - DialogServiceAbstraction, - SimpleDialogCloseType, - SimpleDialogOptions, - SimpleDialogType, -} from "@bitwarden/angular/services/dialog"; import { ModalService } from "@bitwarden/angular/services/modal.service"; import { ApiService } from "@bitwarden/common/abstractions/api.service"; import { OrganizationUserService } from "@bitwarden/common/abstractions/organization-user/organization-user.service"; @@ -55,6 +49,7 @@ import { SyncService } from "@bitwarden/common/vault/abstractions/sync/sync.serv import { CollectionData } from "@bitwarden/common/vault/models/data/collection.data"; import { Collection } from "@bitwarden/common/vault/models/domain/collection"; import { CollectionDetailsResponse } from "@bitwarden/common/vault/models/response/collection.response"; +import { DialogService, SimpleDialogOptions } from "@bitwarden/components"; import { flagEnabled } from "../../../../utils/flags"; import { openEntityEventsDialog } from "../../../admin-console/organizations/manage/entity-events.component"; @@ -125,7 +120,7 @@ export class PeopleComponent private organizationService: OrganizationService, private organizationApiService: OrganizationApiServiceAbstraction, private organizationUserService: OrganizationUserService, - dialogService: DialogServiceAbstraction, + dialogService: DialogService, private router: Router, private groupService: GroupService, private collectionService: CollectionService @@ -302,7 +297,7 @@ export class PeopleComponent async confirmUser(user: OrganizationUserView, publicKey: Uint8Array): Promise { const orgKey = await this.cryptoService.getOrgKey(this.organization.id); - const key = await this.cryptoService.rsaEncrypt(orgKey.key, publicKey.buffer); + const key = await this.cryptoService.rsaEncrypt(orgKey.key, publicKey); const request = new OrganizationUserConfirmRequest(); request.key = key.encryptedString; await this.organizationUserService.postOrganizationUserConfirm( @@ -359,7 +354,7 @@ export class PeopleComponent : "freeOrgInvLimitReachedNoManageBilling", this.organization.seats ), - type: SimpleDialogType.PRIMARY, + type: "primary", }; if (this.organization.canEditSubscription) { @@ -371,12 +366,12 @@ export class PeopleComponent const simpleDialog = this.dialogService.openSimpleDialogRef(orgUpgradeSimpleDialogOpts); - firstValueFrom(simpleDialog.closed).then((result: SimpleDialogCloseType | undefined) => { + firstValueFrom(simpleDialog.closed).then((result: boolean | undefined) => { if (!result) { return; } - if (result == SimpleDialogCloseType.ACCEPT && this.organization.canEditSubscription) { + if (result && this.organization.canEditSubscription) { this.router.navigate(["/organizations", this.organization.id, "billing", "subscription"], { queryParams: { upgrade: true }, }); @@ -581,7 +576,7 @@ export class PeopleComponent placeholders: [this.userNamePipe.transform(user)], }, content: { key: content }, - type: SimpleDialogType.WARNING, + type: "warning", }); if (!confirmed) { @@ -600,7 +595,7 @@ export class PeopleComponent title: { key: "revokeAccess", placeholders: [this.userNamePipe.transform(user)] }, content: this.revokeWarningMessage(), acceptButtonText: { key: "revokeAccess" }, - type: SimpleDialogType.WARNING, + type: "warning", }); if (!confirmed) { @@ -676,7 +671,7 @@ export class PeopleComponent key: "removeOrgUserNoMasterPasswordDesc", placeholders: [this.userNamePipe.transform(user)], }, - type: SimpleDialogType.WARNING, + type: "warning", }); } } diff --git a/apps/web/src/app/admin-console/organizations/organization-routing.module.ts b/apps/web/src/app/admin-console/organizations/organization-routing.module.ts index dca1b18530a..c4ca1dc241f 100644 --- a/apps/web/src/app/admin-console/organizations/organization-routing.module.ts +++ b/apps/web/src/app/admin-console/organizations/organization-routing.module.ts @@ -1,7 +1,7 @@ import { NgModule } from "@angular/core"; import { RouterModule, Routes } from "@angular/router"; -import { AuthGuard } from "@bitwarden/angular/auth/guards/auth.guard"; +import { AuthGuard } from "@bitwarden/angular/auth/guards"; import { canAccessOrgAdmin, canAccessGroupsTab, diff --git a/apps/web/src/app/admin-console/organizations/settings/account.component.ts b/apps/web/src/app/admin-console/organizations/settings/account.component.ts index 48dcb2c88c6..8900e626a3c 100644 --- a/apps/web/src/app/admin-console/organizations/settings/account.component.ts +++ b/apps/web/src/app/admin-console/organizations/settings/account.component.ts @@ -3,7 +3,6 @@ import { FormBuilder, Validators } from "@angular/forms"; import { ActivatedRoute, Router } from "@angular/router"; import { combineLatest, lastValueFrom, Subject, switchMap, takeUntil, from } from "rxjs"; -import { DialogServiceAbstraction } from "@bitwarden/angular/services/dialog"; import { ModalService } from "@bitwarden/angular/services/modal.service"; import { OrganizationApiServiceAbstraction } from "@bitwarden/common/admin-console/abstractions/organization/organization-api.service.abstraction"; import { OrganizationService } from "@bitwarden/common/admin-console/abstractions/organization/organization.service.abstraction"; @@ -15,6 +14,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 { Utils } from "@bitwarden/common/platform/misc/utils"; +import { DialogService } from "@bitwarden/components"; import { ApiKeyComponent } from "../../../settings/api-key.component"; import { PurgeVaultComponent } from "../../../settings/purge-vault.component"; @@ -61,7 +61,7 @@ export class AccountComponent { }); protected organizationId: string; - protected publicKeyBuffer: ArrayBuffer; + protected publicKeyBuffer: Uint8Array; private destroy$ = new Subject(); @@ -75,7 +75,7 @@ export class AccountComponent { private router: Router, private organizationService: OrganizationService, private organizationApiService: OrganizationApiServiceAbstraction, - private dialogService: DialogServiceAbstraction, + private dialogService: DialogService, private formBuilder: FormBuilder ) {} @@ -106,7 +106,7 @@ export class AccountComponent { this.org = orgResponse; // Public Key Buffer for Org Fingerprint Generation - this.publicKeyBuffer = Utils.fromB64ToArray(orgKeys?.publicKey)?.buffer; + this.publicKeyBuffer = Utils.fromB64ToArray(orgKeys?.publicKey); // Patch existing values this.formGroup.patchValue({ diff --git a/apps/web/src/app/admin-console/organizations/settings/components/delete-organization-dialog.component.ts b/apps/web/src/app/admin-console/organizations/settings/components/delete-organization-dialog.component.ts index f52115c268f..389514d35f2 100644 --- a/apps/web/src/app/admin-console/organizations/settings/components/delete-organization-dialog.component.ts +++ b/apps/web/src/app/admin-console/organizations/settings/components/delete-organization-dialog.component.ts @@ -3,7 +3,6 @@ import { Component, Inject, OnDestroy, OnInit } from "@angular/core"; import { FormBuilder, FormControl, Validators } from "@angular/forms"; import { combineLatest, Subject, takeUntil } from "rxjs"; -import { DialogServiceAbstraction } from "@bitwarden/angular/services/dialog"; import { OrganizationApiServiceAbstraction } from "@bitwarden/common/admin-console/abstractions/organization/organization-api.service.abstraction"; import { OrganizationService } from "@bitwarden/common/admin-console/abstractions/organization/organization.service.abstraction"; import { Organization } from "@bitwarden/common/admin-console/models/domain/organization"; @@ -15,6 +14,7 @@ import { Verification } from "@bitwarden/common/types/verification"; import { CipherService } from "@bitwarden/common/vault/abstractions/cipher.service"; import { CipherType } from "@bitwarden/common/vault/enums/cipher-type"; import { CipherView } from "@bitwarden/common/vault/models/view/cipher.view"; +import { DialogService } from "@bitwarden/components"; import { UserVerificationModule } from "../../../../auth/shared/components/user-verification"; import { SharedModule } from "../../../../shared/shared.module"; @@ -168,7 +168,7 @@ export class DeleteOrganizationDialogComponent implements OnInit, OnDestroy { * @param config Configuration for the dialog */ export function openDeleteOrganizationDialog( - dialogService: DialogServiceAbstraction, + dialogService: DialogService, config: DialogConfig ) { return dialogService.open( diff --git a/apps/web/src/app/admin-console/organizations/settings/organization-settings-routing.module.ts b/apps/web/src/app/admin-console/organizations/settings/organization-settings-routing.module.ts index c75a6971408..7feda23f5cf 100644 --- a/apps/web/src/app/admin-console/organizations/settings/organization-settings-routing.module.ts +++ b/apps/web/src/app/admin-console/organizations/settings/organization-settings-routing.module.ts @@ -70,6 +70,9 @@ function getSettingsRoute(organization: Organization) { if (organization.canManageScim) { return "scim"; } + if (organization.canManageDeviceApprovals) { + return "device-approvals"; + } return undefined; } diff --git a/apps/web/src/app/admin-console/organizations/settings/settings.component.html b/apps/web/src/app/admin-console/organizations/settings/settings.component.html index bc2b2e54a0c..036d05d0f73 100644 --- a/apps/web/src/app/admin-console/organizations/settings/settings.component.html +++ b/apps/web/src/app/admin-console/organizations/settings/settings.component.html @@ -65,7 +65,7 @@ routerLink="device-approvals" class="list-group-item" routerLinkActive="active" - *ngIf="org.canManageUsersPassword" + *ngIf="org.canManageDeviceApprovals" > {{ "deviceApprovals" | i18n }} diff --git a/apps/web/src/app/admin-console/organizations/sponsorships/families-for-enterprise-setup.component.ts b/apps/web/src/app/admin-console/organizations/sponsorships/families-for-enterprise-setup.component.ts index e7e81431cb9..c3a687a7f95 100644 --- a/apps/web/src/app/admin-console/organizations/sponsorships/families-for-enterprise-setup.component.ts +++ b/apps/web/src/app/admin-console/organizations/sponsorships/families-for-enterprise-setup.component.ts @@ -3,7 +3,6 @@ import { ActivatedRoute, Router } from "@angular/router"; import { lastValueFrom, Observable, Subject } from "rxjs"; import { first, map, takeUntil } from "rxjs/operators"; -import { DialogServiceAbstraction } from "@bitwarden/angular/services/dialog"; import { ApiService } from "@bitwarden/common/abstractions/api.service"; import { OrganizationService } from "@bitwarden/common/admin-console/abstractions/organization/organization.service.abstraction"; import { Organization } from "@bitwarden/common/admin-console/models/domain/organization"; @@ -14,6 +13,7 @@ import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.servic import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service"; import { ValidationService } from "@bitwarden/common/platform/abstractions/validation.service"; import { SyncService } from "@bitwarden/common/vault/abstractions/sync/sync.service.abstraction"; +import { DialogService } from "@bitwarden/components"; import { OrganizationPlansComponent } from "../../../billing/settings/organization-plans.component"; import { @@ -62,7 +62,7 @@ export class FamiliesForEnterpriseSetupComponent implements OnInit, OnDestroy { private syncService: SyncService, private validationService: ValidationService, private organizationService: OrganizationService, - private dialogService: DialogServiceAbstraction + private dialogService: DialogService ) {} async ngOnInit() { diff --git a/apps/web/src/app/admin-console/organizations/tools/import-export/org-export.component.ts b/apps/web/src/app/admin-console/organizations/tools/import-export/org-export.component.ts index 35d445cb41c..9ea1442fd13 100644 --- a/apps/web/src/app/admin-console/organizations/tools/import-export/org-export.component.ts +++ b/apps/web/src/app/admin-console/organizations/tools/import-export/org-export.component.ts @@ -2,7 +2,6 @@ import { Component } from "@angular/core"; import { UntypedFormBuilder } from "@angular/forms"; import { ActivatedRoute } from "@angular/router"; -import { DialogServiceAbstraction } from "@bitwarden/angular/services/dialog"; import { EventCollectionService } from "@bitwarden/common/abstractions/event/event-collection.service"; import { PolicyService } from "@bitwarden/common/admin-console/abstractions/policy/policy.service.abstraction"; import { UserVerificationService } from "@bitwarden/common/auth/abstractions/user-verification/user-verification.service.abstraction"; @@ -12,6 +11,7 @@ import { FileDownloadService } from "@bitwarden/common/platform/abstractions/fil import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; import { LogService } from "@bitwarden/common/platform/abstractions/log.service"; import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service"; +import { DialogService } from "@bitwarden/components"; import { VaultExportServiceAbstraction } from "@bitwarden/exporter/vault-export"; import { ExportComponent } from "../../../../tools/import-export/export.component"; @@ -34,7 +34,7 @@ export class OrganizationExportComponent extends ExportComponent { userVerificationService: UserVerificationService, formBuilder: UntypedFormBuilder, fileDownloadService: FileDownloadService, - dialogService: DialogServiceAbstraction + dialogService: DialogService ) { super( cryptoService, diff --git a/apps/web/src/app/admin-console/organizations/tools/import-export/org-import.component.ts b/apps/web/src/app/admin-console/organizations/tools/import-export/org-import.component.ts index d0dffd481f0..3c9b5858e04 100644 --- a/apps/web/src/app/admin-console/organizations/tools/import-export/org-import.component.ts +++ b/apps/web/src/app/admin-console/organizations/tools/import-export/org-import.component.ts @@ -1,8 +1,8 @@ import { Component } from "@angular/core"; +import { FormBuilder } from "@angular/forms"; import { ActivatedRoute, Router } from "@angular/router"; import { switchMap, takeUntil } from "rxjs/operators"; -import { DialogServiceAbstraction, SimpleDialogType } from "@bitwarden/angular/services/dialog"; import { ModalService } from "@bitwarden/angular/services/modal.service"; import { canAccessVaultTab, @@ -13,7 +13,10 @@ import { Organization } from "@bitwarden/common/admin-console/models/domain/orga import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; import { LogService } from "@bitwarden/common/platform/abstractions/log.service"; import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service"; +import { CollectionService } from "@bitwarden/common/vault/abstractions/collection.service"; +import { FolderService } from "@bitwarden/common/vault/abstractions/folder/folder.service.abstraction"; import { SyncService } from "@bitwarden/common/vault/abstractions/sync/sync.service.abstraction"; +import { DialogService } from "@bitwarden/components"; import { ImportServiceAbstraction } from "@bitwarden/importer"; import { ImportComponent } from "../../../../tools/import-export/import.component"; @@ -37,11 +40,14 @@ export class OrganizationImportComponent extends ImportComponent { private route: ActivatedRoute, platformUtilsService: PlatformUtilsService, policyService: PolicyService, - private organizationService: OrganizationService, + organizationService: OrganizationService, logService: LogService, modalService: ModalService, syncService: SyncService, - dialogService: DialogServiceAbstraction + dialogService: DialogService, + folderService: FolderService, + collectionService: CollectionService, + formBuilder: FormBuilder ) { super( i18nService, @@ -52,7 +58,11 @@ export class OrganizationImportComponent extends ImportComponent { logService, modalService, syncService, - dialogService + dialogService, + folderService, + collectionService, + organizationService, + formBuilder ); } @@ -74,20 +84,19 @@ export class OrganizationImportComponent extends ImportComponent { await this.router.navigate(["organizations", this.organizationId, "vault"]); } else { this.fileSelected = null; - this.fileContents = ""; } } - async submit() { + protected async performImport() { const confirmed = await this.dialogService.openSimpleDialog({ title: { key: "warning" }, content: { key: "importWarning", placeholders: [this.organization.name] }, - type: SimpleDialogType.WARNING, + type: "warning", }); if (!confirmed) { return; } - super.submit(); + await super.performImport(); } } diff --git a/apps/web/src/app/admin-console/organizations/users/enroll-master-password-reset.component.ts b/apps/web/src/app/admin-console/organizations/users/enroll-master-password-reset.component.ts index 882bb78ceaf..535d7d375ab 100644 --- a/apps/web/src/app/admin-console/organizations/users/enroll-master-password-reset.component.ts +++ b/apps/web/src/app/admin-console/organizations/users/enroll-master-password-reset.component.ts @@ -58,8 +58,8 @@ export class EnrollMasterPasswordReset { const publicKey = Utils.fromB64ToArray(orgKeys.publicKey); // RSA Encrypt user's encKey.key with organization public key - const encKey = await this.cryptoService.getEncKey(); - const encryptedKey = await this.cryptoService.rsaEncrypt(encKey.key, publicKey.buffer); + const userKey = await this.cryptoService.getUserKey(); + const encryptedKey = await this.cryptoService.rsaEncrypt(userKey.key, publicKey); keyString = encryptedKey.encryptedString; toastStringRef = "enrollPasswordResetSuccess"; diff --git a/apps/web/src/app/admin-console/settings/sponsoring-org-row.component.ts b/apps/web/src/app/admin-console/settings/sponsoring-org-row.component.ts index aa1bcf0b4fc..715fc6eba08 100644 --- a/apps/web/src/app/admin-console/settings/sponsoring-org-row.component.ts +++ b/apps/web/src/app/admin-console/settings/sponsoring-org-row.component.ts @@ -2,12 +2,12 @@ import { formatDate } from "@angular/common"; import { Component, EventEmitter, Input, Output, OnInit } from "@angular/core"; import { firstValueFrom } from "rxjs"; -import { DialogServiceAbstraction, SimpleDialogType } from "@bitwarden/angular/services/dialog"; import { ApiService } from "@bitwarden/common/abstractions/api.service"; import { Organization } from "@bitwarden/common/admin-console/models/domain/organization"; import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; import { LogService } from "@bitwarden/common/platform/abstractions/log.service"; import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service"; +import { DialogService } from "@bitwarden/components"; @Component({ selector: "[sponsoring-org-row]", @@ -32,7 +32,7 @@ export class SponsoringOrgRowComponent implements OnInit { private i18nService: I18nService, private logService: LogService, private platformUtilsService: PlatformUtilsService, - private dialogService: DialogServiceAbstraction + private dialogService: DialogService ) {} async ngOnInit() { @@ -73,7 +73,7 @@ export class SponsoringOrgRowComponent implements OnInit { title: `${this.i18nService.t("remove")} ${this.sponsoringOrg.familySponsorshipFriendlyName}?`, content: { key: "revokeSponsorshipConfirmation" }, acceptButtonText: { key: "remove" }, - type: SimpleDialogType.WARNING, + type: "warning", }); if (!confirmed) { diff --git a/apps/web/src/app/app.component.ts b/apps/web/src/app/app.component.ts index 9a22ea20b41..3066dbe093c 100644 --- a/apps/web/src/app/app.component.ts +++ b/apps/web/src/app/app.component.ts @@ -7,12 +7,11 @@ import { IndividualConfig, ToastrService } from "ngx-toastr"; import { Subject, takeUntil } from "rxjs"; import Swal from "sweetalert2"; -import { DialogServiceAbstraction, SimpleDialogType } from "@bitwarden/angular/services/dialog"; import { EventUploadService } from "@bitwarden/common/abstractions/event/event-upload.service"; import { NotificationsService } from "@bitwarden/common/abstractions/notifications.service"; import { SearchService } from "@bitwarden/common/abstractions/search.service"; import { SettingsService } from "@bitwarden/common/abstractions/settings.service"; -import { VaultTimeoutService } from "@bitwarden/common/abstractions/vaultTimeout/vaultTimeout.service"; +import { VaultTimeoutService } from "@bitwarden/common/abstractions/vault-timeout/vault-timeout.service"; import { InternalPolicyService } from "@bitwarden/common/admin-console/abstractions/policy/policy.service.abstraction"; import { AuthService } from "@bitwarden/common/auth/abstractions/auth.service"; import { KeyConnectorService } from "@bitwarden/common/auth/abstractions/key-connector.service"; @@ -27,6 +26,7 @@ import { CipherService } from "@bitwarden/common/vault/abstractions/cipher.servi import { CollectionService } from "@bitwarden/common/vault/abstractions/collection.service"; import { InternalFolderService } from "@bitwarden/common/vault/abstractions/folder/folder.service.abstraction"; import { SyncService } from "@bitwarden/common/vault/abstractions/sync/sync.service.abstraction"; +import { DialogService } from "@bitwarden/components"; import { PolicyListService } from "./admin-console/core/policy-list.service"; import { @@ -82,7 +82,7 @@ export class AppComponent implements OnDestroy, OnInit { protected policyListService: PolicyListService, private keyConnectorService: KeyConnectorService, private configService: ConfigServiceAbstraction, - private dialogService: DialogServiceAbstraction + private dialogService: DialogService ) {} ngOnInit() { @@ -145,7 +145,7 @@ export class AppComponent implements OnDestroy, OnInit { title: { key: "upgradeOrganization" }, content: { key: "upgradeOrganizationDesc" }, acceptButtonText: { key: "upgradeOrganization" }, - type: SimpleDialogType.INFO, + type: "info", }); if (upgradeConfirmed) { this.router.navigate([ @@ -162,7 +162,7 @@ export class AppComponent implements OnDestroy, OnInit { title: { key: "premiumRequired" }, content: { key: "premiumRequiredDesc" }, acceptButtonText: { key: "upgrade" }, - type: SimpleDialogType.SUCCESS, + type: "success", }); if (premiumConfirmed) { this.router.navigate(["settings/subscription/premium"]); @@ -174,7 +174,7 @@ export class AppComponent implements OnDestroy, OnInit { title: { key: "emailVerificationRequired" }, content: { key: "emailVerificationRequiredDesc" }, acceptButtonText: { key: "learnMore" }, - type: SimpleDialogType.INFO, + type: "info", }); if (emailVerificationConfirmed) { this.platformUtilsService.launchUri( diff --git a/apps/web/src/app/app.module.ts b/apps/web/src/app/app.module.ts index 5d1afd21224..eca957a070f 100644 --- a/apps/web/src/app/app.module.ts +++ b/apps/web/src/app/app.module.ts @@ -9,6 +9,7 @@ import { AppComponent } from "./app.component"; import { CoreModule } from "./core"; import { OssRoutingModule } from "./oss-routing.module"; import { OssModule } from "./oss.module"; +import { SendComponent } from "./tools/send/send.component"; import { WildcardRoutingModule } from "./wildcard-routing.module"; @NgModule({ @@ -21,6 +22,7 @@ import { WildcardRoutingModule } from "./wildcard-routing.module"; DragDropModule, LayoutModule, OssRoutingModule, + SendComponent, WildcardRoutingModule, // Needs to be last to catch all non-existing routes ], declarations: [AppComponent], diff --git a/apps/web/src/app/auth/accept-organization.component.ts b/apps/web/src/app/auth/accept-organization.component.ts index 291cea09a49..ef2dda138dd 100644 --- a/apps/web/src/app/auth/accept-organization.component.ts +++ b/apps/web/src/app/auth/accept-organization.component.ts @@ -18,6 +18,7 @@ import { MessagingService } from "@bitwarden/common/platform/abstractions/messag import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service"; import { StateService } from "@bitwarden/common/platform/abstractions/state.service"; import { Utils } from "@bitwarden/common/platform/misc/utils"; +import { OrgKey } from "@bitwarden/common/platform/models/domain/symmetric-crypto-key"; import { BaseAcceptComponent } from "../common/base.accept.component"; @@ -108,16 +109,14 @@ export class AcceptOrganizationComponent extends BaseAcceptComponent { const request = new OrganizationUserAcceptInitRequest(); request.token = qParams.token; - const [encryptedOrgShareKey, orgShareKey] = await this.cryptoService.makeShareKey(); - const [orgPublicKey, encryptedOrgPrivateKey] = await this.cryptoService.makeKeyPair( - orgShareKey - ); + const [encryptedOrgKey, orgKey] = await this.cryptoService.makeOrgKey(); + const [orgPublicKey, encryptedOrgPrivateKey] = await this.cryptoService.makeKeyPair(orgKey); const collection = await this.cryptoService.encrypt( this.i18nService.t("defaultCollection"), - orgShareKey + orgKey ); - request.key = encryptedOrgShareKey.encryptedString; + request.key = encryptedOrgKey.encryptedString; request.keys = new OrganizationKeysRequest( orgPublicKey, encryptedOrgPrivateKey.encryptedString @@ -141,8 +140,8 @@ export class AcceptOrganizationComponent extends BaseAcceptComponent { const publicKey = Utils.fromB64ToArray(response.publicKey); // RSA Encrypt user's encKey.key with organization public key - const encKey = await this.cryptoService.getEncKey(); - const encryptedKey = await this.cryptoService.rsaEncrypt(encKey.key, publicKey.buffer); + const userKey = await this.cryptoService.getUserKey(); + const encryptedKey = await this.cryptoService.rsaEncrypt(userKey.key, publicKey); // Add reset password key to accept request request.resetPasswordKey = encryptedKey.encryptedString; diff --git a/apps/web/src/app/auth/lock.component.ts b/apps/web/src/app/auth/lock.component.ts index 789ebc16955..1cb97fbd558 100644 --- a/apps/web/src/app/auth/lock.component.ts +++ b/apps/web/src/app/auth/lock.component.ts @@ -2,13 +2,13 @@ import { Component, NgZone } from "@angular/core"; import { Router } from "@angular/router"; import { LockComponent as BaseLockComponent } from "@bitwarden/angular/auth/components/lock.component"; -import { DialogServiceAbstraction } from "@bitwarden/angular/services/dialog"; import { ApiService } from "@bitwarden/common/abstractions/api.service"; -import { VaultTimeoutService } from "@bitwarden/common/abstractions/vaultTimeout/vaultTimeout.service"; -import { VaultTimeoutSettingsService } from "@bitwarden/common/abstractions/vaultTimeout/vaultTimeoutSettings.service"; +import { VaultTimeoutSettingsService } from "@bitwarden/common/abstractions/vault-timeout/vault-timeout-settings.service"; +import { VaultTimeoutService } from "@bitwarden/common/abstractions/vault-timeout/vault-timeout.service"; import { PolicyApiServiceAbstraction } from "@bitwarden/common/admin-console/abstractions/policy/policy-api.service.abstraction"; import { InternalPolicyService } from "@bitwarden/common/admin-console/abstractions/policy/policy.service.abstraction"; -import { KeyConnectorService } from "@bitwarden/common/auth/abstractions/key-connector.service"; +import { DeviceTrustCryptoServiceAbstraction } from "@bitwarden/common/auth/abstractions/device-trust-crypto.service.abstraction"; +import { UserVerificationService } from "@bitwarden/common/auth/abstractions/user-verification/user-verification.service.abstraction"; import { CryptoService } from "@bitwarden/common/platform/abstractions/crypto.service"; import { EnvironmentService } from "@bitwarden/common/platform/abstractions/environment.service"; import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; @@ -17,6 +17,7 @@ import { MessagingService } from "@bitwarden/common/platform/abstractions/messag import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service"; import { StateService } from "@bitwarden/common/platform/abstractions/state.service"; import { PasswordStrengthServiceAbstraction } from "@bitwarden/common/tools/password-strength"; +import { DialogService } from "@bitwarden/components"; import { RouterService } from "../core"; @@ -38,12 +39,13 @@ export class LockComponent extends BaseLockComponent { stateService: StateService, apiService: ApiService, logService: LogService, - keyConnectorService: KeyConnectorService, ngZone: NgZone, policyApiService: PolicyApiServiceAbstraction, policyService: InternalPolicyService, passwordStrengthService: PasswordStrengthServiceAbstraction, - dialogService: DialogServiceAbstraction + dialogService: DialogService, + deviceTrustCryptoService: DeviceTrustCryptoServiceAbstraction, + userVerificationService: UserVerificationService ) { super( router, @@ -57,12 +59,13 @@ export class LockComponent extends BaseLockComponent { stateService, apiService, logService, - keyConnectorService, ngZone, policyApiService, policyService, passwordStrengthService, - dialogService + dialogService, + deviceTrustCryptoService, + userVerificationService ); } diff --git a/apps/web/src/app/auth/login/login-decryption-options/login-decryption-options.component.html b/apps/web/src/app/auth/login/login-decryption-options/login-decryption-options.component.html new file mode 100644 index 00000000000..ed59cc12388 --- /dev/null +++ b/apps/web/src/app/auth/login/login-decryption-options/login-decryption-options.component.html @@ -0,0 +1,105 @@ +
    +
    +
    + +
    + + +

    + + {{ "loading" | i18n }} +

    +
    + +
    + +

    {{ "loginInitiated" | i18n }}

    + +

    + {{ "deviceApprovalRequired" | i18n }} +

    + +
    + + + {{ "rememberThisDevice" | i18n }} + {{ "uncheckIfPublicDevice" | i18n }} + +
    + +
    + + + + + +
    +
    + + +

    {{ "loggedInExclamation" | i18n }}

    + +
    + + + {{ "rememberThisDevice" | i18n }} + {{ "uncheckIfPublicDevice" | i18n }} + +
    + + +
    + +
    + +
    +

    {{ "loggingInAs" | i18n }} {{ data.userEmail }}

    + {{ "notYou" | i18n }} +
    +
    +
    +
    diff --git a/apps/web/src/app/auth/login/login-decryption-options/login-decryption-options.component.ts b/apps/web/src/app/auth/login/login-decryption-options/login-decryption-options.component.ts new file mode 100644 index 00000000000..2c97bd227f9 --- /dev/null +++ b/apps/web/src/app/auth/login/login-decryption-options/login-decryption-options.component.ts @@ -0,0 +1,21 @@ +import { Component } from "@angular/core"; + +import { BaseLoginDecryptionOptionsComponent } from "@bitwarden/angular/auth/components/base-login-decryption-options.component"; +@Component({ + selector: "web-login-decryption-options", + templateUrl: "login-decryption-options.component.html", +}) +export class LoginDecryptionOptionsComponent extends BaseLoginDecryptionOptionsComponent { + override async createUser(): Promise { + try { + await super.createUser(); + await this.router.navigate(["/vault"]); + } catch (error) { + this.validationService.showError(error); + } + } + + createUserAction = async (): Promise => { + return this.createUser(); + }; +} diff --git a/apps/web/src/app/auth/login/login-with-device.component.html b/apps/web/src/app/auth/login/login-with-device.component.html index f190f8f5c6e..80811ac8b64 100644 --- a/apps/web/src/app/auth/login/login-with-device.component.html +++ b/apps/web/src/app/auth/login/login-with-device.component.html @@ -5,42 +5,71 @@ >
    -

    - {{ "loginOrCreateNewAccount" | i18n }} -

    -
    -

    {{ "logInInitiated" | i18n }}

    + +

    + {{ "loginOrCreateNewAccount" | i18n }} +

    -
    -

    {{ "notificationSentDevice" | i18n }}

    +
    +

    {{ "loginInitiated" | i18n }}

    -

    - {{ "fingerprintMatchInfo" | i18n }} -

    +
    +

    {{ "notificationSentDevice" | i18n }}

    + +

    + {{ "fingerprintMatchInfo" | i18n }} +

    +
    + +
    +

    {{ "fingerprintPhraseHeader" | i18n }}

    +

    + {{ fingerprintPhrase }} +

    +
    + + + +
    + +
    + {{ "loginWithDeviceEnabledNote" | i18n }} + {{ "viewAllLoginOptions" | i18n }} +
    + + +
    +

    {{ "adminApprovalRequested" | i18n }}

    -
    -

    {{ "fingerprintPhraseHeader" | i18n }}

    -

    - {{ fingerprintPhrase }} -

    +
    +

    {{ "adminApprovalRequestSentToAdmins" | i18n }}

    +

    {{ "youWillBeNotifiedOnceApproved" | i18n }}

    +
    + +
    +

    {{ "fingerprintPhraseHeader" | i18n }}

    +

    + {{ fingerprintPhrase }} +

    +
    + +
    + +
    + {{ "troubleLoggingIn" | i18n }} + {{ "viewAllLoginOptions" | i18n }} +
    - - - -
    - -
    - {{ "loginWithDeviceEnabledNote" | i18n }} - {{ "viewAllLoginOptions" | i18n }} -
    -
    +
    diff --git a/apps/web/src/app/auth/login/login-with-device.component.ts b/apps/web/src/app/auth/login/login-with-device.component.ts index c5e73bf04b1..ff66bdb886b 100644 --- a/apps/web/src/app/auth/login/login-with-device.component.ts +++ b/apps/web/src/app/auth/login/login-with-device.component.ts @@ -4,7 +4,9 @@ import { Router } from "@angular/router"; import { LoginWithDeviceComponent as BaseLoginWithDeviceComponent } from "@bitwarden/angular/auth/components/login-with-device.component"; import { AnonymousHubService } from "@bitwarden/common/abstractions/anonymousHub.service"; import { ApiService } from "@bitwarden/common/abstractions/api.service"; +import { AuthRequestCryptoServiceAbstraction } from "@bitwarden/common/auth/abstractions/auth-request-crypto.service.abstraction"; import { AuthService } from "@bitwarden/common/auth/abstractions/auth.service"; +import { DeviceTrustCryptoServiceAbstraction } from "@bitwarden/common/auth/abstractions/device-trust-crypto.service.abstraction"; import { LoginService } from "@bitwarden/common/auth/abstractions/login.service"; import { AppIdService } from "@bitwarden/common/platform/abstractions/app-id.service"; import { CryptoFunctionService } from "@bitwarden/common/platform/abstractions/crypto-function.service"; @@ -41,7 +43,9 @@ export class LoginWithDeviceComponent anonymousHubService: AnonymousHubService, validationService: ValidationService, stateService: StateService, - loginService: LoginService + loginService: LoginService, + deviceTrustCryptoService: DeviceTrustCryptoServiceAbstraction, + authReqCryptoService: AuthRequestCryptoServiceAbstraction ) { super( router, @@ -58,7 +62,9 @@ export class LoginWithDeviceComponent anonymousHubService, validationService, stateService, - loginService + loginService, + deviceTrustCryptoService, + authReqCryptoService ); } } diff --git a/apps/web/src/app/auth/login/login.component.ts b/apps/web/src/app/auth/login/login.component.ts index 316b353c490..3bc65542b73 100644 --- a/apps/web/src/app/auth/login/login.component.ts +++ b/apps/web/src/app/auth/login/login.component.ts @@ -6,7 +6,6 @@ import { first } from "rxjs/operators"; import { LoginComponent as BaseLoginComponent } from "@bitwarden/angular/auth/components/login.component"; import { FormValidationErrorsService } from "@bitwarden/angular/platform/abstractions/form-validation-errors.service"; -import { DevicesApiServiceAbstraction } from "@bitwarden/common/abstractions/devices/devices-api.service.abstraction"; import { PolicyApiServiceAbstraction } from "@bitwarden/common/admin-console/abstractions/policy/policy-api.service.abstraction"; import { InternalPolicyService } from "@bitwarden/common/admin-console/abstractions/policy/policy.service.abstraction"; import { PolicyData } from "@bitwarden/common/admin-console/models/data/policy.data"; @@ -14,6 +13,7 @@ import { MasterPasswordPolicyOptions } from "@bitwarden/common/admin-console/mod import { Policy } from "@bitwarden/common/admin-console/models/domain/policy"; import { PolicyResponse } from "@bitwarden/common/admin-console/models/response/policy.response"; import { AuthService } from "@bitwarden/common/auth/abstractions/auth.service"; +import { DevicesApiServiceAbstraction } from "@bitwarden/common/auth/abstractions/devices-api.service.abstraction"; import { LoginService } from "@bitwarden/common/auth/abstractions/login.service"; import { ListResponse } from "@bitwarden/common/models/response/list.response"; import { AppIdService } from "@bitwarden/common/platform/abstractions/app-id.service"; diff --git a/apps/web/src/app/auth/login/login.module.ts b/apps/web/src/app/auth/login/login.module.ts index b01fa015888..2a074ca2a61 100644 --- a/apps/web/src/app/auth/login/login.module.ts +++ b/apps/web/src/app/auth/login/login.module.ts @@ -4,12 +4,13 @@ import { CheckboxModule } from "@bitwarden/components"; import { SharedModule } from "../../../app/shared"; +import { LoginDecryptionOptionsComponent } from "./login-decryption-options/login-decryption-options.component"; import { LoginWithDeviceComponent } from "./login-with-device.component"; import { LoginComponent } from "./login.component"; @NgModule({ imports: [SharedModule, CheckboxModule], - declarations: [LoginComponent, LoginWithDeviceComponent], - exports: [LoginComponent, LoginWithDeviceComponent], + declarations: [LoginComponent, LoginWithDeviceComponent, LoginDecryptionOptionsComponent], + exports: [LoginComponent, LoginWithDeviceComponent, LoginDecryptionOptionsComponent], }) export class LoginModule {} diff --git a/apps/web/src/app/auth/recover-two-factor.component.ts b/apps/web/src/app/auth/recover-two-factor.component.ts index 06816d85460..2d6140780a0 100644 --- a/apps/web/src/app/auth/recover-two-factor.component.ts +++ b/apps/web/src/app/auth/recover-two-factor.component.ts @@ -35,7 +35,7 @@ export class RecoverTwoFactorComponent { request.recoveryCode = this.recoveryCode.replace(/\s/g, "").toLowerCase(); request.email = this.email.trim().toLowerCase(); const key = await this.authService.makePreloginKey(this.masterPassword, request.email); - request.masterPasswordHash = await this.cryptoService.hashPassword(this.masterPassword, key); + request.masterPasswordHash = await this.cryptoService.hashMasterKey(this.masterPassword, key); this.formPromise = this.apiService.postTwoFactorRecover(request); await this.formPromise; this.platformUtilsService.showToast( diff --git a/apps/web/src/app/auth/register-form/register-form.component.html b/apps/web/src/app/auth/register-form/register-form.component.html index 44a53fb6e40..9a5220c57d4 100644 --- a/apps/web/src/app/auth/register-form/register-form.component.html +++ b/apps/web/src/app/auth/register-form/register-form.component.html @@ -123,8 +123,7 @@
    -
    -
    +
    - - - {{ "logIn" | i18n }} -
    +

    + {{ "alreadyHaveAccount" | i18n }} + {{ "logIn" | i18n }} +

    diff --git a/apps/web/src/app/auth/register-form/register-form.component.ts b/apps/web/src/app/auth/register-form/register-form.component.ts index 887f5562481..0a494ec333e 100644 --- a/apps/web/src/app/auth/register-form/register-form.component.ts +++ b/apps/web/src/app/auth/register-form/register-form.component.ts @@ -4,7 +4,6 @@ import { Router } from "@angular/router"; import { RegisterComponent as BaseRegisterComponent } from "@bitwarden/angular/components/register.component"; import { FormValidationErrorsService } from "@bitwarden/angular/platform/abstractions/form-validation-errors.service"; -import { DialogServiceAbstraction } from "@bitwarden/angular/services/dialog"; import { ApiService } from "@bitwarden/common/abstractions/api.service"; import { AuditService } from "@bitwarden/common/abstractions/audit.service"; import { PolicyService } from "@bitwarden/common/admin-console/abstractions/policy/policy.service.abstraction"; @@ -18,6 +17,7 @@ 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 { PasswordGenerationServiceAbstraction } from "@bitwarden/common/tools/generator/password"; +import { DialogService } from "@bitwarden/components"; @Component({ selector: "app-register-form", @@ -46,7 +46,7 @@ export class RegisterFormComponent extends BaseRegisterComponent { environmentService: EnvironmentService, logService: LogService, auditService: AuditService, - dialogService: DialogServiceAbstraction + dialogService: DialogService ) { super( formValidationErrorService, diff --git a/apps/web/src/app/auth/set-password.component.ts b/apps/web/src/app/auth/set-password.component.ts index fcce84a9c2a..49320ced5d8 100644 --- a/apps/web/src/app/auth/set-password.component.ts +++ b/apps/web/src/app/auth/set-password.component.ts @@ -2,7 +2,6 @@ import { Component } from "@angular/core"; import { ActivatedRoute, Router } from "@angular/router"; import { SetPasswordComponent as BaseSetPasswordComponent } from "@bitwarden/angular/components/set-password.component"; -import { DialogServiceAbstraction } from "@bitwarden/angular/services/dialog"; import { ApiService } from "@bitwarden/common/abstractions/api.service"; import { OrganizationUserService } from "@bitwarden/common/abstractions/organization-user/organization-user.service"; import { OrganizationApiServiceAbstraction } from "@bitwarden/common/admin-console/abstractions/organization/organization-api.service.abstraction"; @@ -15,6 +14,7 @@ import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/pl import { StateService } from "@bitwarden/common/platform/abstractions/state.service"; import { PasswordGenerationServiceAbstraction } from "@bitwarden/common/tools/generator/password"; import { SyncService } from "@bitwarden/common/vault/abstractions/sync/sync.service.abstraction"; +import { DialogService } from "@bitwarden/components"; @Component({ selector: "app-set-password", @@ -36,7 +36,7 @@ export class SetPasswordComponent extends BaseSetPasswordComponent { stateService: StateService, organizationApiService: OrganizationApiServiceAbstraction, organizationUserService: OrganizationUserService, - dialogService: DialogServiceAbstraction + dialogService: DialogService ) { super( i18nService, diff --git a/apps/web/src/app/settings/change-password.component.html b/apps/web/src/app/auth/settings/change-password.component.html similarity index 94% rename from apps/web/src/app/settings/change-password.component.html rename to apps/web/src/app/auth/settings/change-password.component.html index 3321b8f9dfe..7088cb5a686 100644 --- a/apps/web/src/app/settings/change-password.component.html +++ b/apps/web/src/app/auth/settings/change-password.component.html @@ -89,12 +89,12 @@ -