diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 9502a9c404d..255ddc08c80 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -6,9 +6,9 @@ ## Desktop native module ## apps/desktop/desktop_native @bitwarden/team-platform-dev -apps/desktop/desktop_native/objc/src/native/autofill @bitwarden/team-autofill-dev -apps/desktop/desktop_native/core/src/autofill @bitwarden/team-autofill-dev -## No ownership fo Cargo.lock and Cargo.toml to allow dependency updates +apps/desktop/desktop_native/objc/src/native/autofill @bitwarden/team-autofill-desktop-dev +apps/desktop/desktop_native/core/src/autofill @bitwarden/team-autofill-desktop-dev +## No ownership for Cargo.lock and Cargo.toml to allow dependency updates apps/desktop/desktop_native/Cargo.lock apps/desktop/desktop_native/Cargo.toml @@ -29,6 +29,7 @@ libs/common/src/auth @bitwarden/team-auth-dev apps/browser/src/tools @bitwarden/team-tools-dev apps/cli/src/tools @bitwarden/team-tools-dev apps/desktop/src/app/tools @bitwarden/team-tools-dev +apps/desktop/desktop_native/bitwarden_chromium_importer @bitwarden/team-tools-dev apps/web/src/app/tools @bitwarden/team-tools-dev libs/angular/src/tools @bitwarden/team-tools-dev libs/common/src/models/export @bitwarden/team-tools-dev @@ -37,10 +38,12 @@ libs/importer @bitwarden/team-tools-dev libs/tools @bitwarden/team-tools-dev ## Dirt (Data Insights & Reporting) team files ## +apps/browser/src/dirt @bitwarden/team-data-insights-and-reporting-dev apps/web/src/app/dirt @bitwarden/team-data-insights-and-reporting-dev bitwarden_license/bit-common/src/dirt @bitwarden/team-data-insights-and-reporting-dev bitwarden_license/bit-web/src/app/dirt @bitwarden/team-data-insights-and-reporting-dev libs/dirt @bitwarden/team-data-insights-and-reporting-dev +libs/common/src/dirt @bitwarden/team-data-insights-and-reporting-dev ## Localization/Crowdin (Platform and Tools team) apps/browser/src/_locales @bitwarden/team-tools-dev @bitwarden/team-platform-dev @@ -94,6 +97,14 @@ libs/platform @bitwarden/team-platform-dev libs/storage-core @bitwarden/team-platform-dev libs/logging @bitwarden/team-platform-dev libs/storage-test-utils @bitwarden/team-platform-dev +libs/messaging @bitwarden/team-platform-dev +libs/serialization @bitwarden/team-platform-dev +libs/guid @bitwarden/team-platform-dev +libs/client-type @bitwarden/team-platform-dev +libs/core-test-utils @bitwarden/team-platform-dev +libs/state @bitwarden/team-platform-dev +libs/state-internal @bitwarden/team-platform-dev +libs/state-test-utils @bitwarden/team-platform-dev # Web utils used across app and connectors apps/web/src/utils/ @bitwarden/team-platform-dev # Web core and shared files @@ -111,7 +122,6 @@ apps/web/src/translation-constants.ts @bitwarden/team-platform-dev .github/workflows/build-desktop.yml @bitwarden/team-platform-dev .github/workflows/build-web-target.yml @bitwarden/team-platform-dev .github/workflows/build-web.yml @bitwarden/team-platform-dev -.github/workflows/chromatic.yml @bitwarden/team-platform-dev .github/workflows/crowdin-pull.yml @bitwarden/team-platform-dev .github/workflows/enforce-labels.yml @bitwarden/team-platform-dev .github/workflows/lint.yml @bitwarden/team-platform-dev @@ -123,33 +133,41 @@ apps/web/src/translation-constants.ts @bitwarden/team-platform-dev .github/workflows/version-auto-bump.yml @bitwarden/team-platform-dev # ESLint custom rules libs/eslint @bitwarden/team-platform-dev +libs/eslint/components @bitwarden/team-ui-foundation # Typescript tooling tsconfig.base.json @bitwarden/team-platform-dev nx.json @bitwarden/team-platform-dev ## Autofill team files ## apps/browser/src/autofill @bitwarden/team-autofill-dev -apps/desktop/src/autofill @bitwarden/team-autofill-dev +apps/desktop/src/autofill @bitwarden/team-autofill-desktop-dev libs/common/src/autofill @bitwarden/team-autofill-dev -apps/desktop/macos/autofill-extension @bitwarden/team-autofill-dev -apps/desktop/src/app/components/fido2placeholder.component.ts @bitwarden/team-autofill-dev -apps/desktop/desktop_native/windows_plugin_authenticator @bitwarden/team-autofill-dev +apps/desktop/macos/autofill-extension @bitwarden/team-autofill-desktop-dev +.github/workflows/test-browser-interactions.yml @bitwarden/team-autofill-dev +# Autofill desktop files +apps/desktop/src/app/components/fido2placeholder.component.ts @bitwarden/team-autofill-desktop-dev +apps/desktop/desktop_native/windows_plugin_authenticator @bitwarden/team-autofill-desktop-dev +apps/desktop/desktop_native/autotype @bitwarden/team-autofill-desktop-dev # DuckDuckGo integration -apps/desktop/native-messaging-test-runner @bitwarden/team-autofill-dev -apps/desktop/src/services/duckduckgo-message-handler.service.ts @bitwarden/team-autofill-dev +apps/desktop/native-messaging-test-runner @bitwarden/team-autofill-desktop-dev +apps/desktop/src/services/duckduckgo-message-handler.service.ts @bitwarden/team-autofill-desktop-dev +apps/desktop/src/services/encrypted-message-handler.service.ts @bitwarden/team-autofill-desktop-dev +.github/workflows/alert-ddg-files-modified.yml @bitwarden/team-autofill-desktop-dev # SSH Agent -apps/desktop/desktop_native/core/src/ssh_agent @bitwarden/team-autofill-dev @bitwarden/wg-ssh-keys +apps/desktop/desktop_native/core/src/ssh_agent @bitwarden/team-autofill-desktop-dev @bitwarden/wg-ssh-keys ## UI Foundation ## +.github/workflows/chromatic.yml @bitwarden/team-ui-foundation .storybook @bitwarden/team-ui-foundation libs/components @bitwarden/team-ui-foundation +libs/assets @bitwarden/team-ui-foundation libs/ui @bitwarden/team-ui-foundation +libs/angular/src/scss @bitwarden/team-ui-foundation apps/browser/src/platform/popup/layout @bitwarden/team-ui-foundation apps/browser/src/popup/app-routing.animations.ts @bitwarden/team-ui-foundation apps/browser/src/popup/components/extension-anon-layout-wrapper @bitwarden/team-ui-foundation apps/web/src/app/layouts @bitwarden/team-ui-foundation - ## Key management team files ## apps/desktop/src/key-management @bitwarden/team-key-management-dev apps/web/src/app/key-management @bitwarden/team-key-management-dev @@ -187,11 +205,12 @@ apps/web/src/locales/en/messages.json .github/workflows/release-desktop.yml @bitwarden/dept-bre .github/workflows/release-web.yml @bitwarden/dept-bre -## Docker files have shared ownership ## -**/Dockerfile -**/*.Dockerfile -**/.dockerignore -**/entrypoint.sh +## Docker-related files +**/Dockerfile @bitwarden/team-appsec @bitwarden/dept-bre +**/*.Dockerfile @bitwarden/team-appsec @bitwarden/dept-bre +**/*.dockerignore @bitwarden/team-appsec @bitwarden/dept-bre +**/docker-compose.yml @bitwarden/team-appsec @bitwarden/dept-bre +**/entrypoint.sh @bitwarden/team-appsec @bitwarden/dept-bre ## Overrides # For the time being platform owns tsconfig and jest config @@ -200,3 +219,4 @@ apps/web/src/locales/en/messages.json **/tsconfig.json @bitwarden/team-platform-dev **/jest.config.js @bitwarden/team-platform-dev **/project.jsons @bitwarden/team-platform-dev +libs/pricing @bitwarden/team-billing-dev diff --git a/.github/renovate.json5 b/.github/renovate.json5 index 09afb97174f..6fcffb1f875 100644 --- a/.github/renovate.json5 +++ b/.github/renovate.json5 @@ -106,7 +106,6 @@ "@emotion/css", "@webcomponents/custom-elements", "bitwarden-russh", - "bytes", "concurrently", "cross-env", "del", @@ -148,6 +147,7 @@ "@nx/eslint", "@nx/jest", "@nx/js", + "@nx/webpack", "@types/chrome", "@types/firefox-webext-browser", "@types/glob", @@ -197,6 +197,7 @@ "nx", "oo7", "oslog", + "parse5", "pin-project", "pkg", "postcss", @@ -323,6 +324,7 @@ "storybook", "tailwindcss", "zone.js", + "@tailwindcss/container-queries", ], description: "UI Foundation owned dependencies", commitMessagePrefix: "[deps] UI Foundation:", @@ -398,17 +400,7 @@ reviewers: ["team:team-vault-dev"], }, { - matchPackageNames: [ - "@types/argon2-browser", - "aes", - "argon2", - "argon2-browser", - "big-integer", - "cbc", - "rsa", - "russh-cryptovec", - "sha2", - ], + matchPackageNames: ["aes", "big-integer", "cbc", "rsa", "russh-cryptovec", "sha2"], description: "Key Management owned dependencies", commitMessagePrefix: "[deps] KM:", reviewers: ["team:team-key-management-dev"], diff --git a/.github/workflows/alert-ddg-files-modified.yml b/.github/workflows/alert-ddg-files-modified.yml new file mode 100644 index 00000000000..d799cc2e248 --- /dev/null +++ b/.github/workflows/alert-ddg-files-modified.yml @@ -0,0 +1,87 @@ +name: DDG File Change Monitor + +on: + pull_request: + branches: [ main ] + types: [ opened, synchronize ] + +jobs: + check-files: + name: Check files + runs-on: ubuntu-22.04 + permissions: + contents: read + pull-requests: write + steps: + - name: Checkout code + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + fetch-depth: 0 + + - name: Get changed files + id: changed-files + uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3.0.2 + with: + list-files: shell + filters: | + monitored: + - 'apps/desktop/native-messaging-test-runner/**' + - 'apps/desktop/src/services/duckduckgo-message-handler.service.ts' + - 'apps/desktop/src/services/encrypted-message-handler.service.ts' + + - name: Remove past BIT status comments + uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0 + with: + script: | + // Note: should match the first line of `message` in the communication steps + const workflowCommentTag = ''; + + const issueComments = await github.rest.issues.listComments({ + issue_number: context.issue.number, + owner: context.repo.owner, + repo: context.repo.repo, + }); + + for (const comment of issueComments.data || []) { + const shouldDeleteComment = + // Do not delete comments that were not automated + !!comment.performed_via_github_app && + + // Do not delete user comments + comment.user.type === 'Bot' && + + // Do not delete edited comments + comment.created_at === comment.updated_at && + + // Only delete comments from this workflow + comment.body.trim().startsWith(workflowCommentTag); + + if (shouldDeleteComment) { + await github.rest.issues.deleteComment({ + comment_id: comment.id, + owner: context.repo.owner, + repo: context.repo.repo, + }); + } + } + + - name: Comment on PR if monitored files changed + if: steps.changed-files.outputs.monitored == 'true' + uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0 + with: + script: | + const changedFiles = `${{ steps.changed-files.outputs.monitored_files }}`.split(' ').filter(file => file.trim() !== ''); + + const message = ` + ⚠️🦆 **DuckDuckGo Integration files have been modified in this PR:** + + ${changedFiles.map(file => `- \`${file}\``).join('\n')} + + Please run the DuckDuckGo native messaging test runner from this branch using [these instructions](https://contributing.bitwarden.com/getting-started/clients/desktop/native-messaging-test-runner) and ensure it functions properly.`; + + github.rest.issues.createComment({ + issue_number: context.issue.number, + owner: context.repo.owner, + repo: context.repo.repo, + body: message + }); diff --git a/.github/workflows/auto-reply-discussions.yml b/.github/workflows/auto-reply-discussions.yml index 83970ab3619..a6d7e9c6dcf 100644 --- a/.github/workflows/auto-reply-discussions.yml +++ b/.github/workflows/auto-reply-discussions.yml @@ -15,7 +15,7 @@ jobs: steps: - name: Get discussion label and template name id: discussion-label - uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1 + uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0 with: script: | const discussion = context.payload.discussion; @@ -29,7 +29,7 @@ jobs: - name: Get selected topic id: get_selected_topic - uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1 + uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0 with: result-encoding: string script: | @@ -45,7 +45,7 @@ jobs: } - name: Reply or close Discussion - uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1 + uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0 env: TEMPLATE_NAME: ${{ steps.discussion-label.outputs.template_name }} TOPIC: ${{ steps.get_selected_topic.outputs.result }} diff --git a/.github/workflows/build-browser-target.yml b/.github/workflows/build-browser-target.yml index a2ae48d419b..e89a41c1009 100644 --- a/.github/workflows/build-browser-target.yml +++ b/.github/workflows/build-browser-target.yml @@ -28,6 +28,8 @@ jobs: check-run: name: Check PR run uses: bitwarden/gh-actions/.github/workflows/check-run.yml@main + permissions: + contents: read run-workflow: name: Build Browser @@ -35,4 +37,8 @@ jobs: if: ${{ github.event.pull_request.head.repo.full_name != github.repository }} uses: ./.github/workflows/build-browser.yml secrets: inherit + permissions: + contents: write + pull-requests: write + id-token: write diff --git a/.github/workflows/build-browser.yml b/.github/workflows/build-browser.yml index c75298a3e92..bece680b9d0 100644 --- a/.github/workflows/build-browser.yml +++ b/.github/workflows/build-browser.yml @@ -41,7 +41,8 @@ defaults: run: shell: bash -permissions: {} +permissions: + contents: read jobs: setup: @@ -77,10 +78,8 @@ jobs: - name: Check secrets id: check-secrets - env: - AZURE_KV_CI_SERVICE_PRINCIPAL: ${{ secrets.AZURE_KV_CI_SERVICE_PRINCIPAL }} run: | - has_secrets=${{ secrets.AZURE_KV_CI_SERVICE_PRINCIPAL != '' }} + has_secrets=${{ secrets.AZURE_CLIENT_ID != '' }} echo "has_secrets=$has_secrets" >> $GITHUB_OUTPUT @@ -124,11 +123,20 @@ jobs: build-source: - name: Build browser source + name: Build browser source - ${{matrix.license_type.readable}} runs-on: ubuntu-22.04 needs: - setup - locales-test + strategy: + matrix: + license_type: + - include_bitwarden_license_folder: false + archive_name_prefix: "" + readable: "open source license" + - include_bitwarden_license_folder: true + archive_name_prefix: "bit-" + readable: "commercial license" env: _BUILD_NUMBER: ${{ needs.setup.outputs.adj_build_number }} _NODE_VERSION: ${{ needs.setup.outputs.node_version }} @@ -139,7 +147,7 @@ jobs: ref: ${{ github.event.pull_request.head.sha }} - name: Set up Node - uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4.1.0 + uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0 with: cache: 'npm' cache-dependency-path: '**/package-lock.json' @@ -163,14 +171,16 @@ jobs: FILES=$(find . -maxdepth 1 -type f) for FILE in $FILES; do cp "$FILE" browser-source/; done - # Copy patches to the Browser source directory - mkdir -p browser-source/patches - cp -r patches/* browser-source/patches - # Copy apps/browser to the Browser source directory mkdir -p browser-source/apps/browser cp -r apps/browser/* browser-source/apps/browser + # Copy bitwarden_license/bit-browser to the Browser source directory + if [[ ${{matrix.license_type.include_bitwarden_license_folder}} == "true" ]]; then + mkdir -p browser-source/bitwarden_license/bit-browser + cp -r bitwarden_license/bit-browser/* browser-source/bitwarden_license/bit-browser + fi + # Copy libs to Browser source directory mkdir browser-source/libs cp -r libs/* browser-source/libs @@ -180,13 +190,13 @@ jobs: - name: Upload browser source uses: actions/upload-artifact@65c4c4a1ddee5b72f698fdd19549f0f0fb45cf08 # v4.6.0 with: - name: browser-source-${{ env._BUILD_NUMBER }}.zip + name: ${{matrix.license_type.archive_name_prefix}}browser-source-${{ env._BUILD_NUMBER }}.zip path: browser-source.zip if-no-files-found: error build: - name: Build + name: Build ${{ matrix.browser.name }} - ${{ matrix.license_type.readable }} runs-on: ubuntu-22.04 needs: - setup @@ -197,25 +207,38 @@ jobs: _NODE_VERSION: ${{ needs.setup.outputs.node_version }} strategy: matrix: - include: + license_type: + - build_prefix: "" + artifact_prefix: "" + source_archive_name_prefix: "" + archive_name_prefix: "" + npm_command_prefix: "dist:" + readable: "open source license" + - build_prefix: "bit-" + artifact_prefix: "bit-" + source_archive_name_prefix: "bit-" + archive_name_prefix: "bit-" + npm_command_prefix: "dist:bit:" + readable: "commercial license" + browser: - name: "chrome" - npm_command: "dist:chrome" + npm_command_suffix: "chrome" archive_name: "dist-chrome.zip" artifact_name: "dist-chrome-MV3" - name: "edge" - npm_command: "dist:edge" + npm_command_suffix: "edge" archive_name: "dist-edge.zip" artifact_name: "dist-edge-MV3" - name: "firefox" - npm_command: "dist:firefox" + npm_command_suffix: "firefox" archive_name: "dist-firefox.zip" artifact_name: "dist-firefox" - name: "firefox-mv3" - npm_command: "dist:firefox:mv3" + npm_command_suffix: "firefox:mv3" archive_name: "dist-firefox.zip" artifact_name: "DO-NOT-USE-FOR-PROD-dist-firefox-MV3" - name: "opera-mv3" - npm_command: "dist:opera:mv3" + npm_command_suffix: "opera:mv3" archive_name: "dist-opera.zip" artifact_name: "dist-opera-MV3" steps: @@ -225,7 +248,7 @@ jobs: ref: ${{ github.event.pull_request.head.sha }} - name: Set up Node - uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4.1.0 + uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0 with: cache: 'npm' cache-dependency-path: '**/package-lock.json' @@ -237,9 +260,9 @@ jobs: npm --version - name: Download browser source - uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8 + uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0 with: - name: browser-source-${{ env._BUILD_NUMBER }}.zip + name: ${{matrix.license_type.source_archive_name_prefix}}browser-source-${{ env._BUILD_NUMBER }}.zip - name: Unzip browser source artifact run: | @@ -269,47 +292,63 @@ jobs: run: npm link ../sdk-internal - name: Check source file size - if: ${{ startsWith(matrix.name, 'firefox') }} + if: ${{ startsWith(matrix.browser.name, 'firefox') }} run: | # Declare variable as indexed array declare -a FILES - # Search for source files that are greater than 4M + # Search for source files that are greater than 5M TARGET_DIR='./browser-source/apps/browser' while IFS=' ' read -r RESULT; do FILES+=("$RESULT") - done < <(find $TARGET_DIR -size +4M) + done < <(find $TARGET_DIR -size +5M) # Validate results and provide messaging if [[ ${#FILES[@]} -ne 0 ]]; then - echo "File(s) exceeds size limit: 4MB" + echo "File(s) exceeds size limit: 5MB" for FILE in ${FILES[@]}; do echo "- $(du --si $FILE)" done - echo "ERROR Firefox rejects extension uploads that contain files larger than 4MB" + echo "ERROR Firefox rejects extension uploads that contain files larger than 5MB" # Invoke failure exit 1 fi - name: Build extension - run: npm run ${{ matrix.npm_command }} + run: npm run ${{matrix.license_type.npm_command_prefix}}${{ matrix.browser.npm_command_suffix }} working-directory: browser-source/apps/browser - name: Upload extension artifact uses: actions/upload-artifact@65c4c4a1ddee5b72f698fdd19549f0f0fb45cf08 # v4.6.0 with: - name: ${{ matrix.artifact_name }}-${{ env._BUILD_NUMBER }}.zip - path: browser-source/apps/browser/dist/${{ matrix.archive_name }} + name: ${{ matrix.license_type.artifact_prefix }}${{ matrix.browser.artifact_name }}-${{ env._BUILD_NUMBER }}.zip + path: browser-source/apps/browser/dist/${{matrix.license_type.archive_name_prefix}}${{ matrix.browser.archive_name }} if-no-files-found: error build-safari: - name: Build Safari + name: Build Safari - ${{ matrix.license_type.readable }} runs-on: macos-13 + permissions: + contents: read + id-token: write needs: - setup - locales-test if: ${{ needs.setup.outputs.has_secrets == 'true' }} + strategy: + matrix: + license_type: + - build_prefix: "" + artifact_prefix: "" + archive_name_prefix: "" + npm_command_prefix: "dist:" + readable: "open source license" + - build_prefix: "bit-" + artifact_prefix: "bit-" + archive_name_prefix: "bit-" + npm_command_prefix: "dist:bit:" + readable: "commercial license" env: _BUILD_NUMBER: ${{ needs.setup.outputs.adj_build_number }} _NODE_VERSION: ${{ needs.setup.outputs.node_version }} @@ -320,7 +359,7 @@ jobs: ref: ${{ github.event.pull_request.head.sha }} - name: Set up Node - uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4.1.0 + uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0 with: cache: 'npm' cache-dependency-path: '**/package-lock.json' @@ -331,10 +370,19 @@ jobs: node --version npm --version - - name: Login to Azure - uses: Azure/login@e15b166166a8746d1a47596803bd8c1b595455cf # v1.6.0 + - name: Log in to Azure + uses: bitwarden/gh-actions/azure-login@main with: - creds: ${{ secrets.AZURE_KV_CI_SERVICE_PRINCIPAL }} + subscription_id: ${{ secrets.AZURE_SUBSCRIPTION_ID }} + tenant_id: ${{ secrets.AZURE_TENANT_ID }} + client_id: ${{ secrets.AZURE_CLIENT_ID }} + + - name: Get Azure Key Vault secrets + id: get-kv-secrets + uses: bitwarden/gh-actions/get-keyvault-secrets@main + with: + keyvault: gh-clients + secrets: "KEYCHAIN-PASSWORD" - name: Download Provisioning Profiles secrets env: @@ -370,9 +418,12 @@ jobs: az keyvault secret show --id https://bitwarden-ci.vault.azure.net/certificates/macdev-cert | jq -r .value | base64 -d > $HOME/certificates/macdev-cert.p12 + - name: Log out from Azure + uses: bitwarden/gh-actions/azure-logout@main + - name: Set up keychain env: - KEYCHAIN_PASSWORD: ${{ secrets.KEYCHAIN_PASSWORD }} + KEYCHAIN_PASSWORD: ${{ steps.get-kv-secrets.outputs.KEYCHAIN-PASSWORD }} run: | security create-keychain -p $KEYCHAIN_PASSWORD build.keychain security default-keychain -s build.keychain @@ -423,27 +474,31 @@ jobs: npm link ../sdk-internal - name: Build Safari extension - run: npm run dist:safari + run: npm run ${{matrix.license_type.npm_command_prefix}}safari working-directory: apps/browser - name: Zip Safari build artifact run: | cd apps/browser/dist - zip dist-safari.zip ./Safari/**/build/Release/safari.appex -r + zip ${{matrix.license_type.archive_name_prefix }}dist-safari.zip ./Safari/**/build/Release/safari.appex -r pwd ls -la - name: Upload Safari artifact uses: actions/upload-artifact@65c4c4a1ddee5b72f698fdd19549f0f0fb45cf08 # v4.6.0 with: - name: dist-safari-${{ env._BUILD_NUMBER }}.zip - path: apps/browser/dist/dist-safari.zip + name: ${{matrix.license_type.archive_name_prefix}}dist-safari-${{ env._BUILD_NUMBER }}.zip + path: apps/browser/dist/${{matrix.license_type.archive_name_prefix}}dist-safari.zip if-no-files-found: error crowdin-push: name: Crowdin Push if: github.event_name != 'pull_request_target' && github.ref == 'refs/heads/main' runs-on: ubuntu-22.04 + permissions: + contents: write + pull-requests: write + id-token: write needs: - build - build-safari @@ -453,10 +508,12 @@ jobs: with: ref: ${{ github.event.pull_request.head.sha }} - - name: Login to Azure - uses: Azure/login@e15b166166a8746d1a47596803bd8c1b595455cf # v1.6.0 + - name: Log in to Azure + uses: bitwarden/gh-actions/azure-login@main with: - creds: ${{ secrets.AZURE_KV_CI_SERVICE_PRINCIPAL }} + subscription_id: ${{ secrets.AZURE_SUBSCRIPTION_ID }} + tenant_id: ${{ secrets.AZURE_TENANT_ID }} + client_id: ${{ secrets.AZURE_CLIENT_ID }} - name: Retrieve secrets id: retrieve-secrets @@ -465,6 +522,9 @@ jobs: keyvault: "bitwarden-ci" secrets: "crowdin-api-token" + - name: Log out from Azure + uses: bitwarden/gh-actions/azure-logout@main + - name: Upload Sources uses: crowdin/github-action@f214c8723025f41fc55b2ad26e67b60b80b1885d # v2.7.1 env: @@ -482,6 +542,9 @@ jobs: name: Check for failures if: always() runs-on: ubuntu-22.04 + permissions: + contents: read + id-token: write needs: - setup - locales-test @@ -497,11 +560,13 @@ jobs: && contains(needs.*.result, 'failure') run: exit 1 - - name: Login to Azure - Prod Subscription - uses: Azure/login@e15b166166a8746d1a47596803bd8c1b595455cf # v1.6.0 + - name: Log in to Azure if: failure() + uses: bitwarden/gh-actions/azure-login@main with: - creds: ${{ secrets.AZURE_KV_CI_SERVICE_PRINCIPAL }} + subscription_id: ${{ secrets.AZURE_SUBSCRIPTION_ID }} + tenant_id: ${{ secrets.AZURE_TENANT_ID }} + client_id: ${{ secrets.AZURE_CLIENT_ID }} - name: Retrieve secrets id: retrieve-secrets @@ -511,6 +576,10 @@ jobs: keyvault: "bitwarden-ci" secrets: "devops-alerts-slack-webhook-url" + - name: Log out from Azure + if: failure() + uses: bitwarden/gh-actions/azure-logout@main + - name: Notify Slack on failure uses: act10ns/slack@44541246747a30eb3102d87f7a4cc5471b0ffb7d # v2.1.0 if: failure() diff --git a/.github/workflows/build-cli-target.yml b/.github/workflows/build-cli-target.yml index 6b493d4e6d9..54865ddaddd 100644 --- a/.github/workflows/build-cli-target.yml +++ b/.github/workflows/build-cli-target.yml @@ -28,6 +28,8 @@ jobs: check-run: name: Check PR run uses: bitwarden/gh-actions/.github/workflows/check-run.yml@main + permissions: + contents: read run-workflow: name: Build CLI @@ -35,4 +37,7 @@ jobs: if: ${{ github.event.pull_request.head.repo.full_name != github.repository }} uses: ./.github/workflows/build-cli.yml secrets: inherit + permissions: + contents: read + id-token: write diff --git a/.github/workflows/build-cli.yml b/.github/workflows/build-cli.yml index ac314a4c33a..d1df280f764 100644 --- a/.github/workflows/build-cli.yml +++ b/.github/workflows/build-cli.yml @@ -71,6 +71,7 @@ jobs: - name: Get Node Version id: retrieve-node-version + working-directory: ./ run: | NODE_NVMRC=$(cat .nvmrc) NODE_VERSION=${NODE_NVMRC/v/''} @@ -78,10 +79,8 @@ jobs: - name: Check secrets id: check-secrets - env: - AZURE_KV_CI_SERVICE_PRINCIPAL: ${{ secrets.AZURE_KV_CI_SERVICE_PRINCIPAL }} run: | - has_secrets=${{ secrets.AZURE_KV_CI_SERVICE_PRINCIPAL != '' }} + has_secrets=${{ secrets.AZURE_CLIENT_ID != '' }} echo "has_secrets=$has_secrets" >> $GITHUB_OUTPUT @@ -106,8 +105,12 @@ jobs: env: _PACKAGE_VERSION: ${{ needs.setup.outputs.package_version }} _NODE_VERSION: ${{ needs.setup.outputs.node_version }} - _WIN_PKG_FETCH_VERSION: 20.11.1 + _WIN_PKG_FETCH_VERSION: 22.15.1 _WIN_PKG_VERSION: 3.5 + permissions: + contents: read + id-token: write + steps: - name: Check out repo uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 @@ -121,7 +124,7 @@ jobs: awk '{print tolower($0)}')" >> $GITHUB_ENV - name: Set up Node - uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4.1.0 + uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0 with: cache: 'npm' cache-dependency-path: '**/package-lock.json' @@ -156,9 +159,11 @@ jobs: - name: Login to Azure if: ${{ matrix.os.base == 'mac' && needs.setup.outputs.has_secrets == 'true' }} - uses: Azure/login@e15b166166a8746d1a47596803bd8c1b595455cf # v1.6.0 + uses: bitwarden/gh-actions/azure-login@main with: - creds: ${{ secrets.AZURE_KV_CI_SERVICE_PRINCIPAL }} + subscription_id: ${{ secrets.AZURE_SUBSCRIPTION_ID }} + tenant_id: ${{ secrets.AZURE_TENANT_ID }} + client_id: ${{ secrets.AZURE_CLIENT_ID }} - name: Get certificates if: ${{ matrix.os.base == 'mac' && needs.setup.outputs.has_secrets == 'true' }} @@ -168,10 +173,21 @@ jobs: az keyvault secret show --id https://bitwarden-ci.vault.azure.net/certificates/devid-app-cert | jq -r .value | base64 -d > $HOME/certificates/devid-app-cert.p12 + - name: Get Azure Key Vault secrets + id: get-kv-secrets + if: ${{ matrix.os.base == 'mac' && needs.setup.outputs.has_secrets == 'true' }} + uses: bitwarden/gh-actions/get-keyvault-secrets@main + with: + keyvault: gh-clients + secrets: "KEYCHAIN-PASSWORD,APP-STORE-CONNECT-AUTH-KEY,APP-STORE-CONNECT-TEAM-ISSUER" + + - name: Log out from Azure + uses: bitwarden/gh-actions/azure-logout@main + - name: Set up keychain if: ${{ matrix.os.base == 'mac' && needs.setup.outputs.has_secrets == 'true' }} env: - KEYCHAIN_PASSWORD: ${{ secrets.KEYCHAIN_PASSWORD }} + KEYCHAIN_PASSWORD: ${{ steps.get-kv-secrets.outputs.KEYCHAIN-PASSWORD }} run: | security create-keychain -p $KEYCHAIN_PASSWORD build.keychain security default-keychain -s build.keychain @@ -199,13 +215,13 @@ jobs: run: | mkdir ~/private_keys cat << EOF > ~/private_keys/AuthKey_6TV9MKN3GP.p8 - ${{ secrets.APP_STORE_CONNECT_AUTH_KEY }} + ${{ steps.get-kv-secrets.outputs.APP-STORE-CONNECT-AUTH-KEY }} EOF - name: Notarize app if: ${{ matrix.os.base == 'mac' && needs.setup.outputs.has_secrets == 'true' }} env: - APP_STORE_CONNECT_TEAM_ISSUER: ${{ secrets.APP_STORE_CONNECT_TEAM_ISSUER }} + APP_STORE_CONNECT_TEAM_ISSUER: ${{ steps.get-kv-secrets.outputs.APP-STORE-CONNECT-TEAM-ISSUER }} APP_STORE_CONNECT_AUTH_KEY: 6TV9MKN3GP APP_STORE_CONNECT_AUTH_KEY_PATH: ~/private_keys/AuthKey_6TV9MKN3GP.p8 run: | @@ -261,11 +277,14 @@ jobs: { build_prefix: "bit", artifact_prefix: "", readable: "commercial license" } ] runs-on: windows-2022 + permissions: + contents: read + id-token: write needs: setup env: _PACKAGE_VERSION: ${{ needs.setup.outputs.package_version }} _NODE_VERSION: ${{ needs.setup.outputs.node_version }} - _WIN_PKG_FETCH_VERSION: 20.11.1 + _WIN_PKG_FETCH_VERSION: 22.15.1 _WIN_PKG_VERSION: 3.5 steps: - name: Check out repo @@ -283,7 +302,7 @@ jobs: choco install nasm --no-progress - name: Set up Node - uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4.1.0 + uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0 with: cache: 'npm' cache-dependency-path: '**/package-lock.json' @@ -344,11 +363,13 @@ jobs: ResourceHacker -open version-info.rc -save version-info.res -action compile ResourceHacker -open %WIN_PKG_BUILT% -save %WIN_PKG_BUILT% -action addoverwrite -resource version-info.res - - name: Login to Azure + - name: Log in to Azure if: ${{ needs.setup.outputs.has_secrets == 'true' }} - uses: Azure/login@e15b166166a8746d1a47596803bd8c1b595455cf # v1.6.0 + uses: bitwarden/gh-actions/azure-login@main with: - creds: ${{ secrets.AZURE_KV_CI_SERVICE_PRINCIPAL }} + subscription_id: ${{ secrets.AZURE_SUBSCRIPTION_ID }} + tenant_id: ${{ secrets.AZURE_TENANT_ID }} + client_id: ${{ secrets.AZURE_CLIENT_ID }} - name: Retrieve secrets id: retrieve-secrets @@ -362,6 +383,10 @@ jobs: code-signing-client-secret, code-signing-cert-name" + - name: Log out from Azure + if: ${{ needs.setup.outputs.has_secrets == 'true' }} + uses: bitwarden/gh-actions/azure-logout@main + - name: Install run: npm ci working-directory: ./ @@ -474,7 +499,7 @@ jobs: echo "BW Package Version: $_PACKAGE_VERSION" - name: Get bw linux cli - uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8 + uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0 with: name: bw-linux-${{ env._PACKAGE_VERSION }}.zip path: apps/cli/dist/snap @@ -520,6 +545,9 @@ jobs: name: Check for failures if: always() runs-on: ubuntu-24.04 + permissions: + contents: read + id-token: write needs: - setup - cli @@ -534,11 +562,13 @@ jobs: && contains(needs.*.result, 'failure') run: exit 1 - - name: Login to Azure - Prod Subscription - uses: Azure/login@e15b166166a8746d1a47596803bd8c1b595455cf # v1.6.0 + - name: Log in to Azure if: failure() + uses: bitwarden/gh-actions/azure-login@main with: - creds: ${{ secrets.AZURE_KV_CI_SERVICE_PRINCIPAL }} + subscription_id: ${{ secrets.AZURE_SUBSCRIPTION_ID }} + tenant_id: ${{ secrets.AZURE_TENANT_ID }} + client_id: ${{ secrets.AZURE_CLIENT_ID }} - name: Retrieve secrets id: retrieve-secrets @@ -548,6 +578,10 @@ jobs: keyvault: "bitwarden-ci" secrets: "devops-alerts-slack-webhook-url" + - name: Log out from Azure + if: failure() + uses: bitwarden/gh-actions/azure-logout@main + - name: Notify Slack on failure uses: act10ns/slack@44541246747a30eb3102d87f7a4cc5471b0ffb7d # v2.1.0 if: failure() diff --git a/.github/workflows/build-desktop-target.yml b/.github/workflows/build-desktop-target.yml index fa21b3fe5d9..96a0e6880f8 100644 --- a/.github/workflows/build-desktop-target.yml +++ b/.github/workflows/build-desktop-target.yml @@ -28,6 +28,8 @@ jobs: check-run: name: Check PR run uses: bitwarden/gh-actions/.github/workflows/check-run.yml@main + permissions: + contents: read run-workflow: name: Build Desktop @@ -35,4 +37,8 @@ jobs: if: ${{ github.event.pull_request.head.repo.full_name != github.repository }} uses: ./.github/workflows/build-desktop.yml secrets: inherit + permissions: + contents: write + pull-requests: write + id-token: write diff --git a/.github/workflows/build-desktop.yml b/.github/workflows/build-desktop.yml index a022fe7fd0f..8ba5f981453 100644 --- a/.github/workflows/build-desktop.yml +++ b/.github/workflows/build-desktop.yml @@ -147,10 +147,8 @@ jobs: - name: Check secrets id: check-secrets - env: - AZURE_KV_CI_SERVICE_PRINCIPAL: ${{ secrets.AZURE_KV_CI_SERVICE_PRINCIPAL }} run: | - has_secrets=${{ secrets.AZURE_KV_CI_SERVICE_PRINCIPAL != '' }} + has_secrets=${{ secrets.AZURE_CLIENT_ID != '' }} echo "has_secrets=$has_secrets" >> $GITHUB_OUTPUT linux: @@ -176,7 +174,7 @@ jobs: ref: ${{ github.event.pull_request.head.sha }} - name: Set up Node - uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4.1.0 + uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0 with: cache: 'npm' cache-dependency-path: '**/package-lock.json' @@ -325,7 +323,7 @@ jobs: ref: ${{ github.event.pull_request.head.sha }} - name: Set up Node - uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4.1.0 + uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0 with: cache: 'npm' cache-dependency-path: '**/package-lock.json' @@ -389,6 +387,15 @@ jobs: rustup target add aarch64-unknown-linux-musl node build.js --target=aarch64-unknown-linux-musl --release + - name: Check index.d.ts generated + if: github.event_name == 'pull_request' && steps.cache.outputs.cache-hit != 'true' + working-directory: apps/desktop/desktop_native + run: | + if ! git diff --quiet --name-only -- napi/index.d.ts; then + echo "NAPI index.d.ts doesn't match, make sure to regenerate it and commit it" + exit 1 + fi + - name: Build application run: npm run dist:lin:arm64 @@ -404,6 +411,9 @@ jobs: runs-on: windows-2022 needs: - setup + permissions: + contents: read + id-token: write defaults: run: shell: pwsh @@ -419,7 +429,7 @@ jobs: ref: ${{ github.event.pull_request.head.sha }} - name: Set up Node - uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4.1.0 + uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0 with: cache: 'npm' cache-dependency-path: '**/package-lock.json' @@ -438,11 +448,13 @@ jobs: choco --version rustup show - - name: Login to Azure + - name: Log in to Azure if: ${{ needs.setup.outputs.has_secrets == 'true' }} - uses: Azure/login@e15b166166a8746d1a47596803bd8c1b595455cf # v1.6.0 + uses: bitwarden/gh-actions/azure-login@main with: - creds: ${{ secrets.AZURE_KV_CI_SERVICE_PRINCIPAL }} + subscription_id: ${{ secrets.AZURE_SUBSCRIPTION_ID }} + tenant_id: ${{ secrets.AZURE_TENANT_ID }} + client_id: ${{ secrets.AZURE_CLIENT_ID }} - name: Retrieve secrets id: retrieve-secrets @@ -456,6 +468,10 @@ jobs: code-signing-client-secret, code-signing-cert-name" + - name: Log out from Azure + if: ${{ needs.setup.outputs.has_secrets == 'true' }} + uses: bitwarden/gh-actions/azure-logout@main + - name: Install Node dependencies run: npm ci working-directory: ./ @@ -649,12 +665,248 @@ jobs: path: apps/desktop/dist/nsis-web/${{ needs.setup.outputs.release_channel }}.yml if-no-files-found: error + windows-beta: + name: Windows Beta Build + runs-on: windows-2022 + needs: setup + permissions: + contents: read + id-token: write + defaults: + run: + shell: pwsh + working-directory: apps/desktop + env: + _PACKAGE_VERSION: ${{ needs.setup.outputs.package_version }} + _NODE_VERSION: ${{ needs.setup.outputs.node_version }} + NODE_OPTIONS: --max_old_space_size=4096 + steps: + - name: Check out repo + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + ref: ${{ github.event.pull_request.head.sha }} + + - name: Set up Node + uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0 + with: + cache: 'npm' + cache-dependency-path: '**/package-lock.json' + node-version: ${{ env._NODE_VERSION }} + + - name: Install AST + run: dotnet tool install --global AzureSignTool --version 4.0.1 + + - name: Print environment + run: | + node --version + npm --version + choco --version + rustup show + + - name: Log in to Azure + if: ${{ needs.setup.outputs.has_secrets == 'true' }} + uses: bitwarden/gh-actions/azure-login@main + with: + subscription_id: ${{ secrets.AZURE_SUBSCRIPTION_ID }} + tenant_id: ${{ secrets.AZURE_TENANT_ID }} + client_id: ${{ secrets.AZURE_CLIENT_ID }} + + - name: Retrieve secrets + id: retrieve-secrets + if: ${{ needs.setup.outputs.has_secrets == 'true' }} + uses: bitwarden/gh-actions/get-keyvault-secrets@main + with: + keyvault: "bitwarden-ci" + secrets: "code-signing-vault-url, + code-signing-client-id, + code-signing-tenant-id, + code-signing-client-secret, + code-signing-cert-name" + + - name: Log out from Azure + if: ${{ needs.setup.outputs.has_secrets == 'true' }} + uses: bitwarden/gh-actions/azure-logout@main + + - name: Install Node dependencies + run: npm ci + working-directory: ./ + + - name: Download SDK Artifacts + if: ${{ inputs.sdk_branch != '' && needs.setup.outputs.has_secrets == 'true' }} + uses: bitwarden/gh-actions/download-artifacts@main + with: + github_token: ${{ secrets.GITHUB_TOKEN }} + workflow: build-wasm-internal.yml + workflow_conclusion: success + branch: ${{ inputs.sdk_branch }} + artifacts: sdk-internal + repo: bitwarden/sdk-internal + path: ../sdk-internal + if_no_artifact_found: fail + + - name: Override SDK + if: ${{ inputs.sdk_branch != '' && needs.setup.outputs.has_secrets == 'true' }} + working-directory: ./ + run: | + ls -l ../ + npm link ../sdk-internal + + - name: Cache Native Module + uses: actions/cache@1bd1e32a3bdc45362d1e726936510720a7c30a57 # v4.2.0 + id: cache + with: + path: | + apps/desktop/desktop_native/napi/*.node + apps/desktop/desktop_native/dist/* + key: rust-${{ runner.os }}-${{ hashFiles('apps/desktop/desktop_native/**/*') }} + + - name: Build Native Module + if: steps.cache.outputs.cache-hit != 'true' + working-directory: apps/desktop/desktop_native + run: node build.js cross-platform + + - name: Build + run: npm run build + + - name: Pack + if: ${{ needs.setup.outputs.has_secrets == 'false' }} + run: npm run pack:win:beta + + - name: Pack & Sign + if: ${{ needs.setup.outputs.has_secrets == 'true' }} + env: + ELECTRON_BUILDER_SIGN: 1 + SIGNING_VAULT_URL: ${{ steps.retrieve-secrets.outputs.code-signing-vault-url }} + SIGNING_CLIENT_ID: ${{ steps.retrieve-secrets.outputs.code-signing-client-id }} + SIGNING_TENANT_ID: ${{ steps.retrieve-secrets.outputs.code-signing-tenant-id }} + SIGNING_CLIENT_SECRET: ${{ steps.retrieve-secrets.outputs.code-signing-client-secret }} + SIGNING_CERT_NAME: ${{ steps.retrieve-secrets.outputs.code-signing-cert-name }} + run: npm run pack:win:beta + + - name: Rename appx files for store + if: ${{ needs.setup.outputs.has_secrets == 'true' }} + run: | + Copy-Item "./dist/Bitwarden-Beta-${{ env._PACKAGE_VERSION }}-ia32.appx" ` + -Destination "./dist/Bitwarden-Beta-${{ env._PACKAGE_VERSION }}-ia32-store.appx" + Copy-Item "./dist/Bitwarden-Beta-${{ env._PACKAGE_VERSION }}-x64.appx" ` + -Destination "./dist/Bitwarden-Beta-${{ env._PACKAGE_VERSION }}-x64-store.appx" + Copy-Item "./dist/Bitwarden-Beta-${{ env._PACKAGE_VERSION }}-arm64.appx" ` + -Destination "./dist/Bitwarden-Beta-${{ env._PACKAGE_VERSION }}-arm64-store.appx" + + - name: Fix NSIS artifact names for auto-updater + if: ${{ needs.setup.outputs.has_secrets == 'true' }} + run: | + Rename-Item -Path .\dist\nsis-web\Bitwarden-Beta-${{ env._PACKAGE_VERSION }}-ia32.nsis.7z ` + -NewName bitwarden-beta-${{ env._PACKAGE_VERSION }}-ia32.nsis.7z + Rename-Item -Path .\dist\nsis-web\Bitwarden-Beta-${{ env._PACKAGE_VERSION }}-x64.nsis.7z ` + -NewName bitwarden-beta-${{ env._PACKAGE_VERSION }}-x64.nsis.7z + Rename-Item -Path .\dist\nsis-web\Bitwarden-Beta-${{ env._PACKAGE_VERSION }}-arm64.nsis.7z ` + -NewName bitwarden-beta-${{ env._PACKAGE_VERSION }}-arm64.nsis.7z + + - name: Upload portable exe artifact + uses: actions/upload-artifact@65c4c4a1ddee5b72f698fdd19549f0f0fb45cf08 # v4.6.0 + with: + name: Bitwarden-Beta-Portable-${{ env._PACKAGE_VERSION }}.exe + path: apps/desktop/dist/Bitwarden-Beta-Portable-${{ env._PACKAGE_VERSION }}.exe + if-no-files-found: error + + - name: Upload installer exe artifact + if: ${{ needs.setup.outputs.has_secrets == 'true' }} + uses: actions/upload-artifact@65c4c4a1ddee5b72f698fdd19549f0f0fb45cf08 # v4.6.0 + with: + name: Bitwarden-Beta-Installer-${{ env._PACKAGE_VERSION }}.exe + path: apps/desktop/dist/nsis-web/Bitwarden-Beta-Installer-${{ env._PACKAGE_VERSION }}.exe + if-no-files-found: error + + - name: Upload appx ia32 artifact + if: ${{ needs.setup.outputs.has_secrets == 'true' }} + uses: actions/upload-artifact@65c4c4a1ddee5b72f698fdd19549f0f0fb45cf08 # v4.6.0 + with: + name: Bitwarden-Beta-${{ env._PACKAGE_VERSION }}-ia32.appx + path: apps/desktop/dist/Bitwarden-Beta-${{ env._PACKAGE_VERSION }}-ia32.appx + if-no-files-found: error + + - name: Upload store appx ia32 artifact + if: ${{ needs.setup.outputs.has_secrets == 'true' }} + uses: actions/upload-artifact@65c4c4a1ddee5b72f698fdd19549f0f0fb45cf08 # v4.6.0 + with: + name: Bitwarden-Beta-${{ env._PACKAGE_VERSION }}-ia32-store.appx + path: apps/desktop/dist/Bitwarden-Beta-${{ env._PACKAGE_VERSION }}-ia32-store.appx + if-no-files-found: error + + - name: Upload NSIS ia32 artifact + if: ${{ needs.setup.outputs.has_secrets == 'true' }} + uses: actions/upload-artifact@65c4c4a1ddee5b72f698fdd19549f0f0fb45cf08 # v4.6.0 + with: + name: bitwarden-beta-${{ env._PACKAGE_VERSION }}-ia32.nsis.7z + path: apps/desktop/dist/nsis-web/bitwarden-beta-${{ env._PACKAGE_VERSION }}-ia32.nsis.7z + if-no-files-found: error + + - name: Upload appx x64 artifact + if: ${{ needs.setup.outputs.has_secrets == 'true' }} + uses: actions/upload-artifact@65c4c4a1ddee5b72f698fdd19549f0f0fb45cf08 # v4.6.0 + with: + name: Bitwarden-Beta-${{ env._PACKAGE_VERSION }}-x64.appx + path: apps/desktop/dist/Bitwarden-Beta-${{ env._PACKAGE_VERSION }}-x64.appx + if-no-files-found: error + + - name: Upload store appx x64 artifact + if: ${{ needs.setup.outputs.has_secrets == 'true' }} + uses: actions/upload-artifact@65c4c4a1ddee5b72f698fdd19549f0f0fb45cf08 # v4.6.0 + with: + name: Bitwarden-Beta-${{ env._PACKAGE_VERSION }}-x64-store.appx + path: apps/desktop/dist/Bitwarden-Beta-${{ env._PACKAGE_VERSION }}-x64-store.appx + if-no-files-found: error + + - name: Upload NSIS x64 artifact + if: ${{ needs.setup.outputs.has_secrets == 'true' }} + uses: actions/upload-artifact@65c4c4a1ddee5b72f698fdd19549f0f0fb45cf08 # v4.6.0 + with: + name: bitwarden-beta-${{ env._PACKAGE_VERSION }}-x64.nsis.7z + path: apps/desktop/dist/nsis-web/bitwarden-beta-${{ env._PACKAGE_VERSION }}-x64.nsis.7z + if-no-files-found: error + + - name: Upload appx ARM64 artifact + if: ${{ needs.setup.outputs.has_secrets == 'true' }} + uses: actions/upload-artifact@65c4c4a1ddee5b72f698fdd19549f0f0fb45cf08 # v4.6.0 + with: + name: Bitwarden-Beta-${{ env._PACKAGE_VERSION }}-arm64.appx + path: apps/desktop/dist/Bitwarden-Beta-${{ env._PACKAGE_VERSION }}-arm64.appx + if-no-files-found: error + + - name: Upload store appx ARM64 artifact + if: ${{ needs.setup.outputs.has_secrets == 'true' }} + uses: actions/upload-artifact@65c4c4a1ddee5b72f698fdd19549f0f0fb45cf08 # v4.6.0 + with: + name: Bitwarden-Beta-${{ env._PACKAGE_VERSION }}-arm64-store.appx + path: apps/desktop/dist/Bitwarden-Beta-${{ env._PACKAGE_VERSION }}-arm64-store.appx + if-no-files-found: error + + - name: Upload NSIS ARM64 artifact + if: ${{ needs.setup.outputs.has_secrets == 'true' }} + uses: actions/upload-artifact@65c4c4a1ddee5b72f698fdd19549f0f0fb45cf08 # v4.6.0 + with: + name: bitwarden-beta-${{ env._PACKAGE_VERSION }}-arm64.nsis.7z + path: apps/desktop/dist/nsis-web/bitwarden-beta-${{ env._PACKAGE_VERSION }}-arm64.nsis.7z + if-no-files-found: error + + - name: Upload auto-update artifact + if: ${{ needs.setup.outputs.has_secrets == 'true' }} + uses: actions/upload-artifact@65c4c4a1ddee5b72f698fdd19549f0f0fb45cf08 # v4.6.0 + with: + name: ${{ needs.setup.outputs.release_channel }}-beta.yml + path: apps/desktop/dist/nsis-web/${{ needs.setup.outputs.release_channel }}.yml + if-no-files-found: error + macos-build: name: MacOS Build runs-on: macos-13 needs: - setup + permissions: + contents: read + id-token: write env: _PACKAGE_VERSION: ${{ needs.setup.outputs.package_version }} _NODE_VERSION: ${{ needs.setup.outputs.node_version }} @@ -669,7 +921,7 @@ jobs: ref: ${{ github.event.pull_request.head.sha }} - name: Set up Node - uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4.1.0 + uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0 with: cache: 'npm' cache-dependency-path: '**/package-lock.json' @@ -700,11 +952,21 @@ jobs: path: apps/browser/dist/Safari key: ${{ runner.os }}-${{ github.run_id }}-safari-extension - - name: Login to Azure + - name: Log in to Azure if: ${{ needs.setup.outputs.has_secrets == 'true' }} - uses: Azure/login@e15b166166a8746d1a47596803bd8c1b595455cf # v1.6.0 + uses: bitwarden/gh-actions/azure-login@main with: - creds: ${{ secrets.AZURE_KV_CI_SERVICE_PRINCIPAL }} + subscription_id: ${{ secrets.AZURE_SUBSCRIPTION_ID }} + tenant_id: ${{ secrets.AZURE_TENANT_ID }} + client_id: ${{ secrets.AZURE_CLIENT_ID }} + + - name: Get Azure Key Vault secrets + id: get-kv-secrets + if: ${{ needs.setup.outputs.has_secrets == 'true' }} + uses: bitwarden/gh-actions/get-keyvault-secrets@main + with: + keyvault: gh-clients + secrets: "KEYCHAIN-PASSWORD" - name: Download Provisioning Profiles secrets if: ${{ needs.setup.outputs.has_secrets == 'true' }} @@ -747,10 +1009,14 @@ jobs: az keyvault secret show --id https://bitwarden-ci.vault.azure.net/certificates/macdev-cert | jq -r .value | base64 -d > $HOME/certificates/macdev-cert.p12 + - name: Log out from Azure + if: ${{ needs.setup.outputs.has_secrets == 'true' }} + uses: bitwarden/gh-actions/azure-logout@main + - name: Set up keychain if: ${{ needs.setup.outputs.has_secrets == 'true' }} env: - KEYCHAIN_PASSWORD: ${{ secrets.KEYCHAIN_PASSWORD }} + KEYCHAIN_PASSWORD: ${{ steps.get-kv-secrets.outputs.KEYCHAIN-PASSWORD }} run: | security create-keychain -p $KEYCHAIN_PASSWORD build.keychain security default-keychain -s build.keychain @@ -850,6 +1116,10 @@ jobs: if: ${{ needs.setup.outputs.has_secrets == 'true' }} uses: ./.github/workflows/build-browser.yml secrets: inherit + permissions: + contents: write + pull-requests: write + id-token: write macos-package-github: @@ -860,6 +1130,9 @@ jobs: - browser-build - macos-build - setup + permissions: + contents: read + id-token: write env: _PACKAGE_VERSION: ${{ needs.setup.outputs.package_version }} _NODE_VERSION: ${{ needs.setup.outputs.node_version }} @@ -874,7 +1147,7 @@ jobs: ref: ${{ github.event.pull_request.head.sha }} - name: Set up Node - uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4.1.0 + uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0 with: cache: 'npm' cache-dependency-path: '**/package-lock.json' @@ -905,10 +1178,19 @@ jobs: path: apps/browser/dist/Safari key: ${{ runner.os }}-${{ github.run_id }}-safari-extension - - name: Login to Azure - uses: Azure/login@e15b166166a8746d1a47596803bd8c1b595455cf # v1.6.0 + - name: Log in to Azure + uses: bitwarden/gh-actions/azure-login@main with: - creds: ${{ secrets.AZURE_KV_CI_SERVICE_PRINCIPAL }} + subscription_id: ${{ secrets.AZURE_SUBSCRIPTION_ID }} + tenant_id: ${{ secrets.AZURE_TENANT_ID }} + client_id: ${{ secrets.AZURE_CLIENT_ID }} + + - name: Get Azure Key Vault secrets + id: get-kv-secrets + uses: bitwarden/gh-actions/get-keyvault-secrets@main + with: + keyvault: gh-clients + secrets: "KEYCHAIN-PASSWORD,APP-STORE-CONNECT-AUTH-KEY,APP-STORE-CONNECT-TEAM-ISSUER" - name: Download Provisioning Profiles secrets env: @@ -949,9 +1231,12 @@ jobs: az keyvault secret show --id https://bitwarden-ci.vault.azure.net/certificates/macdev-cert | jq -r .value | base64 -d > $HOME/certificates/macdev-cert.p12 + - name: Log out from Azure + uses: bitwarden/gh-actions/azure-logout@main + - name: Set up keychain env: - KEYCHAIN_PASSWORD: ${{ secrets.KEYCHAIN_PASSWORD }} + KEYCHAIN_PASSWORD: ${{ steps.get-kv-secrets.outputs.KEYCHAIN-PASSWORD }} run: | security create-keychain -p $KEYCHAIN_PASSWORD build.keychain security default-keychain -s build.keychain @@ -1036,7 +1321,7 @@ jobs: run: npm run build - name: Download Browser artifact - uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8 + uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0 with: path: ${{ github.workspace }}/browser-build-artifacts @@ -1055,12 +1340,12 @@ jobs: run: | mkdir ~/private_keys cat << EOF > ~/private_keys/AuthKey_6TV9MKN3GP.p8 - ${{ secrets.APP_STORE_CONNECT_AUTH_KEY }} + ${{ steps.get-kv-secrets.outputs.APP-STORE-CONNECT-AUTH-KEY }} EOF - name: Build application (dist) env: - APP_STORE_CONNECT_TEAM_ISSUER: ${{ secrets.APP_STORE_CONNECT_TEAM_ISSUER }} + APP_STORE_CONNECT_TEAM_ISSUER: ${{ steps.get-kv-secrets.outputs.APP-STORE-CONNECT-TEAM-ISSUER }} APP_STORE_CONNECT_AUTH_KEY: 6TV9MKN3GP APP_STORE_CONNECT_AUTH_KEY_PATH: ~/private_keys/AuthKey_6TV9MKN3GP.p8 CSC_FOR_PULL_REQUEST: true @@ -1103,6 +1388,9 @@ jobs: - browser-build - macos-build - setup + permissions: + contents: read + id-token: write env: _PACKAGE_VERSION: ${{ needs.setup.outputs.package_version }} _NODE_VERSION: ${{ needs.setup.outputs.node_version }} @@ -1117,7 +1405,7 @@ jobs: ref: ${{ github.event.pull_request.head.sha }} - name: Set up Node - uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4.1.0 + uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0 with: cache: 'npm' cache-dependency-path: '**/package-lock.json' @@ -1148,10 +1436,19 @@ jobs: path: apps/browser/dist/Safari key: ${{ runner.os }}-${{ github.run_id }}-safari-extension - - name: Login to Azure - uses: Azure/login@e15b166166a8746d1a47596803bd8c1b595455cf # v1.6.0 + - name: Log in to Azure + uses: bitwarden/gh-actions/azure-login@main with: - creds: ${{ secrets.AZURE_KV_CI_SERVICE_PRINCIPAL }} + subscription_id: ${{ secrets.AZURE_SUBSCRIPTION_ID }} + tenant_id: ${{ secrets.AZURE_TENANT_ID }} + client_id: ${{ secrets.AZURE_CLIENT_ID }} + + - name: Get Azure Key Vault secrets + id: get-kv-secrets + uses: bitwarden/gh-actions/get-keyvault-secrets@main + with: + keyvault: gh-clients + secrets: "KEYCHAIN-PASSWORD,APP-STORE-CONNECT-AUTH-KEY,APP-STORE-CONNECT-TEAM-ISSUER" - name: Retrieve Slack secret id: retrieve-slack-secret @@ -1199,9 +1496,12 @@ jobs: az keyvault secret show --id https://bitwarden-ci.vault.azure.net/certificates/macdev-cert | jq -r .value | base64 -d > $HOME/certificates/macdev-cert.p12 + - name: Log out from Azure + uses: bitwarden/gh-actions/azure-logout@main + - name: Set up keychain env: - KEYCHAIN_PASSWORD: ${{ secrets.KEYCHAIN_PASSWORD }} + KEYCHAIN_PASSWORD: ${{ steps.get-kv-secrets.outputs.KEYCHAIN-PASSWORD }} run: | security create-keychain -p $KEYCHAIN_PASSWORD build.keychain security default-keychain -s build.keychain @@ -1241,6 +1541,7 @@ jobs: $package = Get-Content -Raw -Path electron-builder.json | ConvertFrom-Json $package | Add-Member -MemberType NoteProperty -Name buildVersion -Value "$env:BUILD_NUMBER" $package | ConvertTo-Json -Depth 32 | Set-Content -Path electron-builder.json + Write-Output "### MacOS App Store build number: $env:BUILD_NUMBER" - name: Install Node dependencies @@ -1286,7 +1587,7 @@ jobs: run: npm run build - name: Download Browser artifact - uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8 + uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0 with: path: ${{ github.workspace }}/browser-build-artifacts @@ -1305,17 +1606,34 @@ jobs: run: | mkdir ~/private_keys cat << EOF > ~/private_keys/AuthKey_6TV9MKN3GP.p8 - ${{ secrets.APP_STORE_CONNECT_AUTH_KEY }} + ${{ steps.get-kv-secrets.outputs.APP-STORE-CONNECT-AUTH-KEY }} EOF - name: Build application for App Store env: - APP_STORE_CONNECT_TEAM_ISSUER: ${{ secrets.APP_STORE_CONNECT_TEAM_ISSUER }} + APP_STORE_CONNECT_TEAM_ISSUER: ${{ steps.get-kv-secrets.outputs.APP-STORE-CONNECT-TEAM-ISSUER }} APP_STORE_CONNECT_AUTH_KEY: 6TV9MKN3GP APP_STORE_CONNECT_AUTH_KEY_PATH: ~/private_keys/AuthKey_6TV9MKN3GP.p8 CSC_FOR_PULL_REQUEST: true run: npm run pack:mac:mas + - name: Create MacOS App Store build number artifact + shell: pwsh + env: + BUILD_NUMBER: ${{ needs.setup.outputs.build_number }} + run: | + $buildInfo = @{ + buildNumber = $env:BUILD_NUMBER + } + $buildInfo | ConvertTo-Json | Set-Content -Path dist/macos-build-number.json + + - name: Upload MacOS App Store build number artifact + uses: actions/upload-artifact@65c4c4a1ddee5b72f698fdd19549f0f0fb45cf08 # v4.6.0 + with: + name: macos-build-number.json + path: apps/desktop/dist/macos-build-number.json + if-no-files-found: error + - name: Upload .pkg artifact uses: actions/upload-artifact@65c4c4a1ddee5b72f698fdd19549f0f0fb45cf08 # v4.6.0 with: @@ -1334,7 +1652,7 @@ jobs: cat << EOF > ~/secrets/appstoreconnect-fastlane.json { - "issuer_id": "${{ secrets.APP_STORE_CONNECT_TEAM_ISSUER }}", + "issuer_id": "${{ steps.get-kv-secrets.outputs.APP-STORE-CONNECT-TEAM-ISSUER }}", "key_id": "6TV9MKN3GP", "key": "$KEY_WITHOUT_NEWLINES" } @@ -1346,7 +1664,7 @@ jobs: github.event_name != 'pull_request_target' && (inputs.testflight_distribute || github.ref == 'refs/heads/main' || github.ref == 'refs/heads/rc' || github.ref == 'refs/heads/hotfix-rc-desktop') env: - APP_STORE_CONNECT_TEAM_ISSUER: ${{ secrets.APP_STORE_CONNECT_TEAM_ISSUER }} + APP_STORE_CONNECT_TEAM_ISSUER: ${{ steps.get-kv-secrets.outputs.APP-STORE-CONNECT-TEAM-ISSUER }} APP_STORE_CONNECT_AUTH_KEY: 6TV9MKN3GP BRANCH: ${{ github.ref }} run: | @@ -1396,6 +1714,10 @@ jobs: - windows - macos-package-github - macos-package-mas + permissions: + contents: write + pull-requests: write + id-token: write runs-on: ubuntu-22.04 steps: - name: Check out repo @@ -1403,10 +1725,12 @@ jobs: with: ref: ${{ github.event.pull_request.head.sha }} - - name: Login to Azure - uses: Azure/login@e15b166166a8746d1a47596803bd8c1b595455cf # v1.6.0 + - name: Log in to Azure + uses: bitwarden/gh-actions/azure-login@main with: - creds: ${{ secrets.AZURE_KV_CI_SERVICE_PRINCIPAL }} + subscription_id: ${{ secrets.AZURE_SUBSCRIPTION_ID }} + tenant_id: ${{ secrets.AZURE_TENANT_ID }} + client_id: ${{ secrets.AZURE_CLIENT_ID }} - name: Retrieve secrets id: retrieve-secrets @@ -1415,6 +1739,9 @@ jobs: keyvault: "bitwarden-ci" secrets: "crowdin-api-token" + - name: Log out from Azure + uses: bitwarden/gh-actions/azure-logout@main + - name: Upload Sources uses: crowdin/github-action@f214c8723025f41fc55b2ad26e67b60b80b1885d # v2.7.1 env: @@ -1442,6 +1769,9 @@ jobs: - macos-package-github - macos-package-mas - crowdin-push + permissions: + contents: read + id-token: write steps: - name: Check if any job failed if: | @@ -1450,11 +1780,13 @@ jobs: && contains(needs.*.result, 'failure') run: exit 1 - - name: Login to Azure - Prod Subscription - uses: Azure/login@e15b166166a8746d1a47596803bd8c1b595455cf # v1.6.0 + - name: Log in to Azure if: failure() + uses: bitwarden/gh-actions/azure-login@main with: - creds: ${{ secrets.AZURE_KV_CI_SERVICE_PRINCIPAL }} + subscription_id: ${{ secrets.AZURE_SUBSCRIPTION_ID }} + tenant_id: ${{ secrets.AZURE_TENANT_ID }} + client_id: ${{ secrets.AZURE_CLIENT_ID }} - name: Retrieve secrets id: retrieve-secrets @@ -1464,6 +1796,9 @@ jobs: keyvault: "bitwarden-ci" secrets: "devops-alerts-slack-webhook-url" + - name: Log out from Azure + uses: bitwarden/gh-actions/azure-logout@main + - name: Notify Slack on failure uses: act10ns/slack@44541246747a30eb3102d87f7a4cc5471b0ffb7d # v2.1.0 if: failure() @@ -1471,3 +1806,4 @@ jobs: SLACK_WEBHOOK_URL: ${{ steps.retrieve-secrets.outputs.devops-alerts-slack-webhook-url }} with: status: ${{ job.status }} + diff --git a/.github/workflows/build-web-target.yml b/.github/workflows/build-web-target.yml index ca10e6d46f2..2f9e201ac60 100644 --- a/.github/workflows/build-web-target.yml +++ b/.github/workflows/build-web-target.yml @@ -27,6 +27,8 @@ jobs: check-run: name: Check PR run uses: bitwarden/gh-actions/.github/workflows/check-run.yml@main + permissions: + contents: read run-workflow: name: Build Web @@ -34,4 +36,9 @@ jobs: if: ${{ github.event.pull_request.head.repo.full_name != github.repository }} uses: ./.github/workflows/build-web.yml secrets: inherit + permissions: + contents: write + pull-requests: write + id-token: write + security-events: write diff --git a/.github/workflows/build-web.yml b/.github/workflows/build-web.yml index 745376b46d8..d623f08ebac 100644 --- a/.github/workflows/build-web.yml +++ b/.github/workflows/build-web.yml @@ -51,7 +51,8 @@ env: _AZ_REGISTRY: bitwardenprod.azurecr.io _GITHUB_PR_REPO_NAME: ${{ github.event.pull_request.head.repo.full_name }} -permissions: {} +permissions: + contents: read jobs: setup: @@ -80,10 +81,8 @@ jobs: - name: Check secrets id: check-secrets - env: - AZURE_KV_CI_SERVICE_PRINCIPAL: ${{ secrets.AZURE_KV_CI_SERVICE_PRINCIPAL }} run: | - has_secrets=${{ secrets.AZURE_KV_CI_SERVICE_PRINCIPAL != '' }} + has_secrets=${{ secrets.AZURE_CLIENT_ID != '' }} echo "has_secrets=$has_secrets" >> $GITHUB_OUTPUT @@ -107,6 +106,10 @@ jobs: - artifact_name: selfhosted-COMMERCIAL image_name: web npm_command: dist:bit:selfhost + - artifact_name: selfhosted-DEV + image_name: web + npm_command: build:bit:selfhost:dev + git_metadata: true - artifact_name: cloud-QA image_name: web-qa-cloud npm_command: build:bit:qa @@ -204,11 +207,13 @@ jobs: uses: docker/setup-buildx-action@f95db51fddba0c2d1ec667646a06c2ce06100226 # v3.0.0 ########## ACRs ########## - - name: Login to Prod Azure + - name: Log in to Azure if: ${{ needs.setup.outputs.has_secrets == 'true' }} - uses: Azure/login@e15b166166a8746d1a47596803bd8c1b595455cf # v1.6.0 + uses: bitwarden/gh-actions/azure-login@main with: - creds: ${{ secrets.AZURE_PROD_KV_CREDENTIALS }} + subscription_id: ${{ secrets.AZURE_SUBSCRIPTION_ID }} + tenant_id: ${{ secrets.AZURE_TENANT_ID }} + client_id: ${{ secrets.AZURE_CLIENT_ID }} - name: Log into Prod container registry if: ${{ needs.setup.outputs.has_secrets == 'true' }} @@ -279,7 +284,7 @@ jobs: IMAGE_NAME: ${{ steps.image-name.outputs.name }} run: | mkdir build - docker run --rm --volume $(pwd)/build:/temp --entrypoint bash \ + docker run --rm --volume $(pwd)/build:/temp --entrypoint sh \ $IMAGE_NAME -c "cp -r ./ /temp" zip -r web-${{ env._VERSION }}-${{ matrix.artifact_name }}.zip build @@ -328,11 +333,19 @@ jobs: - name: Log out of Docker run: docker logout $_AZ_REGISTRY + - name: Log out from Azure + if: ${{ needs.setup.outputs.has_secrets == 'true' }} + uses: bitwarden/gh-actions/azure-logout@main + crowdin-push: name: Crowdin Push if: github.event_name != 'pull_request_target' && github.ref == 'refs/heads/main' needs: build-containers + permissions: + contents: write + pull-requests: write + id-token: write runs-on: ubuntu-24.04 steps: - name: Check out repo @@ -340,10 +353,12 @@ jobs: with: ref: ${{ github.event.pull_request.head.sha }} - - name: Login to Azure - uses: Azure/login@e15b166166a8746d1a47596803bd8c1b595455cf # v1.6.0 + - name: Log in to Azure + uses: bitwarden/gh-actions/azure-login@main with: - creds: ${{ secrets.AZURE_KV_CI_SERVICE_PRINCIPAL }} + subscription_id: ${{ secrets.AZURE_SUBSCRIPTION_ID }} + tenant_id: ${{ secrets.AZURE_TENANT_ID }} + client_id: ${{ secrets.AZURE_CLIENT_ID }} - name: Retrieve secrets id: retrieve-secrets @@ -352,6 +367,9 @@ jobs: keyvault: "bitwarden-ci" secrets: "crowdin-api-token" + - name: Log out from Azure + uses: bitwarden/gh-actions/azure-logout@main + - name: Upload Sources uses: crowdin/github-action@f214c8723025f41fc55b2ad26e67b60b80b1885d # v2.7.1 env: @@ -370,11 +388,15 @@ jobs: if: github.event_name != 'pull_request_target' && github.ref == 'refs/heads/main' runs-on: ubuntu-24.04 needs: build-containers + permissions: + id-token: write steps: - - name: Login to Azure - CI Subscription - uses: Azure/login@e15b166166a8746d1a47596803bd8c1b595455cf # v1.6.0 + - name: Log in to Azure + uses: bitwarden/gh-actions/azure-login@main with: - creds: ${{ secrets.AZURE_KV_CI_SERVICE_PRINCIPAL }} + subscription_id: ${{ secrets.AZURE_SUBSCRIPTION_ID }} + tenant_id: ${{ secrets.AZURE_TENANT_ID }} + client_id: ${{ secrets.AZURE_CLIENT_ID }} - name: Retrieve github PAT secrets id: retrieve-secret-pat @@ -383,8 +405,11 @@ jobs: keyvault: "bitwarden-ci" secrets: "github-pat-bitwarden-devops-bot-repo-scope" + - name: Log out from Azure + uses: bitwarden/gh-actions/azure-logout@main + - name: Trigger web vault deploy using GitHub Run ID - uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1 + uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0 with: github-token: ${{ steps.retrieve-secret-pat.outputs.github-pat-bitwarden-devops-bot-repo-scope }} script: | @@ -409,6 +434,8 @@ jobs: - build-containers - crowdin-push - trigger-web-vault-deploy + permissions: + id-token: write steps: - name: Check if any job failed if: | @@ -417,11 +444,13 @@ jobs: && contains(needs.*.result, 'failure') run: exit 1 - - name: Login to Azure - Prod Subscription - uses: Azure/login@e15b166166a8746d1a47596803bd8c1b595455cf # v1.6.0 + - name: Log in to Azure + uses: bitwarden/gh-actions/azure-login@main if: failure() with: - creds: ${{ secrets.AZURE_KV_CI_SERVICE_PRINCIPAL }} + subscription_id: ${{ secrets.AZURE_SUBSCRIPTION_ID }} + tenant_id: ${{ secrets.AZURE_TENANT_ID }} + client_id: ${{ secrets.AZURE_CLIENT_ID }} - name: Retrieve secrets id: retrieve-secrets @@ -431,6 +460,9 @@ jobs: keyvault: "bitwarden-ci" secrets: "devops-alerts-slack-webhook-url" + - name: Log out from Azure + uses: bitwarden/gh-actions/azure-logout@main + - name: Notify Slack on failure uses: act10ns/slack@44541246747a30eb3102d87f7a4cc5471b0ffb7d # v2.1.0 if: failure() diff --git a/.github/workflows/chromatic.yml b/.github/workflows/chromatic.yml index 78733bc5a8b..2b7b6394f24 100644 --- a/.github/workflows/chromatic.yml +++ b/.github/workflows/chromatic.yml @@ -11,10 +11,14 @@ on: branches: - "main" +permissions: {} + jobs: check-run: name: Check PR run uses: bitwarden/gh-actions/.github/workflows/check-run.yml@main + permissions: + contents: read chromatic: name: Chromatic @@ -23,6 +27,7 @@ jobs: permissions: contents: read pull-requests: write + id-token: write steps: - name: Check out repo @@ -30,13 +35,13 @@ jobs: with: ref: ${{ github.event.pull_request.head.sha }} fetch-depth: 0 - + - name: Get changed files id: get-changed-files-for-chromatic uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3.0.2 with: filters: | - storyFiles: + storyFiles: - "apps/!(cli)/**" - "bitwarden_license/bit-web/src/app/**" - "libs/!(eslint)/**" @@ -52,7 +57,7 @@ jobs: echo "node_version=$NODE_VERSION" >> $GITHUB_OUTPUT - name: Set up Node - uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4.1.0 + uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0 with: node-version: ${{ steps.retrieve-node-version.outputs.node_version }} if: steps.get-changed-files-for-chromatic.outputs.storyFiles == 'true' @@ -74,14 +79,34 @@ jobs: if: steps.get-changed-files-for-chromatic.outputs.storyFiles == 'true' run: npm run build-storybook:ci + - name: Log in to Azure + uses: bitwarden/gh-actions/azure-login@main + with: + subscription_id: ${{ secrets.AZURE_SUBSCRIPTION_ID }} + tenant_id: ${{ secrets.AZURE_TENANT_ID }} + client_id: ${{ secrets.AZURE_CLIENT_ID }} + + - name: Get Azure Key Vault secrets + id: get-kv-secrets + uses: bitwarden/gh-actions/get-keyvault-secrets@main + with: + keyvault: gh-clients + secrets: "CHROMATIC-PROJECT-TOKEN" + + - name: Log out from Azure + uses: bitwarden/gh-actions/azure-logout@main + - name: Publish to Chromatic - uses: chromaui/action@e8cc4c31775280b175a3c440076c00d19a9014d7 # v11.28.2 + uses: chromaui/action@d0795df816d05c4a89c80295303970fddd247cce # v13.1.4 with: token: ${{ secrets.GITHUB_TOKEN }} - projectToken: ${{ secrets.CHROMATIC_PROJECT_TOKEN }} + projectToken: ${{ steps.get-kv-secrets.outputs.CHROMATIC-PROJECT-TOKEN }} storybookBuildDir: ./storybook-static exitOnceUploaded: true onlyChanged: true - externals: "[\"libs/components/**/*.scss\", \"libs/components/**/*.css\", \"libs/components/tailwind.config*.js\"]" + externals: | + libs/components/**/*.scss + libs/components/**/*.css + libs/components/tailwind.config*.js # Rather than use an `if` check on the whole publish step, we need to tell Chromatic to skip so that any Chromatic-spawned actions are properly skipped skip: ${{ steps.get-changed-files-for-chromatic.outputs.storyFiles == 'false' }} diff --git a/.github/workflows/crowdin-pull.yml b/.github/workflows/crowdin-pull.yml index 2fc035ec038..0b891203855 100644 --- a/.github/workflows/crowdin-pull.yml +++ b/.github/workflows/crowdin-pull.yml @@ -10,6 +10,9 @@ jobs: crowdin-sync: name: Autosync runs-on: ubuntu-24.04 + permissions: + contents: read + id-token: write strategy: fail-fast: false matrix: @@ -21,22 +24,19 @@ jobs: - app_name: web crowdin_project_id: "308189" steps: - - name: Generate GH App token - uses: actions/create-github-app-token@30bf6253fa41bdc8d1501d202ad15287582246b4 # v2.0.3 - id: app-token + - name: Log in to Azure + uses: bitwarden/gh-actions/azure-login@main with: - app-id: ${{ secrets.BW_GHAPP_ID }} - private-key: ${{ secrets.BW_GHAPP_KEY }} + subscription_id: ${{ secrets.AZURE_SUBSCRIPTION_ID }} + tenant_id: ${{ secrets.AZURE_TENANT_ID }} + client_id: ${{ secrets.AZURE_CLIENT_ID }} - - name: Checkout repo - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + - name: Get Azure Key Vault secrets + id: get-kv-secrets + uses: bitwarden/gh-actions/get-keyvault-secrets@main with: - token: ${{ steps.app-token.outputs.token }} - - - name: Login to Azure - uses: Azure/login@e15b166166a8746d1a47596803bd8c1b595455cf # v1.6.0 - with: - creds: ${{ secrets.AZURE_KV_CI_SERVICE_PRINCIPAL }} + keyvault: gh-org-bitwarden + secrets: "BW-GHAPP-ID,BW-GHAPP-KEY" - name: Retrieve secrets id: retrieve-secrets @@ -45,6 +45,21 @@ jobs: keyvault: "bitwarden-ci" secrets: "crowdin-api-token, github-gpg-private-key, github-gpg-private-key-passphrase" + - name: Log out from Azure + uses: bitwarden/gh-actions/azure-logout@main + + - name: Generate GH App token + uses: actions/create-github-app-token@30bf6253fa41bdc8d1501d202ad15287582246b4 # v2.0.3 + id: app-token + with: + app-id: ${{ steps.get-kv-secrets.outputs.BW-GHAPP-ID }} + private-key: ${{ steps.get-kv-secrets.outputs.BW-GHAPP-KEY }} + + - name: Checkout repo + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + token: ${{ steps.app-token.outputs.token }} + - name: Download translations uses: bitwarden/gh-actions/crowdin@main env: diff --git a/.github/workflows/deploy-web.yml b/.github/workflows/deploy-web.yml index 1cde8dd636a..d3788dc77b9 100644 --- a/.github/workflows/deploy-web.yml +++ b/.github/workflows/deploy-web.yml @@ -66,9 +66,9 @@ jobs: environment_url: ${{ steps.config.outputs.environment_url }} environment_name: ${{ steps.config.outputs.environment_name }} environment_artifact: ${{ steps.config.outputs.environment_artifact }} - azure_login_creds: ${{ steps.config.outputs.azure_login_creds }} - retrive_secrets_keyvault: ${{ steps.config.outputs.retrive_secrets_keyvault }} - sync_utility: ${{ steps.config.outputs.sync_utility }} + azure_login_client_key_name: ${{ steps.config.outputs.azure_login_client_key_name }} + azure_login_subscription_id_key_name: ${{ steps.config.outputs.azure_login_subscription_id_key_name }} + retrieve_secrets_keyvault: ${{ steps.config.outputs.retrieve_secrets_keyvault }} sync_delete_destination_files: ${{ steps.config.outputs.sync_delete_destination_files }} slack_channel_name: ${{ steps.config.outputs.slack_channel_name }} steps: @@ -81,48 +81,51 @@ jobs: case ${{ inputs.environment }} in "USQA") - echo "azure_login_creds=AZURE_KV_US_QA_SERVICE_PRINCIPAL" >> $GITHUB_OUTPUT - echo "retrive_secrets_keyvault=bw-webvault-rlktusqa-kv" >> $GITHUB_OUTPUT + echo "azure_login_client_key_name=AZURE_CLIENT_ID_USQA" >> $GITHUB_OUTPUT + echo "azure_login_subscription_id_key_name=AZURE_SUBSCRIPTION_ID_USQA" >> $GITHUB_OUTPUT + echo "retrieve_secrets_keyvault=bw-webvault-rlktusqa-kv" >> $GITHUB_OUTPUT echo "environment_artifact=web-*-cloud-QA.zip" >> $GITHUB_OUTPUT echo "environment_name=Web Vault - US QA Cloud" >> $GITHUB_OUTPUT echo "environment_url=http://vault.$ENV_NAME_LOWER.bitwarden.pw" >> $GITHUB_OUTPUT echo "slack_channel_name=alerts-deploy-qa" >> $GITHUB_OUTPUT ;; "EUQA") - echo "azure_login_creds=AZURE_KV_EU_QA_SERVICE_PRINCIPAL" >> $GITHUB_OUTPUT - echo "retrive_secrets_keyvault=webvaulteu-westeurope-qa" >> $GITHUB_OUTPUT + echo "azure_login_client_key_name=AZURE_CLIENT_ID_EUQA" >> $GITHUB_OUTPUT + echo "azure_login_subscription_id_key_name=AZURE_SUBSCRIPTION_ID_EUQA" >> $GITHUB_OUTPUT + echo "retrieve_secrets_keyvault=webvaulteu-westeurope-qa" >> $GITHUB_OUTPUT echo "environment_artifact=web-*-cloud-euqa.zip" >> $GITHUB_OUTPUT echo "environment_name=Web Vault - EU QA Cloud" >> $GITHUB_OUTPUT echo "environment_url=http://vault.$ENV_NAME_LOWER.bitwarden.pw" >> $GITHUB_OUTPUT echo "slack_channel_name=alerts-deploy-qa" >> $GITHUB_OUTPUT ;; "USPROD") - echo "azure_login_creds=AZURE_KV_US_PROD_SERVICE_PRINCIPAL" >> $GITHUB_OUTPUT - echo "retrive_secrets_keyvault=bw-webvault-klrt-kv" >> $GITHUB_OUTPUT + echo "azure_login_client_key_name=AZURE_CLIENT_ID_USPROD" >> $GITHUB_OUTPUT + echo "azure_login_subscription_id_key_name=AZURE_SUBSCRIPTION_ID_USPROD" >> $GITHUB_OUTPUT + echo "retrieve_secrets_keyvault=bw-webvault-klrt-kv" >> $GITHUB_OUTPUT echo "environment_artifact=web-*-cloud-COMMERCIAL.zip" >> $GITHUB_OUTPUT echo "environment_name=Web Vault - US Production Cloud" >> $GITHUB_OUTPUT echo "environment_url=http://vault.bitwarden.com" >> $GITHUB_OUTPUT echo "slack_channel_name=alerts-deploy-prd" >> $GITHUB_OUTPUT ;; "EUPROD") - echo "azure_login_creds=AZURE_KV_EU_PRD_SERVICE_PRINCIPAL" >> $GITHUB_OUTPUT - echo "retrive_secrets_keyvault=webvault-westeurope-prod" >> $GITHUB_OUTPUT + echo "azure_login_client_key_name=AZURE_CLIENT_ID_EUPROD" >> $GITHUB_OUTPUT + echo "azure_login_subscription_id_key_name=AZURE_SUBSCRIPTION_ID_EUPROD" >> $GITHUB_OUTPUT + echo "retrieve_secrets_keyvault=webvault-westeurope-prod" >> $GITHUB_OUTPUT echo "environment_artifact=web-*-cloud-euprd.zip" >> $GITHUB_OUTPUT echo "environment_name=Web Vault - EU Production Cloud" >> $GITHUB_OUTPUT echo "environment_url=http://vault.bitwarden.eu" >> $GITHUB_OUTPUT echo "slack_channel_name=alerts-deploy-prd" >> $GITHUB_OUTPUT ;; "USDEV") - echo "azure_login_creds=AZURE_KV_US_DEV_SERVICE_PRINCIPAL" >> $GITHUB_OUTPUT - echo "retrive_secrets_keyvault=webvault-eastus-dev" >> $GITHUB_OUTPUT + echo "azure_login_client_key_name=AZURE_CLIENT_ID_USDEV" >> $GITHUB_OUTPUT + echo "azure_login_subscription_id_key_name=AZURE_SUBSCRIPTION_ID_USDEV" >> $GITHUB_OUTPUT + echo "retrieve_secrets_keyvault=webvault-eastus-dev" >> $GITHUB_OUTPUT echo "environment_artifact=web-*-cloud-usdev.zip" >> $GITHUB_OUTPUT echo "environment_name=Web Vault - US Development Cloud" >> $GITHUB_OUTPUT echo "environment_url=http://vault.$ENV_NAME_LOWER.bitwarden.pw" >> $GITHUB_OUTPUT echo "slack_channel_name=alerts-deploy-dev" >> $GITHUB_OUTPUT ;; esac - # Set the sync utility to use for deployment to the environment (az-sync or azcopy) - echo "sync_utility=azcopy" >> $GITHUB_OUTPUT - name: Environment Protection env: @@ -180,6 +183,9 @@ jobs: name: Check if Web artifact is present runs-on: ubuntu-22.04 needs: setup + permissions: + contents: read + id-token: write env: _ENVIRONMENT_ARTIFACT: ${{ needs.setup.outputs.environment_artifact }} outputs: @@ -209,11 +215,13 @@ jobs: branch: ${{ inputs.branch-or-tag }} artifacts: ${{ env._ENVIRONMENT_ARTIFACT }} - - name: Login to Azure + - name: Log in to Azure if: ${{ steps.download-latest-artifacts.outcome == 'failure' }} - uses: Azure/login@e15b166166a8746d1a47596803bd8c1b595455cf # v1.6.0 + uses: bitwarden/gh-actions/azure-login@main with: - creds: ${{ secrets.AZURE_KV_CI_SERVICE_PRINCIPAL }} + subscription_id: ${{ secrets.AZURE_SUBSCRIPTION_ID }} + tenant_id: ${{ secrets.AZURE_TENANT_ID }} + client_id: ${{ secrets.AZURE_CLIENT_ID }} - name: Retrieve secrets for Build trigger if: ${{ steps.download-latest-artifacts.outcome == 'failure' }} @@ -223,6 +231,10 @@ jobs: keyvault: "bitwarden-ci" secrets: "github-pat-bitwarden-devops-bot-repo-scope" + - name: Log out from Azure + if: ${{ steps.download-latest-artifacts.outcome == 'failure' }} + uses: bitwarden/gh-actions/azure-logout@main + - name: 'Trigger build web for missing branch/tag ${{ inputs.branch-or-tag }}' if: ${{ steps.download-latest-artifacts.outcome == 'failure' }} uses: convictional/trigger-workflow-and-wait@f69fa9eedd3c62a599220f4d5745230e237904be # v1.6.5 @@ -262,6 +274,8 @@ jobs: - artifact-check runs-on: ubuntu-22.04 if: ${{ always() && ( contains( inputs.environment , 'QA' ) || contains( inputs.environment , 'DEV' ) ) }} + permissions: + id-token: write outputs: channel_id: ${{ steps.slack-message.outputs.channel_id }} ts: ${{ steps.slack-message.outputs.ts }} @@ -277,7 +291,9 @@ jobs: event: 'start' commit-sha: ${{ needs.artifact-check.outputs.artifact_build_commit }} url: https://github.com/bitwarden/clients/actions/runs/${{ github.run_id }} - AZURE_KV_CI_SERVICE_PRINCIPAL: ${{ secrets.AZURE_KV_CI_SERVICE_PRINCIPAL }} + AZURE_SUBSCRIPTION_ID: ${{ secrets.AZURE_SUBSCRIPTION_ID }} + AZURE_TENANT_ID: ${{ secrets.AZURE_TENANT_ID }} + AZURE_CLIENT_ID: ${{ secrets.AZURE_CLIENT_ID }} update-summary: name: Display commit @@ -302,6 +318,9 @@ jobs: _ENVIRONMENT_URL: ${{ needs.setup.outputs.environment_url }} _ENVIRONMENT_NAME: ${{ needs.setup.outputs.environment_name }} _ENVIRONMENT_ARTIFACT: ${{ needs.setup.outputs.environment_artifact }} + permissions: + id-token: write + deployments: write steps: - name: Create GitHub deployment uses: chrnorm/deployment-action@55729fcebec3d284f60f5bcabbd8376437d696b1 # v2.0.7 @@ -309,33 +328,12 @@ jobs: with: token: '${{ secrets.GITHUB_TOKEN }}' initial-status: 'in_progress' - environment_url: ${{ env._ENVIRONMENT_URL }} + environment-url: ${{ env._ENVIRONMENT_URL }} environment: ${{ env._ENVIRONMENT_NAME }} task: 'deploy' description: 'Deployment from branch/tag: ${{ inputs.branch-or-tag }}' ref: ${{ needs.artifact-check.outputs.artifact_build_commit }} - - name: Login to Azure - uses: Azure/login@e15b166166a8746d1a47596803bd8c1b595455cf # v1.6.0 - with: - creds: ${{ secrets[needs.setup.outputs.azure_login_creds] }} - - - name: Retrieve Storage Account connection string for az sync - if: ${{ needs.setup.outputs.sync_utility == 'az-sync' }} - id: retrieve-secrets-az-sync - uses: bitwarden/gh-actions/get-keyvault-secrets@main - with: - keyvault: ${{ needs.setup.outputs.retrive_secrets_keyvault }} - secrets: "sa-bitwarden-web-vault-dev-key-temp" - - - name: Retrieve Storage Account name and SPN credentials for azcopy - if: ${{ needs.setup.outputs.sync_utility == 'azcopy' }} - id: retrieve-secrets-azcopy - uses: bitwarden/gh-actions/get-keyvault-secrets@main - with: - keyvault: ${{ needs.setup.outputs.retrive_secrets_keyvault }} - secrets: "sa-bitwarden-web-vault-name,sp-bitwarden-web-vault-password,sp-bitwarden-web-vault-appid,sp-bitwarden-web-vault-tenant" - - name: 'Download latest cloud asset using GitHub Run ID: ${{ inputs.build-web-run-id }}' if: ${{ inputs.build-web-run-id }} uses: bitwarden/gh-actions/download-artifacts@main @@ -362,28 +360,32 @@ jobs: working-directory: apps/web run: unzip ${{ env._ENVIRONMENT_ARTIFACT }} - - name: Sync to Azure Storage Account using az storage blob sync - if: ${{ needs.setup.outputs.sync_utility == 'az-sync' }} - working-directory: apps/web - run: | - az storage blob sync \ - --source "./build" \ - --container '$web' \ - --connection-string "${{ steps.retrieve-secrets-az-sync.outputs.sa-bitwarden-web-vault-dev-key-temp }}" \ - --delete-destination=${{ inputs.force-delete-destination }} + - name: Login to Azure + uses: bitwarden/gh-actions/azure-login@main + with: + subscription_id: ${{ secrets[needs.setup.outputs.azure_login_subscription_id_key_name] }} + tenant_id: ${{ secrets.AZURE_TENANT_ID }} + client_id: ${{ secrets[needs.setup.outputs.azure_login_client_key_name] }} + + - name: Retrieve Storage Account name + id: retrieve-secrets-azcopy + uses: bitwarden/gh-actions/get-keyvault-secrets@main + with: + keyvault: ${{ needs.setup.outputs.retrieve_secrets_keyvault }} + secrets: "sa-bitwarden-web-vault-name" - name: Sync to Azure Storage Account using azcopy - if: ${{ needs.setup.outputs.sync_utility == 'azcopy' }} working-directory: apps/web env: - AZCOPY_AUTO_LOGIN_TYPE: SPN - AZCOPY_SPA_APPLICATION_ID: ${{ steps.retrieve-secrets-azcopy.outputs.sp-bitwarden-web-vault-appid }} - AZCOPY_SPA_CLIENT_SECRET: ${{ steps.retrieve-secrets-azcopy.outputs.sp-bitwarden-web-vault-password }} - AZCOPY_TENANT_ID: ${{ steps.retrieve-secrets-azcopy.outputs.sp-bitwarden-web-vault-tenant }} + AZCOPY_AUTO_LOGIN_TYPE: AZCLI + AZCOPY_TENANT_ID: ${{ secrets.AZURE_TENANT_ID }} run: | azcopy sync ./build 'https://${{ steps.retrieve-secrets-azcopy.outputs.sa-bitwarden-web-vault-name }}.blob.core.windows.net/$web/' \ --delete-destination=${{ inputs.force-delete-destination }} --compare-hash="MD5" + - name: Log out from Azure + uses: bitwarden/gh-actions/azure-logout@main + - name: Debug sync logs if: ${{ inputs.debug }} run: cat /home/runner/.azcopy/*.log @@ -397,7 +399,7 @@ jobs: uses: chrnorm/deployment-status@9a72af4586197112e0491ea843682b5dc280d806 # v2.0.3 with: token: '${{ secrets.GITHUB_TOKEN }}' - environment_url: ${{ env._ENVIRONMENT_URL }} + environment-url: ${{ env._ENVIRONMENT_URL }} state: 'success' deployment-id: ${{ steps.deployment.outputs.deployment_id }} @@ -406,7 +408,7 @@ jobs: uses: chrnorm/deployment-status@9a72af4586197112e0491ea843682b5dc280d806 # v2.0.3 with: token: '${{ secrets.GITHUB_TOKEN }}' - environment_url: ${{ env._ENVIRONMENT_URL }} + environment-url: ${{ env._ENVIRONMENT_URL }} state: 'failure' deployment-id: ${{ steps.deployment.outputs.deployment_id }} @@ -419,6 +421,8 @@ jobs: - notify-start - azure-deploy - artifact-check + permissions: + id-token: write steps: - name: Notify Slack with result uses: bitwarden/gh-actions/report-deployment-status-to-slack@main @@ -431,4 +435,6 @@ jobs: url: https://github.com/bitwarden/clients/actions/runs/${{ github.run_id }} commit-sha: ${{ needs.artifact-check.outputs.artifact_build_commit }} update-ts: ${{ needs.notify-start.outputs.ts }} - AZURE_KV_CI_SERVICE_PRINCIPAL: ${{ secrets.AZURE_KV_CI_SERVICE_PRINCIPAL }} + AZURE_SUBSCRIPTION_ID: ${{ secrets.AZURE_SUBSCRIPTION_ID }} + AZURE_TENANT_ID: ${{ secrets.AZURE_TENANT_ID }} + AZURE_CLIENT_ID: ${{ secrets.AZURE_CLIENT_ID }} diff --git a/.github/workflows/lint-crowdin-config.yml b/.github/workflows/lint-crowdin-config.yml index adb5950e3a0..38a3ef59ea7 100644 --- a/.github/workflows/lint-crowdin-config.yml +++ b/.github/workflows/lint-crowdin-config.yml @@ -5,12 +5,14 @@ on: types: [opened, synchronize] paths: - '**/crowdin.yml' -permissions: {} jobs: lint-crowdin-config: name: Lint Crowdin Config ${{ matrix.app.name }} runs-on: ubuntu-24.04 + permissions: + contents: read + id-token: write strategy: matrix: app: [ @@ -22,17 +24,25 @@ jobs: - name: Check out repo uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: - fetch-depth: 1 - - name: Login to Azure - uses: Azure/login@e15b166166a8746d1a47596803bd8c1b595455cf # v1.6.0 + fetch-depth: 1 + + - name: Log in to Azure + uses: bitwarden/gh-actions/azure-login@main with: - creds: ${{ secrets.AZURE_KV_CI_SERVICE_PRINCIPAL }} + subscription_id: ${{ secrets.AZURE_SUBSCRIPTION_ID }} + tenant_id: ${{ secrets.AZURE_TENANT_ID }} + client_id: ${{ secrets.AZURE_CLIENT_ID }} + - name: Retrieve secrets id: retrieve-secrets uses: bitwarden/gh-actions/get-keyvault-secrets@main with: keyvault: "bitwarden-ci" secrets: "crowdin-api-token" + + - name: Log out from Azure + uses: bitwarden/gh-actions/azure-logout@main + - name: Lint ${{ matrix.app.name }} config uses: crowdin/github-action@f214c8723025f41fc55b2ad26e67b60b80b1885d # v2.7.1 env: @@ -42,4 +52,4 @@ jobs: with: dryrun_action: true command: 'config lint' - command_args: '--verbose -c ${{ matrix.app.config_path }}' \ No newline at end of file + command_args: '--verbose -c ${{ matrix.app.config_path }}' diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 4246d623f04..14b5d51d9ef 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -49,6 +49,7 @@ jobs: ! -path "*/Cargo.toml" \ ! -path "*/Cargo.lock" \ ! -path "./apps/desktop/macos/*" \ + ! -path "*/CLAUDE.md" \ > tmp.txt diff <(sort .github/whitelist-capital-letters.txt) <(sort tmp.txt) @@ -60,7 +61,7 @@ jobs: echo "node_version=$NODE_VERSION" >> $GITHUB_OUTPUT - name: Set up Node - uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4.1.0 + uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0 with: cache: 'npm' cache-dependency-path: '**/package-lock.json' @@ -102,3 +103,10 @@ jobs: run: cargo clippy --all-features --tests env: RUSTFLAGS: "-D warnings" + + - name: Install cargo-sort + run: cargo install cargo-sort --locked --git https://github.com/DevinR528/cargo-sort.git --rev f5047967021cbb1f822faddc355b3b07674305a1 + + - name: Cargo sort + working-directory: ./apps/desktop/desktop_native + run: cargo sort --workspace --check diff --git a/.github/workflows/nx.yml b/.github/workflows/nx.yml new file mode 100644 index 00000000000..526c2b5d864 --- /dev/null +++ b/.github/workflows/nx.yml @@ -0,0 +1,42 @@ +name: Experimental Nx CI +on: + pull_request: + types: [opened, synchronize] + +permissions: + contents: read + +jobs: + nx-experiment: + name: Run Nx Affected Tasks + runs-on: ubuntu-22.04 + steps: + - name: Checkout repository + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + fetch-depth: 0 + + - name: Get Node Version + id: retrieve-node-version + working-directory: ./ + run: | + NODE_NVMRC=$(cat .nvmrc) + NODE_VERSION=${NODE_NVMRC/v/''} + echo "node_version=$NODE_VERSION" >> $GITHUB_OUTPUT + + - name: Set up Node + uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0 + with: + cache: 'npm' + cache-dependency-path: '**/package-lock.json' + node-version: ${{ env._NODE_VERSION }} + + - name: Install dependencies + run: npm ci + + - name: Set Nx SHAs for affected detection + uses: nrwl/nx-set-shas@826660b82addbef3abff5fa871492ebad618c9e1 # v4.3.3 + + - name: Run Nx affected tasks + continue-on-error: true + run: npx nx affected -t build lint test \ No newline at end of file diff --git a/.github/workflows/publish-cli.yml b/.github/workflows/publish-cli.yml index d758e6f11c9..121236c0deb 100644 --- a/.github/workflows/publish-cli.yml +++ b/.github/workflows/publish-cli.yml @@ -48,6 +48,10 @@ jobs: defaults: run: working-directory: . + permissions: + contents: read + deployments: write + steps: - name: Branch check if: ${{ inputs.publish_type != 'Dry Run' }} @@ -86,6 +90,10 @@ jobs: name: Deploy Snap runs-on: ubuntu-22.04 needs: setup + permissions: + contents: read + packages: read + id-token: write if: inputs.snap_publish env: _PKG_VERSION: ${{ needs.setup.outputs.release_version }} @@ -93,10 +101,12 @@ jobs: - name: Checkout repo uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - - name: Login to Azure - uses: Azure/login@e15b166166a8746d1a47596803bd8c1b595455cf # v1.6.0 + - name: Log in to Azure + uses: bitwarden/gh-actions/azure-login@main with: - creds: ${{ secrets.AZURE_KV_CI_SERVICE_PRINCIPAL }} + subscription_id: ${{ secrets.AZURE_SUBSCRIPTION_ID }} + tenant_id: ${{ secrets.AZURE_TENANT_ID }} + client_id: ${{ secrets.AZURE_CLIENT_ID }} - name: Retrieve secrets id: retrieve-secrets @@ -105,8 +115,11 @@ jobs: keyvault: "bitwarden-ci" secrets: "snapcraft-store-token" + - name: Log out from Azure + uses: bitwarden/gh-actions/azure-logout@main + - name: Install Snap - uses: samuelmeuli/action-snapcraft@d33c176a9b784876d966f80fb1b461808edc0641 # v2.1.1 + uses: samuelmeuli/action-snapcraft@fceeb3c308e76f3487e72ef608618de625fb7fe8 # v3.0.1 - name: Download artifacts run: wget https://github.com/bitwarden/clients/releases/download/cli-v${{ env._PKG_VERSION }}/bw_${{ env._PKG_VERSION }}_amd64.snap @@ -123,6 +136,10 @@ jobs: name: Deploy Choco runs-on: windows-2022 needs: setup + permissions: + contents: read + packages: read + id-token: write if: inputs.choco_publish env: _PKG_VERSION: ${{ needs.setup.outputs.release_version }} @@ -130,10 +147,12 @@ jobs: - name: Checkout repo uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - - name: Login to Azure - uses: Azure/login@e15b166166a8746d1a47596803bd8c1b595455cf # v1.6.0 + - name: Log in to Azure + uses: bitwarden/gh-actions/azure-login@main with: - creds: ${{ secrets.AZURE_KV_CI_SERVICE_PRINCIPAL }} + subscription_id: ${{ secrets.AZURE_SUBSCRIPTION_ID }} + tenant_id: ${{ secrets.AZURE_TENANT_ID }} + client_id: ${{ secrets.AZURE_CLIENT_ID }} - name: Retrieve secrets id: retrieve-secrets @@ -142,6 +161,9 @@ jobs: keyvault: "bitwarden-ci" secrets: "cli-choco-api-key" + - name: Log out from Azure + uses: bitwarden/gh-actions/azure-logout@main + - name: Setup Chocolatey run: choco apikey --key $env:CHOCO_API_KEY --source https://push.chocolatey.org/ env: @@ -161,26 +183,33 @@ jobs: npm: name: Publish NPM + environment: CLI - NPM runs-on: ubuntu-22.04 needs: setup + permissions: + contents: read + packages: read + id-token: write if: inputs.npm_publish env: _PKG_VERSION: ${{ needs.setup.outputs.release_version }} steps: - name: Checkout repo uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + + - name: Get Node version + id: retrieve-node-version + run: | + NODE_NVMRC=$(cat .nvmrc) + NODE_VERSION=${NODE_NVMRC/v/''} + echo "node_version=$NODE_VERSION" >> $GITHUB_OUTPUT - - name: Login to Azure - uses: Azure/login@e15b166166a8746d1a47596803bd8c1b595455cf # v1.6.0 + - name: Set up Node + uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0 with: - creds: ${{ secrets.AZURE_KV_CI_SERVICE_PRINCIPAL }} - - - name: Retrieve secrets - id: retrieve-secrets - uses: bitwarden/gh-actions/get-keyvault-secrets@main - with: - keyvault: "bitwarden-ci" - secrets: "npm-api-key" + node-version: ${{ steps.retrieve-node-version.outputs.node_version }} + npm-version: "11.5.1" # FIXME: npm 11.5.1 or later is required to publish w/ OIDC; move version management to somewhere maintainable by automation + registry-url: "https://registry.npmjs.org/" - name: Download and set up artifact run: | @@ -188,19 +217,9 @@ jobs: wget https://github.com/bitwarden/clients/releases/download/cli-v${{ env._PKG_VERSION }}/bitwarden-cli-${{ env._PKG_VERSION }}-npm-build.zip unzip bitwarden-cli-${{ env._PKG_VERSION }}-npm-build.zip -d build - - name: Setup NPM - run: | - echo 'registry="https://registry.npmjs.org/"' > ./.npmrc - echo "//registry.npmjs.org/:_authToken=$NPM_TOKEN" >> ./.npmrc - env: - NPM_TOKEN: ${{ steps.retrieve-secrets.outputs.npm-api-key }} - - - name: Install Husky - run: npm install -g husky - - name: Publish NPM if: ${{ inputs.publish_type != 'Dry Run' }} - run: npm publish --access public --regsitry=https://registry.npmjs.org/ --userconfig=./.npmrc + run: npm publish --access public update-deployment: name: Update Deployment Status @@ -210,6 +229,10 @@ jobs: - npm - snap - choco + permissions: + contents: read + deployments: write + if: ${{ always() && inputs.publish_type != 'Dry Run' }} steps: - name: Check if any job failed diff --git a/.github/workflows/publish-desktop.yml b/.github/workflows/publish-desktop.yml index ae631165db9..f0de331431c 100644 --- a/.github/workflows/publish-desktop.yml +++ b/.github/workflows/publish-desktop.yml @@ -18,10 +18,15 @@ on: type: string default: latest electron_rollout_percentage: - description: 'Staged Rollout Percentage for Electron' - required: true + description: 'Staged Rollout Percentage for Electron (ignored if Electron publish disabled)' + required: false default: '10' type: string + electron_publish: + description: 'Publish to Electron (auto-updater)' + required: true + default: true + type: boolean snap_publish: description: 'Publish to Snap store' required: true @@ -32,6 +37,15 @@ on: required: true default: true type: boolean + mas_publish: + description: 'Publish to Mac App Store' + required: true + default: true + type: boolean + release_notes: + description: 'Release Notes' + required: false + type: string jobs: setup: @@ -42,6 +56,9 @@ jobs: release_channel: ${{ steps.release_channel.outputs.channel }} tag_name: ${{ steps.version.outputs.tag_name }} deployment_id: ${{ steps.deployment.outputs.deployment_id }} + permissions: + contents: read + deployments: write steps: - name: Branch check if: ${{ inputs.publish_type != 'Dry Run' }} @@ -68,7 +85,7 @@ jobs: echo "Release Version: ${{ inputs.version }}" echo "version=${{ inputs.version }}" - $TAG_NAME="desktop-v${{ inputs.version }}" + TAG_NAME="desktop-v${{ inputs.version }}" echo "Tag name: $TAG_NAME" echo "tag_name=$TAG_NAME" >> $GITHUB_OUTPUT @@ -106,14 +123,22 @@ jobs: name: Electron blob publish runs-on: ubuntu-22.04 needs: setup + if: inputs.electron_publish + permissions: + contents: read + packages: read + id-token: write + deployments: write env: _PKG_VERSION: ${{ needs.setup.outputs.release_version }} _RELEASE_TAG: ${{ needs.setup.outputs.tag_name }} steps: - - name: Login to Azure - uses: Azure/login@e15b166166a8746d1a47596803bd8c1b595455cf # v1.6.0 + - name: Log in to Azure + uses: bitwarden/gh-actions/azure-login@main with: - creds: ${{ secrets.AZURE_KV_CI_SERVICE_PRINCIPAL }} + subscription_id: ${{ secrets.AZURE_SUBSCRIPTION_ID }} + tenant_id: ${{ secrets.AZURE_TENANT_ID }} + client_id: ${{ secrets.AZURE_CLIENT_ID }} - name: Retrieve secrets id: retrieve-secrets @@ -124,6 +149,9 @@ jobs: aws-electron-access-key, aws-electron-bucket-name" + - name: Log out from Azure + uses: bitwarden/gh-actions/azure-logout@main + - name: Create artifacts directory run: mkdir -p apps/desktop/artifacts @@ -176,6 +204,9 @@ jobs: name: Deploy Snap runs-on: ubuntu-22.04 needs: setup + permissions: + contents: read + id-token: write if: inputs.snap_publish env: _PKG_VERSION: ${{ needs.setup.outputs.release_version }} @@ -184,10 +215,12 @@ jobs: - name: Checkout Repo uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - - name: Login to Azure - uses: Azure/login@e15b166166a8746d1a47596803bd8c1b595455cf # v1.6.0 + - name: Log in to Azure + uses: bitwarden/gh-actions/azure-login@main with: - creds: ${{ secrets.AZURE_KV_CI_SERVICE_PRINCIPAL }} + subscription_id: ${{ secrets.AZURE_SUBSCRIPTION_ID }} + tenant_id: ${{ secrets.AZURE_TENANT_ID }} + client_id: ${{ secrets.AZURE_CLIENT_ID }} - name: Retrieve secrets id: retrieve-secrets @@ -196,8 +229,11 @@ jobs: keyvault: "bitwarden-ci" secrets: "snapcraft-store-token" + - name: Log out from Azure + uses: bitwarden/gh-actions/azure-logout@main + - name: Install Snap - uses: samuelmeuli/action-snapcraft@d33c176a9b784876d966f80fb1b461808edc0641 # v2.1.1 + uses: samuelmeuli/action-snapcraft@fceeb3c308e76f3487e72ef608618de625fb7fe8 # v3.0.1 - name: Setup run: mkdir dist @@ -220,6 +256,9 @@ jobs: name: Deploy Choco runs-on: windows-2022 needs: setup + permissions: + contents: read + id-token: write if: inputs.choco_publish env: _PKG_VERSION: ${{ needs.setup.outputs.release_version }} @@ -233,10 +272,12 @@ jobs: dotnet --version dotnet nuget --version - - name: Login to Azure - uses: Azure/login@e15b166166a8746d1a47596803bd8c1b595455cf # v1.6.0 + - name: Log in to Azure + uses: bitwarden/gh-actions/azure-login@main with: - creds: ${{ secrets.AZURE_KV_CI_SERVICE_PRINCIPAL }} + subscription_id: ${{ secrets.AZURE_SUBSCRIPTION_ID }} + tenant_id: ${{ secrets.AZURE_TENANT_ID }} + client_id: ${{ secrets.AZURE_CLIENT_ID }} - name: Retrieve secrets id: retrieve-secrets @@ -245,6 +286,9 @@ jobs: keyvault: "bitwarden-ci" secrets: "cli-choco-api-key" + - name: Log out from Azure + uses: bitwarden/gh-actions/azure-logout@main + - name: Setup Chocolatey run: choco apikey --key $env:CHOCO_API_KEY --source https://push.chocolatey.org/ env: @@ -263,6 +307,92 @@ jobs: run: choco push --source=https://push.chocolatey.org/ working-directory: apps/desktop/dist + mas: + name: Deploy Mac App Store + runs-on: macos-15 + needs: setup + permissions: + contents: read + id-token: write + if: inputs.mas_publish + env: + _PKG_VERSION: ${{ needs.setup.outputs.release_version }} + _RELEASE_TAG: ${{ needs.setup.outputs.tag_name }} + steps: + - name: Checkout repo + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + + - name: Validate release notes for MAS + if: inputs.mas_publish && (inputs.release_notes == '' || inputs.release_notes == null) + run: | + echo "❌ Release notes are required when publishing to Mac App Store" + echo "Please provide release notes using the 'Release Notes' input field" + exit 1 + + - name: Download MacOS App Store build number + working-directory: apps/desktop + run: wget https://github.com/bitwarden/clients/releases/download/${{ env._RELEASE_TAG }}/macos-build-number.json + + - name: Setup Ruby and Install Fastlane + uses: ruby/setup-ruby@ca041f971d66735f3e5ff1e21cc13e2d51e7e535 # v1.233.0 + with: + ruby-version: '3.0' + bundler-cache: false + working-directory: apps/desktop + + - name: Install Fastlane + working-directory: apps/desktop + run: gem install fastlane + + - name: Log in to Azure + uses: bitwarden/gh-actions/azure-login@main + with: + subscription_id: ${{ secrets.AZURE_SUBSCRIPTION_ID }} + tenant_id: ${{ secrets.AZURE_TENANT_ID }} + client_id: ${{ secrets.AZURE_CLIENT_ID }} + + - name: Get Azure Key Vault secrets + id: get-kv-secrets + uses: bitwarden/gh-actions/get-keyvault-secrets@main + with: + keyvault: gh-clients + secrets: "APP-STORE-CONNECT-AUTH-KEY,APP-STORE-CONNECT-TEAM-ISSUER" + + - name: Log out from Azure + uses: bitwarden/gh-actions/azure-logout@main + + - name: Publish to App Store + env: + APP_STORE_CONNECT_TEAM_ISSUER: ${{ steps.get-kv-secrets.outputs.APP-STORE-CONNECT-TEAM-ISSUER }} + APP_STORE_CONNECT_AUTH_KEY: ${{ steps.get-kv-secrets.outputs.APP-STORE-CONNECT-AUTH-KEY }} + working-directory: apps/desktop + run: | + BUILD_NUMBER=$(jq -r '.buildNumber' macos-build-number.json) + CHANGELOG="${{ inputs.release_notes }}" + IS_DRY_RUN="${{ inputs.publish_type == 'Dry Run' }}" + + if [ "$IS_DRY_RUN" = "true" ]; then + echo "🧪 DRY RUN MODE - Testing without actual App Store submission" + echo "📦 Would publish build $BUILD_NUMBER to Mac App Store" + else + echo "🚀 PRODUCTION MODE - Publishing to Mac App Store" + echo "📦 Publishing build $BUILD_NUMBER to Mac App Store" + fi + + echo "📝 Release notes (${#CHANGELOG} chars): ${CHANGELOG:0:100}..." + + # Validate changelog length (App Store limit is 4000 chars) + if [ ${#CHANGELOG} -gt 4000 ]; then + echo "❌ Release notes too long: ${#CHANGELOG} characters (max 4000)" + exit 1 + fi + + fastlane publish --verbose \ + app_version:"${{ env._PKG_VERSION }}" \ + build_number:$BUILD_NUMBER \ + changelog:"$CHANGELOG" \ + dry_run:$IS_DRY_RUN + update-deployment: name: Update Deployment Status runs-on: ubuntu-22.04 @@ -271,6 +401,10 @@ jobs: - electron-blob - snap - choco + - mas + permissions: + contents: read + deployments: write if: ${{ always() && inputs.publish_type != 'Dry Run' }} steps: - name: Check if any job failed diff --git a/.github/workflows/publish-web.yml b/.github/workflows/publish-web.yml index 69b29086d36..6446e625156 100644 --- a/.github/workflows/publish-web.yml +++ b/.github/workflows/publish-web.yml @@ -24,6 +24,8 @@ jobs: outputs: release_version: ${{ steps.version.outputs.version }} tag_version: ${{ steps.version.outputs.tag }} + permissions: + contents: read steps: - name: Checkout repo uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 @@ -52,6 +54,10 @@ jobs: name: Release self-host docker runs-on: ubuntu-22.04 needs: setup + permissions: + id-token: write + contents: read + deployments: write env: _BRANCH_NAME: ${{ github.ref_name }} _RELEASE_VERSION: ${{ needs.setup.outputs.release_version }} @@ -69,10 +75,12 @@ jobs: uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 ########## ACR ########## - - name: Login to Azure - PROD Subscription - uses: Azure/login@e15b166166a8746d1a47596803bd8c1b595455cf # v1.6.0 + - name: Log in to Azure + uses: bitwarden/gh-actions/azure-login@main with: - creds: ${{ secrets.AZURE_PROD_KV_CREDENTIALS }} + subscription_id: ${{ secrets.AZURE_SUBSCRIPTION_ID }} + tenant_id: ${{ secrets.AZURE_TENANT_ID }} + client_id: ${{ secrets.AZURE_CLIENT_ID }} - name: Login to Azure ACR run: az acr login -n bitwardenprod @@ -121,6 +129,9 @@ jobs: docker push $_AZ_REGISTRY/web-sh:latest fi + - name: Log out from Azure + uses: bitwarden/gh-actions/azure-logout@main + - name: Update deployment status to Success if: ${{ inputs.publish_type != 'Dry Run' && success() }} uses: chrnorm/deployment-status@9a72af4586197112e0491ea843682b5dc280d806 # v2.0.3 @@ -147,11 +158,15 @@ jobs: runs-on: ubuntu-22.04 needs: - setup + permissions: + id-token: write steps: - - name: Log in to Azure - CI subscription - uses: Azure/login@e15b166166a8746d1a47596803bd8c1b595455cf # v1.6.0 + - name: Log in to Azure + uses: bitwarden/gh-actions/azure-login@main with: - creds: ${{ secrets.AZURE_KV_CI_SERVICE_PRINCIPAL }} + subscription_id: ${{ secrets.AZURE_SUBSCRIPTION_ID }} + tenant_id: ${{ secrets.AZURE_TENANT_ID }} + client_id: ${{ secrets.AZURE_CLIENT_ID }} - name: Retrieve GitHub PAT secrets id: retrieve-secret-pat @@ -160,8 +175,11 @@ jobs: keyvault: "bitwarden-ci" secrets: "github-pat-bitwarden-devops-bot-repo-scope" + - name: Log out from Azure + uses: bitwarden/gh-actions/azure-logout@main + - name: Trigger self-host build - uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1 + uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0 with: github-token: ${{ steps.retrieve-secret-pat.outputs.github-pat-bitwarden-devops-bot-repo-scope }} script: | diff --git a/.github/workflows/release-desktop-beta.yml b/.github/workflows/release-desktop-beta.yml deleted file mode 100644 index a5e374395d8..00000000000 --- a/.github/workflows/release-desktop-beta.yml +++ /dev/null @@ -1,1024 +0,0 @@ -name: Release Desktop Beta - -on: - workflow_dispatch: - inputs: - version_number: - description: "New Beta Version" - required: true - -defaults: - run: - shell: bash - -jobs: - setup: - name: Setup - runs-on: ubuntu-22.04 - outputs: - release_version: ${{ steps.version.outputs.version }} - release_channel: ${{ steps.release_channel.outputs.channel }} - branch_name: ${{ steps.branch.outputs.branch_name }} - build_number: ${{ steps.increment-version.outputs.build_number }} - node_version: ${{ steps.retrieve-node-version.outputs.node_version }} - steps: - - name: Checkout repo - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - - - name: Branch check - run: | - if [[ "$GITHUB_REF" != "refs/heads/main" ]] && [[ "$GITHUB_REF" != "refs/heads/rc" ]] && [[ "$GITHUB_REF" != "refs/heads/hotfix-rc" ]]; then - echo "===================================" - echo "[!] Can only release from the 'main', 'rc' or 'hotfix-rc' branches" - echo "===================================" - exit 1 - fi - - - name: Bump Desktop Version - Root - env: - VERSION: ${{ github.event.inputs.version_number }} - run: npm version --workspace=@bitwarden/desktop ${VERSION}-beta - - - name: Bump Desktop Version - App - env: - VERSION: ${{ github.event.inputs.version_number }} - run: npm version ${VERSION}-beta - working-directory: "apps/desktop/src" - - - name: Check Release Version - id: version - uses: bitwarden/gh-actions/release-version-check@main - with: - release-type: 'Initial Release' - project-type: ts - file: apps/desktop/src/package.json - monorepo: true - monorepo-project: desktop - - - name: Increment Version - id: increment-version - run: | - BUILD_NUMBER=$(expr 3000 + $GITHUB_RUN_NUMBER) - echo "Setting build number to $BUILD_NUMBER" - echo "build_number=$BUILD_NUMBER" >> $GITHUB_OUTPUT - - - name: Get Version Channel - id: release_channel - run: | - case "${{ steps.version.outputs.version }}" in - *"alpha"*) - echo "channel=alpha" >> $GITHUB_OUTPUT - echo "[!] We do not yet support 'alpha'" - exit 1 - ;; - *"beta"*) - echo "channel=beta" >> $GITHUB_OUTPUT - ;; - *) - echo "channel=latest" >> $GITHUB_OUTPUT - ;; - esac - - - name: Setup git config - run: | - git config --global user.name "GitHub Action Bot" - git config --global user.email "41898282+github-actions[bot]@users.noreply.github.com" - git config --global url."https://github.com/".insteadOf ssh://git@github.com/ - git config --global url."https://".insteadOf ssh:// - - - name: Create desktop-beta-release branch - id: branch - env: - VERSION: ${{ github.event.inputs.version_number }} - run: | - find="." - replace="_" - ver=${VERSION//$find/$replace} - branch_name=desktop-beta-release-$ver-beta - - git switch -c $branch_name - git add . - git commit -m "Bump desktop version to $VERSION-beta" - - git push -u origin $branch_name - - echo "branch_name=$branch_name" >> $GITHUB_OUTPUT - - - name: Get Node Version - id: retrieve-node-version - run: | - NODE_NVMRC=$(cat .nvmrc) - NODE_VERSION=${NODE_NVMRC/v/''} - echo "node_version=$NODE_VERSION" >> $GITHUB_OUTPUT - - linux: - name: Linux Build - runs-on: ubuntu-22.04 - needs: setup - env: - _PACKAGE_VERSION: ${{ needs.setup.outputs.release_version }} - _NODE_VERSION: ${{ needs.setup.outputs.node_version }} - NODE_OPTIONS: --max_old_space_size=4096 - defaults: - run: - working-directory: apps/desktop - steps: - - name: Checkout repo - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - with: - ref: ${{ needs.setup.outputs.branch_name }} - - - name: Set up Node - uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4.1.0 - with: - cache: 'npm' - cache-dependency-path: '**/package-lock.json' - node-version: ${{ env._NODE_VERSION }} - - - name: Set up environment - run: | - sudo apt-get update - sudo apt-get -y install pkg-config libxss-dev rpm - - - name: Set up Snap - run: sudo snap install snapcraft --classic - - - name: Print environment - run: | - node --version - npm --version - snap --version - snapcraft --version || echo 'snapcraft unavailable' - - - name: Install Node dependencies - run: npm ci - working-directory: ./ - - - name: Build application - run: npm run dist:lin - - - name: Upload .deb artifact - uses: actions/upload-artifact@65c4c4a1ddee5b72f698fdd19549f0f0fb45cf08 # v4.6.0 - with: - name: Bitwarden-${{ env._PACKAGE_VERSION }}-amd64.deb - path: apps/desktop/dist/Bitwarden-${{ env._PACKAGE_VERSION }}-amd64.deb - if-no-files-found: error - - - name: Upload .rpm artifact - uses: actions/upload-artifact@65c4c4a1ddee5b72f698fdd19549f0f0fb45cf08 # v4.6.0 - with: - name: Bitwarden-${{ env._PACKAGE_VERSION }}-x86_64.rpm - path: apps/desktop/dist/Bitwarden-${{ env._PACKAGE_VERSION }}-x86_64.rpm - if-no-files-found: error - - - name: Upload .freebsd artifact - uses: actions/upload-artifact@65c4c4a1ddee5b72f698fdd19549f0f0fb45cf08 # v4.6.0 - with: - name: Bitwarden-${{ env._PACKAGE_VERSION }}-x64.freebsd - path: apps/desktop/dist/Bitwarden-${{ env._PACKAGE_VERSION }}-x64.freebsd - if-no-files-found: error - - - name: Upload .snap artifact - uses: actions/upload-artifact@65c4c4a1ddee5b72f698fdd19549f0f0fb45cf08 # v4.6.0 - with: - name: bitwarden_${{ env._PACKAGE_VERSION }}_amd64.snap - path: apps/desktop/dist/bitwarden_${{ env._PACKAGE_VERSION }}_amd64.snap - if-no-files-found: error - - - name: Upload .AppImage artifact - uses: actions/upload-artifact@65c4c4a1ddee5b72f698fdd19549f0f0fb45cf08 # v4.6.0 - with: - name: Bitwarden-${{ env._PACKAGE_VERSION }}-x86_64.AppImage - path: apps/desktop/dist/Bitwarden-${{ env._PACKAGE_VERSION }}-x86_64.AppImage - if-no-files-found: error - - - name: Upload auto-update artifact - uses: actions/upload-artifact@65c4c4a1ddee5b72f698fdd19549f0f0fb45cf08 # v4.6.0 - with: - name: ${{ needs.setup.outputs.release_channel }}-linux.yml - path: apps/desktop/dist/${{ needs.setup.outputs.release_channel }}-linux.yml - if-no-files-found: error - - - windows: - name: Windows Build - runs-on: windows-2022 - needs: setup - defaults: - run: - shell: pwsh - working-directory: apps/desktop - env: - _PACKAGE_VERSION: ${{ needs.setup.outputs.release_version }} - _NODE_VERSION: ${{ needs.setup.outputs.node_version }} - NODE_OPTIONS: --max_old_space_size=4096 - steps: - - name: Checkout repo - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - with: - ref: ${{ needs.setup.outputs.branch_name }} - - - name: Set up Node - uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4.1.0 - with: - cache: 'npm' - cache-dependency-path: '**/package-lock.json' - node-version: ${{ env._NODE_VERSION }} - - - name: Install AST - run: dotnet tool install --global AzureSignTool --version 4.0.1 - - - name: Set up environment - run: choco install checksum --no-progress - - - name: Print environment - run: | - node --version - npm --version - choco --version - - - name: Login to Azure - uses: Azure/login@e15b166166a8746d1a47596803bd8c1b595455cf # v1.6.0 - with: - creds: ${{ secrets.AZURE_KV_CI_SERVICE_PRINCIPAL }} - - - name: Retrieve secrets - id: retrieve-secrets - uses: bitwarden/gh-actions/get-keyvault-secrets@main - with: - keyvault: "bitwarden-ci" - secrets: "code-signing-vault-url, - code-signing-client-id, - code-signing-tenant-id, - code-signing-client-secret, - code-signing-cert-name" - - - name: Install Node dependencies - run: npm ci - working-directory: ./ - - - name: Build & Sign (dev) - env: - ELECTRON_BUILDER_SIGN: 1 - SIGNING_VAULT_URL: ${{ steps.retrieve-secrets.outputs.code-signing-vault-url }} - SIGNING_CLIENT_ID: ${{ steps.retrieve-secrets.outputs.code-signing-client-id }} - SIGNING_TENANT_ID: ${{ steps.retrieve-secrets.outputs.code-signing-tenant-id }} - SIGNING_CLIENT_SECRET: ${{ steps.retrieve-secrets.outputs.code-signing-client-secret }} - SIGNING_CERT_NAME: ${{ steps.retrieve-secrets.outputs.code-signing-cert-name }} - run: | - npm run build - npm run pack:win - - - name: Rename appx files for store - run: | - Copy-Item "./dist/Bitwarden-${{ env._PACKAGE_VERSION }}-ia32.appx" ` - -Destination "./dist/Bitwarden-${{ env._PACKAGE_VERSION }}-ia32-store.appx" - Copy-Item "./dist/Bitwarden-${{ env._PACKAGE_VERSION }}-x64.appx" ` - -Destination "./dist/Bitwarden-${{ env._PACKAGE_VERSION }}-x64-store.appx" - Copy-Item "./dist/Bitwarden-${{ env._PACKAGE_VERSION }}-arm64.appx" ` - -Destination "./dist/Bitwarden-${{ env._PACKAGE_VERSION }}-arm64-store.appx" - - - name: Package for Chocolatey - run: | - Copy-Item -Path ./stores/chocolatey -Destination ./dist/chocolatey -Recurse - Copy-Item -Path ./dist/nsis-web/Bitwarden-Installer-${{ env._PACKAGE_VERSION }}.exe ` - -Destination ./dist/chocolatey - - $checksum = checksum -t sha256 ./dist/chocolatey/Bitwarden-Installer-${{ env._PACKAGE_VERSION }}.exe - $chocoInstall = "./dist/chocolatey/tools/chocolateyinstall.ps1" - (Get-Content $chocoInstall).replace('__version__', "$env:_PACKAGE_VERSION").replace('__checksum__', $checksum) | Set-Content $chocoInstall - choco pack ./dist/chocolatey/bitwarden.nuspec --version "$env:_PACKAGE_VERSION" --out ./dist/chocolatey - - - name: Fix NSIS artifact names for auto-updater - run: | - Rename-Item -Path .\dist\nsis-web\Bitwarden-${{ env._PACKAGE_VERSION }}-ia32.nsis.7z ` - -NewName bitwarden-${{ env._PACKAGE_VERSION }}-ia32.nsis.7z - Rename-Item -Path .\dist\nsis-web\Bitwarden-${{ env._PACKAGE_VERSION }}-x64.nsis.7z ` - -NewName bitwarden-${{ env._PACKAGE_VERSION }}-x64.nsis.7z - Rename-Item -Path .\dist\nsis-web\Bitwarden-${{ env._PACKAGE_VERSION }}-arm64.nsis.7z ` - -NewName bitwarden-${{ env._PACKAGE_VERSION }}-arm64.nsis.7z - - - name: Upload portable exe artifact - uses: actions/upload-artifact@65c4c4a1ddee5b72f698fdd19549f0f0fb45cf08 # v4.6.0 - with: - name: Bitwarden-Portable-${{ env._PACKAGE_VERSION }}.exe - path: apps/desktop/dist/Bitwarden-Portable-${{ env._PACKAGE_VERSION }}.exe - if-no-files-found: error - - - name: Upload installer exe artifact - uses: actions/upload-artifact@65c4c4a1ddee5b72f698fdd19549f0f0fb45cf08 # v4.6.0 - with: - name: Bitwarden-Installer-${{ env._PACKAGE_VERSION }}.exe - path: apps/desktop/dist/nsis-web/Bitwarden-Installer-${{ env._PACKAGE_VERSION }}.exe - if-no-files-found: error - - - name: Upload appx ia32 artifact - uses: actions/upload-artifact@65c4c4a1ddee5b72f698fdd19549f0f0fb45cf08 # v4.6.0 - with: - name: Bitwarden-${{ env._PACKAGE_VERSION }}-ia32.appx - path: apps/desktop/dist/Bitwarden-${{ env._PACKAGE_VERSION }}-ia32.appx - if-no-files-found: error - - - name: Upload store appx ia32 artifact - uses: actions/upload-artifact@65c4c4a1ddee5b72f698fdd19549f0f0fb45cf08 # v4.6.0 - with: - name: Bitwarden-${{ env._PACKAGE_VERSION }}-ia32-store.appx - path: apps/desktop/dist/Bitwarden-${{ env._PACKAGE_VERSION }}-ia32-store.appx - if-no-files-found: error - - - name: Upload NSIS ia32 artifact - uses: actions/upload-artifact@65c4c4a1ddee5b72f698fdd19549f0f0fb45cf08 # v4.6.0 - with: - name: bitwarden-${{ env._PACKAGE_VERSION }}-ia32.nsis.7z - path: apps/desktop/dist/nsis-web/bitwarden-${{ env._PACKAGE_VERSION }}-ia32.nsis.7z - if-no-files-found: error - - - name: Upload appx x64 artifact - uses: actions/upload-artifact@65c4c4a1ddee5b72f698fdd19549f0f0fb45cf08 # v4.6.0 - with: - name: Bitwarden-${{ env._PACKAGE_VERSION }}-x64.appx - path: apps/desktop/dist/Bitwarden-${{ env._PACKAGE_VERSION }}-x64.appx - if-no-files-found: error - - - name: Upload store appx x64 artifact - uses: actions/upload-artifact@65c4c4a1ddee5b72f698fdd19549f0f0fb45cf08 # v4.6.0 - with: - name: Bitwarden-${{ env._PACKAGE_VERSION }}-x64-store.appx - path: apps/desktop/dist/Bitwarden-${{ env._PACKAGE_VERSION }}-x64-store.appx - if-no-files-found: error - - - name: Upload NSIS x64 artifact - uses: actions/upload-artifact@65c4c4a1ddee5b72f698fdd19549f0f0fb45cf08 # v4.6.0 - with: - name: bitwarden-${{ env._PACKAGE_VERSION }}-x64.nsis.7z - path: apps/desktop/dist/nsis-web/bitwarden-${{ env._PACKAGE_VERSION }}-x64.nsis.7z - if-no-files-found: error - - - name: Upload appx ARM64 artifact - uses: actions/upload-artifact@65c4c4a1ddee5b72f698fdd19549f0f0fb45cf08 # v4.6.0 - with: - name: Bitwarden-${{ env._PACKAGE_VERSION }}-arm64.appx - path: apps/desktop/dist/Bitwarden-${{ env._PACKAGE_VERSION }}-arm64.appx - if-no-files-found: error - - - name: Upload store appx ARM64 artifact - uses: actions/upload-artifact@65c4c4a1ddee5b72f698fdd19549f0f0fb45cf08 # v4.6.0 - with: - name: Bitwarden-${{ env._PACKAGE_VERSION }}-arm64-store.appx - path: apps/desktop/dist/Bitwarden-${{ env._PACKAGE_VERSION }}-arm64-store.appx - if-no-files-found: error - - - name: Upload NSIS ARM64 artifact - uses: actions/upload-artifact@65c4c4a1ddee5b72f698fdd19549f0f0fb45cf08 # v4.6.0 - with: - name: bitwarden-${{ env._PACKAGE_VERSION }}-arm64.nsis.7z - path: apps/desktop/dist/nsis-web/bitwarden-${{ env._PACKAGE_VERSION }}-arm64.nsis.7z - if-no-files-found: error - - - name: Upload nupkg artifact - uses: actions/upload-artifact@65c4c4a1ddee5b72f698fdd19549f0f0fb45cf08 # v4.6.0 - with: - name: bitwarden.${{ env._PACKAGE_VERSION }}.nupkg - path: apps/desktop/dist/chocolatey/bitwarden.${{ env._PACKAGE_VERSION }}.nupkg - if-no-files-found: error - - - name: Upload auto-update artifact - uses: actions/upload-artifact@65c4c4a1ddee5b72f698fdd19549f0f0fb45cf08 # v4.6.0 - with: - name: ${{ needs.setup.outputs.release_channel }}.yml - path: apps/desktop/dist/nsis-web/${{ needs.setup.outputs.release_channel }}.yml - if-no-files-found: error - - - macos-build: - name: MacOS Build - runs-on: macos-13 - needs: setup - env: - _PACKAGE_VERSION: ${{ needs.setup.outputs.release_version }} - _NODE_VERSION: ${{ needs.setup.outputs.node_version }} - NODE_OPTIONS: --max_old_space_size=4096 - defaults: - run: - working-directory: apps/desktop - steps: - - name: Checkout repo - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - with: - ref: ${{ needs.setup.outputs.branch_name }} - - - name: Set up Node - uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4.1.0 - with: - cache: 'npm' - cache-dependency-path: '**/package-lock.json' - node-version: ${{ env._NODE_VERSION }} - - - name: Set up Node-gyp - run: python3 -m pip install setuptools - - - name: Print environment - run: | - node --version - npm --version - echo "GitHub ref: $GITHUB_REF" - echo "GitHub event: $GITHUB_EVENT" - - - name: Cache Build - id: build-cache - uses: actions/cache@1bd1e32a3bdc45362d1e726936510720a7c30a57 # v4.2.0 - with: - path: apps/desktop/build - key: ${{ runner.os }}-${{ github.run_id }}-build - - - name: Cache Safari - id: safari-cache - uses: actions/cache@1bd1e32a3bdc45362d1e726936510720a7c30a57 # v4.2.0 - with: - path: apps/browser/dist/Safari - key: ${{ runner.os }}-${{ github.run_id }}-safari-extension - - - name: Download Provisioning Profiles secrets - env: - ACCOUNT_NAME: bitwardenci - CONTAINER_NAME: profiles - run: | - mkdir -p $HOME/secrets - - az storage blob download --account-name $ACCOUNT_NAME --container-name $CONTAINER_NAME \ - --name bitwarden_desktop_appstore.provisionprofile \ - --file $HOME/secrets/bitwarden_desktop_appstore.provisionprofile \ - --output none - - - name: Get certificates - run: | - mkdir -p $HOME/certificates - - az keyvault secret show --id https://bitwarden-ci.vault.azure.net/certificates/bitwarden-desktop-key | - jq -r .value | base64 -d > $HOME/certificates/bitwarden-desktop-key.p12 - - az keyvault secret show --id https://bitwarden-ci.vault.azure.net/certificates/appstore-app-cert | - jq -r .value | base64 -d > $HOME/certificates/appstore-app-cert.p12 - - az keyvault secret show --id https://bitwarden-ci.vault.azure.net/certificates/appstore-installer-cert | - jq -r .value | base64 -d > $HOME/certificates/appstore-installer-cert.p12 - - az keyvault secret show --id https://bitwarden-ci.vault.azure.net/certificates/devid-app-cert | - jq -r .value | base64 -d > $HOME/certificates/devid-app-cert.p12 - - az keyvault secret show --id https://bitwarden-ci.vault.azure.net/certificates/devid-installer-cert | - jq -r .value | base64 -d > $HOME/certificates/devid-installer-cert.p12 - - az keyvault secret show --id https://bitwarden-ci.vault.azure.net/certificates/macdev-cert | - jq -r .value | base64 -d > $HOME/certificates/macdev-cert.p12 - - - name: Set up keychain - env: - KEYCHAIN_PASSWORD: ${{ secrets.KEYCHAIN_PASSWORD }} - run: | - security create-keychain -p $KEYCHAIN_PASSWORD build.keychain - security default-keychain -s build.keychain - security unlock-keychain -p $KEYCHAIN_PASSWORD build.keychain - security set-keychain-settings -lut 1200 build.keychain - security import "$HOME/certificates/bitwarden-desktop-key.p12" -k build.keychain -P "" \ - -T /usr/bin/codesign -T /usr/bin/security -T /usr/bin/productbuild - - security import "$HOME/certificates/devid-app-cert.p12" -k build.keychain -P "" \ - -T /usr/bin/codesign -T /usr/bin/security -T /usr/bin/productbuild - - security import "$HOME/certificates/devid-installer-cert.p12" -k build.keychain -P "" \ - -T /usr/bin/codesign -T /usr/bin/security -T /usr/bin/productbuild - - security import "$HOME/certificates/appstore-app-cert.p12" -k build.keychain -P "" \ - -T /usr/bin/codesign -T /usr/bin/security -T /usr/bin/productbuild - - security import "$HOME/certificates/appstore-installer-cert.p12" -k build.keychain -P "" \ - -T /usr/bin/codesign -T /usr/bin/security -T /usr/bin/productbuild - - security import "$HOME/certificates/macdev-cert.p12" -k build.keychain -P "" \ - -T /usr/bin/codesign -T /usr/bin/security -T /usr/bin/productbuild - - security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k $KEYCHAIN_PASSWORD build.keychain - - - name: Set up provisioning profiles - run: | - cp $HOME/secrets/bitwarden_desktop_appstore.provisionprofile \ - $GITHUB_WORKSPACE/apps/desktop/bitwarden_desktop_appstore.provisionprofile - - - name: Increment version - shell: pwsh - env: - BUILD_NUMBER: ${{ needs.setup.outputs.build_number }} - run: | - $package = Get-Content -Raw -Path electron-builder.json | ConvertFrom-Json - $package | Add-Member -MemberType NoteProperty -Name buildVersion -Value "$env:BUILD_NUMBER" - $package | ConvertTo-Json -Depth 32 | Set-Content -Path electron-builder.json - - - name: Install Node dependencies - run: npm ci - working-directory: ./ - - - name: Build application (dev) - run: npm run build - - - macos-package-github: - name: MacOS Package GitHub Release Assets - runs-on: macos-13 - needs: - - setup - - macos-build - env: - _PACKAGE_VERSION: ${{ needs.setup.outputs.release_version }} - _NODE_VERSION: ${{ needs.setup.outputs.node_version }} - NODE_OPTIONS: --max_old_space_size=4096 - defaults: - run: - working-directory: apps/desktop - steps: - - name: Checkout repo - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - with: - ref: ${{ needs.setup.outputs.branch_name }} - - - name: Set up Node - uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4.1.0 - with: - cache: 'npm' - cache-dependency-path: '**/package-lock.json' - node-version: ${{ env._NODE_VERSION }} - - - name: Set up Node-gyp - run: python3 -m pip install setuptools - - - name: Print environment - run: | - node --version - npm --version - echo "GitHub ref: $GITHUB_REF" - echo "GitHub event: $GITHUB_EVENT" - - - name: Get Build Cache - id: build-cache - uses: actions/cache@1bd1e32a3bdc45362d1e726936510720a7c30a57 # v4.2.0 - with: - path: apps/desktop/build - key: ${{ runner.os }}-${{ github.run_id }}-build - - - name: Setup Safari Cache - id: safari-cache - uses: actions/cache@1bd1e32a3bdc45362d1e726936510720a7c30a57 # v4.2.0 - with: - path: apps/browser/dist/Safari - key: ${{ runner.os }}-${{ github.run_id }}-safari-extension - - - name: Login to Azure - uses: Azure/login@e15b166166a8746d1a47596803bd8c1b595455cf # v1.6.0 - with: - creds: ${{ secrets.AZURE_KV_CI_SERVICE_PRINCIPAL }} - - - name: Download Provisioning Profiles secrets - env: - ACCOUNT_NAME: bitwardenci - CONTAINER_NAME: profiles - run: | - mkdir -p $HOME/secrets - - az storage blob download --account-name $ACCOUNT_NAME --container-name $CONTAINER_NAME \ - --name bitwarden_desktop_appstore.provisionprofile \ - --file $HOME/secrets/bitwarden_desktop_appstore.provisionprofile \ - --output none - - - name: Get certificates - run: | - mkdir -p $HOME/certificates - - az keyvault secret show --id https://bitwarden-ci.vault.azure.net/certificates/bitwarden-desktop-key | - jq -r .value | base64 -d > $HOME/certificates/bitwarden-desktop-key.p12 - - az keyvault secret show --id https://bitwarden-ci.vault.azure.net/certificates/appstore-app-cert | - jq -r .value | base64 -d > $HOME/certificates/appstore-app-cert.p12 - - az keyvault secret show --id https://bitwarden-ci.vault.azure.net/certificates/appstore-installer-cert | - jq -r .value | base64 -d > $HOME/certificates/appstore-installer-cert.p12 - - az keyvault secret show --id https://bitwarden-ci.vault.azure.net/certificates/devid-app-cert | - jq -r .value | base64 -d > $HOME/certificates/devid-app-cert.p12 - - az keyvault secret show --id https://bitwarden-ci.vault.azure.net/certificates/devid-installer-cert | - jq -r .value | base64 -d > $HOME/certificates/devid-installer-cert.p12 - - az keyvault secret show --id https://bitwarden-ci.vault.azure.net/certificates/macdev-cert | - jq -r .value | base64 -d > $HOME/certificates/macdev-cert.p12 - - - name: Set up keychain - env: - KEYCHAIN_PASSWORD: ${{ secrets.KEYCHAIN_PASSWORD }} - run: | - security create-keychain -p $KEYCHAIN_PASSWORD build.keychain - security default-keychain -s build.keychain - security unlock-keychain -p $KEYCHAIN_PASSWORD build.keychain - security set-keychain-settings -lut 1200 build.keychain - - security import "$HOME/certificates/bitwarden-desktop-key.p12" -k build.keychain -P "" \ - -T /usr/bin/codesign -T /usr/bin/security -T /usr/bin/productbuild - - security import "$HOME/certificates/devid-app-cert.p12" -k build.keychain -P "" \ - -T /usr/bin/codesign -T /usr/bin/security -T /usr/bin/productbuild - - security import "$HOME/certificates/devid-installer-cert.p12" -k build.keychain -P "" \ - -T /usr/bin/codesign -T /usr/bin/security -T /usr/bin/productbuild - - security import "$HOME/certificates/appstore-app-cert.p12" -k build.keychain -P "" \ - -T /usr/bin/codesign -T /usr/bin/security -T /usr/bin/productbuild - - security import "$HOME/certificates/appstore-installer-cert.p12" -k build.keychain -P "" \ - -T /usr/bin/codesign -T /usr/bin/security -T /usr/bin/productbuild - - security import "$HOME/certificates/macdev-cert.p12" -k build.keychain -P "" \ - -T /usr/bin/codesign -T /usr/bin/security -T /usr/bin/productbuild - - security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k $KEYCHAIN_PASSWORD build.keychain - - - name: Set up provisioning profiles - run: | - cp $HOME/secrets/bitwarden_desktop_appstore.provisionprofile \ - $GITHUB_WORKSPACE/apps/desktop/bitwarden_desktop_appstore.provisionprofile - - - name: Increment version - shell: pwsh - env: - BUILD_NUMBER: ${{ needs.setup.outputs.build_number }} - run: | - $package = Get-Content -Raw -Path electron-builder.json | ConvertFrom-Json - $package | Add-Member -MemberType NoteProperty -Name buildVersion -Value "$env:BUILD_NUMBER" - $package | ConvertTo-Json -Depth 32 | Set-Content -Path electron-builder.json - - - name: Install Node dependencies - run: npm ci - working-directory: ./ - - - name: Build - if: steps.build-cache.outputs.cache-hit != 'true' - run: npm run build - - - name: Download artifact from hotfix-rc - if: github.ref == 'refs/heads/hotfix-rc' - uses: bitwarden/gh-actions/download-artifacts@main - with: - workflow: build-browser.yml - workflow_conclusion: success - branch: hotfix-rc - path: ${{ github.workspace }}/browser-build-artifacts - - - name: Download artifact from rc - if: github.ref == 'refs/heads/rc' - uses: bitwarden/gh-actions/download-artifacts@main - with: - workflow: build-browser.yml - workflow_conclusion: success - branch: rc - path: ${{ github.workspace }}/browser-build-artifacts - - - name: Download artifacts from main - if: ${{ github.ref != 'refs/heads/rc' && github.ref != 'refs/heads/hotfix-rc' }} - uses: bitwarden/gh-actions/download-artifacts@main - with: - workflow: build-browser.yml - workflow_conclusion: success - branch: main - path: ${{ github.workspace }}/browser-build-artifacts - - - name: Unzip Safari artifact - run: | - SAFARI_DIR=$(find $GITHUB_WORKSPACE/browser-build-artifacts -name 'dist-safari-*.zip') - echo $SAFARI_DIR - unzip $SAFARI_DIR/dist-safari.zip -d $GITHUB_WORKSPACE/browser-build-artifacts - - - name: Load Safari extension for .dmg - run: | - mkdir PlugIns - cp -r $GITHUB_WORKSPACE/browser-build-artifacts/Safari/dmg/build/Release/safari.appex PlugIns/safari.appex - - - name: Build application (dist) - env: - APPLE_ID_USERNAME: ${{ secrets.APPLE_ID_USERNAME }} - APPLE_ID_PASSWORD: ${{ secrets.APPLE_ID_PASSWORD }} - run: npm run pack:mac - - - name: Upload .zip artifact - uses: actions/upload-artifact@65c4c4a1ddee5b72f698fdd19549f0f0fb45cf08 # v4.6.0 - with: - name: Bitwarden-${{ env._PACKAGE_VERSION }}-universal-mac.zip - path: apps/desktop/dist/Bitwarden-${{ env._PACKAGE_VERSION }}-universal-mac.zip - if-no-files-found: error - - - name: Upload .dmg artifact - uses: actions/upload-artifact@65c4c4a1ddee5b72f698fdd19549f0f0fb45cf08 # v4.6.0 - with: - name: Bitwarden-${{ env._PACKAGE_VERSION }}-universal.dmg - path: apps/desktop/dist/Bitwarden-${{ env._PACKAGE_VERSION }}-universal.dmg - if-no-files-found: error - - - name: Upload .dmg blockmap artifact - uses: actions/upload-artifact@65c4c4a1ddee5b72f698fdd19549f0f0fb45cf08 # v4.6.0 - with: - name: Bitwarden-${{ env._PACKAGE_VERSION }}-universal.dmg.blockmap - path: apps/desktop/dist/Bitwarden-${{ env._PACKAGE_VERSION }}-universal.dmg.blockmap - if-no-files-found: error - - - name: Upload auto-update artifact - uses: actions/upload-artifact@65c4c4a1ddee5b72f698fdd19549f0f0fb45cf08 # v4.6.0 - with: - name: ${{ needs.setup.outputs.release_channel }}-mac.yml - path: apps/desktop/dist/${{ needs.setup.outputs.release_channel }}-mac.yml - if-no-files-found: error - - - macos-package-mas: - name: MacOS Package Prod Release Asset - runs-on: macos-13 - needs: - - setup - - macos-build - env: - _PACKAGE_VERSION: ${{ needs.setup.outputs.release_version }} - _NODE_VERSION: ${{ needs.setup.outputs.node_version }} - NODE_OPTIONS: --max_old_space_size=4096 - defaults: - run: - working-directory: apps/desktop - steps: - - name: Checkout repo - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - with: - ref: ${{ needs.setup.outputs.branch_name }} - - - name: Set up Node - uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4.1.0 - with: - cache: 'npm' - cache-dependency-path: '**/package-lock.json' - node-version: ${{ env._NODE_VERSION }} - - - name: Set up Node-gyp - run: python3 -m pip install setuptools - - - name: Print environment - run: | - node --version - npm --version - echo "GitHub ref: $GITHUB_REF" - echo "GitHub event: $GITHUB_EVENT" - - - name: Get Build Cache - id: build-cache - uses: actions/cache@1bd1e32a3bdc45362d1e726936510720a7c30a57 # v4.2.0 - with: - path: apps/desktop/build - key: ${{ runner.os }}-${{ github.run_id }}-build - - - name: Setup Safari Cache - id: safari-cache - uses: actions/cache@1bd1e32a3bdc45362d1e726936510720a7c30a57 # v4.2.0 - with: - path: apps/browser/dist/Safari - key: ${{ runner.os }}-${{ github.run_id }}-safari-extension - - - name: Download Provisioning Profiles secrets - env: - ACCOUNT_NAME: bitwardenci - CONTAINER_NAME: profiles - run: | - mkdir -p $HOME/secrets - - az storage blob download --account-name $ACCOUNT_NAME --container-name $CONTAINER_NAME \ - --name bitwarden_desktop_appstore.provisionprofile \ - --file $HOME/secrets/bitwarden_desktop_appstore.provisionprofile \ - --output none - - - name: Get certificates - run: | - mkdir -p $HOME/certificates - - az keyvault secret show --id https://bitwarden-ci.vault.azure.net/certificates/bitwarden-desktop-key | - jq -r .value | base64 -d > $HOME/certificates/bitwarden-desktop-key.p12 - - az keyvault secret show --id https://bitwarden-ci.vault.azure.net/certificates/appstore-app-cert | - jq -r .value | base64 -d > $HOME/certificates/appstore-app-cert.p12 - - az keyvault secret show --id https://bitwarden-ci.vault.azure.net/certificates/appstore-installer-cert | - jq -r .value | base64 -d > $HOME/certificates/appstore-installer-cert.p12 - - az keyvault secret show --id https://bitwarden-ci.vault.azure.net/certificates/devid-app-cert | - jq -r .value | base64 -d > $HOME/certificates/devid-app-cert.p12 - - az keyvault secret show --id https://bitwarden-ci.vault.azure.net/certificates/devid-installer-cert | - jq -r .value | base64 -d > $HOME/certificates/devid-installer-cert.p12 - - az keyvault secret show --id https://bitwarden-ci.vault.azure.net/certificates/macdev-cert | - jq -r .value | base64 -d > $HOME/certificates/macdev-cert.p12 - - - name: Set up keychain - env: - KEYCHAIN_PASSWORD: ${{ secrets.KEYCHAIN_PASSWORD }} - run: | - security create-keychain -p $KEYCHAIN_PASSWORD build.keychain - security default-keychain -s build.keychain - security unlock-keychain -p $KEYCHAIN_PASSWORD build.keychain - security set-keychain-settings -lut 1200 build.keychain - - security import "$HOME/certificates/bitwarden-desktop-key.p12" -k build.keychain -P "" \ - -T /usr/bin/codesign -T /usr/bin/security -T /usr/bin/productbuild - - security import "$HOME/certificates/devid-app-cert.p12" -k build.keychain -P "" \ - -T /usr/bin/codesign -T /usr/bin/security -T /usr/bin/productbuild - - security import "$HOME/certificates/devid-installer-cert.p12" -k build.keychain -P "" \ - -T /usr/bin/codesign -T /usr/bin/security -T /usr/bin/productbuild - - security import "$HOME/certificates/appstore-app-cert.p12" -k build.keychain -P "" \ - -T /usr/bin/codesign -T /usr/bin/security -T /usr/bin/productbuild - - security import "$HOME/certificates/appstore-installer-cert.p12" -k build.keychain -P "" \ - -T /usr/bin/codesign -T /usr/bin/security -T /usr/bin/productbuild - - security import "$HOME/certificates/macdev-cert.p12" -k build.keychain -P "" \ - -T /usr/bin/codesign -T /usr/bin/security -T /usr/bin/productbuild - - security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k $KEYCHAIN_PASSWORD build.keychain - - - name: Set up provisioning profiles - run: | - cp $HOME/secrets/bitwarden_desktop_appstore.provisionprofile \ - $GITHUB_WORKSPACE/apps/desktop/bitwarden_desktop_appstore.provisionprofile - - - name: Increment version - shell: pwsh - env: - BUILD_NUMBER: ${{ needs.setup.outputs.build_number }} - run: | - $package = Get-Content -Raw -Path electron-builder.json | ConvertFrom-Json - $package | Add-Member -MemberType NoteProperty -Name buildVersion -Value "$env:BUILD_NUMBER" - $package | ConvertTo-Json -Depth 32 | Set-Content -Path electron-builder.json - - - name: Install Node dependencies - run: npm ci - working-directory: ./ - - - name: Build - if: steps.build-cache.outputs.cache-hit != 'true' - run: npm run build - - - name: Download artifact from hotfix-rc - if: github.ref == 'refs/heads/hotfix-rc' - uses: bitwarden/gh-actions/download-artifacts@main - with: - workflow: build-browser.yml - workflow_conclusion: success - branch: hotfix-rc - path: ${{ github.workspace }}/browser-build-artifacts - - - name: Download artifact from rc - if: github.ref == 'refs/heads/rc' - uses: bitwarden/gh-actions/download-artifacts@main - with: - workflow: build-browser.yml - workflow_conclusion: success - branch: rc - path: ${{ github.workspace }}/browser-build-artifacts - - - name: Download artifact from main - if: ${{ github.ref != 'refs/heads/rc' && github.ref != 'refs/heads/hotfix-rc' }} - uses: bitwarden/gh-actions/download-artifacts@main - with: - workflow: build-browser.yml - workflow_conclusion: success - branch: main - path: ${{ github.workspace }}/browser-build-artifacts - - - name: Unzip Safari artifact - run: | - SAFARI_DIR=$(find $GITHUB_WORKSPACE/browser-build-artifacts -name 'dist-safari-*.zip') - echo $SAFARI_DIR - unzip $SAFARI_DIR/dist-safari.zip -d $GITHUB_WORKSPACE/browser-build-artifacts - - - name: Load Safari extension for App Store - run: | - mkdir PlugIns - cp -r $GITHUB_WORKSPACE/browser-build-artifacts/Safari/mas/build/Release/safari.appex PlugIns/safari.appex - - - name: Build application for App Store - run: npm run pack:mac:mas - env: - APPLE_ID_USERNAME: ${{ secrets.APPLE_ID_USERNAME }} - APPLE_ID_PASSWORD: ${{ secrets.APPLE_ID_PASSWORD }} - - - name: Upload .pkg artifact - uses: actions/upload-artifact@65c4c4a1ddee5b72f698fdd19549f0f0fb45cf08 # v4.6.0 - with: - name: Bitwarden-${{ env._PACKAGE_VERSION }}-universal.pkg - path: apps/desktop/dist/mas-universal/Bitwarden-${{ env._PACKAGE_VERSION }}-universal.pkg - if-no-files-found: error - - release: - name: Release beta channel to S3 - runs-on: ubuntu-22.04 - needs: - - setup - - linux - - windows - - macos-build - - macos-package-github - - macos-package-mas - steps: - - name: Create GitHub deployment - uses: chrnorm/deployment-action@55729fcebec3d284f60f5bcabbd8376437d696b1 # v2.0.7 - id: deployment - with: - token: '${{ secrets.GITHUB_TOKEN }}' - initial-status: 'in_progress' - environment: 'Desktop - Beta' - description: 'Deployment ${{ needs.setup.outputs.release_version }} to channel ${{ needs.setup.outputs.release_channel }} from branch ${{ needs.setup.outputs.branch_name }}' - task: release - - - name: Login to Azure - uses: Azure/login@e15b166166a8746d1a47596803bd8c1b595455cf # v1.6.0 - with: - creds: ${{ secrets.AZURE_KV_CI_SERVICE_PRINCIPAL }} - - - name: Retrieve secrets - id: retrieve-secrets - uses: bitwarden/gh-actions/get-keyvault-secrets@main - with: - keyvault: "bitwarden-ci" - secrets: "aws-electron-access-id, - aws-electron-access-key, - aws-electron-bucket-name" - - - name: Download all artifacts - uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8 - with: - path: apps/desktop/artifacts - - - name: Rename .pkg to .pkg.archive - env: - PKG_VERSION: ${{ needs.setup.outputs.release_version }} - working-directory: apps/desktop/artifacts - run: mv Bitwarden-${{ env.PKG_VERSION }}-universal.pkg Bitwarden-${{ env.PKG_VERSION }}-universal.pkg.archive - - - name: Publish artifacts to S3 - 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 }} - AWS_DEFAULT_REGION: 'us-west-2' - AWS_S3_BUCKET_NAME: ${{ steps.retrieve-secrets.outputs.aws-electron-bucket-name }} - working-directory: apps/desktop/artifacts - run: | - aws s3 cp ./ $AWS_S3_BUCKET_NAME/desktop/ \ - --acl "public-read" \ - --recursive \ - --quiet - - - name: Update deployment status to Success - if: ${{ success() }} - uses: chrnorm/deployment-status@9a72af4586197112e0491ea843682b5dc280d806 # v2.0.3 - with: - token: '${{ secrets.GITHUB_TOKEN }}' - state: 'success' - deployment-id: ${{ steps.deployment.outputs.deployment_id }} - - - name: Update deployment status to Failure - if: ${{ failure() }} - uses: chrnorm/deployment-status@9a72af4586197112e0491ea843682b5dc280d806 # v2.0.3 - with: - token: '${{ secrets.GITHUB_TOKEN }}' - state: 'failure' - deployment-id: ${{ steps.deployment.outputs.deployment_id }} - - remove-branch: - name: Remove branch - runs-on: ubuntu-22.04 - if: always() - needs: - - setup - - linux - - windows - - macos-build - - macos-package-github - - macos-package-mas - - release - steps: - - name: Checkout repo - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - - - name: Setup git config - run: | - git config --global user.name "GitHub Action Bot" - git config --global user.email "41898282+github-actions[bot]@users.noreply.github.com" - git config --global url."https://github.com/".insteadOf ssh://git@github.com/ - git config --global url."https://".insteadOf ssh:// - - name: Remove branch - env: - BRANCH: ${{ needs.setup.outputs.branch_name }} - run: git push origin --delete $BRANCH diff --git a/.github/workflows/release-desktop.yml b/.github/workflows/release-desktop.yml index 5ce0da4cb4b..bfd6115a1a9 100644 --- a/.github/workflows/release-desktop.yml +++ b/.github/workflows/release-desktop.yml @@ -124,7 +124,8 @@ jobs: apps/desktop/artifacts/Bitwarden-${{ env.PKG_VERSION }}-universal.pkg.archive, apps/desktop/artifacts/${{ env.RELEASE_CHANNEL }}.yml, apps/desktop/artifacts/${{ env.RELEASE_CHANNEL }}-linux.yml, - apps/desktop/artifacts/${{ env.RELEASE_CHANNEL }}-mac.yml" + apps/desktop/artifacts/${{ env.RELEASE_CHANNEL }}-mac.yml, + apps/desktop/artifacts/macos-build-number.json" commit: ${{ github.sha }} tag: desktop-v${{ env.PKG_VERSION }} name: Desktop v${{ env.PKG_VERSION }} diff --git a/.github/workflows/repository-management.yml b/.github/workflows/repository-management.yml index d91e0a12afd..ecb8e448a8a 100644 --- a/.github/workflows/repository-management.yml +++ b/.github/workflows/repository-management.yml @@ -36,7 +36,9 @@ on: description: "New version override (leave blank for automatic calculation, example: '2024.1.0')" required: false type: string + permissions: {} + jobs: setup: name: Setup @@ -56,6 +58,7 @@ jobs: fi echo "branch=$BRANCH" >> $GITHUB_OUTPUT + bump_version: name: Bump Version if: ${{ always() }} @@ -66,6 +69,9 @@ jobs: version_cli: ${{ steps.set-final-version-output.outputs.version_cli }} version_desktop: ${{ steps.set-final-version-output.outputs.version_desktop }} version_web: ${{ steps.set-final-version-output.outputs.version_web }} + permissions: + id-token: write + steps: - name: Validate version input format if: ${{ inputs.version_number_override != '' }} @@ -73,12 +79,29 @@ jobs: with: version: ${{ inputs.version_number_override }} + - name: Log in to Azure + uses: bitwarden/gh-actions/azure-login@main + with: + subscription_id: ${{ secrets.AZURE_SUBSCRIPTION_ID }} + tenant_id: ${{ secrets.AZURE_TENANT_ID }} + client_id: ${{ secrets.AZURE_CLIENT_ID }} + + - name: Get Azure Key Vault secrets + id: get-kv-secrets + uses: bitwarden/gh-actions/get-keyvault-secrets@main + with: + keyvault: gh-org-bitwarden + secrets: "BW-GHAPP-ID,BW-GHAPP-KEY" + + - name: Log out from Azure + uses: bitwarden/gh-actions/azure-logout@main + - name: Generate GH App token uses: actions/create-github-app-token@30bf6253fa41bdc8d1501d202ad15287582246b4 # v2.0.3 id: app-token with: - app-id: ${{ secrets.BW_GHAPP_ID }} - private-key: ${{ secrets.BW_GHAPP_KEY }} + app-id: ${{ steps.get-kv-secrets.outputs.BW-GHAPP-ID }} + private-key: ${{ steps.get-kv-secrets.outputs.BW-GHAPP-KEY }} - name: Check out branch uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 @@ -400,6 +423,7 @@ jobs: - name: Push changes if: ${{ steps.version-changed.outputs.changes_to_commit == 'TRUE' }} run: git push + cut_branch: name: Cut branch if: ${{ needs.setup.outputs.branch == 'rc' }} @@ -407,13 +431,33 @@ jobs: - setup - bump_version runs-on: ubuntu-24.04 + permissions: + id-token: write + steps: + - name: Log in to Azure + uses: bitwarden/gh-actions/azure-login@main + with: + subscription_id: ${{ secrets.AZURE_SUBSCRIPTION_ID }} + tenant_id: ${{ secrets.AZURE_TENANT_ID }} + client_id: ${{ secrets.AZURE_CLIENT_ID }} + + - name: Get Azure Key Vault secrets + id: get-kv-secrets + uses: bitwarden/gh-actions/get-keyvault-secrets@main + with: + keyvault: gh-org-bitwarden + secrets: "BW-GHAPP-ID,BW-GHAPP-KEY" + + - name: Log out from Azure + uses: bitwarden/gh-actions/azure-logout@main + - name: Generate GH App token uses: actions/create-github-app-token@30bf6253fa41bdc8d1501d202ad15287582246b4 # v2.0.3 id: app-token with: - app-id: ${{ secrets.BW_GHAPP_ID }} - private-key: ${{ secrets.BW_GHAPP_KEY }} + app-id: ${{ steps.get-kv-secrets.outputs.BW-GHAPP-ID }} + private-key: ${{ steps.get-kv-secrets.outputs.BW-GHAPP-KEY }} - name: Check out target ref uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 @@ -435,4 +479,4 @@ jobs: BRANCH_NAME: ${{ needs.setup.outputs.branch }} run: | git switch --quiet --create $BRANCH_NAME - git push --quiet --set-upstream origin $BRANCH_NAME \ No newline at end of file + git push --quiet --set-upstream origin $BRANCH_NAME diff --git a/.github/workflows/retrieve-current-desktop-rollout.yml b/.github/workflows/retrieve-current-desktop-rollout.yml index 2ab3072f566..c45453ed9d0 100644 --- a/.github/workflows/retrieve-current-desktop-rollout.yml +++ b/.github/workflows/retrieve-current-desktop-rollout.yml @@ -11,11 +11,15 @@ jobs: rollout: name: Retrieve Rollout Percentage runs-on: ubuntu-22.04 + permissions: + id-token: write steps: - - name: Login to Azure - uses: Azure/login@e15b166166a8746d1a47596803bd8c1b595455cf # v1.6.0 + - name: Log in to Azure + uses: bitwarden/gh-actions/azure-login@main with: - creds: ${{ secrets.AZURE_KV_CI_SERVICE_PRINCIPAL }} + subscription_id: ${{ secrets.AZURE_SUBSCRIPTION_ID }} + tenant_id: ${{ secrets.AZURE_TENANT_ID }} + client_id: ${{ secrets.AZURE_CLIENT_ID }} - name: Retrieve secrets id: retrieve-secrets @@ -26,6 +30,9 @@ jobs: aws-electron-access-key, aws-electron-bucket-name" + - name: Log out from Azure + uses: bitwarden/gh-actions/azure-logout@main + - name: Download channel update info files from S3 env: AWS_ACCESS_KEY_ID: ${{ steps.retrieve-secrets.outputs.aws-electron-access-id }} diff --git a/.github/workflows/review-code.yml b/.github/workflows/review-code.yml new file mode 100644 index 00000000000..83cbc3bb547 --- /dev/null +++ b/.github/workflows/review-code.yml @@ -0,0 +1,124 @@ +name: Review code + +on: + pull_request: + types: [opened, synchronize, reopened] + +permissions: {} + +jobs: + review: + name: Review + runs-on: ubuntu-24.04 + permissions: + contents: read + id-token: write + pull-requests: write + + steps: + - name: Check out repo + uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 + with: + fetch-depth: 0 + persist-credentials: false + + - name: Check for Vault team changes + id: check_changes + run: | + # Ensure we have the base branch + git fetch origin ${{ github.base_ref }} + + echo "Comparing changes between origin/${{ github.base_ref }} and HEAD" + CHANGED_FILES=$(git diff --name-only origin/${{ github.base_ref }}...HEAD) + + if [ -z "$CHANGED_FILES" ]; then + echo "Zero files changed" + echo "vault_team_changes=false" >> $GITHUB_OUTPUT + exit 0 + fi + + # Handle variations in spacing and multiple teams + VAULT_PATTERNS=$(grep -E "@bitwarden/team-vault-dev(\s|$)" .github/CODEOWNERS 2>/dev/null | awk '{print $1}') + + if [ -z "$VAULT_PATTERNS" ]; then + echo "⚠️ No patterns found for @bitwarden/team-vault-dev in CODEOWNERS" + echo "vault_team_changes=false" >> $GITHUB_OUTPUT + exit 0 + fi + + vault_team_changes=false + for pattern in $VAULT_PATTERNS; do + echo "Checking pattern: $pattern" + + # Handle **/directory patterns + if [[ "$pattern" == "**/"* ]]; then + # Remove the **/ prefix + dir_pattern="${pattern#\*\*/}" + # Check if any file contains this directory in its path + if echo "$CHANGED_FILES" | grep -qE "(^|/)${dir_pattern}(/|$)"; then + vault_team_changes=true + echo "✅ Found files matching pattern: $pattern" + echo "$CHANGED_FILES" | grep -E "(^|/)${dir_pattern}(/|$)" | sed 's/^/ - /' + break + fi + else + # Handle other patterns (shouldn't happen based on your CODEOWNERS) + if echo "$CHANGED_FILES" | grep -q "$pattern"; then + vault_team_changes=true + echo "✅ Found files matching pattern: $pattern" + echo "$CHANGED_FILES" | grep "$pattern" | sed 's/^/ - /' + break + fi + fi + done + + echo "vault_team_changes=$vault_team_changes" >> $GITHUB_OUTPUT + + if [ "$vault_team_changes" = "true" ]; then + echo "" + echo "✅ Vault team changes detected - proceeding with review" + else + echo "" + echo "❌ No Vault team changes detected - skipping review" + fi + + - name: Review with Claude Code + if: steps.check_changes.outputs.vault_team_changes == 'true' + uses: anthropics/claude-code-action@ac1a3207f3f00b4a37e2f3a6f0935733c7c64651 # v1.0.11 + with: + anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }} + track_progress: true + use_sticky_comment: true + prompt: | + REPO: ${{ github.repository }} + PR NUMBER: ${{ github.event.pull_request.number }} + TITLE: ${{ github.event.pull_request.title }} + BODY: ${{ github.event.pull_request.body }} + AUTHOR: ${{ github.event.pull_request.user.login }} + COMMIT: ${{ github.event.pull_request.head.sha }} + + Please review this pull request with a focus on: + - Code quality and best practices + - Potential bugs or issues + - Security implications + - Performance considerations + + Note: The PR branch is already checked out in the current working directory. + + Provide a comprehensive review including: + - Summary of changes since last review + - Critical issues found (be thorough) + - Suggested improvements (be thorough) + - Good practices observed (be concise - list only the most notable items without elaboration) + - Action items for the author + - Leverage collapsible
sections where appropriate for lengthy explanations or code snippets to enhance human readability + + When reviewing subsequent commits: + - Track status of previously identified issues (fixed/unfixed/reopened) + - Identify NEW problems introduced since last review + - Note if fixes introduced new issues + + IMPORTANT: Be comprehensive about issues and improvements. For good practices, be brief - just note what was done well without explaining why or praising excessively. + + claude_args: | + --allowedTools "mcp__github_comment__update_claude_comment,mcp__github_inline_comment__create_inline_comment,Bash(gh pr diff:*),Bash(gh pr view:*)" diff --git a/.github/workflows/scan.yml b/.github/workflows/scan.yml index 59ef1e0734e..57774fa9991 100644 --- a/.github/workflows/scan.yml +++ b/.github/workflows/scan.yml @@ -10,79 +10,47 @@ on: pull_request: types: [opened, synchronize, reopened] branches-ignore: - - main + - "main" pull_request_target: types: [opened, synchronize, reopened] branches: - "main" +permissions: {} + jobs: check-run: name: Check PR run uses: bitwarden/gh-actions/.github/workflows/check-run.yml@main + permissions: + contents: read sast: - name: SAST scan - runs-on: ubuntu-22.04 + name: Checkmarx + uses: bitwarden/gh-actions/.github/workflows/_checkmarx.yml@main needs: check-run + secrets: + AZURE_SUBSCRIPTION_ID: ${{ secrets.AZURE_SUBSCRIPTION_ID }} + AZURE_TENANT_ID: ${{ secrets.AZURE_TENANT_ID }} + AZURE_CLIENT_ID: ${{ secrets.AZURE_CLIENT_ID }} permissions: contents: read pull-requests: write security-events: write - - steps: - - name: Check out repo - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - with: - ref: ${{ github.event.pull_request.head.sha }} - - - name: Scan with Checkmarx - uses: checkmarx/ast-github-action@184bf2f64f55d1c93fd6636d539edf274703e434 # 2.0.41 - env: - INCREMENTAL: "${{ contains(github.event_name, 'pull_request') && '--sast-incremental' || '' }}" - with: - project_name: ${{ github.repository }} - cx_tenant: ${{ secrets.CHECKMARX_TENANT }} - base_uri: https://ast.checkmarx.net/ - cx_client_id: ${{ secrets.CHECKMARX_CLIENT_ID }} - cx_client_secret: ${{ secrets.CHECKMARX_SECRET }} - additional_params: | - --report-format sarif \ - --filter "state=TO_VERIFY;PROPOSED_NOT_EXPLOITABLE;CONFIRMED;URGENT" \ - --output-path . ${{ env.INCREMENTAL }} - - - name: Upload Checkmarx results to GitHub - uses: github/codeql-action/upload-sarif@d68b2d4edb4189fd2a5366ac14e72027bd4b37dd # v3.28.2 - with: - sarif_file: cx_result.sarif - sha: ${{ contains(github.event_name, 'pull_request') && github.event.pull_request.head.sha || github.sha }} - ref: ${{ contains(github.event_name, 'pull_request') && format('refs/pull/{0}/head', github.event.pull_request.number) || github.ref }} + id-token: write quality: - name: Quality scan - runs-on: ubuntu-22.04 + name: Sonar + uses: bitwarden/gh-actions/.github/workflows/_sonar.yml@main needs: check-run + secrets: + AZURE_SUBSCRIPTION_ID: ${{ secrets.AZURE_SUBSCRIPTION_ID }} + AZURE_TENANT_ID: ${{ secrets.AZURE_TENANT_ID }} + AZURE_CLIENT_ID: ${{ secrets.AZURE_CLIENT_ID }} permissions: contents: read pull-requests: write - - steps: - - name: Check out repo - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - with: - fetch-depth: 0 - ref: ${{ github.event.pull_request.head.sha }} - - - name: Scan with SonarCloud - uses: sonarsource/sonarqube-scan-action@2500896589ef8f7247069a56136f8dc177c27ccf # v5.2.0 - env: - SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} - with: - args: > - -Dsonar.organization=${{ github.repository_owner }} - -Dsonar.projectKey=${{ github.repository_owner }}_${{ github.event.repository.name }} - -Dsonar.tests=. - -Dsonar.sources=. - -Dsonar.test.inclusions=**/*.spec.ts - -Dsonar.exclusions=**/*.spec.ts - -Dsonar.pullrequest.key=${{ github.event.pull_request.number }} + id-token: write + with: + sonar-test-inclusions: "**/*.spec.ts" + sonar-exclusions: "**/*.spec.ts" diff --git a/.github/workflows/staged-rollout-desktop.yml b/.github/workflows/staged-rollout-desktop.yml index 4ec3af3be97..4adf81100bd 100644 --- a/.github/workflows/staged-rollout-desktop.yml +++ b/.github/workflows/staged-rollout-desktop.yml @@ -18,11 +18,15 @@ jobs: rollout: name: Update Rollout Percentage runs-on: ubuntu-22.04 + permissions: + id-token: write steps: - - name: Login to Azure - uses: Azure/login@e15b166166a8746d1a47596803bd8c1b595455cf # v1.6.0 + - name: Log in to Azure + uses: bitwarden/gh-actions/azure-login@main with: - creds: ${{ secrets.AZURE_KV_CI_SERVICE_PRINCIPAL }} + subscription_id: ${{ secrets.AZURE_SUBSCRIPTION_ID }} + tenant_id: ${{ secrets.AZURE_TENANT_ID }} + client_id: ${{ secrets.AZURE_CLIENT_ID }} - name: Retrieve secrets id: retrieve-secrets @@ -33,6 +37,9 @@ jobs: aws-electron-access-key, aws-electron-bucket-name" + - name: Log out from Azure + uses: bitwarden/gh-actions/azure-logout@main + - name: Download channel update info files from S3 env: AWS_ACCESS_KEY_ID: ${{ steps.retrieve-secrets.outputs.aws-electron-access-id }} diff --git a/.github/workflows/test-browser-interactions.yml b/.github/workflows/test-browser-interactions.yml new file mode 100644 index 00000000000..3af1a1a8e9d --- /dev/null +++ b/.github/workflows/test-browser-interactions.yml @@ -0,0 +1,84 @@ +name: Autofill BIT checks +run-name: Autofill BIT checks on ${{ github.event.workflow_run.head_branch }} build + +on: + workflow_run: + workflows: ["Build Browser"] + types: + - completed + +jobs: + check-files: + name: Check files + runs-on: ubuntu-22.04 + if: ${{ github.event.workflow_run.conclusion == 'success' }} + permissions: + actions: write + contents: read + id-token: write + steps: + - name: Checkout code + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + fetch-depth: 0 + + - name: Check for job requirements + if: ${{ !github.event.workflow_run.pull_requests || !github.event.workflow_run.head_branch }} + env: + GH_TOKEN: ${{ github.token }} + run: | + gh run cancel ${{ github.run_id }} + gh run watch ${{ github.run_id }} + + - name: Log in to Azure + uses: bitwarden/gh-actions/azure-login@main + with: + subscription_id: ${{ secrets.AZURE_SUBSCRIPTION_ID }} + tenant_id: ${{ secrets.AZURE_TENANT_ID }} + client_id: ${{ secrets.AZURE_CLIENT_ID }} + + - name: Get Azure Key Vault secrets + id: get-kv-secrets + uses: bitwarden/gh-actions/get-keyvault-secrets@main + with: + keyvault: gh-org-bitwarden + secrets: "BW-GHAPP-ID,BW-GHAPP-KEY" + + - name: Log out from Azure + uses: bitwarden/gh-actions/azure-logout@main + + - name: Generate GH App token + uses: actions/create-github-app-token@30bf6253fa41bdc8d1501d202ad15287582246b4 # v2.0.3 + id: app-token + with: + app-id: ${{ steps.get-kv-secrets.outputs.BW-GHAPP-ID }} + private-key: ${{ steps.get-kv-secrets.outputs.BW-GHAPP-KEY }} + owner: bitwarden + repositories: browser-interactions-testing + permission-actions: write + + - name: Get changed files + id: changed-files + uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3.0.2 + with: + list-files: shell + ref: ${{ github.event.workflow_run.head_branch }} + token: ${{ secrets.GITHUB_TOKEN }} + filters: | + monitored: + - 'apps/browser/src/autofill/**' + - 'apps/browser/src/background/**' + - 'apps/browser/src/platform/services/browser-script-injector.service.ts' + + - name: Trigger test-all workflow in browser-interactions-testing + if: steps.changed-files.outputs.monitored == 'true' + uses: peter-evans/repository-dispatch@ff45666b9427631e3450c54a1bcbee4d9ff4d7c0 # v3.0.0 + with: + token: ${{ steps.app-token.outputs.token }} + repository: "bitwarden/browser-interactions-testing" + event-type: trigger-bit-tests + client-payload: |- + { + "origin_issue": ${{ github.event.workflow_run.pull_requests[0].number }}, + "origin_branch": "${{ github.event.workflow_run.pull_requests[0].head.ref }}" + } diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index a8bfd368884..680bfb87cfe 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -34,7 +34,7 @@ jobs: echo "node_version=$NODE_VERSION" >> $GITHUB_OUTPUT - name: Set up Node - uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4.1.0 + uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0 with: cache: 'npm' cache-dependency-path: '**/package-lock.json' @@ -125,8 +125,8 @@ jobs: - name: Test Windows if: ${{ matrix.os=='windows-2022'}} - working-directory: ./apps/desktop/desktop_native/core - run: cargo test -- --test-threads=1 + working-directory: ./apps/desktop/desktop_native + run: cargo test --workspace --exclude=desktop_napi -- --test-threads=1 rust-coverage: name: Rust Coverage @@ -170,13 +170,13 @@ jobs: uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: Download jest coverage - uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8 + uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0 with: name: jest-coverage path: ./ - name: Download rust coverage - uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8 + uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0 with: name: rust-coverage path: ./apps/desktop/desktop_native diff --git a/.github/workflows/version-auto-bump.yml b/.github/workflows/version-auto-bump.yml index e8bd1dde246..3cb5646886a 100644 --- a/.github/workflows/version-auto-bump.yml +++ b/.github/workflows/version-auto-bump.yml @@ -9,13 +9,33 @@ jobs: bump-version: name: Bump Desktop Version runs-on: ubuntu-24.04 + permissions: + id-token: write + contents: write steps: + - name: Log in to Azure + uses: bitwarden/gh-actions/azure-login@main + with: + subscription_id: ${{ secrets.AZURE_SUBSCRIPTION_ID }} + tenant_id: ${{ secrets.AZURE_TENANT_ID }} + client_id: ${{ secrets.AZURE_CLIENT_ID }} + + - name: Get Azure Key Vault secrets + id: get-kv-secrets + uses: bitwarden/gh-actions/get-keyvault-secrets@main + with: + keyvault: gh-org-bitwarden + secrets: "BW-GHAPP-ID,BW-GHAPP-KEY" + + - name: Log out from Azure + uses: bitwarden/gh-actions/azure-logout@main + - name: Generate GH App token uses: actions/create-github-app-token@30bf6253fa41bdc8d1501d202ad15287582246b4 # v2.0.3 id: app-token with: - app-id: ${{ secrets.BW_GHAPP_ID }} - private-key: ${{ secrets.BW_GHAPP_KEY }} + app-id: ${{ steps.get-kv-secrets.outputs.BW-GHAPP-ID }} + private-key: ${{ steps.get-kv-secrets.outputs.BW-GHAPP-KEY }} - name: Check out target ref uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 diff --git a/.gitignore b/.gitignore index 0fa968aa47c..61a20195592 100644 --- a/.gitignore +++ b/.gitignore @@ -10,6 +10,8 @@ Thumbs.db *.launch .settings/ *.sublime-workspace +.claude +.serena # Visual Studio Code .vscode/* diff --git a/.npmrc b/.npmrc index cffe8cdef13..421cf18217d 100644 --- a/.npmrc +++ b/.npmrc @@ -1 +1,4 @@ save-exact=true +# Increase available heap size to avoid running out of memory when compiling. +# This applies to all npm scripts in this repository. +node-options=--max-old-space-size=8192 \ No newline at end of file diff --git a/.storybook/main.ts b/.storybook/main.ts index 879e87fe376..d3811bb178d 100644 --- a/.storybook/main.ts +++ b/.storybook/main.ts @@ -10,6 +10,8 @@ const config: StorybookConfig = { "../libs/auth/src/**/*.stories.@(js|jsx|ts|tsx)", "../libs/dirt/card/src/**/*.mdx", "../libs/dirt/card/src/**/*.stories.@(js|jsx|ts|tsx)", + "../libs/pricing/src/**/*.mdx", + "../libs/pricing/src/**/*.stories.@(js|jsx|ts|tsx)", "../libs/tools/send/send-ui/src/**/*.mdx", "../libs/tools/send/send-ui/src/**/*.stories.@(js|jsx|ts|tsx)", "../libs/vault/src/**/*.mdx", diff --git a/.storybook/preview.tsx b/.storybook/preview.tsx index 59b5287f3a3..2480eef505d 100644 --- a/.storybook/preview.tsx +++ b/.storybook/preview.tsx @@ -8,7 +8,7 @@ setCompodocJson(docJson); const wrapperDecorator = componentWrapperDecorator((story) => { return /*html*/ ` -
+
${story}
`; diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 00000000000..dd3b6445edd --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,108 @@ +# Bitwarden Clients - Claude Code Configuration + +## Project Context Files + +**Read these files before reviewing to ensure that you fully understand the project and contributing guidelines** + +1. @README.md +2. @CONTRIBUTING.md +3. @.github/PULL_REQUEST_TEMPLATE.md + +## Critical Rules + +- **NEVER** use code regions: If complexity suggests regions, refactor for better readability + +- **CRITICAL**: new encryption logic should not be added to this repo. + +- **NEVER** send unencrypted vault data to API services + +- **NEVER** commit secrets, credentials, or sensitive information. + +- **NEVER** log decrypted data, encryption keys, or PII + - No vault data in error messages or console logs + +- **ALWAYS** Respect configuration files at the root and within each app/library (e.g., `eslint.config.mjs`, `jest.config.js`, `tsconfig.json`). + +## Mono-Repo Architecture + +This repository is organized as a **monorepo** containing multiple applications and libraries. The +main directories are: + +- `apps/` – Contains all application projects (e.g., browser, cli, desktop, web). Each app is + self-contained with its own configuration, source code, and tests. +- `libs/` – Contains shared libraries and modules used across multiple apps. Libraries are organized + by team name, domain, functionality (e.g., common, ui, platform, key-management). + +**Strict boundaries** must be maintained between apps and libraries. Do not introduce +cross-dependencies that violate the intended modular structure. Always consult and respect the +dependency rules defined in `eslint.config.mjs`, `nx.json`, and other configuration files. + +## Angular Architecture Patterns + +**Observable Data Services (ADR-0003):** + +- Services expose RxJS Observable streams for state management +- Components subscribe using `async` pipe (NOT explicit subscriptions in most cases) + Pattern: + +```typescript +// Service +private _folders = new BehaviorSubject([]); +readonly folders$ = this._folders.asObservable(); + +// Component +folders$ = this.folderService.folders$; +// Template:
+``` + +For explicit subscriptions, MUST use `takeUntilDestroyed()`: + +```typescript +constructor() { + this.observable$.pipe(takeUntilDestroyed()).subscribe(...); +} +``` + +**Angular Signals (ADR-0027):** + +Encourage the use of Signals **only** in Angular components and presentational services. + +Use **RxJS** for: + +- Services used across Angular and non-Angular clients +- Complex reactive workflows +- Interop with existing Observable-based code + +**NO TypeScript Enums (ADR-0025):** + +- Use const objects with type aliases instead +- Legacy enums exist but don't add new ones + +Pattern: + +```typescript +// ✅ DO +export const CipherType = Object.freeze({ + Login: 1, + SecureNote: 2, +} as const); +export type CipherType = (typeof CipherType)[keyof typeof CipherType]; + +// ❌ DON'T +enum CipherType { + Login = 1, + SecureNote = 2, +} +``` + +Example: `/libs/common/src/vault/enums/cipher-type.ts` + +## References + +- [Web Clients Architecture](https://contributing.bitwarden.com/architecture/clients) +- [Architectural Decision Records (ADRs)](https://contributing.bitwarden.com/architecture/adr/) +- [Contributing Guide](https://contributing.bitwarden.com/) +- [Web Clients Setup Guide](https://contributing.bitwarden.com/getting-started/clients/) +- [Code Style](https://contributing.bitwarden.com/contributing/code-style/) +- [Security Whitepaper](https://bitwarden.com/help/bitwarden-security-white-paper/) +- [Security Definitions](https://contributing.bitwarden.com/architecture/security/definitions) diff --git a/apps/browser/CLAUDE.md b/apps/browser/CLAUDE.md new file mode 100644 index 00000000000..a718f5bfd7c --- /dev/null +++ b/apps/browser/CLAUDE.md @@ -0,0 +1,22 @@ +# Browser Extension - Critical Rules + +- **NEVER** use `chrome.*` or `browser.*` APIs directly in business logic + - Always use `BrowserApi` abstraction: `/apps/browser/src/platform/browser/browser-api.ts` + - Required for cross-browser compatibility (Chrome/Firefox/Safari/Opera) + +- **ALWAYS** use `BrowserApi.addListener()` for event listeners in popup context + - Safari requires manual cleanup to prevent memory leaks + - DON'T use native `chrome.*.addListener()` or `browser.*.addListener()` directly + +- **CRITICAL**: Safari has tab query bugs + - Use `BrowserApi.tabsQueryFirstCurrentWindowForSafari()` when querying current window tabs + - Safari can return tabs from multiple windows incorrectly + +## Manifest V3 + +- Extension uses Web Extension API Manifest V3 +- **Service workers replace background pages** + - Background context runs as service worker (can be terminated anytime) + - DON'T assume background page persists indefinitely + - Use message passing for communication between contexts + - `chrome.extension.getBackgroundPage()` returns `null` in MV3 diff --git a/apps/browser/package.json b/apps/browser/package.json index 16e460a9025..744b53688b2 100644 --- a/apps/browser/package.json +++ b/apps/browser/package.json @@ -1,32 +1,60 @@ { "name": "@bitwarden/browser", - "version": "2025.6.1", + "version": "2025.10.1", "scripts": { "build": "npm run build:chrome", + "build:bit": "npm run build:bit:chrome", "build:chrome": "cross-env BROWSER=chrome MANIFEST_VERSION=3 NODE_OPTIONS=\"--max-old-space-size=8192\" webpack", + "build:bit:chrome": "cross-env BROWSER=chrome MANIFEST_VERSION=3 NODE_OPTIONS=\"--max-old-space-size=8192\" webpack -c ../../bitwarden_license/bit-browser/webpack.config.js", "build:edge": "cross-env BROWSER=edge MANIFEST_VERSION=3 NODE_OPTIONS=\"--max-old-space-size=8192\" webpack", + "build:bit:edge": "cross-env BROWSER=edge MANIFEST_VERSION=3 NODE_OPTIONS=\"--max-old-space-size=8192\" webpack -c ../../bitwarden_license/bit-browser/webpack.config.js", "build:firefox": "cross-env BROWSER=firefox NODE_OPTIONS=\"--max-old-space-size=8192\" webpack", + "build:bit:firefox": "cross-env BROWSER=firefox NODE_OPTIONS=\"--max-old-space-size=8192\" webpack -c ../../bitwarden_license/bit-browser/webpack.config.js", "build:opera": "cross-env BROWSER=opera MANIFEST_VERSION=3 NODE_OPTIONS=\"--max-old-space-size=8192\" webpack", + "build:bit:opera": "cross-env BROWSER=opera MANIFEST_VERSION=3 NODE_OPTIONS=\"--max-old-space-size=8192\" webpack -c ../../bitwarden_license/bit-browser/webpack.config.js", "build:safari": "cross-env BROWSER=safari NODE_OPTIONS=\"--max-old-space-size=8192\" webpack", + "build:bit:safari": "cross-env BROWSER=safari NODE_OPTIONS=\"--max-old-space-size=8192\" webpack -c ../../bitwarden_license/bit-browser/webpack.config.js", "build:watch": "npm run build:watch:chrome", "build:watch:chrome": "npm run build:chrome -- --watch", + "build:bit:watch:chrome": "npm run build:bit:chrome -- --watch", "build:watch:edge": "npm run build:edge -- --watch", + "build:bit:watch:edge": "npm run build:bit:edge -- --watch", "build:watch:firefox": "npm run build:firefox -- --watch", + "build:bit:watch:firefox": "npm run build:bit:firefox -- --watch", "build:watch:opera": "npm run build:opera -- --watch", + "build:bit:watch:opera": "npm run build:bit:opera -- --watch", "build:watch:safari": "npm run build:safari -- --watch", + "build:bit:watch:safari": "npm run build:bit:safari -- --watch", + "build:watch:firefox:mv3": "cross-env MANIFEST_VERSION=3 npm run build:watch:firefox", + "build:bit:watch:firefox:mv3": "cross-env MANIFEST_VERSION=3 npm run build:bit:watch:firefox", + "build:watch:safari:mv3": "cross-env MANIFEST_VERSION=3 npm run build:watch:safari", + "build:bit:watch:safari:mv3": "cross-env MANIFEST_VERSION=3 npm run build:bit:watch:safari", "build:prod:chrome": "cross-env NODE_ENV=production npm run build:chrome", + "build:bit:prod:chrome": "cross-env NODE_ENV=production npm run build:bit:chrome", "build:prod:edge": "cross-env NODE_ENV=production npm run build:edge", + "build:bit:prod:edge": "cross-env NODE_ENV=production npm run build:bit:edge", "build:prod:firefox": "cross-env NODE_ENV=production npm run build:firefox", + "build:bit:prod:firefox": "cross-env NODE_ENV=production npm run build:bit:firefox", "build:prod:opera": "cross-env NODE_ENV=production npm run build:opera", + "build:bit:prod:opera": "cross-env NODE_ENV=production npm run build:bit:opera", "build:prod:safari": "cross-env NODE_ENV=production npm run build:safari", + "build:bit:prod:safari": "cross-env NODE_ENV=production npm run build:bit:safari", "dist:chrome": "npm run build:prod:chrome && mkdir -p dist && ./scripts/compress.sh dist-chrome.zip", + "dist:bit:chrome": "npm run build:bit:prod:chrome && mkdir -p dist && ./scripts/compress.sh bit-dist-chrome.zip", "dist:edge": "npm run build:prod:edge && mkdir -p dist && ./scripts/compress.sh dist-edge.zip", + "dist:bit:edge": "npm run build:bit:prod:edge && mkdir -p dist && ./scripts/compress.sh bit-dist-edge.zip", "dist:firefox": "npm run build:prod:firefox && mkdir -p dist && ./scripts/compress.sh dist-firefox.zip", + "dist:bit:firefox": "npm run build:bit:prod:firefox && mkdir -p dist && ./scripts/compress.sh bit-dist-firefox.zip", "dist:opera": "npm run build:prod:opera && mkdir -p dist && ./scripts/compress.sh dist-opera.zip", + "dist:bit:opera": "npm run build:bit:prod:opera && mkdir -p dist && ./scripts/compress.sh bit-dist-opera.zip", "dist:safari": "npm run build:prod:safari && ./scripts/package-safari.ps1", + "dist:bit:safari": "npm run build:bit:prod:safari && ./scripts/package-safari.ps1", "dist:firefox:mv3": "cross-env MANIFEST_VERSION=3 npm run dist:firefox", + "dist:bit:firefox:mv3": "cross-env MANIFEST_VERSION=3 npm run dist:bit:firefox", "dist:opera:mv3": "cross-env MANIFEST_VERSION=3 npm run dist:opera", + "dist:bit:opera:mv3": "cross-env MANIFEST_VERSION=3 npm run dist:bit:opera", "dist:safari:mv3": "cross-env MANIFEST_VERSION=3 npm run dist:safari", + "dist:bit:safari:mv3": "cross-env MANIFEST_VERSION=3 npm run dist:bit:safari", "test": "jest", "test:watch": "jest --watch", "test:watch:all": "jest --watchAll", diff --git a/apps/browser/project.json b/apps/browser/project.json new file mode 100644 index 00000000000..9a8df56c170 --- /dev/null +++ b/apps/browser/project.json @@ -0,0 +1,494 @@ +{ + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "name": "browser", + "projectType": "application", + "sourceRoot": "apps/browser/src", + "tags": ["scope:browser", "type:app"], + "targets": { + "build": { + "executor": "@nx/webpack:webpack", + "outputs": ["{options.outputPath}"], + "defaultConfiguration": "chrome-dev", + "options": { + "outputPath": "dist/apps/browser", + "webpackConfig": "apps/browser/webpack.config.js", + "tsConfig": "apps/browser/tsconfig.json", + "main": "apps/browser/src/popup/main.ts", + "target": "web", + "compiler": "tsc" + }, + "configurations": { + "chrome": { + "mode": "production", + "outputPath": "dist/apps/browser/chrome", + "env": { + "BROWSER": "chrome", + "MANIFEST_VERSION": "3", + "NODE_ENV": "production" + } + }, + "chrome-dev": { + "mode": "development", + "outputPath": "dist/apps/browser/chrome-dev", + "env": { + "BROWSER": "chrome", + "MANIFEST_VERSION": "3", + "NODE_ENV": "development" + } + }, + "edge": { + "mode": "production", + "outputPath": "dist/apps/browser/edge", + "env": { + "BROWSER": "edge", + "MANIFEST_VERSION": "3", + "NODE_ENV": "production" + } + }, + "edge-dev": { + "mode": "development", + "outputPath": "dist/apps/browser/edge-dev", + "env": { + "BROWSER": "edge", + "MANIFEST_VERSION": "3", + "NODE_ENV": "development" + } + }, + "firefox": { + "mode": "production", + "outputPath": "dist/apps/browser/firefox", + "env": { + "BROWSER": "firefox", + "MANIFEST_VERSION": "3", + "NODE_ENV": "production" + } + }, + "firefox-dev": { + "mode": "development", + "outputPath": "dist/apps/browser/firefox-dev", + "env": { + "BROWSER": "firefox", + "MANIFEST_VERSION": "3", + "NODE_ENV": "development" + } + }, + "firefox-mv2": { + "mode": "production", + "outputPath": "dist/apps/browser/firefox-mv2", + "env": { + "BROWSER": "firefox", + "MANIFEST_VERSION": "2", + "NODE_ENV": "production" + } + }, + "firefox-mv2-dev": { + "mode": "development", + "outputPath": "dist/apps/browser/firefox-mv2-dev", + "env": { + "BROWSER": "firefox", + "MANIFEST_VERSION": "2", + "NODE_ENV": "development" + } + }, + "opera": { + "mode": "production", + "outputPath": "dist/apps/browser/opera", + "env": { + "BROWSER": "opera", + "MANIFEST_VERSION": "3", + "NODE_ENV": "production" + } + }, + "opera-dev": { + "mode": "development", + "outputPath": "dist/apps/browser/opera-dev", + "env": { + "BROWSER": "opera", + "MANIFEST_VERSION": "3", + "NODE_ENV": "development" + } + }, + "safari": { + "mode": "production", + "outputPath": "dist/apps/browser/safari", + "env": { + "BROWSER": "safari", + "MANIFEST_VERSION": "3", + "NODE_ENV": "production" + } + }, + "safari-dev": { + "mode": "development", + "outputPath": "dist/apps/browser/safari-dev", + "env": { + "BROWSER": "safari", + "MANIFEST_VERSION": "3", + "NODE_ENV": "development" + } + }, + "safari-mv2": { + "mode": "production", + "outputPath": "dist/apps/browser/safari-mv2", + "env": { + "BROWSER": "safari", + "MANIFEST_VERSION": "2", + "NODE_ENV": "production" + } + }, + "safari-mv2-dev": { + "mode": "development", + "outputPath": "dist/apps/browser/safari-mv2-dev", + "env": { + "BROWSER": "safari", + "MANIFEST_VERSION": "2", + "NODE_ENV": "development" + } + }, + "commercial-chrome": { + "mode": "production", + "outputPath": "dist/apps/browser/commercial-chrome", + "webpackConfig": "bitwarden_license/bit-browser/webpack.config.js", + "main": "bitwarden_license/bit-browser/src/popup/main.ts", + "tsConfig": "bitwarden_license/bit-browser/tsconfig.json", + "env": { + "BROWSER": "chrome", + "MANIFEST_VERSION": "3", + "NODE_ENV": "production" + } + }, + "commercial-chrome-dev": { + "mode": "development", + "outputPath": "dist/apps/browser/commercial-chrome-dev", + "webpackConfig": "bitwarden_license/bit-browser/webpack.config.js", + "main": "bitwarden_license/bit-browser/src/popup/main.ts", + "tsConfig": "bitwarden_license/bit-browser/tsconfig.json", + "env": { + "BROWSER": "chrome", + "MANIFEST_VERSION": "3", + "NODE_ENV": "development" + } + }, + "commercial-edge": { + "mode": "production", + "outputPath": "dist/apps/browser/commercial-edge", + "webpackConfig": "bitwarden_license/bit-browser/webpack.config.js", + "main": "bitwarden_license/bit-browser/src/popup/main.ts", + "tsConfig": "bitwarden_license/bit-browser/tsconfig.json", + "env": { + "BROWSER": "edge", + "MANIFEST_VERSION": "3", + "NODE_ENV": "production" + } + }, + "commercial-edge-dev": { + "mode": "development", + "outputPath": "dist/apps/browser/commercial-edge-dev", + "webpackConfig": "bitwarden_license/bit-browser/webpack.config.js", + "main": "bitwarden_license/bit-browser/src/popup/main.ts", + "tsConfig": "bitwarden_license/bit-browser/tsconfig.json", + "env": { + "BROWSER": "edge", + "MANIFEST_VERSION": "3", + "NODE_ENV": "development" + } + }, + "commercial-firefox": { + "mode": "production", + "outputPath": "dist/apps/browser/commercial-firefox", + "webpackConfig": "bitwarden_license/bit-browser/webpack.config.js", + "main": "bitwarden_license/bit-browser/src/popup/main.ts", + "tsConfig": "bitwarden_license/bit-browser/tsconfig.json", + "env": { + "BROWSER": "firefox", + "MANIFEST_VERSION": "3", + "NODE_ENV": "production" + } + }, + "commercial-firefox-dev": { + "mode": "development", + "outputPath": "dist/apps/browser/commercial-firefox-dev", + "webpackConfig": "bitwarden_license/bit-browser/webpack.config.js", + "main": "bitwarden_license/bit-browser/src/popup/main.ts", + "tsConfig": "bitwarden_license/bit-browser/tsconfig.json", + "env": { + "BROWSER": "firefox", + "MANIFEST_VERSION": "3", + "NODE_ENV": "development" + } + }, + "commercial-firefox-mv2": { + "mode": "production", + "outputPath": "dist/apps/browser/commercial-firefox-mv2", + "webpackConfig": "bitwarden_license/bit-browser/webpack.config.js", + "main": "bitwarden_license/bit-browser/src/popup/main.ts", + "tsConfig": "bitwarden_license/bit-browser/tsconfig.json", + "env": { + "BROWSER": "firefox", + "MANIFEST_VERSION": "2", + "NODE_ENV": "production" + } + }, + "commercial-firefox-mv2-dev": { + "mode": "development", + "outputPath": "dist/apps/browser/commercial-firefox-mv2-dev", + "webpackConfig": "bitwarden_license/bit-browser/webpack.config.js", + "main": "bitwarden_license/bit-browser/src/popup/main.ts", + "tsConfig": "bitwarden_license/bit-browser/tsconfig.json", + "env": { + "BROWSER": "firefox", + "MANIFEST_VERSION": "2", + "NODE_ENV": "development" + } + }, + "commercial-opera": { + "mode": "production", + "outputPath": "dist/apps/browser/commercial-opera", + "webpackConfig": "bitwarden_license/bit-browser/webpack.config.js", + "main": "bitwarden_license/bit-browser/src/popup/main.ts", + "tsConfig": "bitwarden_license/bit-browser/tsconfig.json", + "env": { + "BROWSER": "opera", + "MANIFEST_VERSION": "3", + "NODE_ENV": "production" + } + }, + "commercial-opera-dev": { + "mode": "development", + "outputPath": "dist/apps/browser/commercial-opera-dev", + "webpackConfig": "bitwarden_license/bit-browser/webpack.config.js", + "main": "bitwarden_license/bit-browser/src/popup/main.ts", + "tsConfig": "bitwarden_license/bit-browser/tsconfig.json", + "env": { + "BROWSER": "opera", + "MANIFEST_VERSION": "3", + "NODE_ENV": "development" + } + }, + "commercial-safari": { + "mode": "production", + "outputPath": "dist/apps/browser/commercial-safari", + "webpackConfig": "bitwarden_license/bit-browser/webpack.config.js", + "main": "bitwarden_license/bit-browser/src/popup/main.ts", + "tsConfig": "bitwarden_license/bit-browser/tsconfig.json", + "env": { + "BROWSER": "safari", + "MANIFEST_VERSION": "3", + "NODE_ENV": "production" + } + }, + "commercial-safari-dev": { + "mode": "development", + "outputPath": "dist/apps/browser/commercial-safari-dev", + "webpackConfig": "bitwarden_license/bit-browser/webpack.config.js", + "main": "bitwarden_license/bit-browser/src/popup/main.ts", + "tsConfig": "bitwarden_license/bit-browser/tsconfig.json", + "env": { + "BROWSER": "safari", + "MANIFEST_VERSION": "3", + "NODE_ENV": "development" + } + }, + "commercial-safari-mv2": { + "mode": "production", + "outputPath": "dist/apps/browser/commercial-safari-mv2", + "webpackConfig": "bitwarden_license/bit-browser/webpack.config.js", + "main": "bitwarden_license/bit-browser/src/popup/main.ts", + "tsConfig": "bitwarden_license/bit-browser/tsconfig.json", + "env": { + "BROWSER": "safari", + "MANIFEST_VERSION": "2", + "NODE_ENV": "production" + } + }, + "commercial-safari-mv2-dev": { + "mode": "development", + "outputPath": "dist/apps/browser/commercial-safari-mv2-dev", + "webpackConfig": "bitwarden_license/bit-browser/webpack.config.js", + "main": "bitwarden_license/bit-browser/src/popup/main.ts", + "tsConfig": "bitwarden_license/bit-browser/tsconfig.json", + "env": { + "BROWSER": "safari", + "MANIFEST_VERSION": "2", + "NODE_ENV": "development" + } + } + } + }, + "serve": { + "executor": "@nx/webpack:webpack", + "defaultConfiguration": "chrome-dev", + "options": { + "outputPath": "dist/apps/browser", + "webpackConfig": "apps/browser/webpack.config.js", + "tsConfig": "apps/browser/tsconfig.json", + "main": "apps/browser/src/popup/main.ts", + "target": "web", + "compiler": "tsc", + "watch": true + }, + "configurations": { + "chrome-dev": { + "mode": "development", + "outputPath": "dist/apps/browser/chrome-dev", + "env": { + "BROWSER": "chrome", + "MANIFEST_VERSION": "3", + "NODE_ENV": "development" + } + }, + "firefox-dev": { + "mode": "development", + "outputPath": "dist/apps/browser/firefox-dev", + "env": { + "BROWSER": "firefox", + "MANIFEST_VERSION": "3", + "NODE_ENV": "development" + } + }, + "firefox-mv2-dev": { + "mode": "development", + "outputPath": "dist/apps/browser/firefox-mv2-dev", + "env": { + "BROWSER": "firefox", + "MANIFEST_VERSION": "2", + "NODE_ENV": "development" + } + }, + "safari-dev": { + "mode": "development", + "outputPath": "dist/apps/browser/safari-dev", + "env": { + "BROWSER": "safari", + "MANIFEST_VERSION": "3", + "NODE_ENV": "development" + } + }, + "safari-mv2-dev": { + "mode": "development", + "outputPath": "dist/apps/browser/safari-mv2-dev", + "env": { + "BROWSER": "safari", + "MANIFEST_VERSION": "2", + "NODE_ENV": "development" + } + }, + "edge-dev": { + "mode": "development", + "outputPath": "dist/apps/browser/edge-dev", + "env": { + "BROWSER": "edge", + "MANIFEST_VERSION": "3", + "NODE_ENV": "development" + } + }, + "opera-dev": { + "mode": "development", + "outputPath": "dist/apps/browser/opera-dev", + "env": { + "BROWSER": "opera", + "MANIFEST_VERSION": "3", + "NODE_ENV": "development" + } + }, + "commercial-chrome-dev": { + "mode": "development", + "outputPath": "dist/apps/browser/commercial-chrome-dev", + "webpackConfig": "bitwarden_license/bit-browser/webpack.config.js", + "main": "bitwarden_license/bit-browser/src/popup/main.ts", + "tsConfig": "bitwarden_license/bit-browser/tsconfig.json", + "env": { + "BROWSER": "chrome", + "MANIFEST_VERSION": "3", + "NODE_ENV": "development" + } + }, + "commercial-firefox-dev": { + "mode": "development", + "outputPath": "dist/apps/browser/commercial-firefox-dev", + "webpackConfig": "bitwarden_license/bit-browser/webpack.config.js", + "main": "bitwarden_license/bit-browser/src/popup/main.ts", + "tsConfig": "bitwarden_license/bit-browser/tsconfig.json", + "env": { + "BROWSER": "firefox", + "MANIFEST_VERSION": "3", + "NODE_ENV": "development" + } + }, + "commercial-firefox-mv2-dev": { + "mode": "development", + "outputPath": "dist/apps/browser/commercial-firefox-mv2-dev", + "webpackConfig": "bitwarden_license/bit-browser/webpack.config.js", + "main": "bitwarden_license/bit-browser/src/popup/main.ts", + "tsConfig": "bitwarden_license/bit-browser/tsconfig.json", + "env": { + "BROWSER": "firefox", + "MANIFEST_VERSION": "2", + "NODE_ENV": "development" + } + }, + "commercial-safari-dev": { + "mode": "development", + "outputPath": "dist/apps/browser/commercial-safari-dev", + "webpackConfig": "bitwarden_license/bit-browser/webpack.config.js", + "main": "bitwarden_license/bit-browser/src/popup/main.ts", + "tsConfig": "bitwarden_license/bit-browser/tsconfig.json", + "env": { + "BROWSER": "safari", + "MANIFEST_VERSION": "3", + "NODE_ENV": "development" + } + }, + "commercial-safari-mv2-dev": { + "mode": "development", + "outputPath": "dist/apps/browser/commercial-safari-mv2-dev", + "webpackConfig": "bitwarden_license/bit-browser/webpack.config.js", + "main": "bitwarden_license/bit-browser/src/popup/main.ts", + "tsConfig": "bitwarden_license/bit-browser/tsconfig.json", + "env": { + "BROWSER": "safari", + "MANIFEST_VERSION": "2", + "NODE_ENV": "development" + } + }, + "commercial-edge-dev": { + "mode": "development", + "outputPath": "dist/apps/browser/commercial-edge-dev", + "webpackConfig": "bitwarden_license/bit-browser/webpack.config.js", + "main": "bitwarden_license/bit-browser/src/popup/main.ts", + "tsConfig": "bitwarden_license/bit-browser/tsconfig.json", + "env": { + "BROWSER": "edge", + "MANIFEST_VERSION": "3", + "NODE_ENV": "development" + } + }, + "commercial-opera-dev": { + "mode": "development", + "outputPath": "dist/apps/browser/commercial-opera-dev", + "webpackConfig": "bitwarden_license/bit-browser/webpack.config.js", + "main": "bitwarden_license/bit-browser/src/popup/main.ts", + "tsConfig": "bitwarden_license/bit-browser/tsconfig.json", + "env": { + "BROWSER": "opera", + "MANIFEST_VERSION": "3", + "NODE_ENV": "development" + } + } + } + }, + "test": { + "executor": "@nx/jest:jest", + "outputs": ["{workspaceRoot}/coverage/{projectRoot}"], + "options": { + "jestConfig": "apps/browser/jest.config.js" + } + }, + "lint": { + "executor": "@nx/eslint:lint", + "outputs": ["{options.outputFile}"], + "options": { + "lintFilePatterns": ["apps/browser/**/*.ts", "apps/browser/**/*.html"] + } + } + } +} diff --git a/apps/browser/src/_locales/ar/messages.json b/apps/browser/src/_locales/ar/messages.json index 02734de942b..de3383ef2d3 100644 --- a/apps/browser/src/_locales/ar/messages.json +++ b/apps/browser/src/_locales/ar/messages.json @@ -547,12 +547,50 @@ "searchVault": { "message": "البحث في الخزانة" }, + "resetSearch": { + "message": "Reset search" + }, + "archiveNoun": { + "message": "Archive", + "description": "Noun" + }, + "archiveVerb": { + "message": "Archive", + "description": "Verb" + }, + "unarchive": { + "message": "Unarchive" + }, + "itemsInArchive": { + "message": "Items in archive" + }, + "noItemsInArchive": { + "message": "No items in archive" + }, + "noItemsInArchiveDesc": { + "message": "Archived items will appear here and will be excluded from general search results and autofill suggestions." + }, + "itemSentToArchive": { + "message": "Item sent to archive" + }, + "itemRemovedFromArchive": { + "message": "Item removed from archive" + }, + "archiveItem": { + "message": "Archive item" + }, + "archiveItemConfirmDesc": { + "message": "Archived items are excluded from general search results and autofill suggestions. Are you sure you want to archive this item?" + }, "edit": { "message": "تعديل" }, "view": { "message": "عرض" }, + "viewLogin": { + "message": "View login" + }, "noItemsInList": { "message": "لا توجد عناصر لعرضها." }, @@ -695,6 +733,15 @@ "invalidMasterPassword": { "message": "كلمة المرور الرئيسية غير صالحة" }, + "invalidMasterPasswordConfirmEmailAndHost": { + "message": "Invalid master password. Confirm your email is correct and your account was created on $HOST$.", + "placeholders": { + "host": { + "content": "$1", + "example": "vault.bitwarden.com" + } + } + }, "vaultTimeout": { "message": "نفذ وقت الخزانة" }, @@ -1501,6 +1548,15 @@ "readSecurityKey": { "message": "قراءة مفتاح الأمان" }, + "readingPasskeyLoading": { + "message": "Reading passkey..." + }, + "passkeyAuthenticationFailed": { + "message": "Passkey authentication failed" + }, + "useADifferentLogInMethod": { + "message": "Use a different log in method" + }, "awaitingSecurityKeyInteraction": { "message": "في انتظار التفاعل مع مفتاح الأمن..." }, @@ -1519,9 +1575,6 @@ "selectTwoStepLoginMethod": { "message": "حدد طريقة تسجيل الدخول بخطوتين" }, - "recoveryCodeDesc": { - "message": "هل تفقد الوصول إلى جميع مزودي التحقق بعاملين؟ استخدم رمز الاسترداد الخاص بك لتعطيل جميع مزودي التحقق بعاملين من حسابك." - }, "recoveryCodeTitle": { "message": "رمز الاسترداد" }, @@ -1680,9 +1733,6 @@ "defaultAutoFillOnPageLoadDesc": { "message": "يمكنك إيقاف الملء التلقائي في تحميل الصفحة لعناصر تسجيل الدخول الفردية من عرض تحرير العنصر." }, - "itemAutoFillOnPageLoad": { - "message": "ملء تلقائي عند تحميل الصفحة (إذا كان الإعداد في الخيارات)" - }, "autoFillOnPageLoadUseDefault": { "message": "إستخدم الإعداد الإفتراضي" }, @@ -1754,23 +1804,8 @@ "popup2faCloseMessage": { "message": "النقر خارج النافذة المنبثقة للتحقق من بريدك الإلكتروني للحصول على رمز التحقق الخاص بك سيؤدي إلى إغلاق هذا المنبثق. هل تريد فتح هذا المنبثق في نافذة جديدة حتى لا يغلق؟" }, - "popupU2fCloseMessage": { - "message": "لا يمكن لهذا المتصفح معالجة طلبات U2F في هذه النافذة المنبثقة. هل تريد فتح هذا المنبثق في نافذة جديدة بحيث يمكنك تسجيل الدخول باستخدام U2F؟" - }, - "enableFavicon": { - "message": "إظهار أيقونات الموقع" - }, - "faviconDesc": { - "message": "إظهار صورة قابلة للتعرف بجانب كل تسجيل دخول." - }, - "faviconDescAlt": { - "message": "إظهار صورة قابلة للتعرف بجانب كل تسجيل دخول. تنطبق على جميع حسابات تسجيل الدخول." - }, - "enableBadgeCounter": { - "message": "إظهار عداد الشارات" - }, - "badgeCounterDesc": { - "message": "حدد عدد تسجيلات الدخول الخاصة بك لصفحة الويب الحالية." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "cardholderName": { "message": "اسم حامل البطاقة" @@ -1829,6 +1864,9 @@ "securityCode": { "message": "رمز الأمان" }, + "cardNumber": { + "message": "card number" + }, "ex": { "message": "مثال." }, @@ -1931,32 +1969,81 @@ "typeNote": { "message": "Note" }, - "newItemHeader": { - "message": "جديد $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderLogin": { + "message": "New Login", + "description": "Header for new login item type" }, - "editItemHeader": { - "message": "تحرير $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderCard": { + "message": "New Card", + "description": "Header for new card item type" }, - "viewItemHeader": { - "message": "عرض $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderIdentity": { + "message": "New Identity", + "description": "Header for new identity item type" + }, + "newItemHeaderNote": { + "message": "New Note", + "description": "Header for new note item type" + }, + "newItemHeaderSshKey": { + "message": "New SSH key", + "description": "Header for new SSH key item type" + }, + "newItemHeaderTextSend": { + "message": "New Text Send", + "description": "Header for new text send" + }, + "newItemHeaderFileSend": { + "message": "New File Send", + "description": "Header for new file send" + }, + "editItemHeaderLogin": { + "message": "Edit Login", + "description": "Header for edit login item type" + }, + "editItemHeaderCard": { + "message": "Edit Card", + "description": "Header for edit card item type" + }, + "editItemHeaderIdentity": { + "message": "Edit Identity", + "description": "Header for edit identity item type" + }, + "editItemHeaderNote": { + "message": "Edit Note", + "description": "Header for edit note item type" + }, + "editItemHeaderSshKey": { + "message": "Edit SSH key", + "description": "Header for edit SSH key item type" + }, + "editItemHeaderTextSend": { + "message": "Edit Text Send", + "description": "Header for edit text send" + }, + "editItemHeaderFileSend": { + "message": "Edit File Send", + "description": "Header for edit file send" + }, + "viewItemHeaderLogin": { + "message": "View Login", + "description": "Header for view login item type" + }, + "viewItemHeaderCard": { + "message": "View Card", + "description": "Header for view card item type" + }, + "viewItemHeaderIdentity": { + "message": "View Identity", + "description": "Header for view identity item type" + }, + "viewItemHeaderNote": { + "message": "View Note", + "description": "Header for view note item type" + }, + "viewItemHeaderSshKey": { + "message": "View SSH key", + "description": "Header for view SSH key item type" }, "passwordHistory": { "message": "سجل كلمة المرور" @@ -3129,6 +3216,24 @@ } } }, + "exportingOrganizationVaultFromPasswordManagerWithDataOwnershipDesc": { + "message": "Only the organization vault associated with $ORGANIZATION$ will be exported.", + "placeholders": { + "organization": { + "content": "$1", + "example": "My Org Name" + } + } + }, + "exportingOrganizationVaultFromAdminConsoleWithDataOwnershipDesc": { + "message": "Only the organization vault associated with $ORGANIZATION$ will be exported. My items collections will not be included.", + "placeholders": { + "organization": { + "content": "$1", + "example": "My Org Name" + } + } + }, "error": { "message": "خطأ" }, @@ -3460,6 +3565,28 @@ "logInRequestSent": { "message": "Request sent" }, + "loginRequestApprovedForEmailOnDevice": { + "message": "Login request approved for $EMAIL$ on $DEVICE$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + }, + "device": { + "content": "$2", + "example": "Web app - Chrome" + } + } + }, + "youDeniedLoginAttemptFromAnotherDevice": { + "message": "You denied a login attempt from another device. If this was you, try to log in with the device again." + }, + "device": { + "message": "Device" + }, + "loginStatus": { + "message": "Login status" + }, "masterPasswordChanged": { "message": "Master password saved" }, @@ -3496,9 +3623,6 @@ "autofillPageLoadPolicyActivated": { "message": "سياسات مؤسستك شغلت الملء التلقائي في تحميل الصفحة." }, - "howToAutofill": { - "message": "كيفية الملء التلقائي" - }, "autofillSelectInfoWithCommand": { "message": "حدد عنصر من هذه الشاشة، واستخدام الاختصار $COMMAND$، أو استكشاف خيارات أخرى في الإعدادات.", "placeholders": { @@ -3556,6 +3680,94 @@ "rememberThisDeviceToMakeFutureLoginsSeamless": { "message": "Remember this device to make future logins seamless" }, + "manageDevices": { + "message": "Manage devices" + }, + "currentSession": { + "message": "Current session" + }, + "mobile": { + "message": "Mobile", + "description": "Mobile app" + }, + "extension": { + "message": "Extension", + "description": "Browser extension/addon" + }, + "desktop": { + "message": "Desktop", + "description": "Desktop app" + }, + "webVault": { + "message": "Web vault" + }, + "webApp": { + "message": "Web app" + }, + "cli": { + "message": "CLI" + }, + "sdk": { + "message": "SDK", + "description": "Software Development Kit" + }, + "requestPending": { + "message": "Request pending" + }, + "firstLogin": { + "message": "First login" + }, + "trusted": { + "message": "Trusted" + }, + "needsApproval": { + "message": "Needs approval" + }, + "devices": { + "message": "Devices" + }, + "accessAttemptBy": { + "message": "Access attempt by $EMAIL$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + } + } + }, + "confirmAccess": { + "message": "Confirm access" + }, + "denyAccess": { + "message": "Deny access" + }, + "time": { + "message": "Time" + }, + "deviceType": { + "message": "Device Type" + }, + "loginRequest": { + "message": "Login request" + }, + "thisRequestIsNoLongerValid": { + "message": "This request is no longer valid." + }, + "loginRequestHasAlreadyExpired": { + "message": "Login request has already expired." + }, + "justNow": { + "message": "Just now" + }, + "requestedXMinutesAgo": { + "message": "Requested $MINUTES$ minutes ago", + "placeholders": { + "minutes": { + "content": "$1", + "example": "5" + } + } + }, "deviceApprovalRequired": { "message": "موافقة الجهاز مطلوبة. حدّد خيار الموافقة أدناه:" }, @@ -3795,18 +4007,10 @@ "aliasDomain": { "message": "الاسم البديل للنطاق" }, - "passwordRepromptDisabledAutofillOnPageLoad": { - "message": "العناصر مع إعادة طلب كلمة المرور الرئيسية لا يمكن ملئها تلقائيًا عند تحميل الصفحة. التعبئة التلقائية عند تحميل الصفحة.", - "description": "Toast message for describing that master password re-prompt cannot be autofilled on page load." - }, "autofillOnPageLoadSetToDefault": { "message": "ملء تلقائي عند تعيين تحميل الصفحة لاستخدام الإعداد الافتراضي.", "description": "Toast message for informing the user that autofill on page load has been set to the default setting." }, - "turnOffMasterPasswordPromptToEditField": { - "message": "إيقاف تشغيل كلمة المرور الرئيسية مرة أخرى لتحرير هذا الحقل", - "description": "Message appearing below the autofill on load message when master password reprompt is set for a vault item." - }, "toggleSideNavigation": { "message": "Toggle side navigation" }, @@ -4015,15 +4219,11 @@ "selectImportCollection": { "message": "اختر مجموعة" }, - "importTargetHint": { - "message": "حدد هذا الخيار إذا كنت تريد نقل محتويات الملف المستورد إلى $DESTINATION$", - "description": "Located as a hint under the import target. Will be appended by either folder or collection, depending if the user is importing into an individual or an organizational vault.", - "placeholders": { - "destination": { - "content": "$1", - "example": "folder or collection" - } - } + "importTargetHintCollection": { + "message": "Select this option if you want the imported file contents moved to a collection" + }, + "importTargetHintFolder": { + "message": "Select this option if you want the imported file contents moved to a folder" }, "importUnassignedItemsError": { "message": "الملف يحتوي على عناصر غير مسندة." @@ -4080,9 +4280,6 @@ "passkeyNotCopiedAlert": { "message": "The passkey will not be copied to the cloned item. Do you want to continue cloning this item?" }, - "passkeyFeatureIsNotImplementedForAccountsWithoutMasterPassword": { - "message": "Verification required by the initiating site. This feature is not yet implemented for accounts without master password." - }, "logInWithPasskeyQuestion": { "message": "Log in with passkey?" }, @@ -4465,17 +4662,17 @@ } } }, - "copyFieldValue": { - "message": "Copy $FIELD$, $VALUE$", + "copyFieldCipherName": { + "message": "Copy $FIELD$, $CIPHERNAME$", "description": "Title for a button that copies a field value to the clipboard.", "placeholders": { "field": { "content": "$1", "example": "Username" }, - "value": { + "ciphername": { "content": "$2", - "example": "Foo" + "example": "Login Item" } } }, @@ -4768,9 +4965,6 @@ } } }, - "enableAnimations": { - "message": "Enable animations" - }, "showAnimations": { "message": "Show animations" }, @@ -4983,15 +5177,9 @@ "itemLocation": { "message": "Item Location" }, - "fileSend": { - "message": "File Send" - }, "fileSends": { "message": "File Sends" }, - "textSend": { - "message": "Text Send" - }, "textSends": { "message": "Text Sends" }, @@ -5001,6 +5189,18 @@ "showNumberOfAutofillSuggestions": { "message": "Show number of login autofill suggestions on extension icon" }, + "accountAccessRequested": { + "message": "Account access requested" + }, + "confirmAccessAttempt": { + "message": "Confirm access attempt for $EMAIL$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + } + } + }, "showQuickCopyActions": { "message": "Show quick copy actions on Vault" }, @@ -5040,9 +5240,6 @@ "vaultCustomTimeoutMinimum": { "message": "Minimum custom timeout is 1 minute." }, - "additionalContentAvailable": { - "message": "Additional content is available" - }, "fileSavedToDevice": { "message": "File saved to device. Manage from your device downloads." }, @@ -5328,6 +5525,12 @@ "changeAtRiskPassword": { "message": "Change at-risk password" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "This login is at-risk and missing a website. Add a website and change the password for stronger security." + }, + "missingWebsite": { + "message": "Missing website" + }, "settingsVaultOptions": { "message": "Vault options" }, @@ -5376,6 +5579,18 @@ "hasItemsVaultNudgeTitle": { "message": "Welcome to your vault!" }, + "phishingPageTitle": { + "message": "Phishing website" + }, + "phishingPageCloseTab": { + "message": "Close tab" + }, + "phishingPageContinue": { + "message": "Continue" + }, + "phishingPageLearnWhy": { + "message": "Why are you seeing this?" + }, "hasItemsVaultNudgeBodyOne": { "message": "Autofill items for the current page" }, @@ -5451,11 +5666,33 @@ "message": "Easily create strong and unique passwords by clicking on the Generate password button to help you keep your logins secure.", "description": "Aria label for the body content of the generator nudge" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "noPermissionsViewPage": { "message": "You do not have permissions to view this page. Try logging in with a different account." }, "wasmNotSupported": { "message": "WebAssembly is not supported on your browser or is not enabled. WebAssembly is required to use the Bitwarden app.", "description": "'WebAssembly' is a technical term and should not be translated." + }, + "showMore": { + "message": "Show more" + }, + "showLess": { + "message": "Show less" + }, + "next": { + "message": "Next" + }, + "moreBreadcrumbs": { + "message": "More breadcrumbs", + "description": "This is used in the context of a breadcrumb navigation, indicating that there are more items in the breadcrumb trail that are not currently displayed." + }, + "confirmKeyConnectorDomain": { + "message": "Confirm Key Connector domain" } } diff --git a/apps/browser/src/_locales/az/messages.json b/apps/browser/src/_locales/az/messages.json index 64fa77c8683..caaee731fd9 100644 --- a/apps/browser/src/_locales/az/messages.json +++ b/apps/browser/src/_locales/az/messages.json @@ -14,7 +14,7 @@ "description": "Extension description, MUST be less than 112 characters (Safari restriction)" }, "loginOrCreateNewAccount": { - "message": "Güvənli seyfinizə müraciət etmək üçün giriş edin və ya yeni bir hesab yaradın." + "message": "Güvənli seyfinizə erişmək üçün giriş edin və ya yeni bir hesab yaradın." }, "inviteAccepted": { "message": "Dəvət qəbul edildi" @@ -59,7 +59,7 @@ "message": "Ana parol" }, "masterPassDesc": { - "message": "Ana parol, seyfinizə müraciət etmək üçün istifadə edəcəyiniz paroldur. Ana parolu yadda saxlamaq çox vacibdir. Unutsanız, parolu bərpa etməyin heç bir yolu yoxdur." + "message": "Ana parol, seyfinizə erişmək üçün istifadə edəcəyiniz paroldur. Ana parolu yadda saxlamaq çox vacibdir. Unutsanız, parolu bərpa etməyin heç bir yolu yoxdur." }, "masterPassHintDesc": { "message": "Ana parol məsləhəti, unutduğunuz parolunuzu xatırlamağınıza kömək edir." @@ -350,7 +350,7 @@ "message": "Bitwarden Sirr Meneceri" }, "continueToSecretsManagerPageDesc": { - "message": "Bitwarden Sirr Meneceri ilə developer sirlərini güvənli bir şəkildə saxlayın, idarə edin və paylaşın. Daha ətraflı bitwarden.com veb saytında öyrənə bilərsiniz." + "message": "Bitwarden Sirr Meneceri ilə gəlişdirici sirlərini güvənli bir şəkildə saxlayın, idarə edin və paylaşın. Daha ətraflı bitwarden.com veb saytında öyrənə bilərsiniz." }, "passwordlessDotDev": { "message": "Passwordless.dev" @@ -547,12 +547,50 @@ "searchVault": { "message": "Seyfdə axtar" }, + "resetSearch": { + "message": "Axtarışı sıfırla" + }, + "archiveNoun": { + "message": "Arxiv", + "description": "Noun" + }, + "archiveVerb": { + "message": "Arxivlə", + "description": "Verb" + }, + "unarchive": { + "message": "Arxivdən çıxart" + }, + "itemsInArchive": { + "message": "Arxivdəki elementlər" + }, + "noItemsInArchive": { + "message": "Arxivdə element yoxdur" + }, + "noItemsInArchiveDesc": { + "message": "Arxivlənmiş elementlər burada görünəcək, ümumi axtarış nəticələrindən və avto-doldurma təkliflərindən xaric ediləcək." + }, + "itemSentToArchive": { + "message": "Element arxivə göndərildi" + }, + "itemRemovedFromArchive": { + "message": "Element arxivdən çıxarıldı" + }, + "archiveItem": { + "message": "Elementi arxivlə" + }, + "archiveItemConfirmDesc": { + "message": "Arxivlənmiş elementlər ümumi axtarış nəticələrindən və avto-doldurma təkliflərindən xaric ediləcək. Bu elementi arxivləmək istədiyinizə əminsiniz?" + }, "edit": { "message": "Düzəliş et" }, "view": { "message": "Bax" }, + "viewLogin": { + "message": "Girişə bax" + }, "noItemsInList": { "message": "Sadalanacaq heç bir element yoxdur." }, @@ -695,6 +733,15 @@ "invalidMasterPassword": { "message": "Yararsız ana parol" }, + "invalidMasterPasswordConfirmEmailAndHost": { + "message": "Yararsız ana parol. E-poçtunuzun doğru olduğunu və hesabınızın $HOST$ üzərində yaradıldığını təsdiqləyin.", + "placeholders": { + "host": { + "content": "$1", + "example": "vault.bitwarden.com" + } + } + }, "vaultTimeout": { "message": "Seyf vaxtının bitməsi" }, @@ -1213,10 +1260,10 @@ "message": "Konteks menyu seçimlərini göstər" }, "contextMenuItemDesc": { - "message": "Veb sayt üçün parol yaratmaq və uyuşan giriş məlumatlarına müraciət etmək üçün sağ klikləməni istifadə edin." + "message": "Veb sayt üçün parol yaradılmasına və uyuşan giriş məlumatlarına erişmək üçün sağ klikləməni istifadə edin." }, "contextMenuItemDescAlt": { - "message": "Veb sayt üçün parol yaratmaq və uyuşan giriş məlumatlarına müraciət etmək üçün sağ klikləməni istifadə edin. Giriş etmiş bütün hesablara aiddir." + "message": "Veb sayt üçün parol yaradılmasına və uyuşan giriş məlumatlarına erişmək üçün sağ klikləməni istifadə edin. Giriş etmiş bütün hesablara aiddir." }, "defaultUriMatchDetection": { "message": "İlkin URI uyuşma aşkarlaması", @@ -1287,16 +1334,16 @@ "message": "Seyfi xaricə köçürməyi təsdiqlə" }, "exportWarningDesc": { - "message": "Xaricə köçürdüyünüz bu fayldakı datanız şifrələnməmiş formatdadır. Bu faylı güvənli olmayan kanallar (e-poçt kimi) üzərində saxlamamalı və ya göndərməməlisiniz. İşiniz bitdikdən sonra faylı dərhal silin." + "message": "Bu xaricə köçürmədəki seyf veriləriniz şifrələnməmiş formatdadır. Bu xaricə köçürülmüş faylı güvənli olmayan kanallar (e-poçt kimi) üzərində saxlamamalı və ya göndərməməlisiniz. İşiniz bitdikdən sonra faylı dərhal silin." }, "encExportKeyWarningDesc": { - "message": "Xaricə köçürdüyünüz bu fayldakı data, hesabınızın şifrələmə açarı istifadə edilərək şifrələnir. Hesabınızın şifrələmə açarını dəyişdirsəniz, bu faylın şifrəsini aça bilməyəcəksiniz və onu yenidən xaricə köçürməli olacaqsınız." + "message": "Bu xaricə köçürmə, verilərinizi hesabınızın şifrələmə açarını istifadə edərək şifrələyir. Hesabınızın şifrələmə açarını dəyişdirsəniz, bu faylın şifrəsini aça bilməyəcəksiniz və onu yenidən xaricə köçürməli olacaqsınız." }, "encExportAccountWarningDesc": { "message": "Hesab şifrələmə açarları, hər Bitwarden istifadəçi hesabı üçün unikaldır, buna görə də şifrələnmiş bir xaricə köçürməni, fərqli bir hesaba köçürə bilməzsiniz." }, "exportMasterPassword": { - "message": "Seyf datanızı xaricə köçürmək üçün ana parolunuzu daxil edin." + "message": "Seyf verilərinizi xaricə köçürmək üçün ana parolunuzu daxil edin." }, "shared": { "message": "Paylaşılan" @@ -1396,13 +1443,13 @@ "message": "Fayl qoşmaları üçün 1 GB şifrələnmiş anbar sahəsi" }, "premiumSignUpEmergency": { - "message": "Fövqəladə hal müraciəti" + "message": "Fövqəladə hal erişimi." }, "premiumSignUpTwoStepOptions": { "message": "YubiKey və Duo kimi mülkiyyətçi iki addımlı giriş seçimləri." }, "ppremiumSignUpReports": { - "message": "Seyfinizi güvəndə saxlamaq üçün parol gigiyenası, hesab sağlamlığı və data pozuntusu hesabatları." + "message": "Seyfinizi güvəndə saxlamaq üçün parol gigiyenası, hesab sağlamlığı və veri pozuntusu hesabatları." }, "ppremiumSignUpTotp": { "message": "Seyfinizdəki girişlər üçün TOTP doğrulama kodu (2FA) yaradıcısı." @@ -1501,6 +1548,15 @@ "readSecurityKey": { "message": "Güvənlik açarını oxu" }, + "readingPasskeyLoading": { + "message": "Keçid açarı oxunur..." + }, + "passkeyAuthenticationFailed": { + "message": "Keçid açarı kimlik doğrulaması uğursuzdur" + }, + "useADifferentLogInMethod": { + "message": "Fərqli bir giriş üsulu istifadə edin" + }, "awaitingSecurityKeyInteraction": { "message": "Güvənlik açarı ilə əlaqə gözlənilir..." }, @@ -1519,9 +1575,6 @@ "selectTwoStepLoginMethod": { "message": "İki addımlı giriş üsulunu seçin" }, - "recoveryCodeDesc": { - "message": "İki faktorlu provayderlərinə müraciəti itirmisiniz? Geri qaytarma kodunuzu istifadə edərək hesabınızdakı bütün iki faktorlu provayderləri sıradan çıxarda bilərsiniz." - }, "recoveryCodeTitle": { "message": "Geri qaytarma kodu" }, @@ -1536,7 +1589,7 @@ "message": "Yubico OTP Güvənlik Açarı" }, "yubiKeyDesc": { - "message": "Hesabınıza müraciət etmək üçün bir YubiKey istifadə edin. YubiKey 4, 4 Nano, 4C və NEO cihazları ilə işləyir." + "message": "Hesabınıza erişmək üçün bir YubiKey istifadə edin. YubiKey 4, 4 Nano, 4C və NEO cihazları ilə işləyir." }, "duoDescV2": { "message": "Duo Security tərəfindən yaradılan kodu daxil edin.", @@ -1550,7 +1603,7 @@ "message": "FIDO2 WebAuthn" }, "webAuthnDesc": { - "message": "Hesabınıza müraciət etmək üçün WebAuthn özəllikli istənilən bir güvənlik açarı istifadə edin." + "message": "Hesabınıza erişmək üçün istənilən WebAuthn uyumlu güvənlik açarını istifadə edin." }, "emailTitle": { "message": "E-poçt" @@ -1680,9 +1733,6 @@ "defaultAutoFillOnPageLoadDesc": { "message": "Fərdi giriş elementləri üçün \"Səhifə yüklənəndə avto-doldur\"u elementin Düzəliş et görünüşündən söndürə bilərsiniz." }, - "itemAutoFillOnPageLoad": { - "message": "Səhifə yüklənəndə avto-doldur (Seçimlərdə fəallaşdırılıbsa)" - }, "autoFillOnPageLoadUseDefault": { "message": "İlkin ayarı istifadə et" }, @@ -1754,23 +1804,8 @@ "popup2faCloseMessage": { "message": "Doğrulama kodunu alacağınız e-poçtu yoxlamaq üçün bu pəncərə xaricində bir yerə klikləsəniz bu pəncərə bağlanacaq. Bu pəncərənin bağlanmaması üçün yeni bir pəncərədə açmaq istəyirsiniz?" }, - "popupU2fCloseMessage": { - "message": "Bu brauzer bu açılan pəncərədə U2F tələblərini emal edə bilmir. U2F istifadə edərək giriş etmək üçün bu açılan pəncərəni yeni bir pəncərədə açmaq istəyirsiniz?" - }, - "enableFavicon": { - "message": "Veb sayt ikonlarını göstər" - }, - "faviconDesc": { - "message": "Hər girişin yanında tanına bilən təsvir göstər." - }, - "faviconDescAlt": { - "message": "Hər bir giriş elementinin yanında tanına bilən bir təsvir göstər. Giriş etmiş bütün hesablara aiddir." - }, - "enableBadgeCounter": { - "message": "Nişan sayğacını göstər" - }, - "badgeCounterDesc": { - "message": "Hazırkı veb səhifə üçün neçə giriş olduğunu göstərir." + "showIconsChangePasswordUrls": { + "message": "Veb sayt ikonlarını göstər və parol dəyişdirmə URL-lərini al" }, "cardholderName": { "message": "Kart sahibinin adı" @@ -1829,6 +1864,9 @@ "securityCode": { "message": "Güvənlik kodu" }, + "cardNumber": { + "message": "kart nömrəsi" + }, "ex": { "message": "məs." }, @@ -1931,32 +1969,81 @@ "typeNote": { "message": "Not" }, - "newItemHeader": { - "message": "Yeni $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderLogin": { + "message": "Yeni giriş", + "description": "Header for new login item type" }, - "editItemHeader": { - "message": "$TYPE$ - düzəliş et", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderCard": { + "message": "Yeni kart", + "description": "Header for new card item type" }, - "viewItemHeader": { - "message": "$TYPE$ - bax", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderIdentity": { + "message": "Yeni kimlik", + "description": "Header for new identity item type" + }, + "newItemHeaderNote": { + "message": "Yeni not", + "description": "Header for new note item type" + }, + "newItemHeaderSshKey": { + "message": "Yeni SSH açarı", + "description": "Header for new SSH key item type" + }, + "newItemHeaderTextSend": { + "message": "Yeni Send mətni", + "description": "Header for new text send" + }, + "newItemHeaderFileSend": { + "message": "Yeni Send faylı", + "description": "Header for new file send" + }, + "editItemHeaderLogin": { + "message": "Girişə düzəliş et", + "description": "Header for edit login item type" + }, + "editItemHeaderCard": { + "message": "Karta düzəliş et", + "description": "Header for edit card item type" + }, + "editItemHeaderIdentity": { + "message": "Kimliyə düzəliş et", + "description": "Header for edit identity item type" + }, + "editItemHeaderNote": { + "message": "Nota düzəliş et", + "description": "Header for edit note item type" + }, + "editItemHeaderSshKey": { + "message": "SSH açarına düzəliş et", + "description": "Header for edit SSH key item type" + }, + "editItemHeaderTextSend": { + "message": "Send mətninə düzəliş et", + "description": "Header for edit text send" + }, + "editItemHeaderFileSend": { + "message": "Send faylına düzəliş et", + "description": "Header for edit file send" + }, + "viewItemHeaderLogin": { + "message": "Girişə bax", + "description": "Header for view login item type" + }, + "viewItemHeaderCard": { + "message": "Karta bax", + "description": "Header for view card item type" + }, + "viewItemHeaderIdentity": { + "message": "Kimliyə bax", + "description": "Header for view identity item type" + }, + "viewItemHeaderNote": { + "message": "Nota bax", + "description": "Header for view note item type" + }, + "viewItemHeaderSshKey": { + "message": "SSH açarına bax", + "description": "Header for view SSH key item type" }, "passwordHistory": { "message": "Parol tarixçəsi" @@ -2017,7 +2104,7 @@ "message": "Parolun ifşalanıb ifşalanmadığını yoxlayın." }, "passwordExposed": { - "message": "Bu parol, məlumat pozuntularında $VALUE$ dəfə üzə çıxıb. Dəyişdirməyi məsləhət görürük.", + "message": "Bu parol, veri pozuntularında $VALUE$ dəfə üzə çıxıb. Dəyişdirməyi məsləhət görürük.", "placeholders": { "value": { "content": "$1", @@ -2026,7 +2113,7 @@ } }, "passwordSafe": { - "message": "Bu parol, məlumat pozuntularında qeydə alınmayıb. Rahatlıqla istifadə edə bilərsiniz." + "message": "Bu parol, veri pozuntularında qeydə alınmayıb. Rahatlıqla istifadə edə bilərsiniz." }, "baseDomain": { "message": "Baza domeni", @@ -2269,7 +2356,7 @@ "message": "Artıq hesabınız var?" }, "vaultTimeoutLogOutConfirmation": { - "message": "Çıxış etdikdə, seyfinizə bütün müraciətiniz dayanacaq və vaxt bitməsindən sonra onlayn kimlik doğrulaması tələb olunacaq. Bu ayarı istifadə etmək istədiyinizə əminsiniz?" + "message": "Çıxış etdikdə, seyfinizə erişiminiz tamamilə dayanacaq və vaxt bitdikdən sonra onlayn kimlik doğrulaması tələb olunacaq. Bu ayarı istifadə etmək istədiyinizə əminsiniz?" }, "vaultTimeoutLogOutConfirmationTitle": { "message": "Vaxt bitmə əməliyyat təsdiqi" @@ -2377,13 +2464,13 @@ "message": "Bu qutunu işarələyərək aşağıdakılarla razılaşırsınız:" }, "acceptPoliciesRequired": { - "message": "Xidmət Şərtləri və Gizlilik Siyasəti qəbul edilməyib." + "message": "Xidmət Şərtləri və Məxfilik Siyasəti qəbul edilməyib." }, "termsOfService": { "message": "Xidmət Şərtləri" }, "privacyPolicy": { - "message": "Gizlilik Siyasəti" + "message": "Məxfilik Siyasəti" }, "yourNewPasswordCannotBeTheSameAsYourCurrentPassword": { "message": "Yeni parolunuz hazırkı parolunuzla eyni ola bilməz." @@ -2395,7 +2482,7 @@ "message": "Oldu" }, "errorRefreshingAccessToken": { - "message": "Müraciət tokeni təzələmə xətası" + "message": "Erişim tokeni təzələmə xətası" }, "errorRefreshingAccessTokenDesc": { "message": "Təzələmə tokeni və ya API açarlar tapılmadı. Lütfən çıxış edib yenidən giriş etməyə çalışın." @@ -2485,7 +2572,7 @@ "message": "Bu əməliyyat yan çubuqda icra edilə bilməz. Lütfən açılan pəncərədə yenidən sınayın." }, "personalOwnershipSubmitError": { - "message": "Müəssisə Siyasətinə görə, elementləri şəxsi seyfinizdə saxlamağınız məhdudlaşdırılıb. Sahiblik seçimini təşkilat olaraq dəyişdirin və mövcud kolleksiyalar arasından seçim edin." + "message": "Müəssisə Siyasətinə görə, elementləri fərdi seyfinizdə saxlamağınız məhdudlaşdırılıb. Sahiblik seçimini təşkilat olaraq dəyişdirin və mövcud kolleksiyalar arasından seçim edin." }, "personalOwnershipPolicyInEffect": { "message": "Bir təşkilat siyasəti, sahiblik seçimlərinizə təsir edir." @@ -2720,7 +2807,7 @@ "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "maxAccessCountReached": { - "message": "Maksimal müraciət sayına çatıldı", + "message": "Maksimum erişim sayına çatıldı", "description": "This text will be displayed after a Send has been accessed the maximum amount of times." }, "hideTextByDefault": { @@ -2804,7 +2891,7 @@ "message": "Özəl" }, "sendPasswordDescV3": { - "message": "Alıcıların bu \"Send\"ə müraciət etməsi üçün ixtiyari bir parol əlavə edin.", + "message": "Alıcıların bu \"Send\"ə erişməsi üçün ixtiyari bir parol əlavə edin.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "createSend": { @@ -2935,13 +3022,13 @@ "message": "Ana parolu güncəllə" }, "updateMasterPasswordWarning": { - "message": "Ana parolunuz təzəlikcə təşkilatınızdakı bir administrator tərəfindən dəyişdirildi. Seyfə müraciət etmək üçün onu indi güncəlləməlisiniz. Davam etsəniz, hazırkı seansdan çıxış edəcəksiniz və təkrar giriş etməli olacaqsınız. Digər cihazlardakı aktiv seanslar bir saata qədər aktiv qalmağa davam edə bilər." + "message": "Ana parolunuz təzəlikcə təşkilatınızdakı bir inzibatçı tərəfindən dəyişdirildi. Seyfə erişmək üçün onu indi güncəlləməlisiniz. Davam etsəniz, hazırkı seansdan çıxış edəcəksiniz və təkrar giriş etməli olacaqsınız. Digər cihazlardakı aktiv seanslar bir saata qədər aktiv qalmağa davam edə bilər." }, "updateWeakMasterPasswordWarning": { - "message": "Ana parolunuz təşkilatınızdakı siyasətlərdən birinə və ya bir neçəsinə uyğun gəlmir. Seyfə müraciət üçün ana parolunuzu indi güncəlləməlisiniz. Davam etsəniz, hazırkı seansdan çıxış etmiş və təkrar giriş etməli olacaqsınız. Digər cihazlardakı aktiv seanslar bir saata qədər aktiv qalmağa davam edə bilər." + "message": "Ana parolunuz təşkilatınızdakı siyasətlərdən birinə və ya bir neçəsinə uyğun gəlmir. Seyfə erişmək üçün ana parolunuzu indi güncəlləməlisiniz. Davam etsəniz, hazırkı seansdan çıxış etmiş və təkrar giriş etməli olacaqsınız. Digər cihazlardakı aktiv seanslar bir saata qədər aktiv qalmağa davam edə bilər." }, "tdeDisabledMasterPasswordRequired": { - "message": "Təşkilatınız, güvənli cihaz şifrələməsini sıradan çıxartdı. Seyfinizə müraciət etmək üçün lütfən ana parol təyin edin." + "message": "Təşkilatınız, güvənli cihaz şifrələməsini sıradan çıxartdı. Seyfinizə erişmək üçün lütfən ana parol təyin edin." }, "resetPasswordPolicyAutoEnroll": { "message": "Avtomatik yazılma" @@ -3129,6 +3216,24 @@ } } }, + "exportingOrganizationVaultFromPasswordManagerWithDataOwnershipDesc": { + "message": "Yalnız $ORGANIZATION$ ilə əlaqələndirilmiş təşkilat seyfi xaricə köçürüləcək.", + "placeholders": { + "organization": { + "content": "$1", + "example": "My Org Name" + } + } + }, + "exportingOrganizationVaultFromAdminConsoleWithDataOwnershipDesc": { + "message": "Yalnız $ORGANIZATION$ ilə əlaqələndirilmiş təşkilat seyfi xaricə köçürüləcək. Element kolleksiyalarım daxil edilməyəcək.", + "placeholders": { + "organization": { + "content": "$1", + "example": "My Org Name" + } + } + }, "error": { "message": "Xəta" }, @@ -3139,7 +3244,7 @@ "message": "Bitwarden, aşağıda sadalanan seyf element(lər)inin şifrəsini aça bilmədi." }, "contactCSToAvoidDataLossPart1": { - "message": "Əlavə data itkisini önləmək üçün", + "message": "Əlavə veri itkisini önləmək üçün", "description": "This is part of a larger sentence. The full sentence will read 'Contact customer success to avoid additional data loss.'" }, "contactCSToAvoidDataLossPart2": { @@ -3356,7 +3461,7 @@ "description": "Part of a URL." }, "apiAccessToken": { - "message": "API müraciət tokeni" + "message": "API erişim tokeni" }, "apiKey": { "message": "API açar" @@ -3371,7 +3476,7 @@ "message": "Təşkilat dayandırıldı." }, "disabledOrganizationFilterError": { - "message": "Dayandırılmış Təşkilatlardakı elementlərə müraciət edilə bilmir. Kömək üçün Təşkilatınızın sahibi ilə əlaqə saxlayın." + "message": "Fəaliyyəti dayandırılmış Təşkilatlardakı elementlərə erişilə bilməz. Kömək üçün Təşkilatınızın sahibi ilə əlaqə saxlayın." }, "loggingInTo": { "message": "$DOMAIN$ domeninə giriş edilir", @@ -3460,6 +3565,28 @@ "logInRequestSent": { "message": "Tələb göndərildi" }, + "loginRequestApprovedForEmailOnDevice": { + "message": "$DEVICE$ cihazında $EMAIL$ üçün giriş tələbi təsdiqləndi", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + }, + "device": { + "content": "$2", + "example": "Web app - Chrome" + } + } + }, + "youDeniedLoginAttemptFromAnotherDevice": { + "message": "Başqa bir cihazdan giriş cəhdinə rədd cavabı verdiniz. Bu siz idinizsə, cihazla yenidən giriş etməyə çalışın." + }, + "device": { + "message": "Cihaz" + }, + "loginStatus": { + "message": "Giriş statusu" + }, "masterPasswordChanged": { "message": "Ana parol saxlanıldı" }, @@ -3467,16 +3594,16 @@ "message": "İfşa olunmuş ana parol" }, "exposedMasterPasswordDesc": { - "message": "Parol, məlumat pozuntusunda tapıldı. Hesabınızı qorumaq üçün unikal bir parol istifadə edin. İfşa olunmuş bir parol istifadə etmək istədiyinizə əminsiniz?" + "message": "Parol, veri pozuntusunda tapıldı. Hesabınızı qorumaq üçün unikal bir parol istifadə edin. İfşa olunmuş bir parol istifadə etmək istədiyinizə əminsiniz?" }, "weakAndExposedMasterPassword": { "message": "Zəif və ifşa olunmuş ana parol" }, "weakAndBreachedMasterPasswordDesc": { - "message": "Zəif parol məlumat pozuntusunda aşkarlandı və tapıldı. Hesabınızı qorumaq üçün güclü və unikal bir parol istifadə edin. Bu parolu istifadə etmək istədiyinizə əminsiniz?" + "message": "Zəif parol, veri pozuntusunda aşkarlandı və tapıldı. Hesabınızı qorumaq üçün güclü və unikal bir parol istifadə edin. Bu parolu istifadə etmək istədiyinizə əminsiniz?" }, "checkForBreaches": { - "message": "Bu parol üçün bilinən məlumat pozuntularını yoxlayın" + "message": "Bu parol üçün bilinən veri pozuntularını yoxlayın" }, "important": { "message": "Vacib:" @@ -3496,9 +3623,6 @@ "autofillPageLoadPolicyActivated": { "message": "Təşkilatınızın siyasətləri, səhifə yüklənəndə avto-doldurmanı işə saldı." }, - "howToAutofill": { - "message": "Avto-doldurma necə edilir" - }, "autofillSelectInfoWithCommand": { "message": "Bu ekrandan bir element seçin, $COMMAND$ qısayolunu istifadə edin və ya ayarlardakı digər seçimləri kəşf edin.", "placeholders": { @@ -3556,6 +3680,94 @@ "rememberThisDeviceToMakeFutureLoginsSeamless": { "message": "Gələcək girişləri problemsiz etmək üçün bu cihazı xatırla" }, + "manageDevices": { + "message": "Cihazları idarə et" + }, + "currentSession": { + "message": "Hazırkı seans" + }, + "mobile": { + "message": "Mobil", + "description": "Mobile app" + }, + "extension": { + "message": "Uzantı", + "description": "Browser extension/addon" + }, + "desktop": { + "message": "Masaüstü", + "description": "Desktop app" + }, + "webVault": { + "message": "Veb seyf" + }, + "webApp": { + "message": "Veb tətbiq" + }, + "cli": { + "message": "CLI" + }, + "sdk": { + "message": "SDK", + "description": "Software Development Kit" + }, + "requestPending": { + "message": "Tələb gözlənir" + }, + "firstLogin": { + "message": "İlk giriş" + }, + "trusted": { + "message": "Güvənli" + }, + "needsApproval": { + "message": "Təsdiq lazımdır" + }, + "devices": { + "message": "Cihazlar" + }, + "accessAttemptBy": { + "message": "$EMAIL$ ilə erişim cəhdi", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + } + } + }, + "confirmAccess": { + "message": "Erişimi təsdiqlə" + }, + "denyAccess": { + "message": "Erişimə rədd cavabı ver" + }, + "time": { + "message": "Vaxt" + }, + "deviceType": { + "message": "Cihaz növü" + }, + "loginRequest": { + "message": "Giriş tələbi" + }, + "thisRequestIsNoLongerValid": { + "message": "Bu tələb artıq yararsızdır." + }, + "loginRequestHasAlreadyExpired": { + "message": "Giriş tələbinin müddəti artıq bitib." + }, + "justNow": { + "message": "İndicə" + }, + "requestedXMinutesAgo": { + "message": "$MINUTES$ dəqiqə əvvəl tələb göndərildi", + "placeholders": { + "minutes": { + "content": "$1", + "example": "5" + } + } + }, "deviceApprovalRequired": { "message": "Cihaz təsdiqi tələb olunur. Aşağıdan bir təsdiq variantı seçin:" }, @@ -3612,7 +3824,7 @@ "description": "European Union" }, "accessDenied": { - "message": "Müraciət rədd edildi. Bu səhifəyə baxmaq üçün icazəniz yoxdur." + "message": "Erişim rədd edildi. Bu səhifəyə baxmaq üçün icazəniz yoxdur." }, "general": { "message": "Ümumi" @@ -3657,7 +3869,7 @@ "message": "Təşkilata güvənilmir" }, "emergencyAccessTrustWarning": { - "message": "Hesabınızın təhlükəsizliyi üçün yalnız bu istifadəçiyə fövqəladə hal müraciəti icazəsini verdiyinizi və onun barmaq izinin hesabında görünən barmaq izi ilə uyuşduğunu təsdiqləyin" + "message": "Hesabınızın təhlükəsizliyi üçün yalnız bu istifadəçiyə fövqəladə hal erişim icazəsini verdiyinizi və onun barmaq izinin hesabında görünən barmaq izi ilə uyuşduğunu təsdiqləyin" }, "orgTrustWarning": { "message": "Hesabınızın təhlükəsizliyi üçün yalnız bu təşkilatın üzvüsünüzsə, hesab geri qaytarma fəaldırsa və aşağıda görünən barmaq izi təşkilatın barmaq izi ilə uyuşursa davam edin." @@ -3673,7 +3885,7 @@ "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "sendsBodyNoItems": { - "message": "İstənilən platformada faylları və dataları hər kəslə paylaşın. İfşa olunmağı məhdudlaşdıraraq məlumatlarınız ucdan-uca şifrələnmiş qalacaq.", + "message": "İstənilən platformada faylları və veriləri hər kəslə güvənli şəkildə paylaşın. Məlumatlarınız, ifşa olunmamaq üçün ucdan-uca şifrələnmiş qalacaq.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "inputRequired": { @@ -3795,18 +4007,10 @@ "aliasDomain": { "message": "Domen ləqəbi" }, - "passwordRepromptDisabledAutofillOnPageLoad": { - "message": "\"Ana parolu təkrar soruş\" özəlliyi olan elementlər səhifə yüklənəndə avto-doldurulmur. \"Səhifə yüklənəndə avto-doldurma\" özəlliyi söndürülüb.", - "description": "Toast message for describing that master password re-prompt cannot be autofilled on page load." - }, "autofillOnPageLoadSetToDefault": { "message": "\"Səhifə yüklənəndə avto-doldurma\" özəlliyi ilkin ayarı istifadə etmək üzrə ayarlandı.", "description": "Toast message for informing the user that autofill on page load has been set to the default setting." }, - "turnOffMasterPasswordPromptToEditField": { - "message": "Bu xanaya düzəliş etmək üçün \"Ana parolu təkrar soruş\"u söndürün", - "description": "Message appearing below the autofill on load message when master password reprompt is set for a vault item." - }, "toggleSideNavigation": { "message": "Yan naviqasiyanı aç/bağla" }, @@ -3904,14 +4108,14 @@ "message": "Yox say" }, "importData": { - "message": "Datanı daxilə köçür", + "message": "Veriləri daxilə köçür", "description": "Used for the header of the import dialog, the import button and within the file-password-prompt" }, "importError": { "message": "Daxilə köçürmə xətası" }, "importErrorDesc": { - "message": "Daxilə köçürməyə çalışdığınız data ilə bağlı bir problem var. Lütfən mənbə faylınızda aşağıda sadalanan xətaları həll edib yenidən sınayın." + "message": "Daxilə köçürməyə çalışdığınız verilərlə bağlı bir problem var. Lütfən mənbə faylınızda aşağıda sadalanan xətaları həll edib yenidən sınayın." }, "resolveTheErrorsBelowAndTryAgain": { "message": "Aşağıdakı xətaları həll edin və yenidən sınayın." @@ -3920,7 +4124,7 @@ "message": "Açıqlama" }, "importSuccess": { - "message": "Data uğurla daxilə köçürüldü" + "message": "Verilər uğurla daxilə köçürüldü" }, "importSuccessNumberOfItems": { "message": "Cəmi $AMOUNT$ element daxilə köçürüldü.", @@ -3971,7 +4175,7 @@ "message": "Cəmi" }, "importWarning": { - "message": "Datanı $ORGANIZATION$ təşkilatına köçürürsünüz. Datanızı bu təşkilatın üzvləri ilə paylaşa bilərsiniz. Davam etmək istəyirsiniz?", + "message": "Veriləri $ORGANIZATION$ təşkilatına köçürürsünüz. Veriləriniz, bu təşkilatın üzvləri ilə paylaşıla bilər. Davam etmək istəyirsiniz?", "placeholders": { "organization": { "content": "$1", @@ -3992,13 +4196,13 @@ "message": "Duo-nu başlat" }, "importFormatError": { - "message": "Data doğru format edilməyib. Lütfən daxilə köçürmə faylınızı yoxlayıb yenidən sınayın." + "message": "Verilər düzgün format olunmayıb. Lütfən daxilə köçürmə faylınızı yoxlayıb yenidən sınayın." }, "importNothingError": { "message": "Heç nə daxilə köçürülmədi." }, "importEncKeyError": { - "message": "Xaricə köçürülən faylın şifrəsi açılarkən xəta baş verdi. Şifrələmə açarınız, datanı xaricə köçürmək üçün istifadə edilən şifrələmə açarı ilə uyuşmur." + "message": "Xaricə köçürülən faylın şifrəsi açılarkən xəta baş verdi. Şifrələmə açarınız, veriləri xaricə köçürmək üçün istifadə edilən şifrələmə açarı ilə uyuşmur." }, "invalidFilePassword": { "message": "Yararsız fayl parolu, lütfən xaricə köçürmə faylını yaradarkən daxil etdiyiniz parolu istifadə edin." @@ -4015,15 +4219,11 @@ "selectImportCollection": { "message": "Bir kolleksiya seçin" }, - "importTargetHint": { - "message": "Daxilə köçürülən fayl məzmununun $DESTINATION$ yerinə daşınmasını istəyirsinizsə bu variantı seçin", - "description": "Located as a hint under the import target. Will be appended by either folder or collection, depending if the user is importing into an individual or an organizational vault.", - "placeholders": { - "destination": { - "content": "$1", - "example": "folder or collection" - } - } + "importTargetHintCollection": { + "message": "Daxilə köçürülən fayl məzmunlarının bir kolleksiyaya daşınmasını istəyirsinizsə bu variantı seçin" + }, + "importTargetHintFolder": { + "message": "Daxilə köçürülən fayl məzmunlarının bir qovluğa daşınmasını istəyirsinizsə bu variantı seçin" }, "importUnassignedItemsError": { "message": "Faylda təyin edilməmiş elementlər var." @@ -4057,19 +4257,19 @@ "message": "Seyfi daxilə köçürməyi təsdiqlə" }, "confirmVaultImportDesc": { - "message": "Bu fayl parolla qorunur. Məlumatları daxilə köçürmək üçün fayl parolunu daxil edin." + "message": "Bu fayl parolla qorunur. Veriləri daxilə köçürmək üçün fayl parolunu daxil edin." }, "confirmFilePassword": { "message": "Fayl parolunu təsdiqlə" }, "exportSuccess": { - "message": "Seyf datası xaricə köçürüldü" + "message": "Seyf veriləri xaricə köçürüldü" }, "typePasskey": { "message": "Keçid açarı" }, "accessing": { - "message": "Müraciət edilir" + "message": "Erişilir" }, "loggedInExclamation": { "message": "Giriş edildi!" @@ -4080,9 +4280,6 @@ "passkeyNotCopiedAlert": { "message": "Keçid açarı, klonlanmış elementə kopyalanmayacaq. Bu elementi klonlamağa davam etmək istəyirsiniz?" }, - "passkeyFeatureIsNotImplementedForAccountsWithoutMasterPassword": { - "message": "Başladan saytın tələb etdiyi doğrulama. Bu özəllik, hələlik ana parolu olmayan hesablara tətbiq olunmur." - }, "logInWithPasskeyQuestion": { "message": "Keçid açarı ilə giriş edilsin?" }, @@ -4135,7 +4332,7 @@ "message": "Çox faktorlu kimlik doğrulama ləğv edildi" }, "noLastPassDataFound": { - "message": "LastPass datası tapılmadı" + "message": "LastPass veriləri tapılmadı" }, "incorrectUsernameOrPassword": { "message": "Yanlış istifadəçi adı və ya parol" @@ -4241,7 +4438,7 @@ "message": "sahiblik edən" }, "useDeviceOrHardwareKey": { - "message": "Cihazınızı və ya avadanlıq açarınızı istifadə edin" + "message": "Cihazınızı və ya donanım açarınızı istifadə edin" }, "justOnce": { "message": "Yalnız bir dəfə" @@ -4323,7 +4520,7 @@ "description": "Title for the dialog that appears when the user has not granted the extension permission to set privacy settings" }, "privacyPermissionAdditionNotGrantedDescription": { - "message": "Bitwarden-i ilkin parol meneceri olaraq ayarlamaq üçün ona brauzer gizlilik icazələrini verməlisiniz.", + "message": "Bitwarden-i ilkin parol meneceri olaraq ayarlamaq üçün ona brauzer məxfilik icazələrini verməlisiniz.", "description": "Description for the dialog that appears when the user has not granted the extension permission to set privacy settings" }, "makeDefault": { @@ -4465,17 +4662,17 @@ } } }, - "copyFieldValue": { - "message": "Kopyala: $FIELD$, $VALUE$", + "copyFieldCipherName": { + "message": "Kopyala: $FIELD$, $CIPHERNAME$", "description": "Title for a button that copies a field value to the clipboard.", "placeholders": { "field": { "content": "$1", "example": "Username" }, - "value": { + "ciphername": { "content": "$2", - "example": "Foo" + "example": "Login Item" } } }, @@ -4565,7 +4762,7 @@ "description": "Used as a label to indicate that the user is the owner of an item." }, "contactYourOrgAdmin": { - "message": "Deaktiv edilmiş təşkilatlardakı elementlərə müraciət edilə bilməz. Kömək üçün təşkilatınızın sahibi ilə əlaqə saxlayın." + "message": "Deaktiv edilmiş təşkilatlardakı elementlərə erişilə bilməz. Kömək üçün təşkilatınızın sahibi ilə əlaqə saxlayın." }, "additionalInformation": { "message": "Əlavə məlumat" @@ -4622,13 +4819,13 @@ "message": "Mobil tətbiqi əldə et" }, "getTheMobileAppDesc": { - "message": "Bitwarden mobil tətbiqi ilə parollarınıza hər yerdən müraciət edin." + "message": "Bitwarden mobil tətbiqi ilə parollarınıza hər yerdən erişin." }, "getTheDesktopApp": { "message": "Masaüstü tətbiqi əldə et" }, "getTheDesktopAppDesc": { - "message": "Seyfinizə brauzer olmadan müraciət edin, sonra həm masaüstü tətbiqində, həm də brauzer uzantısında kilid açma prosesini sürətləndirmək üçün biometrik ilə kilid açma prosesini qurun." + "message": "Seyfinizə brauzer olmadan erişin, sonra həm masaüstü tətbiqində, həm də brauzer uzantısında kilid açma prosesini sürətləndirmək üçün biometrik ilə kilid açma prosesini qurun." }, "downloadFromBitwardenNow": { "message": "İndi bitwarden.com saytından endir" @@ -4667,7 +4864,7 @@ } }, "personalDetails": { - "message": "Şəxsi detallar" + "message": "Fərdi detallar" }, "identification": { "message": "İdentifikasiya" @@ -4768,9 +4965,6 @@ } } }, - "enableAnimations": { - "message": "Animasiyaları fəallaşdır" - }, "showAnimations": { "message": "Animasiyaları göstər" }, @@ -4781,7 +4975,7 @@ "message": "Yüklənir" }, "data": { - "message": "Data" + "message": "Veri" }, "passkeys": { "message": "Keçid açarı", @@ -4799,10 +4993,10 @@ "message": "Təyin et" }, "bulkCollectionAssignmentDialogDescriptionSingular": { - "message": "Yalnız bu kolleksiyalara müraciəti olan təşkilat üzvləri bu elementi görə biləcək." + "message": "Yalnız bu kolleksiyalara erişimi olan təşkilat üzvləri bu elementi görə biləcək." }, "bulkCollectionAssignmentDialogDescriptionPlural": { - "message": "Yalnız bu kolleksiyalara müraciəti olan təşkilat üzvləri bu elementləri görə biləcək." + "message": "Yalnız bu kolleksiyalara erişimi olan təşkilat üzvləri bu elementləri görə biləcək." }, "bulkCollectionAssignmentWarning": { "message": "$TOTAL_COUNT$ element seçmisiniz. Düzəliş icazəniz olmadığı üçün $READONLY_COUNT$ elementi güncəlləyə bilməzsiniz.", @@ -4829,10 +5023,10 @@ "message": "Xana etiketi" }, "textHelpText": { - "message": "Təhlükəsizlik sualları kimi datalar üçün mətn xanalarını istifadə edin" + "message": "Təhlükəsizlik sualları kimi verilər üçün mətn xanalarını istifadə edin" }, "hiddenHelpText": { - "message": "Parol kimi həssas datalar üçün gizli xanaları istifadə edin" + "message": "Parol kimi həssas verilər üçün gizli xanaları istifadə edin" }, "checkBoxHelpText": { "message": "\"E-poçtu xatırla\" kimi formun təsdiq qutusunu avto-doldurmaq istəyirsinizsə təsdiq qutularını istifadə edin" @@ -4983,15 +5177,9 @@ "itemLocation": { "message": "Element yeri" }, - "fileSend": { - "message": "Fayl \"Send\"i" - }, "fileSends": { "message": "Fayl \"Send\"ləri" }, - "textSend": { - "message": "Mətn \"Send\"i" - }, "textSends": { "message": "Mətn \"Send\"ləri" }, @@ -5001,6 +5189,18 @@ "showNumberOfAutofillSuggestions": { "message": "Uzantı ikonunda giriş üçün avto-doldurma təklif sayını göstər" }, + "accountAccessRequested": { + "message": "Hesab erişimi tələb olundu" + }, + "confirmAccessAttempt": { + "message": "$EMAIL$ üçün erişim cəhdini təsdiqlə", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + } + } + }, "showQuickCopyActions": { "message": "Seyfdə cəld kopyalama fəaliyyətlərini göstər" }, @@ -5040,9 +5240,6 @@ "vaultCustomTimeoutMinimum": { "message": "Minimum özəl bitmə vaxtı 1 dəqiqədir." }, - "additionalContentAvailable": { - "message": "Əlavə məzmun əlçatandır" - }, "fileSavedToDevice": { "message": "Fayl cihazda saxlanıldı. Endirilənləri cihazınızdan idarə edin." }, @@ -5104,7 +5301,7 @@ "message": "Seyfinizin kilidini saniyələr ərzində açın" }, "unlockVaultDesc": { - "message": "Seyfinizə daha cəld müraciət etmək üçün kilid açma və bitmə vaxtı ayarlarını özəlləşdirə bilərsiniz." + "message": "Seyfinizə daha cəld erişmək üçün kilid açma və bitmə vaxtı ayarlarını özəlləşdirə bilərsiniz." }, "unlockPinSet": { "message": "PIN ilə kilid açma təyini" @@ -5328,6 +5525,12 @@ "changeAtRiskPassword": { "message": "Riskli parolları dəyişdir" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "Bu giriş risk altındadır və bir veb sayt əskikdir. Daha güclü təhlükəsizlik üçün bir veb sayt əlavə edin və parolu dəyişdirin." + }, + "missingWebsite": { + "message": "Əskik veb sayt" + }, "settingsVaultOptions": { "message": "Seyf seçimləri" }, @@ -5356,7 +5559,7 @@ "message": "Bütün hesablarınız üçün güclü, unikal parollar yaratmaq və saxlamaq üçün yaradıcını istifadə edin." }, "secureDevices": { - "message": "Datanız, ehtiyacınız olan vaxt yanınızdadır" + "message": "Veriləriniz, ehtiyacınız olan vaxt yanınızdadır" }, "secureDevicesBody": { "message": "Bitwarden mobil, brauzer və masaüstü tətbiqləri ilə limitsiz cihaz arasında limitsiz parol saxlayın." @@ -5376,11 +5579,23 @@ "hasItemsVaultNudgeTitle": { "message": "Seyfinizə xoş gəlmisiniz!" }, + "phishingPageTitle": { + "message": "Fişinq veb sayt" + }, + "phishingPageCloseTab": { + "message": "Vərəqi bağla" + }, + "phishingPageContinue": { + "message": "Davam" + }, + "phishingPageLearnWhy": { + "message": "Bunu niyə görürürsünüz?" + }, "hasItemsVaultNudgeBodyOne": { "message": "Hazırkı səhifə üçün elementləri avto-doldur" }, "hasItemsVaultNudgeBodyTwo": { - "message": "Asan müraciət üçün elementləri sevimlilərə əlavə et" + "message": "Asan erişmək üçün elementləri sevimlilərə əlavə et" }, "hasItemsVaultNudgeBodyThree": { "message": "Seyfinizdə başqa bir şey axtarın" @@ -5416,13 +5631,13 @@ "message": "Kimliklərinizlə, uzun qeydiyyat və ya əlaqə xanalarını daha tez avtomatik doldurun." }, "newNoteNudgeTitle": { - "message": "Həssas datalarınızı güvənli şəkildə saxlayın" + "message": "Həssas verilərinizi güvənli şəkildə saxlayın" }, "newNoteNudgeBody": { - "message": "Notlarla, bankçılıq və ya sığorta təfsilatları kimi həssas dataları təhlükəsiz saxlayın." + "message": "Notlarla, bankçılıq və ya sığorta təfsilatları kimi həssas veriləri təhlükəsiz saxlayın." }, "newSshNudgeTitle": { - "message": "Gəlişdirici dostu SSH müraciəti" + "message": "Gəlişdirici dostu SSH erişimi" }, "newSshNudgeBodyOne": { "message": "Açarlarınızı saxlayın və sürətli, şifrələnmiş kimlik doğrulama üçün SSH agentinə bağlayın.", @@ -5451,11 +5666,33 @@ "message": "Girişlərinizi güvənli şəkildə saxlamağınıza kömək etməsi üçün Parol yarat düyməsinə klikləyərək güclü və unikal parolları asanlıqla yaradın.", "description": "Aria label for the body content of the generator nudge" }, + "aboutThisSetting": { + "message": "Bu ayar barədə" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden, təcrübənizi təkmilləşdirmək üçün hansı ikonun və ya parol dəyişdirmə URL-sinin istifadə olunmalı olduğunu müəyyənləşdirmək məqsədilə saxlanılmış giriş URL-lərini istifadə edəcək. Bu xidməti istifadə etdiyiniz zaman heç bir məlumat yığılmır və ya saxlanılmır." + }, "noPermissionsViewPage": { "message": "Bu səhifəyə baxmaq icazəniz yoxdur. Fərqli hesabla giriş etməyə çalışın." }, "wasmNotSupported": { "message": "WebAssembly brauzerinizdə dəstəklənmir və ya fəal deyil. WebAssembly, Bitwarden tətbiqini istifadə etmək üçün tələb olunur.", "description": "'WebAssembly' is a technical term and should not be translated." + }, + "showMore": { + "message": "Daha çox göstər" + }, + "showLess": { + "message": "Daha az göstər" + }, + "next": { + "message": "Növbəti" + }, + "moreBreadcrumbs": { + "message": "Daha çox naviqasiya yolu", + "description": "This is used in the context of a breadcrumb navigation, indicating that there are more items in the breadcrumb trail that are not currently displayed." + }, + "confirmKeyConnectorDomain": { + "message": "Key Connector domenini təsdiqlə" } } diff --git a/apps/browser/src/_locales/be/messages.json b/apps/browser/src/_locales/be/messages.json index eb721e76850..d395e4f01a6 100644 --- a/apps/browser/src/_locales/be/messages.json +++ b/apps/browser/src/_locales/be/messages.json @@ -547,12 +547,50 @@ "searchVault": { "message": "Пошук у сховішчы" }, + "resetSearch": { + "message": "Reset search" + }, + "archiveNoun": { + "message": "Archive", + "description": "Noun" + }, + "archiveVerb": { + "message": "Archive", + "description": "Verb" + }, + "unarchive": { + "message": "Unarchive" + }, + "itemsInArchive": { + "message": "Items in archive" + }, + "noItemsInArchive": { + "message": "No items in archive" + }, + "noItemsInArchiveDesc": { + "message": "Archived items will appear here and will be excluded from general search results and autofill suggestions." + }, + "itemSentToArchive": { + "message": "Item sent to archive" + }, + "itemRemovedFromArchive": { + "message": "Item removed from archive" + }, + "archiveItem": { + "message": "Archive item" + }, + "archiveItemConfirmDesc": { + "message": "Archived items are excluded from general search results and autofill suggestions. Are you sure you want to archive this item?" + }, "edit": { "message": "Рэдагаваць" }, "view": { "message": "Прагляд" }, + "viewLogin": { + "message": "View login" + }, "noItemsInList": { "message": "У спісе адсутнічаюць элементы." }, @@ -695,6 +733,15 @@ "invalidMasterPassword": { "message": "Памылковы асноўны пароль" }, + "invalidMasterPasswordConfirmEmailAndHost": { + "message": "Invalid master password. Confirm your email is correct and your account was created on $HOST$.", + "placeholders": { + "host": { + "content": "$1", + "example": "vault.bitwarden.com" + } + } + }, "vaultTimeout": { "message": "Час чакання сховішча" }, @@ -1501,6 +1548,15 @@ "readSecurityKey": { "message": "Read security key" }, + "readingPasskeyLoading": { + "message": "Reading passkey..." + }, + "passkeyAuthenticationFailed": { + "message": "Passkey authentication failed" + }, + "useADifferentLogInMethod": { + "message": "Use a different log in method" + }, "awaitingSecurityKeyInteraction": { "message": "Awaiting security key interaction..." }, @@ -1519,9 +1575,6 @@ "selectTwoStepLoginMethod": { "message": "Select two-step login method" }, - "recoveryCodeDesc": { - "message": "Згубілі доступ да ўсіх варыянтаў доступу пастаўшчыкоў двухэтапнай аўтэнтыфікацыі? Скарыстайцеся кодам аднаўлення, каб адключыць праверку пастаўшчыкоў двухэтапнай аўтэнтыфікацыі для вашага ўліковага запісу." - }, "recoveryCodeTitle": { "message": "Код аднаўлення" }, @@ -1680,9 +1733,6 @@ "defaultAutoFillOnPageLoadDesc": { "message": "Вы можаце выключыць аўтазапаўненне на старонцы загрузцы для асобных элементаў уваходу ў меню \"Рэдагаваць\"." }, - "itemAutoFillOnPageLoad": { - "message": "Аўтазапаўненне пры загрузцы старонкі (калі ўключана ў параметрах праграмы)" - }, "autoFillOnPageLoadUseDefault": { "message": "Выкарыстоўваць прадвызначаныя налады" }, @@ -1754,23 +1804,8 @@ "popup2faCloseMessage": { "message": "Націск за межамі ўсплывальнага акна для прагляду праверачнага кода прывядзе да яго закрыцця. Адкрыць гэта ўсплывальнае акно ў новым акне, якое не закрыецца?" }, - "popupU2fCloseMessage": { - "message": "Дадзены браўзер не можа апрацоўваць запыты U2F у гэтым усплывальным акне. Адкрыць гэта ўсплывальнае акно ў новым акне, каб мець магчымасць увайсці ў сістэму, выкарыстоўваючы U2F?" - }, - "enableFavicon": { - "message": "Паказваць значкі вэб-сайтаў" - }, - "faviconDesc": { - "message": "Паказваць распазнавальны відарыс побач з кожным лагінам." - }, - "faviconDescAlt": { - "message": "Show a recognizable image next to each login. Applies to all logged in accounts." - }, - "enableBadgeCounter": { - "message": "Паказваць лічыльнік на значку" - }, - "badgeCounterDesc": { - "message": "Паказвае колькасць уваходаў для бягучай вэб-старонкі." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "cardholderName": { "message": "Імя ўладальніка карткі" @@ -1829,6 +1864,9 @@ "securityCode": { "message": "Код бяспекі" }, + "cardNumber": { + "message": "card number" + }, "ex": { "message": "напр." }, @@ -1931,32 +1969,81 @@ "typeNote": { "message": "Note" }, - "newItemHeader": { - "message": "Новы $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderLogin": { + "message": "New Login", + "description": "Header for new login item type" }, - "editItemHeader": { - "message": "Рэдагаваць $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderCard": { + "message": "New Card", + "description": "Header for new card item type" }, - "viewItemHeader": { - "message": "Прагляд $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderIdentity": { + "message": "New Identity", + "description": "Header for new identity item type" + }, + "newItemHeaderNote": { + "message": "New Note", + "description": "Header for new note item type" + }, + "newItemHeaderSshKey": { + "message": "New SSH key", + "description": "Header for new SSH key item type" + }, + "newItemHeaderTextSend": { + "message": "New Text Send", + "description": "Header for new text send" + }, + "newItemHeaderFileSend": { + "message": "New File Send", + "description": "Header for new file send" + }, + "editItemHeaderLogin": { + "message": "Edit Login", + "description": "Header for edit login item type" + }, + "editItemHeaderCard": { + "message": "Edit Card", + "description": "Header for edit card item type" + }, + "editItemHeaderIdentity": { + "message": "Edit Identity", + "description": "Header for edit identity item type" + }, + "editItemHeaderNote": { + "message": "Edit Note", + "description": "Header for edit note item type" + }, + "editItemHeaderSshKey": { + "message": "Edit SSH key", + "description": "Header for edit SSH key item type" + }, + "editItemHeaderTextSend": { + "message": "Edit Text Send", + "description": "Header for edit text send" + }, + "editItemHeaderFileSend": { + "message": "Edit File Send", + "description": "Header for edit file send" + }, + "viewItemHeaderLogin": { + "message": "View Login", + "description": "Header for view login item type" + }, + "viewItemHeaderCard": { + "message": "View Card", + "description": "Header for view card item type" + }, + "viewItemHeaderIdentity": { + "message": "View Identity", + "description": "Header for view identity item type" + }, + "viewItemHeaderNote": { + "message": "View Note", + "description": "Header for view note item type" + }, + "viewItemHeaderSshKey": { + "message": "View SSH key", + "description": "Header for view SSH key item type" }, "passwordHistory": { "message": "Гісторыя пароляў" @@ -3129,6 +3216,24 @@ } } }, + "exportingOrganizationVaultFromPasswordManagerWithDataOwnershipDesc": { + "message": "Only the organization vault associated with $ORGANIZATION$ will be exported.", + "placeholders": { + "organization": { + "content": "$1", + "example": "My Org Name" + } + } + }, + "exportingOrganizationVaultFromAdminConsoleWithDataOwnershipDesc": { + "message": "Only the organization vault associated with $ORGANIZATION$ will be exported. My items collections will not be included.", + "placeholders": { + "organization": { + "content": "$1", + "example": "My Org Name" + } + } + }, "error": { "message": "Памылка" }, @@ -3460,6 +3565,28 @@ "logInRequestSent": { "message": "Request sent" }, + "loginRequestApprovedForEmailOnDevice": { + "message": "Login request approved for $EMAIL$ on $DEVICE$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + }, + "device": { + "content": "$2", + "example": "Web app - Chrome" + } + } + }, + "youDeniedLoginAttemptFromAnotherDevice": { + "message": "You denied a login attempt from another device. If this was you, try to log in with the device again." + }, + "device": { + "message": "Device" + }, + "loginStatus": { + "message": "Login status" + }, "masterPasswordChanged": { "message": "Master password saved" }, @@ -3496,9 +3623,6 @@ "autofillPageLoadPolicyActivated": { "message": "Аўтазапаўненне пры загрузцы старонцы было ўключана палітыкамі вашай арганізацыі." }, - "howToAutofill": { - "message": "Як аўтазапоўніць" - }, "autofillSelectInfoWithCommand": { "message": "Select an item from this screen, use the shortcut $COMMAND$, or explore other options in settings.", "placeholders": { @@ -3556,6 +3680,94 @@ "rememberThisDeviceToMakeFutureLoginsSeamless": { "message": "Remember this device to make future logins seamless" }, + "manageDevices": { + "message": "Manage devices" + }, + "currentSession": { + "message": "Current session" + }, + "mobile": { + "message": "Mobile", + "description": "Mobile app" + }, + "extension": { + "message": "Extension", + "description": "Browser extension/addon" + }, + "desktop": { + "message": "Desktop", + "description": "Desktop app" + }, + "webVault": { + "message": "Web vault" + }, + "webApp": { + "message": "Web app" + }, + "cli": { + "message": "CLI" + }, + "sdk": { + "message": "SDK", + "description": "Software Development Kit" + }, + "requestPending": { + "message": "Request pending" + }, + "firstLogin": { + "message": "First login" + }, + "trusted": { + "message": "Trusted" + }, + "needsApproval": { + "message": "Needs approval" + }, + "devices": { + "message": "Devices" + }, + "accessAttemptBy": { + "message": "Access attempt by $EMAIL$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + } + } + }, + "confirmAccess": { + "message": "Confirm access" + }, + "denyAccess": { + "message": "Deny access" + }, + "time": { + "message": "Time" + }, + "deviceType": { + "message": "Device Type" + }, + "loginRequest": { + "message": "Login request" + }, + "thisRequestIsNoLongerValid": { + "message": "This request is no longer valid." + }, + "loginRequestHasAlreadyExpired": { + "message": "Login request has already expired." + }, + "justNow": { + "message": "Just now" + }, + "requestedXMinutesAgo": { + "message": "Requested $MINUTES$ minutes ago", + "placeholders": { + "minutes": { + "content": "$1", + "example": "5" + } + } + }, "deviceApprovalRequired": { "message": "Патрабуецца ўхваленне прылады. Выберыце параметры ўхвалення ніжэй:" }, @@ -3795,18 +4007,10 @@ "aliasDomain": { "message": "Мянушка дамена" }, - "passwordRepromptDisabledAutofillOnPageLoad": { - "message": "Items with master password re-prompt cannot be autofilled on page load. Autofill on page load turned off.", - "description": "Toast message for describing that master password re-prompt cannot be autofilled on page load." - }, "autofillOnPageLoadSetToDefault": { "message": "Autofill on page load set to use default setting.", "description": "Toast message for informing the user that autofill on page load has been set to the default setting." }, - "turnOffMasterPasswordPromptToEditField": { - "message": "Turn off master password re-prompt to edit this field", - "description": "Message appearing below the autofill on load message when master password reprompt is set for a vault item." - }, "toggleSideNavigation": { "message": "Toggle side navigation" }, @@ -4015,15 +4219,11 @@ "selectImportCollection": { "message": "Выбраць калекцыю" }, - "importTargetHint": { - "message": "Выберыце гэты параметр, калі вы хочаце, каб змесціва імпартаванага файла было перамешчанага ў $DESTINATION$", - "description": "Located as a hint under the import target. Will be appended by either folder or collection, depending if the user is importing into an individual or an organizational vault.", - "placeholders": { - "destination": { - "content": "$1", - "example": "folder or collection" - } - } + "importTargetHintCollection": { + "message": "Select this option if you want the imported file contents moved to a collection" + }, + "importTargetHintFolder": { + "message": "Select this option if you want the imported file contents moved to a folder" }, "importUnassignedItemsError": { "message": "Файл змяшчае непадпісаныя элементы." @@ -4080,9 +4280,6 @@ "passkeyNotCopiedAlert": { "message": "The passkey will not be copied to the cloned item. Do you want to continue cloning this item?" }, - "passkeyFeatureIsNotImplementedForAccountsWithoutMasterPassword": { - "message": "Verification required by the initiating site. This feature is not yet implemented for accounts without master password." - }, "logInWithPasskeyQuestion": { "message": "Log in with passkey?" }, @@ -4465,17 +4662,17 @@ } } }, - "copyFieldValue": { - "message": "Copy $FIELD$, $VALUE$", + "copyFieldCipherName": { + "message": "Copy $FIELD$, $CIPHERNAME$", "description": "Title for a button that copies a field value to the clipboard.", "placeholders": { "field": { "content": "$1", "example": "Username" }, - "value": { + "ciphername": { "content": "$2", - "example": "Foo" + "example": "Login Item" } } }, @@ -4768,9 +4965,6 @@ } } }, - "enableAnimations": { - "message": "Уключыць анімацыі" - }, "showAnimations": { "message": "Паказаць анімацыі" }, @@ -4983,15 +5177,9 @@ "itemLocation": { "message": "Item Location" }, - "fileSend": { - "message": "File Send" - }, "fileSends": { "message": "File Sends" }, - "textSend": { - "message": "Text Send" - }, "textSends": { "message": "Text Sends" }, @@ -5001,6 +5189,18 @@ "showNumberOfAutofillSuggestions": { "message": "Show number of login autofill suggestions on extension icon" }, + "accountAccessRequested": { + "message": "Account access requested" + }, + "confirmAccessAttempt": { + "message": "Confirm access attempt for $EMAIL$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + } + } + }, "showQuickCopyActions": { "message": "Show quick copy actions on Vault" }, @@ -5040,9 +5240,6 @@ "vaultCustomTimeoutMinimum": { "message": "Minimum custom timeout is 1 minute." }, - "additionalContentAvailable": { - "message": "Additional content is available" - }, "fileSavedToDevice": { "message": "File saved to device. Manage from your device downloads." }, @@ -5328,6 +5525,12 @@ "changeAtRiskPassword": { "message": "Change at-risk password" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "This login is at-risk and missing a website. Add a website and change the password for stronger security." + }, + "missingWebsite": { + "message": "Missing website" + }, "settingsVaultOptions": { "message": "Vault options" }, @@ -5376,6 +5579,18 @@ "hasItemsVaultNudgeTitle": { "message": "Welcome to your vault!" }, + "phishingPageTitle": { + "message": "Phishing website" + }, + "phishingPageCloseTab": { + "message": "Close tab" + }, + "phishingPageContinue": { + "message": "Continue" + }, + "phishingPageLearnWhy": { + "message": "Why are you seeing this?" + }, "hasItemsVaultNudgeBodyOne": { "message": "Autofill items for the current page" }, @@ -5451,11 +5666,33 @@ "message": "Easily create strong and unique passwords by clicking on the Generate password button to help you keep your logins secure.", "description": "Aria label for the body content of the generator nudge" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "noPermissionsViewPage": { "message": "You do not have permissions to view this page. Try logging in with a different account." }, "wasmNotSupported": { "message": "WebAssembly is not supported on your browser or is not enabled. WebAssembly is required to use the Bitwarden app.", "description": "'WebAssembly' is a technical term and should not be translated." + }, + "showMore": { + "message": "Show more" + }, + "showLess": { + "message": "Show less" + }, + "next": { + "message": "Next" + }, + "moreBreadcrumbs": { + "message": "More breadcrumbs", + "description": "This is used in the context of a breadcrumb navigation, indicating that there are more items in the breadcrumb trail that are not currently displayed." + }, + "confirmKeyConnectorDomain": { + "message": "Confirm Key Connector domain" } } diff --git a/apps/browser/src/_locales/bg/messages.json b/apps/browser/src/_locales/bg/messages.json index dad53b42e36..d3d7c3dc502 100644 --- a/apps/browser/src/_locales/bg/messages.json +++ b/apps/browser/src/_locales/bg/messages.json @@ -547,12 +547,50 @@ "searchVault": { "message": "Търсене в трезора" }, + "resetSearch": { + "message": "Нулиране на търсенето" + }, + "archiveNoun": { + "message": "Архив", + "description": "Noun" + }, + "archiveVerb": { + "message": "Архивиране", + "description": "Verb" + }, + "unarchive": { + "message": "Изваждане от архива" + }, + "itemsInArchive": { + "message": "Елементи в архива" + }, + "noItemsInArchive": { + "message": "Няма елементи в архива" + }, + "noItemsInArchiveDesc": { + "message": "Архивираните елементи ще се показват тук и ще бъдат изключени от общите резултати при търсене и от предложенията за автоматично попълване." + }, + "itemSentToArchive": { + "message": "Елементът е преместен в архива" + }, + "itemRemovedFromArchive": { + "message": "Елементът е изваден от архива" + }, + "archiveItem": { + "message": "Архивиране на елемента" + }, + "archiveItemConfirmDesc": { + "message": "Архивираните елементи са изключени от общите резултати при търсене и от предложенията за автоматично попълване. Наистина ли искате да архивирате този елемент?" + }, "edit": { "message": "Редактиране" }, "view": { "message": "Преглед" }, + "viewLogin": { + "message": "Преглед на елемента за вписване" + }, "noItemsInList": { "message": "Няма елементи за показване." }, @@ -695,6 +733,15 @@ "invalidMasterPassword": { "message": "Грешна главна парола" }, + "invalidMasterPasswordConfirmEmailAndHost": { + "message": "Грешна главна парола. Проверете дали е-пощата е правилна и дали акаунтът Ви е създаден в $HOST$.", + "placeholders": { + "host": { + "content": "$1", + "example": "vault.bitwarden.com" + } + } + }, "vaultTimeout": { "message": "Време за достъп" }, @@ -1501,6 +1548,15 @@ "readSecurityKey": { "message": "Прочитане на ключа за сигурност" }, + "readingPasskeyLoading": { + "message": "Прочитане на секретния ключ…" + }, + "passkeyAuthenticationFailed": { + "message": "Удостоверяването чрез секретен ключ беше неуспешно" + }, + "useADifferentLogInMethod": { + "message": "Използване на друг метод на вписване" + }, "awaitingSecurityKeyInteraction": { "message": "Изчакване на действие с ключ за сигурност…" }, @@ -1519,9 +1575,6 @@ "selectTwoStepLoginMethod": { "message": "Изберете начин за двустепенно удостоверяване" }, - "recoveryCodeDesc": { - "message": "Ако сте загубили достъп до двустепенното удостоверяване, може да използвате код за възстановяване, за да изключите двустепенното удостоверяване в абонамента си." - }, "recoveryCodeTitle": { "message": "Код за възстановяване" }, @@ -1680,9 +1733,6 @@ "defaultAutoFillOnPageLoadDesc": { "message": "Ако включите автоматичното попълване при зареждане на страница, след това можете да включвате или изключвате тази функционалност за всеки отделен запис. Това ще бъде стандартният начин на работа за записите, за които не е настроено допълнително." }, - "itemAutoFillOnPageLoad": { - "message": "Автоматично попълване при зареждане на страницата (ако е включено в настройките)" - }, "autoFillOnPageLoadUseDefault": { "message": "Използване на стандартната настройка" }, @@ -1754,23 +1804,8 @@ "popup2faCloseMessage": { "message": "Ако натиснете бутон на мишката извън изскочилия прозорец за кода за потвърждение, същият този прозорец ще се затвори. Искате ли проверката да се извърши в нормален прозорец, който не се затваря толкова лесно?" }, - "popupU2fCloseMessage": { - "message": "Този браузър не поддържа заявки чрез U2F в такъв изскачащ прозорец. Искате ли да се отвори нов прозорец, за да може да се впишете чрез U2F?" - }, - "enableFavicon": { - "message": "Показване на иконките на уеб сайтовете" - }, - "faviconDesc": { - "message": "Показване на разпознаваемо изображение до всеки запис." - }, - "faviconDescAlt": { - "message": "Показване на разпознаваемо изображение до всеки елемент. Прилага се към всички акаунти, в които сте Вписан(а)." - }, - "enableBadgeCounter": { - "message": "Показване на брояч в значка" - }, - "badgeCounterDesc": { - "message": "Показване на броя записи, които имате за текущата уеб страница." + "showIconsChangePasswordUrls": { + "message": "Показване на иконките на уеб сайтовете и извличане на адресите за смяна на паролата" }, "cardholderName": { "message": "Име на притежателя на картата" @@ -1829,6 +1864,9 @@ "securityCode": { "message": "Код за сигурност" }, + "cardNumber": { + "message": "номер на карта" + }, "ex": { "message": "напр." }, @@ -1931,32 +1969,81 @@ "typeNote": { "message": "Бележка" }, - "newItemHeader": { - "message": "Ново $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderLogin": { + "message": "Нов елемент за вписване", + "description": "Header for new login item type" }, - "editItemHeader": { - "message": "Редактиране на $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderCard": { + "message": "Нова карта", + "description": "Header for new card item type" }, - "viewItemHeader": { - "message": "Преглед на $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderIdentity": { + "message": "Нова самоличност", + "description": "Header for new identity item type" + }, + "newItemHeaderNote": { + "message": "Нова бележка", + "description": "Header for new note item type" + }, + "newItemHeaderSshKey": { + "message": "Нов SSH ключ", + "description": "Header for new SSH key item type" + }, + "newItemHeaderTextSend": { + "message": "Ново текстово Изпращане", + "description": "Header for new text send" + }, + "newItemHeaderFileSend": { + "message": "Ново файлово Изпращане", + "description": "Header for new file send" + }, + "editItemHeaderLogin": { + "message": "Редактиране на елемента за вписване", + "description": "Header for edit login item type" + }, + "editItemHeaderCard": { + "message": "Редактиране на картата", + "description": "Header for edit card item type" + }, + "editItemHeaderIdentity": { + "message": "Редактиране на самоличността", + "description": "Header for edit identity item type" + }, + "editItemHeaderNote": { + "message": "Редактиране на бележката", + "description": "Header for edit note item type" + }, + "editItemHeaderSshKey": { + "message": "Редактиране на SSH ключа", + "description": "Header for edit SSH key item type" + }, + "editItemHeaderTextSend": { + "message": "Редактиране на текстовото Изпращане", + "description": "Header for edit text send" + }, + "editItemHeaderFileSend": { + "message": "Редактиране на файловото Изпращане", + "description": "Header for edit file send" + }, + "viewItemHeaderLogin": { + "message": "Преглед на елемента за вписване", + "description": "Header for view login item type" + }, + "viewItemHeaderCard": { + "message": "Преглед на картата", + "description": "Header for view card item type" + }, + "viewItemHeaderIdentity": { + "message": "Преглед на самоличността", + "description": "Header for view identity item type" + }, + "viewItemHeaderNote": { + "message": "Преглед на бележката", + "description": "Header for view note item type" + }, + "viewItemHeaderSshKey": { + "message": "Преглед на SSH ключа", + "description": "Header for view SSH key item type" }, "passwordHistory": { "message": "Хронология на паролата" @@ -3129,6 +3216,24 @@ } } }, + "exportingOrganizationVaultFromPasswordManagerWithDataOwnershipDesc": { + "message": "Ще бъдат изнесени само записите от трезора свързан с $ORGANIZATION$.", + "placeholders": { + "organization": { + "content": "$1", + "example": "My Org Name" + } + } + }, + "exportingOrganizationVaultFromAdminConsoleWithDataOwnershipDesc": { + "message": "Only the organization vault associated with $ORGANIZATION$ will be exported. My items collections will not be included.", + "placeholders": { + "organization": { + "content": "$1", + "example": "My Org Name" + } + } + }, "error": { "message": "Грешка" }, @@ -3460,6 +3565,28 @@ "logInRequestSent": { "message": "Заявката е изпратена" }, + "loginRequestApprovedForEmailOnDevice": { + "message": "Заявката за вписване за $EMAIL$ на $DEVICE$ е одобрена", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + }, + "device": { + "content": "$2", + "example": "Web app - Chrome" + } + } + }, + "youDeniedLoginAttemptFromAnotherDevice": { + "message": "Вие отказахте опит за вписване от друго устройство. Ако това сте били Вие, опитайте да се впишете от устройството отново." + }, + "device": { + "message": "Устройство" + }, + "loginStatus": { + "message": "Състояние на вписването" + }, "masterPasswordChanged": { "message": "Главната парола е запазена" }, @@ -3496,9 +3623,6 @@ "autofillPageLoadPolicyActivated": { "message": "Автоматичното попълване при зареждане на страница е включено в съответствие с политиките на Вашата организация." }, - "howToAutofill": { - "message": "Как се ползва автоматичното попълване" - }, "autofillSelectInfoWithCommand": { "message": "Изберете елемент на този екран, използвайте комбинацията $COMMAND$ или разгледайте други опции в настройките.", "placeholders": { @@ -3556,6 +3680,94 @@ "rememberThisDeviceToMakeFutureLoginsSeamless": { "message": "Запомняне на това устройство, така че в бъдеще вписването да бъде по-лесно" }, + "manageDevices": { + "message": "Управление на устройствата" + }, + "currentSession": { + "message": "Текуща сесия" + }, + "mobile": { + "message": "Мобилно приложение", + "description": "Mobile app" + }, + "extension": { + "message": "Добавка за браузър", + "description": "Browser extension/addon" + }, + "desktop": { + "message": "Работен плот", + "description": "Desktop app" + }, + "webVault": { + "message": "Трезор по уеб" + }, + "webApp": { + "message": "Приложение по уеб" + }, + "cli": { + "message": "CLI" + }, + "sdk": { + "message": "SDK", + "description": "Software Development Kit" + }, + "requestPending": { + "message": "Чакаща заявка" + }, + "firstLogin": { + "message": "Първо вписване" + }, + "trusted": { + "message": "Доверено" + }, + "needsApproval": { + "message": "Изисква одобрение" + }, + "devices": { + "message": "Устройства" + }, + "accessAttemptBy": { + "message": "Опит за достъп от $EMAIL$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + } + } + }, + "confirmAccess": { + "message": "Разрешаване на достъпа" + }, + "denyAccess": { + "message": "Отказване на достъпа" + }, + "time": { + "message": "Време" + }, + "deviceType": { + "message": "Вид устройство" + }, + "loginRequest": { + "message": "Заявка за вписване" + }, + "thisRequestIsNoLongerValid": { + "message": "Тази заявка вече не е активна." + }, + "loginRequestHasAlreadyExpired": { + "message": "Заявката за вписване вече е изтекла." + }, + "justNow": { + "message": "Току-що" + }, + "requestedXMinutesAgo": { + "message": "Заявено преди $MINUTES$ минути", + "placeholders": { + "minutes": { + "content": "$1", + "example": "5" + } + } + }, "deviceApprovalRequired": { "message": "Изисква се одобрение на устройството. Изберете начин за одобрение по-долу:" }, @@ -3795,18 +4007,10 @@ "aliasDomain": { "message": "Псевдонимен домейн" }, - "passwordRepromptDisabledAutofillOnPageLoad": { - "message": "Записите с включено изискване за повторно въвеждане на главната парола не могат да бъдат попълвани автоматично при зареждане на страницата. Автоматичното попълване при зареждане на страницата е изключено.", - "description": "Toast message for describing that master password re-prompt cannot be autofilled on page load." - }, "autofillOnPageLoadSetToDefault": { "message": "Автоматичното попълване при зареждане на страницата използва настройката си по подразбиране.", "description": "Toast message for informing the user that autofill on page load has been set to the default setting." }, - "turnOffMasterPasswordPromptToEditField": { - "message": "Изключете повторното въвеждане на главната парола, за да редактирате това поле", - "description": "Message appearing below the autofill on load message when master password reprompt is set for a vault item." - }, "toggleSideNavigation": { "message": "Превключване на страничната навигация" }, @@ -4015,15 +4219,11 @@ "selectImportCollection": { "message": "Изберете колекция" }, - "importTargetHint": { - "message": "Изберете тази опция, ако искате съдържанието на внесения файл да бъде преместено в $DESTINATION$", - "description": "Located as a hint under the import target. Will be appended by either folder or collection, depending if the user is importing into an individual or an organizational vault.", - "placeholders": { - "destination": { - "content": "$1", - "example": "folder or collection" - } - } + "importTargetHintCollection": { + "message": "Изберете тази опция, ако искате съдържанието на внесения файл да бъде преместено в колекция" + }, + "importTargetHintFolder": { + "message": "Изберете тази опция, ако искате съдържанието на внесения файл да бъде преместено в папка" }, "importUnassignedItemsError": { "message": "Файлът съдържа невъзложени елементи." @@ -4080,9 +4280,6 @@ "passkeyNotCopiedAlert": { "message": "Секретният ключ няма да бъде копиран в клонирания елемент. Искате ли да продължите с клонирането на елемента?" }, - "passkeyFeatureIsNotImplementedForAccountsWithoutMasterPassword": { - "message": "Изисква се проверка от иницииращия сайт. Тази функция все още не е внедрена за акаунти без главна парола." - }, "logInWithPasskeyQuestion": { "message": "Вписване със секретен ключ?" }, @@ -4465,17 +4662,17 @@ } } }, - "copyFieldValue": { - "message": "Копиране на $FIELD$, $VALUE$", + "copyFieldCipherName": { + "message": "Копиране на $FIELD$, $CIPHERNAME$", "description": "Title for a button that copies a field value to the clipboard.", "placeholders": { "field": { "content": "$1", "example": "Username" }, - "value": { + "ciphername": { "content": "$2", - "example": "Foo" + "example": "Login Item" } } }, @@ -4768,9 +4965,6 @@ } } }, - "enableAnimations": { - "message": "Включване на анимациите" - }, "showAnimations": { "message": "Показване на анимации" }, @@ -4983,15 +5177,9 @@ "itemLocation": { "message": "Местоположение на елемента" }, - "fileSend": { - "message": "Файлово изпращане" - }, "fileSends": { "message": "Файлови изпращания" }, - "textSend": { - "message": "Текстово изпращане" - }, "textSends": { "message": "Текстови изпращания" }, @@ -5001,6 +5189,18 @@ "showNumberOfAutofillSuggestions": { "message": "Показване на броя предложения за автоматично попълване на данни за вписване върху иконката на добавката" }, + "accountAccessRequested": { + "message": "Има заявка за достъп до акаунта" + }, + "confirmAccessAttempt": { + "message": "Потвърждаване на заявката за достъп за $EMAIL$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + } + } + }, "showQuickCopyActions": { "message": "Показване на действията за бързо копиране в трезора" }, @@ -5040,9 +5240,6 @@ "vaultCustomTimeoutMinimum": { "message": "Минималното персонализирано време за достъп е 1 минута." }, - "additionalContentAvailable": { - "message": "Има налично допълнително съдържание" - }, "fileSavedToDevice": { "message": "Файлът е запазен на устройството. Можете да го намерите в мястото за сваляния на устройството." }, @@ -5328,6 +5525,12 @@ "changeAtRiskPassword": { "message": "Промяна на парола в риск" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "Този елемент за вписване е в риск и в него липсва уеб сайт. Добавете уеб сайт и сменете паролата, за по-добра сигурност." + }, + "missingWebsite": { + "message": "Липсващ уеб сайт" + }, "settingsVaultOptions": { "message": "Настройки на трезора" }, @@ -5376,6 +5579,18 @@ "hasItemsVaultNudgeTitle": { "message": "Добре дошли в трезора си!" }, + "phishingPageTitle": { + "message": "Измамен уеб сайт" + }, + "phishingPageCloseTab": { + "message": "Затваряне на раздела" + }, + "phishingPageContinue": { + "message": "Продължаване" + }, + "phishingPageLearnWhy": { + "message": "Защо виждате това?" + }, "hasItemsVaultNudgeBodyOne": { "message": "Попълвайте автоматично елементи в текущата страница" }, @@ -5451,11 +5666,33 @@ "message": "Създавайте лесно сложни и уникални пароли като щракнете върху бутона за генериране на парола, за да защитите данните си за вписване.", "description": "Aria label for the body content of the generator nudge" }, + "aboutThisSetting": { + "message": "Относно тази настройка" + }, + "permitCipherDetailsDescription": { + "message": "Битуорден ще използва запазените адреси за вписване, за да определи коя иконка или адрес за смяна на паролата да се ползва, за да улесни работата Ви. Никакви данни не се събират или съхраняват, когато използвате тази услуга." + }, "noPermissionsViewPage": { "message": "Нямате права за преглед на тази страница. Опитайте да се впишете с друг акаунт." }, "wasmNotSupported": { "message": "WebAssembly не е включено или не се поддържа от Вашия браузър. За ползването на приложението на Битуорден е необходимо WebAssembly да работи.", "description": "'WebAssembly' is a technical term and should not be translated." + }, + "showMore": { + "message": "Показване на повече" + }, + "showLess": { + "message": "Показване на по-малко" + }, + "next": { + "message": "Следващо" + }, + "moreBreadcrumbs": { + "message": "Още елементи в пътечката", + "description": "This is used in the context of a breadcrumb navigation, indicating that there are more items in the breadcrumb trail that are not currently displayed." + }, + "confirmKeyConnectorDomain": { + "message": "Потвърждаване на домейна на конектора за ключове" } } diff --git a/apps/browser/src/_locales/bn/messages.json b/apps/browser/src/_locales/bn/messages.json index d70378f146c..389a47bd248 100644 --- a/apps/browser/src/_locales/bn/messages.json +++ b/apps/browser/src/_locales/bn/messages.json @@ -547,12 +547,50 @@ "searchVault": { "message": "ভল্ট খুঁজুন" }, + "resetSearch": { + "message": "Reset search" + }, + "archiveNoun": { + "message": "Archive", + "description": "Noun" + }, + "archiveVerb": { + "message": "Archive", + "description": "Verb" + }, + "unarchive": { + "message": "Unarchive" + }, + "itemsInArchive": { + "message": "Items in archive" + }, + "noItemsInArchive": { + "message": "No items in archive" + }, + "noItemsInArchiveDesc": { + "message": "Archived items will appear here and will be excluded from general search results and autofill suggestions." + }, + "itemSentToArchive": { + "message": "Item sent to archive" + }, + "itemRemovedFromArchive": { + "message": "Item removed from archive" + }, + "archiveItem": { + "message": "Archive item" + }, + "archiveItemConfirmDesc": { + "message": "Archived items are excluded from general search results and autofill suggestions. Are you sure you want to archive this item?" + }, "edit": { "message": "সম্পাদনা" }, "view": { "message": "দেখুন" }, + "viewLogin": { + "message": "View login" + }, "noItemsInList": { "message": "তালিকার জন্য কোনও বস্তু নেই।" }, @@ -695,6 +733,15 @@ "invalidMasterPassword": { "message": "অবৈধ মূল পাসওয়ার্ড" }, + "invalidMasterPasswordConfirmEmailAndHost": { + "message": "Invalid master password. Confirm your email is correct and your account was created on $HOST$.", + "placeholders": { + "host": { + "content": "$1", + "example": "vault.bitwarden.com" + } + } + }, "vaultTimeout": { "message": "ভল্টের সময়সীমা" }, @@ -1501,6 +1548,15 @@ "readSecurityKey": { "message": "Read security key" }, + "readingPasskeyLoading": { + "message": "Reading passkey..." + }, + "passkeyAuthenticationFailed": { + "message": "Passkey authentication failed" + }, + "useADifferentLogInMethod": { + "message": "Use a different log in method" + }, "awaitingSecurityKeyInteraction": { "message": "Awaiting security key interaction..." }, @@ -1519,9 +1575,6 @@ "selectTwoStepLoginMethod": { "message": "Select two-step login method" }, - "recoveryCodeDesc": { - "message": "আপনার সমস্ত দ্বি-গুণক সরবরাহকারীদের অ্যাক্সেস হারিয়েছেন? আপনার অ্যাকাউন্ট থেকে সমস্ত দ্বি-গুণক সরবরাহকারীদের অক্ষম করতে আপনার পুনরুদ্ধার কোডটি ব্যবহার করুন।" - }, "recoveryCodeTitle": { "message": "পুনরুদ্ধার কোড" }, @@ -1680,9 +1733,6 @@ "defaultAutoFillOnPageLoadDesc": { "message": "You can turn off autofill on page load for individual login items from the item's Edit view." }, - "itemAutoFillOnPageLoad": { - "message": "Autofill on page load (if set up in Options)" - }, "autoFillOnPageLoadUseDefault": { "message": "Use default setting" }, @@ -1754,23 +1804,8 @@ "popup2faCloseMessage": { "message": "আপনার যাচাইকরণ কোডটির জন্য আপনার ইমেলটি পরীক্ষা করতে পপআপ উইন্ডোটির বাইরে ক্লিক করলে এই পপআপটি বন্ধ হয়ে যাবে। আপনি কি এই পপআপটি একটি নতুন উইন্ডোতে খুলতে চান যাতে এটি বন্ধ না হয়?" }, - "popupU2fCloseMessage": { - "message": "ব্রাউজারটি এই পপআপ উইন্ডোতে U2F অনুরোধগুলি প্রক্রিয়া করতে পারে না। আপনি কি এই পপআপটি একটি নতুন উইন্ডোতে খুলতে চান যাতে আপনি U2F ব্যবহার করে লগ ইন করতে পারেন?" - }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." - }, - "faviconDescAlt": { - "message": "Show a recognizable image next to each login. Applies to all logged in accounts." - }, - "enableBadgeCounter": { - "message": "Show badge counter" - }, - "badgeCounterDesc": { - "message": "Indicate how many logins you have for the current web page." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "cardholderName": { "message": "কার্ডধারীর নাম" @@ -1829,6 +1864,9 @@ "securityCode": { "message": "নিরাপত্তা কোড" }, + "cardNumber": { + "message": "card number" + }, "ex": { "message": "উদাহরণ" }, @@ -1931,32 +1969,81 @@ "typeNote": { "message": "Note" }, - "newItemHeader": { - "message": "New $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderLogin": { + "message": "New Login", + "description": "Header for new login item type" }, - "editItemHeader": { - "message": "Edit $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderCard": { + "message": "New Card", + "description": "Header for new card item type" }, - "viewItemHeader": { - "message": "View $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderIdentity": { + "message": "New Identity", + "description": "Header for new identity item type" + }, + "newItemHeaderNote": { + "message": "New Note", + "description": "Header for new note item type" + }, + "newItemHeaderSshKey": { + "message": "New SSH key", + "description": "Header for new SSH key item type" + }, + "newItemHeaderTextSend": { + "message": "New Text Send", + "description": "Header for new text send" + }, + "newItemHeaderFileSend": { + "message": "New File Send", + "description": "Header for new file send" + }, + "editItemHeaderLogin": { + "message": "Edit Login", + "description": "Header for edit login item type" + }, + "editItemHeaderCard": { + "message": "Edit Card", + "description": "Header for edit card item type" + }, + "editItemHeaderIdentity": { + "message": "Edit Identity", + "description": "Header for edit identity item type" + }, + "editItemHeaderNote": { + "message": "Edit Note", + "description": "Header for edit note item type" + }, + "editItemHeaderSshKey": { + "message": "Edit SSH key", + "description": "Header for edit SSH key item type" + }, + "editItemHeaderTextSend": { + "message": "Edit Text Send", + "description": "Header for edit text send" + }, + "editItemHeaderFileSend": { + "message": "Edit File Send", + "description": "Header for edit file send" + }, + "viewItemHeaderLogin": { + "message": "View Login", + "description": "Header for view login item type" + }, + "viewItemHeaderCard": { + "message": "View Card", + "description": "Header for view card item type" + }, + "viewItemHeaderIdentity": { + "message": "View Identity", + "description": "Header for view identity item type" + }, + "viewItemHeaderNote": { + "message": "View Note", + "description": "Header for view note item type" + }, + "viewItemHeaderSshKey": { + "message": "View SSH key", + "description": "Header for view SSH key item type" }, "passwordHistory": { "message": "পাসওয়ার্ড ইতিহাস" @@ -3129,6 +3216,24 @@ } } }, + "exportingOrganizationVaultFromPasswordManagerWithDataOwnershipDesc": { + "message": "Only the organization vault associated with $ORGANIZATION$ will be exported.", + "placeholders": { + "organization": { + "content": "$1", + "example": "My Org Name" + } + } + }, + "exportingOrganizationVaultFromAdminConsoleWithDataOwnershipDesc": { + "message": "Only the organization vault associated with $ORGANIZATION$ will be exported. My items collections will not be included.", + "placeholders": { + "organization": { + "content": "$1", + "example": "My Org Name" + } + } + }, "error": { "message": "Error" }, @@ -3460,6 +3565,28 @@ "logInRequestSent": { "message": "Request sent" }, + "loginRequestApprovedForEmailOnDevice": { + "message": "Login request approved for $EMAIL$ on $DEVICE$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + }, + "device": { + "content": "$2", + "example": "Web app - Chrome" + } + } + }, + "youDeniedLoginAttemptFromAnotherDevice": { + "message": "You denied a login attempt from another device. If this was you, try to log in with the device again." + }, + "device": { + "message": "Device" + }, + "loginStatus": { + "message": "Login status" + }, "masterPasswordChanged": { "message": "Master password saved" }, @@ -3496,9 +3623,6 @@ "autofillPageLoadPolicyActivated": { "message": "Your organization policies have turned on autofill on page load." }, - "howToAutofill": { - "message": "How to autofill" - }, "autofillSelectInfoWithCommand": { "message": "Select an item from this screen, use the shortcut $COMMAND$, or explore other options in settings.", "placeholders": { @@ -3556,6 +3680,94 @@ "rememberThisDeviceToMakeFutureLoginsSeamless": { "message": "Remember this device to make future logins seamless" }, + "manageDevices": { + "message": "Manage devices" + }, + "currentSession": { + "message": "Current session" + }, + "mobile": { + "message": "Mobile", + "description": "Mobile app" + }, + "extension": { + "message": "Extension", + "description": "Browser extension/addon" + }, + "desktop": { + "message": "Desktop", + "description": "Desktop app" + }, + "webVault": { + "message": "Web vault" + }, + "webApp": { + "message": "Web app" + }, + "cli": { + "message": "CLI" + }, + "sdk": { + "message": "SDK", + "description": "Software Development Kit" + }, + "requestPending": { + "message": "Request pending" + }, + "firstLogin": { + "message": "First login" + }, + "trusted": { + "message": "Trusted" + }, + "needsApproval": { + "message": "Needs approval" + }, + "devices": { + "message": "Devices" + }, + "accessAttemptBy": { + "message": "Access attempt by $EMAIL$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + } + } + }, + "confirmAccess": { + "message": "Confirm access" + }, + "denyAccess": { + "message": "Deny access" + }, + "time": { + "message": "Time" + }, + "deviceType": { + "message": "Device Type" + }, + "loginRequest": { + "message": "Login request" + }, + "thisRequestIsNoLongerValid": { + "message": "This request is no longer valid." + }, + "loginRequestHasAlreadyExpired": { + "message": "Login request has already expired." + }, + "justNow": { + "message": "Just now" + }, + "requestedXMinutesAgo": { + "message": "Requested $MINUTES$ minutes ago", + "placeholders": { + "minutes": { + "content": "$1", + "example": "5" + } + } + }, "deviceApprovalRequired": { "message": "Device approval required. Select an approval option below:" }, @@ -3795,18 +4007,10 @@ "aliasDomain": { "message": "Alias domain" }, - "passwordRepromptDisabledAutofillOnPageLoad": { - "message": "Items with master password re-prompt cannot be autofilled on page load. Autofill on page load turned off.", - "description": "Toast message for describing that master password re-prompt cannot be autofilled on page load." - }, "autofillOnPageLoadSetToDefault": { "message": "Autofill on page load set to use default setting.", "description": "Toast message for informing the user that autofill on page load has been set to the default setting." }, - "turnOffMasterPasswordPromptToEditField": { - "message": "Turn off master password re-prompt to edit this field", - "description": "Message appearing below the autofill on load message when master password reprompt is set for a vault item." - }, "toggleSideNavigation": { "message": "Toggle side navigation" }, @@ -4015,15 +4219,11 @@ "selectImportCollection": { "message": "Select a collection" }, - "importTargetHint": { - "message": "Select this option if you want the imported file contents moved to a $DESTINATION$", - "description": "Located as a hint under the import target. Will be appended by either folder or collection, depending if the user is importing into an individual or an organizational vault.", - "placeholders": { - "destination": { - "content": "$1", - "example": "folder or collection" - } - } + "importTargetHintCollection": { + "message": "Select this option if you want the imported file contents moved to a collection" + }, + "importTargetHintFolder": { + "message": "Select this option if you want the imported file contents moved to a folder" }, "importUnassignedItemsError": { "message": "File contains unassigned items." @@ -4080,9 +4280,6 @@ "passkeyNotCopiedAlert": { "message": "The passkey will not be copied to the cloned item. Do you want to continue cloning this item?" }, - "passkeyFeatureIsNotImplementedForAccountsWithoutMasterPassword": { - "message": "Verification required by the initiating site. This feature is not yet implemented for accounts without master password." - }, "logInWithPasskeyQuestion": { "message": "Log in with passkey?" }, @@ -4465,17 +4662,17 @@ } } }, - "copyFieldValue": { - "message": "Copy $FIELD$, $VALUE$", + "copyFieldCipherName": { + "message": "Copy $FIELD$, $CIPHERNAME$", "description": "Title for a button that copies a field value to the clipboard.", "placeholders": { "field": { "content": "$1", "example": "Username" }, - "value": { + "ciphername": { "content": "$2", - "example": "Foo" + "example": "Login Item" } } }, @@ -4768,9 +4965,6 @@ } } }, - "enableAnimations": { - "message": "Enable animations" - }, "showAnimations": { "message": "Show animations" }, @@ -4983,15 +5177,9 @@ "itemLocation": { "message": "Item Location" }, - "fileSend": { - "message": "File Send" - }, "fileSends": { "message": "File Sends" }, - "textSend": { - "message": "Text Send" - }, "textSends": { "message": "Text Sends" }, @@ -5001,6 +5189,18 @@ "showNumberOfAutofillSuggestions": { "message": "Show number of login autofill suggestions on extension icon" }, + "accountAccessRequested": { + "message": "Account access requested" + }, + "confirmAccessAttempt": { + "message": "Confirm access attempt for $EMAIL$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + } + } + }, "showQuickCopyActions": { "message": "Show quick copy actions on Vault" }, @@ -5040,9 +5240,6 @@ "vaultCustomTimeoutMinimum": { "message": "Minimum custom timeout is 1 minute." }, - "additionalContentAvailable": { - "message": "Additional content is available" - }, "fileSavedToDevice": { "message": "File saved to device. Manage from your device downloads." }, @@ -5328,6 +5525,12 @@ "changeAtRiskPassword": { "message": "Change at-risk password" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "This login is at-risk and missing a website. Add a website and change the password for stronger security." + }, + "missingWebsite": { + "message": "Missing website" + }, "settingsVaultOptions": { "message": "Vault options" }, @@ -5376,6 +5579,18 @@ "hasItemsVaultNudgeTitle": { "message": "Welcome to your vault!" }, + "phishingPageTitle": { + "message": "Phishing website" + }, + "phishingPageCloseTab": { + "message": "Close tab" + }, + "phishingPageContinue": { + "message": "Continue" + }, + "phishingPageLearnWhy": { + "message": "Why are you seeing this?" + }, "hasItemsVaultNudgeBodyOne": { "message": "Autofill items for the current page" }, @@ -5451,11 +5666,33 @@ "message": "Easily create strong and unique passwords by clicking on the Generate password button to help you keep your logins secure.", "description": "Aria label for the body content of the generator nudge" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "noPermissionsViewPage": { "message": "You do not have permissions to view this page. Try logging in with a different account." }, "wasmNotSupported": { "message": "WebAssembly is not supported on your browser or is not enabled. WebAssembly is required to use the Bitwarden app.", "description": "'WebAssembly' is a technical term and should not be translated." + }, + "showMore": { + "message": "Show more" + }, + "showLess": { + "message": "Show less" + }, + "next": { + "message": "Next" + }, + "moreBreadcrumbs": { + "message": "More breadcrumbs", + "description": "This is used in the context of a breadcrumb navigation, indicating that there are more items in the breadcrumb trail that are not currently displayed." + }, + "confirmKeyConnectorDomain": { + "message": "Confirm Key Connector domain" } } diff --git a/apps/browser/src/_locales/bs/messages.json b/apps/browser/src/_locales/bs/messages.json index afe20ff55ca..994aec7473c 100644 --- a/apps/browser/src/_locales/bs/messages.json +++ b/apps/browser/src/_locales/bs/messages.json @@ -547,12 +547,50 @@ "searchVault": { "message": "Search vault" }, + "resetSearch": { + "message": "Reset search" + }, + "archiveNoun": { + "message": "Archive", + "description": "Noun" + }, + "archiveVerb": { + "message": "Archive", + "description": "Verb" + }, + "unarchive": { + "message": "Unarchive" + }, + "itemsInArchive": { + "message": "Items in archive" + }, + "noItemsInArchive": { + "message": "No items in archive" + }, + "noItemsInArchiveDesc": { + "message": "Archived items will appear here and will be excluded from general search results and autofill suggestions." + }, + "itemSentToArchive": { + "message": "Item sent to archive" + }, + "itemRemovedFromArchive": { + "message": "Item removed from archive" + }, + "archiveItem": { + "message": "Archive item" + }, + "archiveItemConfirmDesc": { + "message": "Archived items are excluded from general search results and autofill suggestions. Are you sure you want to archive this item?" + }, "edit": { "message": "Edit" }, "view": { "message": "View" }, + "viewLogin": { + "message": "View login" + }, "noItemsInList": { "message": "There are no items to list." }, @@ -695,6 +733,15 @@ "invalidMasterPassword": { "message": "Invalid master password" }, + "invalidMasterPasswordConfirmEmailAndHost": { + "message": "Invalid master password. Confirm your email is correct and your account was created on $HOST$.", + "placeholders": { + "host": { + "content": "$1", + "example": "vault.bitwarden.com" + } + } + }, "vaultTimeout": { "message": "Vault timeout" }, @@ -1501,6 +1548,15 @@ "readSecurityKey": { "message": "Read security key" }, + "readingPasskeyLoading": { + "message": "Reading passkey..." + }, + "passkeyAuthenticationFailed": { + "message": "Passkey authentication failed" + }, + "useADifferentLogInMethod": { + "message": "Use a different log in method" + }, "awaitingSecurityKeyInteraction": { "message": "Awaiting security key interaction..." }, @@ -1519,9 +1575,6 @@ "selectTwoStepLoginMethod": { "message": "Select two-step login method" }, - "recoveryCodeDesc": { - "message": "Lost access to all of your two-factor providers? Use your recovery code to turn off all two-factor providers from your account." - }, "recoveryCodeTitle": { "message": "Recovery code" }, @@ -1680,9 +1733,6 @@ "defaultAutoFillOnPageLoadDesc": { "message": "You can turn off autofill on page load for individual login items from the item's Edit view." }, - "itemAutoFillOnPageLoad": { - "message": "Autofill on page load (if set up in Options)" - }, "autoFillOnPageLoadUseDefault": { "message": "Use default setting" }, @@ -1754,23 +1804,8 @@ "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?" }, - "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?" - }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." - }, - "faviconDescAlt": { - "message": "Show a recognizable image next to each login. Applies to all logged in accounts." - }, - "enableBadgeCounter": { - "message": "Show badge counter" - }, - "badgeCounterDesc": { - "message": "Indicate how many logins you have for the current web page." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "cardholderName": { "message": "Cardholder name" @@ -1829,6 +1864,9 @@ "securityCode": { "message": "Security code" }, + "cardNumber": { + "message": "card number" + }, "ex": { "message": "ex." }, @@ -1931,32 +1969,81 @@ "typeNote": { "message": "Note" }, - "newItemHeader": { - "message": "New $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderLogin": { + "message": "New Login", + "description": "Header for new login item type" }, - "editItemHeader": { - "message": "Edit $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderCard": { + "message": "New Card", + "description": "Header for new card item type" }, - "viewItemHeader": { - "message": "View $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderIdentity": { + "message": "New Identity", + "description": "Header for new identity item type" + }, + "newItemHeaderNote": { + "message": "New Note", + "description": "Header for new note item type" + }, + "newItemHeaderSshKey": { + "message": "New SSH key", + "description": "Header for new SSH key item type" + }, + "newItemHeaderTextSend": { + "message": "New Text Send", + "description": "Header for new text send" + }, + "newItemHeaderFileSend": { + "message": "New File Send", + "description": "Header for new file send" + }, + "editItemHeaderLogin": { + "message": "Edit Login", + "description": "Header for edit login item type" + }, + "editItemHeaderCard": { + "message": "Edit Card", + "description": "Header for edit card item type" + }, + "editItemHeaderIdentity": { + "message": "Edit Identity", + "description": "Header for edit identity item type" + }, + "editItemHeaderNote": { + "message": "Edit Note", + "description": "Header for edit note item type" + }, + "editItemHeaderSshKey": { + "message": "Edit SSH key", + "description": "Header for edit SSH key item type" + }, + "editItemHeaderTextSend": { + "message": "Edit Text Send", + "description": "Header for edit text send" + }, + "editItemHeaderFileSend": { + "message": "Edit File Send", + "description": "Header for edit file send" + }, + "viewItemHeaderLogin": { + "message": "View Login", + "description": "Header for view login item type" + }, + "viewItemHeaderCard": { + "message": "View Card", + "description": "Header for view card item type" + }, + "viewItemHeaderIdentity": { + "message": "View Identity", + "description": "Header for view identity item type" + }, + "viewItemHeaderNote": { + "message": "View Note", + "description": "Header for view note item type" + }, + "viewItemHeaderSshKey": { + "message": "View SSH key", + "description": "Header for view SSH key item type" }, "passwordHistory": { "message": "Password history" @@ -3129,6 +3216,24 @@ } } }, + "exportingOrganizationVaultFromPasswordManagerWithDataOwnershipDesc": { + "message": "Only the organization vault associated with $ORGANIZATION$ will be exported.", + "placeholders": { + "organization": { + "content": "$1", + "example": "My Org Name" + } + } + }, + "exportingOrganizationVaultFromAdminConsoleWithDataOwnershipDesc": { + "message": "Only the organization vault associated with $ORGANIZATION$ will be exported. My items collections will not be included.", + "placeholders": { + "organization": { + "content": "$1", + "example": "My Org Name" + } + } + }, "error": { "message": "Error" }, @@ -3460,6 +3565,28 @@ "logInRequestSent": { "message": "Request sent" }, + "loginRequestApprovedForEmailOnDevice": { + "message": "Login request approved for $EMAIL$ on $DEVICE$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + }, + "device": { + "content": "$2", + "example": "Web app - Chrome" + } + } + }, + "youDeniedLoginAttemptFromAnotherDevice": { + "message": "You denied a login attempt from another device. If this was you, try to log in with the device again." + }, + "device": { + "message": "Device" + }, + "loginStatus": { + "message": "Login status" + }, "masterPasswordChanged": { "message": "Master password saved" }, @@ -3496,9 +3623,6 @@ "autofillPageLoadPolicyActivated": { "message": "Your organization policies have turned on autofill on page load." }, - "howToAutofill": { - "message": "How to autofill" - }, "autofillSelectInfoWithCommand": { "message": "Select an item from this screen, use the shortcut $COMMAND$, or explore other options in settings.", "placeholders": { @@ -3556,6 +3680,94 @@ "rememberThisDeviceToMakeFutureLoginsSeamless": { "message": "Remember this device to make future logins seamless" }, + "manageDevices": { + "message": "Manage devices" + }, + "currentSession": { + "message": "Current session" + }, + "mobile": { + "message": "Mobile", + "description": "Mobile app" + }, + "extension": { + "message": "Extension", + "description": "Browser extension/addon" + }, + "desktop": { + "message": "Desktop", + "description": "Desktop app" + }, + "webVault": { + "message": "Web vault" + }, + "webApp": { + "message": "Web app" + }, + "cli": { + "message": "CLI" + }, + "sdk": { + "message": "SDK", + "description": "Software Development Kit" + }, + "requestPending": { + "message": "Request pending" + }, + "firstLogin": { + "message": "First login" + }, + "trusted": { + "message": "Trusted" + }, + "needsApproval": { + "message": "Needs approval" + }, + "devices": { + "message": "Devices" + }, + "accessAttemptBy": { + "message": "Access attempt by $EMAIL$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + } + } + }, + "confirmAccess": { + "message": "Confirm access" + }, + "denyAccess": { + "message": "Deny access" + }, + "time": { + "message": "Time" + }, + "deviceType": { + "message": "Device Type" + }, + "loginRequest": { + "message": "Login request" + }, + "thisRequestIsNoLongerValid": { + "message": "This request is no longer valid." + }, + "loginRequestHasAlreadyExpired": { + "message": "Login request has already expired." + }, + "justNow": { + "message": "Just now" + }, + "requestedXMinutesAgo": { + "message": "Requested $MINUTES$ minutes ago", + "placeholders": { + "minutes": { + "content": "$1", + "example": "5" + } + } + }, "deviceApprovalRequired": { "message": "Device approval required. Select an approval option below:" }, @@ -3795,18 +4007,10 @@ "aliasDomain": { "message": "Alias domain" }, - "passwordRepromptDisabledAutofillOnPageLoad": { - "message": "Items with master password re-prompt cannot be autofilled on page load. Autofill on page load turned off.", - "description": "Toast message for describing that master password re-prompt cannot be autofilled on page load." - }, "autofillOnPageLoadSetToDefault": { "message": "Autofill on page load set to use default setting.", "description": "Toast message for informing the user that autofill on page load has been set to the default setting." }, - "turnOffMasterPasswordPromptToEditField": { - "message": "Turn off master password re-prompt to edit this field", - "description": "Message appearing below the autofill on load message when master password reprompt is set for a vault item." - }, "toggleSideNavigation": { "message": "Toggle side navigation" }, @@ -4015,15 +4219,11 @@ "selectImportCollection": { "message": "Select a collection" }, - "importTargetHint": { - "message": "Select this option if you want the imported file contents moved to a $DESTINATION$", - "description": "Located as a hint under the import target. Will be appended by either folder or collection, depending if the user is importing into an individual or an organizational vault.", - "placeholders": { - "destination": { - "content": "$1", - "example": "folder or collection" - } - } + "importTargetHintCollection": { + "message": "Select this option if you want the imported file contents moved to a collection" + }, + "importTargetHintFolder": { + "message": "Select this option if you want the imported file contents moved to a folder" }, "importUnassignedItemsError": { "message": "File contains unassigned items." @@ -4080,9 +4280,6 @@ "passkeyNotCopiedAlert": { "message": "The passkey will not be copied to the cloned item. Do you want to continue cloning this item?" }, - "passkeyFeatureIsNotImplementedForAccountsWithoutMasterPassword": { - "message": "Verification required by the initiating site. This feature is not yet implemented for accounts without master password." - }, "logInWithPasskeyQuestion": { "message": "Log in with passkey?" }, @@ -4465,17 +4662,17 @@ } } }, - "copyFieldValue": { - "message": "Copy $FIELD$, $VALUE$", + "copyFieldCipherName": { + "message": "Copy $FIELD$, $CIPHERNAME$", "description": "Title for a button that copies a field value to the clipboard.", "placeholders": { "field": { "content": "$1", "example": "Username" }, - "value": { + "ciphername": { "content": "$2", - "example": "Foo" + "example": "Login Item" } } }, @@ -4768,9 +4965,6 @@ } } }, - "enableAnimations": { - "message": "Enable animations" - }, "showAnimations": { "message": "Show animations" }, @@ -4983,15 +5177,9 @@ "itemLocation": { "message": "Item Location" }, - "fileSend": { - "message": "File Send" - }, "fileSends": { "message": "File Sends" }, - "textSend": { - "message": "Text Send" - }, "textSends": { "message": "Text Sends" }, @@ -5001,6 +5189,18 @@ "showNumberOfAutofillSuggestions": { "message": "Show number of login autofill suggestions on extension icon" }, + "accountAccessRequested": { + "message": "Account access requested" + }, + "confirmAccessAttempt": { + "message": "Confirm access attempt for $EMAIL$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + } + } + }, "showQuickCopyActions": { "message": "Show quick copy actions on Vault" }, @@ -5040,9 +5240,6 @@ "vaultCustomTimeoutMinimum": { "message": "Minimum custom timeout is 1 minute." }, - "additionalContentAvailable": { - "message": "Additional content is available" - }, "fileSavedToDevice": { "message": "File saved to device. Manage from your device downloads." }, @@ -5328,6 +5525,12 @@ "changeAtRiskPassword": { "message": "Change at-risk password" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "This login is at-risk and missing a website. Add a website and change the password for stronger security." + }, + "missingWebsite": { + "message": "Missing website" + }, "settingsVaultOptions": { "message": "Vault options" }, @@ -5376,6 +5579,18 @@ "hasItemsVaultNudgeTitle": { "message": "Welcome to your vault!" }, + "phishingPageTitle": { + "message": "Phishing website" + }, + "phishingPageCloseTab": { + "message": "Close tab" + }, + "phishingPageContinue": { + "message": "Continue" + }, + "phishingPageLearnWhy": { + "message": "Why are you seeing this?" + }, "hasItemsVaultNudgeBodyOne": { "message": "Autofill items for the current page" }, @@ -5451,11 +5666,33 @@ "message": "Easily create strong and unique passwords by clicking on the Generate password button to help you keep your logins secure.", "description": "Aria label for the body content of the generator nudge" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "noPermissionsViewPage": { "message": "You do not have permissions to view this page. Try logging in with a different account." }, "wasmNotSupported": { "message": "WebAssembly is not supported on your browser or is not enabled. WebAssembly is required to use the Bitwarden app.", "description": "'WebAssembly' is a technical term and should not be translated." + }, + "showMore": { + "message": "Show more" + }, + "showLess": { + "message": "Show less" + }, + "next": { + "message": "Next" + }, + "moreBreadcrumbs": { + "message": "More breadcrumbs", + "description": "This is used in the context of a breadcrumb navigation, indicating that there are more items in the breadcrumb trail that are not currently displayed." + }, + "confirmKeyConnectorDomain": { + "message": "Confirm Key Connector domain" } } diff --git a/apps/browser/src/_locales/ca/messages.json b/apps/browser/src/_locales/ca/messages.json index 29859f03dd0..201298369a3 100644 --- a/apps/browser/src/_locales/ca/messages.json +++ b/apps/browser/src/_locales/ca/messages.json @@ -547,12 +547,50 @@ "searchVault": { "message": "Cerca en la caixa forta" }, + "resetSearch": { + "message": "Restableix la cerca" + }, + "archiveNoun": { + "message": "Archive", + "description": "Noun" + }, + "archiveVerb": { + "message": "Archive", + "description": "Verb" + }, + "unarchive": { + "message": "Unarchive" + }, + "itemsInArchive": { + "message": "Items in archive" + }, + "noItemsInArchive": { + "message": "No items in archive" + }, + "noItemsInArchiveDesc": { + "message": "Archived items will appear here and will be excluded from general search results and autofill suggestions." + }, + "itemSentToArchive": { + "message": "Item sent to archive" + }, + "itemRemovedFromArchive": { + "message": "Item removed from archive" + }, + "archiveItem": { + "message": "Archive item" + }, + "archiveItemConfirmDesc": { + "message": "Archived items are excluded from general search results and autofill suggestions. Are you sure you want to archive this item?" + }, "edit": { "message": "Edita" }, "view": { "message": "Visualitza" }, + "viewLogin": { + "message": "View login" + }, "noItemsInList": { "message": "No hi ha cap element a llistar." }, @@ -656,7 +694,7 @@ "message": "El vostre navegador web no admet la còpia fàcil del porta-retalls. Copieu-ho manualment." }, "verifyYourIdentity": { - "message": "Verify your identity" + "message": "Verificació de la vostra identitat" }, "weDontRecognizeThisDevice": { "message": "No reconeixem aquest dispositiu. Introduïu el codi que us hem enviat al correu electrònic per verificar la identitat." @@ -695,6 +733,15 @@ "invalidMasterPassword": { "message": "Contrasenya mestra no vàlida" }, + "invalidMasterPasswordConfirmEmailAndHost": { + "message": "Invalid master password. Confirm your email is correct and your account was created on $HOST$.", + "placeholders": { + "host": { + "content": "$1", + "example": "vault.bitwarden.com" + } + } + }, "vaultTimeout": { "message": "Temps d'espera de la caixa forta" }, @@ -872,22 +919,22 @@ "message": "Inicia sessió a Bitwarden" }, "enterTheCodeSentToYourEmail": { - "message": "Enter the code sent to your email" + "message": "Introduïu el codi que us hem enviat al correu electrònic" }, "enterTheCodeFromYourAuthenticatorApp": { - "message": "Enter the code from your authenticator app" + "message": "Introduïu el codi de la vostra aplicació d'autenticació" }, "pressYourYubiKeyToAuthenticate": { "message": "Press your YubiKey to authenticate" }, "duoTwoFactorRequiredPageSubtitle": { - "message": "Duo two-step login is required for your account. Follow the steps below to finish logging in." + "message": "Cal l'inici de sessió en dos passos de Duo al vostre compte. Seguiu els passos de sota per finalitzar l'inici de sessió." }, "followTheStepsBelowToFinishLoggingIn": { - "message": "Follow the steps below to finish logging in." + "message": "Seguiu els passos a continuació per finalitzar l'inici de sessió." }, "followTheStepsBelowToFinishLoggingInWithSecurityKey": { - "message": "Follow the steps below to finish logging in with your security key." + "message": "Seguiu els passos a continuació per finalitzar l'inici de sessió amb la clau de seguretat." }, "restartRegistration": { "message": "Reinicia el registre" @@ -911,7 +958,7 @@ "message": "No" }, "location": { - "message": "Location" + "message": "Ubicació" }, "unexpectedError": { "message": "S'ha produït un error inesperat." @@ -1121,7 +1168,7 @@ "description": "Button text for updating an existing login entry." }, "unlockToSave": { - "message": "Unlock to save this login", + "message": "Desbloqueja per guardar aquest inici de sessió", "description": "User prompt to take action in order to save the login they just entered." }, "saveLogin": { @@ -1166,7 +1213,7 @@ "description": "Message prompting user to undertake completion of another security task." }, "saveFailure": { - "message": "Error saving", + "message": "Error en guardar", "description": "Error message shown when the system fails to save login details." }, "saveFailureDetails": { @@ -1480,20 +1527,20 @@ } }, "dontAskAgainOnThisDeviceFor30Days": { - "message": "Don't ask again on this device for 30 days" + "message": "No ho torneu a preguntar en aquest dispositiu durant 30 dies" }, "selectAnotherMethod": { "message": "Select another method", "description": "Select another two-step login method" }, "useYourRecoveryCode": { - "message": "Use your recovery code" + "message": "Utilitzeu el codi de recuperació" }, "insertU2f": { "message": "Introduïu la vostra clau de seguretat al port USB de l'ordinador. Si té un botó, premeu-lo." }, "openInNewTab": { - "message": "Open in new tab" + "message": "Obrir en una pestanya nova" }, "webAuthnAuthenticate": { "message": "Autenticar WebAuthn" @@ -1501,6 +1548,15 @@ "readSecurityKey": { "message": "Read security key" }, + "readingPasskeyLoading": { + "message": "Reading passkey..." + }, + "passkeyAuthenticationFailed": { + "message": "Passkey authentication failed" + }, + "useADifferentLogInMethod": { + "message": "Use a different log in method" + }, "awaitingSecurityKeyInteraction": { "message": "Awaiting security key interaction..." }, @@ -1519,9 +1575,6 @@ "selectTwoStepLoginMethod": { "message": "Select two-step login method" }, - "recoveryCodeDesc": { - "message": "Heu perdut l'accés a tots els vostres proveïdors de dos factors? Utilitzeu el vostre codi de recuperació per desactivar tots els proveïdors de dos factors del vostre compte." - }, "recoveryCodeTitle": { "message": "Codi de recuperació" }, @@ -1680,9 +1733,6 @@ "defaultAutoFillOnPageLoadDesc": { "message": "Podeu desactivar l'emplenament automàtic a la càrrega de la pàgina per a elements d'inici de sessió individuals des de la vista d'edició de l'element." }, - "itemAutoFillOnPageLoad": { - "message": "Emplenament automàtic a la càrrega de la pàgina (si està habilitat a Opcions)" - }, "autoFillOnPageLoadUseDefault": { "message": "Utilitza la configuració per defecte" }, @@ -1754,23 +1804,8 @@ "popup2faCloseMessage": { "message": "Si feu clic a l'exterior de la finestra emergent per comprovar el vostre correu electrònic amb el codi de verificació, es tancarà aquesta finestra. Voleu obrir aquesta finestra emergent en una finestra nova perquè no es tanque?" }, - "popupU2fCloseMessage": { - "message": "Aquest navegador no pot processar sol·licituds U2F en aquesta finestra emergent. Voleu obrir l'emergent en una finestra nova per poder iniciar la sessió mitjançant U2F?" - }, - "enableFavicon": { - "message": "Mostra les icones dels llocs web" - }, - "faviconDesc": { - "message": "Mostra una imatge reconeixible al costat de cada inici de sessió." - }, - "faviconDescAlt": { - "message": "Mostra una imatge reconeixible al costat de cada sessió. S'aplica a tots els comptes connectats." - }, - "enableBadgeCounter": { - "message": "Mostra el comptador insígnia" - }, - "badgeCounterDesc": { - "message": "Indiqueu quants inicis de sessió teniu per a la pàgina web actual." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "cardholderName": { "message": "Nom del titular de la targeta" @@ -1829,6 +1864,9 @@ "securityCode": { "message": "Codi de seguretat" }, + "cardNumber": { + "message": "card number" + }, "ex": { "message": "ex." }, @@ -1931,32 +1969,81 @@ "typeNote": { "message": "Nota" }, - "newItemHeader": { - "message": "Nou $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderLogin": { + "message": "New Login", + "description": "Header for new login item type" }, - "editItemHeader": { - "message": "Edita $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderCard": { + "message": "New Card", + "description": "Header for new card item type" }, - "viewItemHeader": { - "message": "Mostra $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderIdentity": { + "message": "New Identity", + "description": "Header for new identity item type" + }, + "newItemHeaderNote": { + "message": "New Note", + "description": "Header for new note item type" + }, + "newItemHeaderSshKey": { + "message": "New SSH key", + "description": "Header for new SSH key item type" + }, + "newItemHeaderTextSend": { + "message": "New Text Send", + "description": "Header for new text send" + }, + "newItemHeaderFileSend": { + "message": "New File Send", + "description": "Header for new file send" + }, + "editItemHeaderLogin": { + "message": "Edit Login", + "description": "Header for edit login item type" + }, + "editItemHeaderCard": { + "message": "Edit Card", + "description": "Header for edit card item type" + }, + "editItemHeaderIdentity": { + "message": "Edit Identity", + "description": "Header for edit identity item type" + }, + "editItemHeaderNote": { + "message": "Edit Note", + "description": "Header for edit note item type" + }, + "editItemHeaderSshKey": { + "message": "Edit SSH key", + "description": "Header for edit SSH key item type" + }, + "editItemHeaderTextSend": { + "message": "Edit Text Send", + "description": "Header for edit text send" + }, + "editItemHeaderFileSend": { + "message": "Edit File Send", + "description": "Header for edit file send" + }, + "viewItemHeaderLogin": { + "message": "View Login", + "description": "Header for view login item type" + }, + "viewItemHeaderCard": { + "message": "View Card", + "description": "Header for view card item type" + }, + "viewItemHeaderIdentity": { + "message": "View Identity", + "description": "Header for view identity item type" + }, + "viewItemHeaderNote": { + "message": "View Note", + "description": "Header for view note item type" + }, + "viewItemHeaderSshKey": { + "message": "View SSH key", + "description": "Header for view SSH key item type" }, "passwordHistory": { "message": "Historial de les contrasenyes" @@ -2296,7 +2383,7 @@ "message": "El formulari està allotjat en un domini diferent de l'URI de l'inici de sessió guardat. Trieu D'acord per omplir -lo automàticament de totes maneres o Cancel·la per aturar-ho." }, "autofillIframeWarningTip": { - "message": "Per evitar aquest avís en el futur, guardeu aquest URI, $HOSTNAME$, al vostre element d'inici de sessió de Bitwarden d'aquest lloc.", + "message": "Per evitar aquest avís en el futur, guardeu el lloc d'aquest URI, $HOSTNAME$, en els elements d'inici de sessió de Bitwarden.", "placeholders": { "hostname": { "content": "$1", @@ -3129,6 +3216,24 @@ } } }, + "exportingOrganizationVaultFromPasswordManagerWithDataOwnershipDesc": { + "message": "Only the organization vault associated with $ORGANIZATION$ will be exported.", + "placeholders": { + "organization": { + "content": "$1", + "example": "My Org Name" + } + } + }, + "exportingOrganizationVaultFromAdminConsoleWithDataOwnershipDesc": { + "message": "Only the organization vault associated with $ORGANIZATION$ will be exported. My items collections will not be included.", + "placeholders": { + "organization": { + "content": "$1", + "example": "My Org Name" + } + } + }, "error": { "message": "Error" }, @@ -3460,6 +3565,28 @@ "logInRequestSent": { "message": "Sol·licitud enviada" }, + "loginRequestApprovedForEmailOnDevice": { + "message": "Login request approved for $EMAIL$ on $DEVICE$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + }, + "device": { + "content": "$2", + "example": "Web app - Chrome" + } + } + }, + "youDeniedLoginAttemptFromAnotherDevice": { + "message": "You denied a login attempt from another device. If this was you, try to log in with the device again." + }, + "device": { + "message": "Device" + }, + "loginStatus": { + "message": "Login status" + }, "masterPasswordChanged": { "message": "Master password saved" }, @@ -3496,9 +3623,6 @@ "autofillPageLoadPolicyActivated": { "message": "Les polítiques de l'organització han activat l'emplenament automàtic en carregar la pàgina." }, - "howToAutofill": { - "message": "Com emplenar automàticament" - }, "autofillSelectInfoWithCommand": { "message": "Seleccioneu un element d'aquesta pantalla, utilitzeu la drecera $COMMAND$ o exploreu altres opcions a la configuració.", "placeholders": { @@ -3556,6 +3680,94 @@ "rememberThisDeviceToMakeFutureLoginsSeamless": { "message": "Remember this device to make future logins seamless" }, + "manageDevices": { + "message": "Manage devices" + }, + "currentSession": { + "message": "Current session" + }, + "mobile": { + "message": "Mobile", + "description": "Mobile app" + }, + "extension": { + "message": "Extension", + "description": "Browser extension/addon" + }, + "desktop": { + "message": "Desktop", + "description": "Desktop app" + }, + "webVault": { + "message": "Web vault" + }, + "webApp": { + "message": "Web app" + }, + "cli": { + "message": "CLI" + }, + "sdk": { + "message": "SDK", + "description": "Software Development Kit" + }, + "requestPending": { + "message": "Request pending" + }, + "firstLogin": { + "message": "First login" + }, + "trusted": { + "message": "Trusted" + }, + "needsApproval": { + "message": "Needs approval" + }, + "devices": { + "message": "Devices" + }, + "accessAttemptBy": { + "message": "Access attempt by $EMAIL$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + } + } + }, + "confirmAccess": { + "message": "Confirm access" + }, + "denyAccess": { + "message": "Deny access" + }, + "time": { + "message": "Time" + }, + "deviceType": { + "message": "Device Type" + }, + "loginRequest": { + "message": "Login request" + }, + "thisRequestIsNoLongerValid": { + "message": "This request is no longer valid." + }, + "loginRequestHasAlreadyExpired": { + "message": "Login request has already expired." + }, + "justNow": { + "message": "Just now" + }, + "requestedXMinutesAgo": { + "message": "Requested $MINUTES$ minutes ago", + "placeholders": { + "minutes": { + "content": "$1", + "example": "5" + } + } + }, "deviceApprovalRequired": { "message": "Cal l'aprovació del dispositiu. Seleccioneu una opció d'aprovació a continuació:" }, @@ -3669,11 +3881,11 @@ "message": "Trust user" }, "sendsTitleNoItems": { - "message": "Send sensitive information safely", + "message": "Envieu informació confidencial, de manera segura", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "sendsBodyNoItems": { - "message": "Share files and data securely with anyone, on any platform. Your information will remain end-to-end encrypted while limiting exposure.", + "message": "Compartiu fitxers i dades de manera segura amb qualsevol persona, en qualsevol plataforma. La informació romandrà xifrada de principi a fi i alhora limitarà l'exposició.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "inputRequired": { @@ -3795,18 +4007,10 @@ "aliasDomain": { "message": "Alies de domini" }, - "passwordRepromptDisabledAutofillOnPageLoad": { - "message": "Els elements amb una nova sol·licitud de contrasenya mestra no es poden omplir automàticament en carregar la pàgina. L'emplenament automàtic en carregar la pàgina està desactivat.", - "description": "Toast message for describing that master password re-prompt cannot be autofilled on page load." - }, "autofillOnPageLoadSetToDefault": { "message": "S'ha configurat l'emplenament automàtic en carregar la pàgina perquè utilitze la configuració predeterminada.", "description": "Toast message for informing the user that autofill on page load has been set to the default setting." }, - "turnOffMasterPasswordPromptToEditField": { - "message": "Desactiveu la sol·licitud de nova contrasenya mestra per editar aquest camp", - "description": "Message appearing below the autofill on load message when master password reprompt is set for a vault item." - }, "toggleSideNavigation": { "message": "Canvia a la navegació lateral" }, @@ -3830,7 +4034,7 @@ "description": "Text to display in overlay when the account is locked." }, "unlockYourAccountToViewAutofillSuggestions": { - "message": "Unlock your account to view autofill suggestions", + "message": "Desbloqueja el compte per veure els suggeriments d'emplenament automàtic", "description": "Text to display in overlay when the account is locked." }, "unlockAccount": { @@ -4015,15 +4219,11 @@ "selectImportCollection": { "message": "Selecciona una col·lecció" }, - "importTargetHint": { - "message": "Seleccioneu aquesta opció si voleu que el contingut del fitxer importat es desplace a $DESTINATION$", - "description": "Located as a hint under the import target. Will be appended by either folder or collection, depending if the user is importing into an individual or an organizational vault.", - "placeholders": { - "destination": { - "content": "$1", - "example": "folder or collection" - } - } + "importTargetHintCollection": { + "message": "Select this option if you want the imported file contents moved to a collection" + }, + "importTargetHintFolder": { + "message": "Select this option if you want the imported file contents moved to a folder" }, "importUnassignedItemsError": { "message": "El fitxer conté elements no assignats." @@ -4080,9 +4280,6 @@ "passkeyNotCopiedAlert": { "message": "La clau de pas no es copiarà a l'element clonat. Voleu continuar clonant aquest element?" }, - "passkeyFeatureIsNotImplementedForAccountsWithoutMasterPassword": { - "message": "Verificació requerida pel lloc iniciador. Aquesta funció encara no s'ha implementat per als comptes sense contrasenya mestra." - }, "logInWithPasskeyQuestion": { "message": "Inici de sessió amb clau de pas?" }, @@ -4263,7 +4460,7 @@ "description": "Label indicating the most common import formats" }, "uriMatchDefaultStrategyHint": { - "message": "URI match detection is how Bitwarden identifies autofill suggestions.", + "message": "Bitwarden empra la detecció de coincidències URI per identificar suggeriments d'aemplenament automàtic.", "description": "Explains to the user that URI match detection determines how Bitwarden suggests autofill options, and clarifies that this default strategy applies when no specific match detection is set for a login item." }, "regExAdvancedOptionWarning": { @@ -4279,7 +4476,7 @@ "description": "Link to match detection docs on warning dialog for advance match strategy" }, "uriAdvancedOption": { - "message": "Advanced options", + "message": "Opcions avançades", "description": "Advanced option placeholder for uri option component" }, "confirmContinueToBrowserSettingsTitle": { @@ -4366,7 +4563,7 @@ "message": "Suggested items" }, "autofillSuggestionsTip": { - "message": "Save a login item for this site to autofill" + "message": "Guarda un inici de sessió d'aquest lloc web per omplir-lo automàticament" }, "yourVaultIsEmpty": { "message": "La caixa forta està buida" @@ -4465,17 +4662,17 @@ } } }, - "copyFieldValue": { - "message": "Copy $FIELD$, $VALUE$", + "copyFieldCipherName": { + "message": "Copy $FIELD$, $CIPHERNAME$", "description": "Title for a button that copies a field value to the clipboard.", "placeholders": { "field": { "content": "$1", "example": "Username" }, - "value": { + "ciphername": { "content": "$2", - "example": "Foo" + "example": "Login Item" } } }, @@ -4768,9 +4965,6 @@ } } }, - "enableAnimations": { - "message": "Enable animations" - }, "showAnimations": { "message": "Mostra animacions" }, @@ -4983,15 +5177,9 @@ "itemLocation": { "message": "Item Location" }, - "fileSend": { - "message": "Send de fitxer" - }, "fileSends": { "message": "Sends de fitxer" }, - "textSend": { - "message": "Send de text" - }, "textSends": { "message": "Sends de text" }, @@ -5001,6 +5189,18 @@ "showNumberOfAutofillSuggestions": { "message": "Mostra el nombre de suggeriments d'emplenament automàtic d'inici de sessió a la icona d'extensió" }, + "accountAccessRequested": { + "message": "Account access requested" + }, + "confirmAccessAttempt": { + "message": "Confirm access attempt for $EMAIL$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + } + } + }, "showQuickCopyActions": { "message": "Mostra accions de còpia ràpida a la caixa forta" }, @@ -5040,9 +5240,6 @@ "vaultCustomTimeoutMinimum": { "message": "El temps d'espera personalitzat mínim és d'1 minut." }, - "additionalContentAvailable": { - "message": "Additional content is available" - }, "fileSavedToDevice": { "message": "File saved to device. Manage from your device downloads." }, @@ -5059,7 +5256,7 @@ "message": "No hi ha cap element a la paperera" }, "noItemsInTrashDesc": { - "message": "Items you delete will appear here and be permanently deleted after 30 days" + "message": "Els elements que suprimiu apareixeran ací i s'eliminaran permanentment al cap de 30 dies" }, "trashWarning": { "message": "Els elements que porten més de 30 dies a la paperera se suprimiran automàticament" @@ -5328,6 +5525,12 @@ "changeAtRiskPassword": { "message": "Change at-risk password" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "This login is at-risk and missing a website. Add a website and change the password for stronger security." + }, + "missingWebsite": { + "message": "Missing website" + }, "settingsVaultOptions": { "message": "Opcions de la caixa forta" }, @@ -5376,6 +5579,18 @@ "hasItemsVaultNudgeTitle": { "message": "Welcome to your vault!" }, + "phishingPageTitle": { + "message": "Phishing website" + }, + "phishingPageCloseTab": { + "message": "Close tab" + }, + "phishingPageContinue": { + "message": "Continue" + }, + "phishingPageLearnWhy": { + "message": "Why are you seeing this?" + }, "hasItemsVaultNudgeBodyOne": { "message": "Autofill items for the current page" }, @@ -5451,11 +5666,33 @@ "message": "Easily create strong and unique passwords by clicking on the Generate password button to help you keep your logins secure.", "description": "Aria label for the body content of the generator nudge" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "noPermissionsViewPage": { "message": "You do not have permissions to view this page. Try logging in with a different account." }, "wasmNotSupported": { "message": "WebAssembly is not supported on your browser or is not enabled. WebAssembly is required to use the Bitwarden app.", "description": "'WebAssembly' is a technical term and should not be translated." + }, + "showMore": { + "message": "Show more" + }, + "showLess": { + "message": "Show less" + }, + "next": { + "message": "Next" + }, + "moreBreadcrumbs": { + "message": "More breadcrumbs", + "description": "This is used in the context of a breadcrumb navigation, indicating that there are more items in the breadcrumb trail that are not currently displayed." + }, + "confirmKeyConnectorDomain": { + "message": "Confirm Key Connector domain" } } diff --git a/apps/browser/src/_locales/cs/messages.json b/apps/browser/src/_locales/cs/messages.json index 05135190fb4..d6b3cc9083b 100644 --- a/apps/browser/src/_locales/cs/messages.json +++ b/apps/browser/src/_locales/cs/messages.json @@ -338,7 +338,7 @@ "message": "Pokračovat na bitwarden.com?" }, "bitwardenForBusiness": { - "message": "Bitwarden pro byznys" + "message": "Bitwarden pro podnikání" }, "bitwardenAuthenticator": { "message": "Autentifikátor Bitwarden" @@ -398,7 +398,7 @@ "message": "Název složky" }, "folderHintText": { - "message": "Vnořit složku přidáním názvu nadřazené složky následovaného znakem \"/\". Příklad: Sociální/Fóra" + "message": "Složku vnoříte přidáním názvu nadřazené složky následovaného znakem \"/\". Příklad: Sociální/Fóra" }, "noFoldersAdded": { "message": "Nebyly přidány žádné složky" @@ -407,7 +407,7 @@ "message": "Vytvořte složky pro organizaci Vašich položek trezoru" }, "deleteFolderPermanently": { - "message": "Opravdu chcete trvale smazat tuto složku?" + "message": "Opravdu chcete tuto složku trvale smazat?" }, "deleteFolder": { "message": "Smazat složku" @@ -531,10 +531,10 @@ "message": "Zahrnout číslice" }, "minNumbers": { - "message": "Minimální počet číslic" + "message": "Minimálně číslic" }, "minSpecial": { - "message": "Minimální počet speciálních znaků" + "message": "Minimálně speciálních znaků" }, "avoidAmbiguous": { "message": "Nepoužívat zaměnitelné znaky", @@ -547,12 +547,50 @@ "searchVault": { "message": "Vyhledat v trezoru" }, + "resetSearch": { + "message": "Resetovat hledání" + }, + "archiveNoun": { + "message": "Archiv", + "description": "Noun" + }, + "archiveVerb": { + "message": "Archivovat", + "description": "Verb" + }, + "unarchive": { + "message": "Odebrat z archivu" + }, + "itemsInArchive": { + "message": "Položky v archivu" + }, + "noItemsInArchive": { + "message": "Žádné položky v archivu" + }, + "noItemsInArchiveDesc": { + "message": "Zde se zobrazí archivované položky a budou vyloučeny z obecných výsledků vyhledávání a návrhů automatického vyplňování." + }, + "itemSentToArchive": { + "message": "Položka byla přesunuta do archivu" + }, + "itemRemovedFromArchive": { + "message": "Položka byla odebrána z archivu" + }, + "archiveItem": { + "message": "Archivovat položku" + }, + "archiveItemConfirmDesc": { + "message": "Archivované položky jsou vyloučeny z obecných výsledků vyhledávání a z návrhů automatického vyplňování. Jste si jisti, že chcete tuto položku archivovat?" + }, "edit": { "message": "Upravit" }, "view": { "message": "Zobrazit" }, + "viewLogin": { + "message": "Zobrazit přihlašovací údaje" + }, "noItemsInList": { "message": "Žádné položky k zobrazení." }, @@ -695,6 +733,15 @@ "invalidMasterPassword": { "message": "Chybné hlavní heslo" }, + "invalidMasterPasswordConfirmEmailAndHost": { + "message": "Neplatné hlavní heslo. Potvrďte správnost e-mailu a zda byl Váš účet vytvořen na $HOST$.", + "placeholders": { + "host": { + "content": "$1", + "example": "vault.bitwarden.com" + } + } + }, "vaultTimeout": { "message": "Časový limit trezoru" }, @@ -1013,7 +1060,7 @@ "description": "This is the folder for uncategorized items" }, "enableAddLoginNotification": { - "message": "Ptát se na přidání přihlášení" + "message": "Zeptat se na přidání přihlášení" }, "vaultSaveOptionsTitle": { "message": "Uložit do voleb trezoru" @@ -1046,7 +1093,7 @@ "message": "Klepněte na položky pro automatické vyplnění v zobrazení trezoru" }, "clickToAutofill": { - "message": "Klepněte na položky v návrhu automatického vyplňování pro vyplnění" + "message": "Klepnout na položky v návrhu automatického vyplňování pro vyplnění" }, "clearClipboard": { "message": "Vymazat schránku", @@ -1302,7 +1349,7 @@ "message": "Sdílené" }, "bitwardenForBusinessPageDesc": { - "message": "Bitwarden pro bvyznys Vám umožňuje sdílet položky v trezoru s ostatními prostřednictvím organizace. Více informací naleznete na bitwarden.com." + "message": "Bitwarden pro podnikání Vám umožňuje sdílet položky v trezoru s ostatními prostřednictvím organizace. Více informací naleznete na bitwarden.com." }, "moveToOrganization": { "message": "Přesunout do organizace" @@ -1501,6 +1548,15 @@ "readSecurityKey": { "message": "Přečíst bezpečnostní klíč" }, + "readingPasskeyLoading": { + "message": "Načítání přístupového klíče..." + }, + "passkeyAuthenticationFailed": { + "message": "Ověření přístupového klíče selhalo" + }, + "useADifferentLogInMethod": { + "message": "Použít jinou metodu přihlášení" + }, "awaitingSecurityKeyInteraction": { "message": "Čeká se na interakci s bezpečnostním klíčem..." }, @@ -1519,9 +1575,6 @@ "selectTwoStepLoginMethod": { "message": "Vyberte metodu dvoufázového přihlášení" }, - "recoveryCodeDesc": { - "message": "Ztratili jste přístup ke všem nastaveným poskytovatelům dvoufázového přihlášení? Použijte obnovovací kód pro vypnutí dvoufázového přihlášení." - }, "recoveryCodeTitle": { "message": "Kód pro obnovení" }, @@ -1657,7 +1710,7 @@ "description": "Overlay appearance select option for showing the field on click of the overlay icon" }, "enableAutoFillOnPageLoadSectionTitle": { - "message": "Automaticky vyplnit údaje při načtení stránky" + "message": "Automatické vyplnění údajů při načtení stránky" }, "enableAutoFillOnPageLoad": { "message": "Automaticky vyplnit údaje při načtení stránky" @@ -1675,22 +1728,19 @@ "message": "Více informací o automatickém vyplňování" }, "defaultAutoFillOnPageLoad": { - "message": "Výchozí nastavení automatického vyplňování pro položky přihlášení" + "message": "Výchozí nastavení autom. vyplňování" }, "defaultAutoFillOnPageLoadDesc": { "message": "Můžete vypnout automatické vyplňování při načtení stránky pro jednotlivé přihlašovací položky v zobrazení pro úpravu položky." }, - "itemAutoFillOnPageLoad": { - "message": "Automatické vyplnění při načtení stránky (pokud je nastaveno)" - }, "autoFillOnPageLoadUseDefault": { "message": "Použít výchozí nastavení" }, "autoFillOnPageLoadYes": { - "message": "Automatické vyplnění při načtení stránky" + "message": "Automatické vyplnění při načtení" }, "autoFillOnPageLoadNo": { - "message": "Nevyplňovat automaticky při načtení stránky" + "message": "Nevyplňovat automaticky při načtení" }, "commandOpenPopup": { "message": "Otevřít vyskakovací okno trezoru" @@ -1754,23 +1804,8 @@ "popup2faCloseMessage": { "message": "Klepnutím mimo vyskakovací okno při zjišťování ověřovacího kódu zaslaného na e-mail bude vyskakovací okno zavřeno. Chcete otevřít toto vyskakovací okno v novém okně, aby se nezavřelo?" }, - "popupU2fCloseMessage": { - "message": "Tento prohlížeč nemůže zpracovat požadavky U2F ve vyskakovacím okně. Chcete otevřít toto vyskakovací okno v novém okně, abyste se mohli přihlásit pomocí U2F?" - }, - "enableFavicon": { - "message": "Zobrazit ikony webových stránek" - }, - "faviconDesc": { - "message": "Zobrazí rozeznatelný obrázek vedle každého přihlášení." - }, - "faviconDescAlt": { - "message": "Zobrazí rozeznatelný obrázek vedle každého přihlášení. Platí pro všechny přihlášené účty." - }, - "enableBadgeCounter": { - "message": "Zobrazovat počet uložených přihlašovacích údajů na stránce" - }, - "badgeCounterDesc": { - "message": "Zobrazí počet přihlašovacích údajů pro aktuální webovou stránku na ikoně rozšíření prohlížeče." + "showIconsChangePasswordUrls": { + "message": "Zobrazit ikony webových stránek a načíst URL adresy pro změnu hesla" }, "cardholderName": { "message": "Jméno držitele karty" @@ -1829,6 +1864,9 @@ "securityCode": { "message": "Bezpečnostní kód" }, + "cardNumber": { + "message": "číslo karty" + }, "ex": { "message": "např." }, @@ -1845,7 +1883,7 @@ "message": "Slečna" }, "dr": { - "message": "MUDr." + "message": "Dr." }, "mx": { "message": "Neutrální" @@ -1869,7 +1907,7 @@ "message": "Společnost" }, "ssn": { - "message": "Číslo sociálního pojištění" + "message": "Rodné číslo" }, "passportNumber": { "message": "Číslo cestovního pasu" @@ -1931,32 +1969,81 @@ "typeNote": { "message": "Poznámka" }, - "newItemHeader": { - "message": "Nové $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderLogin": { + "message": "Nové přihlášení", + "description": "Header for new login item type" }, - "editItemHeader": { - "message": "Upravit $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderCard": { + "message": "Nová karta", + "description": "Header for new card item type" }, - "viewItemHeader": { - "message": "Zobrazit $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderIdentity": { + "message": "Nová identita", + "description": "Header for new identity item type" + }, + "newItemHeaderNote": { + "message": "Nová poznámka", + "description": "Header for new note item type" + }, + "newItemHeaderSshKey": { + "message": "Nový SSH klíč", + "description": "Header for new SSH key item type" + }, + "newItemHeaderTextSend": { + "message": "Nový textový Send", + "description": "Header for new text send" + }, + "newItemHeaderFileSend": { + "message": "Nový Send se soubory", + "description": "Header for new file send" + }, + "editItemHeaderLogin": { + "message": "Upravit přihlášení", + "description": "Header for edit login item type" + }, + "editItemHeaderCard": { + "message": "Upravit kartu", + "description": "Header for edit card item type" + }, + "editItemHeaderIdentity": { + "message": "Upravit identitu", + "description": "Header for edit identity item type" + }, + "editItemHeaderNote": { + "message": "Upravit poznámku", + "description": "Header for edit note item type" + }, + "editItemHeaderSshKey": { + "message": "Upravit SSH klíč", + "description": "Header for edit SSH key item type" + }, + "editItemHeaderTextSend": { + "message": "Upravit textový Send", + "description": "Header for edit text send" + }, + "editItemHeaderFileSend": { + "message": "Upravit Send se soubory", + "description": "Header for edit file send" + }, + "viewItemHeaderLogin": { + "message": "Zobrazit přihlášení", + "description": "Header for view login item type" + }, + "viewItemHeaderCard": { + "message": "Zobrazit kartu", + "description": "Header for view card item type" + }, + "viewItemHeaderIdentity": { + "message": "Zobrazit identitu", + "description": "Header for view identity item type" + }, + "viewItemHeaderNote": { + "message": "Zobrazit poznámku", + "description": "Header for view note item type" + }, + "viewItemHeaderSshKey": { + "message": "Zobrazit SSH klíč", + "description": "Header for view SSH key item type" }, "passwordHistory": { "message": "Historie hesel" @@ -2093,7 +2180,7 @@ "message": "Nic k zobrazení" }, "nothingGeneratedRecently": { - "message": "Nedávno jste nic nevygenerovali" + "message": "Ještě jste nic nevygenerovali" }, "remove": { "message": "Odebrat" @@ -2227,7 +2314,7 @@ "description": "This will be used as part of a larger sentence, broken up to include the generator icon. The full sentence will read 'Use the generator [GENERATOR_ICON] to create a strong unique password'" }, "useGeneratorHelpTextPartTwo": { - "message": "pro vytvoření silného jedinečného hesla", + "message": "pro vytvoření silného jedinečného hesla.", "description": "This will be used as part of a larger sentence, broken up to include the generator icon. The full sentence will read 'Use the generator [GENERATOR_ICON] to create a strong unique password'" }, "vaultCustomization": { @@ -2679,7 +2766,7 @@ "message": "Změny v zablokovaných doménách byly uloženy" }, "excludedDomainsSavedSuccess": { - "message": "Vyloučené změny domény byly uloženy" + "message": "Změny vyloučené domény byly uloženy" }, "limitSendViews": { "message": "Omezit zobrazení" @@ -2905,7 +2992,7 @@ "message": "Došlo k chybě při ukládání datumu smzání a vypršení platnosti." }, "hideYourEmail": { - "message": "Skryje Vaši e-mailovou adresu před zobrazením." + "message": "Skrýt Vaši e-mailovou adresu" }, "passwordPrompt": { "message": "Zeptat se znovu na hlavní heslo" @@ -3129,6 +3216,24 @@ } } }, + "exportingOrganizationVaultFromPasswordManagerWithDataOwnershipDesc": { + "message": "Bude exportován jen trezor organizace přidružený k $ORGANIZATION$.", + "placeholders": { + "organization": { + "content": "$1", + "example": "My Org Name" + } + } + }, + "exportingOrganizationVaultFromAdminConsoleWithDataOwnershipDesc": { + "message": "Bude exportován jen trezor organizace přidružený k $ORGANIZATION$. Položky mých sbírek nebudou zahrnuty.", + "placeholders": { + "organization": { + "content": "$1", + "example": "My Org Name" + } + } + }, "error": { "message": "Chyba" }, @@ -3222,7 +3327,7 @@ "description": "Labels the domain name email forwarder service option" }, "forwarderDomainNameHint": { - "message": "Vyberte doménu, která je podporována vybranou službou", + "message": "Vyberte doménu, která je podporována vybranou službou.", "description": "Guidance provided for email forwarding services that support multiple email domains." }, "forwarderError": { @@ -3460,6 +3565,28 @@ "logInRequestSent": { "message": "Požadavek odeslán" }, + "loginRequestApprovedForEmailOnDevice": { + "message": "Požadavek na přihlášení byl schválen pro $EMAIL$ na $DEVICE$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + }, + "device": { + "content": "$2", + "example": "Web app - Chrome" + } + } + }, + "youDeniedLoginAttemptFromAnotherDevice": { + "message": "Pokus o přihlášení byl zamítnut z jiného zařízení. Pokud jste to Vy, zkuste se znovu přihlásit do zařízení." + }, + "device": { + "message": "Zařízení" + }, + "loginStatus": { + "message": "Stav přihlášení" + }, "masterPasswordChanged": { "message": "Hlavní heslo bylo uloženo" }, @@ -3496,9 +3623,6 @@ "autofillPageLoadPolicyActivated": { "message": "Podle zásad Vaší organizace je zapnuto automatické vyplňování při načítání stránky." }, - "howToAutofill": { - "message": "Jak na automatické vyplňování" - }, "autofillSelectInfoWithCommand": { "message": "Vyberte položku z této obrazovky, použijte zkratku $COMMAND$ nebo prozkoumejte další volby v nastavení.", "placeholders": { @@ -3556,6 +3680,94 @@ "rememberThisDeviceToMakeFutureLoginsSeamless": { "message": "Zapamatovat si toto zařízení pro bezproblémové budoucí přihlášení" }, + "manageDevices": { + "message": "Spravovat zařízení" + }, + "currentSession": { + "message": "Aktuální relace" + }, + "mobile": { + "message": "Mobil", + "description": "Mobile app" + }, + "extension": { + "message": "Rozšíření", + "description": "Browser extension/addon" + }, + "desktop": { + "message": "Počítač", + "description": "Desktop app" + }, + "webVault": { + "message": "Webový trezor" + }, + "webApp": { + "message": "Webová aplikace" + }, + "cli": { + "message": "CLI" + }, + "sdk": { + "message": "SDK", + "description": "Software Development Kit" + }, + "requestPending": { + "message": "Čekající požadavek" + }, + "firstLogin": { + "message": "První přihlášení" + }, + "trusted": { + "message": "Důvěryhodný" + }, + "needsApproval": { + "message": "Vyžaduje schválení" + }, + "devices": { + "message": "Zařízení" + }, + "accessAttemptBy": { + "message": "Pokus o přístup z $EMAIL$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + } + } + }, + "confirmAccess": { + "message": "Potvrdit přístup" + }, + "denyAccess": { + "message": "Zamítnout přístup" + }, + "time": { + "message": "Čas" + }, + "deviceType": { + "message": "Typ zařízení" + }, + "loginRequest": { + "message": "Požadavek na přihlášení" + }, + "thisRequestIsNoLongerValid": { + "message": "Tento požadavek již není platný." + }, + "loginRequestHasAlreadyExpired": { + "message": "Požadavek na přihlášení již vypršel." + }, + "justNow": { + "message": "Právě teď" + }, + "requestedXMinutesAgo": { + "message": "Požadováno před $MINUTES$ minutami", + "placeholders": { + "minutes": { + "content": "$1", + "example": "5" + } + } + }, "deviceApprovalRequired": { "message": "Vyžaduje se schválení zařízení. Vyberte možnost schválení níže:" }, @@ -3795,18 +4007,10 @@ "aliasDomain": { "message": "Doména aliasu" }, - "passwordRepromptDisabledAutofillOnPageLoad": { - "message": "Položky se žádostí o změnu hlavního hesla nemohou být automaticky vyplněny při načítání stránky. Automatické vyplnění při načítání stránky je vypnuto.", - "description": "Toast message for describing that master password re-prompt cannot be autofilled on page load." - }, "autofillOnPageLoadSetToDefault": { "message": "Automatické vyplnění při načítání stránky bylo nastaveno na výchozí nastavení.", "description": "Toast message for informing the user that autofill on page load has been set to the default setting." }, - "turnOffMasterPasswordPromptToEditField": { - "message": "Pro úpravu tohoto pole vypněte požadavek na hlavní heslo", - "description": "Message appearing below the autofill on load message when master password reprompt is set for a vault item." - }, "toggleSideNavigation": { "message": "Přepnout boční navigaci" }, @@ -4015,15 +4219,11 @@ "selectImportCollection": { "message": "Zvolte sbírku" }, - "importTargetHint": { - "message": "Pokud chcete obsah importovaného souboru přesunout do složky $DESTINATION$, vyberte tuto volbu", - "description": "Located as a hint under the import target. Will be appended by either folder or collection, depending if the user is importing into an individual or an organizational vault.", - "placeholders": { - "destination": { - "content": "$1", - "example": "folder or collection" - } - } + "importTargetHintCollection": { + "message": "Pokud chcete obsah importovaného souboru přesunout do sbírky, vyberte tuto volbu" + }, + "importTargetHintFolder": { + "message": "Pokud chcete obsah importovaného souboru přesunout do složky, vyberte tuto volbu" }, "importUnassignedItemsError": { "message": "Soubor obsahuje nepřiřazené položky." @@ -4080,9 +4280,6 @@ "passkeyNotCopiedAlert": { "message": "Přístupový klíč nebude zkopírován do duplikované položky. Chete pokračovat v duplikování této položky?" }, - "passkeyFeatureIsNotImplementedForAccountsWithoutMasterPassword": { - "message": "Ověření vyžadované iniciátorem webu. Tato funkce ještě není implementována pro účty bez hlavního hesla." - }, "logInWithPasskeyQuestion": { "message": "Přihlásit se pomocí přístupového klíče?" }, @@ -4291,7 +4488,7 @@ "description": "Title for dialog which asks if the user wants to proceed to a relevant Help Center page" }, "confirmContinueToHelpCenterPasswordManagementContent": { - "message": "Změňte nastavení automatického vyplňování a správy hesel.", + "message": "Změna nastavení automatického vyplňování a nastavení správy hesel.", "description": "Body content for dialog which asks if the user wants to proceed to the Help Center's page about browser password management settings" }, "confirmContinueToHelpCenterKeyboardShortcutsContent": { @@ -4299,7 +4496,7 @@ "description": "Body content for dialog which asks if the user wants to proceed to the Help Center's page about browser keyboard shortcut settings" }, "confirmContinueToBrowserPasswordManagementSettingsContent": { - "message": "Změňte nastavení automatického vyplňování a správy hesel.", + "message": "Změna nastavení automatického vyplňování a nastavení správy hesel.", "description": "Body content for dialog which asks if the user wants to proceed to the browser's password management settings page" }, "confirmContinueToBrowserKeyboardShortcutSettingsContent": { @@ -4465,17 +4662,17 @@ } } }, - "copyFieldValue": { - "message": "Kopírovat $FIELD$, $VALUE$", + "copyFieldCipherName": { + "message": "Kopírovat $FIELD$, $CIPHERNAME$", "description": "Title for a button that copies a field value to the clipboard.", "placeholders": { "field": { "content": "$1", "example": "Username" }, - "value": { + "ciphername": { "content": "$2", - "example": "Foo" + "example": "Login Item" } } }, @@ -4768,9 +4965,6 @@ } } }, - "enableAnimations": { - "message": "Povolit animace" - }, "showAnimations": { "message": "Zobrazit animaci" }, @@ -4829,13 +5023,13 @@ "message": "Popis pole" }, "textHelpText": { - "message": "Použijte textová pole pro data jako bezpečnostní otázky" + "message": "Použijte textová pole pro data (jako např. bezpečnostní otázky)." }, "hiddenHelpText": { - "message": "Použijte skrytá pole pro citlivá data, jako je heslo" + "message": "Použijte skrytá pole pro citlivá data, jako je heslo." }, "checkBoxHelpText": { - "message": "Použijte zaškrtávací políčka, pokud chcete automaticky vyplnit zaškrtávací políčko formuláře (např. pro zapamatování e-mailu)" + "message": "Použijte zaškrtávací políčka, pokud chcete automaticky zvolit zaškrtávací políčko formuláře (např. pro zapamatování e-mailu)." }, "linkedHelpText": { "message": "Použijte propojené pole, pokud máte problémy s automatickým vyplňováním na konkrétní webové stránce." @@ -4983,15 +5177,9 @@ "itemLocation": { "message": "Umístění položky" }, - "fileSend": { - "message": "Send souboru" - }, "fileSends": { "message": "Sends se soubory" }, - "textSend": { - "message": "Send textu" - }, "textSends": { "message": "Sends s texty" }, @@ -5001,11 +5189,23 @@ "showNumberOfAutofillSuggestions": { "message": "Zobrazit počet návrhů automatického vyplňování přihlášení na ikoně rozšíření" }, + "accountAccessRequested": { + "message": "Požadován přístup k účtu" + }, + "confirmAccessAttempt": { + "message": "Potvrďte pokus o přístup z $EMAIL$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + } + } + }, "showQuickCopyActions": { "message": "Zobrazit akce rychlé kopie v trezoru" }, "systemDefault": { - "message": "Systémový výchozí" + "message": "Výchozí systémový" }, "enterprisePolicyRequirementsApplied": { "message": "Na toto nastavení byly uplatněny požadavky podnikových zásad" @@ -5040,9 +5240,6 @@ "vaultCustomTimeoutMinimum": { "message": "Minimální vlastní časový limit je 1 minuta." }, - "additionalContentAvailable": { - "message": "Je k dispozici další obsah" - }, "fileSavedToDevice": { "message": "Soubor byl uložen. Můžete jej nalézt ve stažené složce v zařízení." }, @@ -5062,7 +5259,7 @@ "message": "Položky, které smažete, se zde zobrazí a budou trvale smazány po 30 dnech." }, "trashWarning": { - "message": "Položky, které byly v koši déle než 30 dní, budou automaticky smazány." + "message": "Položky, které byly v koši déle než 30 dnů, budou automaticky smazány." }, "restore": { "message": "Obnovit" @@ -5278,10 +5475,10 @@ "message": "Šířka rozšíření" }, "wide": { - "message": "Šířka" + "message": "Široké" }, "extraWide": { - "message": "Extra široký" + "message": "Extra široké" }, "sshKeyWrongPassword": { "message": "Zadané heslo není správné." @@ -5328,6 +5525,12 @@ "changeAtRiskPassword": { "message": "Změnit ohrožené heslo" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "Tyto přihlašovací údaje jsou ohrožené a chybí jim webová stránka. Přidejte webovou stránku a změňte heslo pro větší bezpečnost." + }, + "missingWebsite": { + "message": "Chybějící webová stránka" + }, "settingsVaultOptions": { "message": "Volby trezoru" }, @@ -5376,6 +5579,18 @@ "hasItemsVaultNudgeTitle": { "message": "Vítejte ve Vašem trezoru!" }, + "phishingPageTitle": { + "message": "Phishingové webová stránka" + }, + "phishingPageCloseTab": { + "message": "Zavřít kartu" + }, + "phishingPageContinue": { + "message": "Pokračovat" + }, + "phishingPageLearnWhy": { + "message": "Proč to vidíte?" + }, "hasItemsVaultNudgeBodyOne": { "message": "Položky automatického vyplňování aktuální stránky" }, @@ -5451,11 +5666,33 @@ "message": "Jednoduše vytvořte silná a unikátní hesla klepnutím na tlačítko Generovat heslo, které Vám pomůže udržet Vaše přihlašovací údaje v bezpečí.", "description": "Aria label for the body content of the generator nudge" }, + "aboutThisSetting": { + "message": "O tomto nastavení" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden bude používat uložené přihlašovací URI k identifikaci, která ikona nebo změna adresy URL by měla být použita pro zlepšení Vašeho zážitku. Při používání této služby nejsou shromažďovány ani ukládány žádné informace." + }, "noPermissionsViewPage": { "message": "Nemáte oprávnění k zobrazení této stránky. Zkuste se přihlásit jiným účtem." }, "wasmNotSupported": { "message": "WebAssembly není ve Vašem prohlížeči podporováno nebo není povoleno. WebAssembly je vyžadováno pro použití aplikace Bitwarden.", "description": "'WebAssembly' is a technical term and should not be translated." + }, + "showMore": { + "message": "Zobrazit více" + }, + "showLess": { + "message": "Zobrazit méně" + }, + "next": { + "message": "Další" + }, + "moreBreadcrumbs": { + "message": "Více...", + "description": "This is used in the context of a breadcrumb navigation, indicating that there are more items in the breadcrumb trail that are not currently displayed." + }, + "confirmKeyConnectorDomain": { + "message": "Potvrdit doménu Key Connectoru" } } diff --git a/apps/browser/src/_locales/cy/messages.json b/apps/browser/src/_locales/cy/messages.json index c5cbbdd189c..b8758c60f00 100644 --- a/apps/browser/src/_locales/cy/messages.json +++ b/apps/browser/src/_locales/cy/messages.json @@ -547,12 +547,50 @@ "searchVault": { "message": "Chwilio'r gell" }, + "resetSearch": { + "message": "Reset search" + }, + "archiveNoun": { + "message": "Archive", + "description": "Noun" + }, + "archiveVerb": { + "message": "Archive", + "description": "Verb" + }, + "unarchive": { + "message": "Unarchive" + }, + "itemsInArchive": { + "message": "Items in archive" + }, + "noItemsInArchive": { + "message": "No items in archive" + }, + "noItemsInArchiveDesc": { + "message": "Archived items will appear here and will be excluded from general search results and autofill suggestions." + }, + "itemSentToArchive": { + "message": "Item sent to archive" + }, + "itemRemovedFromArchive": { + "message": "Item removed from archive" + }, + "archiveItem": { + "message": "Archive item" + }, + "archiveItemConfirmDesc": { + "message": "Archived items are excluded from general search results and autofill suggestions. Are you sure you want to archive this item?" + }, "edit": { "message": "Golygu" }, "view": { "message": "Gweld" }, + "viewLogin": { + "message": "View login" + }, "noItemsInList": { "message": "Does dim eitemau i'w rhestru." }, @@ -695,6 +733,15 @@ "invalidMasterPassword": { "message": "Prif gyfrinair annilys" }, + "invalidMasterPasswordConfirmEmailAndHost": { + "message": "Invalid master password. Confirm your email is correct and your account was created on $HOST$.", + "placeholders": { + "host": { + "content": "$1", + "example": "vault.bitwarden.com" + } + } + }, "vaultTimeout": { "message": "Cloi'r gell" }, @@ -1501,6 +1548,15 @@ "readSecurityKey": { "message": "Read security key" }, + "readingPasskeyLoading": { + "message": "Reading passkey..." + }, + "passkeyAuthenticationFailed": { + "message": "Passkey authentication failed" + }, + "useADifferentLogInMethod": { + "message": "Use a different log in method" + }, "awaitingSecurityKeyInteraction": { "message": "Awaiting security key interaction..." }, @@ -1519,9 +1575,6 @@ "selectTwoStepLoginMethod": { "message": "Select two-step login method" }, - "recoveryCodeDesc": { - "message": "Lost access to all of your two-factor providers? Use your recovery code to turn off all two-factor providers from your account." - }, "recoveryCodeTitle": { "message": "Cod adfer" }, @@ -1680,9 +1733,6 @@ "defaultAutoFillOnPageLoadDesc": { "message": "You can turn off autofill on page load for individual login items from the item's Edit view." }, - "itemAutoFillOnPageLoad": { - "message": "Autofill on page load (if set up in Options)" - }, "autoFillOnPageLoadUseDefault": { "message": "Defnyddio'r gosodiad rhagosodedig" }, @@ -1754,23 +1804,8 @@ "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?" }, - "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?" - }, - "enableFavicon": { - "message": "Dangos eiconau gwefannau" - }, - "faviconDesc": { - "message": "Dangos delwedd adnabyddadwy wrth ymyl pob eitem." - }, - "faviconDescAlt": { - "message": "Show a recognizable image next to each login. Applies to all logged in accounts." - }, - "enableBadgeCounter": { - "message": "Show badge counter" - }, - "badgeCounterDesc": { - "message": "Indicate how many logins you have for the current web page." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "cardholderName": { "message": "Enw ar y cerdyn" @@ -1829,6 +1864,9 @@ "securityCode": { "message": "Cod diogelwch" }, + "cardNumber": { + "message": "card number" + }, "ex": { "message": "engh." }, @@ -1931,32 +1969,81 @@ "typeNote": { "message": "Note" }, - "newItemHeader": { - "message": "$TYPE$ newydd", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderLogin": { + "message": "New Login", + "description": "Header for new login item type" }, - "editItemHeader": { - "message": "Golygu $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderCard": { + "message": "New Card", + "description": "Header for new card item type" }, - "viewItemHeader": { - "message": "Gweld $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderIdentity": { + "message": "New Identity", + "description": "Header for new identity item type" + }, + "newItemHeaderNote": { + "message": "New Note", + "description": "Header for new note item type" + }, + "newItemHeaderSshKey": { + "message": "New SSH key", + "description": "Header for new SSH key item type" + }, + "newItemHeaderTextSend": { + "message": "New Text Send", + "description": "Header for new text send" + }, + "newItemHeaderFileSend": { + "message": "New File Send", + "description": "Header for new file send" + }, + "editItemHeaderLogin": { + "message": "Edit Login", + "description": "Header for edit login item type" + }, + "editItemHeaderCard": { + "message": "Edit Card", + "description": "Header for edit card item type" + }, + "editItemHeaderIdentity": { + "message": "Edit Identity", + "description": "Header for edit identity item type" + }, + "editItemHeaderNote": { + "message": "Edit Note", + "description": "Header for edit note item type" + }, + "editItemHeaderSshKey": { + "message": "Edit SSH key", + "description": "Header for edit SSH key item type" + }, + "editItemHeaderTextSend": { + "message": "Edit Text Send", + "description": "Header for edit text send" + }, + "editItemHeaderFileSend": { + "message": "Edit File Send", + "description": "Header for edit file send" + }, + "viewItemHeaderLogin": { + "message": "View Login", + "description": "Header for view login item type" + }, + "viewItemHeaderCard": { + "message": "View Card", + "description": "Header for view card item type" + }, + "viewItemHeaderIdentity": { + "message": "View Identity", + "description": "Header for view identity item type" + }, + "viewItemHeaderNote": { + "message": "View Note", + "description": "Header for view note item type" + }, + "viewItemHeaderSshKey": { + "message": "View SSH key", + "description": "Header for view SSH key item type" }, "passwordHistory": { "message": "Hanes cyfrineiriau" @@ -3129,6 +3216,24 @@ } } }, + "exportingOrganizationVaultFromPasswordManagerWithDataOwnershipDesc": { + "message": "Only the organization vault associated with $ORGANIZATION$ will be exported.", + "placeholders": { + "organization": { + "content": "$1", + "example": "My Org Name" + } + } + }, + "exportingOrganizationVaultFromAdminConsoleWithDataOwnershipDesc": { + "message": "Only the organization vault associated with $ORGANIZATION$ will be exported. My items collections will not be included.", + "placeholders": { + "organization": { + "content": "$1", + "example": "My Org Name" + } + } + }, "error": { "message": "Gwall" }, @@ -3460,6 +3565,28 @@ "logInRequestSent": { "message": "Request sent" }, + "loginRequestApprovedForEmailOnDevice": { + "message": "Login request approved for $EMAIL$ on $DEVICE$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + }, + "device": { + "content": "$2", + "example": "Web app - Chrome" + } + } + }, + "youDeniedLoginAttemptFromAnotherDevice": { + "message": "You denied a login attempt from another device. If this was you, try to log in with the device again." + }, + "device": { + "message": "Device" + }, + "loginStatus": { + "message": "Login status" + }, "masterPasswordChanged": { "message": "Master password saved" }, @@ -3496,9 +3623,6 @@ "autofillPageLoadPolicyActivated": { "message": "Your organization policies have turned on autofill on page load." }, - "howToAutofill": { - "message": "Sut i lenwi'n awtomatig" - }, "autofillSelectInfoWithCommand": { "message": "Dewiswch eitem o'r sgrin hon, defnyddiwch y llwybr byr $COMMAND$, neu darganfyddwch ddewisiadau eraill yn y gosodiadau.", "placeholders": { @@ -3556,6 +3680,94 @@ "rememberThisDeviceToMakeFutureLoginsSeamless": { "message": "Remember this device to make future logins seamless" }, + "manageDevices": { + "message": "Manage devices" + }, + "currentSession": { + "message": "Current session" + }, + "mobile": { + "message": "Mobile", + "description": "Mobile app" + }, + "extension": { + "message": "Extension", + "description": "Browser extension/addon" + }, + "desktop": { + "message": "Desktop", + "description": "Desktop app" + }, + "webVault": { + "message": "Web vault" + }, + "webApp": { + "message": "Web app" + }, + "cli": { + "message": "CLI" + }, + "sdk": { + "message": "SDK", + "description": "Software Development Kit" + }, + "requestPending": { + "message": "Request pending" + }, + "firstLogin": { + "message": "First login" + }, + "trusted": { + "message": "Trusted" + }, + "needsApproval": { + "message": "Needs approval" + }, + "devices": { + "message": "Devices" + }, + "accessAttemptBy": { + "message": "Access attempt by $EMAIL$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + } + } + }, + "confirmAccess": { + "message": "Confirm access" + }, + "denyAccess": { + "message": "Deny access" + }, + "time": { + "message": "Time" + }, + "deviceType": { + "message": "Device Type" + }, + "loginRequest": { + "message": "Login request" + }, + "thisRequestIsNoLongerValid": { + "message": "This request is no longer valid." + }, + "loginRequestHasAlreadyExpired": { + "message": "Login request has already expired." + }, + "justNow": { + "message": "Just now" + }, + "requestedXMinutesAgo": { + "message": "Requested $MINUTES$ minutes ago", + "placeholders": { + "minutes": { + "content": "$1", + "example": "5" + } + } + }, "deviceApprovalRequired": { "message": "Device approval required. Select an approval option below:" }, @@ -3795,18 +4007,10 @@ "aliasDomain": { "message": "Alias domain" }, - "passwordRepromptDisabledAutofillOnPageLoad": { - "message": "Items with master password re-prompt cannot be autofilled on page load. Autofill on page load turned off.", - "description": "Toast message for describing that master password re-prompt cannot be autofilled on page load." - }, "autofillOnPageLoadSetToDefault": { "message": "Autofill on page load set to use default setting.", "description": "Toast message for informing the user that autofill on page load has been set to the default setting." }, - "turnOffMasterPasswordPromptToEditField": { - "message": "Turn off master password re-prompt to edit this field", - "description": "Message appearing below the autofill on load message when master password reprompt is set for a vault item." - }, "toggleSideNavigation": { "message": "Toggle side navigation" }, @@ -4015,15 +4219,11 @@ "selectImportCollection": { "message": "Select a collection" }, - "importTargetHint": { - "message": "Select this option if you want the imported file contents moved to a $DESTINATION$", - "description": "Located as a hint under the import target. Will be appended by either folder or collection, depending if the user is importing into an individual or an organizational vault.", - "placeholders": { - "destination": { - "content": "$1", - "example": "folder or collection" - } - } + "importTargetHintCollection": { + "message": "Select this option if you want the imported file contents moved to a collection" + }, + "importTargetHintFolder": { + "message": "Select this option if you want the imported file contents moved to a folder" }, "importUnassignedItemsError": { "message": "File contains unassigned items." @@ -4080,9 +4280,6 @@ "passkeyNotCopiedAlert": { "message": "The passkey will not be copied to the cloned item. Do you want to continue cloning this item?" }, - "passkeyFeatureIsNotImplementedForAccountsWithoutMasterPassword": { - "message": "Verification required by the initiating site. This feature is not yet implemented for accounts without master password." - }, "logInWithPasskeyQuestion": { "message": "Log in with passkey?" }, @@ -4465,17 +4662,17 @@ } } }, - "copyFieldValue": { - "message": "Copy $FIELD$, $VALUE$", + "copyFieldCipherName": { + "message": "Copy $FIELD$, $CIPHERNAME$", "description": "Title for a button that copies a field value to the clipboard.", "placeholders": { "field": { "content": "$1", "example": "Username" }, - "value": { + "ciphername": { "content": "$2", - "example": "Foo" + "example": "Login Item" } } }, @@ -4768,9 +4965,6 @@ } } }, - "enableAnimations": { - "message": "Galluogi animeiddio" - }, "showAnimations": { "message": "Dangos animeiddio" }, @@ -4983,15 +5177,9 @@ "itemLocation": { "message": "Item Location" }, - "fileSend": { - "message": "File Send" - }, "fileSends": { "message": "File Sends" }, - "textSend": { - "message": "Text Send" - }, "textSends": { "message": "Text Sends" }, @@ -5001,6 +5189,18 @@ "showNumberOfAutofillSuggestions": { "message": "Show number of login autofill suggestions on extension icon" }, + "accountAccessRequested": { + "message": "Account access requested" + }, + "confirmAccessAttempt": { + "message": "Confirm access attempt for $EMAIL$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + } + } + }, "showQuickCopyActions": { "message": "Show quick copy actions on Vault" }, @@ -5040,9 +5240,6 @@ "vaultCustomTimeoutMinimum": { "message": "Minimum custom timeout is 1 minute." }, - "additionalContentAvailable": { - "message": "Additional content is available" - }, "fileSavedToDevice": { "message": "File saved to device. Manage from your device downloads." }, @@ -5328,6 +5525,12 @@ "changeAtRiskPassword": { "message": "Change at-risk password" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "This login is at-risk and missing a website. Add a website and change the password for stronger security." + }, + "missingWebsite": { + "message": "Missing website" + }, "settingsVaultOptions": { "message": "Dewisiadau'r gell" }, @@ -5376,6 +5579,18 @@ "hasItemsVaultNudgeTitle": { "message": "Welcome to your vault!" }, + "phishingPageTitle": { + "message": "Phishing website" + }, + "phishingPageCloseTab": { + "message": "Close tab" + }, + "phishingPageContinue": { + "message": "Continue" + }, + "phishingPageLearnWhy": { + "message": "Why are you seeing this?" + }, "hasItemsVaultNudgeBodyOne": { "message": "Autofill items for the current page" }, @@ -5451,11 +5666,33 @@ "message": "Easily create strong and unique passwords by clicking on the Generate password button to help you keep your logins secure.", "description": "Aria label for the body content of the generator nudge" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "noPermissionsViewPage": { "message": "You do not have permissions to view this page. Try logging in with a different account." }, "wasmNotSupported": { "message": "WebAssembly is not supported on your browser or is not enabled. WebAssembly is required to use the Bitwarden app.", "description": "'WebAssembly' is a technical term and should not be translated." + }, + "showMore": { + "message": "Show more" + }, + "showLess": { + "message": "Show less" + }, + "next": { + "message": "Next" + }, + "moreBreadcrumbs": { + "message": "More breadcrumbs", + "description": "This is used in the context of a breadcrumb navigation, indicating that there are more items in the breadcrumb trail that are not currently displayed." + }, + "confirmKeyConnectorDomain": { + "message": "Confirm Key Connector domain" } } diff --git a/apps/browser/src/_locales/da/messages.json b/apps/browser/src/_locales/da/messages.json index 5737ba66b8d..2fc49cceb1e 100644 --- a/apps/browser/src/_locales/da/messages.json +++ b/apps/browser/src/_locales/da/messages.json @@ -547,12 +547,50 @@ "searchVault": { "message": "Søg i boks" }, + "resetSearch": { + "message": "Reset search" + }, + "archiveNoun": { + "message": "Archive", + "description": "Noun" + }, + "archiveVerb": { + "message": "Archive", + "description": "Verb" + }, + "unarchive": { + "message": "Unarchive" + }, + "itemsInArchive": { + "message": "Items in archive" + }, + "noItemsInArchive": { + "message": "No items in archive" + }, + "noItemsInArchiveDesc": { + "message": "Archived items will appear here and will be excluded from general search results and autofill suggestions." + }, + "itemSentToArchive": { + "message": "Item sent to archive" + }, + "itemRemovedFromArchive": { + "message": "Item removed from archive" + }, + "archiveItem": { + "message": "Archive item" + }, + "archiveItemConfirmDesc": { + "message": "Archived items are excluded from general search results and autofill suggestions. Are you sure you want to archive this item?" + }, "edit": { "message": "Redigér" }, "view": { "message": "Vis" }, + "viewLogin": { + "message": "View login" + }, "noItemsInList": { "message": "Der er ingen elementer at vise." }, @@ -695,6 +733,15 @@ "invalidMasterPassword": { "message": "Ugyldig hovedadgangskode" }, + "invalidMasterPasswordConfirmEmailAndHost": { + "message": "Invalid master password. Confirm your email is correct and your account was created on $HOST$.", + "placeholders": { + "host": { + "content": "$1", + "example": "vault.bitwarden.com" + } + } + }, "vaultTimeout": { "message": "Boks timeout" }, @@ -1501,6 +1548,15 @@ "readSecurityKey": { "message": "Read security key" }, + "readingPasskeyLoading": { + "message": "Reading passkey..." + }, + "passkeyAuthenticationFailed": { + "message": "Passkey authentication failed" + }, + "useADifferentLogInMethod": { + "message": "Use a different log in method" + }, "awaitingSecurityKeyInteraction": { "message": "Awaiting security key interaction..." }, @@ -1519,9 +1575,6 @@ "selectTwoStepLoginMethod": { "message": "Select two-step login method" }, - "recoveryCodeDesc": { - "message": "Mistet adgang til alle dine to-faktor-udbydere? Brug din genoprettelseskode til at deaktivere alle to-faktor udbydere på din konto." - }, "recoveryCodeTitle": { "message": "Gendannelseskode" }, @@ -1680,9 +1733,6 @@ "defaultAutoFillOnPageLoadDesc": { "message": "Autoudfyldning ved sideindlæsning kan slås fra for individuelle loginemner fra emnets redigeringsvisning." }, - "itemAutoFillOnPageLoad": { - "message": "Autoudfyld ved sideindlæsning (hvis opsat i Indstillinger)" - }, "autoFillOnPageLoadUseDefault": { "message": "Anvend standardindstilling" }, @@ -1754,23 +1804,8 @@ "popup2faCloseMessage": { "message": "Ved at klikke uden for pop-up-vinduet for at tjekke din e-mail for din bekræftelseskode vil få denne popup til at lukke. Vil du åbne denne popup i et nyt vindue, så det ikke lukker?" }, - "popupU2fCloseMessage": { - "message": "Denne browser kan ikke behandle U2F-anmodninger i dette popup-vindue. Vil du åbne denne popup i et nyt vindue, så du kan logge ind ved hjælp af U2F?" - }, - "enableFavicon": { - "message": "Vis webstedsikoner" - }, - "faviconDesc": { - "message": "Vis et genkendeligt billede ud for hvert login." - }, - "faviconDescAlt": { - "message": "Vis et genkendeligt billede ved siden af hvert login. Gælder for alle indloggede konti." - }, - "enableBadgeCounter": { - "message": "Vis badge-tæller" - }, - "badgeCounterDesc": { - "message": "Vis hvor mange logins du har til den aktuelle webside." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "cardholderName": { "message": "Kortholders navn" @@ -1829,6 +1864,9 @@ "securityCode": { "message": "Sikkerhedskode" }, + "cardNumber": { + "message": "card number" + }, "ex": { "message": "eks." }, @@ -1931,32 +1969,81 @@ "typeNote": { "message": "Note" }, - "newItemHeader": { - "message": "Ny $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderLogin": { + "message": "New Login", + "description": "Header for new login item type" }, - "editItemHeader": { - "message": "Redigér $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderCard": { + "message": "New Card", + "description": "Header for new card item type" }, - "viewItemHeader": { - "message": "Vis $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderIdentity": { + "message": "New Identity", + "description": "Header for new identity item type" + }, + "newItemHeaderNote": { + "message": "New Note", + "description": "Header for new note item type" + }, + "newItemHeaderSshKey": { + "message": "New SSH key", + "description": "Header for new SSH key item type" + }, + "newItemHeaderTextSend": { + "message": "New Text Send", + "description": "Header for new text send" + }, + "newItemHeaderFileSend": { + "message": "New File Send", + "description": "Header for new file send" + }, + "editItemHeaderLogin": { + "message": "Edit Login", + "description": "Header for edit login item type" + }, + "editItemHeaderCard": { + "message": "Edit Card", + "description": "Header for edit card item type" + }, + "editItemHeaderIdentity": { + "message": "Edit Identity", + "description": "Header for edit identity item type" + }, + "editItemHeaderNote": { + "message": "Edit Note", + "description": "Header for edit note item type" + }, + "editItemHeaderSshKey": { + "message": "Edit SSH key", + "description": "Header for edit SSH key item type" + }, + "editItemHeaderTextSend": { + "message": "Edit Text Send", + "description": "Header for edit text send" + }, + "editItemHeaderFileSend": { + "message": "Edit File Send", + "description": "Header for edit file send" + }, + "viewItemHeaderLogin": { + "message": "View Login", + "description": "Header for view login item type" + }, + "viewItemHeaderCard": { + "message": "View Card", + "description": "Header for view card item type" + }, + "viewItemHeaderIdentity": { + "message": "View Identity", + "description": "Header for view identity item type" + }, + "viewItemHeaderNote": { + "message": "View Note", + "description": "Header for view note item type" + }, + "viewItemHeaderSshKey": { + "message": "View SSH key", + "description": "Header for view SSH key item type" }, "passwordHistory": { "message": "Adgangskodehistorik" @@ -3129,6 +3216,24 @@ } } }, + "exportingOrganizationVaultFromPasswordManagerWithDataOwnershipDesc": { + "message": "Only the organization vault associated with $ORGANIZATION$ will be exported.", + "placeholders": { + "organization": { + "content": "$1", + "example": "My Org Name" + } + } + }, + "exportingOrganizationVaultFromAdminConsoleWithDataOwnershipDesc": { + "message": "Only the organization vault associated with $ORGANIZATION$ will be exported. My items collections will not be included.", + "placeholders": { + "organization": { + "content": "$1", + "example": "My Org Name" + } + } + }, "error": { "message": "Fejl" }, @@ -3460,6 +3565,28 @@ "logInRequestSent": { "message": "Request sent" }, + "loginRequestApprovedForEmailOnDevice": { + "message": "Login request approved for $EMAIL$ on $DEVICE$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + }, + "device": { + "content": "$2", + "example": "Web app - Chrome" + } + } + }, + "youDeniedLoginAttemptFromAnotherDevice": { + "message": "You denied a login attempt from another device. If this was you, try to log in with the device again." + }, + "device": { + "message": "Device" + }, + "loginStatus": { + "message": "Login status" + }, "masterPasswordChanged": { "message": "Master password saved" }, @@ -3496,9 +3623,6 @@ "autofillPageLoadPolicyActivated": { "message": "Organisationspolitikkerne har aktiveret autoudfyldning ved sideindlæsning." }, - "howToAutofill": { - "message": "Sådan autoudfyldes" - }, "autofillSelectInfoWithCommand": { "message": "Vælg et emne fra denne skærm, brug genvejen $COMMAND$ eller udforsk andre valgmuligheder i Indstillinger.", "placeholders": { @@ -3556,6 +3680,94 @@ "rememberThisDeviceToMakeFutureLoginsSeamless": { "message": "Husk denne enhed for at gøre fremtidige indlogninger gnidningsløse" }, + "manageDevices": { + "message": "Manage devices" + }, + "currentSession": { + "message": "Current session" + }, + "mobile": { + "message": "Mobile", + "description": "Mobile app" + }, + "extension": { + "message": "Extension", + "description": "Browser extension/addon" + }, + "desktop": { + "message": "Desktop", + "description": "Desktop app" + }, + "webVault": { + "message": "Web vault" + }, + "webApp": { + "message": "Web app" + }, + "cli": { + "message": "CLI" + }, + "sdk": { + "message": "SDK", + "description": "Software Development Kit" + }, + "requestPending": { + "message": "Request pending" + }, + "firstLogin": { + "message": "First login" + }, + "trusted": { + "message": "Trusted" + }, + "needsApproval": { + "message": "Needs approval" + }, + "devices": { + "message": "Devices" + }, + "accessAttemptBy": { + "message": "Access attempt by $EMAIL$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + } + } + }, + "confirmAccess": { + "message": "Confirm access" + }, + "denyAccess": { + "message": "Deny access" + }, + "time": { + "message": "Time" + }, + "deviceType": { + "message": "Device Type" + }, + "loginRequest": { + "message": "Login request" + }, + "thisRequestIsNoLongerValid": { + "message": "This request is no longer valid." + }, + "loginRequestHasAlreadyExpired": { + "message": "Login request has already expired." + }, + "justNow": { + "message": "Just now" + }, + "requestedXMinutesAgo": { + "message": "Requested $MINUTES$ minutes ago", + "placeholders": { + "minutes": { + "content": "$1", + "example": "5" + } + } + }, "deviceApprovalRequired": { "message": "Enhedsgodkendelse kræves. Vælg en godkendelsesmulighed nedenfor:" }, @@ -3795,18 +4007,10 @@ "aliasDomain": { "message": "Aliasdomæne" }, - "passwordRepromptDisabledAutofillOnPageLoad": { - "message": "Emner, hvor der anmodes om hovedadgangskode igen, kan ikke autoudfyldes ved sideindlæsning. Autoudfyldning ved sideindlæsning er slået fra.", - "description": "Toast message for describing that master password re-prompt cannot be autofilled on page load." - }, "autofillOnPageLoadSetToDefault": { "message": "Autoudfyldning ved sideindlæsning sat til standardindstillingen.", "description": "Toast message for informing the user that autofill on page load has been set to the default setting." }, - "turnOffMasterPasswordPromptToEditField": { - "message": "Slå anmodning om hovedadgangskode igen fra for at redigere dette felt", - "description": "Message appearing below the autofill on load message when master password reprompt is set for a vault item." - }, "toggleSideNavigation": { "message": "Slå sidenavigering til/fra" }, @@ -4015,15 +4219,11 @@ "selectImportCollection": { "message": "Vælg en samling" }, - "importTargetHint": { - "message": "Vælg denne indstilling, hvis importeret filindhold skal flyttet til en $DESTINATION$", - "description": "Located as a hint under the import target. Will be appended by either folder or collection, depending if the user is importing into an individual or an organizational vault.", - "placeholders": { - "destination": { - "content": "$1", - "example": "folder or collection" - } - } + "importTargetHintCollection": { + "message": "Select this option if you want the imported file contents moved to a collection" + }, + "importTargetHintFolder": { + "message": "Select this option if you want the imported file contents moved to a folder" }, "importUnassignedItemsError": { "message": "Fil indeholder ikke-tildelte emner." @@ -4080,9 +4280,6 @@ "passkeyNotCopiedAlert": { "message": "Adgangsnøglen kopieres ikke til det klonede emne. Fortsæt kloningen af emnet alligevel?" }, - "passkeyFeatureIsNotImplementedForAccountsWithoutMasterPassword": { - "message": "Bekræftelse krævet af startwebstedet. Denne funktion er endnu ikke implementeret for konti uden hovedadgangskode." - }, "logInWithPasskeyQuestion": { "message": "Log ind med adgangsnøgle?" }, @@ -4465,17 +4662,17 @@ } } }, - "copyFieldValue": { - "message": "Copy $FIELD$, $VALUE$", + "copyFieldCipherName": { + "message": "Copy $FIELD$, $CIPHERNAME$", "description": "Title for a button that copies a field value to the clipboard.", "placeholders": { "field": { "content": "$1", "example": "Username" }, - "value": { + "ciphername": { "content": "$2", - "example": "Foo" + "example": "Login Item" } } }, @@ -4768,9 +4965,6 @@ } } }, - "enableAnimations": { - "message": "Aktivér animationer" - }, "showAnimations": { "message": "Vis animationer" }, @@ -4983,15 +5177,9 @@ "itemLocation": { "message": "Emneplacering" }, - "fileSend": { - "message": "Fil Send" - }, "fileSends": { "message": "Fil-Sends" }, - "textSend": { - "message": "Tekst Send" - }, "textSends": { "message": "Tekst-Sends" }, @@ -5001,6 +5189,18 @@ "showNumberOfAutofillSuggestions": { "message": "Vis antal login-autoudfyldningsforslag på udvidelsesikon" }, + "accountAccessRequested": { + "message": "Account access requested" + }, + "confirmAccessAttempt": { + "message": "Confirm access attempt for $EMAIL$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + } + } + }, "showQuickCopyActions": { "message": "Vis hurtig-kopihandlinger på Boks" }, @@ -5040,9 +5240,6 @@ "vaultCustomTimeoutMinimum": { "message": "Tilpasset minimumstimeout udgør 1 minut." }, - "additionalContentAvailable": { - "message": "Yderligere indhold er tilgængeligt" - }, "fileSavedToDevice": { "message": "Fil gemt på enheden. Håndtér fra enhedens downloads." }, @@ -5328,6 +5525,12 @@ "changeAtRiskPassword": { "message": "Change at-risk password" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "This login is at-risk and missing a website. Add a website and change the password for stronger security." + }, + "missingWebsite": { + "message": "Missing website" + }, "settingsVaultOptions": { "message": "Vault options" }, @@ -5376,6 +5579,18 @@ "hasItemsVaultNudgeTitle": { "message": "Welcome to your vault!" }, + "phishingPageTitle": { + "message": "Phishing website" + }, + "phishingPageCloseTab": { + "message": "Close tab" + }, + "phishingPageContinue": { + "message": "Continue" + }, + "phishingPageLearnWhy": { + "message": "Why are you seeing this?" + }, "hasItemsVaultNudgeBodyOne": { "message": "Autofill items for the current page" }, @@ -5451,11 +5666,33 @@ "message": "Easily create strong and unique passwords by clicking on the Generate password button to help you keep your logins secure.", "description": "Aria label for the body content of the generator nudge" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "noPermissionsViewPage": { "message": "You do not have permissions to view this page. Try logging in with a different account." }, "wasmNotSupported": { "message": "WebAssembly is not supported on your browser or is not enabled. WebAssembly is required to use the Bitwarden app.", "description": "'WebAssembly' is a technical term and should not be translated." + }, + "showMore": { + "message": "Show more" + }, + "showLess": { + "message": "Show less" + }, + "next": { + "message": "Next" + }, + "moreBreadcrumbs": { + "message": "More breadcrumbs", + "description": "This is used in the context of a breadcrumb navigation, indicating that there are more items in the breadcrumb trail that are not currently displayed." + }, + "confirmKeyConnectorDomain": { + "message": "Confirm Key Connector domain" } } diff --git a/apps/browser/src/_locales/de/messages.json b/apps/browser/src/_locales/de/messages.json index 352705ec281..003d4e6b8b0 100644 --- a/apps/browser/src/_locales/de/messages.json +++ b/apps/browser/src/_locales/de/messages.json @@ -547,12 +547,50 @@ "searchVault": { "message": "Tresor durchsuchen" }, + "resetSearch": { + "message": "Suche zurücksetzen" + }, + "archiveNoun": { + "message": "Archiv", + "description": "Noun" + }, + "archiveVerb": { + "message": "Archivieren", + "description": "Verb" + }, + "unarchive": { + "message": "Nicht mehr archivieren" + }, + "itemsInArchive": { + "message": "Einträge im Archiv" + }, + "noItemsInArchive": { + "message": "Keine Einträge im Archiv" + }, + "noItemsInArchiveDesc": { + "message": "Archivierte Einträge werden hier angezeigt und von allgemeinen Suchergebnissen sowie Vorschlägen zum automatischen Ausfüllen ausgeschlossen." + }, + "itemSentToArchive": { + "message": "Eintrag an das Archiv gesendet" + }, + "itemRemovedFromArchive": { + "message": "Eintrag aus dem Archiv entfernt" + }, + "archiveItem": { + "message": "Eintrag archivieren" + }, + "archiveItemConfirmDesc": { + "message": "Archivierte Einträge werden von allgemeinen Suchergebnissen sowie Vorschlägen zum automatischen Ausfüllen ausgeschlossen. Bist du sicher, dass du diesen Eintrag archivieren möchtest?" + }, "edit": { "message": "Bearbeiten" }, "view": { "message": "Anzeigen" }, + "viewLogin": { + "message": "Zugangsdaten anzeigen" + }, "noItemsInList": { "message": "Keine Einträge zum Anzeigen vorhanden." }, @@ -695,6 +733,15 @@ "invalidMasterPassword": { "message": "Ungültiges Master-Passwort" }, + "invalidMasterPasswordConfirmEmailAndHost": { + "message": "Ungültiges Master-Passwort. Überprüfe, ob deine E-Mail-Adresse korrekt ist und dein Konto auf $HOST$ erstellt wurde.", + "placeholders": { + "host": { + "content": "$1", + "example": "vault.bitwarden.com" + } + } + }, "vaultTimeout": { "message": "Tresor-Timeout" }, @@ -887,7 +934,7 @@ "message": "Folge den Schritten unten, um die Anmeldung abzuschließen." }, "followTheStepsBelowToFinishLoggingInWithSecurityKey": { - "message": "Folge den Schritten unten, um die Anmeldung mit deinem Sicherheitsschlüssel abzuschließen." + "message": "Folge den untenstehenden Schritten, um die Anmeldung mit deinem Sicherheitsschlüssel abzuschließen." }, "restartRegistration": { "message": "Registrierung neu starten" @@ -1174,10 +1221,10 @@ "description": "Detailed error message shown when saving login details fails." }, "changePasswordWarning": { - "message": "After changing your password, you will need to log in with your new password. Active sessions on other devices will be logged out within one hour." + "message": "Nachdem du dein Passwort geändert hast, musst du dich mit deinem neuen Passwort anmelden. Aktive Sitzungen auf anderen Geräten werden innerhalb einer Stunde abgemeldet." }, "accountRecoveryUpdateMasterPasswordSubtitle": { - "message": "Change your master password to complete account recovery." + "message": "Ändere dein Master-Passwort, um die Kontowiederherstellung abzuschließen." }, "enableChangedPasswordNotification": { "message": "Nach dem Aktualisieren bestehender Zugangsdaten fragen" @@ -1501,6 +1548,15 @@ "readSecurityKey": { "message": "Sicherheitsschlüssel auslesen" }, + "readingPasskeyLoading": { + "message": "Passkey wird gelesen..." + }, + "passkeyAuthenticationFailed": { + "message": "Passkey-Authentifizierung fehlgeschlagen" + }, + "useADifferentLogInMethod": { + "message": "Eine andere Anmeldemethode verwenden" + }, "awaitingSecurityKeyInteraction": { "message": "Warte auf Sicherheitsschlüssel-Interaktion..." }, @@ -1519,9 +1575,6 @@ "selectTwoStepLoginMethod": { "message": "Zwei-Faktor-Authentifizierungsmethode auswählen" }, - "recoveryCodeDesc": { - "message": "Zugang zu allen Zwei-Faktor Anbietern verloren? Benutze deinen Wiederherstellungscode, um alle Zwei-Faktor Anbieter in deinem Konto zu deaktivieren." - }, "recoveryCodeTitle": { "message": "Wiederherstellungscode" }, @@ -1680,9 +1733,6 @@ "defaultAutoFillOnPageLoadDesc": { "message": "Du kannst Auto-Ausfüllen beim Laden der Seite für einzelne Zugangsdaten-Einträge in der Bearbeiten-Ansicht des Eintrags deaktivieren." }, - "itemAutoFillOnPageLoad": { - "message": "Auto-Ausfüllen beim Laden der Seite (wenn in Optionen aktiviert)" - }, "autoFillOnPageLoadUseDefault": { "message": "Nutze Standardeinstellung" }, @@ -1754,23 +1804,8 @@ "popup2faCloseMessage": { "message": "Dieses Pop-up Fenster wird geschlossen, wenn du außerhalb des Fensters klickst um in deinen E-Mails nach dem Verifizierungscode zu suchen. Möchtest du, dass dieses Pop-up in einem separaten Fenster geöffnet wird, damit es nicht geschlossen wird?" }, - "popupU2fCloseMessage": { - "message": "Dieser Browser kann U2F-Anfragen in diesem Popup-Fenster nicht verarbeiten. Möchtest du dieses Popup in einem neuen Fenster öffnen, damit du dich mit U2F anmelden kannst?" - }, - "enableFavicon": { - "message": "Website-Symbole anzeigen" - }, - "faviconDesc": { - "message": "Ein wiedererkennbares Bild neben jeden Zugangsdaten anzeigen." - }, - "faviconDescAlt": { - "message": "Ein wiedererkennbares Bild neben jeden Zugangsdaten anzeigen. Gilt für alle angemeldeten Konten." - }, - "enableBadgeCounter": { - "message": "Badge-Zähler anzeigen" - }, - "badgeCounterDesc": { - "message": "Zeigt an, wie viele Zugangsdaten du für die aktuelle Webseite besitzt." + "showIconsChangePasswordUrls": { + "message": "Website-Symbole anzeigen und URLs zum Ändern von Passwörtern ermitteln" }, "cardholderName": { "message": "Name des Karteninhabers" @@ -1829,6 +1864,9 @@ "securityCode": { "message": "Sicherheitscode" }, + "cardNumber": { + "message": "Kartennummer" + }, "ex": { "message": "Bsp." }, @@ -1931,32 +1969,81 @@ "typeNote": { "message": "Notiz" }, - "newItemHeader": { - "message": "Neue $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderLogin": { + "message": "Neue Zugangsdaten", + "description": "Header for new login item type" }, - "editItemHeader": { - "message": "$TYPE$ bearbeiten", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderCard": { + "message": "Neue Karte", + "description": "Header for new card item type" }, - "viewItemHeader": { - "message": "$TYPE$ ansehen", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderIdentity": { + "message": "Neue Identität", + "description": "Header for new identity item type" + }, + "newItemHeaderNote": { + "message": "Neue Notiz", + "description": "Header for new note item type" + }, + "newItemHeaderSshKey": { + "message": "Neuer SSH-Schlüssel", + "description": "Header for new SSH key item type" + }, + "newItemHeaderTextSend": { + "message": "Neues Text-Send", + "description": "Header for new text send" + }, + "newItemHeaderFileSend": { + "message": "Neues Datei-Send", + "description": "Header for new file send" + }, + "editItemHeaderLogin": { + "message": "Zugangsdaten bearbeiten", + "description": "Header for edit login item type" + }, + "editItemHeaderCard": { + "message": "Karte bearbeiten", + "description": "Header for edit card item type" + }, + "editItemHeaderIdentity": { + "message": "Identität bearbeiten", + "description": "Header for edit identity item type" + }, + "editItemHeaderNote": { + "message": "Notiz bearbeiten", + "description": "Header for edit note item type" + }, + "editItemHeaderSshKey": { + "message": "SSH-Schlüssel bearbeiten", + "description": "Header for edit SSH key item type" + }, + "editItemHeaderTextSend": { + "message": "Text-Send bearbeiten", + "description": "Header for edit text send" + }, + "editItemHeaderFileSend": { + "message": "Datei-Send bearbeiten", + "description": "Header for edit file send" + }, + "viewItemHeaderLogin": { + "message": "Zugangsdaten anzeigen", + "description": "Header for view login item type" + }, + "viewItemHeaderCard": { + "message": "Karte anzeigen", + "description": "Header for view card item type" + }, + "viewItemHeaderIdentity": { + "message": "Identität anzeigen", + "description": "Header for view identity item type" + }, + "viewItemHeaderNote": { + "message": "Notiz anzeigen", + "description": "Header for view note item type" + }, + "viewItemHeaderSshKey": { + "message": "SSH-Schlüssel anzeigen", + "description": "Header for view SSH key item type" }, "passwordHistory": { "message": "Passwortverlauf" @@ -2163,7 +2250,7 @@ "message": "Gebe deinen PIN-Code für das Entsperren von Bitwarden ein. Deine PIN-Einstellungen werden zurückgesetzt, wenn du dich vollständig von der Anwendung abmeldest." }, "setPinCode": { - "message": "Du kannst diese PIN verwenden, um Bitwarden zu entsperren. Deine PIN wird zurückgesetzt, wenn du dich vollständig aus der Anwendung abmeldest." + "message": "Du kannst diese PIN verwenden, um Bitwarden zu entsperren. Deine PIN wird zurückgesetzt, wenn du dich einmal vollständig aus der Anwendung abmeldest." }, "pinRequired": { "message": "PIN-Code ist erforderlich." @@ -2581,7 +2668,7 @@ } }, "atRiskChangePrompt": { - "message": "Dein Passwort für diese Website ist gefährdet. $ORGANIZATION$ hat darum gebeten, dass du es änderst.", + "message": "Dein Passwort für diese Website ist gefährdet. $ORGANIZATION$ hat dich aufgefordert, es zu ändern.", "placeholders": { "organization": { "content": "$1", @@ -2591,7 +2678,7 @@ "description": "Notification body when a login triggers an at-risk password change request and the change password domain is known." }, "atRiskNavigatePrompt": { - "message": "$ORGANIZATION$ möchte, dass du dieses Passwort änderst, da es gefährdet ist. Wechsel zu deinen Kontoeinstellungen, um das Passwort zu ändern.", + "message": "$ORGANIZATION$ möchte, dass du dieses Passwort änderst, da es gefährdet ist. Gehe zu deinen Kontoeinstellungen, um das Passwort zu ändern.", "placeholders": { "organization": { "content": "$1", @@ -2926,7 +3013,7 @@ "message": "Du musst deine E-Mail Adresse verifizieren, um diese Funktion nutzen zu können. Du kannst deine E-Mail im Web-Tresor verifizieren." }, "masterPasswordSuccessfullySet": { - "message": "Master-Passwort erfolgreich eingerichtet" + "message": "Master-Passwort erfolgreich festgelegt" }, "updatedMasterPassword": { "message": "Master-Passwort aktualisiert" @@ -3129,6 +3216,24 @@ } } }, + "exportingOrganizationVaultFromPasswordManagerWithDataOwnershipDesc": { + "message": "Nur der mit $ORGANIZATION$ verknüpfte Organisations-Tresor wird exportiert.", + "placeholders": { + "organization": { + "content": "$1", + "example": "My Org Name" + } + } + }, + "exportingOrganizationVaultFromAdminConsoleWithDataOwnershipDesc": { + "message": "Nur der mit $ORGANIZATION$ verknüpfte Organisations-Tresor wird exportiert. Meine Eintrags-Sammlungen werden nicht eingeschlossen.", + "placeholders": { + "organization": { + "content": "$1", + "example": "My Org Name" + } + } + }, "error": { "message": "Fehler" }, @@ -3460,8 +3565,30 @@ "logInRequestSent": { "message": "Anfrage gesendet" }, + "loginRequestApprovedForEmailOnDevice": { + "message": "Anmeldeanfrage für $EMAIL$ auf $DEVICE$ genehmigt", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + }, + "device": { + "content": "$2", + "example": "Web app - Chrome" + } + } + }, + "youDeniedLoginAttemptFromAnotherDevice": { + "message": "Du hast einen Anmeldeversuch von einem anderen Gerät abgelehnt. Wenn du das wirklich warst, versuche dich erneut mit dem Gerät anzumelden." + }, + "device": { + "message": "Gerät" + }, + "loginStatus": { + "message": "Anmeldestatus" + }, "masterPasswordChanged": { - "message": "Master password saved" + "message": "Master-Passwort gespeichert" }, "exposedMasterPassword": { "message": "Kompromittiertes Master-Passwort" @@ -3496,9 +3623,6 @@ "autofillPageLoadPolicyActivated": { "message": "Deine Organisationsrichtlinien haben das automatische Ausfüllen beim Laden der Seite aktiviert." }, - "howToAutofill": { - "message": "So funktioniert automatisches Ausfüllen" - }, "autofillSelectInfoWithCommand": { "message": "Wähle einen Eintrag von dieser Bildschirmseite, verwende das Tastaturkürzel $COMMAND$ oder entdecke andere Optionen in den Einstellungen.", "placeholders": { @@ -3556,6 +3680,94 @@ "rememberThisDeviceToMakeFutureLoginsSeamless": { "message": "Dieses Gerät merken, um zukünftige Anmeldungen reibungslos zu gestalten" }, + "manageDevices": { + "message": "Geräte verwalten" + }, + "currentSession": { + "message": "Aktuelle Sitzung" + }, + "mobile": { + "message": "Mobile App", + "description": "Mobile app" + }, + "extension": { + "message": "Erweiterung", + "description": "Browser extension/addon" + }, + "desktop": { + "message": "Desktop", + "description": "Desktop app" + }, + "webVault": { + "message": "Web-Tresor" + }, + "webApp": { + "message": "Web-App" + }, + "cli": { + "message": "CLI" + }, + "sdk": { + "message": "SDK", + "description": "Software Development Kit" + }, + "requestPending": { + "message": "Anfrage ausstehend" + }, + "firstLogin": { + "message": "Erste Anmeldung" + }, + "trusted": { + "message": "Vertrauenswürdig" + }, + "needsApproval": { + "message": "Benötigt Genehmigung" + }, + "devices": { + "message": "Geräte" + }, + "accessAttemptBy": { + "message": "Zugriffsversuch von $EMAIL$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + } + } + }, + "confirmAccess": { + "message": "Zugriff bestätigen" + }, + "denyAccess": { + "message": "Zugriff ablehnen" + }, + "time": { + "message": "Zeit" + }, + "deviceType": { + "message": "Gerätetyp" + }, + "loginRequest": { + "message": "Anmeldungsanfrage" + }, + "thisRequestIsNoLongerValid": { + "message": "Diese Anfrage ist nicht mehr gültig." + }, + "loginRequestHasAlreadyExpired": { + "message": "Anmeldeanfrage ist bereits abgelaufen." + }, + "justNow": { + "message": "Gerade eben" + }, + "requestedXMinutesAgo": { + "message": "Vor $MINUTES$ Minuten angefordert", + "placeholders": { + "minutes": { + "content": "$1", + "example": "5" + } + } + }, "deviceApprovalRequired": { "message": "Geräte-Genehmigung erforderlich. Wähle unten eine Genehmigungsoption aus:" }, @@ -3578,10 +3790,10 @@ "message": "Admin-Genehmigung anfragen" }, "unableToCompleteLogin": { - "message": "Unable to complete login" + "message": "Anmeldung kann nicht abgeschlossen werden" }, "loginOnTrustedDeviceOrAskAdminToAssignPassword": { - "message": "You need to log in on a trusted device or ask your administrator to assign you a password." + "message": "Du musst dich auf einem vertrauenswürdigen Gerät anmelden oder deinen Administrator bitten, dir ein Passwort zuzuweisen." }, "ssoIdentifierRequired": { "message": "SSO-Kennung der Organisation erforderlich." @@ -3663,7 +3875,7 @@ "message": "Fahre zur Sicherheit deines Kontos nur fort, wenn du ein Mitglied dieser Organisation bist, die Kontowiederherstellung aktiviert hast und der unten angezeigte Fingerabdruck mit dem Fingerabdruck der Organisation übereinstimmt." }, "orgTrustWarning1": { - "message": "Diese Organisation hat eine Unternehmensrichtlinie, die dich für die Kontowiederherstellung registriert. Die Registrierung wird es den Administratoren der Organisation erlauben, dein Passwort zu ändern. Fahre nur fort, wenn du diese Organisation kennst und die unten angezeigte Fingerabdruck-Phrase mit der der Organisation übereinstimmt." + "message": "Diese Organisation hat eine Enterprise-Richtlinie, die dich für die Kontowiederherstellung registriert. Die Registrierung ermöglicht es den Organisations-Administratoren, dein Passwort zu ändern. Fahre nur fort, wenn du diese Organisation erkennst und die unten angezeigte Fingerabdruck-Phrase mit dem Fingerabdruck der Organisation übereinstimmt." }, "trustUser": { "message": "Benutzer vertrauen" @@ -3795,18 +4007,10 @@ "aliasDomain": { "message": "Alias-Domain" }, - "passwordRepromptDisabledAutofillOnPageLoad": { - "message": "Einträge, die eine erneuten Abfrage des Master-Passworts verlangen, können nicht beim Laden einer Seite automatisch ausgefüllt werden. Auto-Ausfüllen beim Laden einer Seite deaktiviert.", - "description": "Toast message for describing that master password re-prompt cannot be autofilled on page load." - }, "autofillOnPageLoadSetToDefault": { "message": "Auto-Ausfüllen beim Laden einer Seite wurde auf die Standardeinstellung gesetzt.", "description": "Toast message for informing the user that autofill on page load has been set to the default setting." }, - "turnOffMasterPasswordPromptToEditField": { - "message": "Deaktiviere die erneute Abfrage des Master-Passworts, um dieses Feld zu bearbeiten", - "description": "Message appearing below the autofill on load message when master password reprompt is set for a vault item." - }, "toggleSideNavigation": { "message": "Seitennavigation umschalten" }, @@ -4015,15 +4219,11 @@ "selectImportCollection": { "message": "Sammlung auswählen" }, - "importTargetHint": { - "message": "Wähle diese Option, wenn der importierte Dateiinhalt in eine(n) $DESTINATION$ verschoben werden soll", - "description": "Located as a hint under the import target. Will be appended by either folder or collection, depending if the user is importing into an individual or an organizational vault.", - "placeholders": { - "destination": { - "content": "$1", - "example": "folder or collection" - } - } + "importTargetHintCollection": { + "message": "Wähle diese Option, wenn der importierte Dateiinhalt in eine Sammlung verschoben werden soll" + }, + "importTargetHintFolder": { + "message": "Wähle diese Option, wenn der importierte Dateiinhalt in einen Ordner verschoben werden soll" }, "importUnassignedItemsError": { "message": "Die Datei enthält nicht zugewiesene Einträge." @@ -4080,9 +4280,6 @@ "passkeyNotCopiedAlert": { "message": "Der Passkey wird nicht in den duplizierten Eintrag kopiert. Möchtest du mit dem Duplizieren dieses Eintrags fortfahren?" }, - "passkeyFeatureIsNotImplementedForAccountsWithoutMasterPassword": { - "message": "Überprüfung durch die initiierende Website erforderlich. Diese Funktion ist noch nicht für Konten ohne Master-Passwort implementiert." - }, "logInWithPasskeyQuestion": { "message": "Mit Passkey anmelden?" }, @@ -4263,23 +4460,23 @@ "description": "Label indicating the most common import formats" }, "uriMatchDefaultStrategyHint": { - "message": "URI match detection is how Bitwarden identifies autofill suggestions.", + "message": "Die URI-Übereinstimmungserkennung ist die Methode, mit der Bitwarden Vorschläge zum automatischen Ausfüllen identifiziert.", "description": "Explains to the user that URI match detection determines how Bitwarden suggests autofill options, and clarifies that this default strategy applies when no specific match detection is set for a login item." }, "regExAdvancedOptionWarning": { - "message": "\"Regular expression\" is an advanced option with increased risk of exposing credentials.", + "message": "\"Regulärer Ausdruck\" ist eine erweiterte Option mit erhöhtem Risiko der Kompromittierung von Zugangsdaten.", "description": "Content for dialog which warns a user when selecting 'regular expression' matching strategy as a cipher match strategy" }, "startsWithAdvancedOptionWarning": { - "message": "\"Starts with\" is an advanced option with increased risk of exposing credentials.", + "message": "\"Beginnt mit\" ist eine erweiterte Option mit erhöhtem Risiko der Kompromittierung von Zugangsdaten.", "description": "Content for dialog which warns a user when selecting 'starts with' matching strategy as a cipher match strategy" }, "uriMatchWarningDialogLink": { - "message": "More about match detection", + "message": "Mehr über die Übereinstimmungs-Erkennung", "description": "Link to match detection docs on warning dialog for advance match strategy" }, "uriAdvancedOption": { - "message": "Advanced options", + "message": "Erweiterte Optionen", "description": "Advanced option placeholder for uri option component" }, "confirmContinueToBrowserSettingsTitle": { @@ -4465,17 +4662,17 @@ } } }, - "copyFieldValue": { - "message": "$FIELD$, $VALUE$ kopieren", + "copyFieldCipherName": { + "message": "$FIELD$, $CIPHERNAME$ kopieren", "description": "Title for a button that copies a field value to the clipboard.", "placeholders": { "field": { "content": "$1", "example": "Username" }, - "value": { + "ciphername": { "content": "$2", - "example": "Foo" + "example": "Login Item" } } }, @@ -4768,9 +4965,6 @@ } } }, - "enableAnimations": { - "message": "Animationen aktivieren" - }, "showAnimations": { "message": "Animationen anzeigen" }, @@ -4983,15 +5177,9 @@ "itemLocation": { "message": "Eintrags-Standort" }, - "fileSend": { - "message": "Datei-Send" - }, "fileSends": { "message": "Datei-Sends" }, - "textSend": { - "message": "Text-Send" - }, "textSends": { "message": "Text-Sends" }, @@ -5001,6 +5189,18 @@ "showNumberOfAutofillSuggestions": { "message": "Anzahl der Auto-Ausfüllen-Vorschläge von Zugangsdaten auf dem Erweiterungssymbol anzeigen" }, + "accountAccessRequested": { + "message": "Kontozugriff angefordert" + }, + "confirmAccessAttempt": { + "message": "Zugriffsversuch für $EMAIL$ bestätigen", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + } + } + }, "showQuickCopyActions": { "message": "Schnellkopier-Aktionen im Tresor anzeigen" }, @@ -5040,9 +5240,6 @@ "vaultCustomTimeoutMinimum": { "message": "Das minimal benutzerdefinierte Timeout beträgt 1 Minute." }, - "additionalContentAvailable": { - "message": "Zusätzlicher Inhalt ist verfügbar" - }, "fileSavedToDevice": { "message": "Datei auf Gerät gespeichert. Greife darauf über die Downloads deines Geräts zu." }, @@ -5328,6 +5525,12 @@ "changeAtRiskPassword": { "message": "Gefährdetes Passwort ändern" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "Diese Zugangsdaten sind gefährdet und es fehlt eine Website. Füge eine Website hinzu und ändere das Passwort für mehr Sicherheit." + }, + "missingWebsite": { + "message": "Fehlende Website" + }, "settingsVaultOptions": { "message": "Tresoroptionen" }, @@ -5376,6 +5579,18 @@ "hasItemsVaultNudgeTitle": { "message": "Willkommen in deinem Tresor!" }, + "phishingPageTitle": { + "message": "Phishing-Website" + }, + "phishingPageCloseTab": { + "message": "Tab schließen" + }, + "phishingPageContinue": { + "message": "Weiter" + }, + "phishingPageLearnWhy": { + "message": "Warum wird dir das angezeigt?" + }, "hasItemsVaultNudgeBodyOne": { "message": "Einträge für die aktuelle Seite automatisch ausfüllen" }, @@ -5383,7 +5598,7 @@ "message": "Favoriten-Einträge für einfachen Zugriff" }, "hasItemsVaultNudgeBodyThree": { - "message": "Deinen Tresor nach etwas anderem durchsuchen" + "message": "Durchsuche deinen Tresor nach etwas anderem" }, "newLoginNudgeTitle": { "message": "Spare Zeit mit Auto-Ausfüllen" @@ -5416,16 +5631,16 @@ "message": "Mit Identitäten kannst du lange Registrierungs- oder Kontaktformulare schnell automatisch ausfüllen." }, "newNoteNudgeTitle": { - "message": "Bewahre deine sensiblen Daten sicher auf" + "message": "Halte deine sensiblen Daten sicher" }, "newNoteNudgeBody": { - "message": "Mit Notizen speicherst du sensible Daten wie Bank- oder Versicherungs-Informationen." + "message": "Mit Notizen kannst du sensible Daten wie Bank- oder Versicherungsinformationen sicher speichern." }, "newSshNudgeTitle": { "message": "Entwickler-freundlicher SSH-Zugriff" }, "newSshNudgeBodyOne": { - "message": "Speicher deine Schlüssel und verbinden dich mit dem SSH-Agenten für eine schnelle und verschlüsselte Authentifizierung.", + "message": "Speichere deine Schlüssel und verbinde dich mit dem SSH-Agenten für eine schnelle, verschlüsselte Authentifizierung.", "description": "Two part message", "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, @@ -5451,11 +5666,33 @@ "message": "Generiere ganz einfach starke und einzigartige Passwörter, indem du auf den \"Passwort generieren\"-Button klickst, um dir zu helfen, deine Zugangsdaten sicher zu halten.", "description": "Aria label for the body content of the generator nudge" }, + "aboutThisSetting": { + "message": "Über diese Einstellung" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden verwendet gespeicherte Zugangsdaten-URIs, um zu erkennen, welches Symbol oder welche Passwort-Ändern-URL verwendet werden soll, um dein Erlebnis zu verbessern. Es werden keine Informationen erfasst oder gespeichert, wenn du diesen Dienst nutzt." + }, "noPermissionsViewPage": { - "message": "Du hast keine Berechtigung, diese Seite anzuzeigen. Versuche dich mit einem anderen Konto anzumelden." + "message": "Du hast keine Berechtigung, diese Seite anzuzeigen. Versuche, dich mit einem anderen Konto anzumelden." }, "wasmNotSupported": { "message": "WebAssembly wird von deinem Browser nicht unterstützt oder ist nicht aktiviert. WebAssembly wird benötigt, um die Bitwarden-App nutzen zu können.", "description": "'WebAssembly' is a technical term and should not be translated." + }, + "showMore": { + "message": "Mehr anzeigen" + }, + "showLess": { + "message": "Weniger anzeigen" + }, + "next": { + "message": "Weiter" + }, + "moreBreadcrumbs": { + "message": "Dateipfad erweitern", + "description": "This is used in the context of a breadcrumb navigation, indicating that there are more items in the breadcrumb trail that are not currently displayed." + }, + "confirmKeyConnectorDomain": { + "message": "Key Connector-Domain bestätigen" } } diff --git a/apps/browser/src/_locales/el/messages.json b/apps/browser/src/_locales/el/messages.json index 960de6670d5..9912d79920d 100644 --- a/apps/browser/src/_locales/el/messages.json +++ b/apps/browser/src/_locales/el/messages.json @@ -84,7 +84,7 @@ "message": "Υπόδειξη κύριου κωδικού πρόσβασης (προαιρετικό)" }, "passwordStrengthScore": { - "message": "Password strength score $SCORE$", + "message": "Βαθμολογία ισχύς κωδικού πρόσβασης $SCORE$", "placeholders": { "score": { "content": "$1", @@ -468,13 +468,13 @@ "message": "Ο κωδικός δημιουργήθηκε" }, "passphraseGenerated": { - "message": "Passphrase generated" + "message": "Το συνθηματικό δημιουργήθηκε" }, "usernameGenerated": { - "message": "Username generated" + "message": "Το όνομα χρήστη δημιουργήθηκε" }, "emailGenerated": { - "message": "Email generated" + "message": "Το email δημιουργήθηκε" }, "regeneratePassword": { "message": "Επαναδημιουργία κωδικού πρόσβασης" @@ -547,12 +547,50 @@ "searchVault": { "message": "Αναζήτηση στο vault" }, + "resetSearch": { + "message": "Επαναφορά αναζήτησης" + }, + "archiveNoun": { + "message": "Archive", + "description": "Noun" + }, + "archiveVerb": { + "message": "Archive", + "description": "Verb" + }, + "unarchive": { + "message": "Unarchive" + }, + "itemsInArchive": { + "message": "Items in archive" + }, + "noItemsInArchive": { + "message": "No items in archive" + }, + "noItemsInArchiveDesc": { + "message": "Archived items will appear here and will be excluded from general search results and autofill suggestions." + }, + "itemSentToArchive": { + "message": "Item sent to archive" + }, + "itemRemovedFromArchive": { + "message": "Item removed from archive" + }, + "archiveItem": { + "message": "Archive item" + }, + "archiveItemConfirmDesc": { + "message": "Archived items are excluded from general search results and autofill suggestions. Are you sure you want to archive this item?" + }, "edit": { "message": "Επεξεργασία" }, "view": { "message": "Προβολή" }, + "viewLogin": { + "message": "View login" + }, "noItemsInList": { "message": "Δεν υπάρχουν στοιχεία στη λίστα." }, @@ -656,13 +694,13 @@ "message": "Το πρόγραμμα περιήγησης ιστού δεν υποστηρίζει εύκολη αντιγραφή πρόχειρου. Αντιγράψτε το με το χέρι αντ'αυτού." }, "verifyYourIdentity": { - "message": "Verify your identity" + "message": "Επαλήθευση ταυτότητας" }, "weDontRecognizeThisDevice": { - "message": "We don't recognize this device. Enter the code sent to your email to verify your identity." + "message": "Δεν αναγνωρίζουμε αυτή τη συσκευή. Εισάγετε τον κωδικό που στάλθηκε στο email σας για να επαληθεύσετε την ταυτότητά σας." }, "continueLoggingIn": { - "message": "Continue logging in" + "message": "Συνέχεια σύνδεσης" }, "yourVaultIsLocked": { "message": "Το vault σας είναι κλειδωμένο. Επαληθεύστε τον κύριο κωδικό πρόσβασης για να συνεχίσετε." @@ -695,6 +733,15 @@ "invalidMasterPassword": { "message": "Μη έγκυρος κύριος κωδικός πρόσβασης" }, + "invalidMasterPasswordConfirmEmailAndHost": { + "message": "Invalid master password. Confirm your email is correct and your account was created on $HOST$.", + "placeholders": { + "host": { + "content": "$1", + "example": "vault.bitwarden.com" + } + } + }, "vaultTimeout": { "message": "Χρόνος Λήξης Vault" }, @@ -872,22 +919,22 @@ "message": "Σύνδεση στο Bitwarden" }, "enterTheCodeSentToYourEmail": { - "message": "Enter the code sent to your email" + "message": "Εισάγετε τον κωδικό που στάλθηκε στο email σας" }, "enterTheCodeFromYourAuthenticatorApp": { - "message": "Enter the code from your authenticator app" + "message": "Εισαγάγετε τον κωδικό μιας χρήσης από την εφαρμογή αυθεντικοποίησης" }, "pressYourYubiKeyToAuthenticate": { - "message": "Press your YubiKey to authenticate" + "message": "Πιέστε το YubiKey σας για ταυτοποίηση" }, "duoTwoFactorRequiredPageSubtitle": { - "message": "Duo two-step login is required for your account. Follow the steps below to finish logging in." + "message": "Απαιτείται σύνδεση Duo δύο βημάτων για το λογαριασμό σας. Ακολουθήστε τα παρακάτω βήματα για να ολοκληρώσετε τη σύνδεση." }, "followTheStepsBelowToFinishLoggingIn": { - "message": "Follow the steps below to finish logging in." + "message": "Ακολουθήστε τα παρακάτω βήματα για να ολοκληρώσετε τη σύνδεση." }, "followTheStepsBelowToFinishLoggingInWithSecurityKey": { - "message": "Follow the steps below to finish logging in with your security key." + "message": "Ακολουθήστε τα παρακάτω βήματα για να ολοκληρώσετε τη σύνδεση με το κλειδί ασφαλείας σας." }, "restartRegistration": { "message": "Επανεκκίνηση εγγραφής" @@ -1025,7 +1072,7 @@ "message": "Ζητήστε να προσθέσετε ένα αντικείμενο αν δε βρεθεί στο θησαυ/κιό σας. Ισχύει για όλους τους συνδεδεμένους λογαριασμούς." }, "showCardsInVaultViewV2": { - "message": "Always show cards as Autofill suggestions on Vault view" + "message": "Εμφάνιση καρτών ως προτάσεις αυτόματης συμπλήρωσης στην προβολή Θησαυ/κίου" }, "showCardsCurrentTab": { "message": "Εμφάνιση καρτών στη σελίδα Καρτέλας" @@ -1034,7 +1081,7 @@ "message": "Εμφάνισε τα αντικείμενα κάρτες στη σελίδα Καρτέλα για εύκολη αυτόματη συμπλήρωση." }, "showIdentitiesInVaultViewV2": { - "message": "Always show identities as Autofill suggestions on Vault view" + "message": "Εμφάνιση ταυτοτήτων ως προτάσεις αυτόματης συμπλήρωσης στην προβολή Θησαυ/κίου" }, "showIdentitiesCurrentTab": { "message": "Εμφάνιση ταυτοτήτων στη σελίδα καρτέλας" @@ -1046,7 +1093,7 @@ "message": "Κάντε κλικ στα αντικείμενα για αυτόματη συμπλήρωση στην προβολή Θησαυ/κίου" }, "clickToAutofill": { - "message": "Click items in autofill suggestion to fill" + "message": "Κάντε κλικ στα αντικείμενα της πρότασης αυτόματης συμπλήρωσης για εισαγωγή" }, "clearClipboard": { "message": "Εκκαθάριση Πρόχειρου", @@ -1063,7 +1110,7 @@ "message": "Ναι, Αποθήκευση Τώρα" }, "notificationViewAria": { - "message": "View $ITEMNAME$, opens in new window", + "message": "Προβολή $ITEMNAME$, ανοίγει σε νέο παράθυρο", "placeholders": { "itemName": { "content": "$1" @@ -1072,18 +1119,18 @@ "description": "Aria label for the view button in notification bar confirmation message" }, "notificationNewItemAria": { - "message": "New Item, opens in new window", + "message": "Νέο στοιχείο, ανοίγει σε νέο παράθυρο", "description": "Aria label for the new item button in notification bar confirmation message when error is prompted" }, "notificationEditTooltip": { - "message": "Edit before saving", + "message": "Επεξεργασία πριν την αποθήκευση", "description": "Tooltip and Aria label for edit button on cipher item" }, "newNotification": { - "message": "New notification" + "message": "Νέα ειδοποίηση" }, "labelWithNotification": { - "message": "$LABEL$: New notification", + "message": "$LABEL$: Νέα ειδοποίηση", "description": "Label for the notification with a new login suggestion.", "placeholders": { "label": { @@ -1093,11 +1140,11 @@ } }, "notificationLoginSaveConfirmation": { - "message": "saved to Bitwarden.", + "message": "αποθηκεύτηκε στο Bitwarden.", "description": "Shown to user after item is saved." }, "notificationLoginUpdatedConfirmation": { - "message": "updated in Bitwarden.", + "message": "ενημερώθηκε στο Bitwarden.", "description": "Shown to user after item is updated." }, "selectItemAriaLabel": { @@ -1113,31 +1160,31 @@ } }, "saveAsNewLoginAction": { - "message": "Save as new login", + "message": "Αποθήκευση ως νέα σύνδεση", "description": "Button text for saving login details as a new entry." }, "updateLoginAction": { - "message": "Update login", + "message": "Ενημέρωση σύνδεσης", "description": "Button text for updating an existing login entry." }, "unlockToSave": { - "message": "Unlock to save this login", + "message": "Ξεκλειδώστε για να αποθηκεύσετε αυτή τη σύνδεση", "description": "User prompt to take action in order to save the login they just entered." }, "saveLogin": { - "message": "Save login", + "message": "Αποθήκευση σύνδεσης", "description": "Prompt asking the user if they want to save their login details." }, "updateLogin": { - "message": "Update existing login", + "message": "Ενημέρωση υπάρχουσας σύνδεσης", "description": "Prompt asking the user if they want to update an existing login entry." }, "loginSaveSuccess": { - "message": "Login saved", + "message": "Σύνδεση αποθηκεύτηκε", "description": "Message displayed when login details are successfully saved." }, "loginUpdateSuccess": { - "message": "Login updated", + "message": "Σύνδεση ενημερώθηκε", "description": "Message displayed when login details are successfully updated." }, "loginUpdateTaskSuccess": { @@ -1162,7 +1209,7 @@ "description": "Shown to user after login is updated." }, "nextSecurityTaskAction": { - "message": "Change next password", + "message": "Αλλαγή επόμενου κωδικού πρόσβασης", "description": "Message prompting user to undertake completion of another security task." }, "saveFailure": { @@ -1501,6 +1548,15 @@ "readSecurityKey": { "message": "Read security key" }, + "readingPasskeyLoading": { + "message": "Reading passkey..." + }, + "passkeyAuthenticationFailed": { + "message": "Passkey authentication failed" + }, + "useADifferentLogInMethod": { + "message": "Use a different log in method" + }, "awaitingSecurityKeyInteraction": { "message": "Awaiting security key interaction..." }, @@ -1519,9 +1575,6 @@ "selectTwoStepLoginMethod": { "message": "Select two-step login method" }, - "recoveryCodeDesc": { - "message": "Έχετε χάσει την πρόσβαση σε όλους τους παρόχους δύο παραγόντων; Χρησιμοποιήστε τον κωδικό ανάκτησης για να απενεργοποιήσετε όλους τους παρόχους δύο παραγόντων από το λογαριασμό σας." - }, "recoveryCodeTitle": { "message": "Κωδικός ανάκτησης" }, @@ -1680,9 +1733,6 @@ "defaultAutoFillOnPageLoadDesc": { "message": "Μπορείτε να απενεργοποιήσετε την αυτόματη συμπλήρωση κατά τη φόρτωση της σελίδας για μεμονωμένα αντικείμενα σύνδεσης από την προβολή Επεξεργασία αντικειμένου." }, - "itemAutoFillOnPageLoad": { - "message": "Αυτόματη συμπλήρωση κατά τη φόρτωση της σελίδας (αν έχει ενεργοποιηθεί στις Επιλογές)" - }, "autoFillOnPageLoadUseDefault": { "message": "Χρήση προεπιλεγμένης ρύθμισης" }, @@ -1754,23 +1804,8 @@ "popup2faCloseMessage": { "message": "Εάν κάνετε κλικ έξω από το αναδυόμενο παράθυρο για να ελέγξετε το email για κωδικό επαλήθευσης, το αναδυόμενο παράθυρο θα κλείσει. Θέλετε να ανοίξετε αυτό το αναδυόμενο σε νέο παράθυρο ώστε να μην κλείνει;" }, - "popupU2fCloseMessage": { - "message": "Αυτό το πρόγραμμα περιήγησης δεν μπορεί να επεξεργαστεί αιτήματα του U2F σε αυτό το αναδυόμενο παράθυρο. Θέλετε να ανοίξετε το αναδυόμενο σε νέο παράθυρο, ώστε να μπορείτε να συνδεθείτε χρησιμοποιώντας U2F;" - }, - "enableFavicon": { - "message": "Εμφάνιση εικονιδίων ιστοσελίδας" - }, - "faviconDesc": { - "message": "Εμφάνιση μιας αναγνωρίσιμης εικόνας δίπλα σε κάθε σύνδεση." - }, - "faviconDescAlt": { - "message": "Εμφάνιση μιας αναγνωρίσιμης εικόνας δίπλα σε κάθε σύνδεση. Ισχύει για όλους τους συνδεδεμένους λογαριασμούς." - }, - "enableBadgeCounter": { - "message": "Εμφάνιση μετρητή εμβλημάτων" - }, - "badgeCounterDesc": { - "message": "Υποδείξτε πόσες συνδέσεις έχετε για την τρέχουσα ιστοσελίδα." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "cardholderName": { "message": "Όνομα κατόχου κάρτας" @@ -1829,6 +1864,9 @@ "securityCode": { "message": "Κωδικός ασφαλείας" }, + "cardNumber": { + "message": "card number" + }, "ex": { "message": "πχ." }, @@ -1931,32 +1969,81 @@ "typeNote": { "message": "Note" }, - "newItemHeader": { - "message": "Νέα $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderLogin": { + "message": "New Login", + "description": "Header for new login item type" }, - "editItemHeader": { - "message": "Επεξεργασία $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderCard": { + "message": "New Card", + "description": "Header for new card item type" }, - "viewItemHeader": { - "message": "Εμφάνιση $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderIdentity": { + "message": "New Identity", + "description": "Header for new identity item type" + }, + "newItemHeaderNote": { + "message": "New Note", + "description": "Header for new note item type" + }, + "newItemHeaderSshKey": { + "message": "New SSH key", + "description": "Header for new SSH key item type" + }, + "newItemHeaderTextSend": { + "message": "New Text Send", + "description": "Header for new text send" + }, + "newItemHeaderFileSend": { + "message": "New File Send", + "description": "Header for new file send" + }, + "editItemHeaderLogin": { + "message": "Edit Login", + "description": "Header for edit login item type" + }, + "editItemHeaderCard": { + "message": "Edit Card", + "description": "Header for edit card item type" + }, + "editItemHeaderIdentity": { + "message": "Edit Identity", + "description": "Header for edit identity item type" + }, + "editItemHeaderNote": { + "message": "Edit Note", + "description": "Header for edit note item type" + }, + "editItemHeaderSshKey": { + "message": "Edit SSH key", + "description": "Header for edit SSH key item type" + }, + "editItemHeaderTextSend": { + "message": "Edit Text Send", + "description": "Header for edit text send" + }, + "editItemHeaderFileSend": { + "message": "Edit File Send", + "description": "Header for edit file send" + }, + "viewItemHeaderLogin": { + "message": "View Login", + "description": "Header for view login item type" + }, + "viewItemHeaderCard": { + "message": "View Card", + "description": "Header for view card item type" + }, + "viewItemHeaderIdentity": { + "message": "View Identity", + "description": "Header for view identity item type" + }, + "viewItemHeaderNote": { + "message": "View Note", + "description": "Header for view note item type" + }, + "viewItemHeaderSshKey": { + "message": "View SSH key", + "description": "Header for view SSH key item type" }, "passwordHistory": { "message": "Ιστορικό κωδικού πρόσβασης" @@ -3129,6 +3216,24 @@ } } }, + "exportingOrganizationVaultFromPasswordManagerWithDataOwnershipDesc": { + "message": "Only the organization vault associated with $ORGANIZATION$ will be exported.", + "placeholders": { + "organization": { + "content": "$1", + "example": "My Org Name" + } + } + }, + "exportingOrganizationVaultFromAdminConsoleWithDataOwnershipDesc": { + "message": "Only the organization vault associated with $ORGANIZATION$ will be exported. My items collections will not be included.", + "placeholders": { + "organization": { + "content": "$1", + "example": "My Org Name" + } + } + }, "error": { "message": "Σφάλμα" }, @@ -3460,6 +3565,28 @@ "logInRequestSent": { "message": "Request sent" }, + "loginRequestApprovedForEmailOnDevice": { + "message": "Login request approved for $EMAIL$ on $DEVICE$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + }, + "device": { + "content": "$2", + "example": "Web app - Chrome" + } + } + }, + "youDeniedLoginAttemptFromAnotherDevice": { + "message": "You denied a login attempt from another device. If this was you, try to log in with the device again." + }, + "device": { + "message": "Device" + }, + "loginStatus": { + "message": "Login status" + }, "masterPasswordChanged": { "message": "Master password saved" }, @@ -3496,9 +3623,6 @@ "autofillPageLoadPolicyActivated": { "message": "Οι πολιτικές του οργανισμού σας έχουν ενεργοποιήσει την αυτόματη συμπλήρωση με φόρτωση σελίδας." }, - "howToAutofill": { - "message": "Πώς να συμπληρώσετε αυτόματα" - }, "autofillSelectInfoWithCommand": { "message": "Επιλέξτε ένα αντικείμενο από αυτήν την οθόνη, χρησιμοποιήστε τη συντόμευση $COMMAND$, ή εξερευνήστε άλλες επιλογές στις ρυθμίσεις.", "placeholders": { @@ -3556,6 +3680,94 @@ "rememberThisDeviceToMakeFutureLoginsSeamless": { "message": "Απομνημόνευση αυτής της συσκευής για την αυτόματες συνδέσεις στο μέλλον" }, + "manageDevices": { + "message": "Manage devices" + }, + "currentSession": { + "message": "Current session" + }, + "mobile": { + "message": "Mobile", + "description": "Mobile app" + }, + "extension": { + "message": "Extension", + "description": "Browser extension/addon" + }, + "desktop": { + "message": "Desktop", + "description": "Desktop app" + }, + "webVault": { + "message": "Web vault" + }, + "webApp": { + "message": "Web app" + }, + "cli": { + "message": "CLI" + }, + "sdk": { + "message": "SDK", + "description": "Software Development Kit" + }, + "requestPending": { + "message": "Request pending" + }, + "firstLogin": { + "message": "First login" + }, + "trusted": { + "message": "Trusted" + }, + "needsApproval": { + "message": "Needs approval" + }, + "devices": { + "message": "Devices" + }, + "accessAttemptBy": { + "message": "Access attempt by $EMAIL$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + } + } + }, + "confirmAccess": { + "message": "Confirm access" + }, + "denyAccess": { + "message": "Deny access" + }, + "time": { + "message": "Time" + }, + "deviceType": { + "message": "Device Type" + }, + "loginRequest": { + "message": "Login request" + }, + "thisRequestIsNoLongerValid": { + "message": "This request is no longer valid." + }, + "loginRequestHasAlreadyExpired": { + "message": "Login request has already expired." + }, + "justNow": { + "message": "Just now" + }, + "requestedXMinutesAgo": { + "message": "Requested $MINUTES$ minutes ago", + "placeholders": { + "minutes": { + "content": "$1", + "example": "5" + } + } + }, "deviceApprovalRequired": { "message": "Απαιτείται έγκριση συσκευής. Επιλέξτε μια επιλογή έγκρισης παρακάτω:" }, @@ -3795,18 +4007,10 @@ "aliasDomain": { "message": "Ψευδώνυμο τομέα" }, - "passwordRepromptDisabledAutofillOnPageLoad": { - "message": "Τα αντικείμενα με υπόδειξη κύριου κωδικού πρόσβασης δεν μπορούν να συμπληρωθούν αυτόματα κατά τη φόρτωση της σελίδας. Η αυτόματη συμπλήρωση έχει απενεργοποιηθεί κατά τη φόρτωση της σελίδας.", - "description": "Toast message for describing that master password re-prompt cannot be autofilled on page load." - }, "autofillOnPageLoadSetToDefault": { "message": "Η αυτόματη συμπλήρωση κατά τη φόρτωση της σελίδας ορίστηκε να χρησιμοποιεί τις προεπιλεγμένες ρυθμίσεις.", "description": "Toast message for informing the user that autofill on page load has been set to the default setting." }, - "turnOffMasterPasswordPromptToEditField": { - "message": "Απενεργοποιήστε την υπόδειξη κύριου κωδικού πρόσβασης για να επεξεργαστείτε αυτό το πεδίο", - "description": "Message appearing below the autofill on load message when master password reprompt is set for a vault item." - }, "toggleSideNavigation": { "message": "Εναλλαγή πλευρικής πλοήγησης" }, @@ -4015,15 +4219,11 @@ "selectImportCollection": { "message": "Επιλέξτε μια συλλογή" }, - "importTargetHint": { - "message": "Επιλέξτε αυτή την επιλογή εάν θέλετε τα περιεχόμενα του εισαγόμενου αρχείου να μετακινηθούν στο $DESTINATION$", - "description": "Located as a hint under the import target. Will be appended by either folder or collection, depending if the user is importing into an individual or an organizational vault.", - "placeholders": { - "destination": { - "content": "$1", - "example": "folder or collection" - } - } + "importTargetHintCollection": { + "message": "Select this option if you want the imported file contents moved to a collection" + }, + "importTargetHintFolder": { + "message": "Select this option if you want the imported file contents moved to a folder" }, "importUnassignedItemsError": { "message": "Το αρχείο περιέχει μη συσχετισμένα στοιχεία." @@ -4080,9 +4280,6 @@ "passkeyNotCopiedAlert": { "message": "Το κλειδί πρόσβασης δε θα αντιγραφεί στο κλωνοποιημένο αντικείμενο. Θέλετε να συνεχίσετε την κλωνοποίηση αυτού του αντικειμένου;" }, - "passkeyFeatureIsNotImplementedForAccountsWithoutMasterPassword": { - "message": "Απαιτείται επαλήθευση από τον ιστότοπο εκκίνησης. Αυτή η λειτουργία δεν έχει ακόμα υλοποιηθεί για λογαριασμούς χωρίς τον κύριο κωδικό πρόσβασης." - }, "logInWithPasskeyQuestion": { "message": "Σύνδεση με κλειδί πρόσβασης;" }, @@ -4465,17 +4662,17 @@ } } }, - "copyFieldValue": { - "message": "Copy $FIELD$, $VALUE$", + "copyFieldCipherName": { + "message": "Copy $FIELD$, $CIPHERNAME$", "description": "Title for a button that copies a field value to the clipboard.", "placeholders": { "field": { "content": "$1", "example": "Username" }, - "value": { + "ciphername": { "content": "$2", - "example": "Foo" + "example": "Login Item" } } }, @@ -4768,9 +4965,6 @@ } } }, - "enableAnimations": { - "message": "Ενεργοποίηση κινούμενων εικόνων" - }, "showAnimations": { "message": "Εμφάνιση εφέ κίνησης" }, @@ -4983,15 +5177,9 @@ "itemLocation": { "message": "Τοποθεσία Αντικειμένου" }, - "fileSend": { - "message": "Δημιουργία Αποστολής" - }, "fileSends": { "message": "Send αρχείων" }, - "textSend": { - "message": "Κείμενο Αποστολής" - }, "textSends": { "message": "Send κειμένων" }, @@ -5001,6 +5189,18 @@ "showNumberOfAutofillSuggestions": { "message": "Εμφάνιση αριθμού προτάσεων αυτόματης συμπλήρωσης σύνδεσης στο εικονίδιο επέκτασης" }, + "accountAccessRequested": { + "message": "Account access requested" + }, + "confirmAccessAttempt": { + "message": "Confirm access attempt for $EMAIL$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + } + } + }, "showQuickCopyActions": { "message": "Εμφάνιση ενεργειών γρήγορης αντιγραφής στο Θησαυ/κιο" }, @@ -5040,9 +5240,6 @@ "vaultCustomTimeoutMinimum": { "message": "Το ελάχιστο προσαρμοσμένο χρονικό όριο λήξης είναι 1 λεπτό." }, - "additionalContentAvailable": { - "message": "Διατίθεται πρόσθετο περιεχόμενο" - }, "fileSavedToDevice": { "message": "Το αρχείο αποθηκεύτηκε στη συσκευή. Διαχειριστείτε το από τις λήψεις της συσκευής σας." }, @@ -5328,6 +5525,12 @@ "changeAtRiskPassword": { "message": "Change at-risk password" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "This login is at-risk and missing a website. Add a website and change the password for stronger security." + }, + "missingWebsite": { + "message": "Missing website" + }, "settingsVaultOptions": { "message": "Vault options" }, @@ -5376,6 +5579,18 @@ "hasItemsVaultNudgeTitle": { "message": "Welcome to your vault!" }, + "phishingPageTitle": { + "message": "Phishing website" + }, + "phishingPageCloseTab": { + "message": "Close tab" + }, + "phishingPageContinue": { + "message": "Continue" + }, + "phishingPageLearnWhy": { + "message": "Why are you seeing this?" + }, "hasItemsVaultNudgeBodyOne": { "message": "Autofill items for the current page" }, @@ -5451,11 +5666,33 @@ "message": "Easily create strong and unique passwords by clicking on the Generate password button to help you keep your logins secure.", "description": "Aria label for the body content of the generator nudge" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "noPermissionsViewPage": { "message": "You do not have permissions to view this page. Try logging in with a different account." }, "wasmNotSupported": { "message": "WebAssembly is not supported on your browser or is not enabled. WebAssembly is required to use the Bitwarden app.", "description": "'WebAssembly' is a technical term and should not be translated." + }, + "showMore": { + "message": "Show more" + }, + "showLess": { + "message": "Show less" + }, + "next": { + "message": "Next" + }, + "moreBreadcrumbs": { + "message": "More breadcrumbs", + "description": "This is used in the context of a breadcrumb navigation, indicating that there are more items in the breadcrumb trail that are not currently displayed." + }, + "confirmKeyConnectorDomain": { + "message": "Confirm Key Connector domain" } } diff --git a/apps/browser/src/_locales/en/messages.json b/apps/browser/src/_locales/en/messages.json index ee8cd412625..9a430654a0a 100644 --- a/apps/browser/src/_locales/en/messages.json +++ b/apps/browser/src/_locales/en/messages.json @@ -547,12 +547,50 @@ "searchVault": { "message": "Search vault" }, + "resetSearch": { + "message": "Reset search" + }, + "archiveNoun": { + "message": "Archive", + "description": "Noun" + }, + "archiveVerb": { + "message": "Archive", + "description": "Verb" + }, + "unArchive": { + "message": "Unarchive" + }, + "itemsInArchive": { + "message": "Items in archive" + }, + "noItemsInArchive": { + "message": "No items in archive" + }, + "noItemsInArchiveDesc": { + "message": "Archived items will appear here and will be excluded from general search results and autofill suggestions." + }, + "itemWasSentToArchive": { + "message": "Item was sent to archive" + }, + "itemUnarchived": { + "message": "Item was unarchived" + }, + "archiveItem": { + "message": "Archive item" + }, + "archiveItemConfirmDesc": { + "message": "Archived items are excluded from general search results and autofill suggestions. Are you sure you want to archive this item?" + }, "edit": { "message": "Edit" }, "view": { "message": "View" }, + "viewLogin": { + "message": "View login" + }, "noItemsInList": { "message": "There are no items to list." }, @@ -695,6 +733,15 @@ "invalidMasterPassword": { "message": "Invalid master password" }, + "invalidMasterPasswordConfirmEmailAndHost": { + "message": "Invalid master password. Confirm your email is correct and your account was created on $HOST$.", + "placeholders": { + "host": { + "content": "$1", + "example": "vault.bitwarden.com" + } + } + }, "vaultTimeout": { "message": "Vault timeout" }, @@ -1501,6 +1548,15 @@ "readSecurityKey": { "message": "Read security key" }, + "readingPasskeyLoading": { + "message": "Reading passkey..." + }, + "passkeyAuthenticationFailed": { + "message": "Passkey authentication failed" + }, + "useADifferentLogInMethod": { + "message": "Use a different log in method" + }, "awaitingSecurityKeyInteraction": { "message": "Awaiting security key interaction..." }, @@ -1519,9 +1575,6 @@ "selectTwoStepLoginMethod": { "message": "Select two-step login method" }, - "recoveryCodeDesc": { - "message": "Lost access to all of your two-factor providers? Use your recovery code to turn off all two-factor providers from your account." - }, "recoveryCodeTitle": { "message": "Recovery code" }, @@ -1680,9 +1733,6 @@ "defaultAutoFillOnPageLoadDesc": { "message": "You can turn off autofill on page load for individual login items from the item's Edit view." }, - "itemAutoFillOnPageLoad": { - "message": "Autofill on page load (if set up in Options)" - }, "autoFillOnPageLoadUseDefault": { "message": "Use default setting" }, @@ -1754,23 +1804,8 @@ "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?" }, - "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?" - }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." - }, - "faviconDescAlt": { - "message": "Show a recognizable image next to each login. Applies to all logged in accounts." - }, - "enableBadgeCounter": { - "message": "Show badge counter" - }, - "badgeCounterDesc": { - "message": "Indicate how many logins you have for the current web page." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "cardholderName": { "message": "Cardholder name" @@ -1829,6 +1864,9 @@ "securityCode": { "message": "Security code" }, + "cardNumber": { + "message": "card number" + }, "ex": { "message": "ex." }, @@ -1931,32 +1969,81 @@ "typeNote": { "message": "Note" }, - "newItemHeader": { - "message": "New $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderLogin": { + "message": "New Login", + "description": "Header for new login item type" }, - "editItemHeader": { - "message": "Edit $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderCard": { + "message": "New Card", + "description": "Header for new card item type" }, - "viewItemHeader": { - "message": "View $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderIdentity": { + "message": "New Identity", + "description": "Header for new identity item type" + }, + "newItemHeaderNote": { + "message": "New Note", + "description": "Header for new note item type" + }, + "newItemHeaderSshKey": { + "message": "New SSH key", + "description": "Header for new SSH key item type" + }, + "newItemHeaderTextSend": { + "message": "New Text Send", + "description": "Header for new text send" + }, + "newItemHeaderFileSend": { + "message": "New File Send", + "description": "Header for new file send" + }, + "editItemHeaderLogin": { + "message": "Edit Login", + "description": "Header for edit login item type" + }, + "editItemHeaderCard": { + "message": "Edit Card", + "description": "Header for edit card item type" + }, + "editItemHeaderIdentity": { + "message": "Edit Identity", + "description": "Header for edit identity item type" + }, + "editItemHeaderNote": { + "message": "Edit Note", + "description": "Header for edit note item type" + }, + "editItemHeaderSshKey": { + "message": "Edit SSH key", + "description": "Header for edit SSH key item type" + }, + "editItemHeaderTextSend": { + "message": "Edit Text Send", + "description": "Header for edit text send" + }, + "editItemHeaderFileSend": { + "message": "Edit File Send", + "description": "Header for edit file send" + }, + "viewItemHeaderLogin": { + "message": "View Login", + "description": "Header for view login item type" + }, + "viewItemHeaderCard": { + "message": "View Card", + "description": "Header for view card item type" + }, + "viewItemHeaderIdentity": { + "message": "View Identity", + "description": "Header for view identity item type" + }, + "viewItemHeaderNote": { + "message": "View Note", + "description": "Header for view note item type" + }, + "viewItemHeaderSshKey": { + "message": "View SSH key", + "description": "Header for view SSH key item type" }, "passwordHistory": { "message": "Password history" @@ -3129,6 +3216,24 @@ } } }, + "exportingOrganizationVaultFromPasswordManagerWithDataOwnershipDesc": { + "message": "Only the organization vault associated with $ORGANIZATION$ will be exported.", + "placeholders": { + "organization": { + "content": "$1", + "example": "My Org Name" + } + } + }, + "exportingOrganizationVaultFromAdminConsoleWithDataOwnershipDesc": { + "message": "Only the organization vault associated with $ORGANIZATION$ will be exported. My items collections will not be included.", + "placeholders": { + "organization": { + "content": "$1", + "example": "My Org Name" + } + } + }, "error": { "message": "Error" }, @@ -3460,6 +3565,28 @@ "logInRequestSent": { "message": "Request sent" }, + "loginRequestApprovedForEmailOnDevice": { + "message": "Login request approved for $EMAIL$ on $DEVICE$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + }, + "device": { + "content": "$2", + "example": "Web app - Chrome" + } + } + }, + "youDeniedLoginAttemptFromAnotherDevice": { + "message": "You denied a login attempt from another device. If this was you, try to log in with the device again." + }, + "device": { + "message": "Device" + }, + "loginStatus": { + "message": "Login status" + }, "masterPasswordChanged": { "message": "Master password saved" }, @@ -3496,9 +3623,6 @@ "autofillPageLoadPolicyActivated": { "message": "Your organization policies have turned on autofill on page load." }, - "howToAutofill": { - "message": "How to autofill" - }, "autofillSelectInfoWithCommand": { "message": "Select an item from this screen, use the shortcut $COMMAND$, or explore other options in settings.", "placeholders": { @@ -3556,6 +3680,94 @@ "rememberThisDeviceToMakeFutureLoginsSeamless": { "message": "Remember this device to make future logins seamless" }, + "manageDevices": { + "message": "Manage devices" + }, + "currentSession": { + "message": "Current session" + }, + "mobile": { + "message": "Mobile", + "description": "Mobile app" + }, + "extension": { + "message": "Extension", + "description": "Browser extension/addon" + }, + "desktop": { + "message": "Desktop", + "description": "Desktop app" + }, + "webVault": { + "message": "Web vault" + }, + "webApp": { + "message": "Web app" + }, + "cli": { + "message": "CLI" + }, + "sdk": { + "message": "SDK", + "description": "Software Development Kit" + }, + "requestPending": { + "message": "Request pending" + }, + "firstLogin": { + "message": "First login" + }, + "trusted": { + "message": "Trusted" + }, + "needsApproval": { + "message": "Needs approval" + }, + "devices": { + "message": "Devices" + }, + "accessAttemptBy": { + "message": "Access attempt by $EMAIL$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + } + } + }, + "confirmAccess": { + "message": "Confirm access" + }, + "denyAccess": { + "message": "Deny access" + }, + "time": { + "message": "Time" + }, + "deviceType": { + "message": "Device Type" + }, + "loginRequest": { + "message": "Login request" + }, + "thisRequestIsNoLongerValid": { + "message": "This request is no longer valid." + }, + "loginRequestHasAlreadyExpired": { + "message": "Login request has already expired." + }, + "justNow": { + "message": "Just now" + }, + "requestedXMinutesAgo": { + "message": "Requested $MINUTES$ minutes ago", + "placeholders": { + "minutes": { + "content": "$1", + "example": "5" + } + } + }, "deviceApprovalRequired": { "message": "Device approval required. Select an approval option below:" }, @@ -3795,18 +4007,10 @@ "aliasDomain": { "message": "Alias domain" }, - "passwordRepromptDisabledAutofillOnPageLoad": { - "message": "Items with master password re-prompt cannot be autofilled on page load. Autofill on page load turned off.", - "description": "Toast message for describing that master password re-prompt cannot be autofilled on page load." - }, "autofillOnPageLoadSetToDefault": { "message": "Autofill on page load set to use default setting.", "description": "Toast message for informing the user that autofill on page load has been set to the default setting." }, - "turnOffMasterPasswordPromptToEditField": { - "message": "Turn off master password re-prompt to edit this field", - "description": "Message appearing below the autofill on load message when master password reprompt is set for a vault item." - }, "toggleSideNavigation": { "message": "Toggle side navigation" }, @@ -4015,15 +4219,11 @@ "selectImportCollection": { "message": "Select a collection" }, - "importTargetHint": { - "message": "Select this option if you want the imported file contents moved to a $DESTINATION$", - "description": "Located as a hint under the import target. Will be appended by either folder or collection, depending if the user is importing into an individual or an organizational vault.", - "placeholders": { - "destination": { - "content": "$1", - "example": "folder or collection" - } - } + "importTargetHintCollection": { + "message": "Select this option if you want the imported file contents moved to a collection" + }, + "importTargetHintFolder": { + "message": "Select this option if you want the imported file contents moved to a folder" }, "importUnassignedItemsError": { "message": "File contains unassigned items." @@ -4080,9 +4280,6 @@ "passkeyNotCopiedAlert": { "message": "The passkey will not be copied to the cloned item. Do you want to continue cloning this item?" }, - "passkeyFeatureIsNotImplementedForAccountsWithoutMasterPassword": { - "message": "Verification required by the initiating site. This feature is not yet implemented for accounts without master password." - }, "logInWithPasskeyQuestion": { "message": "Log in with passkey?" }, @@ -4264,7 +4461,7 @@ }, "uriMatchDefaultStrategyHint": { "message": "URI match detection is how Bitwarden identifies autofill suggestions.", - "description": "Explains to the user that URI match detection determines how Bitwarden suggests autofill options, and clarifies that this default strategy applies when no specific match detection is set for a login item." + "description": "Explains to the user that URI match detection determines how Bitwarden suggests autofill options, and clarifies that this default strategy applies when no specific match detection is set for a login item." }, "regExAdvancedOptionWarning": { "message": "\"Regular expression\" is an advanced option with increased risk of exposing credentials.", @@ -4465,17 +4662,17 @@ } } }, - "copyFieldValue": { - "message": "Copy $FIELD$, $VALUE$", + "copyFieldCipherName": { + "message": "Copy $FIELD$, $CIPHERNAME$", "description": "Title for a button that copies a field value to the clipboard.", "placeholders": { "field": { "content": "$1", "example": "Username" }, - "value": { + "ciphername": { "content": "$2", - "example": "Foo" + "example": "Login Item" } } }, @@ -4768,9 +4965,6 @@ } } }, - "enableAnimations": { - "message": "Enable animations" - }, "showAnimations": { "message": "Show animations" }, @@ -4983,15 +5177,9 @@ "itemLocation": { "message": "Item Location" }, - "fileSend": { - "message": "File Send" - }, "fileSends": { "message": "File Sends" }, - "textSend": { - "message": "Text Send" - }, "textSends": { "message": "Text Sends" }, @@ -5001,6 +5189,18 @@ "showNumberOfAutofillSuggestions": { "message": "Show number of login autofill suggestions on extension icon" }, + "accountAccessRequested": { + "message": "Account access requested" + }, + "confirmAccessAttempt": { + "message": "Confirm access attempt for $EMAIL$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + } + } + }, "showQuickCopyActions": { "message": "Show quick copy actions on Vault" }, @@ -5040,9 +5240,6 @@ "vaultCustomTimeoutMinimum": { "message": "Minimum custom timeout is 1 minute." }, - "additionalContentAvailable": { - "message": "Additional content is available" - }, "fileSavedToDevice": { "message": "File saved to device. Manage from your device downloads." }, @@ -5328,6 +5525,12 @@ "changeAtRiskPassword": { "message": "Change at-risk password" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "This login is at-risk and missing a website. Add a website and change the password for stronger security." + }, + "missingWebsite": { + "message": "Missing website" + }, "settingsVaultOptions": { "message": "Vault options" }, @@ -5376,6 +5579,38 @@ "hasItemsVaultNudgeTitle": { "message": "Welcome to your vault!" }, + "phishingPageTitleV2":{ + "message": "Phishing attempt detected" + }, + "phishingPageSummary": { + "message": "The site you are attempting to visit is a known malicious site and a security risk." + }, + "phishingPageCloseTabV2": { + "message": "Close this tab" + }, + "phishingPageContinueV2": { + "message": "Continue to this site (not recommended)" + }, + "phishingPageExplanation1": { + "message": "This site was found in ", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence. A proper name follows this." + }, + "phishingPageExplanation2": { + "message": ", an open-source list of known phishing sites used for stealing personal and sensitive information.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence. A proper name precedes this." + }, + "phishingPageLearnMore" : { + "message": "Learn more about phishing detection" + }, + "protectedBy": { + "message": "Protected by $PRODUCT$", + "placeholders": { + "product": { + "content": "$1", + "example": "Bitwarden Phishing Blocker" + } + } + }, "hasItemsVaultNudgeBodyOne": { "message": "Autofill items for the current page" }, @@ -5451,11 +5686,33 @@ "message": "Easily create strong and unique passwords by clicking on the Generate password button to help you keep your logins secure.", "description": "Aria label for the body content of the generator nudge" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "noPermissionsViewPage": { "message": "You do not have permissions to view this page. Try logging in with a different account." }, "wasmNotSupported": { "message": "WebAssembly is not supported on your browser or is not enabled. WebAssembly is required to use the Bitwarden app.", "description": "'WebAssembly' is a technical term and should not be translated." + }, + "showMore": { + "message": "Show more" + }, + "showLess": { + "message": "Show less" + }, + "next": { + "message": "Next" + }, + "moreBreadcrumbs": { + "message": "More breadcrumbs", + "description": "This is used in the context of a breadcrumb navigation, indicating that there are more items in the breadcrumb trail that are not currently displayed." + }, + "confirmKeyConnectorDomain": { + "message": "Confirm Key Connector domain" } } diff --git a/apps/browser/src/_locales/en_GB/messages.json b/apps/browser/src/_locales/en_GB/messages.json index aab61eca30e..0a551ee92bd 100644 --- a/apps/browser/src/_locales/en_GB/messages.json +++ b/apps/browser/src/_locales/en_GB/messages.json @@ -547,12 +547,50 @@ "searchVault": { "message": "Search vault" }, + "resetSearch": { + "message": "Reset search" + }, + "archiveNoun": { + "message": "Archive", + "description": "Noun" + }, + "archiveVerb": { + "message": "Archive", + "description": "Verb" + }, + "unarchive": { + "message": "Unarchive" + }, + "itemsInArchive": { + "message": "Items in archive" + }, + "noItemsInArchive": { + "message": "No items in archive" + }, + "noItemsInArchiveDesc": { + "message": "Archived items will appear here and will be excluded from general search results and autofill suggestions." + }, + "itemSentToArchive": { + "message": "Item sent to archive" + }, + "itemRemovedFromArchive": { + "message": "Item removed from archive" + }, + "archiveItem": { + "message": "Archive item" + }, + "archiveItemConfirmDesc": { + "message": "Archived items are excluded from general search results and autofill suggestions. Are you sure you want to archive this item?" + }, "edit": { "message": "Edit" }, "view": { "message": "View" }, + "viewLogin": { + "message": "View login" + }, "noItemsInList": { "message": "There are no items to list." }, @@ -695,6 +733,15 @@ "invalidMasterPassword": { "message": "Invalid master password" }, + "invalidMasterPasswordConfirmEmailAndHost": { + "message": "Invalid master password. Confirm your email is correct and your account was created on $HOST$.", + "placeholders": { + "host": { + "content": "$1", + "example": "vault.bitwarden.com" + } + } + }, "vaultTimeout": { "message": "Vault timeout" }, @@ -1501,6 +1548,15 @@ "readSecurityKey": { "message": "Read security key" }, + "readingPasskeyLoading": { + "message": "Reading passkey..." + }, + "passkeyAuthenticationFailed": { + "message": "Passkey authentication failed" + }, + "useADifferentLogInMethod": { + "message": "Use a different log in method" + }, "awaitingSecurityKeyInteraction": { "message": "Awaiting security key interaction..." }, @@ -1519,9 +1575,6 @@ "selectTwoStepLoginMethod": { "message": "Select two-step login method" }, - "recoveryCodeDesc": { - "message": "Lost access to all of your two-factor providers? Use your recovery code to turn off all two-factor providers from your account." - }, "recoveryCodeTitle": { "message": "Recovery code" }, @@ -1680,9 +1733,6 @@ "defaultAutoFillOnPageLoadDesc": { "message": "You can turn off auto-fill on page load for individual login items from the item's Edit view." }, - "itemAutoFillOnPageLoad": { - "message": "Auto-fill on page load (if set up in Options)" - }, "autoFillOnPageLoadUseDefault": { "message": "Use default setting" }, @@ -1754,23 +1804,8 @@ "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?" }, - "popupU2fCloseMessage": { - "message": "This browser cannot process U2F requests in this pop-up window. Do you want to open this pop-up in a new window so that you can log in using U2F?" - }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognisable image next to each login." - }, - "faviconDescAlt": { - "message": "Show a recognisable image next to each login. Applies to all logged in accounts." - }, - "enableBadgeCounter": { - "message": "Show badge counter" - }, - "badgeCounterDesc": { - "message": "Indicate how many logins you have for the current web page." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "cardholderName": { "message": "Cardholder name" @@ -1829,6 +1864,9 @@ "securityCode": { "message": "Security code" }, + "cardNumber": { + "message": "card number" + }, "ex": { "message": "e.g." }, @@ -1931,32 +1969,81 @@ "typeNote": { "message": "Note" }, - "newItemHeader": { - "message": "New $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderLogin": { + "message": "New Login", + "description": "Header for new login item type" }, - "editItemHeader": { - "message": "Edit $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderCard": { + "message": "New Card", + "description": "Header for new card item type" }, - "viewItemHeader": { - "message": "View $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderIdentity": { + "message": "New Identity", + "description": "Header for new identity item type" + }, + "newItemHeaderNote": { + "message": "New Note", + "description": "Header for new note item type" + }, + "newItemHeaderSshKey": { + "message": "New SSH key", + "description": "Header for new SSH key item type" + }, + "newItemHeaderTextSend": { + "message": "New Text Send", + "description": "Header for new text send" + }, + "newItemHeaderFileSend": { + "message": "New File Send", + "description": "Header for new file send" + }, + "editItemHeaderLogin": { + "message": "Edit Login", + "description": "Header for edit login item type" + }, + "editItemHeaderCard": { + "message": "Edit Card", + "description": "Header for edit card item type" + }, + "editItemHeaderIdentity": { + "message": "Edit Identity", + "description": "Header for edit identity item type" + }, + "editItemHeaderNote": { + "message": "Edit Note", + "description": "Header for edit note item type" + }, + "editItemHeaderSshKey": { + "message": "Edit SSH key", + "description": "Header for edit SSH key item type" + }, + "editItemHeaderTextSend": { + "message": "Edit Text Send", + "description": "Header for edit text send" + }, + "editItemHeaderFileSend": { + "message": "Edit File Send", + "description": "Header for edit file send" + }, + "viewItemHeaderLogin": { + "message": "View Login", + "description": "Header for view login item type" + }, + "viewItemHeaderCard": { + "message": "View Card", + "description": "Header for view card item type" + }, + "viewItemHeaderIdentity": { + "message": "View Identity", + "description": "Header for view identity item type" + }, + "viewItemHeaderNote": { + "message": "View Note", + "description": "Header for view note item type" + }, + "viewItemHeaderSshKey": { + "message": "View SSH key", + "description": "Header for view SSH key item type" }, "passwordHistory": { "message": "Password history" @@ -3129,6 +3216,24 @@ } } }, + "exportingOrganizationVaultFromPasswordManagerWithDataOwnershipDesc": { + "message": "Only the organisation vault associated with $ORGANIZATION$ will be exported.", + "placeholders": { + "organization": { + "content": "$1", + "example": "My Org Name" + } + } + }, + "exportingOrganizationVaultFromAdminConsoleWithDataOwnershipDesc": { + "message": "Only the organisation vault associated with $ORGANIZATION$ will be exported. My items collections will not be included.", + "placeholders": { + "organization": { + "content": "$1", + "example": "My Org Name" + } + } + }, "error": { "message": "Error" }, @@ -3460,6 +3565,28 @@ "logInRequestSent": { "message": "Request sent" }, + "loginRequestApprovedForEmailOnDevice": { + "message": "Login request approved for $EMAIL$ on $DEVICE$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + }, + "device": { + "content": "$2", + "example": "Web app - Chrome" + } + } + }, + "youDeniedLoginAttemptFromAnotherDevice": { + "message": "You denied a login attempt from another device. If this was you, try to log in with the device again." + }, + "device": { + "message": "Device" + }, + "loginStatus": { + "message": "Login status" + }, "masterPasswordChanged": { "message": "Master password saved" }, @@ -3496,9 +3623,6 @@ "autofillPageLoadPolicyActivated": { "message": "Your organisation policies have turned on auto-fill on page load." }, - "howToAutofill": { - "message": "How to auto-fill" - }, "autofillSelectInfoWithCommand": { "message": "Select an item from this screen, use the shortcut $COMMAND$, or explore other options in settings.", "placeholders": { @@ -3556,6 +3680,94 @@ "rememberThisDeviceToMakeFutureLoginsSeamless": { "message": "Remember this device to make future logins seamless" }, + "manageDevices": { + "message": "Manage devices" + }, + "currentSession": { + "message": "Current session" + }, + "mobile": { + "message": "Mobile", + "description": "Mobile app" + }, + "extension": { + "message": "Extension", + "description": "Browser extension/addon" + }, + "desktop": { + "message": "Desktop", + "description": "Desktop app" + }, + "webVault": { + "message": "Web vault" + }, + "webApp": { + "message": "Web app" + }, + "cli": { + "message": "CLI" + }, + "sdk": { + "message": "SDK", + "description": "Software Development Kit" + }, + "requestPending": { + "message": "Request pending" + }, + "firstLogin": { + "message": "First login" + }, + "trusted": { + "message": "Trusted" + }, + "needsApproval": { + "message": "Needs approval" + }, + "devices": { + "message": "Devices" + }, + "accessAttemptBy": { + "message": "Access attempt by $EMAIL$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + } + } + }, + "confirmAccess": { + "message": "Confirm access" + }, + "denyAccess": { + "message": "Deny access" + }, + "time": { + "message": "Time" + }, + "deviceType": { + "message": "Device Type" + }, + "loginRequest": { + "message": "Login request" + }, + "thisRequestIsNoLongerValid": { + "message": "This request is no longer valid." + }, + "loginRequestHasAlreadyExpired": { + "message": "Login request has already expired." + }, + "justNow": { + "message": "Just now" + }, + "requestedXMinutesAgo": { + "message": "Requested $MINUTES$ minutes ago", + "placeholders": { + "minutes": { + "content": "$1", + "example": "5" + } + } + }, "deviceApprovalRequired": { "message": "Device approval required. Select an approval option below:" }, @@ -3795,18 +4007,10 @@ "aliasDomain": { "message": "Alias domain" }, - "passwordRepromptDisabledAutofillOnPageLoad": { - "message": "Items with master password re-prompt cannot be auto-filled on page load. Auto-fill on page load turned off.", - "description": "Toast message for describing that master password re-prompt cannot be autofilled on page load." - }, "autofillOnPageLoadSetToDefault": { "message": "Auto-fill on page load set to use default setting.", "description": "Toast message for informing the user that autofill on page load has been set to the default setting." }, - "turnOffMasterPasswordPromptToEditField": { - "message": "Turn off master password re-prompt to edit this field", - "description": "Message appearing below the autofill on load message when master password reprompt is set for a vault item." - }, "toggleSideNavigation": { "message": "Toggle side navigation" }, @@ -4015,15 +4219,11 @@ "selectImportCollection": { "message": "Select a collection" }, - "importTargetHint": { - "message": "Select this option if you want the imported file contents moved to a $DESTINATION$", - "description": "Located as a hint under the import target. Will be appended by either folder or collection, depending if the user is importing into an individual or an organizational vault.", - "placeholders": { - "destination": { - "content": "$1", - "example": "folder or collection" - } - } + "importTargetHintCollection": { + "message": "Select this option if you want the imported file contents moved to a collection" + }, + "importTargetHintFolder": { + "message": "Select this option if you want the imported file contents moved to a folder" }, "importUnassignedItemsError": { "message": "File contains unassigned items." @@ -4080,9 +4280,6 @@ "passkeyNotCopiedAlert": { "message": "The passkey will not be copied to the cloned item. Do you want to continue cloning this item?" }, - "passkeyFeatureIsNotImplementedForAccountsWithoutMasterPassword": { - "message": "Verification required by the initiating site. This feature is not yet implemented for accounts without master password." - }, "logInWithPasskeyQuestion": { "message": "Log in with passkey?" }, @@ -4465,17 +4662,17 @@ } } }, - "copyFieldValue": { - "message": "Copy $FIELD$, $VALUE$", + "copyFieldCipherName": { + "message": "Copy $FIELD$, $CIPHERNAME$", "description": "Title for a button that copies a field value to the clipboard.", "placeholders": { "field": { "content": "$1", "example": "Username" }, - "value": { + "ciphername": { "content": "$2", - "example": "Foo" + "example": "Login Item" } } }, @@ -4768,9 +4965,6 @@ } } }, - "enableAnimations": { - "message": "Enable animations" - }, "showAnimations": { "message": "Show animations" }, @@ -4983,15 +5177,9 @@ "itemLocation": { "message": "Item Location" }, - "fileSend": { - "message": "File Send" - }, "fileSends": { "message": "File Sends" }, - "textSend": { - "message": "Text Send" - }, "textSends": { "message": "Text Sends" }, @@ -5001,6 +5189,18 @@ "showNumberOfAutofillSuggestions": { "message": "Show number of login autofill suggestions on extension icon" }, + "accountAccessRequested": { + "message": "Account access requested" + }, + "confirmAccessAttempt": { + "message": "Confirm access attempt for $EMAIL$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + } + } + }, "showQuickCopyActions": { "message": "Show quick copy actions on Vault" }, @@ -5040,9 +5240,6 @@ "vaultCustomTimeoutMinimum": { "message": "Minimum custom timeout is 1 minute." }, - "additionalContentAvailable": { - "message": "Additional content is available" - }, "fileSavedToDevice": { "message": "File saved to device. Manage from your device downloads." }, @@ -5328,6 +5525,12 @@ "changeAtRiskPassword": { "message": "Change at-risk password" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "This login is at-risk and missing a website. Add a website and change the password for stronger security." + }, + "missingWebsite": { + "message": "Missing website" + }, "settingsVaultOptions": { "message": "Vault options" }, @@ -5376,6 +5579,18 @@ "hasItemsVaultNudgeTitle": { "message": "Welcome to your vault!" }, + "phishingPageTitle": { + "message": "Phishing website" + }, + "phishingPageCloseTab": { + "message": "Close tab" + }, + "phishingPageContinue": { + "message": "Continue" + }, + "phishingPageLearnWhy": { + "message": "Why are you seeing this?" + }, "hasItemsVaultNudgeBodyOne": { "message": "Autofill items for the current page" }, @@ -5451,11 +5666,33 @@ "message": "Easily create strong and unique passwords by clicking on the Generate password button to help you keep your logins secure.", "description": "Aria label for the body content of the generator nudge" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "noPermissionsViewPage": { "message": "You do not have permissions to view this page. Try logging in with a different account." }, "wasmNotSupported": { "message": "WebAssembly is not supported on your browser or is not enabled. WebAssembly is required to use the Bitwarden app.", "description": "'WebAssembly' is a technical term and should not be translated." + }, + "showMore": { + "message": "Show more" + }, + "showLess": { + "message": "Show less" + }, + "next": { + "message": "Next" + }, + "moreBreadcrumbs": { + "message": "More breadcrumbs", + "description": "This is used in the context of a breadcrumb navigation, indicating that there are more items in the breadcrumb trail that are not currently displayed." + }, + "confirmKeyConnectorDomain": { + "message": "Confirm Key Connector domain" } } diff --git a/apps/browser/src/_locales/en_IN/messages.json b/apps/browser/src/_locales/en_IN/messages.json index eaf11a04e57..c2160e67d03 100644 --- a/apps/browser/src/_locales/en_IN/messages.json +++ b/apps/browser/src/_locales/en_IN/messages.json @@ -547,12 +547,50 @@ "searchVault": { "message": "Search vault" }, + "resetSearch": { + "message": "Reset search" + }, + "archiveNoun": { + "message": "Archive", + "description": "Noun" + }, + "archiveVerb": { + "message": "Archive", + "description": "Verb" + }, + "unarchive": { + "message": "Unarchive" + }, + "itemsInArchive": { + "message": "Items in archive" + }, + "noItemsInArchive": { + "message": "No items in archive" + }, + "noItemsInArchiveDesc": { + "message": "Archived items will appear here and will be excluded from general search results and autofill suggestions." + }, + "itemSentToArchive": { + "message": "Item sent to archive" + }, + "itemRemovedFromArchive": { + "message": "Item removed from archive" + }, + "archiveItem": { + "message": "Archive item" + }, + "archiveItemConfirmDesc": { + "message": "Archived items are excluded from general search results and autofill suggestions. Are you sure you want to archive this item?" + }, "edit": { "message": "Edit" }, "view": { "message": "View" }, + "viewLogin": { + "message": "View login" + }, "noItemsInList": { "message": "There are no items to list." }, @@ -695,6 +733,15 @@ "invalidMasterPassword": { "message": "Invalid master password" }, + "invalidMasterPasswordConfirmEmailAndHost": { + "message": "Invalid master password. Confirm your email is correct and your account was created on $HOST$.", + "placeholders": { + "host": { + "content": "$1", + "example": "vault.bitwarden.com" + } + } + }, "vaultTimeout": { "message": "Vault timeout" }, @@ -1501,6 +1548,15 @@ "readSecurityKey": { "message": "Read security key" }, + "readingPasskeyLoading": { + "message": "Reading passkey..." + }, + "passkeyAuthenticationFailed": { + "message": "Passkey authentication failed" + }, + "useADifferentLogInMethod": { + "message": "Use a different log in method" + }, "awaitingSecurityKeyInteraction": { "message": "Awaiting security key interaction..." }, @@ -1519,9 +1575,6 @@ "selectTwoStepLoginMethod": { "message": "Select two-step login method" }, - "recoveryCodeDesc": { - "message": "Lost access to all of your two-factor providers? Use your recovery code to disable all two-factor providers from your account." - }, "recoveryCodeTitle": { "message": "Recovery code" }, @@ -1680,9 +1733,6 @@ "defaultAutoFillOnPageLoadDesc": { "message": "After enabling Auto-fill on Page Load, you can enable or disable the feature for individual login items. This is the default setting for login items that are not separately configured." }, - "itemAutoFillOnPageLoad": { - "message": "Auto-fill on Page Load (if enabled in Options)" - }, "autoFillOnPageLoadUseDefault": { "message": "Use default setting" }, @@ -1754,23 +1804,8 @@ "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?" }, - "popupU2fCloseMessage": { - "message": "This browser cannot process U2F requests in this pop-up window. Do you want to open this pop-up in a new window so that you can log in using U2F?" - }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." - }, - "faviconDescAlt": { - "message": "Show a recognisable image next to each login. Applies to all logged in accounts." - }, - "enableBadgeCounter": { - "message": "Show badge counter" - }, - "badgeCounterDesc": { - "message": "Indicate how many logins you have for the current web page." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "cardholderName": { "message": "Cardholder name" @@ -1829,6 +1864,9 @@ "securityCode": { "message": "Security code" }, + "cardNumber": { + "message": "card number" + }, "ex": { "message": "e.g." }, @@ -1931,32 +1969,81 @@ "typeNote": { "message": "Note" }, - "newItemHeader": { - "message": "New $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderLogin": { + "message": "New Login", + "description": "Header for new login item type" }, - "editItemHeader": { - "message": "Edit $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderCard": { + "message": "New Card", + "description": "Header for new card item type" }, - "viewItemHeader": { - "message": "View $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderIdentity": { + "message": "New Identity", + "description": "Header for new identity item type" + }, + "newItemHeaderNote": { + "message": "New Note", + "description": "Header for new note item type" + }, + "newItemHeaderSshKey": { + "message": "New SSH key", + "description": "Header for new SSH key item type" + }, + "newItemHeaderTextSend": { + "message": "New Text Send", + "description": "Header for new text send" + }, + "newItemHeaderFileSend": { + "message": "New File Send", + "description": "Header for new file send" + }, + "editItemHeaderLogin": { + "message": "Edit Login", + "description": "Header for edit login item type" + }, + "editItemHeaderCard": { + "message": "Edit Card", + "description": "Header for edit card item type" + }, + "editItemHeaderIdentity": { + "message": "Edit Identity", + "description": "Header for edit identity item type" + }, + "editItemHeaderNote": { + "message": "Edit Note", + "description": "Header for edit note item type" + }, + "editItemHeaderSshKey": { + "message": "Edit SSH key", + "description": "Header for edit SSH key item type" + }, + "editItemHeaderTextSend": { + "message": "Edit Text Send", + "description": "Header for edit text send" + }, + "editItemHeaderFileSend": { + "message": "Edit File Send", + "description": "Header for edit file send" + }, + "viewItemHeaderLogin": { + "message": "View Login", + "description": "Header for view login item type" + }, + "viewItemHeaderCard": { + "message": "View Card", + "description": "Header for view card item type" + }, + "viewItemHeaderIdentity": { + "message": "View Identity", + "description": "Header for view identity item type" + }, + "viewItemHeaderNote": { + "message": "View Note", + "description": "Header for view note item type" + }, + "viewItemHeaderSshKey": { + "message": "View SSH key", + "description": "Header for view SSH key item type" }, "passwordHistory": { "message": "Password history" @@ -3129,6 +3216,24 @@ } } }, + "exportingOrganizationVaultFromPasswordManagerWithDataOwnershipDesc": { + "message": "Only the organisation vault associated with $ORGANIZATION$ will be exported.", + "placeholders": { + "organization": { + "content": "$1", + "example": "My Org Name" + } + } + }, + "exportingOrganizationVaultFromAdminConsoleWithDataOwnershipDesc": { + "message": "Only the organisation vault associated with $ORGANIZATION$ will be exported. My items collections will not be included.", + "placeholders": { + "organization": { + "content": "$1", + "example": "My Org Name" + } + } + }, "error": { "message": "Error" }, @@ -3460,6 +3565,28 @@ "logInRequestSent": { "message": "Request sent" }, + "loginRequestApprovedForEmailOnDevice": { + "message": "Login request approved for $EMAIL$ on $DEVICE$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + }, + "device": { + "content": "$2", + "example": "Web app - Chrome" + } + } + }, + "youDeniedLoginAttemptFromAnotherDevice": { + "message": "You denied a login attempt from another device. If this was you, try to log in with the device again." + }, + "device": { + "message": "Device" + }, + "loginStatus": { + "message": "Login status" + }, "masterPasswordChanged": { "message": "Master password saved" }, @@ -3496,9 +3623,6 @@ "autofillPageLoadPolicyActivated": { "message": "Your organisation policies have turned on auto-fill on page load." }, - "howToAutofill": { - "message": "How to auto-fill" - }, "autofillSelectInfoWithCommand": { "message": "Select an item from this screen, use the shortcut $COMMAND$, or explore other options in settings.", "placeholders": { @@ -3556,6 +3680,94 @@ "rememberThisDeviceToMakeFutureLoginsSeamless": { "message": "Remember this device to make future logins seamless" }, + "manageDevices": { + "message": "Manage devices" + }, + "currentSession": { + "message": "Current session" + }, + "mobile": { + "message": "Mobile", + "description": "Mobile app" + }, + "extension": { + "message": "Extension", + "description": "Browser extension/addon" + }, + "desktop": { + "message": "Desktop", + "description": "Desktop app" + }, + "webVault": { + "message": "Web vault" + }, + "webApp": { + "message": "Web app" + }, + "cli": { + "message": "CLI" + }, + "sdk": { + "message": "SDK", + "description": "Software Development Kit" + }, + "requestPending": { + "message": "Request pending" + }, + "firstLogin": { + "message": "First login" + }, + "trusted": { + "message": "Trusted" + }, + "needsApproval": { + "message": "Needs approval" + }, + "devices": { + "message": "Devices" + }, + "accessAttemptBy": { + "message": "Access attempt by $EMAIL$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + } + } + }, + "confirmAccess": { + "message": "Confirm access" + }, + "denyAccess": { + "message": "Deny access" + }, + "time": { + "message": "Time" + }, + "deviceType": { + "message": "Device Type" + }, + "loginRequest": { + "message": "Login request" + }, + "thisRequestIsNoLongerValid": { + "message": "This request is no longer valid." + }, + "loginRequestHasAlreadyExpired": { + "message": "Login request has already expired." + }, + "justNow": { + "message": "Just now" + }, + "requestedXMinutesAgo": { + "message": "Requested $MINUTES$ minutes ago", + "placeholders": { + "minutes": { + "content": "$1", + "example": "5" + } + } + }, "deviceApprovalRequired": { "message": "Device approval required. Select an approval option below:" }, @@ -3795,18 +4007,10 @@ "aliasDomain": { "message": "Alias domain" }, - "passwordRepromptDisabledAutofillOnPageLoad": { - "message": "Items with master password re-prompt cannot be auto-filled on page load. Auto-fill on page load turned off.", - "description": "Toast message for describing that master password re-prompt cannot be autofilled on page load." - }, "autofillOnPageLoadSetToDefault": { "message": "Auto-fill on page load set to use default setting.", "description": "Toast message for informing the user that autofill on page load has been set to the default setting." }, - "turnOffMasterPasswordPromptToEditField": { - "message": "Turn off master password re-prompt to edit this field", - "description": "Message appearing below the autofill on load message when master password reprompt is set for a vault item." - }, "toggleSideNavigation": { "message": "Toggle side navigation" }, @@ -4015,15 +4219,11 @@ "selectImportCollection": { "message": "Select a collection" }, - "importTargetHint": { - "message": "Select this option if you want the imported file contents moved to a $DESTINATION$", - "description": "Located as a hint under the import target. Will be appended by either folder or collection, depending if the user is importing into an individual or an organizational vault.", - "placeholders": { - "destination": { - "content": "$1", - "example": "folder or collection" - } - } + "importTargetHintCollection": { + "message": "Select this option if you want the imported file contents moved to a collection" + }, + "importTargetHintFolder": { + "message": "Select this option if you want the imported file contents moved to a folder" }, "importUnassignedItemsError": { "message": "File contains unassigned items." @@ -4080,9 +4280,6 @@ "passkeyNotCopiedAlert": { "message": "The passkey will not be copied to the cloned item. Do you want to continue cloning this item?" }, - "passkeyFeatureIsNotImplementedForAccountsWithoutMasterPassword": { - "message": "Verification required by the initiating site. This feature is not yet implemented for accounts without master password." - }, "logInWithPasskeyQuestion": { "message": "Log in with passkey?" }, @@ -4465,17 +4662,17 @@ } } }, - "copyFieldValue": { - "message": "Copy $FIELD$, $VALUE$", + "copyFieldCipherName": { + "message": "Copy $FIELD$, $CIPHERNAME$", "description": "Title for a button that copies a field value to the clipboard.", "placeholders": { "field": { "content": "$1", "example": "Username" }, - "value": { + "ciphername": { "content": "$2", - "example": "Foo" + "example": "Login Item" } } }, @@ -4768,9 +4965,6 @@ } } }, - "enableAnimations": { - "message": "Enable animations" - }, "showAnimations": { "message": "Show animations" }, @@ -4983,15 +5177,9 @@ "itemLocation": { "message": "Item Location" }, - "fileSend": { - "message": "File Send" - }, "fileSends": { "message": "File Sends" }, - "textSend": { - "message": "Text Send" - }, "textSends": { "message": "Text Sends" }, @@ -5001,6 +5189,18 @@ "showNumberOfAutofillSuggestions": { "message": "Show number of login autofill suggestions on extension icon" }, + "accountAccessRequested": { + "message": "Account access requested" + }, + "confirmAccessAttempt": { + "message": "Confirm access attempt for $EMAIL$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + } + } + }, "showQuickCopyActions": { "message": "Show quick copy actions on Vault" }, @@ -5040,9 +5240,6 @@ "vaultCustomTimeoutMinimum": { "message": "Minimum custom timeout is 1 minute." }, - "additionalContentAvailable": { - "message": "Additional content is available" - }, "fileSavedToDevice": { "message": "File saved to device. Manage from your device downloads." }, @@ -5328,6 +5525,12 @@ "changeAtRiskPassword": { "message": "Change at-risk password" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "This login is at-risk and missing a website. Add a website and change the password for stronger security." + }, + "missingWebsite": { + "message": "Missing website" + }, "settingsVaultOptions": { "message": "Vault options" }, @@ -5376,6 +5579,18 @@ "hasItemsVaultNudgeTitle": { "message": "Welcome to your vault!" }, + "phishingPageTitle": { + "message": "Phishing website" + }, + "phishingPageCloseTab": { + "message": "Close tab" + }, + "phishingPageContinue": { + "message": "Continue" + }, + "phishingPageLearnWhy": { + "message": "Why are you seeing this?" + }, "hasItemsVaultNudgeBodyOne": { "message": "Autofill items for the current page" }, @@ -5451,11 +5666,33 @@ "message": "Easily create strong and unique passwords by clicking on the Generate password button to help you keep your logins secure.", "description": "Aria label for the body content of the generator nudge" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "noPermissionsViewPage": { "message": "You do not have permissions to view this page. Try logging in with a different account." }, "wasmNotSupported": { "message": "WebAssembly is not supported on your browser or is not enabled. WebAssembly is required to use the Bitwarden app.", "description": "'WebAssembly' is a technical term and should not be translated." + }, + "showMore": { + "message": "Show more" + }, + "showLess": { + "message": "Show less" + }, + "next": { + "message": "Next" + }, + "moreBreadcrumbs": { + "message": "More breadcrumbs", + "description": "This is used in the context of a breadcrumb navigation, indicating that there are more items in the breadcrumb trail that are not currently displayed." + }, + "confirmKeyConnectorDomain": { + "message": "Confirm Key Connector domain" } } diff --git a/apps/browser/src/_locales/es/messages.json b/apps/browser/src/_locales/es/messages.json index 724d07f4404..0bacebadab1 100644 --- a/apps/browser/src/_locales/es/messages.json +++ b/apps/browser/src/_locales/es/messages.json @@ -197,7 +197,7 @@ "description": "This string is used on the vault page to indicate autofilling. Horizontal space is limited in the interface here so try and keep translations as concise as possible." }, "autoFill": { - "message": "Autorrellenar" + "message": "Autocompletar" }, "autoFillLogin": { "message": "Autocompletar inicio de sesión" @@ -547,12 +547,50 @@ "searchVault": { "message": "Buscar en caja fuerte" }, + "resetSearch": { + "message": "Restablecer búsqueda" + }, + "archiveNoun": { + "message": "Archive", + "description": "Noun" + }, + "archiveVerb": { + "message": "Archive", + "description": "Verb" + }, + "unarchive": { + "message": "Unarchive" + }, + "itemsInArchive": { + "message": "Items in archive" + }, + "noItemsInArchive": { + "message": "No items in archive" + }, + "noItemsInArchiveDesc": { + "message": "Archived items will appear here and will be excluded from general search results and autofill suggestions." + }, + "itemSentToArchive": { + "message": "Item sent to archive" + }, + "itemRemovedFromArchive": { + "message": "Item removed from archive" + }, + "archiveItem": { + "message": "Archive item" + }, + "archiveItemConfirmDesc": { + "message": "Archived items are excluded from general search results and autofill suggestions. Are you sure you want to archive this item?" + }, "edit": { "message": "Editar" }, "view": { "message": "Ver" }, + "viewLogin": { + "message": "View login" + }, "noItemsInList": { "message": "No hay elementos que listar." }, @@ -695,6 +733,15 @@ "invalidMasterPassword": { "message": "Contraseña maestra no válida" }, + "invalidMasterPasswordConfirmEmailAndHost": { + "message": "Invalid master password. Confirm your email is correct and your account was created on $HOST$.", + "placeholders": { + "host": { + "content": "$1", + "example": "vault.bitwarden.com" + } + } + }, "vaultTimeout": { "message": "Tiempo de espera de la caja fuerte" }, @@ -1453,7 +1500,7 @@ "message": "Copiar TOTP automáticamente" }, "disableAutoTotpCopyDesc": { - "message": "Si tu entrada tiene una clave de autenticación adjunta, el código de verificación TOTP es copiado automáticamente al portapapeles cuando autorellenas una entrada." + "message": "Si tu entrada tiene una clave de autenticación, copiar el código de verificación TOTP a tu portapapeles cuando autocompletes el inicio de sesión." }, "enableAutoBiometricsPrompt": { "message": "Pedir datos biométricos al ejecutar" @@ -1501,6 +1548,15 @@ "readSecurityKey": { "message": "Leer clave de seguridad" }, + "readingPasskeyLoading": { + "message": "Reading passkey..." + }, + "passkeyAuthenticationFailed": { + "message": "Passkey authentication failed" + }, + "useADifferentLogInMethod": { + "message": "Use a different log in method" + }, "awaitingSecurityKeyInteraction": { "message": "Esperando interacción de la clave de seguridad..." }, @@ -1519,9 +1575,6 @@ "selectTwoStepLoginMethod": { "message": "Selecciona un método de inicio de sesión en dos pasos" }, - "recoveryCodeDesc": { - "message": "¿Has perdido el acceso a todos tus métodos de autenticación en dos pasos? Utiliza tu código de recuperación para deshabilitar todos los métodos de autenticación en dos pasos de tu cuenta." - }, "recoveryCodeTitle": { "message": "Código de recuperación" }, @@ -1660,28 +1713,25 @@ "message": "Autocompletar al cargar la página" }, "enableAutoFillOnPageLoad": { - "message": "Habilitar autorrellenar al cargar la página" + "message": "Autocompletar al cargar la página" }, "enableAutoFillOnPageLoadDesc": { - "message": "Si se detecta un formulario, realizar automáticamente un autorellenado cuando la web cargue." + "message": "Si se detecta un formulario de inicio de sesión, autocompletar cuando cargue la página web." }, "experimentalFeature": { - "message": "Los sitios web vulnerados o no confiables pueden explotar el autorelleno al cargar la página." + "message": "Los sitios web vulnerados o no confiables pueden explotar el autocompletado al cargar la página." }, "learnMoreAboutAutofillOnPageLoadLinkText": { "message": "Más información sobre riesgos" }, "learnMoreAboutAutofill": { - "message": "Más información sobre el relleno automático" + "message": "Más información sobre el autocompletado" }, "defaultAutoFillOnPageLoad": { "message": "Configuración de autorrelleno por defecto para elementos de inicio de sesión" }, "defaultAutoFillOnPageLoadDesc": { - "message": "Después de activar el autorelleno en Carga de página, puede activar o desactivar la función para entradas individuales. Esta es la configuración predeterminada para elementos de inicio de sesión que no están configurados por separado." - }, - "itemAutoFillOnPageLoad": { - "message": "Auto-relleno en carga de página (si está habilitado en opciones)" + "message": "Puedes desactivar el autocompletado al cargar la página para elementos individuales de inicio de sesión desde la vista de Edición del elemento." }, "autoFillOnPageLoadUseDefault": { "message": "Usar configuración predeterminada" @@ -1754,23 +1804,8 @@ "popup2faCloseMessage": { "message": "Pulsar fuera de la ventana emergente para comprobar tu correo de verificación, hará que esta se cierre. ¿Quieres abrir esta ventana emergente en una nueva ventana para evitar su cierre?" }, - "popupU2fCloseMessage": { - "message": "Este navegador no puede procesar las peticiones U2F en esta ventana emergente. ¿Desea abrir esta ventana emergente en una nueva ventana para que pueda iniciar sesión usando U2F?" - }, - "enableFavicon": { - "message": "Mostrar los iconos del sitio web" - }, - "faviconDesc": { - "message": "Mostrar una imagen reconocible junto a cada inicio de sesión." - }, - "faviconDescAlt": { - "message": "Mostrar una imagen reconocible junto a cada inicio de sesión. Se aplica a todas las cuentas conectadas." - }, - "enableBadgeCounter": { - "message": "Mostrar el contador numérico" - }, - "badgeCounterDesc": { - "message": "Indique cuántos inicios de sesión tiene para la página web actual." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "cardholderName": { "message": "Nombre en la tarjeta" @@ -1829,6 +1864,9 @@ "securityCode": { "message": "Código de seguridad" }, + "cardNumber": { + "message": "card number" + }, "ex": { "message": "ej." }, @@ -1931,32 +1969,81 @@ "typeNote": { "message": "Nota" }, - "newItemHeader": { - "message": "Nuevo $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderLogin": { + "message": "New Login", + "description": "Header for new login item type" }, - "editItemHeader": { - "message": "Editar $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderCard": { + "message": "New Card", + "description": "Header for new card item type" }, - "viewItemHeader": { - "message": "Ver $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderIdentity": { + "message": "New Identity", + "description": "Header for new identity item type" + }, + "newItemHeaderNote": { + "message": "New Note", + "description": "Header for new note item type" + }, + "newItemHeaderSshKey": { + "message": "New SSH key", + "description": "Header for new SSH key item type" + }, + "newItemHeaderTextSend": { + "message": "New Text Send", + "description": "Header for new text send" + }, + "newItemHeaderFileSend": { + "message": "New File Send", + "description": "Header for new file send" + }, + "editItemHeaderLogin": { + "message": "Edit Login", + "description": "Header for edit login item type" + }, + "editItemHeaderCard": { + "message": "Edit Card", + "description": "Header for edit card item type" + }, + "editItemHeaderIdentity": { + "message": "Edit Identity", + "description": "Header for edit identity item type" + }, + "editItemHeaderNote": { + "message": "Edit Note", + "description": "Header for edit note item type" + }, + "editItemHeaderSshKey": { + "message": "Edit SSH key", + "description": "Header for edit SSH key item type" + }, + "editItemHeaderTextSend": { + "message": "Edit Text Send", + "description": "Header for edit text send" + }, + "editItemHeaderFileSend": { + "message": "Edit File Send", + "description": "Header for edit file send" + }, + "viewItemHeaderLogin": { + "message": "View Login", + "description": "Header for view login item type" + }, + "viewItemHeaderCard": { + "message": "View Card", + "description": "Header for view card item type" + }, + "viewItemHeaderIdentity": { + "message": "View Identity", + "description": "Header for view identity item type" + }, + "viewItemHeaderNote": { + "message": "View Note", + "description": "Header for view note item type" + }, + "viewItemHeaderSshKey": { + "message": "View SSH key", + "description": "Header for view SSH key item type" }, "passwordHistory": { "message": "Historial de contraseñas" @@ -2275,16 +2362,16 @@ "message": "Confirmación de la acción del tiempo de espera" }, "autoFillAndSave": { - "message": "Autorellenar y guardar" + "message": "Autocompletar y guardar" }, "fillAndSave": { "message": "Rellenar y guardar" }, "autoFillSuccessAndSavedUri": { - "message": "Objeto autorellenado y URI guardada" + "message": "Elemento autocompletado y URI guardada" }, "autoFillSuccess": { - "message": "Objeto autorellenado" + "message": "Elemento autocompletado " }, "insecurePageWarning": { "message": "Atención: Esta es una página HTTP no segura, y cualquier información que envíes puede ser vista y cambiada por otros. Este inicio de sesión fue guardado originalmente en una página segura (HTTPS)." @@ -2522,7 +2609,7 @@ "message": "El autorrelleno y otras funcionalidades relacionadas no se ofrecerán para estos sitios web. Debe actualizar la página para que los cambios surtan efecto." }, "autofillBlockedNoticeV2": { - "message": "Autorelleno está desactivado para este sitio web." + "message": "Autocompletado está bloqueado para este sitio web." }, "autofillBlockedNoticeGuidance": { "message": "Cambia esto en los ajustes" @@ -2703,7 +2790,7 @@ "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "sendDetails": { - "message": "Send details", + "message": "Detalles del Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "sendTypeText": { @@ -2926,7 +3013,7 @@ "message": "Debes verificar tu correo electrónico para usar esta función. Puedes verificar tu correo electrónico en la caja fuerte web." }, "masterPasswordSuccessfullySet": { - "message": "Master password successfully set" + "message": "Contraseña maestra establecida correctamente" }, "updatedMasterPassword": { "message": "Contraseña maestra actualizada" @@ -3100,7 +3187,7 @@ "message": "Exportando caja fuerte personal" }, "exportingIndividualVaultDescription": { - "message": "Solo se exportarán los elementos individuales de la caja fuerte asociados con $EMAIL$. Los elementos de la bóveda de la organización no se incluirán. Solo se exportará la información de los elementos individuales y no incluirá adjuntos asociados.", + "message": "Solo se exportarán los elementos individuales de la caja fuerte asociados a $EMAIL$. Los elementos de la caja fuerte de la organización no se incluirán. Solo se exportará la información de los elementos de la caja fuerte y no se incluirá adjuntos asociados.", "placeholders": { "email": { "content": "$1", @@ -3129,6 +3216,24 @@ } } }, + "exportingOrganizationVaultFromPasswordManagerWithDataOwnershipDesc": { + "message": "Only the organization vault associated with $ORGANIZATION$ will be exported.", + "placeholders": { + "organization": { + "content": "$1", + "example": "My Org Name" + } + } + }, + "exportingOrganizationVaultFromAdminConsoleWithDataOwnershipDesc": { + "message": "Only the organization vault associated with $ORGANIZATION$ will be exported. My items collections will not be included.", + "placeholders": { + "organization": { + "content": "$1", + "example": "My Org Name" + } + } + }, "error": { "message": "Error" }, @@ -3460,8 +3565,30 @@ "logInRequestSent": { "message": "Solicitud enviada" }, + "loginRequestApprovedForEmailOnDevice": { + "message": "Login request approved for $EMAIL$ on $DEVICE$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + }, + "device": { + "content": "$2", + "example": "Web app - Chrome" + } + } + }, + "youDeniedLoginAttemptFromAnotherDevice": { + "message": "You denied a login attempt from another device. If this was you, try to log in with the device again." + }, + "device": { + "message": "Dispositivo" + }, + "loginStatus": { + "message": "Login status" + }, "masterPasswordChanged": { - "message": "Master password saved" + "message": "Contraseña maestra guardada" }, "exposedMasterPassword": { "message": "Contraseña maestra comprometida" @@ -3496,9 +3623,6 @@ "autofillPageLoadPolicyActivated": { "message": "Las políticas de su organización han activado autocompletar al cargar la página." }, - "howToAutofill": { - "message": "Cómo autorellenar" - }, "autofillSelectInfoWithCommand": { "message": "Selecciona un elemento de esta pantalla, usa el acceso directo $COMMAND$ o explora otras opciones en ajustes.", "placeholders": { @@ -3556,6 +3680,94 @@ "rememberThisDeviceToMakeFutureLoginsSeamless": { "message": "Remember this device to make future logins seamless" }, + "manageDevices": { + "message": "Gestionar dispositivos" + }, + "currentSession": { + "message": "Sesión actual" + }, + "mobile": { + "message": "Móvil", + "description": "Mobile app" + }, + "extension": { + "message": "Extensión", + "description": "Browser extension/addon" + }, + "desktop": { + "message": "Escritorio", + "description": "Desktop app" + }, + "webVault": { + "message": "Caja fuerte Web" + }, + "webApp": { + "message": "Aplicación Web" + }, + "cli": { + "message": "CLI" + }, + "sdk": { + "message": "SDK", + "description": "Software Development Kit" + }, + "requestPending": { + "message": "Solicitud pendiente" + }, + "firstLogin": { + "message": "Primer inicio de sesión" + }, + "trusted": { + "message": "De confianza" + }, + "needsApproval": { + "message": "Necesita aprobación" + }, + "devices": { + "message": "Dispositivos" + }, + "accessAttemptBy": { + "message": "Intento de acceso de $EMAIL$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + } + } + }, + "confirmAccess": { + "message": "Confirmar acceso" + }, + "denyAccess": { + "message": "Denegar acceso" + }, + "time": { + "message": "Time" + }, + "deviceType": { + "message": "Tipo de Dispositivo" + }, + "loginRequest": { + "message": "Login request" + }, + "thisRequestIsNoLongerValid": { + "message": "This request is no longer valid." + }, + "loginRequestHasAlreadyExpired": { + "message": "Login request has already expired." + }, + "justNow": { + "message": "Just now" + }, + "requestedXMinutesAgo": { + "message": "Requested $MINUTES$ minutes ago", + "placeholders": { + "minutes": { + "content": "$1", + "example": "5" + } + } + }, "deviceApprovalRequired": { "message": "Se requiere aprobación del dispositivo. Seleccione una opción de aprobación a continuación:" }, @@ -3795,18 +4007,10 @@ "aliasDomain": { "message": "Seudónimo del dominio" }, - "passwordRepromptDisabledAutofillOnPageLoad": { - "message": "Los elementos que requieren la contraseña maestra no se pueden rellenar automáticamente al cargar la página. Se desactivó el autorrellenado de la página.", - "description": "Toast message for describing that master password re-prompt cannot be autofilled on page load." - }, "autofillOnPageLoadSetToDefault": { "message": "El autorrellenado de la página está usando la configuración predeterminada.", "description": "Toast message for informing the user that autofill on page load has been set to the default setting." }, - "turnOffMasterPasswordPromptToEditField": { - "message": "Desactiva la solicitud de contraseña maestra para editar este campo", - "description": "Message appearing below the autofill on load message when master password reprompt is set for a vault item." - }, "toggleSideNavigation": { "message": "Activar/desactivar navegación lateral" }, @@ -4015,15 +4219,11 @@ "selectImportCollection": { "message": "Selecciona una colección" }, - "importTargetHint": { - "message": "Selecciona esta opción si deseas que el contenido del archivo importado se mueva a $DESTINATION$", - "description": "Located as a hint under the import target. Will be appended by either folder or collection, depending if the user is importing into an individual or an organizational vault.", - "placeholders": { - "destination": { - "content": "$1", - "example": "folder or collection" - } - } + "importTargetHintCollection": { + "message": "Select this option if you want the imported file contents moved to a collection" + }, + "importTargetHintFolder": { + "message": "Select this option if you want the imported file contents moved to a folder" }, "importUnassignedItemsError": { "message": "El archivo contiene elementos no asignados." @@ -4080,9 +4280,6 @@ "passkeyNotCopiedAlert": { "message": "La clave de acceso no se copiará al elemento clonado. ¿Desea continuar clonando este elemento?" }, - "passkeyFeatureIsNotImplementedForAccountsWithoutMasterPassword": { - "message": "Verificación requerida por el sitio inicial. Esta característica aún no está implementada para cuentas sin contraseña maestra." - }, "logInWithPasskeyQuestion": { "message": "¿Iniciar sesión con clave de acceso?" }, @@ -4465,17 +4662,17 @@ } } }, - "copyFieldValue": { - "message": "Copiar $FIELD$, $VALUE$", + "copyFieldCipherName": { + "message": "Copy $FIELD$, $CIPHERNAME$", "description": "Title for a button that copies a field value to the clipboard.", "placeholders": { "field": { "content": "$1", "example": "Username" }, - "value": { + "ciphername": { "content": "$2", - "example": "Foo" + "example": "Login Item" } } }, @@ -4768,9 +4965,6 @@ } } }, - "enableAnimations": { - "message": "Activar animaciones" - }, "showAnimations": { "message": "Mostrar animaciones" }, @@ -4983,15 +5177,9 @@ "itemLocation": { "message": "Ubicación del elemento" }, - "fileSend": { - "message": "File Send" - }, "fileSends": { "message": "File Sends" }, - "textSend": { - "message": "Text Send" - }, "textSends": { "message": "Text Sends" }, @@ -5001,6 +5189,18 @@ "showNumberOfAutofillSuggestions": { "message": "Mostrar número de sugerencias de autocompletado de inicios de sesión en el icono de la extensión" }, + "accountAccessRequested": { + "message": "Account access requested" + }, + "confirmAccessAttempt": { + "message": "Confirm access attempt for $EMAIL$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + } + } + }, "showQuickCopyActions": { "message": "Show quick copy actions on Vault" }, @@ -5040,9 +5240,6 @@ "vaultCustomTimeoutMinimum": { "message": "El tiempo de espera mínimo personalizado es de 1 minuto." }, - "additionalContentAvailable": { - "message": "Contenido adicional disponible" - }, "fileSavedToDevice": { "message": "File saved to device. Manage from your device downloads." }, @@ -5328,6 +5525,12 @@ "changeAtRiskPassword": { "message": "Cambiar contraseña de riesgo" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "This login is at-risk and missing a website. Add a website and change the password for stronger security." + }, + "missingWebsite": { + "message": "Missing website" + }, "settingsVaultOptions": { "message": "Opciones de la caja fuerte" }, @@ -5376,6 +5579,18 @@ "hasItemsVaultNudgeTitle": { "message": "¡Bienvenido a tu caja fuerte!" }, + "phishingPageTitle": { + "message": "Phishing website" + }, + "phishingPageCloseTab": { + "message": "Close tab" + }, + "phishingPageContinue": { + "message": "Continue" + }, + "phishingPageLearnWhy": { + "message": "Why are you seeing this?" + }, "hasItemsVaultNudgeBodyOne": { "message": "Autofill items for the current page" }, @@ -5448,14 +5663,36 @@ "example": "Easily create strong and unique passwords by clicking on {icon} to help you keep your logins secure." }, "generatorNudgeBodyAria": { - "message": "Easily create strong and unique passwords by clicking on the Generate password button to help you keep your logins secure.", + "message": "Crea fácilmente contraseñas seguras y únicas haciendo clic en el botón Generar contraseña para ayudarte a mantener tus inicios de sesión seguros.", "description": "Aria label for the body content of the generator nudge" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "noPermissionsViewPage": { "message": "No tienes permisos para ver esta página. Intenta iniciar sesión con otra cuenta." }, "wasmNotSupported": { - "message": "WebAssembly is not supported on your browser or is not enabled. WebAssembly is required to use the Bitwarden app.", + "message": "WebAssembly no está soportado por tu navegador o no está habilitado. WebAssembly es necesario para usar la aplicación de Bitwarden.", "description": "'WebAssembly' is a technical term and should not be translated." + }, + "showMore": { + "message": "Show more" + }, + "showLess": { + "message": "Show less" + }, + "next": { + "message": "Next" + }, + "moreBreadcrumbs": { + "message": "More breadcrumbs", + "description": "This is used in the context of a breadcrumb navigation, indicating that there are more items in the breadcrumb trail that are not currently displayed." + }, + "confirmKeyConnectorDomain": { + "message": "Confirm Key Connector domain" } } diff --git a/apps/browser/src/_locales/et/messages.json b/apps/browser/src/_locales/et/messages.json index 99e7b72a524..28e143553dd 100644 --- a/apps/browser/src/_locales/et/messages.json +++ b/apps/browser/src/_locales/et/messages.json @@ -111,13 +111,13 @@ "message": "Kaart" }, "vault": { - "message": "Seif" + "message": "Hoidla" }, "myVault": { - "message": "Minu seif" + "message": "Minu hoidla" }, "allVaults": { - "message": "Kõik seifid" + "message": "Kõik hoidlad" }, "tools": { "message": "Tööriistad" @@ -547,12 +547,50 @@ "searchVault": { "message": "Otsi hoidlast" }, + "resetSearch": { + "message": "Reset search" + }, + "archiveNoun": { + "message": "Archive", + "description": "Noun" + }, + "archiveVerb": { + "message": "Archive", + "description": "Verb" + }, + "unarchive": { + "message": "Unarchive" + }, + "itemsInArchive": { + "message": "Items in archive" + }, + "noItemsInArchive": { + "message": "No items in archive" + }, + "noItemsInArchiveDesc": { + "message": "Archived items will appear here and will be excluded from general search results and autofill suggestions." + }, + "itemSentToArchive": { + "message": "Item sent to archive" + }, + "itemRemovedFromArchive": { + "message": "Item removed from archive" + }, + "archiveItem": { + "message": "Archive item" + }, + "archiveItemConfirmDesc": { + "message": "Archived items are excluded from general search results and autofill suggestions. Are you sure you want to archive this item?" + }, "edit": { "message": "Muuda" }, "view": { "message": "Vaata" }, + "viewLogin": { + "message": "View login" + }, "noItemsInList": { "message": "Puuduvad kirjed, mida kuvada." }, @@ -668,7 +706,7 @@ "message": "Hoidla on lukus. Jätkamiseks sisesta ülemparool." }, "yourVaultIsLockedV2": { - "message": "Your vault is locked" + "message": "Sinu hoidla on lukus" }, "yourAccountIsLocked": { "message": "Your account is locked" @@ -695,6 +733,15 @@ "invalidMasterPassword": { "message": "Vale ülemparool" }, + "invalidMasterPasswordConfirmEmailAndHost": { + "message": "Invalid master password. Confirm your email is correct and your account was created on $HOST$.", + "placeholders": { + "host": { + "content": "$1", + "example": "vault.bitwarden.com" + } + } + }, "vaultTimeout": { "message": "Hoidla ajalõpp" }, @@ -1501,6 +1548,15 @@ "readSecurityKey": { "message": "Read security key" }, + "readingPasskeyLoading": { + "message": "Reading passkey..." + }, + "passkeyAuthenticationFailed": { + "message": "Passkey authentication failed" + }, + "useADifferentLogInMethod": { + "message": "Use a different log in method" + }, "awaitingSecurityKeyInteraction": { "message": "Awaiting security key interaction..." }, @@ -1519,9 +1575,6 @@ "selectTwoStepLoginMethod": { "message": "Select two-step login method" }, - "recoveryCodeDesc": { - "message": "Puudub ligipääs kaheastmelise kinnitamise teenusele? Kasuta Taastamise koodi, et kaheastmeline kinnitamine oma kontol välja lülitada." - }, "recoveryCodeTitle": { "message": "Taastamise kood" }, @@ -1680,9 +1733,6 @@ "defaultAutoFillOnPageLoadDesc": { "message": "\"Luba kontoandmete täitmine\" sisselülitamisel saad selle siiski individuaalselt iga kirje seadetes välja lülitada. See seadistus rakendub kõikidele kirjetele, mida pole eraldi konfigureeritud." }, - "itemAutoFillOnPageLoad": { - "message": "Luba kontoandmete täitmine (kui see on aktiveeritud)" - }, "autoFillOnPageLoadUseDefault": { "message": "Kasuta vaikeseadistust" }, @@ -1754,23 +1804,8 @@ "popup2faCloseMessage": { "message": "See aken sulgub, kui klikid oma e-posti aknale, et sealt kinnituskoodi vaadata. Soovid selle hüpikakna uues aknas avada, et seda ei juhtuks?" }, - "popupU2fCloseMessage": { - "message": "Kasutatav brauser ei suuda selles aknas U2F päringuid töödelda. Kas avan uue akna, et saaksid U2F abil sisse logida?" - }, - "enableFavicon": { - "message": "Kuva veebilehtede ikoone" - }, - "faviconDesc": { - "message": "Kuvab iga kirje kõrval lehekülje ikooni." - }, - "faviconDescAlt": { - "message": "Näita väikest tuttavat ikooni iga kirje kõrval. Kehtib ka sisselogitud kontodele." - }, - "enableBadgeCounter": { - "message": "Kuva kirjete arvu" - }, - "badgeCounterDesc": { - "message": "Kuvab numbrina konkreetsel veebilehel olevate kirjete arvu." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "cardholderName": { "message": "Kaardiomaniku nimi" @@ -1829,6 +1864,9 @@ "securityCode": { "message": "Turvakood" }, + "cardNumber": { + "message": "card number" + }, "ex": { "message": "nt." }, @@ -1931,32 +1969,81 @@ "typeNote": { "message": "Note" }, - "newItemHeader": { - "message": "Uus $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderLogin": { + "message": "New Login", + "description": "Header for new login item type" }, - "editItemHeader": { - "message": "Edit $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderCard": { + "message": "New Card", + "description": "Header for new card item type" }, - "viewItemHeader": { - "message": "View $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderIdentity": { + "message": "New Identity", + "description": "Header for new identity item type" + }, + "newItemHeaderNote": { + "message": "New Note", + "description": "Header for new note item type" + }, + "newItemHeaderSshKey": { + "message": "New SSH key", + "description": "Header for new SSH key item type" + }, + "newItemHeaderTextSend": { + "message": "New Text Send", + "description": "Header for new text send" + }, + "newItemHeaderFileSend": { + "message": "New File Send", + "description": "Header for new file send" + }, + "editItemHeaderLogin": { + "message": "Edit Login", + "description": "Header for edit login item type" + }, + "editItemHeaderCard": { + "message": "Edit Card", + "description": "Header for edit card item type" + }, + "editItemHeaderIdentity": { + "message": "Edit Identity", + "description": "Header for edit identity item type" + }, + "editItemHeaderNote": { + "message": "Edit Note", + "description": "Header for edit note item type" + }, + "editItemHeaderSshKey": { + "message": "Edit SSH key", + "description": "Header for edit SSH key item type" + }, + "editItemHeaderTextSend": { + "message": "Edit Text Send", + "description": "Header for edit text send" + }, + "editItemHeaderFileSend": { + "message": "Edit File Send", + "description": "Header for edit file send" + }, + "viewItemHeaderLogin": { + "message": "View Login", + "description": "Header for view login item type" + }, + "viewItemHeaderCard": { + "message": "View Card", + "description": "Header for view card item type" + }, + "viewItemHeaderIdentity": { + "message": "View Identity", + "description": "Header for view identity item type" + }, + "viewItemHeaderNote": { + "message": "View Note", + "description": "Header for view note item type" + }, + "viewItemHeaderSshKey": { + "message": "View SSH key", + "description": "Header for view SSH key item type" }, "passwordHistory": { "message": "Paroolide ajalugu" @@ -3129,6 +3216,24 @@ } } }, + "exportingOrganizationVaultFromPasswordManagerWithDataOwnershipDesc": { + "message": "Only the organization vault associated with $ORGANIZATION$ will be exported.", + "placeholders": { + "organization": { + "content": "$1", + "example": "My Org Name" + } + } + }, + "exportingOrganizationVaultFromAdminConsoleWithDataOwnershipDesc": { + "message": "Only the organization vault associated with $ORGANIZATION$ will be exported. My items collections will not be included.", + "placeholders": { + "organization": { + "content": "$1", + "example": "My Org Name" + } + } + }, "error": { "message": "Viga" }, @@ -3460,6 +3565,28 @@ "logInRequestSent": { "message": "Request sent" }, + "loginRequestApprovedForEmailOnDevice": { + "message": "Login request approved for $EMAIL$ on $DEVICE$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + }, + "device": { + "content": "$2", + "example": "Web app - Chrome" + } + } + }, + "youDeniedLoginAttemptFromAnotherDevice": { + "message": "You denied a login attempt from another device. If this was you, try to log in with the device again." + }, + "device": { + "message": "Device" + }, + "loginStatus": { + "message": "Login status" + }, "masterPasswordChanged": { "message": "Master password saved" }, @@ -3496,9 +3623,6 @@ "autofillPageLoadPolicyActivated": { "message": "Sinu organisatsioon ei võimalda lehe laadimisel automaatset kontoandmete täitmist kasutada." }, - "howToAutofill": { - "message": "Kuidas automaatselt täita" - }, "autofillSelectInfoWithCommand": { "message": "Select an item from this screen, use the shortcut $COMMAND$, or explore other options in settings.", "placeholders": { @@ -3556,6 +3680,94 @@ "rememberThisDeviceToMakeFutureLoginsSeamless": { "message": "Remember this device to make future logins seamless" }, + "manageDevices": { + "message": "Manage devices" + }, + "currentSession": { + "message": "Current session" + }, + "mobile": { + "message": "Mobile", + "description": "Mobile app" + }, + "extension": { + "message": "Extension", + "description": "Browser extension/addon" + }, + "desktop": { + "message": "Desktop", + "description": "Desktop app" + }, + "webVault": { + "message": "Web vault" + }, + "webApp": { + "message": "Web app" + }, + "cli": { + "message": "CLI" + }, + "sdk": { + "message": "SDK", + "description": "Software Development Kit" + }, + "requestPending": { + "message": "Request pending" + }, + "firstLogin": { + "message": "First login" + }, + "trusted": { + "message": "Trusted" + }, + "needsApproval": { + "message": "Needs approval" + }, + "devices": { + "message": "Devices" + }, + "accessAttemptBy": { + "message": "Access attempt by $EMAIL$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + } + } + }, + "confirmAccess": { + "message": "Confirm access" + }, + "denyAccess": { + "message": "Deny access" + }, + "time": { + "message": "Time" + }, + "deviceType": { + "message": "Device Type" + }, + "loginRequest": { + "message": "Login request" + }, + "thisRequestIsNoLongerValid": { + "message": "This request is no longer valid." + }, + "loginRequestHasAlreadyExpired": { + "message": "Login request has already expired." + }, + "justNow": { + "message": "Just now" + }, + "requestedXMinutesAgo": { + "message": "Requested $MINUTES$ minutes ago", + "placeholders": { + "minutes": { + "content": "$1", + "example": "5" + } + } + }, "deviceApprovalRequired": { "message": "Nõutav on seadme kinnitamine. Vali kinnitamise meetod alt:" }, @@ -3795,18 +4007,10 @@ "aliasDomain": { "message": "Alias domeen" }, - "passwordRepromptDisabledAutofillOnPageLoad": { - "message": "Items with master password re-prompt cannot be autofilled on page load. Autofill on page load turned off.", - "description": "Toast message for describing that master password re-prompt cannot be autofilled on page load." - }, "autofillOnPageLoadSetToDefault": { "message": "Autofill on page load set to use default setting.", "description": "Toast message for informing the user that autofill on page load has been set to the default setting." }, - "turnOffMasterPasswordPromptToEditField": { - "message": "Turn off master password re-prompt to edit this field", - "description": "Message appearing below the autofill on load message when master password reprompt is set for a vault item." - }, "toggleSideNavigation": { "message": "Toggle side navigation" }, @@ -4015,15 +4219,11 @@ "selectImportCollection": { "message": "Select a collection" }, - "importTargetHint": { - "message": "Select this option if you want the imported file contents moved to a $DESTINATION$", - "description": "Located as a hint under the import target. Will be appended by either folder or collection, depending if the user is importing into an individual or an organizational vault.", - "placeholders": { - "destination": { - "content": "$1", - "example": "folder or collection" - } - } + "importTargetHintCollection": { + "message": "Select this option if you want the imported file contents moved to a collection" + }, + "importTargetHintFolder": { + "message": "Select this option if you want the imported file contents moved to a folder" }, "importUnassignedItemsError": { "message": "File contains unassigned items." @@ -4080,9 +4280,6 @@ "passkeyNotCopiedAlert": { "message": "Pääsukoodi ei kopeerita kloonitud kirjele. Oled kindel, et soovid jätkata?" }, - "passkeyFeatureIsNotImplementedForAccountsWithoutMasterPassword": { - "message": "Verification required by the initiating site. This feature is not yet implemented for accounts without master password." - }, "logInWithPasskeyQuestion": { "message": "Log in with passkey?" }, @@ -4360,13 +4557,13 @@ "message": "Pääsuvõti on eemaldatud" }, "autofillSuggestions": { - "message": "Autofill suggestions" + "message": "Automaatse täitmise soovitused" }, "itemSuggestions": { "message": "Suggested items" }, "autofillSuggestionsTip": { - "message": "Save a login item for this site to autofill" + "message": "Automaatseks täitmiseks salvesta kirje selle saidi jaoks" }, "yourVaultIsEmpty": { "message": "Your vault is empty" @@ -4465,17 +4662,17 @@ } } }, - "copyFieldValue": { - "message": "Copy $FIELD$, $VALUE$", + "copyFieldCipherName": { + "message": "Copy $FIELD$, $CIPHERNAME$", "description": "Title for a button that copies a field value to the clipboard.", "placeholders": { "field": { "content": "$1", "example": "Username" }, - "value": { + "ciphername": { "content": "$2", - "example": "Foo" + "example": "Login Item" } } }, @@ -4533,7 +4730,7 @@ } }, "new": { - "message": "New" + "message": "Uus" }, "removeItem": { "message": "Remove $NAME$", @@ -4574,7 +4771,7 @@ "message": "Item history" }, "lastEdited": { - "message": "Last edited" + "message": "Viimati muudetud" }, "ownerYou": { "message": "Owner: You" @@ -4768,9 +4965,6 @@ } } }, - "enableAnimations": { - "message": "Enable animations" - }, "showAnimations": { "message": "Show animations" }, @@ -4983,15 +5177,9 @@ "itemLocation": { "message": "Item Location" }, - "fileSend": { - "message": "File Send" - }, "fileSends": { "message": "File Sends" }, - "textSend": { - "message": "Text Send" - }, "textSends": { "message": "Text Sends" }, @@ -5001,6 +5189,18 @@ "showNumberOfAutofillSuggestions": { "message": "Show number of login autofill suggestions on extension icon" }, + "accountAccessRequested": { + "message": "Account access requested" + }, + "confirmAccessAttempt": { + "message": "Confirm access attempt for $EMAIL$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + } + } + }, "showQuickCopyActions": { "message": "Show quick copy actions on Vault" }, @@ -5040,9 +5240,6 @@ "vaultCustomTimeoutMinimum": { "message": "Minimum custom timeout is 1 minute." }, - "additionalContentAvailable": { - "message": "Additional content is available" - }, "fileSavedToDevice": { "message": "File saved to device. Manage from your device downloads." }, @@ -5328,6 +5525,12 @@ "changeAtRiskPassword": { "message": "Change at-risk password" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "This login is at-risk and missing a website. Add a website and change the password for stronger security." + }, + "missingWebsite": { + "message": "Missing website" + }, "settingsVaultOptions": { "message": "Vault options" }, @@ -5374,7 +5577,19 @@ "message": "Import now" }, "hasItemsVaultNudgeTitle": { - "message": "Welcome to your vault!" + "message": "Tere tulemast sinu hoidlasse!" + }, + "phishingPageTitle": { + "message": "Phishing website" + }, + "phishingPageCloseTab": { + "message": "Close tab" + }, + "phishingPageContinue": { + "message": "Continue" + }, + "phishingPageLearnWhy": { + "message": "Why are you seeing this?" }, "hasItemsVaultNudgeBodyOne": { "message": "Autofill items for the current page" @@ -5451,11 +5666,33 @@ "message": "Easily create strong and unique passwords by clicking on the Generate password button to help you keep your logins secure.", "description": "Aria label for the body content of the generator nudge" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "noPermissionsViewPage": { "message": "You do not have permissions to view this page. Try logging in with a different account." }, "wasmNotSupported": { "message": "WebAssembly is not supported on your browser or is not enabled. WebAssembly is required to use the Bitwarden app.", "description": "'WebAssembly' is a technical term and should not be translated." + }, + "showMore": { + "message": "Show more" + }, + "showLess": { + "message": "Show less" + }, + "next": { + "message": "Next" + }, + "moreBreadcrumbs": { + "message": "More breadcrumbs", + "description": "This is used in the context of a breadcrumb navigation, indicating that there are more items in the breadcrumb trail that are not currently displayed." + }, + "confirmKeyConnectorDomain": { + "message": "Confirm Key Connector domain" } } diff --git a/apps/browser/src/_locales/eu/messages.json b/apps/browser/src/_locales/eu/messages.json index 393f922463e..deea3a4a245 100644 --- a/apps/browser/src/_locales/eu/messages.json +++ b/apps/browser/src/_locales/eu/messages.json @@ -547,12 +547,50 @@ "searchVault": { "message": "Bilatu kutxa gotorrean" }, + "resetSearch": { + "message": "Reset search" + }, + "archiveNoun": { + "message": "Archive", + "description": "Noun" + }, + "archiveVerb": { + "message": "Archive", + "description": "Verb" + }, + "unarchive": { + "message": "Unarchive" + }, + "itemsInArchive": { + "message": "Items in archive" + }, + "noItemsInArchive": { + "message": "No items in archive" + }, + "noItemsInArchiveDesc": { + "message": "Archived items will appear here and will be excluded from general search results and autofill suggestions." + }, + "itemSentToArchive": { + "message": "Item sent to archive" + }, + "itemRemovedFromArchive": { + "message": "Item removed from archive" + }, + "archiveItem": { + "message": "Archive item" + }, + "archiveItemConfirmDesc": { + "message": "Archived items are excluded from general search results and autofill suggestions. Are you sure you want to archive this item?" + }, "edit": { "message": "Editatu" }, "view": { "message": "Erakutsi" }, + "viewLogin": { + "message": "View login" + }, "noItemsInList": { "message": "Ez dago erakusteko elementurik." }, @@ -695,6 +733,15 @@ "invalidMasterPassword": { "message": "Pasahitz nagusi baliogabea" }, + "invalidMasterPasswordConfirmEmailAndHost": { + "message": "Invalid master password. Confirm your email is correct and your account was created on $HOST$.", + "placeholders": { + "host": { + "content": "$1", + "example": "vault.bitwarden.com" + } + } + }, "vaultTimeout": { "message": "Kutxa gotorraren itxaronaldia" }, @@ -1501,6 +1548,15 @@ "readSecurityKey": { "message": "Read security key" }, + "readingPasskeyLoading": { + "message": "Reading passkey..." + }, + "passkeyAuthenticationFailed": { + "message": "Passkey authentication failed" + }, + "useADifferentLogInMethod": { + "message": "Use a different log in method" + }, "awaitingSecurityKeyInteraction": { "message": "Awaiting security key interaction..." }, @@ -1519,9 +1575,6 @@ "selectTwoStepLoginMethod": { "message": "Select two-step login method" }, - "recoveryCodeDesc": { - "message": "Bi urratseko egiaztatzeko modu guztietarako sarbidea galdu duzu? Erabili zure berreskuratze-kodea zure kontuko bi urratseko egiaztatze hornitzaile guztiak desaktibatzeko." - }, "recoveryCodeTitle": { "message": "Berreskuratze-kodea" }, @@ -1680,9 +1733,6 @@ "defaultAutoFillOnPageLoadDesc": { "message": "Orrialdearen kargatze aukeretan auto-betetzea aktibatu ondoren, banakako saio-hasierak aktibatu edo desaktibatu ditzakezu." }, - "itemAutoFillOnPageLoad": { - "message": "Auto-bete orrialdea kargatzean (ezarpenetan gaituta badago)" - }, "autoFillOnPageLoadUseDefault": { "message": "Erabili ezarpen lehenetsiak" }, @@ -1754,23 +1804,8 @@ "popup2faCloseMessage": { "message": "Leiho gainjarritik kanpora klik eginez gero, zure emaila egiaztatzeko leiho gainjarria itxi egingo da. Leiho berri batean ireki nahi duzu leiho gainjarri hau itxi ez dadin?" }, - "popupU2fCloseMessage": { - "message": "Nabigatzaile honek ezin ditu U2F eskaerak prozesatu leiho gainjarri honetan. Leiho berri batean ireki nahi duzu leiho gainjarri hau saioa U2F erabiliz hasi ahal izateko?" - }, - "enableFavicon": { - "message": "Erakutsi webguneko ikonoak" - }, - "faviconDesc": { - "message": "Erakutsi irudi bat saio-hasiera bakoitzaren ondoan." - }, - "faviconDescAlt": { - "message": "Show a recognizable image next to each login. Applies to all logged in accounts." - }, - "enableBadgeCounter": { - "message": "Erakutsi txartelen kontagailua" - }, - "badgeCounterDesc": { - "message": "Adierazi zenbat saio-hasiera dituzun uneko webgunerako." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "cardholderName": { "message": "Txartelaren titularraren izena" @@ -1829,6 +1864,9 @@ "securityCode": { "message": "Segurtasun-kodea" }, + "cardNumber": { + "message": "card number" + }, "ex": { "message": "adib." }, @@ -1931,32 +1969,81 @@ "typeNote": { "message": "Note" }, - "newItemHeader": { - "message": "New $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderLogin": { + "message": "New Login", + "description": "Header for new login item type" }, - "editItemHeader": { - "message": "Edit $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderCard": { + "message": "New Card", + "description": "Header for new card item type" }, - "viewItemHeader": { - "message": "View $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderIdentity": { + "message": "New Identity", + "description": "Header for new identity item type" + }, + "newItemHeaderNote": { + "message": "New Note", + "description": "Header for new note item type" + }, + "newItemHeaderSshKey": { + "message": "New SSH key", + "description": "Header for new SSH key item type" + }, + "newItemHeaderTextSend": { + "message": "New Text Send", + "description": "Header for new text send" + }, + "newItemHeaderFileSend": { + "message": "New File Send", + "description": "Header for new file send" + }, + "editItemHeaderLogin": { + "message": "Edit Login", + "description": "Header for edit login item type" + }, + "editItemHeaderCard": { + "message": "Edit Card", + "description": "Header for edit card item type" + }, + "editItemHeaderIdentity": { + "message": "Edit Identity", + "description": "Header for edit identity item type" + }, + "editItemHeaderNote": { + "message": "Edit Note", + "description": "Header for edit note item type" + }, + "editItemHeaderSshKey": { + "message": "Edit SSH key", + "description": "Header for edit SSH key item type" + }, + "editItemHeaderTextSend": { + "message": "Edit Text Send", + "description": "Header for edit text send" + }, + "editItemHeaderFileSend": { + "message": "Edit File Send", + "description": "Header for edit file send" + }, + "viewItemHeaderLogin": { + "message": "View Login", + "description": "Header for view login item type" + }, + "viewItemHeaderCard": { + "message": "View Card", + "description": "Header for view card item type" + }, + "viewItemHeaderIdentity": { + "message": "View Identity", + "description": "Header for view identity item type" + }, + "viewItemHeaderNote": { + "message": "View Note", + "description": "Header for view note item type" + }, + "viewItemHeaderSshKey": { + "message": "View SSH key", + "description": "Header for view SSH key item type" }, "passwordHistory": { "message": "Pasahitz historia" @@ -3129,6 +3216,24 @@ } } }, + "exportingOrganizationVaultFromPasswordManagerWithDataOwnershipDesc": { + "message": "Only the organization vault associated with $ORGANIZATION$ will be exported.", + "placeholders": { + "organization": { + "content": "$1", + "example": "My Org Name" + } + } + }, + "exportingOrganizationVaultFromAdminConsoleWithDataOwnershipDesc": { + "message": "Only the organization vault associated with $ORGANIZATION$ will be exported. My items collections will not be included.", + "placeholders": { + "organization": { + "content": "$1", + "example": "My Org Name" + } + } + }, "error": { "message": "Akatsa" }, @@ -3460,6 +3565,28 @@ "logInRequestSent": { "message": "Request sent" }, + "loginRequestApprovedForEmailOnDevice": { + "message": "Login request approved for $EMAIL$ on $DEVICE$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + }, + "device": { + "content": "$2", + "example": "Web app - Chrome" + } + } + }, + "youDeniedLoginAttemptFromAnotherDevice": { + "message": "You denied a login attempt from another device. If this was you, try to log in with the device again." + }, + "device": { + "message": "Device" + }, + "loginStatus": { + "message": "Login status" + }, "masterPasswordChanged": { "message": "Master password saved" }, @@ -3496,9 +3623,6 @@ "autofillPageLoadPolicyActivated": { "message": "Your organization policies have turned on autofill on page load." }, - "howToAutofill": { - "message": "How to autofill" - }, "autofillSelectInfoWithCommand": { "message": "Select an item from this screen, use the shortcut $COMMAND$, or explore other options in settings.", "placeholders": { @@ -3556,6 +3680,94 @@ "rememberThisDeviceToMakeFutureLoginsSeamless": { "message": "Remember this device to make future logins seamless" }, + "manageDevices": { + "message": "Manage devices" + }, + "currentSession": { + "message": "Current session" + }, + "mobile": { + "message": "Mobile", + "description": "Mobile app" + }, + "extension": { + "message": "Extension", + "description": "Browser extension/addon" + }, + "desktop": { + "message": "Desktop", + "description": "Desktop app" + }, + "webVault": { + "message": "Web vault" + }, + "webApp": { + "message": "Web app" + }, + "cli": { + "message": "CLI" + }, + "sdk": { + "message": "SDK", + "description": "Software Development Kit" + }, + "requestPending": { + "message": "Request pending" + }, + "firstLogin": { + "message": "First login" + }, + "trusted": { + "message": "Trusted" + }, + "needsApproval": { + "message": "Needs approval" + }, + "devices": { + "message": "Devices" + }, + "accessAttemptBy": { + "message": "Access attempt by $EMAIL$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + } + } + }, + "confirmAccess": { + "message": "Confirm access" + }, + "denyAccess": { + "message": "Deny access" + }, + "time": { + "message": "Time" + }, + "deviceType": { + "message": "Device Type" + }, + "loginRequest": { + "message": "Login request" + }, + "thisRequestIsNoLongerValid": { + "message": "This request is no longer valid." + }, + "loginRequestHasAlreadyExpired": { + "message": "Login request has already expired." + }, + "justNow": { + "message": "Just now" + }, + "requestedXMinutesAgo": { + "message": "Requested $MINUTES$ minutes ago", + "placeholders": { + "minutes": { + "content": "$1", + "example": "5" + } + } + }, "deviceApprovalRequired": { "message": "Device approval required. Select an approval option below:" }, @@ -3795,18 +4007,10 @@ "aliasDomain": { "message": "Alias domain" }, - "passwordRepromptDisabledAutofillOnPageLoad": { - "message": "Items with master password re-prompt cannot be autofilled on page load. Autofill on page load turned off.", - "description": "Toast message for describing that master password re-prompt cannot be autofilled on page load." - }, "autofillOnPageLoadSetToDefault": { "message": "Autofill on page load set to use default setting.", "description": "Toast message for informing the user that autofill on page load has been set to the default setting." }, - "turnOffMasterPasswordPromptToEditField": { - "message": "Turn off master password re-prompt to edit this field", - "description": "Message appearing below the autofill on load message when master password reprompt is set for a vault item." - }, "toggleSideNavigation": { "message": "Toggle side navigation" }, @@ -4015,15 +4219,11 @@ "selectImportCollection": { "message": "Select a collection" }, - "importTargetHint": { - "message": "Select this option if you want the imported file contents moved to a $DESTINATION$", - "description": "Located as a hint under the import target. Will be appended by either folder or collection, depending if the user is importing into an individual or an organizational vault.", - "placeholders": { - "destination": { - "content": "$1", - "example": "folder or collection" - } - } + "importTargetHintCollection": { + "message": "Select this option if you want the imported file contents moved to a collection" + }, + "importTargetHintFolder": { + "message": "Select this option if you want the imported file contents moved to a folder" }, "importUnassignedItemsError": { "message": "File contains unassigned items." @@ -4080,9 +4280,6 @@ "passkeyNotCopiedAlert": { "message": "The passkey will not be copied to the cloned item. Do you want to continue cloning this item?" }, - "passkeyFeatureIsNotImplementedForAccountsWithoutMasterPassword": { - "message": "Verification required by the initiating site. This feature is not yet implemented for accounts without master password." - }, "logInWithPasskeyQuestion": { "message": "Log in with passkey?" }, @@ -4465,17 +4662,17 @@ } } }, - "copyFieldValue": { - "message": "Copy $FIELD$, $VALUE$", + "copyFieldCipherName": { + "message": "Copy $FIELD$, $CIPHERNAME$", "description": "Title for a button that copies a field value to the clipboard.", "placeholders": { "field": { "content": "$1", "example": "Username" }, - "value": { + "ciphername": { "content": "$2", - "example": "Foo" + "example": "Login Item" } } }, @@ -4768,9 +4965,6 @@ } } }, - "enableAnimations": { - "message": "Enable animations" - }, "showAnimations": { "message": "Show animations" }, @@ -4983,15 +5177,9 @@ "itemLocation": { "message": "Item Location" }, - "fileSend": { - "message": "File Send" - }, "fileSends": { "message": "File Sends" }, - "textSend": { - "message": "Text Send" - }, "textSends": { "message": "Text Sends" }, @@ -5001,6 +5189,18 @@ "showNumberOfAutofillSuggestions": { "message": "Show number of login autofill suggestions on extension icon" }, + "accountAccessRequested": { + "message": "Account access requested" + }, + "confirmAccessAttempt": { + "message": "Confirm access attempt for $EMAIL$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + } + } + }, "showQuickCopyActions": { "message": "Show quick copy actions on Vault" }, @@ -5040,9 +5240,6 @@ "vaultCustomTimeoutMinimum": { "message": "Minimum custom timeout is 1 minute." }, - "additionalContentAvailable": { - "message": "Additional content is available" - }, "fileSavedToDevice": { "message": "File saved to device. Manage from your device downloads." }, @@ -5328,6 +5525,12 @@ "changeAtRiskPassword": { "message": "Change at-risk password" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "This login is at-risk and missing a website. Add a website and change the password for stronger security." + }, + "missingWebsite": { + "message": "Missing website" + }, "settingsVaultOptions": { "message": "Vault options" }, @@ -5376,6 +5579,18 @@ "hasItemsVaultNudgeTitle": { "message": "Welcome to your vault!" }, + "phishingPageTitle": { + "message": "Phishing website" + }, + "phishingPageCloseTab": { + "message": "Close tab" + }, + "phishingPageContinue": { + "message": "Continue" + }, + "phishingPageLearnWhy": { + "message": "Why are you seeing this?" + }, "hasItemsVaultNudgeBodyOne": { "message": "Autofill items for the current page" }, @@ -5451,11 +5666,33 @@ "message": "Easily create strong and unique passwords by clicking on the Generate password button to help you keep your logins secure.", "description": "Aria label for the body content of the generator nudge" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "noPermissionsViewPage": { "message": "You do not have permissions to view this page. Try logging in with a different account." }, "wasmNotSupported": { "message": "WebAssembly is not supported on your browser or is not enabled. WebAssembly is required to use the Bitwarden app.", "description": "'WebAssembly' is a technical term and should not be translated." + }, + "showMore": { + "message": "Show more" + }, + "showLess": { + "message": "Show less" + }, + "next": { + "message": "Next" + }, + "moreBreadcrumbs": { + "message": "More breadcrumbs", + "description": "This is used in the context of a breadcrumb navigation, indicating that there are more items in the breadcrumb trail that are not currently displayed." + }, + "confirmKeyConnectorDomain": { + "message": "Confirm Key Connector domain" } } diff --git a/apps/browser/src/_locales/fa/messages.json b/apps/browser/src/_locales/fa/messages.json index fb9380d5317..ea1d68d7cf4 100644 --- a/apps/browser/src/_locales/fa/messages.json +++ b/apps/browser/src/_locales/fa/messages.json @@ -547,12 +547,50 @@ "searchVault": { "message": "جستجوی گاوصندوق" }, + "resetSearch": { + "message": "Reset search" + }, + "archiveNoun": { + "message": "Archive", + "description": "Noun" + }, + "archiveVerb": { + "message": "Archive", + "description": "Verb" + }, + "unarchive": { + "message": "Unarchive" + }, + "itemsInArchive": { + "message": "Items in archive" + }, + "noItemsInArchive": { + "message": "No items in archive" + }, + "noItemsInArchiveDesc": { + "message": "Archived items will appear here and will be excluded from general search results and autofill suggestions." + }, + "itemSentToArchive": { + "message": "Item sent to archive" + }, + "itemRemovedFromArchive": { + "message": "Item removed from archive" + }, + "archiveItem": { + "message": "Archive item" + }, + "archiveItemConfirmDesc": { + "message": "Archived items are excluded from general search results and autofill suggestions. Are you sure you want to archive this item?" + }, "edit": { "message": "ویرایش" }, "view": { "message": "مشاهده" }, + "viewLogin": { + "message": "View login" + }, "noItemsInList": { "message": "هیچ موردی برای نمایش وجود ندارد." }, @@ -695,6 +733,15 @@ "invalidMasterPassword": { "message": "کلمه عبور اصلی نامعتبر است" }, + "invalidMasterPasswordConfirmEmailAndHost": { + "message": "Invalid master password. Confirm your email is correct and your account was created on $HOST$.", + "placeholders": { + "host": { + "content": "$1", + "example": "vault.bitwarden.com" + } + } + }, "vaultTimeout": { "message": "متوقف شدن گاو‌صندوق" }, @@ -1501,6 +1548,15 @@ "readSecurityKey": { "message": "خواندن کلید امنیتی" }, + "readingPasskeyLoading": { + "message": "Reading passkey..." + }, + "passkeyAuthenticationFailed": { + "message": "Passkey authentication failed" + }, + "useADifferentLogInMethod": { + "message": "Use a different log in method" + }, "awaitingSecurityKeyInteraction": { "message": "در انتظار تعامل با کلید امنیتی..." }, @@ -1519,9 +1575,6 @@ "selectTwoStepLoginMethod": { "message": "انتخاب ورود دو مرحله‌ای" }, - "recoveryCodeDesc": { - "message": "دسترسی به تمامی ارائه‌دهندگان دو مرحله‌ای را از دست داده‌اید؟ از کد بازیابی خود برای غیرفعال‌سازی ارائه‌دهندگان دو مرحله‌ای از حسابتان استفاده کنید." - }, "recoveryCodeTitle": { "message": "کد بازیابی" }, @@ -1680,9 +1733,6 @@ "defaultAutoFillOnPageLoadDesc": { "message": "می‌توانید پر کردن خودکار هنگام بارگیری صفحه را برای موارد ورود به سیستم از نمای ویرایش مورد خاموش کنید." }, - "itemAutoFillOnPageLoad": { - "message": "پر کردن خودکار بارگذاری صفحه (درصورت فعال بودن در گزینه‌ها)" - }, "autoFillOnPageLoadUseDefault": { "message": "استفاده از تنظیمات پیش‌فرض" }, @@ -1754,23 +1804,8 @@ "popup2faCloseMessage": { "message": "در خارج از پنجره پاپ آپ کلیک کنید که ایمیل‌تان بررسی شود برای کد تأییدیه که باعث می‌شود این پنجره بسته شود. آیا می‌خواهید این پاپ آپ را در یک پنجره جدید باز کنید تا آن را نبندید؟" }, - "popupU2fCloseMessage": { - "message": "این مرورگر نمی‌تواند درخواستهای U2F را در این پنجره پاپ آپ پردازش کند. آیا می‌خواهید این پنجره را در یک پنجره جدید باز کنید تا بتوانید با استفاده از U2F وارد شوید؟" - }, - "enableFavicon": { - "message": "نمایش نمادهای وب‌سایت" - }, - "faviconDesc": { - "message": "یک تصویر قابل تشخیص در کنار هر ورود نشان دهید." - }, - "faviconDescAlt": { - "message": "نمایش تصویر قابل تشخیص کنار هر ورود به سیستم. برای تمام حساب‌های کاربری وارد شده اعمال می‌شود." - }, - "enableBadgeCounter": { - "message": "نمایش شمارنده نشان" - }, - "badgeCounterDesc": { - "message": "تعداد ورود به صفحه وب فعلی را مشخص کن." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "cardholderName": { "message": "نام صاحب کارت" @@ -1829,6 +1864,9 @@ "securityCode": { "message": "کد امنیتی" }, + "cardNumber": { + "message": "card number" + }, "ex": { "message": "مثال." }, @@ -1931,32 +1969,81 @@ "typeNote": { "message": "یادداشت" }, - "newItemHeader": { - "message": "$TYPE$ جدید", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderLogin": { + "message": "New Login", + "description": "Header for new login item type" }, - "editItemHeader": { - "message": "ویرایش $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderCard": { + "message": "New Card", + "description": "Header for new card item type" }, - "viewItemHeader": { - "message": "مشاهده $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderIdentity": { + "message": "New Identity", + "description": "Header for new identity item type" + }, + "newItemHeaderNote": { + "message": "New Note", + "description": "Header for new note item type" + }, + "newItemHeaderSshKey": { + "message": "New SSH key", + "description": "Header for new SSH key item type" + }, + "newItemHeaderTextSend": { + "message": "New Text Send", + "description": "Header for new text send" + }, + "newItemHeaderFileSend": { + "message": "New File Send", + "description": "Header for new file send" + }, + "editItemHeaderLogin": { + "message": "Edit Login", + "description": "Header for edit login item type" + }, + "editItemHeaderCard": { + "message": "Edit Card", + "description": "Header for edit card item type" + }, + "editItemHeaderIdentity": { + "message": "Edit Identity", + "description": "Header for edit identity item type" + }, + "editItemHeaderNote": { + "message": "Edit Note", + "description": "Header for edit note item type" + }, + "editItemHeaderSshKey": { + "message": "Edit SSH key", + "description": "Header for edit SSH key item type" + }, + "editItemHeaderTextSend": { + "message": "Edit Text Send", + "description": "Header for edit text send" + }, + "editItemHeaderFileSend": { + "message": "Edit File Send", + "description": "Header for edit file send" + }, + "viewItemHeaderLogin": { + "message": "View Login", + "description": "Header for view login item type" + }, + "viewItemHeaderCard": { + "message": "View Card", + "description": "Header for view card item type" + }, + "viewItemHeaderIdentity": { + "message": "View Identity", + "description": "Header for view identity item type" + }, + "viewItemHeaderNote": { + "message": "View Note", + "description": "Header for view note item type" + }, + "viewItemHeaderSshKey": { + "message": "View SSH key", + "description": "Header for view SSH key item type" }, "passwordHistory": { "message": "تاریخچه کلمه عبور" @@ -3129,6 +3216,24 @@ } } }, + "exportingOrganizationVaultFromPasswordManagerWithDataOwnershipDesc": { + "message": "Only the organization vault associated with $ORGANIZATION$ will be exported.", + "placeholders": { + "organization": { + "content": "$1", + "example": "My Org Name" + } + } + }, + "exportingOrganizationVaultFromAdminConsoleWithDataOwnershipDesc": { + "message": "Only the organization vault associated with $ORGANIZATION$ will be exported. My items collections will not be included.", + "placeholders": { + "organization": { + "content": "$1", + "example": "My Org Name" + } + } + }, "error": { "message": "خطا" }, @@ -3460,6 +3565,28 @@ "logInRequestSent": { "message": "درخواست ارسال شد" }, + "loginRequestApprovedForEmailOnDevice": { + "message": "Login request approved for $EMAIL$ on $DEVICE$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + }, + "device": { + "content": "$2", + "example": "Web app - Chrome" + } + } + }, + "youDeniedLoginAttemptFromAnotherDevice": { + "message": "You denied a login attempt from another device. If this was you, try to log in with the device again." + }, + "device": { + "message": "Device" + }, + "loginStatus": { + "message": "Login status" + }, "masterPasswordChanged": { "message": "Master password saved" }, @@ -3496,9 +3623,6 @@ "autofillPageLoadPolicyActivated": { "message": "خط مشی‌های سازمان شما پر کردن خودکار هنگام بارگیری صفحه را روشن کرده است." }, - "howToAutofill": { - "message": "نحوه پر کردن خودکار" - }, "autofillSelectInfoWithCommand": { "message": "یک مورد را از این صفحه انتخاب کنید، از میان‌بر $COMMAND$ استفاده کنید، یا گزینه‌های دیگر را در تنظیمات بررسی کنید.", "placeholders": { @@ -3556,6 +3680,94 @@ "rememberThisDeviceToMakeFutureLoginsSeamless": { "message": "این دستگاه را به خاطر بسپار تا ورودهای بعدی بدون مشکل انجام شود" }, + "manageDevices": { + "message": "Manage devices" + }, + "currentSession": { + "message": "Current session" + }, + "mobile": { + "message": "Mobile", + "description": "Mobile app" + }, + "extension": { + "message": "Extension", + "description": "Browser extension/addon" + }, + "desktop": { + "message": "Desktop", + "description": "Desktop app" + }, + "webVault": { + "message": "Web vault" + }, + "webApp": { + "message": "Web app" + }, + "cli": { + "message": "CLI" + }, + "sdk": { + "message": "SDK", + "description": "Software Development Kit" + }, + "requestPending": { + "message": "Request pending" + }, + "firstLogin": { + "message": "First login" + }, + "trusted": { + "message": "Trusted" + }, + "needsApproval": { + "message": "Needs approval" + }, + "devices": { + "message": "Devices" + }, + "accessAttemptBy": { + "message": "Access attempt by $EMAIL$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + } + } + }, + "confirmAccess": { + "message": "Confirm access" + }, + "denyAccess": { + "message": "Deny access" + }, + "time": { + "message": "Time" + }, + "deviceType": { + "message": "Device Type" + }, + "loginRequest": { + "message": "Login request" + }, + "thisRequestIsNoLongerValid": { + "message": "This request is no longer valid." + }, + "loginRequestHasAlreadyExpired": { + "message": "Login request has already expired." + }, + "justNow": { + "message": "Just now" + }, + "requestedXMinutesAgo": { + "message": "Requested $MINUTES$ minutes ago", + "placeholders": { + "minutes": { + "content": "$1", + "example": "5" + } + } + }, "deviceApprovalRequired": { "message": "تأیید دستگاه لازم است. یک روش تأیید انتخاب کنید:" }, @@ -3795,18 +4007,10 @@ "aliasDomain": { "message": "دامنه مستعار" }, - "passwordRepromptDisabledAutofillOnPageLoad": { - "message": "موارد با درخواست مجدد کلمه عبور اصلی را نمی‌توان در بارگذاری صفحه به‌صورت خودکار پر کرد. پر کردن خودکار در بارگیری صفحه خاموش شد.", - "description": "Toast message for describing that master password re-prompt cannot be autofilled on page load." - }, "autofillOnPageLoadSetToDefault": { "message": "پر کردن خودکار در بارگیری صفحه برای استفاده از تنظیمات پیش‌فرض تنظیم شده است.", "description": "Toast message for informing the user that autofill on page load has been set to the default setting." }, - "turnOffMasterPasswordPromptToEditField": { - "message": "برای ویرایش این فیلد، درخواست مجدد کلمه عبور اصلی را خاموش کنید", - "description": "Message appearing below the autofill on load message when master password reprompt is set for a vault item." - }, "toggleSideNavigation": { "message": "تغییر وضعیت ناوبری کناری" }, @@ -4015,15 +4219,11 @@ "selectImportCollection": { "message": "انتخاب یک مجموعه" }, - "importTargetHint": { - "message": "اگر می‌خواهید محتوای پرونده درون ریزی شده به $DESTINATION$ منتقل شود، این گزینه را انتخاب کنید", - "description": "Located as a hint under the import target. Will be appended by either folder or collection, depending if the user is importing into an individual or an organizational vault.", - "placeholders": { - "destination": { - "content": "$1", - "example": "folder or collection" - } - } + "importTargetHintCollection": { + "message": "Select this option if you want the imported file contents moved to a collection" + }, + "importTargetHintFolder": { + "message": "Select this option if you want the imported file contents moved to a folder" }, "importUnassignedItemsError": { "message": "پرونده حاوی موارد اختصاص نیافته است." @@ -4080,9 +4280,6 @@ "passkeyNotCopiedAlert": { "message": "کلید عبور در مورد شبیه‌سازی شده کپی نمی‌شود. آیا می‌خواهید به شبیه‌سازی این مورد ادامه دهید؟" }, - "passkeyFeatureIsNotImplementedForAccountsWithoutMasterPassword": { - "message": "تأیید توسط سایت آغازگر الزامی است. این ویژگی هنوز برای حساب‌های کاربری بدون کلمه عبور اصلی اجرا نشده است." - }, "logInWithPasskeyQuestion": { "message": "با کلید عبور وارد می‌شوید؟" }, @@ -4465,17 +4662,17 @@ } } }, - "copyFieldValue": { - "message": "کپی $FIELD$، $VALUE$", + "copyFieldCipherName": { + "message": "Copy $FIELD$, $CIPHERNAME$", "description": "Title for a button that copies a field value to the clipboard.", "placeholders": { "field": { "content": "$1", "example": "Username" }, - "value": { + "ciphername": { "content": "$2", - "example": "Foo" + "example": "Login Item" } } }, @@ -4768,9 +4965,6 @@ } } }, - "enableAnimations": { - "message": "فعال‌سازی انیمیشن‌ها" - }, "showAnimations": { "message": "نمایش انیمیشن‌ها" }, @@ -4983,15 +5177,9 @@ "itemLocation": { "message": "مکان مورد" }, - "fileSend": { - "message": "پرونده ارسال" - }, "fileSends": { "message": "پرونده ارسال‌ها" }, - "textSend": { - "message": "ارسال متن" - }, "textSends": { "message": "ارسال‌های متن" }, @@ -5001,6 +5189,18 @@ "showNumberOfAutofillSuggestions": { "message": "نمایش تعداد پیشنهادهای پر کردن خودکار ورود در نماد افزونه" }, + "accountAccessRequested": { + "message": "Account access requested" + }, + "confirmAccessAttempt": { + "message": "Confirm access attempt for $EMAIL$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + } + } + }, "showQuickCopyActions": { "message": "نمایش عملیات کپی سریع در گاوصندوق" }, @@ -5040,9 +5240,6 @@ "vaultCustomTimeoutMinimum": { "message": "حداقل مهلت زمانی سفارشی ۱ دقیقه است." }, - "additionalContentAvailable": { - "message": "محتوای اضافی در دسترس است" - }, "fileSavedToDevice": { "message": "پرونده در دستگاه ذخیره شد. از بخش بارگیری‌های دستگاه خود مدیریت کنید." }, @@ -5328,6 +5525,12 @@ "changeAtRiskPassword": { "message": "تغییر کلمه عبور در معرض خطر" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "This login is at-risk and missing a website. Add a website and change the password for stronger security." + }, + "missingWebsite": { + "message": "Missing website" + }, "settingsVaultOptions": { "message": "گزینه‌های گاوصندوق" }, @@ -5376,6 +5579,18 @@ "hasItemsVaultNudgeTitle": { "message": "به گاوصندوق خود خوش آمدید!" }, + "phishingPageTitle": { + "message": "Phishing website" + }, + "phishingPageCloseTab": { + "message": "Close tab" + }, + "phishingPageContinue": { + "message": "Continue" + }, + "phishingPageLearnWhy": { + "message": "Why are you seeing this?" + }, "hasItemsVaultNudgeBodyOne": { "message": "پر کردن خودکار موارد برای صفحه فعلی" }, @@ -5451,11 +5666,33 @@ "message": "با کلیک روی دکمه تولید کلمه عبور، به‌راحتی کلمات عبور قوی و منحصر به‌ فرد ایجاد کنید تا ورودهای شما ایمن باقی بمانند.", "description": "Aria label for the body content of the generator nudge" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "noPermissionsViewPage": { "message": "شما اجازه دسترسی به این صفحه را ندارید. لطفاً با حساب کاربری دیگری وارد شوید." }, "wasmNotSupported": { "message": "WebAssembly در مرورگر شما پشتیبانی نمی‌شود یا فعال نیست. برای استفاده از برنامه Bitwarden، فعال بودن WebAssembly الزامی است.", "description": "'WebAssembly' is a technical term and should not be translated." + }, + "showMore": { + "message": "Show more" + }, + "showLess": { + "message": "Show less" + }, + "next": { + "message": "Next" + }, + "moreBreadcrumbs": { + "message": "More breadcrumbs", + "description": "This is used in the context of a breadcrumb navigation, indicating that there are more items in the breadcrumb trail that are not currently displayed." + }, + "confirmKeyConnectorDomain": { + "message": "Confirm Key Connector domain" } } diff --git a/apps/browser/src/_locales/fi/messages.json b/apps/browser/src/_locales/fi/messages.json index 85c47f2733b..472ee14efab 100644 --- a/apps/browser/src/_locales/fi/messages.json +++ b/apps/browser/src/_locales/fi/messages.json @@ -547,12 +547,50 @@ "searchVault": { "message": "Etsi holvista" }, + "resetSearch": { + "message": "Nollaa haku" + }, + "archiveNoun": { + "message": "Archive", + "description": "Noun" + }, + "archiveVerb": { + "message": "Archive", + "description": "Verb" + }, + "unarchive": { + "message": "Unarchive" + }, + "itemsInArchive": { + "message": "Items in archive" + }, + "noItemsInArchive": { + "message": "No items in archive" + }, + "noItemsInArchiveDesc": { + "message": "Archived items will appear here and will be excluded from general search results and autofill suggestions." + }, + "itemSentToArchive": { + "message": "Item sent to archive" + }, + "itemRemovedFromArchive": { + "message": "Item removed from archive" + }, + "archiveItem": { + "message": "Archive item" + }, + "archiveItemConfirmDesc": { + "message": "Archived items are excluded from general search results and autofill suggestions. Are you sure you want to archive this item?" + }, "edit": { "message": "Muokkaa" }, "view": { "message": "Näytä" }, + "viewLogin": { + "message": "View login" + }, "noItemsInList": { "message": "Näytettäviä kohteita ei ole." }, @@ -695,6 +733,15 @@ "invalidMasterPassword": { "message": "Virheellinen pääsalasana" }, + "invalidMasterPasswordConfirmEmailAndHost": { + "message": "Invalid master password. Confirm your email is correct and your account was created on $HOST$.", + "placeholders": { + "host": { + "content": "$1", + "example": "vault.bitwarden.com" + } + } + }, "vaultTimeout": { "message": "Holvin aikakatkaisu" }, @@ -887,7 +934,7 @@ "message": "Viimeistele kirjautuminen seuraamalla seuraavia vaiheita." }, "followTheStepsBelowToFinishLoggingInWithSecurityKey": { - "message": "Follow the steps below to finish logging in with your security key." + "message": "Seuraa alla olevia ohjeita, jotta pääset kirjautumaan suojausavaimellasi." }, "restartRegistration": { "message": "Aloita rekisteröityminen alusta" @@ -1063,7 +1110,7 @@ "message": "Tallenna" }, "notificationViewAria": { - "message": "View $ITEMNAME$, opens in new window", + "message": "Näytä $ITEMNAME$. Avautuu uudessa ikkunassa", "placeholders": { "itemName": { "content": "$1" @@ -1093,15 +1140,15 @@ } }, "notificationLoginSaveConfirmation": { - "message": "saved to Bitwarden.", + "message": "tallennettu Bitwardeniin.", "description": "Shown to user after item is saved." }, "notificationLoginUpdatedConfirmation": { - "message": "updated in Bitwarden.", + "message": "päivitetty Bitwardeniin.", "description": "Shown to user after item is updated." }, "selectItemAriaLabel": { - "message": "Select $ITEMTYPE$, $ITEMNAME$", + "message": "Valitse $ITEMTYPE$, $ITEMNAME$", "description": "Used by screen readers. $1 is the item type (like vault or folder), $2 is the selected item name.", "placeholders": { "itemType": { @@ -1121,7 +1168,7 @@ "description": "Button text for updating an existing login entry." }, "unlockToSave": { - "message": "Unlock to save this login", + "message": "Avaa tallentaaksesi tämä kirjautumistieto", "description": "User prompt to take action in order to save the login they just entered." }, "saveLogin": { @@ -1174,10 +1221,10 @@ "description": "Detailed error message shown when saving login details fails." }, "changePasswordWarning": { - "message": "After changing your password, you will need to log in with your new password. Active sessions on other devices will be logged out within one hour." + "message": "Kun olet vaihtanut salasanaasi, sinun täytyy kirjautua sisään uudella salasanalla. Aktiiviset istunnot muilla laitteilla kirjataan ulos tunnin kuluessa." }, "accountRecoveryUpdateMasterPasswordSubtitle": { - "message": "Change your master password to complete account recovery." + "message": "Vaihda pääsalasanasi, jotta voit jatkaa tilin palautusta." }, "enableChangedPasswordNotification": { "message": "Kysy päivitetäänkö kirjautumistieto" @@ -1372,7 +1419,7 @@ "message": "Ominaisuus ei ole käytettävissä" }, "legacyEncryptionUnsupported": { - "message": "Legacy encryption is no longer supported. Please contact support to recover your account." + "message": "Vanhaa salausta ei enää tueta. Ota yhteyttä tukeen palauttaaksesi tilisi." }, "premiumMembership": { "message": "Premium-jäsenyys" @@ -1501,6 +1548,15 @@ "readSecurityKey": { "message": "Lue suojausavain" }, + "readingPasskeyLoading": { + "message": "Reading passkey..." + }, + "passkeyAuthenticationFailed": { + "message": "Passkey authentication failed" + }, + "useADifferentLogInMethod": { + "message": "Use a different log in method" + }, "awaitingSecurityKeyInteraction": { "message": "Odotetaan suojausavaimen aktivointia..." }, @@ -1519,9 +1575,6 @@ "selectTwoStepLoginMethod": { "message": "Valitse todennustapa" }, - "recoveryCodeDesc": { - "message": "Etkö voi käyttää kaksivaiheisen kirjautumisen todentajiasi? Poista kaikki tilillesi määritetyt todentajat käytöstä palautuskoodillasi." - }, "recoveryCodeTitle": { "message": "Palautuskoodi" }, @@ -1606,10 +1659,10 @@ "message": "Automaattitäytön ehdotukset" }, "autofillSpotlightTitle": { - "message": "Easily find autofill suggestions" + "message": "Löydä helposti automaattisen täytön ehdotukset" }, "autofillSpotlightDesc": { - "message": "Turn off your browser's autofill settings, so they don't conflict with Bitwarden." + "message": "Poista käytöstä selaimesi oletuksena asetetut automaattisen täytön asetukset, joten ne eivät aiheuta ongelmia Bitwardenin kanssa." }, "turnOffBrowserAutofill": { "message": "Poista automaattitäyttö käytöstä selaimessa $BROWSER$", @@ -1680,9 +1733,6 @@ "defaultAutoFillOnPageLoadDesc": { "message": "Automaattinen täyttö voidaan ottaa käyttöön tai poistaa käytöstä kohdekohtaisesti muokkaamalla yksittäisiä kirjautumistietoja." }, - "itemAutoFillOnPageLoad": { - "message": "Automaattitäyttö sivun avautuessa (jos määritetty asetuksista)" - }, "autoFillOnPageLoadUseDefault": { "message": "Käytä oletusasetusta" }, @@ -1754,23 +1804,8 @@ "popup2faCloseMessage": { "message": "Painallus ponnahdusikkunan ulkopuolelle todennuskoodin sähköpostista noutoa varten sulkee ikkunan. Haluatko avata näkymän uuteen ikkunaan, jotta se pysyy avoinna?" }, - "popupU2fCloseMessage": { - "message": "Tämä selain ei voi käsitellä U2F-pyyntöjä tässä ponnahdusikkunassa. Haluatko avata näkymän uuteen ikkunaan vahvistaaksesi kirjautumisen U2F-suojausavaimella?" - }, - "enableFavicon": { - "message": "Näytä verkkosivustojen kuvakkeet" - }, - "faviconDesc": { - "message": "Näytä tunnistettava kuva jokaiselle kirjautumistiedolle." - }, - "faviconDescAlt": { - "message": "Näytä tunnistettava kuva jokaisen kirjautumistiedon vieressä. Koskee kaikkia kirjautuneita tilejä." - }, - "enableBadgeCounter": { - "message": "Näytä laskuri" - }, - "badgeCounterDesc": { - "message": "Ilmaisee nykyiselle sivulle sopivien kirjautumistietojen määrän." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "cardholderName": { "message": "Kortinhaltijan nimi" @@ -1829,6 +1864,9 @@ "securityCode": { "message": "Turvakoodi (CVC/CVV)" }, + "cardNumber": { + "message": "kortin numero" + }, "ex": { "message": "esim." }, @@ -1929,34 +1967,83 @@ "message": "SSH-avain" }, "typeNote": { - "message": "Note" + "message": "Muistiinpano" }, - "newItemHeader": { - "message": "Uusi $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderLogin": { + "message": "New Login", + "description": "Header for new login item type" }, - "editItemHeader": { - "message": "Muokkaa tyyppiä $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderCard": { + "message": "New Card", + "description": "Header for new card item type" }, - "viewItemHeader": { - "message": "Näytä $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderIdentity": { + "message": "New Identity", + "description": "Header for new identity item type" + }, + "newItemHeaderNote": { + "message": "New Note", + "description": "Header for new note item type" + }, + "newItemHeaderSshKey": { + "message": "New SSH key", + "description": "Header for new SSH key item type" + }, + "newItemHeaderTextSend": { + "message": "New Text Send", + "description": "Header for new text send" + }, + "newItemHeaderFileSend": { + "message": "New File Send", + "description": "Header for new file send" + }, + "editItemHeaderLogin": { + "message": "Edit Login", + "description": "Header for edit login item type" + }, + "editItemHeaderCard": { + "message": "Edit Card", + "description": "Header for edit card item type" + }, + "editItemHeaderIdentity": { + "message": "Edit Identity", + "description": "Header for edit identity item type" + }, + "editItemHeaderNote": { + "message": "Edit Note", + "description": "Header for edit note item type" + }, + "editItemHeaderSshKey": { + "message": "Edit SSH key", + "description": "Header for edit SSH key item type" + }, + "editItemHeaderTextSend": { + "message": "Edit Text Send", + "description": "Header for edit text send" + }, + "editItemHeaderFileSend": { + "message": "Edit File Send", + "description": "Header for edit file send" + }, + "viewItemHeaderLogin": { + "message": "View Login", + "description": "Header for view login item type" + }, + "viewItemHeaderCard": { + "message": "View Card", + "description": "Header for view card item type" + }, + "viewItemHeaderIdentity": { + "message": "View Identity", + "description": "Header for view identity item type" + }, + "viewItemHeaderNote": { + "message": "View Note", + "description": "Header for view note item type" + }, + "viewItemHeaderSshKey": { + "message": "View SSH key", + "description": "Header for view SSH key item type" }, "passwordHistory": { "message": "Salasanahistoria" @@ -2163,7 +2250,7 @@ "message": "Aseta PIN-koodi Bitwardenin avaukselle. PIN-asetukset tyhjentyvät, jos kirjaudut laajennuksesta kokonaan ulos." }, "setPinCode": { - "message": "You can use this PIN to unlock Bitwarden. Your PIN will be reset if you ever fully log out of the application." + "message": "Voit käyttää PIN-koodia avataksesi Bitwardenin. PIN-koodisi nollataan, mikäli kirjaudut täysin ulos sovelluksesta." }, "pinRequired": { "message": "PIN-koodi vaaditaan." @@ -2214,7 +2301,7 @@ "message": "Käytä tätä salasanaa" }, "useThisPassphrase": { - "message": "Use this passphrase" + "message": "Käytä tätä salalausetta" }, "useThisUsername": { "message": "Käytä tätä käyttäjätunnusta" @@ -2494,10 +2581,10 @@ "message": "Organisaatiokäytäntö estää kohteiden tuonnin yksityiseen holviisi." }, "restrictCardTypeImport": { - "message": "Cannot import card item types" + "message": "Ei voitu tuoda kortteja" }, "restrictCardTypeImportDesc": { - "message": "A policy set by 1 or more organizations prevents you from importing cards to your vaults." + "message": "Käytäntö, jonka on asettanut 1 tai useampi organisaatiosi estää sinua tuomasta korttitietoja holviisi." }, "domainsTitle": { "message": "Verkkotunnukset", @@ -2531,7 +2618,7 @@ "message": "Vaihda" }, "changePassword": { - "message": "Change password", + "message": "Vaihda salasana", "description": "Change password button for browser at risk notification on login." }, "changeButtonTitle": { @@ -2544,7 +2631,7 @@ } }, "atRiskPassword": { - "message": "At-risk password" + "message": "Riskialttiit salasanat" }, "atRiskPasswords": { "message": "Vaarantuneet salasanat" @@ -2581,7 +2668,7 @@ } }, "atRiskChangePrompt": { - "message": "Your password for this site is at-risk. $ORGANIZATION$ has requested that you change it.", + "message": "Salasanasi tälle sivustolle ei ole turvallinen. $ORGANIZATION$ on ilmoittanut, että se tulisi vaihtaa.", "placeholders": { "organization": { "content": "$1", @@ -2591,7 +2678,7 @@ "description": "Notification body when a login triggers an at-risk password change request and the change password domain is known." }, "atRiskNavigatePrompt": { - "message": "$ORGANIZATION$ wants you to change this password because it is at-risk. Navigate to your account settings to change the password.", + "message": "$ORGANIZATION$ ovat pyytäneet, että vaihdat tämän salasnaan, sillä se ei ole turvallinen. Mene tilin asetuksiin ja vaihda salasana.", "placeholders": { "organization": { "content": "$1", @@ -2720,7 +2807,7 @@ "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "maxAccessCountReached": { - "message": "Max access count reached", + "message": "Käyttökertojen enimmäismäärä on saavutettu", "description": "This text will be displayed after a Send has been accessed the maximum amount of times." }, "hideTextByDefault": { @@ -2926,7 +3013,7 @@ "message": "Sinun on vahvistettava sähköpostiosoitteesi käyttääksesi ominaisuutta. Voit vahvistaa osoitteesi verkkoholvissa." }, "masterPasswordSuccessfullySet": { - "message": "Master password successfully set" + "message": "Pääsalasana asetettu" }, "updatedMasterPassword": { "message": "Pääsalasanasi on vaihdettu" @@ -3067,13 +3154,13 @@ "message": "Yksilöllistä tunnistetta ei löytynyt." }, "removeMasterPasswordForOrganizationUserKeyConnector": { - "message": "A master password is no longer required for members of the following organization. Please confirm the domain below with your organization administrator." + "message": "Pääsalasanaa ei enää tarvita tämän organisaation jäsenille. Ole hyvä ja vahvista alla oleva verkkotunnus organisaation ylläpitäjän kanssa." }, "organizationName": { "message": "Organisaation nimi" }, "keyConnectorDomain": { - "message": "Key Connector domain" + "message": "Key Connector URL" }, "leaveOrganization": { "message": "Poistu organisaatiosta" @@ -3129,6 +3216,24 @@ } } }, + "exportingOrganizationVaultFromPasswordManagerWithDataOwnershipDesc": { + "message": "Only the organization vault associated with $ORGANIZATION$ will be exported.", + "placeholders": { + "organization": { + "content": "$1", + "example": "My Org Name" + } + } + }, + "exportingOrganizationVaultFromAdminConsoleWithDataOwnershipDesc": { + "message": "Only the organization vault associated with $ORGANIZATION$ will be exported. My items collections will not be included.", + "placeholders": { + "organization": { + "content": "$1", + "example": "My Org Name" + } + } + }, "error": { "message": "Virhe" }, @@ -3460,8 +3565,30 @@ "logInRequestSent": { "message": "Pyyntö lähetetty" }, + "loginRequestApprovedForEmailOnDevice": { + "message": "Kirjautuminen hyväksytty tunnuksella $EMAIL$ laitteella $DEVICE$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + }, + "device": { + "content": "$2", + "example": "Web app - Chrome" + } + } + }, + "youDeniedLoginAttemptFromAnotherDevice": { + "message": "Kirjautumispyyntö on estetty toiselta laitteelta. Jos se olit sinä, yritä kirjautua uudelleen samalla laitteella." + }, + "device": { + "message": "Laite" + }, + "loginStatus": { + "message": "Kirjautumisen tila" + }, "masterPasswordChanged": { - "message": "Master password saved" + "message": "Pääsalasana tallennettiin" }, "exposedMasterPassword": { "message": "Paljastunut pääsalasana" @@ -3496,9 +3623,6 @@ "autofillPageLoadPolicyActivated": { "message": "Organisaatiokäytännöt ovat poistaneet käytöstä avautuessa suoritettavan automaattisen täytön." }, - "howToAutofill": { - "message": "Miten automaattitäyttöä käytetään" - }, "autofillSelectInfoWithCommand": { "message": "Valitse kohde tästä ruudusta, käytä pikanäppäintä $COMMAND$ tai tutustu muihin vaihtoehtoihin asetuksissa.", "placeholders": { @@ -3556,6 +3680,94 @@ "rememberThisDeviceToMakeFutureLoginsSeamless": { "message": "Muista tämä laite tehdäksesi tulevista kirjautumisista saumattomia" }, + "manageDevices": { + "message": "Hallinnoi laitteita" + }, + "currentSession": { + "message": "Nykyinen istunto" + }, + "mobile": { + "message": "Mobiili", + "description": "Mobile app" + }, + "extension": { + "message": "Laajennus", + "description": "Browser extension/addon" + }, + "desktop": { + "message": "Työpöytä", + "description": "Desktop app" + }, + "webVault": { + "message": "Verkkoholvi" + }, + "webApp": { + "message": "Verkkosovellus" + }, + "cli": { + "message": "Komentorivi" + }, + "sdk": { + "message": "SDK", + "description": "Software Development Kit" + }, + "requestPending": { + "message": "Pyyntö odottaa" + }, + "firstLogin": { + "message": "Ensimmäinen kirjautuminen" + }, + "trusted": { + "message": "Luotettu" + }, + "needsApproval": { + "message": "Vaatii hyväksynnän" + }, + "devices": { + "message": "Laitteet" + }, + "accessAttemptBy": { + "message": "Kirjautumisyritys sähköpostilla $EMAIL$ ", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + } + } + }, + "confirmAccess": { + "message": "Hyväksy pääsy" + }, + "denyAccess": { + "message": "Estä pääsy" + }, + "time": { + "message": "Aika" + }, + "deviceType": { + "message": "Laitteen tyyppi" + }, + "loginRequest": { + "message": "Kirjautumispyyntö" + }, + "thisRequestIsNoLongerValid": { + "message": "Tämä pyyntö ei ole enää voimassa." + }, + "loginRequestHasAlreadyExpired": { + "message": "Kirjautumispyyntö on jo vanhentunut." + }, + "justNow": { + "message": "juuri nyt" + }, + "requestedXMinutesAgo": { + "message": "pyydetty $MINUTES$ minuuttia sitten", + "placeholders": { + "minutes": { + "content": "$1", + "example": "5" + } + } + }, "deviceApprovalRequired": { "message": "Laitehyväksyntä vaaditaan. Valitse hyväksyntätapa alta:" }, @@ -3578,10 +3790,10 @@ "message": "Pyydä hyväksyntää ylläpidolta" }, "unableToCompleteLogin": { - "message": "Unable to complete login" + "message": "Kirjautuminen epäonnistui" }, "loginOnTrustedDeviceOrAskAdminToAssignPassword": { - "message": "You need to log in on a trusted device or ask your administrator to assign you a password." + "message": "Sinun on kirjauduttava luotettuun laitteeseen tai pyydettävä järjestelmänvalvojaasi antamaan sinulle salasana." }, "ssoIdentifierRequired": { "message": "Organisaation kertakirjautumistunniste tarvitaan." @@ -3657,23 +3869,23 @@ "message": "Organisaatio ei ole luotettu" }, "emergencyAccessTrustWarning": { - "message": "For the security of your account, only confirm if you have granted emergency access to this user and their fingerprint matches what is displayed in their account" + "message": "Tilisi turvallisuuden varmistamiseksi, vahvista vain, jos olet antanut hätäpääsyn tälle käyttäjälle ja hänen sormenjälkensä vastaa sitä, mitä hänen tilillään näkyy" }, "orgTrustWarning": { - "message": "For the security of your account, only proceed if you are a member of this organization, have account recovery enabled, and the fingerprint displayed below matches the organization's fingerprint." + "message": "Tilisi turvallisuuden takaamiseksi jatka vain, jos olet tämän organisaation jäsen, tilin palautus on käytössä ja alla näkyvä sormenjälki vastaa organisaatiosi sormenjälkeä." }, "orgTrustWarning1": { - "message": "This organization has an Enterprise policy that will enroll you in account recovery. Enrollment will allow organization administrators to change your password. Only proceed if you recognize this organization and the fingerprint phrase displayed below matches the organization's fingerprint." + "message": "Tällä organisaatiolla on yrityskäytäntö, joka tulee ilmi, kun yrität palauttaa tiliäsi. Ilmoittautuminen sallii organisaation ylläpitäjien vaihtaa salasanasi. Jatka vain, jos tunnistat tämän organisaation ja alla näkyvän sormenjäljen, joka vastaa organisaation sormenjälkeä." }, "trustUser": { "message": "Luota käyttäjään" }, "sendsTitleNoItems": { - "message": "Send sensitive information safely", + "message": "Lähetä arkaluonteisia tietoja turvallisesti", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "sendsBodyNoItems": { - "message": "Share files and data securely with anyone, on any platform. Your information will remain end-to-end encrypted while limiting exposure.", + "message": "Jaa tiedostoja ja dataa turvallisesti kenen tahansa kanssa millä tahansa alustalla. Tiedot pysyvät päästä päähän salattuina.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "inputRequired": { @@ -3795,18 +4007,10 @@ "aliasDomain": { "message": "Aliaksen verkkotunnus" }, - "passwordRepromptDisabledAutofillOnPageLoad": { - "message": "Pääsalasanan vahvistuksen vaativia kohteita ei voida automaattitäyttää sivun avautuessa. Automaattitäyttö sivun avautuessa poistettiin käytöstä.", - "description": "Toast message for describing that master password re-prompt cannot be autofilled on page load." - }, "autofillOnPageLoadSetToDefault": { "message": "Automaattitäyttö sivun avautuessa käyttää oletusasetusta.", "description": "Toast message for informing the user that autofill on page load has been set to the default setting." }, - "turnOffMasterPasswordPromptToEditField": { - "message": "Poista pääsalasanan uudelleenkysely käytöstä muokataksesi kenttää", - "description": "Message appearing below the autofill on load message when master password reprompt is set for a vault item." - }, "toggleSideNavigation": { "message": "Näytä/piilota sivuvalikko" }, @@ -4015,15 +4219,11 @@ "selectImportCollection": { "message": "Valitse kokoelma" }, - "importTargetHint": { - "message": "Valitse tämä, jos haluat tuoda tiedoston sisällön kohteeseen \"$DESTINATION$\".", - "description": "Located as a hint under the import target. Will be appended by either folder or collection, depending if the user is importing into an individual or an organizational vault.", - "placeholders": { - "destination": { - "content": "$1", - "example": "folder or collection" - } - } + "importTargetHintCollection": { + "message": "Select this option if you want the imported file contents moved to a collection" + }, + "importTargetHintFolder": { + "message": "Select this option if you want the imported file contents moved to a folder" }, "importUnassignedItemsError": { "message": "Tiedosto sisältää määrittämättömiä kohteita." @@ -4080,9 +4280,6 @@ "passkeyNotCopiedAlert": { "message": "Pääsyavain ei kopioidu kloonattuun kohteeseen. Haluatko jatkaa kloonausta?" }, - "passkeyFeatureIsNotImplementedForAccountsWithoutMasterPassword": { - "message": "Käynnistänyt sivusto edellyttää vahvistusta. Ominaisuutta ei ole vielä toteutettu tileille, joilla ei ole pääsalasanaa." - }, "logInWithPasskeyQuestion": { "message": "Kirjaudutaanko pääsyavaimella?" }, @@ -4263,23 +4460,23 @@ "description": "Label indicating the most common import formats" }, "uriMatchDefaultStrategyHint": { - "message": "URI match detection is how Bitwarden identifies autofill suggestions.", + "message": "URI:n Säännöllinen lauseke -asetus on se tapa, jolla Bitwarden tekee automaattisen täytön.", "description": "Explains to the user that URI match detection determines how Bitwarden suggests autofill options, and clarifies that this default strategy applies when no specific match detection is set for a login item." }, "regExAdvancedOptionWarning": { - "message": "\"Regular expression\" is an advanced option with increased risk of exposing credentials.", + "message": "Säänöllinen lauseke -asetus on kehittynyt asetus, joka lisää kirjautumistietoja kaappausriskiä.", "description": "Content for dialog which warns a user when selecting 'regular expression' matching strategy as a cipher match strategy" }, "startsWithAdvancedOptionWarning": { - "message": "\"Starts with\" is an advanced option with increased risk of exposing credentials.", + "message": "Alkaa sanoilla -asetus on kehittynyt asetus, joka lisää kirjautumistietoja kaappausriskiä.", "description": "Content for dialog which warns a user when selecting 'starts with' matching strategy as a cipher match strategy" }, "uriMatchWarningDialogLink": { - "message": "More about match detection", + "message": "Lisätietoa vastaavuustunnistuksesta", "description": "Link to match detection docs on warning dialog for advance match strategy" }, "uriAdvancedOption": { - "message": "Advanced options", + "message": "Lisäasetukset", "description": "Advanced option placeholder for uri option component" }, "confirmContinueToBrowserSettingsTitle": { @@ -4465,17 +4662,17 @@ } } }, - "copyFieldValue": { - "message": "Kopioi $FIELD$, $VALUE$", + "copyFieldCipherName": { + "message": "Kopioi $FIELD$, $CIPHERNAME$", "description": "Title for a button that copies a field value to the clipboard.", "placeholders": { "field": { "content": "$1", "example": "Username" }, - "value": { + "ciphername": { "content": "$2", - "example": "Foo" + "example": "Login Item" } } }, @@ -4622,16 +4819,16 @@ "message": "Hanki mobiilisovellus" }, "getTheMobileAppDesc": { - "message": "Access your passwords on the go with the Bitwarden mobile app." + "message": "Pääse käsiksi salasanoihisi, jos et pääse tietokoneen ääreen Bitwarden-mobiilisovelluksella." }, "getTheDesktopApp": { "message": "Hanki työpöytäsovellus" }, "getTheDesktopAppDesc": { - "message": "Access your vault without a browser, then set up unlock with biometrics to expedite unlocking in both the desktop app and browser extension." + "message": "Käytä holviasi ilman selainta ja aseta sitten lukitus biometriikan avulla nopeuttaaksesi lukituksen avaamista sekä työpöytäsovelluksessa että selaimessa." }, "downloadFromBitwardenNow": { - "message": "Download from bitwarden.com now" + "message": "Lataa bitwarden.comista nyt" }, "getItOnGooglePlay": { "message": "Hanki se Google Playstä" @@ -4768,9 +4965,6 @@ } } }, - "enableAnimations": { - "message": "Käytä animaatioita" - }, "showAnimations": { "message": "Näytä animaatiot" }, @@ -4983,15 +5177,9 @@ "itemLocation": { "message": "Kohteen sijainti" }, - "fileSend": { - "message": "Tiedosto-Send" - }, "fileSends": { "message": "Tiedosto-Sendit" }, - "textSend": { - "message": "Teksti-Send" - }, "textSends": { "message": "Teksti-Sendit" }, @@ -5001,6 +5189,18 @@ "showNumberOfAutofillSuggestions": { "message": "Näytä automaattitäytön ehdotusten määrä laajennuksen kuvakkeessa" }, + "accountAccessRequested": { + "message": "Account access requested" + }, + "confirmAccessAttempt": { + "message": "Confirm access attempt for $EMAIL$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + } + } + }, "showQuickCopyActions": { "message": "Näytä pikakopiointitoiminnot holvissa" }, @@ -5040,9 +5240,6 @@ "vaultCustomTimeoutMinimum": { "message": "Mukautetun aikakatkaisun vähimmäisaika on yksi minuutti." }, - "additionalContentAvailable": { - "message": "Lisäsisältöä on käytettävissä" - }, "fileSavedToDevice": { "message": "Tiedosto tallennettiin laitteelle. Hallitse sitä laitteesi latauksista." }, @@ -5101,16 +5298,16 @@ "message": "Biometrinen avaus ei ole tällä hetkellä käytettävissä tuntemattomasta syystä." }, "unlockVault": { - "message": "Unlock your vault in seconds" + "message": "Avaa holvisi lukitus sekunneissa" }, "unlockVaultDesc": { - "message": "You can customize your unlock and timeout settings to more quickly access your vault." + "message": "Voit muokata avaus- ja aikakatkaisuasetuksiasi päästäksesi holvisi nopeammin käsiksi." }, "unlockPinSet": { - "message": "Unlock PIN set" + "message": "PIN asetettu" }, "unlockWithBiometricSet": { - "message": "Unlock with biometrics set" + "message": "Biometrinen kirjautuminen otettu käyttöön" }, "authenticating": { "message": "Todennetaan" @@ -5328,11 +5525,17 @@ "changeAtRiskPassword": { "message": "Vaihda vaarantunut salasana" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "This login is at-risk and missing a website. Add a website and change the password for stronger security." + }, + "missingWebsite": { + "message": "Missing website" + }, "settingsVaultOptions": { "message": "Holvin asetukset" }, "emptyVaultDescription": { - "message": "The vault protects more than just your passwords. Store secure logins, IDs, cards and notes securely here." + "message": "Holvi suojaa muutakin kuin salasanojasi. Säilytä kirjautumsitietojen lisäksi kortteja, muistiinpanoja ja henkilötietoja turvallisesti." }, "introCarouselLabel": { "message": "Tervetuloa Bitwardeniin" @@ -5368,7 +5571,7 @@ "message": "Tuo olemassa olevat salasanat" }, "emptyVaultNudgeBody": { - "message": "Use the importer to quickly transfer logins to Bitwarden without manually adding them." + "message": "Käytä tuojaa siirtääksesi kirjautumisia nopeasti Bitwardeniin lisäämättä niitä manuaalisesti." }, "emptyVaultNudgeButton": { "message": "Tuo nyt" @@ -5376,20 +5579,32 @@ "hasItemsVaultNudgeTitle": { "message": "Tervetuloa holviisi!" }, + "phishingPageTitle": { + "message": "Phishing website" + }, + "phishingPageCloseTab": { + "message": "Close tab" + }, + "phishingPageContinue": { + "message": "Continue" + }, + "phishingPageLearnWhy": { + "message": "Why are you seeing this?" + }, "hasItemsVaultNudgeBodyOne": { - "message": "Autofill items for the current page" + "message": "Täytä nykyisen sivun kohteet automaattisesti" }, "hasItemsVaultNudgeBodyTwo": { - "message": "Favorite items for easy access" + "message": "Suosikkikohteita helppoon käyttöön" }, "hasItemsVaultNudgeBodyThree": { - "message": "Search your vault for something else" + "message": "Etsi holvistasi jotain muuta" }, "newLoginNudgeTitle": { "message": "Säästä aikaa automaattitäytöllä" }, "newLoginNudgeBodyOne": { - "message": "Include a", + "message": "Sisällytä a", "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", "example": "Include a Website so this login appears as an autofill suggestion." }, @@ -5399,63 +5614,85 @@ "example": "Include a Website so this login appears as an autofill suggestion." }, "newLoginNudgeBodyTwo": { - "message": "so this login appears as an autofill suggestion.", + "message": ", joten tämä kirjautuminen näkyy automaattisen täytön ehdotuksena.", "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { - "message": "Seamless online checkout" + "message": "Saumaton verkkomaksaminen" }, "newCardNudgeBody": { - "message": "With cards, easily autofill payment forms securely and accurately." + "message": "Korteilla voit helposti täyttää automaattisesti maksulomakkeet turvallisesti ja oikein." }, "newIdentityNudgeTitle": { - "message": "Simplify creating accounts" + "message": "Yksinkertaista tilien luomista" }, "newIdentityNudgeBody": { - "message": "With identities, quickly autofill long registration or contact forms." + "message": "Identiteettien avulla täytä pitkät rekisteröinti- tai yhteydenottolomakkeet nopeasti automaattisesti." }, "newNoteNudgeTitle": { - "message": "Keep your sensitive data safe" + "message": "Pidä arkaluonteiset tietosi turvassa" }, "newNoteNudgeBody": { - "message": "With notes, securely store sensitive data like banking or insurance details." + "message": "Muistiinpanojen avulla tallennetaan turvallisesti arkaluonteiset tiedot, kuten pankkitiedot." }, "newSshNudgeTitle": { - "message": "Developer-friendly SSH access" + "message": "Kehittäjäystävällinen SSH-käyttö" }, "newSshNudgeBodyOne": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "message": "Säilytä avaimet ja yhdistä SSH-agenttiin, niin saat nopean ja salatun todennuksen.", "description": "Two part message", "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, "newSshNudgeBodyTwo": { - "message": "Learn more about SSH agent", + "message": "Lue lisää SSH-agentista", "description": "Two part message", "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, "generatorNudgeTitle": { - "message": "Quickly create passwords" + "message": "Luo salasanat nopeasti" }, "generatorNudgeBodyOne": { - "message": "Easily create strong and unique passwords by clicking on", + "message": "Luo helposti vahvoja ja uniikkeja salasanoja klikkaamalla", "description": "Two part message", "example": "Easily create strong and unique passwords by clicking on {icon} to help you keep your logins secure." }, "generatorNudgeBodyTwo": { - "message": "to help you keep your logins secure.", + "message": "auttaakssi sinua pitämään kirjautumisesi turvassa.", "description": "Two part message", "example": "Easily create strong and unique passwords by clicking on {icon} to help you keep your logins secure." }, "generatorNudgeBodyAria": { - "message": "Easily create strong and unique passwords by clicking on the Generate password button to help you keep your logins secure.", + "message": "Luo helposti vahvoja ja uniikkeja salasanoja klikkaamalla Luo salasana -painiketta. Sen avuilla voit pitää kirjautumisesi turvallisina.", "description": "Aria label for the body content of the generator nudge" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "noPermissionsViewPage": { - "message": "You do not have permissions to view this page. Try logging in with a different account." + "message": "Sinulla ei ole oikeuksia tähän sivuun. Yritä kirjautua sisään toisella tilillä." }, "wasmNotSupported": { - "message": "WebAssembly is not supported on your browser or is not enabled. WebAssembly is required to use the Bitwarden app.", + "message": "WebAssembly ei ole tuettu selaimessasi tai se ei ole käytössä. WebAssembly vaaditaan, jotta voi käyttää Bitwardenia.", "description": "'WebAssembly' is a technical term and should not be translated." + }, + "showMore": { + "message": "Show more" + }, + "showLess": { + "message": "Show less" + }, + "next": { + "message": "Next" + }, + "moreBreadcrumbs": { + "message": "More breadcrumbs", + "description": "This is used in the context of a breadcrumb navigation, indicating that there are more items in the breadcrumb trail that are not currently displayed." + }, + "confirmKeyConnectorDomain": { + "message": "Confirm Key Connector domain" } } diff --git a/apps/browser/src/_locales/fil/messages.json b/apps/browser/src/_locales/fil/messages.json index 4e3f94cb474..4281b98d7c2 100644 --- a/apps/browser/src/_locales/fil/messages.json +++ b/apps/browser/src/_locales/fil/messages.json @@ -547,12 +547,50 @@ "searchVault": { "message": "Hanapin ang vault" }, + "resetSearch": { + "message": "Reset search" + }, + "archiveNoun": { + "message": "Archive", + "description": "Noun" + }, + "archiveVerb": { + "message": "Archive", + "description": "Verb" + }, + "unarchive": { + "message": "Unarchive" + }, + "itemsInArchive": { + "message": "Items in archive" + }, + "noItemsInArchive": { + "message": "No items in archive" + }, + "noItemsInArchiveDesc": { + "message": "Archived items will appear here and will be excluded from general search results and autofill suggestions." + }, + "itemSentToArchive": { + "message": "Item sent to archive" + }, + "itemRemovedFromArchive": { + "message": "Item removed from archive" + }, + "archiveItem": { + "message": "Archive item" + }, + "archiveItemConfirmDesc": { + "message": "Archived items are excluded from general search results and autofill suggestions. Are you sure you want to archive this item?" + }, "edit": { "message": "I-edit" }, "view": { "message": "Tanaw" }, + "viewLogin": { + "message": "View login" + }, "noItemsInList": { "message": "Walang mga bagay na maipapakita." }, @@ -695,6 +733,15 @@ "invalidMasterPassword": { "message": "Hindi wasto ang master password" }, + "invalidMasterPasswordConfirmEmailAndHost": { + "message": "Invalid master password. Confirm your email is correct and your account was created on $HOST$.", + "placeholders": { + "host": { + "content": "$1", + "example": "vault.bitwarden.com" + } + } + }, "vaultTimeout": { "message": "Vault timeout" }, @@ -1501,6 +1548,15 @@ "readSecurityKey": { "message": "Read security key" }, + "readingPasskeyLoading": { + "message": "Reading passkey..." + }, + "passkeyAuthenticationFailed": { + "message": "Passkey authentication failed" + }, + "useADifferentLogInMethod": { + "message": "Use a different log in method" + }, "awaitingSecurityKeyInteraction": { "message": "Awaiting security key interaction..." }, @@ -1519,9 +1575,6 @@ "selectTwoStepLoginMethod": { "message": "Select two-step login method" }, - "recoveryCodeDesc": { - "message": "Nawalan ka ng access sa lahat ng iyong mga two-factor provider? Gamitin ang iyong recovery code para i-off ang lahat ng two-factor providers mula sa iyong account." - }, "recoveryCodeTitle": { "message": "Recovery code" }, @@ -1680,9 +1733,6 @@ "defaultAutoFillOnPageLoadDesc": { "message": "Maaari mong i-off ang auto-fill sa pag-load ng pahina para sa indibidwal na login items mula sa view ng Edit ng item." }, - "itemAutoFillOnPageLoad": { - "message": "Auto-fill sa pag-load ng pahina (kung naka-set up sa Options)" - }, "autoFillOnPageLoadUseDefault": { "message": "Gamitin ang default na setting" }, @@ -1754,23 +1804,8 @@ "popup2faCloseMessage": { "message": "Kapag ikaw ay mag-click sa labas ng popup window para tingnan ang iyong email para sa iyong code ng pagpapatunay, ang popup na ito ay magsasara. Nais mo bang buksan ang popup na ito sa isang bagong window upang hindi ito sarado?" }, - "popupU2fCloseMessage": { - "message": "Ang browser na ito ay hindi maaaring prosesuhin ang mga hiling ng U2F sa popup window na ito. Nais mo bang buksan ang popup na ito sa isang bagong window upang ma-log in gamit ang U2F?" - }, - "enableFavicon": { - "message": "Ipakita ang mga icon ng website" - }, - "faviconDesc": { - "message": "Ipakita ang isang kilalang larawan sa tabi ng bawat login." - }, - "faviconDescAlt": { - "message": "Show a recognizable image next to each login. Applies to all logged in accounts." - }, - "enableBadgeCounter": { - "message": "Ipakita ang badge counter" - }, - "badgeCounterDesc": { - "message": "Ipahiwatig kung gaano karaming mga login ang mayroon ka para sa kasalukuyang pahina ng web." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "cardholderName": { "message": "Pangalan ng cardholder" @@ -1829,6 +1864,9 @@ "securityCode": { "message": "Kodigo ng Seguridad" }, + "cardNumber": { + "message": "card number" + }, "ex": { "message": "ex." }, @@ -1931,32 +1969,81 @@ "typeNote": { "message": "Note" }, - "newItemHeader": { - "message": "New $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderLogin": { + "message": "New Login", + "description": "Header for new login item type" }, - "editItemHeader": { - "message": "Edit $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderCard": { + "message": "New Card", + "description": "Header for new card item type" }, - "viewItemHeader": { - "message": "View $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderIdentity": { + "message": "New Identity", + "description": "Header for new identity item type" + }, + "newItemHeaderNote": { + "message": "New Note", + "description": "Header for new note item type" + }, + "newItemHeaderSshKey": { + "message": "New SSH key", + "description": "Header for new SSH key item type" + }, + "newItemHeaderTextSend": { + "message": "New Text Send", + "description": "Header for new text send" + }, + "newItemHeaderFileSend": { + "message": "New File Send", + "description": "Header for new file send" + }, + "editItemHeaderLogin": { + "message": "Edit Login", + "description": "Header for edit login item type" + }, + "editItemHeaderCard": { + "message": "Edit Card", + "description": "Header for edit card item type" + }, + "editItemHeaderIdentity": { + "message": "Edit Identity", + "description": "Header for edit identity item type" + }, + "editItemHeaderNote": { + "message": "Edit Note", + "description": "Header for edit note item type" + }, + "editItemHeaderSshKey": { + "message": "Edit SSH key", + "description": "Header for edit SSH key item type" + }, + "editItemHeaderTextSend": { + "message": "Edit Text Send", + "description": "Header for edit text send" + }, + "editItemHeaderFileSend": { + "message": "Edit File Send", + "description": "Header for edit file send" + }, + "viewItemHeaderLogin": { + "message": "View Login", + "description": "Header for view login item type" + }, + "viewItemHeaderCard": { + "message": "View Card", + "description": "Header for view card item type" + }, + "viewItemHeaderIdentity": { + "message": "View Identity", + "description": "Header for view identity item type" + }, + "viewItemHeaderNote": { + "message": "View Note", + "description": "Header for view note item type" + }, + "viewItemHeaderSshKey": { + "message": "View SSH key", + "description": "Header for view SSH key item type" }, "passwordHistory": { "message": "Kasaysayan ng Password" @@ -3129,6 +3216,24 @@ } } }, + "exportingOrganizationVaultFromPasswordManagerWithDataOwnershipDesc": { + "message": "Only the organization vault associated with $ORGANIZATION$ will be exported.", + "placeholders": { + "organization": { + "content": "$1", + "example": "My Org Name" + } + } + }, + "exportingOrganizationVaultFromAdminConsoleWithDataOwnershipDesc": { + "message": "Only the organization vault associated with $ORGANIZATION$ will be exported. My items collections will not be included.", + "placeholders": { + "organization": { + "content": "$1", + "example": "My Org Name" + } + } + }, "error": { "message": "Mali" }, @@ -3460,6 +3565,28 @@ "logInRequestSent": { "message": "Request sent" }, + "loginRequestApprovedForEmailOnDevice": { + "message": "Login request approved for $EMAIL$ on $DEVICE$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + }, + "device": { + "content": "$2", + "example": "Web app - Chrome" + } + } + }, + "youDeniedLoginAttemptFromAnotherDevice": { + "message": "You denied a login attempt from another device. If this was you, try to log in with the device again." + }, + "device": { + "message": "Device" + }, + "loginStatus": { + "message": "Login status" + }, "masterPasswordChanged": { "message": "Master password saved" }, @@ -3496,9 +3623,6 @@ "autofillPageLoadPolicyActivated": { "message": "Ang mga patakaran ng iyong organisasyon ay nagbigay ng pag-automatikong pag-load sa pahina." }, - "howToAutofill": { - "message": "Paano mag-auto-fill" - }, "autofillSelectInfoWithCommand": { "message": "Select an item from this screen, use the shortcut $COMMAND$, or explore other options in settings.", "placeholders": { @@ -3556,6 +3680,94 @@ "rememberThisDeviceToMakeFutureLoginsSeamless": { "message": "Remember this device to make future logins seamless" }, + "manageDevices": { + "message": "Manage devices" + }, + "currentSession": { + "message": "Current session" + }, + "mobile": { + "message": "Mobile", + "description": "Mobile app" + }, + "extension": { + "message": "Extension", + "description": "Browser extension/addon" + }, + "desktop": { + "message": "Desktop", + "description": "Desktop app" + }, + "webVault": { + "message": "Web vault" + }, + "webApp": { + "message": "Web app" + }, + "cli": { + "message": "CLI" + }, + "sdk": { + "message": "SDK", + "description": "Software Development Kit" + }, + "requestPending": { + "message": "Request pending" + }, + "firstLogin": { + "message": "First login" + }, + "trusted": { + "message": "Trusted" + }, + "needsApproval": { + "message": "Needs approval" + }, + "devices": { + "message": "Devices" + }, + "accessAttemptBy": { + "message": "Access attempt by $EMAIL$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + } + } + }, + "confirmAccess": { + "message": "Confirm access" + }, + "denyAccess": { + "message": "Deny access" + }, + "time": { + "message": "Time" + }, + "deviceType": { + "message": "Device Type" + }, + "loginRequest": { + "message": "Login request" + }, + "thisRequestIsNoLongerValid": { + "message": "This request is no longer valid." + }, + "loginRequestHasAlreadyExpired": { + "message": "Login request has already expired." + }, + "justNow": { + "message": "Just now" + }, + "requestedXMinutesAgo": { + "message": "Requested $MINUTES$ minutes ago", + "placeholders": { + "minutes": { + "content": "$1", + "example": "5" + } + } + }, "deviceApprovalRequired": { "message": "Device approval required. Select an approval option below:" }, @@ -3795,18 +4007,10 @@ "aliasDomain": { "message": "Alias domain" }, - "passwordRepromptDisabledAutofillOnPageLoad": { - "message": "Items with master password re-prompt cannot be autofilled on page load. Autofill on page load turned off.", - "description": "Toast message for describing that master password re-prompt cannot be autofilled on page load." - }, "autofillOnPageLoadSetToDefault": { "message": "Autofill on page load set to use default setting.", "description": "Toast message for informing the user that autofill on page load has been set to the default setting." }, - "turnOffMasterPasswordPromptToEditField": { - "message": "Turn off master password re-prompt to edit this field", - "description": "Message appearing below the autofill on load message when master password reprompt is set for a vault item." - }, "toggleSideNavigation": { "message": "Toggle side navigation" }, @@ -4015,15 +4219,11 @@ "selectImportCollection": { "message": "Select a collection" }, - "importTargetHint": { - "message": "Select this option if you want the imported file contents moved to a $DESTINATION$", - "description": "Located as a hint under the import target. Will be appended by either folder or collection, depending if the user is importing into an individual or an organizational vault.", - "placeholders": { - "destination": { - "content": "$1", - "example": "folder or collection" - } - } + "importTargetHintCollection": { + "message": "Select this option if you want the imported file contents moved to a collection" + }, + "importTargetHintFolder": { + "message": "Select this option if you want the imported file contents moved to a folder" }, "importUnassignedItemsError": { "message": "File contains unassigned items." @@ -4080,9 +4280,6 @@ "passkeyNotCopiedAlert": { "message": "The passkey will not be copied to the cloned item. Do you want to continue cloning this item?" }, - "passkeyFeatureIsNotImplementedForAccountsWithoutMasterPassword": { - "message": "Verification required by the initiating site. This feature is not yet implemented for accounts without master password." - }, "logInWithPasskeyQuestion": { "message": "Log in with passkey?" }, @@ -4465,17 +4662,17 @@ } } }, - "copyFieldValue": { - "message": "Copy $FIELD$, $VALUE$", + "copyFieldCipherName": { + "message": "Copy $FIELD$, $CIPHERNAME$", "description": "Title for a button that copies a field value to the clipboard.", "placeholders": { "field": { "content": "$1", "example": "Username" }, - "value": { + "ciphername": { "content": "$2", - "example": "Foo" + "example": "Login Item" } } }, @@ -4768,9 +4965,6 @@ } } }, - "enableAnimations": { - "message": "Enable animations" - }, "showAnimations": { "message": "Show animations" }, @@ -4983,15 +5177,9 @@ "itemLocation": { "message": "Item Location" }, - "fileSend": { - "message": "File Send" - }, "fileSends": { "message": "File Sends" }, - "textSend": { - "message": "Text Send" - }, "textSends": { "message": "Text Sends" }, @@ -5001,6 +5189,18 @@ "showNumberOfAutofillSuggestions": { "message": "Show number of login autofill suggestions on extension icon" }, + "accountAccessRequested": { + "message": "Account access requested" + }, + "confirmAccessAttempt": { + "message": "Confirm access attempt for $EMAIL$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + } + } + }, "showQuickCopyActions": { "message": "Show quick copy actions on Vault" }, @@ -5040,9 +5240,6 @@ "vaultCustomTimeoutMinimum": { "message": "Minimum custom timeout is 1 minute." }, - "additionalContentAvailable": { - "message": "Additional content is available" - }, "fileSavedToDevice": { "message": "File saved to device. Manage from your device downloads." }, @@ -5328,6 +5525,12 @@ "changeAtRiskPassword": { "message": "Change at-risk password" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "This login is at-risk and missing a website. Add a website and change the password for stronger security." + }, + "missingWebsite": { + "message": "Missing website" + }, "settingsVaultOptions": { "message": "Vault options" }, @@ -5376,6 +5579,18 @@ "hasItemsVaultNudgeTitle": { "message": "Welcome to your vault!" }, + "phishingPageTitle": { + "message": "Phishing website" + }, + "phishingPageCloseTab": { + "message": "Close tab" + }, + "phishingPageContinue": { + "message": "Continue" + }, + "phishingPageLearnWhy": { + "message": "Why are you seeing this?" + }, "hasItemsVaultNudgeBodyOne": { "message": "Autofill items for the current page" }, @@ -5451,11 +5666,33 @@ "message": "Easily create strong and unique passwords by clicking on the Generate password button to help you keep your logins secure.", "description": "Aria label for the body content of the generator nudge" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "noPermissionsViewPage": { "message": "You do not have permissions to view this page. Try logging in with a different account." }, "wasmNotSupported": { "message": "WebAssembly is not supported on your browser or is not enabled. WebAssembly is required to use the Bitwarden app.", "description": "'WebAssembly' is a technical term and should not be translated." + }, + "showMore": { + "message": "Show more" + }, + "showLess": { + "message": "Show less" + }, + "next": { + "message": "Next" + }, + "moreBreadcrumbs": { + "message": "More breadcrumbs", + "description": "This is used in the context of a breadcrumb navigation, indicating that there are more items in the breadcrumb trail that are not currently displayed." + }, + "confirmKeyConnectorDomain": { + "message": "Confirm Key Connector domain" } } diff --git a/apps/browser/src/_locales/fr/messages.json b/apps/browser/src/_locales/fr/messages.json index 326f1e3c09c..98c10cb2283 100644 --- a/apps/browser/src/_locales/fr/messages.json +++ b/apps/browser/src/_locales/fr/messages.json @@ -3,7 +3,7 @@ "message": "Bitwarden" }, "appLogoLabel": { - "message": "Logo de Bitwarden" + "message": "Logo Bitwarden" }, "extName": { "message": "Gestionnaire de mots de passe Bitwarden", @@ -547,12 +547,50 @@ "searchVault": { "message": "Rechercher dans le coffre" }, + "resetSearch": { + "message": "Réinitialiser la recherche" + }, + "archiveNoun": { + "message": "Archive", + "description": "Noun" + }, + "archiveVerb": { + "message": "Archiver", + "description": "Verb" + }, + "unarchive": { + "message": "Ne plus archiver" + }, + "itemsInArchive": { + "message": "Éléments dans l'archive" + }, + "noItemsInArchive": { + "message": "Aucun élément dans l'archive" + }, + "noItemsInArchiveDesc": { + "message": "Les éléments archivés apparaîtront ici et seront exclus des résultats de recherche généraux et des suggestions de remplissage automatique." + }, + "itemSentToArchive": { + "message": "Élément envoyé à l'archive" + }, + "itemRemovedFromArchive": { + "message": "Élément retiré de l'archive" + }, + "archiveItem": { + "message": "Archiver l'élément" + }, + "archiveItemConfirmDesc": { + "message": "Les éléments archivés sont exclus des résultats de recherche généraux et des suggestions de remplissage automatique. Êtes-vous sûr de vouloir archiver cet élément ?" + }, "edit": { "message": "Modifier" }, "view": { "message": "Afficher" }, + "viewLogin": { + "message": "Afficher l'Identifiant" + }, "noItemsInList": { "message": "Aucun identifiant à afficher." }, @@ -695,6 +733,15 @@ "invalidMasterPassword": { "message": "Mot de passe principal invalide" }, + "invalidMasterPasswordConfirmEmailAndHost": { + "message": "Mot de passe principal invalide. Confirmez que votre adresse courriel est correcte et que votre compte a été créé sur $HOST$.", + "placeholders": { + "host": { + "content": "$1", + "example": "vault.bitwarden.com" + } + } + }, "vaultTimeout": { "message": "Délai d'expiration du coffre" }, @@ -1063,7 +1110,7 @@ "message": "Enregistrer" }, "notificationViewAria": { - "message": "View $ITEMNAME$, opens in new window", + "message": "Afficher $ITEMNAME$, s'ouvre dans une nouvelle fenêtre", "placeholders": { "itemName": { "content": "$1" @@ -1076,14 +1123,14 @@ "description": "Aria label for the new item button in notification bar confirmation message when error is prompted" }, "notificationEditTooltip": { - "message": "Edit before saving", + "message": "Modifier avant d'enregistrer", "description": "Tooltip and Aria label for edit button on cipher item" }, "newNotification": { "message": "Nouvelle notification" }, "labelWithNotification": { - "message": "$LABEL$: New notification", + "message": "$LABEL$: Nouvelle notification", "description": "Label for the notification with a new login suggestion.", "placeholders": { "label": { @@ -1101,7 +1148,7 @@ "description": "Shown to user after item is updated." }, "selectItemAriaLabel": { - "message": "Select $ITEMTYPE$, $ITEMNAME$", + "message": "Sélectionner $ITEMTYPE$, $ITEMNAME$", "description": "Used by screen readers. $1 is the item type (like vault or folder), $2 is the selected item name.", "placeholders": { "itemType": { @@ -1141,7 +1188,7 @@ "description": "Message displayed when login details are successfully updated." }, "loginUpdateTaskSuccess": { - "message": "Great job! You took the steps to make you and $ORGANIZATION$ more secure.", + "message": "Bon travail ! Vous avez pris les mesures pour rendre vous et $ORGANIZATION$ plus sécurisés.", "placeholders": { "organization": { "content": "$1" @@ -1150,7 +1197,7 @@ "description": "Shown to user after login is updated." }, "loginUpdateTaskSuccessAdditional": { - "message": "Thank you for making $ORGANIZATION$ more secure. You have $TASK_COUNT$ more passwords to update.", + "message": "Merci d'avoir rendu $ORGANIZATION$ plus sécurisé. Il vous reste $TASK_COUNT$ mots de passe à mettre à jour.", "placeholders": { "organization": { "content": "$1" @@ -1174,10 +1221,10 @@ "description": "Detailed error message shown when saving login details fails." }, "changePasswordWarning": { - "message": "After changing your password, you will need to log in with your new password. Active sessions on other devices will be logged out within one hour." + "message": "Après avoir changé votre mot de passe, vous devrez vous connecter avec votre nouveau mot de passe. Les sessions actives sur d'autres appareils seront déconnectées dans l'heure qui suit." }, "accountRecoveryUpdateMasterPasswordSubtitle": { - "message": "Change your master password to complete account recovery." + "message": "Changez votre mot de passe principal pour finaliser la récupération de compte." }, "enableChangedPasswordNotification": { "message": "Demander de mettre à jour un identifiant existant" @@ -1372,7 +1419,7 @@ "message": "Fonctionnalité indisponible" }, "legacyEncryptionUnsupported": { - "message": "Legacy encryption is no longer supported. Please contact support to recover your account." + "message": "Le chiffrement hérité n'est plus pris en charge. Veuillez contacter le support pour récupérer votre compte." }, "premiumMembership": { "message": "Adhésion Premium" @@ -1501,6 +1548,15 @@ "readSecurityKey": { "message": "Lire la clé de sécurité" }, + "readingPasskeyLoading": { + "message": "Lecture de la clé d'accès..." + }, + "passkeyAuthenticationFailed": { + "message": "Échec de l'authentification avec clé d'accès" + }, + "useADifferentLogInMethod": { + "message": "Utiliser une méthode de connexion différente" + }, "awaitingSecurityKeyInteraction": { "message": "En attente d'interaction de la clé de sécurité..." }, @@ -1519,9 +1575,6 @@ "selectTwoStepLoginMethod": { "message": "Sélectionnez la méthode d'authentification à deux facteurs" }, - "recoveryCodeDesc": { - "message": "Accès perdu à tous vos services d'authentification à double facteurs ? Utilisez votre code de récupération pour désactiver tous les services de double authentifications sur votre compte." - }, "recoveryCodeTitle": { "message": "Code de récupération" }, @@ -1606,10 +1659,10 @@ "message": "Suggestions de saisie automatique" }, "autofillSpotlightTitle": { - "message": "Easily find autofill suggestions" + "message": "Trouver facilement des suggestions de remplissage automatique" }, "autofillSpotlightDesc": { - "message": "Turn off your browser's autofill settings, so they don't conflict with Bitwarden." + "message": "Désactivez les paramètres de remplissage automatique de votre navigateur pour qu'ils n'entrent pas en conflit avec Bitwarden." }, "turnOffBrowserAutofill": { "message": "Désactiver le remplissage automatique de $BROWSER$", @@ -1680,9 +1733,6 @@ "defaultAutoFillOnPageLoadDesc": { "message": "Vous pouvez désactiver la saisie automatique au chargement de la page pour les éléments de connexion individuels à partir de la vue Éditer l'élément." }, - "itemAutoFillOnPageLoad": { - "message": "Saisir automatiquement au chargement de la page (si configuré dans les options)" - }, "autoFillOnPageLoadUseDefault": { "message": "Utiliser le paramètre par défaut" }, @@ -1754,23 +1804,8 @@ "popup2faCloseMessage": { "message": "Cliquer en dehors de la fenêtre popup pour vérifier votre courriel avec le code de vérification va causer la fermeture de cette fenêtre popup. Voulez-vous ouvrir cette fenêtre popup dans une nouvelle fenêtre afin qu'elle ne se ferme pas ?" }, - "popupU2fCloseMessage": { - "message": "Ce navigateur ne peut pas traiter les demandes U2F dans cette fenêtre popup. Voulez-vous ouvrir cette popup dans une nouvelle fenêtre afin de pouvoir vous connecter à l'aide de l'U2F ?" - }, - "enableFavicon": { - "message": "Afficher les icônes des sites web" - }, - "faviconDesc": { - "message": "Affiche une image reconnaissable à côté de chaque identifiant." - }, - "faviconDescAlt": { - "message": "Affiche une image reconnaissable à côté de chaque identifiant. S'applique à tous les comptes connectés." - }, - "enableBadgeCounter": { - "message": "Afficher le compteur de badge" - }, - "badgeCounterDesc": { - "message": "Indique le nombre d'identifiants dont vous disposez pour la page web en cours." + "showIconsChangePasswordUrls": { + "message": "Afficher les icônes du site web et récupérer les URL de changement de mot de passe" }, "cardholderName": { "message": "Nom du titulaire de la carte" @@ -1829,6 +1864,9 @@ "securityCode": { "message": "Code de sécurité" }, + "cardNumber": { + "message": "numéro de carte" + }, "ex": { "message": "ex." }, @@ -1931,32 +1969,81 @@ "typeNote": { "message": "Note" }, - "newItemHeader": { - "message": "Créer un(e) $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderLogin": { + "message": "Nouvel Identifiant", + "description": "Header for new login item type" }, - "editItemHeader": { - "message": "Éditer $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderCard": { + "message": "Nouvelle Carte de paiement", + "description": "Header for new card item type" }, - "viewItemHeader": { - "message": "Voir les $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderIdentity": { + "message": "Nouvelle Identité", + "description": "Header for new identity item type" + }, + "newItemHeaderNote": { + "message": "Nouvelle Note", + "description": "Header for new note item type" + }, + "newItemHeaderSshKey": { + "message": "Nouvelle clé SSH", + "description": "Header for new SSH key item type" + }, + "newItemHeaderTextSend": { + "message": "Nouveau Send de texte", + "description": "Header for new text send" + }, + "newItemHeaderFileSend": { + "message": "Nouveau Send de fichier", + "description": "Header for new file send" + }, + "editItemHeaderLogin": { + "message": "Modifier l'Identifiant", + "description": "Header for edit login item type" + }, + "editItemHeaderCard": { + "message": "Modifier la Carte de paiement", + "description": "Header for edit card item type" + }, + "editItemHeaderIdentity": { + "message": "Modifier l'Identité", + "description": "Header for edit identity item type" + }, + "editItemHeaderNote": { + "message": "Modifier la Note", + "description": "Header for edit note item type" + }, + "editItemHeaderSshKey": { + "message": "Modifier la clé SSH", + "description": "Header for edit SSH key item type" + }, + "editItemHeaderTextSend": { + "message": "Modifier le Send de texte", + "description": "Header for edit text send" + }, + "editItemHeaderFileSend": { + "message": "Modifier le Send de fichier", + "description": "Header for edit file send" + }, + "viewItemHeaderLogin": { + "message": "Afficher l'Identifiant", + "description": "Header for view login item type" + }, + "viewItemHeaderCard": { + "message": "Afficher la Carte de paiement", + "description": "Header for view card item type" + }, + "viewItemHeaderIdentity": { + "message": "Afficher l'Identité", + "description": "Header for view identity item type" + }, + "viewItemHeaderNote": { + "message": "Afficher la Note", + "description": "Header for view note item type" + }, + "viewItemHeaderSshKey": { + "message": "Afficher la clé SSH", + "description": "Header for view SSH key item type" }, "passwordHistory": { "message": "Historique des mots de passe" @@ -2163,7 +2250,7 @@ "message": "Définissez votre code PIN pour déverrouiller Bitwarden. Les paramètres relatifs à votre code PIN seront réinitialisés si vous vous déconnectez complètement de l'application." }, "setPinCode": { - "message": "You can use this PIN to unlock Bitwarden. Your PIN will be reset if you ever fully log out of the application." + "message": "Vous pouvez utiliser ce code PIN pour déverrouiller Bitwarden. Votre code PIN sera réinitialisé si vous vous déconnectez complètement de l'application." }, "pinRequired": { "message": "Le code PIN est requis." @@ -2214,7 +2301,7 @@ "message": "Utiliser ce mot de passe" }, "useThisPassphrase": { - "message": "Use this passphrase" + "message": "Utilisez cette phrase secrète" }, "useThisUsername": { "message": "Utiliser ce nom d'utilisateur" @@ -2494,10 +2581,10 @@ "message": "Une politique d'organisation a bloqué l'import d'éléments dans votre coffre personel." }, "restrictCardTypeImport": { - "message": "Cannot import card item types" + "message": "Impossible d'importer des types d'éléments de carte" }, "restrictCardTypeImportDesc": { - "message": "A policy set by 1 or more organizations prevents you from importing cards to your vaults." + "message": "Une politique définie par 1 ou plusieurs organisations vous empêche d'importer des cartes dans vos coffres." }, "domainsTitle": { "message": "Domaines", @@ -2581,7 +2668,7 @@ } }, "atRiskChangePrompt": { - "message": "Your password for this site is at-risk. $ORGANIZATION$ has requested that you change it.", + "message": "Votre mot de passe pour ce site est à risque. $ORGANIZATION$ vous a demandé de le modifier.", "placeholders": { "organization": { "content": "$1", @@ -2591,7 +2678,7 @@ "description": "Notification body when a login triggers an at-risk password change request and the change password domain is known." }, "atRiskNavigatePrompt": { - "message": "$ORGANIZATION$ wants you to change this password because it is at-risk. Navigate to your account settings to change the password.", + "message": "$ORGANIZATION$ souhaite que vous changiez ce mot de passe car il est à risque. Accédez aux paramètres de votre compte pour modifier le mot de passe.", "placeholders": { "organization": { "content": "$1", @@ -2629,14 +2716,14 @@ "description": "Description of the review at-risk login slide on the at-risk password page carousel" }, "reviewAtRiskLoginSlideImgAltPeriod": { - "message": "Illustration of a list of logins that are at-risk." + "message": "Illustration d'une liste de connexions à risque." }, "generatePasswordSlideDesc": { "message": "Générez rapidement un mot de passe fort et unique grâce au menu de saisie automatique de Bitwarden sur le site à risque.", "description": "Description of the generate password slide on the at-risk password page carousel" }, "generatePasswordSlideImgAltPeriod": { - "message": "Illustration of the Bitwarden autofill menu displaying a generated password." + "message": "Illustration du menu de remplissage automatique de Bitwarden affichant un mot de passe généré." }, "updateInBitwarden": { "message": "Mettre à jour dans Bitwarden" @@ -2646,7 +2733,7 @@ "description": "Description of the update in Bitwarden slide on the at-risk password page carousel" }, "updateInBitwardenSlideImgAltPeriod": { - "message": "Illustration of a Bitwarden’s notification prompting the user to update the login." + "message": "Illustration d'une notification de Bitwarden invitant l'utilisateur à mettre à jour la connexion." }, "turnOnAutofill": { "message": "Activer la saisie automatique" @@ -2720,7 +2807,7 @@ "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "maxAccessCountReached": { - "message": "Max access count reached", + "message": "Nombre maximal d'accès atteint", "description": "This text will be displayed after a Send has been accessed the maximum amount of times." }, "hideTextByDefault": { @@ -2926,7 +3013,7 @@ "message": "Vous devez vérifier votre courriel pour utiliser cette fonctionnalité. Vous pouvez vérifier votre courriel dans le coffre web." }, "masterPasswordSuccessfullySet": { - "message": "Master password successfully set" + "message": "Mot de passe principal défini avec succès" }, "updatedMasterPassword": { "message": "Mot de passe principal mis à jour" @@ -3067,13 +3154,13 @@ "message": "Aucun identifiant unique trouvé." }, "removeMasterPasswordForOrganizationUserKeyConnector": { - "message": "A master password is no longer required for members of the following organization. Please confirm the domain below with your organization administrator." + "message": "Un mot de passe principal n’est plus requis pour les membres de l’organisation suivante. Veuillez confirmer le domaine ci-dessous auprès de l'administrateur de votre organisation." }, "organizationName": { "message": "Nom de l'organisation" }, "keyConnectorDomain": { - "message": "Key Connector domain" + "message": "Domaine du connecteur clé" }, "leaveOrganization": { "message": "Quitter l'organisation" @@ -3109,7 +3196,7 @@ } }, "exportingIndividualVaultWithAttachmentsDescription": { - "message": "Only the individual vault items including attachments associated with $EMAIL$ will be exported. Organization vault items will not be included", + "message": "Seuls les éléments individuels du coffre-fort, y compris les pièces jointes associées à $EMAIL$, seront exportés. Les éléments du coffre-fort de l'organisation ne seront pas inclus", "placeholders": { "email": { "content": "$1", @@ -3129,6 +3216,24 @@ } } }, + "exportingOrganizationVaultFromPasswordManagerWithDataOwnershipDesc": { + "message": "Seul le coffre de l'organisation associé à $ORGANIZATION$ sera exporté.", + "placeholders": { + "organization": { + "content": "$1", + "example": "My Org Name" + } + } + }, + "exportingOrganizationVaultFromAdminConsoleWithDataOwnershipDesc": { + "message": "Seul le coffre de l'organisation associé à $ORGANIZATION$ sera exporté. Mes éléments de mes collections ne seront pas inclus.", + "placeholders": { + "organization": { + "content": "$1", + "example": "My Org Name" + } + } + }, "error": { "message": "Erreur" }, @@ -3460,8 +3565,30 @@ "logInRequestSent": { "message": "Demande envoyée" }, + "loginRequestApprovedForEmailOnDevice": { + "message": "Demande de connexion approuvée pour $EMAIL$ sur $DEVICE$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + }, + "device": { + "content": "$2", + "example": "Web app - Chrome" + } + } + }, + "youDeniedLoginAttemptFromAnotherDevice": { + "message": "Vous avez refusé une tentative de connexion depuis un autre appareil. Si c'était vous, essayez de vous reconnecter avec l'appareil." + }, + "device": { + "message": "Appareil" + }, + "loginStatus": { + "message": "Statut de connexion" + }, "masterPasswordChanged": { - "message": "Master password saved" + "message": "Mot de passe principal enregistré" }, "exposedMasterPassword": { "message": "Mot de passe principal exposé" @@ -3496,9 +3623,6 @@ "autofillPageLoadPolicyActivated": { "message": "Les politiques de sécurité de votre organisation ont activé la saisie automatique lors du chargement de la page." }, - "howToAutofill": { - "message": "Comment saisir automatiquement" - }, "autofillSelectInfoWithCommand": { "message": "Sélectionnez un élément à partir de cet écran, utilisez le raccourci $COMMAND$ ou explorez d'autres options dans les paramètres.", "placeholders": { @@ -3556,6 +3680,94 @@ "rememberThisDeviceToMakeFutureLoginsSeamless": { "message": "Mémorisez cet appareil pour faciliter les futures connexions" }, + "manageDevices": { + "message": "Gérer les appareils" + }, + "currentSession": { + "message": "Session en cours" + }, + "mobile": { + "message": "Mobile", + "description": "Mobile app" + }, + "extension": { + "message": "Extension", + "description": "Browser extension/addon" + }, + "desktop": { + "message": "Bureau", + "description": "Desktop app" + }, + "webVault": { + "message": "Coffre-fort Web" + }, + "webApp": { + "message": "Application web" + }, + "cli": { + "message": "CLI" + }, + "sdk": { + "message": "SDK", + "description": "Software Development Kit" + }, + "requestPending": { + "message": "Demande en attente" + }, + "firstLogin": { + "message": "Première connexion" + }, + "trusted": { + "message": "Approuvé" + }, + "needsApproval": { + "message": "Requiert une approbation" + }, + "devices": { + "message": "Appareils" + }, + "accessAttemptBy": { + "message": "Tentative d'accès par $EMAIL$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + } + } + }, + "confirmAccess": { + "message": "Confirmer l'accès" + }, + "denyAccess": { + "message": "Refuser l'accès" + }, + "time": { + "message": "Temps" + }, + "deviceType": { + "message": "Type d'appareil" + }, + "loginRequest": { + "message": "Demande de connexion" + }, + "thisRequestIsNoLongerValid": { + "message": "Cette demande n'est plus valide." + }, + "loginRequestHasAlreadyExpired": { + "message": "La demande de connexion a déjà expiré." + }, + "justNow": { + "message": "À l’instant" + }, + "requestedXMinutesAgo": { + "message": "Demandé $MINUTES$ il y a quelques minutes", + "placeholders": { + "minutes": { + "content": "$1", + "example": "5" + } + } + }, "deviceApprovalRequired": { "message": "L'approbation de l'appareil est requise. Sélectionnez une option d'approbation ci-dessous :" }, @@ -3578,10 +3790,10 @@ "message": "Demander l'approbation de l'administrateur" }, "unableToCompleteLogin": { - "message": "Unable to complete login" + "message": "Impossible de terminer la connexion" }, "loginOnTrustedDeviceOrAskAdminToAssignPassword": { - "message": "You need to log in on a trusted device or ask your administrator to assign you a password." + "message": "Vous devez vous connecter sur un appareil de confiance ou demander à votre administrateur de vous attribuer un mot de passe." }, "ssoIdentifierRequired": { "message": "Identifiant SSO de l'organisation requis." @@ -3654,26 +3866,26 @@ "message": "Ne pas faire confiance" }, "organizationNotTrusted": { - "message": "Organization is not trusted" + "message": "L'organisation n'est pas fiable" }, "emergencyAccessTrustWarning": { - "message": "For the security of your account, only confirm if you have granted emergency access to this user and their fingerprint matches what is displayed in their account" + "message": "Pour la sécurité de votre compte, ne confirmez que si vous avez accordé un accès d'urgence à cet utilisateur et que son empreinte digitale correspond à ce qui est affiché dans son compte" }, "orgTrustWarning": { - "message": "For the security of your account, only proceed if you are a member of this organization, have account recovery enabled, and the fingerprint displayed below matches the organization's fingerprint." + "message": "Pour la sécurité de votre compte, ne procédez que si vous êtes membre de cette organisation, que la récupération de compte est activée et que l'empreinte digitale affichée ci-dessous correspond à l'empreinte digitale de l'organisation." }, "orgTrustWarning1": { - "message": "This organization has an Enterprise policy that will enroll you in account recovery. Enrollment will allow organization administrators to change your password. Only proceed if you recognize this organization and the fingerprint phrase displayed below matches the organization's fingerprint." + "message": "Cette organisation dispose d’une politique d’entreprise qui vous inscrira au recouvrement de compte. L'inscription permettra aux administrateurs de l'organisation de modifier votre mot de passe. Ne continuez que si vous reconnaissez cette organisation et que la phrase d'empreinte digitale affichée ci-dessous correspond à l'empreinte digitale de l'organisation." }, "trustUser": { "message": "Faire confiance à l'utilisateur" }, "sendsTitleNoItems": { - "message": "Send sensitive information safely", + "message": "Envoyez des informations sensibles en toute sécurité", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "sendsBodyNoItems": { - "message": "Share files and data securely with anyone, on any platform. Your information will remain end-to-end encrypted while limiting exposure.", + "message": "Partagez des fichiers et des données en toute sécurité avec n'importe qui, sur n'importe quelle plateforme. Vos informations resteront cryptées de bout en bout tout en limitant l'exposition.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "inputRequired": { @@ -3795,18 +4007,10 @@ "aliasDomain": { "message": "Domaine de l'alias" }, - "passwordRepromptDisabledAutofillOnPageLoad": { - "message": "Les éléments pour lesquels le mot de passe principal est redemandé ne peuvent pas être remplis automatiquement lors du chargement de la page. La saisie automatique au chargement de la page est désactivée.", - "description": "Toast message for describing that master password re-prompt cannot be autofilled on page load." - }, "autofillOnPageLoadSetToDefault": { "message": "La saisie automatique au chargement de la page est configuré selon les paramètres par défaut.", "description": "Toast message for informing the user that autofill on page load has been set to the default setting." }, - "turnOffMasterPasswordPromptToEditField": { - "message": "Désactivez la resaisie du mot de passe maître pour éditer ce champ", - "description": "Message appearing below the autofill on load message when master password reprompt is set for a vault item." - }, "toggleSideNavigation": { "message": "Basculer la navigation latérale" }, @@ -4015,15 +4219,11 @@ "selectImportCollection": { "message": "Sélectionner une collection" }, - "importTargetHint": { - "message": "Sélectionnez cette option si vous voulez que le contenu du fichier importé soit déplacé vers un(e) $DESTINATION$", - "description": "Located as a hint under the import target. Will be appended by either folder or collection, depending if the user is importing into an individual or an organizational vault.", - "placeholders": { - "destination": { - "content": "$1", - "example": "folder or collection" - } - } + "importTargetHintCollection": { + "message": "Sélectionnez cette option si vous voulez que le contenu du fichier importé soit déplacé vers une collection" + }, + "importTargetHintFolder": { + "message": "Sélectionnez cette option si vous voulez que le contenu du fichier importé soit déplacé vers un dossier" }, "importUnassignedItemsError": { "message": "Le fichier contient des éléments non assignés." @@ -4080,9 +4280,6 @@ "passkeyNotCopiedAlert": { "message": "La clé d'identification (passkey) ne sera pas copiée dans l'élément cloné. Voulez-vous continuer à cloner cet élément ?" }, - "passkeyFeatureIsNotImplementedForAccountsWithoutMasterPassword": { - "message": "Vérification requise par le site initiateur. Cette fonctionnalité n'est pas encore implémentée pour les comptes sans mot de passe principal." - }, "logInWithPasskeyQuestion": { "message": "Se connecter avec une clé d'accès ?" }, @@ -4263,19 +4460,19 @@ "description": "Label indicating the most common import formats" }, "uriMatchDefaultStrategyHint": { - "message": "URI match detection is how Bitwarden identifies autofill suggestions.", + "message": "La détection de correspondance d'URI est la manière dont Bitwarden identifie les suggestions de remplissage automatique.", "description": "Explains to the user that URI match detection determines how Bitwarden suggests autofill options, and clarifies that this default strategy applies when no specific match detection is set for a login item." }, "regExAdvancedOptionWarning": { - "message": "\"Regular expression\" is an advanced option with increased risk of exposing credentials.", + "message": "\"Expression régulière\" est une option avancée présentant un risque accru d’exposition des informations d’identification.", "description": "Content for dialog which warns a user when selecting 'regular expression' matching strategy as a cipher match strategy" }, "startsWithAdvancedOptionWarning": { - "message": "\"Starts with\" is an advanced option with increased risk of exposing credentials.", + "message": "\"Commence par\" est une option avancée présentant un risque accru d’exposition des informations d’identification.", "description": "Content for dialog which warns a user when selecting 'starts with' matching strategy as a cipher match strategy" }, "uriMatchWarningDialogLink": { - "message": "More about match detection", + "message": "En savoir plus sur la détection des correspondances", "description": "Link to match detection docs on warning dialog for advance match strategy" }, "uriAdvancedOption": { @@ -4428,7 +4625,7 @@ } }, "viewItemTitleWithField": { - "message": "View item - $ITEMNAME$ - $FIELD$", + "message": "Afficher l'élément - $ITEMNAME$ - $FIELD$", "description": "Title for a link that opens a view for an item.", "placeholders": { "itemname": { @@ -4452,7 +4649,7 @@ } }, "autofillTitleWithField": { - "message": "Autofill - $ITEMNAME$ - $FIELD$", + "message": "Remplissage automatique - $ITEMNAME$ - $FIELD$", "description": "Title for a button that autofills a login item.", "placeholders": { "itemname": { @@ -4465,17 +4662,17 @@ } } }, - "copyFieldValue": { - "message": "Copier $FIELD$, $VALUE$", + "copyFieldCipherName": { + "message": "Copier $FIELD$, $CIPHERNAME$", "description": "Title for a button that copies a field value to the clipboard.", "placeholders": { "field": { "content": "$1", "example": "Username" }, - "value": { + "ciphername": { "content": "$2", - "example": "Foo" + "example": "Login Item" } } }, @@ -4622,19 +4819,19 @@ "message": "Télécharger l'application mobile" }, "getTheMobileAppDesc": { - "message": "Access your passwords on the go with the Bitwarden mobile app." + "message": "Accédez à vos mots de passe en déplacement avec l'application mobile Bitwarden." }, "getTheDesktopApp": { "message": "Télécharger l'application de bureau" }, "getTheDesktopAppDesc": { - "message": "Access your vault without a browser, then set up unlock with biometrics to expedite unlocking in both the desktop app and browser extension." + "message": "Accédez à votre coffre-fort sans navigateur, puis configurez le déverrouillage avec la biométrie pour accélérer le déverrouillage à la fois dans l'application de bureau et dans l'extension du navigateur." }, "downloadFromBitwardenNow": { - "message": "Download from bitwarden.com now" + "message": "Téléchargez maintenant depuis bitwarden.com" }, "getItOnGooglePlay": { - "message": "Get it on Google Play" + "message": "Obtenez-le sur Google Play" }, "downloadOnTheAppStore": { "message": "Télécharger depuis l’App Store" @@ -4768,9 +4965,6 @@ } } }, - "enableAnimations": { - "message": "Activer les animations" - }, "showAnimations": { "message": "Afficher les animations" }, @@ -4844,10 +5038,10 @@ "message": "Entrez l'identifiant html, le nom, l'étiquette aria ou l'espace réservé du champ." }, "editField": { - "message": "Éditer le champ" + "message": "Modifier le champ" }, "editFieldLabel": { - "message": "Éditer $LABEL$", + "message": "Modifier $LABEL$", "placeholders": { "label": { "content": "$1", @@ -4983,15 +5177,9 @@ "itemLocation": { "message": "Emplacement de l'élément" }, - "fileSend": { - "message": "Send en fichier" - }, "fileSends": { "message": "Envoi de fichiers" }, - "textSend": { - "message": "Send en texte" - }, "textSends": { "message": "Envoi de textes" }, @@ -5001,6 +5189,18 @@ "showNumberOfAutofillSuggestions": { "message": "Afficher le nombre de suggestions de saisie automatique d'identifiant sur l'icône d'extension" }, + "accountAccessRequested": { + "message": "Accès au compte demandé" + }, + "confirmAccessAttempt": { + "message": "Confirmer la tentative d’accès pour $EMAIL$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + } + } + }, "showQuickCopyActions": { "message": "Afficher les actions de copie rapide dans le coffre" }, @@ -5040,9 +5240,6 @@ "vaultCustomTimeoutMinimum": { "message": "Le délai d'expiration personnalisé minimum est de 1 minute." }, - "additionalContentAvailable": { - "message": "Du contenu supplémentaire est disponible" - }, "fileSavedToDevice": { "message": "Fichier enregistré sur l'appareil. Gérez à partir des téléchargements de votre appareil." }, @@ -5104,13 +5301,13 @@ "message": "Déverouillez votre coffre en quelques secondes" }, "unlockVaultDesc": { - "message": "You can customize your unlock and timeout settings to more quickly access your vault." + "message": "Vous pouvez personnaliser vos paramètres de déverrouillage et de délai d'attente pour accéder plus rapidement à votre coffre-fort." }, "unlockPinSet": { - "message": "Unlock PIN set" + "message": "Déverrouiller l'ensemble de codes PIN" }, "unlockWithBiometricSet": { - "message": "Unlock with biometrics set" + "message": "Déverrouiller avec l'ensemble biométrique" }, "authenticating": { "message": "Authentification" @@ -5124,7 +5321,7 @@ "description": "Notification message for when a password has been regenerated" }, "saveToBitwarden": { - "message": "Save to Bitwarden", + "message": "Enregistrer dans Bitwarden", "description": "Confirmation message for saving a login to Bitwarden" }, "spaceCharacterDescriptor": { @@ -5328,11 +5525,17 @@ "changeAtRiskPassword": { "message": "Changer le mot de passe à risque" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "Cet identifiant est à risques et manque un site web. Ajoutez un site web et changez le mot de passe pour une meilleure sécurité." + }, + "missingWebsite": { + "message": "Site Web manquant" + }, "settingsVaultOptions": { "message": "Options du coffre" }, "emptyVaultDescription": { - "message": "The vault protects more than just your passwords. Store secure logins, IDs, cards and notes securely here." + "message": "Le coffre-fort protège bien plus que vos mots de passe. Stockez ici en toute sécurité des identifiants, des cartes d'identité, des cartes et des notes sécurisés." }, "introCarouselLabel": { "message": "Bienvenue sur Bitwarden" @@ -5341,34 +5544,34 @@ "message": "Priorité à la sécurité" }, "securityPrioritizedBody": { - "message": "Save logins, cards, and identities to your secure vault. Bitwarden uses zero-knowledge, end-to-end encryption to protect what’s important to you." + "message": "Enregistrez les identifiants, les cartes et les identités dans votre coffre-fort sécurisé. Bitwarden utilise un cryptage de bout en bout à connaissance nulle pour protéger ce qui est important pour vous." }, "quickLogin": { "message": "Connexion rapide et facile" }, "quickLoginBody": { - "message": "Set up biometric unlock and autofill to log into your accounts without typing a single letter." + "message": "Configurez le déverrouillage biométrique et le remplissage automatique pour vous connecter à vos comptes sans taper une seule lettre." }, "secureUser": { - "message": "Level up your logins" + "message": "Améliorez vos connexions" }, "secureUserBody": { - "message": "Use the generator to create and save strong, unique passwords for all your accounts." + "message": "Utilisez le générateur pour créer et enregistrer des mots de passe forts et uniques pour tous vos comptes." }, "secureDevices": { - "message": "Your data, when and where you need it" + "message": "Vos données, quand et où vous en avez besoin" }, "secureDevicesBody": { - "message": "Save unlimited passwords across unlimited devices with Bitwarden mobile, browser, and desktop apps." + "message": "Enregistrez des mots de passe illimités sur un nombre illimité d'appareils avec les applications mobiles, de navigateur et de bureau Bitwarden." }, "nudgeBadgeAria": { "message": "1 notification" }, "emptyVaultNudgeTitle": { - "message": "Import existing passwords" + "message": "Importer des mots de passe existants" }, "emptyVaultNudgeBody": { - "message": "Use the importer to quickly transfer logins to Bitwarden without manually adding them." + "message": "Utilisez l'importateur pour transférer rapidement les connexions vers Bitwarden sans les ajouter manuellement." }, "emptyVaultNudgeButton": { "message": "Importer maintenant" @@ -5376,20 +5579,32 @@ "hasItemsVaultNudgeTitle": { "message": "Bienvenue dans votre coffre !" }, + "phishingPageTitle": { + "message": "Site Web d'hameçonnage" + }, + "phishingPageCloseTab": { + "message": "Fermer l'onglet" + }, + "phishingPageContinue": { + "message": "Continuer" + }, + "phishingPageLearnWhy": { + "message": "Pourquoi voyez-vous cela?" + }, "hasItemsVaultNudgeBodyOne": { - "message": "Autofill items for the current page" + "message": "Remplissage automatique des éléments de la page actuelle" }, "hasItemsVaultNudgeBodyTwo": { - "message": "Favorite items for easy access" + "message": "Articles préférés pour un accès facile" }, "hasItemsVaultNudgeBodyThree": { - "message": "Search your vault for something else" + "message": "Recherchez autre chose dans votre coffre-fort" }, "newLoginNudgeTitle": { "message": "Gagnez du temps avec le remplissage automatique" }, "newLoginNudgeBodyOne": { - "message": "Include a", + "message": "Inclure un", "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", "example": "Include a Website so this login appears as an autofill suggestion." }, @@ -5399,33 +5614,33 @@ "example": "Include a Website so this login appears as an autofill suggestion." }, "newLoginNudgeBodyTwo": { - "message": "so this login appears as an autofill suggestion.", + "message": "cette connexion apparaît donc comme une suggestion de remplissage automatique.", "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { - "message": "Seamless online checkout" + "message": "Paiement en ligne transparent" }, "newCardNudgeBody": { - "message": "With cards, easily autofill payment forms securely and accurately." + "message": "Avec les cartes, remplissez facilement et automatiquement les formulaires de paiement de manière sécurisée et précise." }, "newIdentityNudgeTitle": { - "message": "Simplify creating accounts" + "message": "Simplifiez la création de comptes" }, "newIdentityNudgeBody": { - "message": "With identities, quickly autofill long registration or contact forms." + "message": "Avec les identités, remplissez rapidement automatiquement les longs formulaires d'inscription ou de contact." }, "newNoteNudgeTitle": { - "message": "Keep your sensitive data safe" + "message": "Gardez vos données sensibles en sécurité" }, "newNoteNudgeBody": { - "message": "With notes, securely store sensitive data like banking or insurance details." + "message": "Avec des notes, stockez en toute sécurité des données sensibles telles que des informations bancaires ou d’assurance." }, "newSshNudgeTitle": { - "message": "Developer-friendly SSH access" + "message": "Accès SSH convivial pour les développeurs" }, "newSshNudgeBodyOne": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "message": "Stockez vos clés et connectez-vous à l'agent SSH pour une authentification rapide et cryptée.", "description": "Two part message", "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, @@ -5435,27 +5650,49 @@ "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, "generatorNudgeTitle": { - "message": "Quickly create passwords" + "message": "Créez rapidement des mots de passe" }, "generatorNudgeBodyOne": { - "message": "Easily create strong and unique passwords by clicking on", + "message": "Créez facilement des mots de passe forts et uniques en cliquant sur", "description": "Two part message", "example": "Easily create strong and unique passwords by clicking on {icon} to help you keep your logins secure." }, "generatorNudgeBodyTwo": { - "message": "to help you keep your logins secure.", + "message": "pour vous aider à garder vos connexions sécurisées.", "description": "Two part message", "example": "Easily create strong and unique passwords by clicking on {icon} to help you keep your logins secure." }, "generatorNudgeBodyAria": { - "message": "Easily create strong and unique passwords by clicking on the Generate password button to help you keep your logins secure.", + "message": "Créez facilement des mots de passe forts et uniques en cliquant sur le bouton Générer un mot de passe pour vous aider à sécuriser vos connexions.", "description": "Aria label for the body content of the generator nudge" }, + "aboutThisSetting": { + "message": "À propos de ce paramètre" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden utilisera les URI de connexion enregistrées pour identifier quelle icône ou URL de changement de mot de passe doit être utilisée pour améliorer votre expérience. Aucune information n'est recueillie ou enregistrée lorsque vous utilisez ce service." + }, "noPermissionsViewPage": { - "message": "You do not have permissions to view this page. Try logging in with a different account." + "message": "Vous n'avez pas les autorisations pour consulter cette page. Essayez de vous connecter avec un autre compte." }, "wasmNotSupported": { - "message": "WebAssembly is not supported on your browser or is not enabled. WebAssembly is required to use the Bitwarden app.", + "message": "WebAssembly n'est pas pris en charge sur votre navigateur ou n'est pas activé. WebAssembly est requis pour utiliser l'application Bitwarden.", "description": "'WebAssembly' is a technical term and should not be translated." + }, + "showMore": { + "message": "Afficher plus" + }, + "showLess": { + "message": "Afficher moins" + }, + "next": { + "message": "Suivant" + }, + "moreBreadcrumbs": { + "message": "Plus de fil d'Ariane", + "description": "This is used in the context of a breadcrumb navigation, indicating that there are more items in the breadcrumb trail that are not currently displayed." + }, + "confirmKeyConnectorDomain": { + "message": "Confirmez le domaine de Key Connector" } } diff --git a/apps/browser/src/_locales/gl/messages.json b/apps/browser/src/_locales/gl/messages.json index 71841239698..11ef9ced579 100644 --- a/apps/browser/src/_locales/gl/messages.json +++ b/apps/browser/src/_locales/gl/messages.json @@ -547,12 +547,50 @@ "searchVault": { "message": "Buscar na caixa forte" }, + "resetSearch": { + "message": "Reset search" + }, + "archiveNoun": { + "message": "Archive", + "description": "Noun" + }, + "archiveVerb": { + "message": "Archive", + "description": "Verb" + }, + "unarchive": { + "message": "Unarchive" + }, + "itemsInArchive": { + "message": "Items in archive" + }, + "noItemsInArchive": { + "message": "No items in archive" + }, + "noItemsInArchiveDesc": { + "message": "Archived items will appear here and will be excluded from general search results and autofill suggestions." + }, + "itemSentToArchive": { + "message": "Item sent to archive" + }, + "itemRemovedFromArchive": { + "message": "Item removed from archive" + }, + "archiveItem": { + "message": "Archive item" + }, + "archiveItemConfirmDesc": { + "message": "Archived items are excluded from general search results and autofill suggestions. Are you sure you want to archive this item?" + }, "edit": { "message": "Editar" }, "view": { "message": "Ver" }, + "viewLogin": { + "message": "View login" + }, "noItemsInList": { "message": "Non hai entradas que listar." }, @@ -695,6 +733,15 @@ "invalidMasterPassword": { "message": "Contrasinal mestre non válido" }, + "invalidMasterPasswordConfirmEmailAndHost": { + "message": "Invalid master password. Confirm your email is correct and your account was created on $HOST$.", + "placeholders": { + "host": { + "content": "$1", + "example": "vault.bitwarden.com" + } + } + }, "vaultTimeout": { "message": "Tempo de espera da caixa forte" }, @@ -1501,6 +1548,15 @@ "readSecurityKey": { "message": "Read security key" }, + "readingPasskeyLoading": { + "message": "Reading passkey..." + }, + "passkeyAuthenticationFailed": { + "message": "Passkey authentication failed" + }, + "useADifferentLogInMethod": { + "message": "Use a different log in method" + }, "awaitingSecurityKeyInteraction": { "message": "Awaiting security key interaction..." }, @@ -1519,9 +1575,6 @@ "selectTwoStepLoginMethod": { "message": "Select two-step login method" }, - "recoveryCodeDesc": { - "message": "Perdiche o acceso ós provedores de verificación en dous pasos (2FA)? Emprega o teu código de recuperación para desactivalos." - }, "recoveryCodeTitle": { "message": "Código de recuperación" }, @@ -1680,9 +1733,6 @@ "defaultAutoFillOnPageLoadDesc": { "message": "Podes apagar o autoenchido para entradas concretas nas súas páxinas de edición." }, - "itemAutoFillOnPageLoad": { - "message": "Autoenchido ó cargar a páxina (se está activado nos Axustes)" - }, "autoFillOnPageLoadUseDefault": { "message": "Usar axustes por defecto" }, @@ -1754,23 +1804,8 @@ "popup2faCloseMessage": { "message": "Se clicas fóra desta ventá emerxente para comprobar o código do correo, cerrarase. Queres convertila nunha nova ventá completa para que non se cerre?" }, - "popupU2fCloseMessage": { - "message": "Este navegador non pode procesar peticións U2F nesta ventá emerxente. Queres convertila nunha ventá completa para poder continuar?" - }, - "enableFavicon": { - "message": "Amosar iconas web" - }, - "faviconDesc": { - "message": "Amosar unha imaxe recoñecible xunto a cada credencial." - }, - "faviconDescAlt": { - "message": "Amosar unha imaxe recoñecible xunto a cada credencial. Aplica a tódalas sesións iniciadas en Bitwarden." - }, - "enableBadgeCounter": { - "message": "Amosar contador na icona" - }, - "badgeCounterDesc": { - "message": "Indicar cantas credenciais tes gardadas para a web aberta." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "cardholderName": { "message": "Titular da tarxeta" @@ -1829,6 +1864,9 @@ "securityCode": { "message": "Código de seguridade" }, + "cardNumber": { + "message": "card number" + }, "ex": { "message": "ex." }, @@ -1931,32 +1969,81 @@ "typeNote": { "message": "Note" }, - "newItemHeader": { - "message": "Novo $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderLogin": { + "message": "New Login", + "description": "Header for new login item type" }, - "editItemHeader": { - "message": "Modificar $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderCard": { + "message": "New Card", + "description": "Header for new card item type" }, - "viewItemHeader": { - "message": "Ver $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderIdentity": { + "message": "New Identity", + "description": "Header for new identity item type" + }, + "newItemHeaderNote": { + "message": "New Note", + "description": "Header for new note item type" + }, + "newItemHeaderSshKey": { + "message": "New SSH key", + "description": "Header for new SSH key item type" + }, + "newItemHeaderTextSend": { + "message": "New Text Send", + "description": "Header for new text send" + }, + "newItemHeaderFileSend": { + "message": "New File Send", + "description": "Header for new file send" + }, + "editItemHeaderLogin": { + "message": "Edit Login", + "description": "Header for edit login item type" + }, + "editItemHeaderCard": { + "message": "Edit Card", + "description": "Header for edit card item type" + }, + "editItemHeaderIdentity": { + "message": "Edit Identity", + "description": "Header for edit identity item type" + }, + "editItemHeaderNote": { + "message": "Edit Note", + "description": "Header for edit note item type" + }, + "editItemHeaderSshKey": { + "message": "Edit SSH key", + "description": "Header for edit SSH key item type" + }, + "editItemHeaderTextSend": { + "message": "Edit Text Send", + "description": "Header for edit text send" + }, + "editItemHeaderFileSend": { + "message": "Edit File Send", + "description": "Header for edit file send" + }, + "viewItemHeaderLogin": { + "message": "View Login", + "description": "Header for view login item type" + }, + "viewItemHeaderCard": { + "message": "View Card", + "description": "Header for view card item type" + }, + "viewItemHeaderIdentity": { + "message": "View Identity", + "description": "Header for view identity item type" + }, + "viewItemHeaderNote": { + "message": "View Note", + "description": "Header for view note item type" + }, + "viewItemHeaderSshKey": { + "message": "View SSH key", + "description": "Header for view SSH key item type" }, "passwordHistory": { "message": "Historial de contrasinais" @@ -3129,6 +3216,24 @@ } } }, + "exportingOrganizationVaultFromPasswordManagerWithDataOwnershipDesc": { + "message": "Only the organization vault associated with $ORGANIZATION$ will be exported.", + "placeholders": { + "organization": { + "content": "$1", + "example": "My Org Name" + } + } + }, + "exportingOrganizationVaultFromAdminConsoleWithDataOwnershipDesc": { + "message": "Only the organization vault associated with $ORGANIZATION$ will be exported. My items collections will not be included.", + "placeholders": { + "organization": { + "content": "$1", + "example": "My Org Name" + } + } + }, "error": { "message": "Erro" }, @@ -3460,6 +3565,28 @@ "logInRequestSent": { "message": "Request sent" }, + "loginRequestApprovedForEmailOnDevice": { + "message": "Login request approved for $EMAIL$ on $DEVICE$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + }, + "device": { + "content": "$2", + "example": "Web app - Chrome" + } + } + }, + "youDeniedLoginAttemptFromAnotherDevice": { + "message": "You denied a login attempt from another device. If this was you, try to log in with the device again." + }, + "device": { + "message": "Device" + }, + "loginStatus": { + "message": "Login status" + }, "masterPasswordChanged": { "message": "Master password saved" }, @@ -3496,9 +3623,6 @@ "autofillPageLoadPolicyActivated": { "message": "As directivas da organización activaron o autoenchido ó cargar a páxina." }, - "howToAutofill": { - "message": "Como autoencher" - }, "autofillSelectInfoWithCommand": { "message": "Selecciona unha entrada desta pantalla, emprega o atallo $COMMAND$, ou explora outras opcións en axustes.", "placeholders": { @@ -3556,6 +3680,94 @@ "rememberThisDeviceToMakeFutureLoginsSeamless": { "message": "Lembrar este dispositivo para futuros inicios de sesión imperceptibles" }, + "manageDevices": { + "message": "Manage devices" + }, + "currentSession": { + "message": "Current session" + }, + "mobile": { + "message": "Mobile", + "description": "Mobile app" + }, + "extension": { + "message": "Extension", + "description": "Browser extension/addon" + }, + "desktop": { + "message": "Desktop", + "description": "Desktop app" + }, + "webVault": { + "message": "Web vault" + }, + "webApp": { + "message": "Web app" + }, + "cli": { + "message": "CLI" + }, + "sdk": { + "message": "SDK", + "description": "Software Development Kit" + }, + "requestPending": { + "message": "Request pending" + }, + "firstLogin": { + "message": "First login" + }, + "trusted": { + "message": "Trusted" + }, + "needsApproval": { + "message": "Needs approval" + }, + "devices": { + "message": "Devices" + }, + "accessAttemptBy": { + "message": "Access attempt by $EMAIL$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + } + } + }, + "confirmAccess": { + "message": "Confirm access" + }, + "denyAccess": { + "message": "Deny access" + }, + "time": { + "message": "Time" + }, + "deviceType": { + "message": "Device Type" + }, + "loginRequest": { + "message": "Login request" + }, + "thisRequestIsNoLongerValid": { + "message": "This request is no longer valid." + }, + "loginRequestHasAlreadyExpired": { + "message": "Login request has already expired." + }, + "justNow": { + "message": "Just now" + }, + "requestedXMinutesAgo": { + "message": "Requested $MINUTES$ minutes ago", + "placeholders": { + "minutes": { + "content": "$1", + "example": "5" + } + } + }, "deviceApprovalRequired": { "message": "Aprobación de dispositivo requirida. Selecciona unha das seguintes opcións:" }, @@ -3795,18 +4007,10 @@ "aliasDomain": { "message": "Alias do dominio" }, - "passwordRepromptDisabledAutofillOnPageLoad": { - "message": "As entradas que requiran volver a inserir o contrasinal mestre non poden ser autoenchidas ó cargar a páxina.", - "description": "Toast message for describing that master password re-prompt cannot be autofilled on page load." - }, "autofillOnPageLoadSetToDefault": { "message": "Axuste de autoenchido ó cargar a páxina por defecto.", "description": "Toast message for informing the user that autofill on page load has been set to the default setting." }, - "turnOffMasterPasswordPromptToEditField": { - "message": "Desactiva volver a requirir o contrasinal mestre para modificar este campo", - "description": "Message appearing below the autofill on load message when master password reprompt is set for a vault item." - }, "toggleSideNavigation": { "message": "Activar/desactivar navegación lateral" }, @@ -4015,15 +4219,11 @@ "selectImportCollection": { "message": "Seleccionar unha colección" }, - "importTargetHint": { - "message": "Selecciona esta opción se queres que o contido importado se mova a $DESTINATION$", - "description": "Located as a hint under the import target. Will be appended by either folder or collection, depending if the user is importing into an individual or an organizational vault.", - "placeholders": { - "destination": { - "content": "$1", - "example": "folder or collection" - } - } + "importTargetHintCollection": { + "message": "Select this option if you want the imported file contents moved to a collection" + }, + "importTargetHintFolder": { + "message": "Select this option if you want the imported file contents moved to a folder" }, "importUnassignedItemsError": { "message": "O arquivo contén entradas sen asignar." @@ -4080,9 +4280,6 @@ "passkeyNotCopiedAlert": { "message": "A Clave de acceso non se incluirá na entrada clonada. Queres continuar co duplicado?" }, - "passkeyFeatureIsNotImplementedForAccountsWithoutMasterPassword": { - "message": "Verificación requirida polo sitio inicial. Esta función aínda non está implementada para contas sen contrasinal mestre." - }, "logInWithPasskeyQuestion": { "message": "Iniciar sesión con Clave de acceso?" }, @@ -4465,17 +4662,17 @@ } } }, - "copyFieldValue": { - "message": "Copy $FIELD$, $VALUE$", + "copyFieldCipherName": { + "message": "Copy $FIELD$, $CIPHERNAME$", "description": "Title for a button that copies a field value to the clipboard.", "placeholders": { "field": { "content": "$1", "example": "Username" }, - "value": { + "ciphername": { "content": "$2", - "example": "Foo" + "example": "Login Item" } } }, @@ -4768,9 +4965,6 @@ } } }, - "enableAnimations": { - "message": "Activar animacións" - }, "showAnimations": { "message": "Amosar animacións" }, @@ -4983,15 +5177,9 @@ "itemLocation": { "message": "Ubicación da entrada" }, - "fileSend": { - "message": "Arquivo Send" - }, "fileSends": { "message": "Arquivos Send" }, - "textSend": { - "message": "Texto Send" - }, "textSends": { "message": "Textos Send" }, @@ -5001,6 +5189,18 @@ "showNumberOfAutofillSuggestions": { "message": "Amosar o número de suxestións de credenciais na icona da extensión" }, + "accountAccessRequested": { + "message": "Account access requested" + }, + "confirmAccessAttempt": { + "message": "Confirm access attempt for $EMAIL$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + } + } + }, "showQuickCopyActions": { "message": "Amosar accións rápidas de copiado na caixa forte" }, @@ -5040,9 +5240,6 @@ "vaultCustomTimeoutMinimum": { "message": "O tempo mínimo personalizado é de 1 minuto." }, - "additionalContentAvailable": { - "message": "Hai dispoñibles contidos adicionais" - }, "fileSavedToDevice": { "message": "Arquivo gardado no dispositivo. Xestiónao dende as descargas do dispositivo." }, @@ -5328,6 +5525,12 @@ "changeAtRiskPassword": { "message": "Change at-risk password" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "This login is at-risk and missing a website. Add a website and change the password for stronger security." + }, + "missingWebsite": { + "message": "Missing website" + }, "settingsVaultOptions": { "message": "Vault options" }, @@ -5376,6 +5579,18 @@ "hasItemsVaultNudgeTitle": { "message": "Welcome to your vault!" }, + "phishingPageTitle": { + "message": "Phishing website" + }, + "phishingPageCloseTab": { + "message": "Close tab" + }, + "phishingPageContinue": { + "message": "Continue" + }, + "phishingPageLearnWhy": { + "message": "Why are you seeing this?" + }, "hasItemsVaultNudgeBodyOne": { "message": "Autofill items for the current page" }, @@ -5451,11 +5666,33 @@ "message": "Easily create strong and unique passwords by clicking on the Generate password button to help you keep your logins secure.", "description": "Aria label for the body content of the generator nudge" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "noPermissionsViewPage": { "message": "You do not have permissions to view this page. Try logging in with a different account." }, "wasmNotSupported": { "message": "WebAssembly is not supported on your browser or is not enabled. WebAssembly is required to use the Bitwarden app.", "description": "'WebAssembly' is a technical term and should not be translated." + }, + "showMore": { + "message": "Show more" + }, + "showLess": { + "message": "Show less" + }, + "next": { + "message": "Next" + }, + "moreBreadcrumbs": { + "message": "More breadcrumbs", + "description": "This is used in the context of a breadcrumb navigation, indicating that there are more items in the breadcrumb trail that are not currently displayed." + }, + "confirmKeyConnectorDomain": { + "message": "Confirm Key Connector domain" } } diff --git a/apps/browser/src/_locales/he/messages.json b/apps/browser/src/_locales/he/messages.json index b9a0a3dada4..f040ab6a1b6 100644 --- a/apps/browser/src/_locales/he/messages.json +++ b/apps/browser/src/_locales/he/messages.json @@ -395,7 +395,7 @@ "message": "תיקייה חדשה" }, "folderName": { - "message": "שם תיקייה" + "message": "שם התיקייה" }, "folderHintText": { "message": "צור תיקייה מקוננת על ידי הוספת שם תיקיית האב ואחריו “/”. דוגמה: חברתי/פורומים" @@ -547,12 +547,50 @@ "searchVault": { "message": "חיפוש בכספת" }, + "resetSearch": { + "message": "אפס חיפוש" + }, + "archiveNoun": { + "message": "Archive", + "description": "Noun" + }, + "archiveVerb": { + "message": "Archive", + "description": "Verb" + }, + "unarchive": { + "message": "Unarchive" + }, + "itemsInArchive": { + "message": "Items in archive" + }, + "noItemsInArchive": { + "message": "No items in archive" + }, + "noItemsInArchiveDesc": { + "message": "Archived items will appear here and will be excluded from general search results and autofill suggestions." + }, + "itemSentToArchive": { + "message": "Item sent to archive" + }, + "itemRemovedFromArchive": { + "message": "Item removed from archive" + }, + "archiveItem": { + "message": "Archive item" + }, + "archiveItemConfirmDesc": { + "message": "Archived items are excluded from general search results and autofill suggestions. Are you sure you want to archive this item?" + }, "edit": { "message": "ערוך" }, "view": { "message": "הצג" }, + "viewLogin": { + "message": "הצג כניסה" + }, "noItemsInList": { "message": "אין פריטים להצגה." }, @@ -695,6 +733,15 @@ "invalidMasterPassword": { "message": "סיסמה ראשית שגויה" }, + "invalidMasterPasswordConfirmEmailAndHost": { + "message": "Invalid master password. Confirm your email is correct and your account was created on $HOST$.", + "placeholders": { + "host": { + "content": "$1", + "example": "vault.bitwarden.com" + } + } + }, "vaultTimeout": { "message": "פסק זמן לכספת" }, @@ -845,10 +892,10 @@ "message": "הפוך את האימות הדו־שלבי לחלק" }, "totpHelper": { - "message": "Bitwarden יכול לאחסון ולמלא קודים של אימות דו־שלבי. העתק והדבק את המפתח לשדה זה." + "message": "Bitwarden יכול לאחסן ולמלא קודים של אימות דו־שלבי. העתק והדבק את המפתח לתוך שדה זה." }, "totpHelperWithCapture": { - "message": "Bitwarden יכול לאחסון ולמלא קודים של אימות דו־שלבי. בחר את סמל המצלמה כדי לצלם את הקוד QR המאמת של אתר זה, או העתק והדבק את המפתח לתוך שדה זה." + "message": "Bitwarden יכול לאחסן ולמלא קודים של אימות דו־שלבי. בחר את סמל המצלמה כדי לצלם את הקוד QR המאמת של אתר זה, או העתק והדבק את המפתח לתוך שדה זה." }, "learnMoreAboutAuthenticators": { "message": "למד עוד על מאמתים" @@ -887,7 +934,7 @@ "message": "עקוב אחר השלבים למטה כדי לסיים להיכנס." }, "followTheStepsBelowToFinishLoggingInWithSecurityKey": { - "message": "Follow the steps below to finish logging in with your security key." + "message": "יש לעקוב אחר השלבים למטה כדי לסיים להיכנס באמצעות מפתח האבטחה שלך." }, "restartRegistration": { "message": "התחל הרשמה מחדש" @@ -1063,7 +1110,7 @@ "message": "שמור" }, "notificationViewAria": { - "message": "View $ITEMNAME$, opens in new window", + "message": "הצג את $ITEMNAME$, נפתח בחלון חדש", "placeholders": { "itemName": { "content": "$1" @@ -1072,18 +1119,18 @@ "description": "Aria label for the view button in notification bar confirmation message" }, "notificationNewItemAria": { - "message": "New Item, opens in new window", + "message": "פריט חדש, נפתח בחלון חדש", "description": "Aria label for the new item button in notification bar confirmation message when error is prompted" }, "notificationEditTooltip": { - "message": "Edit before saving", + "message": "ערוך לפני השמירה", "description": "Tooltip and Aria label for edit button on cipher item" }, "newNotification": { - "message": "New notification" + "message": "התראה חדשה" }, "labelWithNotification": { - "message": "$LABEL$: New notification", + "message": "$LABEL$: התראה חדשה", "description": "Label for the notification with a new login suggestion.", "placeholders": { "label": { @@ -1093,15 +1140,15 @@ } }, "notificationLoginSaveConfirmation": { - "message": "saved to Bitwarden.", + "message": "נשמר ב־Bitwarden.", "description": "Shown to user after item is saved." }, "notificationLoginUpdatedConfirmation": { - "message": "updated in Bitwarden.", + "message": "עודכן ב־Bitwarden.", "description": "Shown to user after item is updated." }, "selectItemAriaLabel": { - "message": "Select $ITEMTYPE$, $ITEMNAME$", + "message": "בחר $ITEMTYPE$, $ITEMNAME$", "description": "Used by screen readers. $1 is the item type (like vault or folder), $2 is the selected item name.", "placeholders": { "itemType": { @@ -1121,15 +1168,15 @@ "description": "Button text for updating an existing login entry." }, "unlockToSave": { - "message": "Unlock to save this login", + "message": "בטל נעילה כדי לשמור כניסה זו", "description": "User prompt to take action in order to save the login they just entered." }, "saveLogin": { - "message": "Save login", + "message": "שמור כניסה", "description": "Prompt asking the user if they want to save their login details." }, "updateLogin": { - "message": "Update existing login", + "message": "עדכן כניסה קיימת", "description": "Prompt asking the user if they want to update an existing login entry." }, "loginSaveSuccess": { @@ -1141,7 +1188,7 @@ "description": "Message displayed when login details are successfully updated." }, "loginUpdateTaskSuccess": { - "message": "Great job! You took the steps to make you and $ORGANIZATION$ more secure.", + "message": "עבודה נהדרת! ביצעת את השלבים כדי להפוך אותך ואת $ORGANIZATION$ ליותר מאובטחים.", "placeholders": { "organization": { "content": "$1" @@ -1150,7 +1197,7 @@ "description": "Shown to user after login is updated." }, "loginUpdateTaskSuccessAdditional": { - "message": "Thank you for making $ORGANIZATION$ more secure. You have $TASK_COUNT$ more passwords to update.", + "message": "תודה לך שהפכת את $ORGANIZATION$ ליותר מאובטח. יש לך עוד $TASK_COUNT$ סיסמאות לעדכן.", "placeholders": { "organization": { "content": "$1" @@ -1162,7 +1209,7 @@ "description": "Shown to user after login is updated." }, "nextSecurityTaskAction": { - "message": "Change next password", + "message": "שנה את הסיסמה הבאה", "description": "Message prompting user to undertake completion of another security task." }, "saveFailure": { @@ -1174,10 +1221,10 @@ "description": "Detailed error message shown when saving login details fails." }, "changePasswordWarning": { - "message": "After changing your password, you will need to log in with your new password. Active sessions on other devices will be logged out within one hour." + "message": "לאחר שינוי הסיסמה שלך, תצטרך להיכנס עם הסיסמה החדשה שלך. הפעלות פעילות במכשירים אחרים ינותקו תוך שעה." }, "accountRecoveryUpdateMasterPasswordSubtitle": { - "message": "Change your master password to complete account recovery." + "message": "יש לשנות את הסיסמה הראשית שלך כדי להשלים את שחזור החשבון." }, "enableChangedPasswordNotification": { "message": "שאל אם לעדכן פרטי כניסה קיימת" @@ -1372,7 +1419,7 @@ "message": "התכונה אינה זמינה" }, "legacyEncryptionUnsupported": { - "message": "Legacy encryption is no longer supported. Please contact support to recover your account." + "message": "הצפנה מהדור הקודם אינה נתמכת עוד. נא ליצור קשר עם התמיכה כדי לשחזר את חשבונך." }, "premiumMembership": { "message": "חברות פרימיום" @@ -1501,6 +1548,15 @@ "readSecurityKey": { "message": "קרא מפתח אבטחה" }, + "readingPasskeyLoading": { + "message": "Reading passkey..." + }, + "passkeyAuthenticationFailed": { + "message": "Passkey authentication failed" + }, + "useADifferentLogInMethod": { + "message": "Use a different log in method" + }, "awaitingSecurityKeyInteraction": { "message": "ממתין לאינטראקציה עם מפתח אבטחה..." }, @@ -1519,9 +1575,6 @@ "selectTwoStepLoginMethod": { "message": "בחר שיטת כניסה דו־שלבית" }, - "recoveryCodeDesc": { - "message": "איבדת גישה לכל הספקים הדו־גורמיים שלך? השתמש בקוד השחזור שלך כדי לכבות את כל הספקים הדו־גורמיים מהחשבון שלך." - }, "recoveryCodeTitle": { "message": "קוד שחזור" }, @@ -1606,13 +1659,13 @@ "message": "הצעות למילוי אוטומטי" }, "autofillSpotlightTitle": { - "message": "Easily find autofill suggestions" + "message": "מצא בקלות הצעות למילוי אוטומטי" }, "autofillSpotlightDesc": { - "message": "Turn off your browser's autofill settings, so they don't conflict with Bitwarden." + "message": "השבת את המילוי האוטומטי של הדפדפן שלך, כך שהוא לא יתנגש עם Bitwarden." }, "turnOffBrowserAutofill": { - "message": "Turn off $BROWSER$ autofill", + "message": "השבת את המילוי האוטומטי של $BROWSER$", "placeholders": { "browser": { "content": "$1", @@ -1621,7 +1674,7 @@ } }, "turnOffAutofill": { - "message": "Turn off autofill" + "message": "השבת מילוי אוטומטי" }, "showInlineMenuLabel": { "message": "הצג הצעות למילוי אוטומטי על שדות טופס" @@ -1680,9 +1733,6 @@ "defaultAutoFillOnPageLoadDesc": { "message": "אתה יכול לכבות מילוי אוטומטי בעת טעינת עמוד עבור פריטי כניסה בודדים מתצוגת העריכה של הפריט." }, - "itemAutoFillOnPageLoad": { - "message": "מילוי אוטומטי בעת טעינת עמוד (אם מוגדר באפשרויות)" - }, "autoFillOnPageLoadUseDefault": { "message": "השתמש בהגדרת ברירת המחדל" }, @@ -1754,23 +1804,8 @@ "popup2faCloseMessage": { "message": "לחיצה מחוץ לחלונית הצפה שנפתחה בכדי לבדוק את פרטי האימות תגרום לחלונית שנפתחה, להסגר. האם ברצונך להציג את המידע בחלון שאינו נסגר?" }, - "popupU2fCloseMessage": { - "message": "דפדפן זה לא יכול לעבד בקשות U2F בחלון צף זה. האם ברצונך לפתוח את החלון הצף כחלון חדש רגיל כדי שתוכל להכנס באמצעות U2F?" - }, - "enableFavicon": { - "message": "הצג סמלי אתר אינטרנט" - }, - "faviconDesc": { - "message": "הצג תמונה מוכרת ליד כל כניסה." - }, - "faviconDescAlt": { - "message": "הצג תמונה מוכרת ליד כל כניסה. חל על כל החשבונות המחוברים." - }, - "enableBadgeCounter": { - "message": "הצג מונה סמל" - }, - "badgeCounterDesc": { - "message": "מציין כמה כניסות יש לך עבור עמוד הרשת הנוכחי." + "showIconsChangePasswordUrls": { + "message": "הצג סמלי אתרי אינטרנט ואחזר כתובות URL לשינוי סיסמה" }, "cardholderName": { "message": "שם בעל הכרטיס" @@ -1829,6 +1864,9 @@ "securityCode": { "message": "קוד אבטחה" }, + "cardNumber": { + "message": "מספר כרטיס" + }, "ex": { "message": "לדוגמא" }, @@ -1929,34 +1967,83 @@ "message": "מפתח SSH" }, "typeNote": { - "message": "Note" + "message": "הערה" }, - "newItemHeader": { - "message": "$TYPE$ חדש", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderLogin": { + "message": "New Login", + "description": "Header for new login item type" }, - "editItemHeader": { - "message": "ערוך $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderCard": { + "message": "New Card", + "description": "Header for new card item type" }, - "viewItemHeader": { - "message": "הצג $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderIdentity": { + "message": "New Identity", + "description": "Header for new identity item type" + }, + "newItemHeaderNote": { + "message": "New Note", + "description": "Header for new note item type" + }, + "newItemHeaderSshKey": { + "message": "New SSH key", + "description": "Header for new SSH key item type" + }, + "newItemHeaderTextSend": { + "message": "New Text Send", + "description": "Header for new text send" + }, + "newItemHeaderFileSend": { + "message": "New File Send", + "description": "Header for new file send" + }, + "editItemHeaderLogin": { + "message": "Edit Login", + "description": "Header for edit login item type" + }, + "editItemHeaderCard": { + "message": "Edit Card", + "description": "Header for edit card item type" + }, + "editItemHeaderIdentity": { + "message": "Edit Identity", + "description": "Header for edit identity item type" + }, + "editItemHeaderNote": { + "message": "Edit Note", + "description": "Header for edit note item type" + }, + "editItemHeaderSshKey": { + "message": "Edit SSH key", + "description": "Header for edit SSH key item type" + }, + "editItemHeaderTextSend": { + "message": "Edit Text Send", + "description": "Header for edit text send" + }, + "editItemHeaderFileSend": { + "message": "Edit File Send", + "description": "Header for edit file send" + }, + "viewItemHeaderLogin": { + "message": "View Login", + "description": "Header for view login item type" + }, + "viewItemHeaderCard": { + "message": "View Card", + "description": "Header for view card item type" + }, + "viewItemHeaderIdentity": { + "message": "View Identity", + "description": "Header for view identity item type" + }, + "viewItemHeaderNote": { + "message": "View Note", + "description": "Header for view note item type" + }, + "viewItemHeaderSshKey": { + "message": "View SSH key", + "description": "Header for view SSH key item type" }, "passwordHistory": { "message": "היסטוריית סיסמאות" @@ -2163,7 +2250,7 @@ "message": "קבע קוד PIN לביטול נעילת Bitwarden. הגדרות הPIN יאופסו אם תבצע יציאה מהתוכנה." }, "setPinCode": { - "message": "You can use this PIN to unlock Bitwarden. Your PIN will be reset if you ever fully log out of the application." + "message": "באפשרותך להשתמש ב־PIN זה כדי לבטל את נעילת Bitwarden. ה־PIN שלך יאופס אם אי פעם תצא באופן מלא מהיישום." }, "pinRequired": { "message": "נדרש קוד PIN." @@ -2214,7 +2301,7 @@ "message": "השתמש בסיסמה זו" }, "useThisPassphrase": { - "message": "Use this passphrase" + "message": "השתמש בביטוי סיסמה זה" }, "useThisUsername": { "message": "השתמש בשם משתמש זה" @@ -2494,10 +2581,10 @@ "message": "מדיניות ארגון חסמה ייבוא פריטים אל תוך הכספת האישית שלך." }, "restrictCardTypeImport": { - "message": "Cannot import card item types" + "message": "לא ניתן לייבא פריטים מסוג כרטיס" }, "restrictCardTypeImportDesc": { - "message": "A policy set by 1 or more organizations prevents you from importing cards to your vaults." + "message": "מדיניות שנקבעה על ידי ארגון אחד או יותר מונעת ממך מלייבא כרטיסים לכספות שלך." }, "domainsTitle": { "message": "דומיינים", @@ -2531,7 +2618,7 @@ "message": "שינוי" }, "changePassword": { - "message": "Change password", + "message": "שנה סיסמה", "description": "Change password button for browser at risk notification on login." }, "changeButtonTitle": { @@ -2544,7 +2631,7 @@ } }, "atRiskPassword": { - "message": "At-risk password" + "message": "סיסמה בסיכון" }, "atRiskPasswords": { "message": "סיסמאות בסיכון" @@ -2581,7 +2668,7 @@ } }, "atRiskChangePrompt": { - "message": "Your password for this site is at-risk. $ORGANIZATION$ has requested that you change it.", + "message": "הסיסמה שלך עבור אתר זה נמצאת בסיכון. $ORGANIZATION$ ביקשו שתשנה אותה.", "placeholders": { "organization": { "content": "$1", @@ -2591,7 +2678,7 @@ "description": "Notification body when a login triggers an at-risk password change request and the change password domain is known." }, "atRiskNavigatePrompt": { - "message": "$ORGANIZATION$ wants you to change this password because it is at-risk. Navigate to your account settings to change the password.", + "message": "$ORGANIZATION$ רוצים שתשנה את הסיסמה הזאת בגלל שהיא בסיכון. נווט אל הגדרות החשבון שלך כדי לשנות את הסיסמה.", "placeholders": { "organization": { "content": "$1", @@ -2629,14 +2716,14 @@ "description": "Description of the review at-risk login slide on the at-risk password page carousel" }, "reviewAtRiskLoginSlideImgAltPeriod": { - "message": "Illustration of a list of logins that are at-risk." + "message": "איור של רשימת כניסות בסיכון." }, "generatePasswordSlideDesc": { "message": "צור במהירות סיסמה חזקה וייחודית עם תפריט המילוי האוטומטי של Bitwarden באתר שבסיכון.", "description": "Description of the generate password slide on the at-risk password page carousel" }, "generatePasswordSlideImgAltPeriod": { - "message": "Illustration of the Bitwarden autofill menu displaying a generated password." + "message": "איור של תפריט המילוי האוטומטי של Bitwarden המציג סיסמה שנוצרה." }, "updateInBitwarden": { "message": "עדכן ב־Bitwarden" @@ -2646,7 +2733,7 @@ "description": "Description of the update in Bitwarden slide on the at-risk password page carousel" }, "updateInBitwardenSlideImgAltPeriod": { - "message": "Illustration of a Bitwarden’s notification prompting the user to update the login." + "message": "איור של התראת Bitwarden המנחה את המשתמש לעדכן את הכניסה." }, "turnOnAutofill": { "message": "הפעל מילוי אוטומטי" @@ -2926,7 +3013,7 @@ "message": "עליך לאמת את הדוא\"ל שלך כדי להשתמש בתכונה זו. ניתן לאמת את הדוא\"ל שלך בכספת הרשת." }, "masterPasswordSuccessfullySet": { - "message": "Master password successfully set" + "message": "סיסמה ראשית הוגדרה בהצלחה" }, "updatedMasterPassword": { "message": "סיסמה ראשית עודכנה" @@ -3067,13 +3154,13 @@ "message": "לא נמצא מזהה ייחודי." }, "removeMasterPasswordForOrganizationUserKeyConnector": { - "message": "A master password is no longer required for members of the following organization. Please confirm the domain below with your organization administrator." + "message": "סיסמה ראשית אינה נדרשת עוד עבור חברים בארגון הבא. נא לאשר את הדומיין שלהלן עם מנהל הארגון שלך." }, "organizationName": { - "message": "Organization name" + "message": "שם הארגון" }, "keyConnectorDomain": { - "message": "Key Connector domain" + "message": "דומיין של Key Connector" }, "leaveOrganization": { "message": "עזוב ארגון" @@ -3109,7 +3196,7 @@ } }, "exportingIndividualVaultWithAttachmentsDescription": { - "message": "Only the individual vault items including attachments associated with $EMAIL$ will be exported. Organization vault items will not be included", + "message": "רק פריטי הכספת האישית כולל צרופות המשויכים עם $EMAIL$ ייוצאו. פריטי כספת ארגונית לא יכללו", "placeholders": { "email": { "content": "$1", @@ -3129,6 +3216,24 @@ } } }, + "exportingOrganizationVaultFromPasswordManagerWithDataOwnershipDesc": { + "message": "Only the organization vault associated with $ORGANIZATION$ will be exported.", + "placeholders": { + "organization": { + "content": "$1", + "example": "My Org Name" + } + } + }, + "exportingOrganizationVaultFromAdminConsoleWithDataOwnershipDesc": { + "message": "Only the organization vault associated with $ORGANIZATION$ will be exported. My items collections will not be included.", + "placeholders": { + "organization": { + "content": "$1", + "example": "My Org Name" + } + } + }, "error": { "message": "שגיאה" }, @@ -3460,8 +3565,30 @@ "logInRequestSent": { "message": "בקשה נשלחה" }, + "loginRequestApprovedForEmailOnDevice": { + "message": "בקשת הכניסה אושרה עבור $EMAIL$ ב־$DEVICE$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + }, + "device": { + "content": "$2", + "example": "Web app - Chrome" + } + } + }, + "youDeniedLoginAttemptFromAnotherDevice": { + "message": "דחית ניסיון כניסה ממכשיר אחר. אם זה היית אתה, נסה להיכנס עם המכשיר שוב." + }, + "device": { + "message": "מכשיר" + }, + "loginStatus": { + "message": "מצב כניסה" + }, "masterPasswordChanged": { - "message": "Master password saved" + "message": "הסיסמה הראשית נשמרה" }, "exposedMasterPassword": { "message": "סיסמה ראשית חשופה" @@ -3496,9 +3623,6 @@ "autofillPageLoadPolicyActivated": { "message": "פוליסות הארגון שלך הפעילו מילוי אוטומטי בעת טעינת עמוד." }, - "howToAutofill": { - "message": "כיצד למלא אוטומטית" - }, "autofillSelectInfoWithCommand": { "message": "בחר פריט ממסך זה, בחר את קיצור הדרך $COMMAND$, או חקור אפשרויות אחרות בהגדרות.", "placeholders": { @@ -3556,6 +3680,94 @@ "rememberThisDeviceToMakeFutureLoginsSeamless": { "message": "זכור מכשיר זה כדי להפוך כניסות עתידיות לחלקות" }, + "manageDevices": { + "message": "נהל מכשירים" + }, + "currentSession": { + "message": "הפעלה נוכחית" + }, + "mobile": { + "message": "נייד", + "description": "Mobile app" + }, + "extension": { + "message": "הרחבה", + "description": "Browser extension/addon" + }, + "desktop": { + "message": "שולחן עבודה", + "description": "Desktop app" + }, + "webVault": { + "message": "כספת רשת" + }, + "webApp": { + "message": "יישום רשת" + }, + "cli": { + "message": "CLI" + }, + "sdk": { + "message": "SDK", + "description": "Software Development Kit" + }, + "requestPending": { + "message": "בקשה בהמתנה" + }, + "firstLogin": { + "message": "כניסה ראשונה" + }, + "trusted": { + "message": "מהימן" + }, + "needsApproval": { + "message": "צריך אישור" + }, + "devices": { + "message": "מכשירים" + }, + "accessAttemptBy": { + "message": "ניסיון גישה על ידי $EMAIL$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + } + } + }, + "confirmAccess": { + "message": "אשר גישה" + }, + "denyAccess": { + "message": "דחה גישה" + }, + "time": { + "message": "זמן" + }, + "deviceType": { + "message": "סוג מכשיר" + }, + "loginRequest": { + "message": "בקשת כניסה" + }, + "thisRequestIsNoLongerValid": { + "message": "בקשה זו אינה תקפה עוד." + }, + "loginRequestHasAlreadyExpired": { + "message": "כבר פג תוקפה של בקשת הכניסה." + }, + "justNow": { + "message": "זה עתה" + }, + "requestedXMinutesAgo": { + "message": "התבקשה לפני $MINUTES$ דקות", + "placeholders": { + "minutes": { + "content": "$1", + "example": "5" + } + } + }, "deviceApprovalRequired": { "message": "נדרש אישור מכשיר. בחר אפשרות אישור למטה:" }, @@ -3578,10 +3790,10 @@ "message": "בקש אישור מנהל" }, "unableToCompleteLogin": { - "message": "Unable to complete login" + "message": "לא ניתן להשלים את הכניסה" }, "loginOnTrustedDeviceOrAskAdminToAssignPassword": { - "message": "You need to log in on a trusted device or ask your administrator to assign you a password." + "message": "עליך להיכנס במכשיר מהימן או לבקש ממנהל המערכת שלך להקצות לך סיסמה." }, "ssoIdentifierRequired": { "message": "נדרש מזהה SSO של הארגון." @@ -3645,35 +3857,35 @@ "message": "מכשיר מהימן" }, "trustOrganization": { - "message": "Trust organization" + "message": "תן אמון בארגון" }, "trust": { - "message": "Trust" + "message": "תן אמון" }, "doNotTrust": { - "message": "Do not trust" + "message": "אל תתן אמון" }, "organizationNotTrusted": { - "message": "Organization is not trusted" + "message": "הארגון אינו מהימן" }, "emergencyAccessTrustWarning": { - "message": "For the security of your account, only confirm if you have granted emergency access to this user and their fingerprint matches what is displayed in their account" + "message": "למען אבטחת חשבונך, אשר רק אם הענקת גישת חירום למשתמש הזה וטביעת האצבע שלו תואמת את מה שמוצג בחשבון שלו" }, "orgTrustWarning": { - "message": "For the security of your account, only proceed if you are a member of this organization, have account recovery enabled, and the fingerprint displayed below matches the organization's fingerprint." + "message": "למען אבטחת חשבונך, המשך רק אם אתה חבר של הארגון הזה, הפעלת שחזור חשבון, וטביעת האצבע המוצגת למטה תואמת את טביעת האצבע של הארגון." }, "orgTrustWarning1": { - "message": "This organization has an Enterprise policy that will enroll you in account recovery. Enrollment will allow organization administrators to change your password. Only proceed if you recognize this organization and the fingerprint phrase displayed below matches the organization's fingerprint." + "message": "לארגון זה יש מדיניות ארגונית אשר תרשום אותך לשחזור חשבון. ההרשמה תאפשר למנהלי הארגון לשנות את הסיסמה שלך. המשך רק אם אתה מזהה את הארגון הזה וביטוי טביעת האצבע המוצג למטה תואם את טביעת האצבע של הארגון." }, "trustUser": { - "message": "Trust user" + "message": "תן אמון במשתמש" }, "sendsTitleNoItems": { - "message": "Send sensitive information safely", + "message": "שלח מידע רגיש באופן בטוח", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "sendsBodyNoItems": { - "message": "Share files and data securely with anyone, on any platform. Your information will remain end-to-end encrypted while limiting exposure.", + "message": "שתף קבצים ונתונים באופן מאובטח עם כל אחד, בכל פלטפורמה. המידע שלך יישאר מוצפן מקצה־לקצה תוך הגבלת חשיפה.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "inputRequired": { @@ -3795,18 +4007,10 @@ "aliasDomain": { "message": "דומיין כינוי" }, - "passwordRepromptDisabledAutofillOnPageLoad": { - "message": "פריטים עם בקשת סיסמה ראשית חוזרת לא ניתנים למילוי אוטומטי בעת טעינת עמוד. מילוי אוטומטי בעת טעינת נכבה.", - "description": "Toast message for describing that master password re-prompt cannot be autofilled on page load." - }, "autofillOnPageLoadSetToDefault": { "message": "מילוי אוטומטי בעת טעינת הוגדר להשתמש בהגדרת ברירת מחדל.", "description": "Toast message for informing the user that autofill on page load has been set to the default setting." }, - "turnOffMasterPasswordPromptToEditField": { - "message": "כבה בקשת סיסמה ראשית חוזרת כדי לערוך שדה זה", - "description": "Message appearing below the autofill on load message when master password reprompt is set for a vault item." - }, "toggleSideNavigation": { "message": "החלף מצב ניווט צדדי" }, @@ -4015,15 +4219,11 @@ "selectImportCollection": { "message": "בחר אוסף" }, - "importTargetHint": { - "message": "בחר באפשרות זו אם ברצונך להעביר את תוכן הקובץ המיובא אל $DESTINATION$", - "description": "Located as a hint under the import target. Will be appended by either folder or collection, depending if the user is importing into an individual or an organizational vault.", - "placeholders": { - "destination": { - "content": "$1", - "example": "folder or collection" - } - } + "importTargetHintCollection": { + "message": "בחר אפשרות זו אם ברצונך שהתוכן של הקובץ המיובא יועבר לאוסף" + }, + "importTargetHintFolder": { + "message": "בחר אפשרות זו אם ברצונך שהתוכן של הקובץ המיובא יועבר לתיקייה" }, "importUnassignedItemsError": { "message": "קובץ מכיל פריטים לא מוקצים." @@ -4080,9 +4280,6 @@ "passkeyNotCopiedAlert": { "message": "מפתח הגישה לא יועתק לפריט המשוכפל. האם ברצונך להמשיך לשכפל פריט זה?" }, - "passkeyFeatureIsNotImplementedForAccountsWithoutMasterPassword": { - "message": "נדרש אימות על ידי האתר היוזם. תכונה זו עדיין לא מיושמת עבור חשבונות ללא סיסמה ראשית." - }, "logInWithPasskeyQuestion": { "message": "להיכנס עם מפתח גישה?" }, @@ -4263,23 +4460,23 @@ "description": "Label indicating the most common import formats" }, "uriMatchDefaultStrategyHint": { - "message": "URI match detection is how Bitwarden identifies autofill suggestions.", + "message": "זיהוי התאמת URI הוא האופן שבו Bitwarden מזהה הצעות למילוי אוטומטי.", "description": "Explains to the user that URI match detection determines how Bitwarden suggests autofill options, and clarifies that this default strategy applies when no specific match detection is set for a login item." }, "regExAdvancedOptionWarning": { - "message": "\"Regular expression\" is an advanced option with increased risk of exposing credentials.", + "message": "\"ביטוי רגולרי\" הוא אפשרות מתקדמת עם סיכון מוגבר לחשיפת אישורים.", "description": "Content for dialog which warns a user when selecting 'regular expression' matching strategy as a cipher match strategy" }, "startsWithAdvancedOptionWarning": { - "message": "\"Starts with\" is an advanced option with increased risk of exposing credentials.", + "message": "\"מתחיל עם\" היא אפשרות מתקדמת עם סיכון מוגבר לחשיפת אישורים.", "description": "Content for dialog which warns a user when selecting 'starts with' matching strategy as a cipher match strategy" }, "uriMatchWarningDialogLink": { - "message": "More about match detection", + "message": "עוד על זיהוי התאמה", "description": "Link to match detection docs on warning dialog for advance match strategy" }, "uriAdvancedOption": { - "message": "Advanced options", + "message": "אפשרויות מתקדמות", "description": "Advanced option placeholder for uri option component" }, "confirmContinueToBrowserSettingsTitle": { @@ -4428,7 +4625,7 @@ } }, "viewItemTitleWithField": { - "message": "View item - $ITEMNAME$ - $FIELD$", + "message": "הצג פריט - $ITEMNAME$ - $FIELD$", "description": "Title for a link that opens a view for an item.", "placeholders": { "itemname": { @@ -4452,7 +4649,7 @@ } }, "autofillTitleWithField": { - "message": "Autofill - $ITEMNAME$ - $FIELD$", + "message": "מלא אוטומטית - $ITEMNAME$ - $FIELD$", "description": "Title for a button that autofills a login item.", "placeholders": { "itemname": { @@ -4465,17 +4662,17 @@ } } }, - "copyFieldValue": { - "message": "העתק $FIELD$, $VALUE$", + "copyFieldCipherName": { + "message": "העתק $FIELD$, $CIPHERNAME$", "description": "Title for a button that copies a field value to the clipboard.", "placeholders": { "field": { "content": "$1", "example": "Username" }, - "value": { + "ciphername": { "content": "$2", - "example": "Foo" + "example": "Login Item" } } }, @@ -4613,31 +4810,31 @@ } }, "downloadBitwarden": { - "message": "Download Bitwarden" + "message": "הורד את Bitwarden" }, "downloadBitwardenOnAllDevices": { - "message": "Download Bitwarden on all devices" + "message": "הורד את Bitwarden בכל המכשירים" }, "getTheMobileApp": { - "message": "Get the mobile app" + "message": "קבל את היישום לנייד" }, "getTheMobileAppDesc": { - "message": "Access your passwords on the go with the Bitwarden mobile app." + "message": "גש אל הסיסמאות שלך בדרך עם היישום לנייד של Bitwarden." }, "getTheDesktopApp": { - "message": "Get the desktop app" + "message": "קבל את היישום לשולחן העבודה" }, "getTheDesktopAppDesc": { - "message": "Access your vault without a browser, then set up unlock with biometrics to expedite unlocking in both the desktop app and browser extension." + "message": "גש לכספת שלך ללא דפדפן, ואז הגדר ביטול נעילה עם זיהוי ביומטרי כדי לזרז ביטול נעילה גם ביישום לשולחן העבודה וגם בהרחבת הדפדפן." }, "downloadFromBitwardenNow": { - "message": "Download from bitwarden.com now" + "message": "הורד מ־bitwarden.com עכשיו" }, "getItOnGooglePlay": { - "message": "Get it on Google Play" + "message": "קבל אותו ב־Google Play" }, "downloadOnTheAppStore": { - "message": "Download on the App Store" + "message": "הורד ב־App Store" }, "permanentlyDeleteAttachmentConfirmation": { "message": "האם אתה בטוח שברצונך למחוק לצמיתות צרופה זו?" @@ -4768,9 +4965,6 @@ } } }, - "enableAnimations": { - "message": "אפשר הנפשות" - }, "showAnimations": { "message": "הצג הנפשות" }, @@ -4983,15 +5177,9 @@ "itemLocation": { "message": "מיקום פריט" }, - "fileSend": { - "message": "סֵנְד של קובץ" - }, "fileSends": { "message": "סֵנְדים של קובץ" }, - "textSend": { - "message": "סֵנְד של טקסט" - }, "textSends": { "message": "סֵנְדים של טקסט" }, @@ -5001,6 +5189,18 @@ "showNumberOfAutofillSuggestions": { "message": "הצג את מספר ההצעות למילוי כניסה אוטומטי בסמל ההרחבה" }, + "accountAccessRequested": { + "message": "התבקשה גישה לחשבון" + }, + "confirmAccessAttempt": { + "message": "אשר ניסיון גישה עבור $EMAIL$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + } + } + }, "showQuickCopyActions": { "message": "הצג פעולות העתקה מהירה בכספת" }, @@ -5040,9 +5240,6 @@ "vaultCustomTimeoutMinimum": { "message": "פסק זמן מותאם אישית מינימלי הוא דקה 1." }, - "additionalContentAvailable": { - "message": "תוכן נוסף זמין" - }, "fileSavedToDevice": { "message": "הקובץ נשמר למכשיר. נהל מהורדות המכשיר שלך." }, @@ -5101,16 +5298,16 @@ "message": "ביטול נעילה ביומטרי אינו זמין כעת מסיבה לא ידועה." }, "unlockVault": { - "message": "Unlock your vault in seconds" + "message": "בטל את נעילת הכספת שלך בשניות" }, "unlockVaultDesc": { - "message": "You can customize your unlock and timeout settings to more quickly access your vault." + "message": "באפשרותך להתאים אישית את הגדרות ביטול הנעילה ופסק הזמן כדי לגשת במהירות רבה יותר לכספת שלך." }, "unlockPinSet": { - "message": "Unlock PIN set" + "message": "הוגדר PIN לביטול נעילה" }, "unlockWithBiometricSet": { - "message": "Unlock with biometrics set" + "message": "הוגדר ביטול נעילה עם זיהוי ביומטרי" }, "authenticating": { "message": "מאמת" @@ -5124,7 +5321,7 @@ "description": "Notification message for when a password has been regenerated" }, "saveToBitwarden": { - "message": "Save to Bitwarden", + "message": "שמור ב־Bitwarden", "description": "Confirmation message for saving a login to Bitwarden" }, "spaceCharacterDescriptor": { @@ -5311,7 +5508,7 @@ "message": "מפתח SSH יובא בהצלחה" }, "cannotRemoveViewOnlyCollections": { - "message": "אינך יכול להסיר אוספים עם הרשאות צפייה בלבד: $COLLECTIONS$", + "message": "אינך יכול להסיר אוספים עם הרשאות הצגה בלבד: $COLLECTIONS$", "placeholders": { "collections": { "content": "$1", @@ -5328,134 +5525,174 @@ "changeAtRiskPassword": { "message": "שנה סיסמה בסיכון" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "כניסה זו נמצאת בסיכון וחסר בה אתר אינטרנט. הוסף אתר אינטרנט ושנה את הסיסמה לאבטחה חזקה יותר." + }, + "missingWebsite": { + "message": "לא נמצא אתר אינטרנט" + }, "settingsVaultOptions": { - "message": "Vault options" + "message": "אפשרויות כספת" }, "emptyVaultDescription": { - "message": "The vault protects more than just your passwords. Store secure logins, IDs, cards and notes securely here." + "message": "הכספת מגינה על יותר מרק הסיסמאות שלך. אחסן כניסות מאובטחות, זהויות, כרטיסים והערות באופן מאובטח כאן." }, "introCarouselLabel": { - "message": "Welcome to Bitwarden" + "message": "ברוך בואך אל Bitwarden" }, "securityPrioritized": { - "message": "Security, prioritized" + "message": "אבטחה, מועדפת" }, "securityPrioritizedBody": { - "message": "Save logins, cards, and identities to your secure vault. Bitwarden uses zero-knowledge, end-to-end encryption to protect what’s important to you." + "message": "שמור כניסות, כרטיסים, וזהויות לכספת המאובטחת שלך. Bitwarden משתמש בהצפנה מקצה־לקצה באפס ידיעה כדי להגן על מה שחשוב לך." }, "quickLogin": { - "message": "Quick and easy login" + "message": "כניסה מהירה וקלה" }, "quickLoginBody": { - "message": "Set up biometric unlock and autofill to log into your accounts without typing a single letter." + "message": "הגדר ביטול נעילה ביומטרי ומילוי אוטומטי כדי להיכנס לחשבונות שלך מבלי להקליד אות אחת." }, "secureUser": { - "message": "Level up your logins" + "message": "שדרג את הכניסות שלך" }, "secureUserBody": { - "message": "Use the generator to create and save strong, unique passwords for all your accounts." + "message": "השתמש במחולל כדי ליצור ולשמור סיסמאות חזקות וייחודיות עבור כל החשבונות שלך." }, "secureDevices": { - "message": "Your data, when and where you need it" + "message": "הנתונים שלך, מתי והיכן שאתה צריך אותם" }, "secureDevicesBody": { - "message": "Save unlimited passwords across unlimited devices with Bitwarden mobile, browser, and desktop apps." + "message": "שמור מספר בלתי מוגבל של סיסמאות בין מספר בלתי מוגבל של מכשירים עם יישומי Bitwarden לנייד, דפדפן, ושולחן עבודה." }, "nudgeBadgeAria": { - "message": "1 notification" + "message": "התראה אחת" }, "emptyVaultNudgeTitle": { - "message": "Import existing passwords" + "message": "ייבא סיסמאות קיימות" }, "emptyVaultNudgeBody": { - "message": "Use the importer to quickly transfer logins to Bitwarden without manually adding them." + "message": "השתמש במייבא כדי להעביר במהירות כניסות אל Bitwarden מבלי להוסיף אותן באופן ידני." }, "emptyVaultNudgeButton": { - "message": "Import now" + "message": "ייבא עכשיו" }, "hasItemsVaultNudgeTitle": { - "message": "Welcome to your vault!" + "message": "ברוך בואך אל הכספת שלך!" + }, + "phishingPageTitle": { + "message": "Phishing website" + }, + "phishingPageCloseTab": { + "message": "Close tab" + }, + "phishingPageContinue": { + "message": "Continue" + }, + "phishingPageLearnWhy": { + "message": "Why are you seeing this?" }, "hasItemsVaultNudgeBodyOne": { - "message": "Autofill items for the current page" + "message": "פריטים למילוי אוטומטי עבור הדף הנוכחי" }, "hasItemsVaultNudgeBodyTwo": { - "message": "Favorite items for easy access" + "message": "פריטים מועדפים עבור גישה קלה" }, "hasItemsVaultNudgeBodyThree": { - "message": "Search your vault for something else" + "message": "חפש בכספת שלך עבור משהו אחר" }, "newLoginNudgeTitle": { - "message": "Save time with autofill" + "message": "חסוך זמן עם מילוי אוטומטי" }, "newLoginNudgeBodyOne": { - "message": "Include a", + "message": "כלול", "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", "example": "Include a Website so this login appears as an autofill suggestion." }, "newLoginNudgeBodyBold": { - "message": "Website", + "message": "אתר אינטרנט", "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", "example": "Include a Website so this login appears as an autofill suggestion." }, "newLoginNudgeBodyTwo": { - "message": "so this login appears as an autofill suggestion.", + "message": "כך שכניסה זו תופיע כהצעה למילוי אוטומטי.", "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { - "message": "Seamless online checkout" + "message": "תהליך תשלום מקוון חלק" }, "newCardNudgeBody": { - "message": "With cards, easily autofill payment forms securely and accurately." + "message": "עם כרטיסים, ניתן למלא אוטומטית בקלות טפסי תשלום באופן מאובטח ומדויק." }, "newIdentityNudgeTitle": { - "message": "Simplify creating accounts" + "message": "הפוך יצירת חשבונות לפשוטה" }, "newIdentityNudgeBody": { - "message": "With identities, quickly autofill long registration or contact forms." + "message": "עם זהויות, ניתן למלא אוטומטית במהירות טפסי הרשמה או יצירת קשר." }, "newNoteNudgeTitle": { - "message": "Keep your sensitive data safe" + "message": "שמור על הנתונים הרגישים שלך בטוחים" }, "newNoteNudgeBody": { - "message": "With notes, securely store sensitive data like banking or insurance details." + "message": "עם הערות, ניתן לאחסן באופן מאובטח נתונים רגישים כמו פרטי בנקאות או ביטוח." }, "newSshNudgeTitle": { - "message": "Developer-friendly SSH access" + "message": "גישת SSH ידידותית למפתחים" }, "newSshNudgeBodyOne": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "message": "אחסן את המפתחות שלך והתחבר באמצעות סוכן ה־SSH עבור אימות מהיר ומוצפן.", "description": "Two part message", "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, "newSshNudgeBodyTwo": { - "message": "Learn more about SSH agent", + "message": "למד עוד על סוכן SSH", "description": "Two part message", "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, "generatorNudgeTitle": { - "message": "Quickly create passwords" + "message": "צור סיסמאות במהירות" }, "generatorNudgeBodyOne": { - "message": "Easily create strong and unique passwords by clicking on", + "message": "צור בקלות סיסמאות חזקות וייחודיות על ידי לחיצה על", "description": "Two part message", "example": "Easily create strong and unique passwords by clicking on {icon} to help you keep your logins secure." }, "generatorNudgeBodyTwo": { - "message": "to help you keep your logins secure.", + "message": "כדי לעזור לך לשמור את הכניסות שלך מאובטחות.", "description": "Two part message", "example": "Easily create strong and unique passwords by clicking on {icon} to help you keep your logins secure." }, "generatorNudgeBodyAria": { - "message": "Easily create strong and unique passwords by clicking on the Generate password button to help you keep your logins secure.", + "message": "צור בקלות סיסמאות חזקות וייחודיות על ידי לחיצה על הלחצן 'צור סיסמה' כדי לעזור לך לשמור את הכניסות שלך מאובטחות.", "description": "Aria label for the body content of the generator nudge" }, + "aboutThisSetting": { + "message": "אודות הגדרה זו" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden ישתמש בכתובות URI של כניסות שמורות כדי לזהות באיזה סמל או URL לשינוי סיסמה יש להשתמש על מנת לשפר את החוויה שלך. לא נאסף או נשמר מידע כלשהו כאשר אתה משתמש בשירות זה." + }, "noPermissionsViewPage": { - "message": "You do not have permissions to view this page. Try logging in with a different account." + "message": "אין לך הרשאות כדי לראות עמוד זה. נסה להיכנס עם חשבון אחר." }, "wasmNotSupported": { - "message": "WebAssembly is not supported on your browser or is not enabled. WebAssembly is required to use the Bitwarden app.", + "message": "WebAssembly אינו נתמך בדפדפן שלך או אינו מופעל. WebAssembly נדרש כדי להשתמש ביישום Bitwarden.", "description": "'WebAssembly' is a technical term and should not be translated." + }, + "showMore": { + "message": "הצג עוד" + }, + "showLess": { + "message": "הצג פחות" + }, + "next": { + "message": "הבא" + }, + "moreBreadcrumbs": { + "message": "עוד סימני דרך", + "description": "This is used in the context of a breadcrumb navigation, indicating that there are more items in the breadcrumb trail that are not currently displayed." + }, + "confirmKeyConnectorDomain": { + "message": "אשר דומיין של Key Connector" } } diff --git a/apps/browser/src/_locales/hi/messages.json b/apps/browser/src/_locales/hi/messages.json index 74fc419d7f1..42231b15ef6 100644 --- a/apps/browser/src/_locales/hi/messages.json +++ b/apps/browser/src/_locales/hi/messages.json @@ -547,12 +547,50 @@ "searchVault": { "message": "वॉल्ट खोजे" }, + "resetSearch": { + "message": "खोज रीसेट करें" + }, + "archiveNoun": { + "message": "Archive", + "description": "Noun" + }, + "archiveVerb": { + "message": "Archive", + "description": "Verb" + }, + "unarchive": { + "message": "Unarchive" + }, + "itemsInArchive": { + "message": "Items in archive" + }, + "noItemsInArchive": { + "message": "No items in archive" + }, + "noItemsInArchiveDesc": { + "message": "Archived items will appear here and will be excluded from general search results and autofill suggestions." + }, + "itemSentToArchive": { + "message": "Item sent to archive" + }, + "itemRemovedFromArchive": { + "message": "Item removed from archive" + }, + "archiveItem": { + "message": "Archive item" + }, + "archiveItemConfirmDesc": { + "message": "Archived items are excluded from general search results and autofill suggestions. Are you sure you want to archive this item?" + }, "edit": { "message": "संपादन करें" }, "view": { "message": "देखें" }, + "viewLogin": { + "message": "View login" + }, "noItemsInList": { "message": "सूचीबद्ध करने के लिए कोई आइटम नहीं हैं।" }, @@ -695,6 +733,15 @@ "invalidMasterPassword": { "message": "अमान्य मास्टर पासवर्ड" }, + "invalidMasterPasswordConfirmEmailAndHost": { + "message": "Invalid master password. Confirm your email is correct and your account was created on $HOST$.", + "placeholders": { + "host": { + "content": "$1", + "example": "vault.bitwarden.com" + } + } + }, "vaultTimeout": { "message": "वॉल्ट मध्यांतर" }, @@ -1501,6 +1548,15 @@ "readSecurityKey": { "message": "Read security key" }, + "readingPasskeyLoading": { + "message": "Reading passkey..." + }, + "passkeyAuthenticationFailed": { + "message": "Passkey authentication failed" + }, + "useADifferentLogInMethod": { + "message": "Use a different log in method" + }, "awaitingSecurityKeyInteraction": { "message": "Awaiting security key interaction..." }, @@ -1519,9 +1575,6 @@ "selectTwoStepLoginMethod": { "message": "Select two-step login method" }, - "recoveryCodeDesc": { - "message": "अपने दो कारक प्रदाताओं के सभी के लिए उपयोग खो दिया है? अपने खाते से सभी दो-कारक प्रदाताओं को अक्षम करने के लिए अपने रिकवरी कोड का उपयोग करें।" - }, "recoveryCodeTitle": { "message": "Recovery Code" }, @@ -1680,9 +1733,6 @@ "defaultAutoFillOnPageLoadDesc": { "message": "पेज लोड पर ऑटो-फिल को सक्षम करने के बाद, आप व्यक्तिगत लॉगिन आइटम के लिए सुविधा को सक्षम या अक्षम कर सकते हैं।यह लॉगिन आइटम के लिए डिफ़ॉल्ट सेटिंग है जो अलग से कॉन्फ़िगर नहीं हैं।" }, - "itemAutoFillOnPageLoad": { - "message": "पेज लोड पर ऑटो-भरें (यदि विकल्पों में सक्षम हैं)" - }, "autoFillOnPageLoadUseDefault": { "message": "डिफ़ॉल्ट सेटिंग का उपयोग करें" }, @@ -1754,23 +1804,8 @@ "popup2faCloseMessage": { "message": "अपने सत्यापन कोड के लिए अपने ईमेल की जांच करने के लिए पॉपअप विंडो के बाहर क्लिक करने से यह पॉपअप बंद हो जाएगा।क्या आप इस पॉपअप को एक नई विंडो में खोलना चाहते हैं ताकि यह बंद न हो?" }, - "popupU2fCloseMessage": { - "message": "यह ब्राउज़र इस पॉपअप विंडो में U2F अनुरोधों को संसाधित नहीं कर सकता है।क्या आप इस पॉपअप को एक नई विंडो में खोलना चाहते हैं ताकि आप U2F का उपयोग करके लॉग इन कर सकें?" - }, - "enableFavicon": { - "message": "वेबसाइट आइकन दिखाएं" - }, - "faviconDesc": { - "message": "प्रत्येक लॉगिन के आगे एक पहचानने योग्य छवि दिखाएं।" - }, - "faviconDescAlt": { - "message": "Show a recognizable image next to each login. Applies to all logged in accounts." - }, - "enableBadgeCounter": { - "message": "बैज काउंटर दिखाएं" - }, - "badgeCounterDesc": { - "message": "इंगित करें कि आपके पास वर्तमान वेब पेज के लिए कितने लॉगिन हैं।" + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "cardholderName": { "message": "Cardholder Name" @@ -1829,6 +1864,9 @@ "securityCode": { "message": "Security Code" }, + "cardNumber": { + "message": "card number" + }, "ex": { "message": "ex." }, @@ -1931,32 +1969,81 @@ "typeNote": { "message": "नोट" }, - "newItemHeader": { - "message": "नया $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderLogin": { + "message": "New Login", + "description": "Header for new login item type" }, - "editItemHeader": { - "message": "$TYPE$ संपादन", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderCard": { + "message": "New Card", + "description": "Header for new card item type" }, - "viewItemHeader": { - "message": "View $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderIdentity": { + "message": "New Identity", + "description": "Header for new identity item type" + }, + "newItemHeaderNote": { + "message": "New Note", + "description": "Header for new note item type" + }, + "newItemHeaderSshKey": { + "message": "New SSH key", + "description": "Header for new SSH key item type" + }, + "newItemHeaderTextSend": { + "message": "New Text Send", + "description": "Header for new text send" + }, + "newItemHeaderFileSend": { + "message": "New File Send", + "description": "Header for new file send" + }, + "editItemHeaderLogin": { + "message": "Edit Login", + "description": "Header for edit login item type" + }, + "editItemHeaderCard": { + "message": "Edit Card", + "description": "Header for edit card item type" + }, + "editItemHeaderIdentity": { + "message": "Edit Identity", + "description": "Header for edit identity item type" + }, + "editItemHeaderNote": { + "message": "Edit Note", + "description": "Header for edit note item type" + }, + "editItemHeaderSshKey": { + "message": "Edit SSH key", + "description": "Header for edit SSH key item type" + }, + "editItemHeaderTextSend": { + "message": "Edit Text Send", + "description": "Header for edit text send" + }, + "editItemHeaderFileSend": { + "message": "Edit File Send", + "description": "Header for edit file send" + }, + "viewItemHeaderLogin": { + "message": "View Login", + "description": "Header for view login item type" + }, + "viewItemHeaderCard": { + "message": "View Card", + "description": "Header for view card item type" + }, + "viewItemHeaderIdentity": { + "message": "View Identity", + "description": "Header for view identity item type" + }, + "viewItemHeaderNote": { + "message": "View Note", + "description": "Header for view note item type" + }, + "viewItemHeaderSshKey": { + "message": "View SSH key", + "description": "Header for view SSH key item type" }, "passwordHistory": { "message": "पासवर्ड इतिहास" @@ -3129,6 +3216,24 @@ } } }, + "exportingOrganizationVaultFromPasswordManagerWithDataOwnershipDesc": { + "message": "Only the organization vault associated with $ORGANIZATION$ will be exported.", + "placeholders": { + "organization": { + "content": "$1", + "example": "My Org Name" + } + } + }, + "exportingOrganizationVaultFromAdminConsoleWithDataOwnershipDesc": { + "message": "Only the organization vault associated with $ORGANIZATION$ will be exported. My items collections will not be included.", + "placeholders": { + "organization": { + "content": "$1", + "example": "My Org Name" + } + } + }, "error": { "message": "एरर" }, @@ -3460,6 +3565,28 @@ "logInRequestSent": { "message": "Request sent" }, + "loginRequestApprovedForEmailOnDevice": { + "message": "Login request approved for $EMAIL$ on $DEVICE$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + }, + "device": { + "content": "$2", + "example": "Web app - Chrome" + } + } + }, + "youDeniedLoginAttemptFromAnotherDevice": { + "message": "You denied a login attempt from another device. If this was you, try to log in with the device again." + }, + "device": { + "message": "Device" + }, + "loginStatus": { + "message": "Login status" + }, "masterPasswordChanged": { "message": "Master password saved" }, @@ -3496,9 +3623,6 @@ "autofillPageLoadPolicyActivated": { "message": "Your organization policies have turned on autofill on page load." }, - "howToAutofill": { - "message": "ऑटो-फ़िल कैसे करें" - }, "autofillSelectInfoWithCommand": { "message": "Select an item from this screen, use the shortcut $COMMAND$, or explore other options in settings.", "placeholders": { @@ -3556,6 +3680,94 @@ "rememberThisDeviceToMakeFutureLoginsSeamless": { "message": "Remember this device to make future logins seamless" }, + "manageDevices": { + "message": "Manage devices" + }, + "currentSession": { + "message": "Current session" + }, + "mobile": { + "message": "Mobile", + "description": "Mobile app" + }, + "extension": { + "message": "Extension", + "description": "Browser extension/addon" + }, + "desktop": { + "message": "Desktop", + "description": "Desktop app" + }, + "webVault": { + "message": "Web vault" + }, + "webApp": { + "message": "Web app" + }, + "cli": { + "message": "CLI" + }, + "sdk": { + "message": "SDK", + "description": "Software Development Kit" + }, + "requestPending": { + "message": "Request pending" + }, + "firstLogin": { + "message": "First login" + }, + "trusted": { + "message": "Trusted" + }, + "needsApproval": { + "message": "Needs approval" + }, + "devices": { + "message": "Devices" + }, + "accessAttemptBy": { + "message": "Access attempt by $EMAIL$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + } + } + }, + "confirmAccess": { + "message": "Confirm access" + }, + "denyAccess": { + "message": "Deny access" + }, + "time": { + "message": "Time" + }, + "deviceType": { + "message": "Device Type" + }, + "loginRequest": { + "message": "Login request" + }, + "thisRequestIsNoLongerValid": { + "message": "This request is no longer valid." + }, + "loginRequestHasAlreadyExpired": { + "message": "Login request has already expired." + }, + "justNow": { + "message": "Just now" + }, + "requestedXMinutesAgo": { + "message": "Requested $MINUTES$ minutes ago", + "placeholders": { + "minutes": { + "content": "$1", + "example": "5" + } + } + }, "deviceApprovalRequired": { "message": "Device approval required. Select an approval option below:" }, @@ -3795,18 +4007,10 @@ "aliasDomain": { "message": "डोमेन उपनाम" }, - "passwordRepromptDisabledAutofillOnPageLoad": { - "message": "Items with master password re-prompt cannot be autofilled on page load. Autofill on page load turned off.", - "description": "Toast message for describing that master password re-prompt cannot be autofilled on page load." - }, "autofillOnPageLoadSetToDefault": { "message": "Autofill on page load set to use default setting.", "description": "Toast message for informing the user that autofill on page load has been set to the default setting." }, - "turnOffMasterPasswordPromptToEditField": { - "message": "Turn off master password re-prompt to edit this field", - "description": "Message appearing below the autofill on load message when master password reprompt is set for a vault item." - }, "toggleSideNavigation": { "message": "Toggle side navigation" }, @@ -4015,15 +4219,11 @@ "selectImportCollection": { "message": "Select a collection" }, - "importTargetHint": { - "message": "Select this option if you want the imported file contents moved to a $DESTINATION$", - "description": "Located as a hint under the import target. Will be appended by either folder or collection, depending if the user is importing into an individual or an organizational vault.", - "placeholders": { - "destination": { - "content": "$1", - "example": "folder or collection" - } - } + "importTargetHintCollection": { + "message": "Select this option if you want the imported file contents moved to a collection" + }, + "importTargetHintFolder": { + "message": "Select this option if you want the imported file contents moved to a folder" }, "importUnassignedItemsError": { "message": "File contains unassigned items." @@ -4080,9 +4280,6 @@ "passkeyNotCopiedAlert": { "message": "The passkey will not be copied to the cloned item. Do you want to continue cloning this item?" }, - "passkeyFeatureIsNotImplementedForAccountsWithoutMasterPassword": { - "message": "Verification required by the initiating site. This feature is not yet implemented for accounts without master password." - }, "logInWithPasskeyQuestion": { "message": "Log in with passkey?" }, @@ -4465,17 +4662,17 @@ } } }, - "copyFieldValue": { - "message": "Copy $FIELD$, $VALUE$", + "copyFieldCipherName": { + "message": "Copy $FIELD$, $CIPHERNAME$", "description": "Title for a button that copies a field value to the clipboard.", "placeholders": { "field": { "content": "$1", "example": "Username" }, - "value": { + "ciphername": { "content": "$2", - "example": "Foo" + "example": "Login Item" } } }, @@ -4768,9 +4965,6 @@ } } }, - "enableAnimations": { - "message": "Enable animations" - }, "showAnimations": { "message": "एनिमेशन दिखाएं" }, @@ -4983,15 +5177,9 @@ "itemLocation": { "message": "Item Location" }, - "fileSend": { - "message": "File Send" - }, "fileSends": { "message": "File Sends" }, - "textSend": { - "message": "Text Send" - }, "textSends": { "message": "Text Sends" }, @@ -5001,6 +5189,18 @@ "showNumberOfAutofillSuggestions": { "message": "Show number of login autofill suggestions on extension icon" }, + "accountAccessRequested": { + "message": "Account access requested" + }, + "confirmAccessAttempt": { + "message": "Confirm access attempt for $EMAIL$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + } + } + }, "showQuickCopyActions": { "message": "Show quick copy actions on Vault" }, @@ -5040,9 +5240,6 @@ "vaultCustomTimeoutMinimum": { "message": "न्यूनतम कस्टम टाइमआउट 1 मिनट है." }, - "additionalContentAvailable": { - "message": "अतिरिक्त सामग्री उपलब्ध है" - }, "fileSavedToDevice": { "message": "File saved to device. Manage from your device downloads." }, @@ -5328,6 +5525,12 @@ "changeAtRiskPassword": { "message": "Change at-risk password" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "This login is at-risk and missing a website. Add a website and change the password for stronger security." + }, + "missingWebsite": { + "message": "Missing website" + }, "settingsVaultOptions": { "message": "Vault options" }, @@ -5376,6 +5579,18 @@ "hasItemsVaultNudgeTitle": { "message": "Welcome to your vault!" }, + "phishingPageTitle": { + "message": "Phishing website" + }, + "phishingPageCloseTab": { + "message": "Close tab" + }, + "phishingPageContinue": { + "message": "Continue" + }, + "phishingPageLearnWhy": { + "message": "Why are you seeing this?" + }, "hasItemsVaultNudgeBodyOne": { "message": "Autofill items for the current page" }, @@ -5451,11 +5666,33 @@ "message": "Easily create strong and unique passwords by clicking on the Generate password button to help you keep your logins secure.", "description": "Aria label for the body content of the generator nudge" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "noPermissionsViewPage": { "message": "You do not have permissions to view this page. Try logging in with a different account." }, "wasmNotSupported": { "message": "WebAssembly is not supported on your browser or is not enabled. WebAssembly is required to use the Bitwarden app.", "description": "'WebAssembly' is a technical term and should not be translated." + }, + "showMore": { + "message": "Show more" + }, + "showLess": { + "message": "Show less" + }, + "next": { + "message": "Next" + }, + "moreBreadcrumbs": { + "message": "More breadcrumbs", + "description": "This is used in the context of a breadcrumb navigation, indicating that there are more items in the breadcrumb trail that are not currently displayed." + }, + "confirmKeyConnectorDomain": { + "message": "Confirm Key Connector domain" } } diff --git a/apps/browser/src/_locales/hr/messages.json b/apps/browser/src/_locales/hr/messages.json index 6434a09bcfb..b892c2c152b 100644 --- a/apps/browser/src/_locales/hr/messages.json +++ b/apps/browser/src/_locales/hr/messages.json @@ -547,12 +547,50 @@ "searchVault": { "message": "Pretraži trezor" }, + "resetSearch": { + "message": "Ponovno postavljanje pretraživanja" + }, + "archiveNoun": { + "message": "Arhiva", + "description": "Noun" + }, + "archiveVerb": { + "message": "Arhiviraj", + "description": "Verb" + }, + "unarchive": { + "message": "Poništi arhiviranje" + }, + "itemsInArchive": { + "message": "Stavke u arhivi" + }, + "noItemsInArchive": { + "message": "Nema stavki u arhivi" + }, + "noItemsInArchiveDesc": { + "message": "Arhivirane stavke biti će prikazane ovdje i biti će izuzete iz rezultata općih pretraga i preporuka auto-ispune." + }, + "itemSentToArchive": { + "message": "Stavka poslana u arhivu" + }, + "itemRemovedFromArchive": { + "message": "Stavka maknute iz arhive" + }, + "archiveItem": { + "message": "Arhiviraj stavku" + }, + "archiveItemConfirmDesc": { + "message": "Arhivirane stavke biti će izuzete iz rezultata općih pretraga i preporuka auto-ispune. Sigurno želiš arhivirati?" + }, "edit": { "message": "Uredi" }, "view": { "message": "Prikaz" }, + "viewLogin": { + "message": "Prikaži prijavu" + }, "noItemsInList": { "message": "Nema stavki za prikaz." }, @@ -695,6 +733,15 @@ "invalidMasterPassword": { "message": "Neispravna glavna lozinka" }, + "invalidMasterPasswordConfirmEmailAndHost": { + "message": "Nevažeća glavna lozinka. Provjeri je li tvoja adresa e-pošta ispravna i je li račun kreiran na $HOST$.", + "placeholders": { + "host": { + "content": "$1", + "example": "vault.bitwarden.com" + } + } + }, "vaultTimeout": { "message": "Istek trezora" }, @@ -1501,6 +1548,15 @@ "readSecurityKey": { "message": "Pročitaj sigurnosni ključ" }, + "readingPasskeyLoading": { + "message": "Čitanje pristupnog ključa..." + }, + "passkeyAuthenticationFailed": { + "message": "Autentifikacija pristupnog ključa nije uspjela" + }, + "useADifferentLogInMethod": { + "message": "Koristi drugi način prijave" + }, "awaitingSecurityKeyInteraction": { "message": "Čekanje na interakciju sa sigurnosnim ključem..." }, @@ -1519,9 +1575,6 @@ "selectTwoStepLoginMethod": { "message": "Odaberi način prijave dvostrukom autentifikacijom" }, - "recoveryCodeDesc": { - "message": "Izgubljen je pristup uređaju za dvostruku autentifikaciju? Koristi svoj kôd za oporavak za onemogućavanje svih pružatelja usluga dvostruke autentifikacije na tvojem računu." - }, "recoveryCodeTitle": { "message": "Kôd za oporavak" }, @@ -1680,9 +1733,6 @@ "defaultAutoFillOnPageLoadDesc": { "message": "Auto-ispunu kod učitavanju stranice je moguće uključiti/isključiti za svaku pojedinu prijavu unutar uređivanja stavke." }, - "itemAutoFillOnPageLoad": { - "message": "Auto-ispuna kod učitavanja stranice (ako je uključeno u Postavkama)" - }, "autoFillOnPageLoadUseDefault": { "message": "Koristi zadane postavke" }, @@ -1754,23 +1804,8 @@ "popup2faCloseMessage": { "message": "Ako klikneš izvan iskočnog prozora, za provjeru kôda za provjeru iz e-pošte, on će se zatvoriti. Želiš li ovaj iskočni prozor otvoriti u novom prozoru kako se ne bi zatvorio?" }, - "popupU2fCloseMessage": { - "message": "Ovaj preglednik ne može obraditi U2F zahtjeve u ovom iskočnom prozoru. Želiš li otvoriti ovaj iskočni prozor u novom prozoru za prijavu putem U2F?" - }, - "enableFavicon": { - "message": "Prikaži ikone mrežnih mjesta" - }, - "faviconDesc": { - "message": "Prikaži prepoznatljivu sliku pored svake prijave." - }, - "faviconDescAlt": { - "message": "Prikaži prepoznatljivu sliku pokraj svake prijave. Primjenjuje se na sve prijavljene račune." - }, - "enableBadgeCounter": { - "message": "Prikaži značku brojača" - }, - "badgeCounterDesc": { - "message": "Prikazuje broj spremljenih prijava za trenutnu web stranicu." + "showIconsChangePasswordUrls": { + "message": "Prikaži ikonu web mjesta i dohvati URL za promjenu lozinke" }, "cardholderName": { "message": "Vlasnik platne kartice" @@ -1829,6 +1864,9 @@ "securityCode": { "message": "Sigurnosni kôd" }, + "cardNumber": { + "message": "broj kartice" + }, "ex": { "message": "npr." }, @@ -1931,32 +1969,81 @@ "typeNote": { "message": "Bilješka" }, - "newItemHeader": { - "message": "Novi $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderLogin": { + "message": "Nova prijava", + "description": "Header for new login item type" }, - "editItemHeader": { - "message": "Uredi $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderCard": { + "message": "Nova kartica", + "description": "Header for new card item type" }, - "viewItemHeader": { - "message": "Pogledaj $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderIdentity": { + "message": "Novi identitet", + "description": "Header for new identity item type" + }, + "newItemHeaderNote": { + "message": "Nova bilješka", + "description": "Header for new note item type" + }, + "newItemHeaderSshKey": { + "message": "Novi SSH ključ", + "description": "Header for new SSH key item type" + }, + "newItemHeaderTextSend": { + "message": "Novi teksutalni Send", + "description": "Header for new text send" + }, + "newItemHeaderFileSend": { + "message": "Novi datotečni Send", + "description": "Header for new file send" + }, + "editItemHeaderLogin": { + "message": "Uredi prijavu", + "description": "Header for edit login item type" + }, + "editItemHeaderCard": { + "message": "Uredi karticu", + "description": "Header for edit card item type" + }, + "editItemHeaderIdentity": { + "message": "Uredi identitet", + "description": "Header for edit identity item type" + }, + "editItemHeaderNote": { + "message": "Uređivanje bilješke", + "description": "Header for edit note item type" + }, + "editItemHeaderSshKey": { + "message": "Uredi SSH ključ", + "description": "Header for edit SSH key item type" + }, + "editItemHeaderTextSend": { + "message": "Uredi tekstualni Send", + "description": "Header for edit text send" + }, + "editItemHeaderFileSend": { + "message": "Uredi datotečni Send", + "description": "Header for edit file send" + }, + "viewItemHeaderLogin": { + "message": "Prikaži prijavu", + "description": "Header for view login item type" + }, + "viewItemHeaderCard": { + "message": "Prikaži karticu", + "description": "Header for view card item type" + }, + "viewItemHeaderIdentity": { + "message": "Prikaži identitet", + "description": "Header for view identity item type" + }, + "viewItemHeaderNote": { + "message": "Prikaži bilješku", + "description": "Header for view note item type" + }, + "viewItemHeaderSshKey": { + "message": "Prikaži SSH ključ", + "description": "Header for view SSH key item type" }, "passwordHistory": { "message": "Povijest" @@ -3129,6 +3216,24 @@ } } }, + "exportingOrganizationVaultFromPasswordManagerWithDataOwnershipDesc": { + "message": "Izvezt će se samo trezor organizacije povezan s $ORGANIZATION$.", + "placeholders": { + "organization": { + "content": "$1", + "example": "My Org Name" + } + } + }, + "exportingOrganizationVaultFromAdminConsoleWithDataOwnershipDesc": { + "message": "Izvezt će se samo trezor organizacije povezan s $ORGANIZATION$. Zbirka mojih stavki neće biti uključena.", + "placeholders": { + "organization": { + "content": "$1", + "example": "My Org Name" + } + } + }, "error": { "message": "Pogreška" }, @@ -3460,6 +3565,28 @@ "logInRequestSent": { "message": "Zahtjev poslan" }, + "loginRequestApprovedForEmailOnDevice": { + "message": "Prijava za $EMAIL$ potvrđena na uređaju $DEVICE$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + }, + "device": { + "content": "$2", + "example": "Web app - Chrome" + } + } + }, + "youDeniedLoginAttemptFromAnotherDevice": { + "message": "Odbijena je prijava na drugom uređaju. Ako si ovo stvarno ti, pokušaj se ponovno prijaviti uređajem." + }, + "device": { + "message": "Uređaj" + }, + "loginStatus": { + "message": "Status prijave" + }, "masterPasswordChanged": { "message": "Glavna lozinka promijenjena" }, @@ -3496,9 +3623,6 @@ "autofillPageLoadPolicyActivated": { "message": "Prema pravilima tvoje organizacije uključena je auto-ispuna prilikom učitavanja stranice." }, - "howToAutofill": { - "message": "Kako auto-ispuniti" - }, "autofillSelectInfoWithCommand": { "message": "Odaberi stavku s ovog zaslona, upotrijebi prečac $COMMAND$ ili istraži druge opcije u postavkama.", "placeholders": { @@ -3556,6 +3680,94 @@ "rememberThisDeviceToMakeFutureLoginsSeamless": { "message": "Zapamti ovaj uređaj kako bi buduće prijave bile brže" }, + "manageDevices": { + "message": "Upravljaj uređajima" + }, + "currentSession": { + "message": "Trenutna sesija" + }, + "mobile": { + "message": "Mobitel", + "description": "Mobile app" + }, + "extension": { + "message": "Proširenje", + "description": "Browser extension/addon" + }, + "desktop": { + "message": "Desktop", + "description": "Desktop app" + }, + "webVault": { + "message": "Web trezor" + }, + "webApp": { + "message": "Web aplikacija" + }, + "cli": { + "message": "CLI" + }, + "sdk": { + "message": "SDK", + "description": "Software Development Kit" + }, + "requestPending": { + "message": "Zahtjev u tijeku" + }, + "firstLogin": { + "message": "Prva prijava" + }, + "trusted": { + "message": "Pouzdan" + }, + "needsApproval": { + "message": "Zahtijeva odobrenje" + }, + "devices": { + "message": "Uređaji" + }, + "accessAttemptBy": { + "message": "$EMAIL$ pokušava pristupiti", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + } + } + }, + "confirmAccess": { + "message": "Potvrdi pristup" + }, + "denyAccess": { + "message": "Odbij pristup" + }, + "time": { + "message": "Vrijeme" + }, + "deviceType": { + "message": "Vrsta uređaja" + }, + "loginRequest": { + "message": "Zahtjev za prijavu" + }, + "thisRequestIsNoLongerValid": { + "message": "Ovaj zahtjev više nije valjan." + }, + "loginRequestHasAlreadyExpired": { + "message": "Zahtjev za prijavu je već istekao." + }, + "justNow": { + "message": "Upravo" + }, + "requestedXMinutesAgo": { + "message": "Zatraženo prije $MINUTES$ minute/a", + "placeholders": { + "minutes": { + "content": "$1", + "example": "5" + } + } + }, "deviceApprovalRequired": { "message": "Potrebno je odobriti uređaj. Odaberi metodu odobravanja:" }, @@ -3795,18 +4007,10 @@ "aliasDomain": { "message": "Alias domene" }, - "passwordRepromptDisabledAutofillOnPageLoad": { - "message": "Stavke za koje je potrebna glavna lozinka neće se auto-ispuniti kod učitavanja stranice. Auto-ispuna pri učitavanju stranice je isključena.", - "description": "Toast message for describing that master password re-prompt cannot be autofilled on page load." - }, "autofillOnPageLoadSetToDefault": { "message": "Auto-ispuna kod učitavanja stranice koristi zadane postavke.", "description": "Toast message for informing the user that autofill on page load has been set to the default setting." }, - "turnOffMasterPasswordPromptToEditField": { - "message": "Isključi traženje glavne lozinke za promjenu ovog polja", - "description": "Message appearing below the autofill on load message when master password reprompt is set for a vault item." - }, "toggleSideNavigation": { "message": "U/Isključi bočnu navigaciju" }, @@ -4015,15 +4219,11 @@ "selectImportCollection": { "message": "Odaberi zbirku" }, - "importTargetHint": { - "message": "Odaberi ovu opciju ako sadržaj uvezene datoteke želiš spremiti u $DESTINATION$", - "description": "Located as a hint under the import target. Will be appended by either folder or collection, depending if the user is importing into an individual or an organizational vault.", - "placeholders": { - "destination": { - "content": "$1", - "example": "folder or collection" - } - } + "importTargetHintCollection": { + "message": "Odaberi ovu opciju ako sadržaj uvezene datoteke želiš premjestiti u zbirku" + }, + "importTargetHintFolder": { + "message": "Odaberi ovu opciju ako sadržaj uvezene datoteke želiš premjestiti u mapu" }, "importUnassignedItemsError": { "message": "Datoteka sadrži nedodijeljene stavke." @@ -4080,9 +4280,6 @@ "passkeyNotCopiedAlert": { "message": "Pristupni ključ se neće kopirati u kloniranu stavku. Želiš li nastaviti klonirati ovu stavku?" }, - "passkeyFeatureIsNotImplementedForAccountsWithoutMasterPassword": { - "message": "Ishodišna stranica zahtijeva verifikaciju. Ova značajka još nije implementirana za račune bez glavne lozinke." - }, "logInWithPasskeyQuestion": { "message": "Prijava pristupnim ključem?" }, @@ -4465,17 +4662,17 @@ } } }, - "copyFieldValue": { - "message": "Kopiraj $FIELD$, $VALUE$", + "copyFieldCipherName": { + "message": "Kopiraj $FIELD$, $CIPHERNAME$", "description": "Title for a button that copies a field value to the clipboard.", "placeholders": { "field": { "content": "$1", "example": "Username" }, - "value": { + "ciphername": { "content": "$2", - "example": "Foo" + "example": "Login Item" } } }, @@ -4768,9 +4965,6 @@ } } }, - "enableAnimations": { - "message": "Omogući animacije" - }, "showAnimations": { "message": "Prikaži animacije" }, @@ -4983,15 +5177,9 @@ "itemLocation": { "message": "Lokacija stavke" }, - "fileSend": { - "message": "Send datoteke" - }, "fileSends": { "message": "Send datoteke" }, - "textSend": { - "message": "Send teksta" - }, "textSends": { "message": "Send tekstovi" }, @@ -5001,6 +5189,18 @@ "showNumberOfAutofillSuggestions": { "message": "Prikaži broj prijedloga auto-ispune na ikoni proširenja" }, + "accountAccessRequested": { + "message": "Zatražen je pristup računu" + }, + "confirmAccessAttempt": { + "message": "Potvrdi pokušaj prijave za $EMAIL$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + } + } + }, "showQuickCopyActions": { "message": "Prikaži akcije brzog kopiranja na trezoru" }, @@ -5040,9 +5240,6 @@ "vaultCustomTimeoutMinimum": { "message": "Najmanje prilagođeno vrijeme je 1 minuta." }, - "additionalContentAvailable": { - "message": "Dostupan je dodatni sadržaj" - }, "fileSavedToDevice": { "message": "Datoteka spremljena na uređaj. Upravljaj u preuzimanjima svog uređaja." }, @@ -5328,6 +5525,12 @@ "changeAtRiskPassword": { "message": "Promijeni rizičnu lozinku" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "Ova prijava je ugrožena i nedostaje joj web-stranica. Dodaj web-stranicu i promijeni lozinku za veću sigurnost." + }, + "missingWebsite": { + "message": "Nedostaje web-stranica" + }, "settingsVaultOptions": { "message": "Mogućnosti trezora" }, @@ -5376,6 +5579,18 @@ "hasItemsVaultNudgeTitle": { "message": "Dobrodošli u svoj trezor!" }, + "phishingPageTitle": { + "message": "Phishing web stranica" + }, + "phishingPageCloseTab": { + "message": "Zatvori karticu" + }, + "phishingPageContinue": { + "message": "Nastavi" + }, + "phishingPageLearnWhy": { + "message": "Zašto ovo vidiš?" + }, "hasItemsVaultNudgeBodyOne": { "message": "Auto-ispuni stavke za trenutnu stranicu" }, @@ -5451,11 +5666,33 @@ "message": "Jednostavno stvori jake i sigurne lozinke odabirom tipke Generiraj lozinku kako bi tvoje prijave ostale sigurne.", "description": "Aria label for the body content of the generator nudge" }, + "aboutThisSetting": { + "message": "O ovoj postavci" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden će koristiti spremljene URI-je za prijavu kako bi identificirao ikonu ili URL za promjenu lozinke koji treba koristiti za poboljšanje tvojeg iskustva. Nikakvi podaci se ne prikupljaju, niti spremaju kada koristiš ovu uslugu." + }, "noPermissionsViewPage": { "message": "Nemaš dozvolu za pregled ove stranice. Pokušaj se prijaviti s drugim računom." }, "wasmNotSupported": { "message": "WebAssembly ili nije podržan ili nije omogućen u tvom pregledniku. WebAssembly je potreban za korištenje Bitwarden aplikacije.", "description": "'WebAssembly' is a technical term and should not be translated." + }, + "showMore": { + "message": "Prikaži više" + }, + "showLess": { + "message": "Pokaži manje" + }, + "next": { + "message": "Sljedeće" + }, + "moreBreadcrumbs": { + "message": "Više mrvica", + "description": "This is used in the context of a breadcrumb navigation, indicating that there are more items in the breadcrumb trail that are not currently displayed." + }, + "confirmKeyConnectorDomain": { + "message": "Potvrdi domenu kontektora ključa" } } diff --git a/apps/browser/src/_locales/hu/messages.json b/apps/browser/src/_locales/hu/messages.json index ba49c0f1a60..ac9f04f7389 100644 --- a/apps/browser/src/_locales/hu/messages.json +++ b/apps/browser/src/_locales/hu/messages.json @@ -6,11 +6,11 @@ "message": "Bitwarden logó" }, "extName": { - "message": "Bitwarden Password Manager", + "message": "Bitwarden Jelszókezelő", "description": "Extension name, MUST be less than 40 characters (Safari restriction)" }, "extDesc": { - "message": "At home, at work, or on the go, Bitwarden easily secures all your passwords, passkeys, and sensitive information", + "message": "Legyen otthon, munkában, vagy úton, a Bitwarden könnyen biztosítja jelszavát, kulcsait, és kényes információit", "description": "Extension description, MUST be less than 112 characters (Safari restriction)" }, "loginOrCreateNewAccount": { @@ -547,12 +547,50 @@ "searchVault": { "message": "Keresés a széfben" }, + "resetSearch": { + "message": "Keresés visszaállítása" + }, + "archiveNoun": { + "message": "Archívum", + "description": "Noun" + }, + "archiveVerb": { + "message": "Archívum", + "description": "Verb" + }, + "unarchive": { + "message": "Visszavétel archívumból" + }, + "itemsInArchive": { + "message": "Archívum elemek száma" + }, + "noItemsInArchive": { + "message": "Nincs elem az archívumban." + }, + "noItemsInArchiveDesc": { + "message": "Az archivált elemek itt jelennek meg és kizárásra kerülnek az általános keresési eredményekből és az automatikus kitöltési javaslatokból." + }, + "itemSentToArchive": { + "message": "Archívumba küldött elemek száma" + }, + "itemRemovedFromArchive": { + "message": "Az elem kikerült a kedvencekből." + }, + "archiveItem": { + "message": "Elem archiválása" + }, + "archiveItemConfirmDesc": { + "message": "Az archivált elemek ki vannak zárva az általános keresési eredményekből és az automatikus kitöltési javaslatokból. Biztosan archiválni szeretnénk ezt az elemet?" + }, "edit": { "message": "Szerkesztés" }, "view": { "message": "Nézet" }, + "viewLogin": { + "message": "Bejelentkezés megtekintése" + }, "noItemsInList": { "message": "Nincsenek megjeleníthető tételek." }, @@ -695,6 +733,15 @@ "invalidMasterPassword": { "message": "Hibás mesterjelszó" }, + "invalidMasterPasswordConfirmEmailAndHost": { + "message": "A mesterjelszó érvénytelen. Erősítsük meg, hogy email cím helyes és a fiók létrehozásának helye: $HOST$.", + "placeholders": { + "host": { + "content": "$1", + "example": "vault.bitwarden.com" + } + } + }, "vaultTimeout": { "message": "Széf időkifutás" }, @@ -860,13 +907,13 @@ "message": "Kijelentkezett" }, "loggedOutDesc": { - "message": "You have been logged out of your account." + "message": "Kijelentkezett fiókjából." }, "loginExpired": { "message": "Bejelentkezési munkamenete lejárt." }, "logIn": { - "message": "Log in" + "message": "Bejelentkezés" }, "logInToBitwarden": { "message": "Bejelentkezés a Bitwardenbe" @@ -890,16 +937,16 @@ "message": "Kövessük az alábbi lépéseket a biztonsági kulccsal bejelentkezés befejezéséhez." }, "restartRegistration": { - "message": "Restart registration" + "message": "Regisztráció újraindítása" }, "expiredLink": { - "message": "Expired link" + "message": "Lejárt hivatkozás" }, "pleaseRestartRegistrationOrTryLoggingIn": { - "message": "Please restart registration or try logging in." + "message": "Kérem kezdje újra a regisztrációt, vagy próbáljon meg bejelentkezni." }, "youMayAlreadyHaveAnAccount": { - "message": "You may already have an account" + "message": "Lehetséges, hogy már rendelkezik fiókkal" }, "logOutConfirmation": { "message": "Biztos benne, hogy ki szeretnél jelentkezni?" @@ -1170,14 +1217,14 @@ "description": "Error message shown when the system fails to save login details." }, "saveFailureDetails": { - "message": "Oh no! We couldn't save this. Try entering the details manually.", + "message": "Ja ne! Nem tudtuk elmenteni. Próbálja meg beírni a kézzel.", "description": "Detailed error message shown when saving login details fails." }, "changePasswordWarning": { - "message": "After changing your password, you will need to log in with your new password. Active sessions on other devices will be logged out within one hour." + "message": "A jelszó megváltoztatása után be kell jelentkezni az új jelszóval. Az aktív munkamenetek más eszközökön egy órán belül kijelentkeznek." }, "accountRecoveryUpdateMasterPasswordSubtitle": { - "message": "Change your master password to complete account recovery." + "message": "Módosítsuk a mesterjelszót a fiók helyreállításának befejezéséhez." }, "enableChangedPasswordNotification": { "message": "Létező bejelentkezés frissítés kérése" @@ -1501,6 +1548,15 @@ "readSecurityKey": { "message": "Biztonsági kulcs olvasása" }, + "readingPasskeyLoading": { + "message": "Hozzáférési kulcs beolvasása..." + }, + "passkeyAuthenticationFailed": { + "message": "A hozzáférési kulcs hitelesítés sikertelen volt." + }, + "useADifferentLogInMethod": { + "message": "Más bejelentkezési mód használata" + }, "awaitingSecurityKeyInteraction": { "message": "Várakozás a biztonsági kulcs interakciójára..." }, @@ -1519,9 +1575,6 @@ "selectTwoStepLoginMethod": { "message": "Kétlépcsős bejelentkezési mód használata" }, - "recoveryCodeDesc": { - "message": "Elveszett a hozzáférés az összes kétlépcsős szolgáltatóhoz? A helyreállító kód használatával letilthatók fiókból a kétlépcsős szolgáltatók." - }, "recoveryCodeTitle": { "message": "Helyreállító kód" }, @@ -1603,7 +1656,7 @@ "description": "Represents the message for allowing the user to enable the autofill overlay" }, "autofillSuggestionsSectionTitle": { - "message": "Autofill suggestions" + "message": "Automatikus kitöltés javaslatok" }, "autofillSpotlightTitle": { "message": "Az automatikus kitöltési javaslatok könnyű megtalálása" @@ -1624,7 +1677,7 @@ "message": "Automat kitöltés bekapcsolása" }, "showInlineMenuLabel": { - "message": "Show autofill suggestions on form fields" + "message": "Automatikus kitöltési javaslatok megjelenítése űrlapmezőknél" }, "showInlineMenuIdentitiesLabel": { "message": "Az identitások megjelenítése javaslatként" @@ -1633,10 +1686,10 @@ "message": "A kártyák megjelenítése javaslatként" }, "showInlineMenuOnIconSelectionLabel": { - "message": "Display suggestions when icon is selected" + "message": "Javaslatok megjelenítése a az ikon kiválasztásakor" }, "showInlineMenuOnFormFieldsDescAlt": { - "message": "Applies to all logged in accounts." + "message": "Minden bejelentkezett fiókra vonatkozik." }, "turnOffBrowserBuiltInPasswordManagerSettings": { "message": "Az ütközések elkerülése érdekében kapcsoljuk ki a böngésző beépített jelszókezelő beállításait." @@ -1649,7 +1702,7 @@ "description": "Overlay setting select option for disabling autofill overlay" }, "autofillOverlayVisibilityOnFieldFocus": { - "message": "When field is selected (on focus)", + "message": "Amikor a mező kiválasztásra kerül (fókuszoláskor)", "description": "Overlay appearance select option for showing the field on focus of the input element" }, "autofillOverlayVisibilityOnButtonClick": { @@ -1657,7 +1710,7 @@ "description": "Overlay appearance select option for showing the field on click of the overlay icon" }, "enableAutoFillOnPageLoadSectionTitle": { - "message": "Autofill on page load" + "message": "Automatikus kitöltés az oldal betöltésénél" }, "enableAutoFillOnPageLoad": { "message": "Automatikus kitöltés engedélyezése oldal betöltéskor" @@ -1669,7 +1722,7 @@ "message": "Az oldalbetöltésnél automatikus kitöltést a feltört vagy nem megbízhatató weboldalak kihasználhatják." }, "learnMoreAboutAutofillOnPageLoadLinkText": { - "message": "Learn more about risks" + "message": "Bővebben a kockázatokról" }, "learnMoreAboutAutofill": { "message": "További információk az automatikus kitöltésről" @@ -1680,9 +1733,6 @@ "defaultAutoFillOnPageLoadDesc": { "message": "Az egyes bejelentkezési elemeknél kikapcsolhatjuk oldalbetöltéskor az automatikus kitöltést az elem Szerkesztés nézetében." }, - "itemAutoFillOnPageLoad": { - "message": "Automatikus kitöltés oldal betöltésnél (Ha engedélyezett az opcióknál)" - }, "autoFillOnPageLoadUseDefault": { "message": "Alapbeállítások használata" }, @@ -1754,23 +1804,8 @@ "popup2faCloseMessage": { "message": "Az ellenőrző kódot tartalmazó email egy olyan felugró ablakban nyílik meg, mely a mellette levő területre kattinva bezáródik. Szeretnéd az emailt egy olyan ablakban megnyitni, ami nem záródhat így be?" }, - "popupU2fCloseMessage": { - "message": "Ez a böngésző nem dolgozza fel az U2F kéréseket ebben a felbukkanó ablakban. Szeretnénk megnyitni a felbukkanó ablakot új böngészőablakban az U2F segítségével történő bejelentkezéshez?" - }, - "enableFavicon": { - "message": "Webhely ikonok megjelenítése" - }, - "faviconDesc": { - "message": "Felismerhető kép megjelenítése minden bejelentkezés mellett." - }, - "faviconDescAlt": { - "message": "Minden bejelentkezés mellett egy felismerhető kép megjelenítése. Minden bejelentkezett fiókra vonatkozik." - }, - "enableBadgeCounter": { - "message": "Számláló jelvény megjelenítése" - }, - "badgeCounterDesc": { - "message": "Jelöljük meg, hogy hány bejelentkezés van az aktuális weboldalnál." + "showIconsChangePasswordUrls": { + "message": "Webhely ikonok megjelenítése és jelszó webcímek módosításának lekérése" }, "cardholderName": { "message": "Kártyatulajdonos neve" @@ -1829,6 +1864,9 @@ "securityCode": { "message": "Biztonsági Kód" }, + "cardNumber": { + "message": "kártya szám" + }, "ex": { "message": "példa:" }, @@ -1931,32 +1969,81 @@ "typeNote": { "message": "Jegyzet" }, - "newItemHeader": { - "message": "Új $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderLogin": { + "message": "Új bejelentkezés", + "description": "Header for new login item type" }, - "editItemHeader": { - "message": "$TYPE$ szerkesztése", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderCard": { + "message": "Új kártya", + "description": "Header for new card item type" }, - "viewItemHeader": { - "message": "$TYPE$ megtekintése", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderIdentity": { + "message": "Új személyazonosság", + "description": "Header for new identity item type" + }, + "newItemHeaderNote": { + "message": "Új jegyzet", + "description": "Header for new note item type" + }, + "newItemHeaderSshKey": { + "message": "Új SSH kulcs", + "description": "Header for new SSH key item type" + }, + "newItemHeaderTextSend": { + "message": "Új szöveges Send elem", + "description": "Header for new text send" + }, + "newItemHeaderFileSend": { + "message": "Új fájl Send elem", + "description": "Header for new file send" + }, + "editItemHeaderLogin": { + "message": "Bejelentkezés szerkesztése", + "description": "Header for edit login item type" + }, + "editItemHeaderCard": { + "message": "Kártya szerkesztése", + "description": "Header for edit card item type" + }, + "editItemHeaderIdentity": { + "message": "Személyazonossság szerkesztése", + "description": "Header for edit identity item type" + }, + "editItemHeaderNote": { + "message": "Jegyzet szerkesztése", + "description": "Header for edit note item type" + }, + "editItemHeaderSshKey": { + "message": "SSH kulcs szerkesztése", + "description": "Header for edit SSH key item type" + }, + "editItemHeaderTextSend": { + "message": "Send szöveg szerkesztése", + "description": "Header for edit text send" + }, + "editItemHeaderFileSend": { + "message": "Send fájl szerkesztése", + "description": "Header for edit file send" + }, + "viewItemHeaderLogin": { + "message": "Bejelentkezés megtekintése", + "description": "Header for view login item type" + }, + "viewItemHeaderCard": { + "message": "Kártya megtekintése", + "description": "Header for view card item type" + }, + "viewItemHeaderIdentity": { + "message": "Személyazonosság megtekintése", + "description": "Header for view identity item type" + }, + "viewItemHeaderNote": { + "message": "Jegyzet megtekintése", + "description": "Header for view note item type" + }, + "viewItemHeaderSshKey": { + "message": "SSH kulcs megtekintése", + "description": "Header for view SSH key item type" }, "passwordHistory": { "message": "Jelszó előzmények" @@ -2359,7 +2446,7 @@ "message": "Az új mesterjelszó nem felel meg a szabály követelményeknek." }, "receiveMarketingEmailsV2": { - "message": "Get advice, announcements, and research opportunities from Bitwarden in your inbox." + "message": "Tanácsokat, bejelentéseket, kutatási lehetőségeket kaphat a Bitwarden-től a postaládájába." }, "unsubscribe": { "message": "Leiratkozás" @@ -2395,10 +2482,10 @@ "message": "Ok" }, "errorRefreshingAccessToken": { - "message": "Access Token Refresh Error" + "message": "Hozzáférési Token Frissítés Hiba" }, "errorRefreshingAccessTokenDesc": { - "message": "No refresh token or API keys found. Please try logging out and logging back in." + "message": "Nem található token vagy API kulcs. Próbáljon meg ki-, majd újra bejelentkezni." }, "desktopSyncVerificationTitle": { "message": "Asztali szinkronizálás ellenőrzés" @@ -3129,6 +3216,24 @@ } } }, + "exportingOrganizationVaultFromPasswordManagerWithDataOwnershipDesc": { + "message": "Csak a $ORGANIZATION$ szervezetehez kapcsolódó szervezeti széf kerül exportálásra.", + "placeholders": { + "organization": { + "content": "$1", + "example": "My Org Name" + } + } + }, + "exportingOrganizationVaultFromAdminConsoleWithDataOwnershipDesc": { + "message": "Csak a $ORGANIZATION$ szervezethez kapcsolódó szervezeti széf kerül exportálásra. A saját elem gyűjtemények nem lesznek benne.", + "placeholders": { + "organization": { + "content": "$1", + "example": "My Org Name" + } + } + }, "error": { "message": "Hiba" }, @@ -3460,8 +3565,30 @@ "logInRequestSent": { "message": "A kérés elküldésre került." }, + "loginRequestApprovedForEmailOnDevice": { + "message": "A bejelentkezési kérelem jóváhagyásra került: $EMAIL$ - $DEVICE$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + }, + "device": { + "content": "$2", + "example": "Web app - Chrome" + } + } + }, + "youDeniedLoginAttemptFromAnotherDevice": { + "message": "Megtagadásra került egy bejelentkezési kísérletet egy másik eszközről. Ha valóban mi voltunk, próbáljunk meg újra bejelentkezni az eszközzel." + }, + "device": { + "message": "Eszköz" + }, + "loginStatus": { + "message": "Bejelentkezési állapot" + }, "masterPasswordChanged": { - "message": "Master password saved" + "message": "A mesterjelszó mentésre került." }, "exposedMasterPassword": { "message": "Kiszivárgott mesterjelszó" @@ -3496,11 +3623,8 @@ "autofillPageLoadPolicyActivated": { "message": "A szervezeti szabályzat bekapcsolta az automatikus kitöltést az oldalbetöltéskor." }, - "howToAutofill": { - "message": "Az automatikus kitöltés működése" - }, "autofillSelectInfoWithCommand": { - "message": "Select an item from this screen, use the shortcut $COMMAND$, or explore other options in settings.", + "message": "Válasszon ki egy elemet a képernyőről, használja a $COMMAND$ kombinációt, vagy tekintse meg a többi lehetőséget a beállításokban.", "placeholders": { "command": { "content": "$1", @@ -3509,7 +3633,7 @@ } }, "autofillSelectInfoWithoutCommand": { - "message": "Select an item from this screen, or explore other options in settings." + "message": "Válasszon ki egy elemet a képernyőről, vagy tekintse meg a többi lehetőséget a beállításokban." }, "gotIt": { "message": "Rendben" @@ -3518,10 +3642,10 @@ "message": "Automatikus kitöltés beállítások" }, "autofillKeyboardShortcutSectionTitle": { - "message": "Autofill shortcut" + "message": "Automatikus kitöltés gyorselérés" }, "autofillKeyboardShortcutUpdateLabel": { - "message": "Change shortcut" + "message": "Billentyűparancs változtatás" }, "autofillKeyboardManagerShortcutsLabel": { "message": "Bullenytűparancsok kezelése" @@ -3556,6 +3680,94 @@ "rememberThisDeviceToMakeFutureLoginsSeamless": { "message": "Emlékezés az eszközre, hogy zökkenőmentes legyen a jövőbeni bejelentkezés" }, + "manageDevices": { + "message": "Eszközök kezelése" + }, + "currentSession": { + "message": "Jelenlegi munkamenet" + }, + "mobile": { + "message": "Mobil", + "description": "Mobile app" + }, + "extension": { + "message": "Kiterjesztés", + "description": "Browser extension/addon" + }, + "desktop": { + "message": "Asztali", + "description": "Desktop app" + }, + "webVault": { + "message": "Webes széf" + }, + "webApp": { + "message": "Webalkalmazás" + }, + "cli": { + "message": "CLI" + }, + "sdk": { + "message": "SDK", + "description": "Software Development Kit" + }, + "requestPending": { + "message": "Függőben lévő kérelem" + }, + "firstLogin": { + "message": "Első bejelentkezés" + }, + "trusted": { + "message": "Megbízható" + }, + "needsApproval": { + "message": "Jóváhagyást igényel" + }, + "devices": { + "message": "Eszközök" + }, + "accessAttemptBy": { + "message": "Bejelentkezési kísérlet $EMAIL$ segítségével", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + } + } + }, + "confirmAccess": { + "message": "Hozzáférés megerősítése" + }, + "denyAccess": { + "message": "Hozzáférés megtagadása" + }, + "time": { + "message": "Időpont" + }, + "deviceType": { + "message": "Eszköz típus" + }, + "loginRequest": { + "message": "Bejelentkezés kérés" + }, + "thisRequestIsNoLongerValid": { + "message": "A kérés a továbbiakban már nem érvényes." + }, + "loginRequestHasAlreadyExpired": { + "message": "A bejelentkezési kérés már lejárt." + }, + "justNow": { + "message": "Éppen most" + }, + "requestedXMinutesAgo": { + "message": "Kérve $MINUTES$ perccel ezelőtt", + "placeholders": { + "minutes": { + "content": "$1", + "example": "5" + } + } + }, "deviceApprovalRequired": { "message": "Az eszköz jóváhagyása szükséges. Válasszunk egy jóváhagyási lehetőséget lentebb:" }, @@ -3795,30 +4007,22 @@ "aliasDomain": { "message": "Áldomain" }, - "passwordRepromptDisabledAutofillOnPageLoad": { - "message": "A mesterjelszót újra bekérő elemeket nem lehet automatikusan kitölteni az oldal betöltésekor. Az automatikus kitöltés az oldal betöltésekor kikapcsolásra kerül.", - "description": "Toast message for describing that master password re-prompt cannot be autofilled on page load." - }, "autofillOnPageLoadSetToDefault": { "message": "Az automatikus kitöltés az oldal betöltésekor az alapértelmezett beállítás használatára lett beállítva.", "description": "Toast message for informing the user that autofill on page load has been set to the default setting." }, - "turnOffMasterPasswordPromptToEditField": { - "message": "Kapcsoljuk ki a mesterjelszó újbóli bekérését a mező szerkesztéséhez.", - "description": "Message appearing below the autofill on load message when master password reprompt is set for a vault item." - }, "toggleSideNavigation": { - "message": "Toggle side navigation" + "message": "Oldalnavigáció váltás" }, "skipToContent": { "message": "Ugrás a tartalomra" }, "bitwardenOverlayButton": { - "message": "Bitwarden autofill menu button", + "message": "Bitwarden automatikus kitöltés menü gomb", "description": "Page title for the iframe containing the overlay button" }, "toggleBitwardenVaultOverlay": { - "message": "Toggle Bitwarden autofill menu", + "message": "Bitwarden automatikus kitöltés menü váltás", "description": "Screen reader and tool tip label for the overlay button" }, "bitwardenVault": { @@ -3826,7 +4030,7 @@ "description": "Page title in overlay" }, "unlockYourAccountToViewMatchingLogins": { - "message": "Unlock your account to view matching logins", + "message": "Az összeillő belépések megtekintéséhez oldja fel fiókját", "description": "Text to display in overlay when the account is locked." }, "unlockYourAccountToViewAutofillSuggestions": { @@ -3894,7 +4098,7 @@ "description": "Screen reader text (aria-label) for new identity button within inline menu" }, "bitwardenOverlayMenuAvailable": { - "message": "Bitwarden autofill menu available. Press the down arrow key to select.", + "message": "Bitwarden automatikus kitöltés menü elérhető. Nyomja meg a lefele nyilat a kiválasztáshoz.", "description": "Screen reader text for announcing when the overlay opens on the page" }, "turnOn": { @@ -3980,7 +4184,7 @@ } }, "duoHealthCheckResultsInNullAuthUrlError": { - "message": "Error connecting with the Duo service. Use a different two-step login method or contact Duo for assistance." + "message": "Hiba a Duo szolgáltatáshoz való kapcsolódáskor. Használjon másféle kétlépcsős bejelentkezést, vagy keresse fel a Duo ügyfélszolgálatot." }, "duoRequiredForAccount": { "message": "A fiókhoz kétlépcsős DUO bejelentkezés szükséges." @@ -4015,15 +4219,11 @@ "selectImportCollection": { "message": "Gyűjtemény kiválasztása" }, - "importTargetHint": { - "message": "Válasszuk ezt a lehetőséget, ha azt akarjuk, hogy az importált fájl tartalma $DESTINATION$ helyre kerüljön", - "description": "Located as a hint under the import target. Will be appended by either folder or collection, depending if the user is importing into an individual or an organizational vault.", - "placeholders": { - "destination": { - "content": "$1", - "example": "folder or collection" - } - } + "importTargetHintCollection": { + "message": "Válasszuk ezt az opciót, ha azt akarjuk, hogy az importált fájl tartalma egy gyűjteménybe kerüljön." + }, + "importTargetHintFolder": { + "message": "Válasszuk ezt az opciót, ha azt akarjuk, hogy az importált fájl tartalma egy mappába kerüljön." }, "importUnassignedItemsError": { "message": "A fájl hozzá nem rendelt elemeket tartalmaz." @@ -4080,9 +4280,6 @@ "passkeyNotCopiedAlert": { "message": "A hozzáférési kulcs nem kerül másolásra a klónozott elembe. Folytatjuk ennek az elemnek a klónozását?" }, - "passkeyFeatureIsNotImplementedForAccountsWithoutMasterPassword": { - "message": "A kezdeményező hely által megkövetelt ellenőrzés. Ez a szolgáltatás még nincs megvalósítva mesterjelszó nélküli fiókok esetén." - }, "logInWithPasskeyQuestion": { "message": "Bejelentkezés hozzáférési kulccsal?" }, @@ -4283,27 +4480,27 @@ "description": "Advanced option placeholder for uri option component" }, "confirmContinueToBrowserSettingsTitle": { - "message": "Continue to browser settings?", + "message": "Továbblépés a böngésző beállításokhoz?", "description": "Title for dialog which asks if the user wants to proceed to a relevant browser settings page" }, "confirmContinueToHelpCenter": { - "message": "Continue to Help Center?", + "message": "Továbblépés a Segítség Központba?", "description": "Title for dialog which asks if the user wants to proceed to a relevant Help Center page" }, "confirmContinueToHelpCenterPasswordManagementContent": { - "message": "Change your browser's autofill and password management settings.", + "message": "A böngésző automatikus kitöltés és jelszókezelési beállításainak módosítása.", "description": "Body content for dialog which asks if the user wants to proceed to the Help Center's page about browser password management settings" }, "confirmContinueToHelpCenterKeyboardShortcutsContent": { - "message": "You can view and set extension shortcuts in your browser's settings.", + "message": "Megtekintheti vagy beállíthatja a bővítmény billentyűparancsokat a böngésző beállításoknál.", "description": "Body content for dialog which asks if the user wants to proceed to the Help Center's page about browser keyboard shortcut settings" }, "confirmContinueToBrowserPasswordManagementSettingsContent": { - "message": "Change your browser's autofill and password management settings.", + "message": "A böngésző automatikus kitöltési és jelszókezelési beállításainak módosítása.", "description": "Body content for dialog which asks if the user wants to proceed to the browser's password management settings page" }, "confirmContinueToBrowserKeyboardShortcutSettingsContent": { - "message": "You can view and set extension shortcuts in your browser's settings.", + "message": "Megtekintheti vagy beállíthatja a bővítmény billentyűparancsokat a böngésző beállításoknál.", "description": "Body content for dialog which asks if the user wants to proceed to the browser's keyboard shortcut settings page" }, "overrideDefaultBrowserAutofillTitle": { @@ -4465,17 +4662,17 @@ } } }, - "copyFieldValue": { - "message": "$FIELD$, $VALUE$ másolása", + "copyFieldCipherName": { + "message": "$FIELD$, $CIPHERNAME$ másolása", "description": "Title for a button that copies a field value to the clipboard.", "placeholders": { "field": { "content": "$1", "example": "Username" }, - "value": { + "ciphername": { "content": "$2", - "example": "Foo" + "example": "Login Item" } } }, @@ -4483,7 +4680,7 @@ "message": "Nincsenek másolandó értékek." }, "assignToCollections": { - "message": "Assign to collections" + "message": "Hozzárendelés gyűjteményhez" }, "copyEmail": { "message": "Email cím másolása" @@ -4546,7 +4743,7 @@ } }, "itemsWithNoFolder": { - "message": "Items with no folder" + "message": "Be nem mappázott elemek" }, "itemDetails": { "message": "Elem részletek" @@ -4555,7 +4752,7 @@ "message": "Elem neve" }, "organizationIsDeactivated": { - "message": "Organization is deactivated" + "message": "A szervezet deaktiválásra került" }, "owner": { "message": "Tulajdonos" @@ -4565,7 +4762,7 @@ "description": "Used as a label to indicate that the user is the owner of an item." }, "contactYourOrgAdmin": { - "message": "Items in deactivated organizations cannot be accessed. Contact your organization owner for assistance." + "message": "A deaktivált szervezetek elemeit nem lehet elérni. Keresse fel további segítségért a szervezet tulajdonosát." }, "additionalInformation": { "message": "További információ" @@ -4768,9 +4965,6 @@ } } }, - "enableAnimations": { - "message": "Animációk engedélyezése" - }, "showAnimations": { "message": "Animációk megjelenítése" }, @@ -4796,7 +4990,7 @@ "description": "ARIA label for the inline menu button that logs in with a passkey." }, "assign": { - "message": "Assign" + "message": "Hozzárendelés" }, "bulkCollectionAssignmentDialogDescriptionSingular": { "message": "Csak az ezekhez a gyűjteményekhez hozzáféréssel rendelkező szervezeti tagok láthatják az elemet." @@ -4805,7 +4999,7 @@ "message": "Csak az ezekhez a gyűjteményekhez hozzáféréssel rendelkező szervezeti tagok láthatják az elemeket." }, "bulkCollectionAssignmentWarning": { - "message": "You have selected $TOTAL_COUNT$ items. You cannot update $READONLY_COUNT$ of the items because you do not have edit permissions.", + "message": "$TOTAL_COUNT$ elemeket jelölt ki. Nem frissítheti a $READONLY_COUNT$ részét, mert nem rendelkezik szerkesztési jogosultsággal.", "placeholders": { "total_count": { "content": "$1", @@ -4903,13 +5097,13 @@ } }, "selectCollectionsToAssign": { - "message": "Select collections to assign" + "message": "A hozzárendeléshez jelöljön ki gyűjteményeket" }, "personalItemTransferWarningSingular": { - "message": "1 item will be permanently transferred to the selected organization. You will no longer own this item." + "message": "1 elem véglegesen áthelyezésre kerül a szervezethez. Többé nem Önhöz fog tartozni az elem." }, "personalItemsTransferWarningPlural": { - "message": "$PERSONAL_ITEMS_COUNT$ items will be permanently transferred to the selected organization. You will no longer own these items.", + "message": "$PERSONAL_ITEMS_COUNT$ elemek véglegesen áthelyezésre kerülnek a kiválasztott szervezethez. Többé nem Önhöz fognak tartozni az elemek.", "placeholders": { "personal_items_count": { "content": "$1", @@ -4918,7 +5112,7 @@ } }, "personalItemWithOrgTransferWarningSingular": { - "message": "1 item will be permanently transferred to $ORG$. You will no longer own this item.", + "message": "Ez az 1 elem véglegesen áthelyezésre kerül a $ORG$ szervezethez. Többé nem az Öné lesz az elem.", "placeholders": { "org": { "content": "$1", @@ -4927,7 +5121,7 @@ } }, "personalItemsWithOrgTransferWarningPlural": { - "message": "$PERSONAL_ITEMS_COUNT$ items will be permanently transferred to $ORG$. You will no longer own these items.", + "message": "$PERSONAL_ITEMS_COUNT$ elem véglegesen áthelyezésre kerül a $ORG$ szervezethez. Többé nem az Öné lesz az elem.", "placeholders": { "personal_items_count": { "content": "$1", @@ -4940,13 +5134,13 @@ } }, "successfullyAssignedCollections": { - "message": "Successfully assigned collections" + "message": "Sikerült a gyűjteményhez való hozzárendelés" }, "nothingSelected": { - "message": "You have not selected anything." + "message": "Nem választott ki semmit." }, "itemsMovedToOrg": { - "message": "Items moved to $ORGNAME$", + "message": "Elemek áthelyezve a $ORGNAME$ szervezethez", "placeholders": { "orgname": { "content": "$1", @@ -4955,7 +5149,7 @@ } }, "itemMovedToOrg": { - "message": "Item moved to $ORGNAME$", + "message": "Elem áthelyezve a $ORGNAME$ szervezethez", "placeholders": { "orgname": { "content": "$1", @@ -4983,15 +5177,9 @@ "itemLocation": { "message": "Elem helyek" }, - "fileSend": { - "message": "Fájl típusú Send" - }, "fileSends": { "message": "Fájl küldés" }, - "textSend": { - "message": "Szöveg típusú Send" - }, "textSends": { "message": "Szöveg küldés" }, @@ -5001,6 +5189,18 @@ "showNumberOfAutofillSuggestions": { "message": "Az automatikus bejelentkezési kitöltési javaslatok számának megjelenítése a bővítmény ikonján" }, + "accountAccessRequested": { + "message": "Fiók hozzáférés kérés történt." + }, + "confirmAccessAttempt": { + "message": "Bejelentkezési kísérlet megerősítése $EMAIL$ email címmel", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + } + } + }, "showQuickCopyActions": { "message": "Gyors másolási műveletek megjelenítése a Széfen" }, @@ -5040,9 +5240,6 @@ "vaultCustomTimeoutMinimum": { "message": "A minimális egyedi időkifutás 1 perc." }, - "additionalContentAvailable": { - "message": "Kiegészítő tartalom érhető el." - }, "fileSavedToDevice": { "message": "A fájl mentésre került az eszközre. Kezeljük az eszközről a letöltéseket." }, @@ -5113,7 +5310,7 @@ "message": "Feloldás biometrikusan" }, "authenticating": { - "message": "Authenticating" + "message": "Hitelesítés" }, "fillGeneratedPassword": { "message": "Generált jelszó kitöltés", @@ -5328,6 +5525,12 @@ "changeAtRiskPassword": { "message": "Kockázatos jelszó megváltoztatása" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "Ez a bejelentkezés veszélyben van és hiányzik egy webhely. Adjunk hozzá egy webhelyet és módosítsuk a jelszót az erősebb biztonság érdekében." + }, + "missingWebsite": { + "message": "Hiányzó webhely" + }, "settingsVaultOptions": { "message": "Széf opciók" }, @@ -5376,6 +5579,18 @@ "hasItemsVaultNudgeTitle": { "message": "Üdvözlet a széfben!" }, + "phishingPageTitle": { + "message": "Adathalász webhely" + }, + "phishingPageCloseTab": { + "message": "Fül bezárása" + }, + "phishingPageContinue": { + "message": "Folytatás" + }, + "phishingPageLearnWhy": { + "message": "Miért látható ez?" + }, "hasItemsVaultNudgeBodyOne": { "message": "Az aktuális oldal elemeinek automatikus kitöltése" }, @@ -5451,11 +5666,33 @@ "message": "Könnyedén hozhatunk létre erős és egyedi jelszavakat a Jelszó generálása gombra kattintva, amely segít megőrizni a bejelentkezések biztonságát.", "description": "Aria label for the body content of the generator nudge" }, + "aboutThisSetting": { + "message": "Informció erről a beállításról" + }, + "permitCipherDetailsDescription": { + "message": "A Bitwarden mentett bejelentkezési webcímeket használ annak azonosítására, hogy melyik ikont vagy jelszó webcímet kell használni az élmény javítása érdekében. A szolgáltatás használatakor nincs információ gyűjtés vagy mentés." + }, "noPermissionsViewPage": { "message": "Nincs jogosultság az oldal megtekintéséhez. Próbáljunk meg másik fiókkal bejelentkezni." }, "wasmNotSupported": { "message": "A WebAssembly nem támogatott a böngészőben vagy nincs engedélyezve. A WebAssembly szükséges a Bitwarden alkalmazás használatához.", "description": "'WebAssembly' is a technical term and should not be translated." + }, + "showMore": { + "message": "Több megjelenítése" + }, + "showLess": { + "message": "Kevesebb megjelenítése" + }, + "next": { + "message": "Következő" + }, + "moreBreadcrumbs": { + "message": "További morzsamenük", + "description": "This is used in the context of a breadcrumb navigation, indicating that there are more items in the breadcrumb trail that are not currently displayed." + }, + "confirmKeyConnectorDomain": { + "message": "A Key Connector tartomány megerősítése" } } diff --git a/apps/browser/src/_locales/id/messages.json b/apps/browser/src/_locales/id/messages.json index dc1ec15cede..98f46f494c5 100644 --- a/apps/browser/src/_locales/id/messages.json +++ b/apps/browser/src/_locales/id/messages.json @@ -20,7 +20,7 @@ "message": "Undangan diterima" }, "createAccount": { - "message": "Buat Akun" + "message": "Buat akun" }, "newToBitwarden": { "message": "Baru menggunakan Bitwarden?" @@ -547,12 +547,50 @@ "searchVault": { "message": "Cari brankas" }, + "resetSearch": { + "message": "Atur ulang pencarian" + }, + "archiveNoun": { + "message": "Archive", + "description": "Noun" + }, + "archiveVerb": { + "message": "Archive", + "description": "Verb" + }, + "unarchive": { + "message": "Unarchive" + }, + "itemsInArchive": { + "message": "Items in archive" + }, + "noItemsInArchive": { + "message": "No items in archive" + }, + "noItemsInArchiveDesc": { + "message": "Archived items will appear here and will be excluded from general search results and autofill suggestions." + }, + "itemSentToArchive": { + "message": "Item sent to archive" + }, + "itemRemovedFromArchive": { + "message": "Item removed from archive" + }, + "archiveItem": { + "message": "Archive item" + }, + "archiveItemConfirmDesc": { + "message": "Archived items are excluded from general search results and autofill suggestions. Are you sure you want to archive this item?" + }, "edit": { "message": "Edit" }, "view": { "message": "Tampilan" }, + "viewLogin": { + "message": "View login" + }, "noItemsInList": { "message": "Tidak ada item yang dapat dicantumkan." }, @@ -695,6 +733,15 @@ "invalidMasterPassword": { "message": "Sandi utama tidak valid" }, + "invalidMasterPasswordConfirmEmailAndHost": { + "message": "Invalid master password. Confirm your email is correct and your account was created on $HOST$.", + "placeholders": { + "host": { + "content": "$1", + "example": "vault.bitwarden.com" + } + } + }, "vaultTimeout": { "message": "Batas Waktu Brankas" }, @@ -1174,10 +1221,10 @@ "description": "Detailed error message shown when saving login details fails." }, "changePasswordWarning": { - "message": "After changing your password, you will need to log in with your new password. Active sessions on other devices will be logged out within one hour." + "message": "Setelah mengubah kata sandi, Anda perlu masuk lagi dengan kata sandi baru. Sesi aktif di perangkat lain akan keluar dalam satu jam." }, "accountRecoveryUpdateMasterPasswordSubtitle": { - "message": "Change your master password to complete account recovery." + "message": "Ubah kata sandi utama Anda untuk menyelesaikan pemulihan akun." }, "enableChangedPasswordNotification": { "message": "Tanyakan untuk memperbarui masuk yang sudah ada" @@ -1501,6 +1548,15 @@ "readSecurityKey": { "message": "Baca kunci keamanan" }, + "readingPasskeyLoading": { + "message": "Reading passkey..." + }, + "passkeyAuthenticationFailed": { + "message": "Passkey authentication failed" + }, + "useADifferentLogInMethod": { + "message": "Use a different log in method" + }, "awaitingSecurityKeyInteraction": { "message": "Menunggu interaksi kunci keamanan..." }, @@ -1519,9 +1575,6 @@ "selectTwoStepLoginMethod": { "message": "Pilih metode log masuk dua langkah" }, - "recoveryCodeDesc": { - "message": "Kehilangan akses ke semua penyedia dua faktor Anda? Gunakan kode pemulihan untuk menonaktifkan semua penyedia dua faktor dari akun Anda." - }, "recoveryCodeTitle": { "message": "Kode Pemulihan" }, @@ -1680,9 +1733,6 @@ "defaultAutoFillOnPageLoadDesc": { "message": "Setelah mengaktifkan Auto-Fill waktu website terbuka, kamu dapat mengaktifkan atau meng-nonaktifkan feature ini untuk setiap item. Ini adalah konfigurasi standard untuk item yang tidak dikonfigurasi terpisah." }, - "itemAutoFillOnPageLoad": { - "message": "Auto-fill waktu website terbuka (Jika diaktifkan di Options)" - }, "autoFillOnPageLoadUseDefault": { "message": "Gunakan pengaturan baku" }, @@ -1754,23 +1804,8 @@ "popup2faCloseMessage": { "message": "Tindakan klik diluar jendela popup untuk memeriksa kode verifikasi di dalam surel Anda akan menyebabkan popup ini ditutup. Apakah Anda ingin membuka popup ini di jendela baru sehingga terus tetap terbuka?" }, - "popupU2fCloseMessage": { - "message": "Peramban ini tidak bisa memproses permintaan U2F di jendela popup ini. Apakah Anda ingin membuka popup ini di jendela baru sehingga Anda dapat masuk menggunakan U2F?" - }, - "enableFavicon": { - "message": "Tampilkan ikon situs web" - }, - "faviconDesc": { - "message": "Tampilkan sebuah gambar yang dapat dikenali di setiap masuk." - }, - "faviconDescAlt": { - "message": "Tampilkan sebuah gambar yang dapat dikenali di sebelah tiap login. Diterapkan ke semua akun yang telah masuk." - }, - "enableBadgeCounter": { - "message": "Tampilkan hitungan di lencana" - }, - "badgeCounterDesc": { - "message": "Tunjukkan seberapa banyak login yang Anda miliki untuk halaman web saat ini." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "cardholderName": { "message": "Nama Pemegang Kartu" @@ -1829,6 +1864,9 @@ "securityCode": { "message": "Kode Keamanan" }, + "cardNumber": { + "message": "nomor kartu" + }, "ex": { "message": "mis." }, @@ -1931,32 +1969,81 @@ "typeNote": { "message": "Catatan" }, - "newItemHeader": { - "message": "$TYPE$ baru", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderLogin": { + "message": "New Login", + "description": "Header for new login item type" }, - "editItemHeader": { - "message": "Sunting $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderCard": { + "message": "New Card", + "description": "Header for new card item type" }, - "viewItemHeader": { - "message": "Lihat $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderIdentity": { + "message": "New Identity", + "description": "Header for new identity item type" + }, + "newItemHeaderNote": { + "message": "New Note", + "description": "Header for new note item type" + }, + "newItemHeaderSshKey": { + "message": "New SSH key", + "description": "Header for new SSH key item type" + }, + "newItemHeaderTextSend": { + "message": "New Text Send", + "description": "Header for new text send" + }, + "newItemHeaderFileSend": { + "message": "New File Send", + "description": "Header for new file send" + }, + "editItemHeaderLogin": { + "message": "Edit Login", + "description": "Header for edit login item type" + }, + "editItemHeaderCard": { + "message": "Edit Card", + "description": "Header for edit card item type" + }, + "editItemHeaderIdentity": { + "message": "Edit Identity", + "description": "Header for edit identity item type" + }, + "editItemHeaderNote": { + "message": "Edit Note", + "description": "Header for edit note item type" + }, + "editItemHeaderSshKey": { + "message": "Edit SSH key", + "description": "Header for edit SSH key item type" + }, + "editItemHeaderTextSend": { + "message": "Edit Text Send", + "description": "Header for edit text send" + }, + "editItemHeaderFileSend": { + "message": "Edit File Send", + "description": "Header for edit file send" + }, + "viewItemHeaderLogin": { + "message": "View Login", + "description": "Header for view login item type" + }, + "viewItemHeaderCard": { + "message": "View Card", + "description": "Header for view card item type" + }, + "viewItemHeaderIdentity": { + "message": "View Identity", + "description": "Header for view identity item type" + }, + "viewItemHeaderNote": { + "message": "View Note", + "description": "Header for view note item type" + }, + "viewItemHeaderSshKey": { + "message": "View SSH key", + "description": "Header for view SSH key item type" }, "passwordHistory": { "message": "Riwayat Kata Sandi" @@ -2494,10 +2581,10 @@ "message": "Sebuah kebijakan organisasi telah menghalangi mengimpor benda-benda ke brankas pribadi Anda." }, "restrictCardTypeImport": { - "message": "Cannot import card item types" + "message": "Tidak dapat meingpor jenis item kartu" }, "restrictCardTypeImportDesc": { - "message": "A policy set by 1 or more organizations prevents you from importing cards to your vaults." + "message": "Kebijakan yang diatur 1 atau lebih organisasi tidak mengizinkan Anda mengimpor kartu ke brankas." }, "domainsTitle": { "message": "Domain", @@ -2926,7 +3013,7 @@ "message": "Anda harus memverifikasi email Anda untuk menggunakan fitur ini. Anda dapat memverifikasi email Anda di brankas web." }, "masterPasswordSuccessfullySet": { - "message": "Master password successfully set" + "message": "Kata sandi utama berhasil diatur" }, "updatedMasterPassword": { "message": "Kata Sandi Utama Telah Diperbarui" @@ -3129,6 +3216,24 @@ } } }, + "exportingOrganizationVaultFromPasswordManagerWithDataOwnershipDesc": { + "message": "Only the organization vault associated with $ORGANIZATION$ will be exported.", + "placeholders": { + "organization": { + "content": "$1", + "example": "My Org Name" + } + } + }, + "exportingOrganizationVaultFromAdminConsoleWithDataOwnershipDesc": { + "message": "Only the organization vault associated with $ORGANIZATION$ will be exported. My items collections will not be included.", + "placeholders": { + "organization": { + "content": "$1", + "example": "My Org Name" + } + } + }, "error": { "message": "Galat" }, @@ -3460,8 +3565,30 @@ "logInRequestSent": { "message": "Permintaan terkirim" }, + "loginRequestApprovedForEmailOnDevice": { + "message": "Permintaan masuk untuk $EMAIL$ di $DEVICE$ diizinkan", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + }, + "device": { + "content": "$2", + "example": "Web app - Chrome" + } + } + }, + "youDeniedLoginAttemptFromAnotherDevice": { + "message": "Anda menolak percobaan masuk dari perangkat lain. Jika itu adalah Anda, mohon coba masuk kembali di perangkat tersebut." + }, + "device": { + "message": "Perangkat" + }, + "loginStatus": { + "message": "Status masuk" + }, "masterPasswordChanged": { - "message": "Master password saved" + "message": "Sandi utama disimpan" }, "exposedMasterPassword": { "message": "Kata Sandi Utama yang Terpapar" @@ -3496,9 +3623,6 @@ "autofillPageLoadPolicyActivated": { "message": "Kebijakan organisasi Anda telah menyalakan isi otomatis ketika halaman dimuat." }, - "howToAutofill": { - "message": "Bagaimana cara mengisi otomatis" - }, "autofillSelectInfoWithCommand": { "message": "Pilih sebuah benda dari layar ini, gunakan pintasan $COMMAND$, atau jelajahi pilihan lainnya di pengaturan.", "placeholders": { @@ -3556,6 +3680,94 @@ "rememberThisDeviceToMakeFutureLoginsSeamless": { "message": "Ingat perangkat ini untuk membuat login berikutnya lebih lancar" }, + "manageDevices": { + "message": "Kelola perangkat" + }, + "currentSession": { + "message": "Sesi saat ini" + }, + "mobile": { + "message": "Seluler", + "description": "Mobile app" + }, + "extension": { + "message": "Pengaya", + "description": "Browser extension/addon" + }, + "desktop": { + "message": "Desktop", + "description": "Desktop app" + }, + "webVault": { + "message": "Brankas web" + }, + "webApp": { + "message": "Aplikasi web" + }, + "cli": { + "message": "Antarmuka Baris Perintah" + }, + "sdk": { + "message": "SDK", + "description": "Software Development Kit" + }, + "requestPending": { + "message": "Permintaan tertunda" + }, + "firstLogin": { + "message": "Masuk pertama" + }, + "trusted": { + "message": "Terpercaya" + }, + "needsApproval": { + "message": "Perlu persetujuan" + }, + "devices": { + "message": "Perangkat" + }, + "accessAttemptBy": { + "message": "Percobaan akses oleh $EMAIL$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + } + } + }, + "confirmAccess": { + "message": "Izinkan akses" + }, + "denyAccess": { + "message": "Tolak akses" + }, + "time": { + "message": "Waktu" + }, + "deviceType": { + "message": "Jenis Perangkat" + }, + "loginRequest": { + "message": "Permintaan masuk" + }, + "thisRequestIsNoLongerValid": { + "message": "Permintaan ini tidak lagi valid." + }, + "loginRequestHasAlreadyExpired": { + "message": "Permintaan masuk kedaluwarsa." + }, + "justNow": { + "message": "Baru saja" + }, + "requestedXMinutesAgo": { + "message": "Diminta $MINUTES$ menit yang lalu", + "placeholders": { + "minutes": { + "content": "$1", + "example": "5" + } + } + }, "deviceApprovalRequired": { "message": "Persetujuan perangkat diperlukan. Pilih sebuah pilihan persetujuan berikut:" }, @@ -3578,10 +3790,10 @@ "message": "Minta persetujuan admin" }, "unableToCompleteLogin": { - "message": "Unable to complete login" + "message": "Gagal menyelesaikan proses masuk" }, "loginOnTrustedDeviceOrAskAdminToAssignPassword": { - "message": "You need to log in on a trusted device or ask your administrator to assign you a password." + "message": "Anda harus masuk di perangkat terpercaya atau meminta administrator untuk membuat kata sandi Anda." }, "ssoIdentifierRequired": { "message": "Pengenal SSO organisasi diperlukan." @@ -3673,7 +3885,7 @@ "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "sendsBodyNoItems": { - "message": "Bagikan berkas-berkas dan data secara aman dengan siapa saja, pada platform apapun. Informasi Anda akan tetap terenkripsi dari ujung-ke-ujung sembari membatasi paparan.", + "message": "Bagikan berkas-berkas dan data secara aman dengan siapa saja, pada platform apa pun. Informasi Anda akan tetap terenkripsi dari ujung ke ujung sembari membatasi paparan.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "inputRequired": { @@ -3795,18 +4007,10 @@ "aliasDomain": { "message": "Domain alias" }, - "passwordRepromptDisabledAutofillOnPageLoad": { - "message": "Benda dengan meminta ulang kata sandi utama tidak dapat diisikan otomatis ketika halaman dimuat. Isi otomatis ketika halaman dimuat dimatikan.", - "description": "Toast message for describing that master password re-prompt cannot be autofilled on page load." - }, "autofillOnPageLoadSetToDefault": { "message": "Isi otomatis ketika halaman dimuat telah diatur untuk menggunakan pengaturan bawaan.", "description": "Toast message for informing the user that autofill on page load has been set to the default setting." }, - "turnOffMasterPasswordPromptToEditField": { - "message": "Matikan minta ulang kata sandi utama untuk menyunting kolom ini", - "description": "Message appearing below the autofill on load message when master password reprompt is set for a vault item." - }, "toggleSideNavigation": { "message": "Saklar bilah isi navigasi" }, @@ -4015,15 +4219,11 @@ "selectImportCollection": { "message": "Pilih koleksi" }, - "importTargetHint": { - "message": "Pilih pilihan ini jika Anda ingin isi dari berkas yang diimpor dipindah ke $DESTINATION$", - "description": "Located as a hint under the import target. Will be appended by either folder or collection, depending if the user is importing into an individual or an organizational vault.", - "placeholders": { - "destination": { - "content": "$1", - "example": "folder or collection" - } - } + "importTargetHintCollection": { + "message": "Select this option if you want the imported file contents moved to a collection" + }, + "importTargetHintFolder": { + "message": "Select this option if you want the imported file contents moved to a folder" }, "importUnassignedItemsError": { "message": "Berkas berisi benda-benda yang belum ditetapkan." @@ -4080,9 +4280,6 @@ "passkeyNotCopiedAlert": { "message": "Kunci sandi tidak akan disalin ke benda yang digandakan. Apakah Anda ingin melanjutkan menggandakan benda ini?" }, - "passkeyFeatureIsNotImplementedForAccountsWithoutMasterPassword": { - "message": "Verifikasi diperlukan oleh situs yang menyelenggarakan. Fitur ini belum diterapkan untuk akun tanpa kata sandi utama." - }, "logInWithPasskeyQuestion": { "message": "Masuk dengan kunci sandi?" }, @@ -4263,23 +4460,23 @@ "description": "Label indicating the most common import formats" }, "uriMatchDefaultStrategyHint": { - "message": "URI match detection is how Bitwarden identifies autofill suggestions.", + "message": "Bitwarden mengenali saran isi otomatis menggunakan deteksi kecocokan URI.", "description": "Explains to the user that URI match detection determines how Bitwarden suggests autofill options, and clarifies that this default strategy applies when no specific match detection is set for a login item." }, "regExAdvancedOptionWarning": { - "message": "\"Regular expression\" is an advanced option with increased risk of exposing credentials.", + "message": "\"Ekspresi regular\" adalah opsi lanjutan dengan risiko lebih besar untuk menyingkapkan identitas anda.", "description": "Content for dialog which warns a user when selecting 'regular expression' matching strategy as a cipher match strategy" }, "startsWithAdvancedOptionWarning": { - "message": "\"Starts with\" is an advanced option with increased risk of exposing credentials.", + "message": "\"Bermula dengan\" adalah opsi lanjutan dengan risiko lebih besar untuk menyingkapkan identitas anda.", "description": "Content for dialog which warns a user when selecting 'starts with' matching strategy as a cipher match strategy" }, "uriMatchWarningDialogLink": { - "message": "More about match detection", + "message": "Ketahui lebih tentang deteksi kecocokan", "description": "Link to match detection docs on warning dialog for advance match strategy" }, "uriAdvancedOption": { - "message": "Advanced options", + "message": "Opsi lanjutan", "description": "Advanced option placeholder for uri option component" }, "confirmContinueToBrowserSettingsTitle": { @@ -4465,17 +4662,17 @@ } } }, - "copyFieldValue": { - "message": "Salin $FIELD$, $VALUE$", + "copyFieldCipherName": { + "message": "Salin $FIELD$, $CIPHERNAME$", "description": "Title for a button that copies a field value to the clipboard.", "placeholders": { "field": { "content": "$1", "example": "Username" }, - "value": { + "ciphername": { "content": "$2", - "example": "Foo" + "example": "Login Item" } } }, @@ -4768,9 +4965,6 @@ } } }, - "enableAnimations": { - "message": "Nyalakan animasi" - }, "showAnimations": { "message": "Tampilkan animasi" }, @@ -4983,15 +5177,9 @@ "itemLocation": { "message": "Lokasi Item" }, - "fileSend": { - "message": "Berkas Send" - }, "fileSends": { "message": "Berkas-berkas Send" }, - "textSend": { - "message": "Teks Send" - }, "textSends": { "message": "Teks Send" }, @@ -5001,6 +5189,18 @@ "showNumberOfAutofillSuggestions": { "message": "Tampilkan jumlah saran isi otomatis login pada ikon pengaya" }, + "accountAccessRequested": { + "message": "Account access requested" + }, + "confirmAccessAttempt": { + "message": "Confirm access attempt for $EMAIL$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + } + } + }, "showQuickCopyActions": { "message": "Tampilkan tindakan salin cepat pada Vault" }, @@ -5040,9 +5240,6 @@ "vaultCustomTimeoutMinimum": { "message": "Minimal tenggat waktu ubahsuai adalah 1 menit." }, - "additionalContentAvailable": { - "message": "Konten tambahan telah tersedia" - }, "fileSavedToDevice": { "message": "Berkas tersimpan di perangkat. Kelola dari unduhan perangkat Anda." }, @@ -5110,7 +5307,7 @@ "message": "PIN untuk membuka telah diatur" }, "unlockWithBiometricSet": { - "message": "Unlock with biometrics set" + "message": "Biometrik untuk membuka telah diatur" }, "authenticating": { "message": "Sedang memeriksa keaslian" @@ -5328,6 +5525,12 @@ "changeAtRiskPassword": { "message": "Ubah kata sandi yang berrisiko" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "This login is at-risk and missing a website. Add a website and change the password for stronger security." + }, + "missingWebsite": { + "message": "Missing website" + }, "settingsVaultOptions": { "message": "Pilihan brankas" }, @@ -5376,6 +5579,18 @@ "hasItemsVaultNudgeTitle": { "message": "Selamat datang di brankas Anda!" }, + "phishingPageTitle": { + "message": "Phishing website" + }, + "phishingPageCloseTab": { + "message": "Close tab" + }, + "phishingPageContinue": { + "message": "Continue" + }, + "phishingPageLearnWhy": { + "message": "Why are you seeing this?" + }, "hasItemsVaultNudgeBodyOne": { "message": "Benda-benda isi otomatis untuk halaman saat ini" }, @@ -5451,11 +5666,33 @@ "message": "Buat kata sandi yang kuat dan unik dengan mudah dengan menekan pada tombol Buat kata sandi untuk membantu Anda menyimpan login Anda dengan aman.", "description": "Aria label for the body content of the generator nudge" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "noPermissionsViewPage": { "message": "Anda tidak memiliki izin untuk melihat halaman ini. Coba masuk dengan akun yang berbeda." }, "wasmNotSupported": { "message": "WebAssembly tidak didukung atau tidak dinyalakan oleh peramban Anda. Web Assembly diperlukan untuk menggunakan aplikasi Bitwarden.", "description": "'WebAssembly' is a technical term and should not be translated." + }, + "showMore": { + "message": "Tampilkan lebih banyak" + }, + "showLess": { + "message": "Tampilkan lebih sedikit" + }, + "next": { + "message": "Next" + }, + "moreBreadcrumbs": { + "message": "More breadcrumbs", + "description": "This is used in the context of a breadcrumb navigation, indicating that there are more items in the breadcrumb trail that are not currently displayed." + }, + "confirmKeyConnectorDomain": { + "message": "Confirm Key Connector domain" } } diff --git a/apps/browser/src/_locales/it/messages.json b/apps/browser/src/_locales/it/messages.json index f4829ecabec..8a1357df910 100644 --- a/apps/browser/src/_locales/it/messages.json +++ b/apps/browser/src/_locales/it/messages.json @@ -547,12 +547,50 @@ "searchVault": { "message": "Cerca nella cassaforte" }, + "resetSearch": { + "message": "Svuota ricerca" + }, + "archiveNoun": { + "message": "Archive", + "description": "Noun" + }, + "archiveVerb": { + "message": "Archive", + "description": "Verb" + }, + "unarchive": { + "message": "Unarchive" + }, + "itemsInArchive": { + "message": "Items in archive" + }, + "noItemsInArchive": { + "message": "No items in archive" + }, + "noItemsInArchiveDesc": { + "message": "Archived items will appear here and will be excluded from general search results and autofill suggestions." + }, + "itemSentToArchive": { + "message": "Item sent to archive" + }, + "itemRemovedFromArchive": { + "message": "Item removed from archive" + }, + "archiveItem": { + "message": "Archive item" + }, + "archiveItemConfirmDesc": { + "message": "Archived items are excluded from general search results and autofill suggestions. Are you sure you want to archive this item?" + }, "edit": { "message": "Modifica" }, "view": { "message": "Visualizza" }, + "viewLogin": { + "message": "View login" + }, "noItemsInList": { "message": "Non ci sono elementi da mostrare." }, @@ -695,6 +733,15 @@ "invalidMasterPassword": { "message": "Password principale errata" }, + "invalidMasterPasswordConfirmEmailAndHost": { + "message": "Invalid master password. Confirm your email is correct and your account was created on $HOST$.", + "placeholders": { + "host": { + "content": "$1", + "example": "vault.bitwarden.com" + } + } + }, "vaultTimeout": { "message": "Timeout cassaforte" }, @@ -1174,10 +1221,10 @@ "description": "Detailed error message shown when saving login details fails." }, "changePasswordWarning": { - "message": "After changing your password, you will need to log in with your new password. Active sessions on other devices will be logged out within one hour." + "message": "Dopo aver cambiato la password, dovrai accedere con quella nuova. Le sessioni attive su altri dispositivi saranno disconnesse entro un'ora." }, "accountRecoveryUpdateMasterPasswordSubtitle": { - "message": "Change your master password to complete account recovery." + "message": "Cambia la password principale per completare il recupero dell'account." }, "enableChangedPasswordNotification": { "message": "Chiedi di aggiornare il login esistente" @@ -1501,6 +1548,15 @@ "readSecurityKey": { "message": "Leggi chiave di sicurezza" }, + "readingPasskeyLoading": { + "message": "Reading passkey..." + }, + "passkeyAuthenticationFailed": { + "message": "Passkey authentication failed" + }, + "useADifferentLogInMethod": { + "message": "Use a different log in method" + }, "awaitingSecurityKeyInteraction": { "message": "In attesa di interazione con la chiave di sicurezza..." }, @@ -1519,9 +1575,6 @@ "selectTwoStepLoginMethod": { "message": "Seleziona metodo di accesso in due passaggi" }, - "recoveryCodeDesc": { - "message": "Hai perso l'accesso a tutti i tuoi metodi di verifica in due passaggi? Usa il tuo codice di recupero per disattivarli tutti dal tuo account." - }, "recoveryCodeTitle": { "message": "Codice di recupero" }, @@ -1680,9 +1733,6 @@ "defaultAutoFillOnPageLoadDesc": { "message": "Puoi disattivare il riempimento automatico al caricamento della pagina per singoli login dalla sezione Modifica elemento." }, - "itemAutoFillOnPageLoad": { - "message": "Riempi automaticamente al caricamento della pagina (se abilitato in Impostazioni)" - }, "autoFillOnPageLoadUseDefault": { "message": "Usa impostazione predefinita" }, @@ -1754,23 +1804,8 @@ "popup2faCloseMessage": { "message": "Cliccare fuori del pop-up per controllare il codice di verifica nella tua email chiuderà questo pop-up. Vuoi aprire questo pop-up in una nuova finestra in modo che non si chiuda?" }, - "popupU2fCloseMessage": { - "message": "Questo browser non può elaborare richieste U2F in questo pop-up. Aprire questo pop-up in una nuova finestra per accedere usando U2F?" - }, - "enableFavicon": { - "message": "Mostra icone dei siti" - }, - "faviconDesc": { - "message": "Mostra un piccolo logo riconoscibile accanto a ogni login." - }, - "faviconDescAlt": { - "message": "Mostra un piccolo logo riconoscibile accanto a ogni login. Si applica a tutti gli account connessi." - }, - "enableBadgeCounter": { - "message": "Mostra badge contatore" - }, - "badgeCounterDesc": { - "message": "Mostra il numero di login salvati per il sito web corrente nell'icona dell'estensione." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "cardholderName": { "message": "Titolare della carta" @@ -1829,6 +1864,9 @@ "securityCode": { "message": "Codice di sicurezza" }, + "cardNumber": { + "message": "numero carta" + }, "ex": { "message": "es." }, @@ -1931,32 +1969,81 @@ "typeNote": { "message": "Nota" }, - "newItemHeader": { - "message": "Nuovo $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderLogin": { + "message": "New Login", + "description": "Header for new login item type" }, - "editItemHeader": { - "message": "Modifica $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderCard": { + "message": "New Card", + "description": "Header for new card item type" }, - "viewItemHeader": { - "message": "Visualizza $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderIdentity": { + "message": "New Identity", + "description": "Header for new identity item type" + }, + "newItemHeaderNote": { + "message": "New Note", + "description": "Header for new note item type" + }, + "newItemHeaderSshKey": { + "message": "New SSH key", + "description": "Header for new SSH key item type" + }, + "newItemHeaderTextSend": { + "message": "New Text Send", + "description": "Header for new text send" + }, + "newItemHeaderFileSend": { + "message": "New File Send", + "description": "Header for new file send" + }, + "editItemHeaderLogin": { + "message": "Edit Login", + "description": "Header for edit login item type" + }, + "editItemHeaderCard": { + "message": "Edit Card", + "description": "Header for edit card item type" + }, + "editItemHeaderIdentity": { + "message": "Edit Identity", + "description": "Header for edit identity item type" + }, + "editItemHeaderNote": { + "message": "Edit Note", + "description": "Header for edit note item type" + }, + "editItemHeaderSshKey": { + "message": "Edit SSH key", + "description": "Header for edit SSH key item type" + }, + "editItemHeaderTextSend": { + "message": "Edit Text Send", + "description": "Header for edit text send" + }, + "editItemHeaderFileSend": { + "message": "Edit File Send", + "description": "Header for edit file send" + }, + "viewItemHeaderLogin": { + "message": "View Login", + "description": "Header for view login item type" + }, + "viewItemHeaderCard": { + "message": "View Card", + "description": "Header for view card item type" + }, + "viewItemHeaderIdentity": { + "message": "View Identity", + "description": "Header for view identity item type" + }, + "viewItemHeaderNote": { + "message": "View Note", + "description": "Header for view note item type" + }, + "viewItemHeaderSshKey": { + "message": "View SSH key", + "description": "Header for view SSH key item type" }, "passwordHistory": { "message": "Cronologia delle password" @@ -2926,7 +3013,7 @@ "message": "Devi verificare la tua email per usare questa funzionalità. Puoi verificare la tua email nella cassaforte web." }, "masterPasswordSuccessfullySet": { - "message": "Master password successfully set" + "message": "Password principale impostata correttamente" }, "updatedMasterPassword": { "message": "Password principale aggiornata" @@ -3129,6 +3216,24 @@ } } }, + "exportingOrganizationVaultFromPasswordManagerWithDataOwnershipDesc": { + "message": "Only the organization vault associated with $ORGANIZATION$ will be exported.", + "placeholders": { + "organization": { + "content": "$1", + "example": "My Org Name" + } + } + }, + "exportingOrganizationVaultFromAdminConsoleWithDataOwnershipDesc": { + "message": "Only the organization vault associated with $ORGANIZATION$ will be exported. My items collections will not be included.", + "placeholders": { + "organization": { + "content": "$1", + "example": "My Org Name" + } + } + }, "error": { "message": "Errore" }, @@ -3460,8 +3565,30 @@ "logInRequestSent": { "message": "Richiesta inviata" }, + "loginRequestApprovedForEmailOnDevice": { + "message": "Richiesta di accesso approvata per $EMAIL$ su $DEVICE$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + }, + "device": { + "content": "$2", + "example": "Web app - Chrome" + } + } + }, + "youDeniedLoginAttemptFromAnotherDevice": { + "message": "Hai negato un tentativo di accesso da un altro dispositivo. Se eri davvero tu, prova di nuovo ad accedere con il dispositivo." + }, + "device": { + "message": "Dispositivo" + }, + "loginStatus": { + "message": "Stato login" + }, "masterPasswordChanged": { - "message": "Master password saved" + "message": "Password principale salvata" }, "exposedMasterPassword": { "message": "Password principale violata" @@ -3496,9 +3623,6 @@ "autofillPageLoadPolicyActivated": { "message": "Le politiche della tua organizzazione hanno abilitato il riempimento automatico al caricamento della pagina." }, - "howToAutofill": { - "message": "Come riempire automaticamente" - }, "autofillSelectInfoWithCommand": { "message": "Seleziona un elemento da questa schermata, usa la scorciatoia $COMMAND$, o esplora altre opzioni nelle impostazioni.", "placeholders": { @@ -3556,6 +3680,94 @@ "rememberThisDeviceToMakeFutureLoginsSeamless": { "message": "Ricorda questo dispositivo per rendere immediati i futuri accessi" }, + "manageDevices": { + "message": "Gestisci dispositivi" + }, + "currentSession": { + "message": "Sessione in corso" + }, + "mobile": { + "message": "Mobile", + "description": "Mobile app" + }, + "extension": { + "message": "Estensione", + "description": "Browser extension/addon" + }, + "desktop": { + "message": "Desktop", + "description": "Desktop app" + }, + "webVault": { + "message": "Cassaforte Web" + }, + "webApp": { + "message": "Bitwarden Web" + }, + "cli": { + "message": "Linea di comando" + }, + "sdk": { + "message": "SDK", + "description": "Software Development Kit" + }, + "requestPending": { + "message": "Richiesta in attesa" + }, + "firstLogin": { + "message": "Primo accesso" + }, + "trusted": { + "message": "Attendibile" + }, + "needsApproval": { + "message": "In attesa di approvazione" + }, + "devices": { + "message": "Dispositivi" + }, + "accessAttemptBy": { + "message": "Tentativo di accesso da $EMAIL$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + } + } + }, + "confirmAccess": { + "message": "Conferma l'accesso" + }, + "denyAccess": { + "message": "Nega l'accesso" + }, + "time": { + "message": "Ora" + }, + "deviceType": { + "message": "Tipo di dispositivo" + }, + "loginRequest": { + "message": "Richiesta di accesso" + }, + "thisRequestIsNoLongerValid": { + "message": "Questa richiesta non è più valida." + }, + "loginRequestHasAlreadyExpired": { + "message": "La richiesta di accesso è scaduta." + }, + "justNow": { + "message": "Pochi secondi fa" + }, + "requestedXMinutesAgo": { + "message": "Richiesta: $MINUTES$ minuti fa", + "placeholders": { + "minutes": { + "content": "$1", + "example": "5" + } + } + }, "deviceApprovalRequired": { "message": "Approvazione del dispositivo obbligatoria. Seleziona un'opzione di approvazione:" }, @@ -3578,10 +3790,10 @@ "message": "Richiedi approvazione dell'amministratore" }, "unableToCompleteLogin": { - "message": "Unable to complete login" + "message": "Impossibile completare l'accesso" }, "loginOnTrustedDeviceOrAskAdminToAssignPassword": { - "message": "You need to log in on a trusted device or ask your administrator to assign you a password." + "message": "È necessario accedere da un dispositivo attendibile oppure chiedere all'amministratore l'assegnazione di una password." }, "ssoIdentifierRequired": { "message": "Identificatore SSO dell'organizzazione obbligatorio." @@ -3795,18 +4007,10 @@ "aliasDomain": { "message": "Dominio alias" }, - "passwordRepromptDisabledAutofillOnPageLoad": { - "message": "Gli elementi che richiedono di inserire di nuovo la password principale non possono essere riempiti automaticamente al caricamento della pagina.", - "description": "Toast message for describing that master password re-prompt cannot be autofilled on page load." - }, "autofillOnPageLoadSetToDefault": { "message": "Riempimento automatico al caricamento della pagina impostato con l'impostazione predefinita.", "description": "Toast message for informing the user that autofill on page load has been set to the default setting." }, - "turnOffMasterPasswordPromptToEditField": { - "message": "Disattiva l'inserimento della password principale di nuovo per modificare questo campo", - "description": "Message appearing below the autofill on load message when master password reprompt is set for a vault item." - }, "toggleSideNavigation": { "message": "Attiva/Disattiva navigazione laterale" }, @@ -4015,15 +4219,11 @@ "selectImportCollection": { "message": "Seleziona una raccolta" }, - "importTargetHint": { - "message": "Seleziona questa opzione se vuoi che i contenuti del file di importazione siano spostati in una $DESTINATION$", - "description": "Located as a hint under the import target. Will be appended by either folder or collection, depending if the user is importing into an individual or an organizational vault.", - "placeholders": { - "destination": { - "content": "$1", - "example": "folder or collection" - } - } + "importTargetHintCollection": { + "message": "Seleziona questa opzione se vuoi che i contenuti dell'importazione siano salvati in una raccolta" + }, + "importTargetHintFolder": { + "message": "Seleziona questa opzione se vuoi che i contenuti dell'importazione siano salvati in una cartella" }, "importUnassignedItemsError": { "message": "Il file contiene elementi non assegnati." @@ -4080,9 +4280,6 @@ "passkeyNotCopiedAlert": { "message": "La passkey non sarà copiata nell'elemento clonato. Vuoi continuare a clonare questo elemento?" }, - "passkeyFeatureIsNotImplementedForAccountsWithoutMasterPassword": { - "message": "Verifica richiesta dal sito web. Questa funzionalità non è ancora implementata per gli account senza password principale." - }, "logInWithPasskeyQuestion": { "message": "Accedi con passkey?" }, @@ -4263,23 +4460,23 @@ "description": "Label indicating the most common import formats" }, "uriMatchDefaultStrategyHint": { - "message": "URI match detection is how Bitwarden identifies autofill suggestions.", + "message": "La corrispondenza URL è il metodo predefinito per identificare i suggerimenti di riempimento automatico.", "description": "Explains to the user that URI match detection determines how Bitwarden suggests autofill options, and clarifies that this default strategy applies when no specific match detection is set for a login item." }, "regExAdvancedOptionWarning": { - "message": "\"Regular expression\" is an advanced option with increased risk of exposing credentials.", + "message": "'Espressione regolare' è un'opzione avanzata con un maggior rischio di esporre le credenziali.", "description": "Content for dialog which warns a user when selecting 'regular expression' matching strategy as a cipher match strategy" }, "startsWithAdvancedOptionWarning": { - "message": "\"Starts with\" is an advanced option with increased risk of exposing credentials.", + "message": "'Inizia con' è un'opzione con un maggior rischio di esporre le credenziali.", "description": "Content for dialog which warns a user when selecting 'starts with' matching strategy as a cipher match strategy" }, "uriMatchWarningDialogLink": { - "message": "More about match detection", + "message": "Ulteriori informazioni sulla corrispondenza degli URL", "description": "Link to match detection docs on warning dialog for advance match strategy" }, "uriAdvancedOption": { - "message": "Advanced options", + "message": "Opzioni avanzate", "description": "Advanced option placeholder for uri option component" }, "confirmContinueToBrowserSettingsTitle": { @@ -4465,17 +4662,17 @@ } } }, - "copyFieldValue": { - "message": "Copia $FIELD$, $VALUE$", + "copyFieldCipherName": { + "message": "Copia $FIELD$, $CIPHERNAME$", "description": "Title for a button that copies a field value to the clipboard.", "placeholders": { "field": { "content": "$1", "example": "Username" }, - "value": { + "ciphername": { "content": "$2", - "example": "Foo" + "example": "Login Item" } } }, @@ -4768,9 +4965,6 @@ } } }, - "enableAnimations": { - "message": "Abilita animazioni" - }, "showAnimations": { "message": "Mostra animazioni" }, @@ -4983,15 +5177,9 @@ "itemLocation": { "message": "Posizione elemento" }, - "fileSend": { - "message": "Send di File" - }, "fileSends": { "message": "Send File" }, - "textSend": { - "message": "Send di Testo" - }, "textSends": { "message": "Send Testo" }, @@ -5001,6 +5189,18 @@ "showNumberOfAutofillSuggestions": { "message": "Mostra il numero di suggerimenti di riempimento automatico sull'icona dell'estensione" }, + "accountAccessRequested": { + "message": "Accesso all'account richiesto" + }, + "confirmAccessAttempt": { + "message": "Conferma il tentativo di accesso per $EMAIL$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + } + } + }, "showQuickCopyActions": { "message": "Mostra azioni di copia rapida nella Cassaforte" }, @@ -5040,9 +5240,6 @@ "vaultCustomTimeoutMinimum": { "message": "Il timeout personalizzato minimo è 1 minuto." }, - "additionalContentAvailable": { - "message": "Sono disponibili ulteriori contenuti" - }, "fileSavedToDevice": { "message": "File salvato sul dispositivo. Gestisci dai download del dispositivo." }, @@ -5328,6 +5525,12 @@ "changeAtRiskPassword": { "message": "Cambia parola d'accesso a rischio" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "This login is at-risk and missing a website. Add a website and change the password for stronger security." + }, + "missingWebsite": { + "message": "Missing website" + }, "settingsVaultOptions": { "message": "Opzioni cassaforte" }, @@ -5376,6 +5579,18 @@ "hasItemsVaultNudgeTitle": { "message": "Benvenuto nella tua cassaforte!" }, + "phishingPageTitle": { + "message": "Phishing website" + }, + "phishingPageCloseTab": { + "message": "Close tab" + }, + "phishingPageContinue": { + "message": "Continue" + }, + "phishingPageLearnWhy": { + "message": "Why are you seeing this?" + }, "hasItemsVaultNudgeBodyOne": { "message": "Riempimento automatico per questa pagina" }, @@ -5451,11 +5666,33 @@ "message": "Crea facilmente password forti e uniche cliccando sul pulsante 'Genera password' per aiutarti a mantenere al sicuro i tuoi login.", "description": "Aria label for the body content of the generator nudge" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "noPermissionsViewPage": { "message": "Non hai i permessi per visualizzare questa pagina. Prova ad accedere con un altro account." }, "wasmNotSupported": { "message": "WebAssembly non è supportato dal browser o non è abilitato. WebAssembly è richiesto per utilizzare l'app Bitwarden.", "description": "'WebAssembly' is a technical term and should not be translated." + }, + "showMore": { + "message": "Mostra di più" + }, + "showLess": { + "message": "Mostra di meno" + }, + "next": { + "message": "Avanti" + }, + "moreBreadcrumbs": { + "message": "Ulteriori segmenti", + "description": "This is used in the context of a breadcrumb navigation, indicating that there are more items in the breadcrumb trail that are not currently displayed." + }, + "confirmKeyConnectorDomain": { + "message": "Conferma dominio Key Connector" } } diff --git a/apps/browser/src/_locales/ja/messages.json b/apps/browser/src/_locales/ja/messages.json index 783a9ff0eb1..b053a0cb609 100644 --- a/apps/browser/src/_locales/ja/messages.json +++ b/apps/browser/src/_locales/ja/messages.json @@ -547,12 +547,50 @@ "searchVault": { "message": "保管庫を検索" }, + "resetSearch": { + "message": "Reset search" + }, + "archiveNoun": { + "message": "Archive", + "description": "Noun" + }, + "archiveVerb": { + "message": "Archive", + "description": "Verb" + }, + "unarchive": { + "message": "Unarchive" + }, + "itemsInArchive": { + "message": "Items in archive" + }, + "noItemsInArchive": { + "message": "No items in archive" + }, + "noItemsInArchiveDesc": { + "message": "Archived items will appear here and will be excluded from general search results and autofill suggestions." + }, + "itemSentToArchive": { + "message": "Item sent to archive" + }, + "itemRemovedFromArchive": { + "message": "Item removed from archive" + }, + "archiveItem": { + "message": "Archive item" + }, + "archiveItemConfirmDesc": { + "message": "Archived items are excluded from general search results and autofill suggestions. Are you sure you want to archive this item?" + }, "edit": { "message": "編集" }, "view": { "message": "表示" }, + "viewLogin": { + "message": "View login" + }, "noItemsInList": { "message": "表示するアイテムがありません" }, @@ -695,6 +733,15 @@ "invalidMasterPassword": { "message": "マスターパスワードが間違っています" }, + "invalidMasterPasswordConfirmEmailAndHost": { + "message": "Invalid master password. Confirm your email is correct and your account was created on $HOST$.", + "placeholders": { + "host": { + "content": "$1", + "example": "vault.bitwarden.com" + } + } + }, "vaultTimeout": { "message": "保管庫のタイムアウト" }, @@ -1501,6 +1548,15 @@ "readSecurityKey": { "message": "セキュリティキーの読み取り" }, + "readingPasskeyLoading": { + "message": "Reading passkey..." + }, + "passkeyAuthenticationFailed": { + "message": "Passkey authentication failed" + }, + "useADifferentLogInMethod": { + "message": "Use a different log in method" + }, "awaitingSecurityKeyInteraction": { "message": "セキュリティキーとの通信を待ち受け中…" }, @@ -1519,9 +1575,6 @@ "selectTwoStepLoginMethod": { "message": "2段階認証の方法を選択" }, - "recoveryCodeDesc": { - "message": "すべての2段階認証プロパイダにアクセスできなくなったときは、リカバリーコードを使用するとアカウントの2段階認証を無効化できます。" - }, "recoveryCodeTitle": { "message": "リカバリーコード" }, @@ -1680,9 +1733,6 @@ "defaultAutoFillOnPageLoadDesc": { "message": "ページ読み込み時に自動入力を有効にすると、個々のログインアイテムの機能を有効または無効にできます。 これは個別に設定されていないログインアイテムに適用されるデフォルト設定です。" }, - "itemAutoFillOnPageLoad": { - "message": "ページ読み込み時に自動入力する (オプションで有効な場合)" - }, "autoFillOnPageLoadUseDefault": { "message": "デフォルト設定を使用" }, @@ -1754,23 +1804,8 @@ "popup2faCloseMessage": { "message": "認証コードを確認するためにポップアップの外をクリックすると、このポップアップが閉じてしまいます。閉じてしまわないよう、新しいウインドウでこのポップアップを開きますか?" }, - "popupU2fCloseMessage": { - "message": "このブラウザーでは U2F 要求をポップアップウインドウでは実行できません。U2F でログインできるよう、新しいウインドウで開き直しますか?" - }, - "enableFavicon": { - "message": "ウェブサイトのアイコンを表示" - }, - "faviconDesc": { - "message": "ログイン情報の隣にアイコン画像を表示します" - }, - "faviconDescAlt": { - "message": "各ログインの横に認識可能な画像を表示します。すべてのログイン済みアカウントに適用されます。" - }, - "enableBadgeCounter": { - "message": "バッジカウンターを表示" - }, - "badgeCounterDesc": { - "message": "現在のページに一致するログイン情報の数を表示します" + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "cardholderName": { "message": "カードの名義人名" @@ -1829,6 +1864,9 @@ "securityCode": { "message": "セキュリティコード" }, + "cardNumber": { + "message": "card number" + }, "ex": { "message": "例:" }, @@ -1931,32 +1969,81 @@ "typeNote": { "message": "Note" }, - "newItemHeader": { - "message": "$TYPE$ を新規作成", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderLogin": { + "message": "New Login", + "description": "Header for new login item type" }, - "editItemHeader": { - "message": "$TYPE$ を編集", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderCard": { + "message": "New Card", + "description": "Header for new card item type" }, - "viewItemHeader": { - "message": "$TYPE$ を表示", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderIdentity": { + "message": "New Identity", + "description": "Header for new identity item type" + }, + "newItemHeaderNote": { + "message": "New Note", + "description": "Header for new note item type" + }, + "newItemHeaderSshKey": { + "message": "New SSH key", + "description": "Header for new SSH key item type" + }, + "newItemHeaderTextSend": { + "message": "New Text Send", + "description": "Header for new text send" + }, + "newItemHeaderFileSend": { + "message": "New File Send", + "description": "Header for new file send" + }, + "editItemHeaderLogin": { + "message": "Edit Login", + "description": "Header for edit login item type" + }, + "editItemHeaderCard": { + "message": "Edit Card", + "description": "Header for edit card item type" + }, + "editItemHeaderIdentity": { + "message": "Edit Identity", + "description": "Header for edit identity item type" + }, + "editItemHeaderNote": { + "message": "Edit Note", + "description": "Header for edit note item type" + }, + "editItemHeaderSshKey": { + "message": "Edit SSH key", + "description": "Header for edit SSH key item type" + }, + "editItemHeaderTextSend": { + "message": "Edit Text Send", + "description": "Header for edit text send" + }, + "editItemHeaderFileSend": { + "message": "Edit File Send", + "description": "Header for edit file send" + }, + "viewItemHeaderLogin": { + "message": "View Login", + "description": "Header for view login item type" + }, + "viewItemHeaderCard": { + "message": "View Card", + "description": "Header for view card item type" + }, + "viewItemHeaderIdentity": { + "message": "View Identity", + "description": "Header for view identity item type" + }, + "viewItemHeaderNote": { + "message": "View Note", + "description": "Header for view note item type" + }, + "viewItemHeaderSshKey": { + "message": "View SSH key", + "description": "Header for view SSH key item type" }, "passwordHistory": { "message": "パスワードの履歴" @@ -3129,6 +3216,24 @@ } } }, + "exportingOrganizationVaultFromPasswordManagerWithDataOwnershipDesc": { + "message": "Only the organization vault associated with $ORGANIZATION$ will be exported.", + "placeholders": { + "organization": { + "content": "$1", + "example": "My Org Name" + } + } + }, + "exportingOrganizationVaultFromAdminConsoleWithDataOwnershipDesc": { + "message": "Only the organization vault associated with $ORGANIZATION$ will be exported. My items collections will not be included.", + "placeholders": { + "organization": { + "content": "$1", + "example": "My Org Name" + } + } + }, "error": { "message": "エラー" }, @@ -3460,6 +3565,28 @@ "logInRequestSent": { "message": "リクエストが送信されました" }, + "loginRequestApprovedForEmailOnDevice": { + "message": "Login request approved for $EMAIL$ on $DEVICE$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + }, + "device": { + "content": "$2", + "example": "Web app - Chrome" + } + } + }, + "youDeniedLoginAttemptFromAnotherDevice": { + "message": "You denied a login attempt from another device. If this was you, try to log in with the device again." + }, + "device": { + "message": "Device" + }, + "loginStatus": { + "message": "Login status" + }, "masterPasswordChanged": { "message": "Master password saved" }, @@ -3496,9 +3623,6 @@ "autofillPageLoadPolicyActivated": { "message": "組織のポリシーはページ読み込み時の自動入力をオンにしました。" }, - "howToAutofill": { - "message": "自動入力する方法" - }, "autofillSelectInfoWithCommand": { "message": "この画面からアイテムを選択するか、ショートカット $COMMAND$を使用するか、設定で他のオプションを確認してください。", "placeholders": { @@ -3556,6 +3680,94 @@ "rememberThisDeviceToMakeFutureLoginsSeamless": { "message": "このデバイスを記憶して今後のログインをシームレスにする" }, + "manageDevices": { + "message": "Manage devices" + }, + "currentSession": { + "message": "Current session" + }, + "mobile": { + "message": "Mobile", + "description": "Mobile app" + }, + "extension": { + "message": "Extension", + "description": "Browser extension/addon" + }, + "desktop": { + "message": "Desktop", + "description": "Desktop app" + }, + "webVault": { + "message": "Web vault" + }, + "webApp": { + "message": "Web app" + }, + "cli": { + "message": "CLI" + }, + "sdk": { + "message": "SDK", + "description": "Software Development Kit" + }, + "requestPending": { + "message": "Request pending" + }, + "firstLogin": { + "message": "First login" + }, + "trusted": { + "message": "Trusted" + }, + "needsApproval": { + "message": "Needs approval" + }, + "devices": { + "message": "Devices" + }, + "accessAttemptBy": { + "message": "Access attempt by $EMAIL$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + } + } + }, + "confirmAccess": { + "message": "Confirm access" + }, + "denyAccess": { + "message": "Deny access" + }, + "time": { + "message": "Time" + }, + "deviceType": { + "message": "Device Type" + }, + "loginRequest": { + "message": "Login request" + }, + "thisRequestIsNoLongerValid": { + "message": "This request is no longer valid." + }, + "loginRequestHasAlreadyExpired": { + "message": "Login request has already expired." + }, + "justNow": { + "message": "Just now" + }, + "requestedXMinutesAgo": { + "message": "Requested $MINUTES$ minutes ago", + "placeholders": { + "minutes": { + "content": "$1", + "example": "5" + } + } + }, "deviceApprovalRequired": { "message": "デバイスの承認が必要です。以下から承認オプションを選択してください:" }, @@ -3795,18 +4007,10 @@ "aliasDomain": { "message": "エイリアスドメイン" }, - "passwordRepromptDisabledAutofillOnPageLoad": { - "message": "マスターパスワードの再入力を促すアイテムは、ページ読み込み時に自動入力できません。ページ読み込み時の自動入力をオフにしました。", - "description": "Toast message for describing that master password re-prompt cannot be autofilled on page load." - }, "autofillOnPageLoadSetToDefault": { "message": "ページ読み込み時の自動入力はデフォルトの設定を使うよう設定しました。", "description": "Toast message for informing the user that autofill on page load has been set to the default setting." }, - "turnOffMasterPasswordPromptToEditField": { - "message": "このフィールドを編集するには、マスターパスワードの再入力をオフにしてください", - "description": "Message appearing below the autofill on load message when master password reprompt is set for a vault item." - }, "toggleSideNavigation": { "message": "サイドナビゲーションの切り替え" }, @@ -4015,15 +4219,11 @@ "selectImportCollection": { "message": "コレクションを選択" }, - "importTargetHint": { - "message": "インポートしたファイルコンテンツを $DESTINATION$ に移動したい場合は、このオプションを選択してください。", - "description": "Located as a hint under the import target. Will be appended by either folder or collection, depending if the user is importing into an individual or an organizational vault.", - "placeholders": { - "destination": { - "content": "$1", - "example": "folder or collection" - } - } + "importTargetHintCollection": { + "message": "Select this option if you want the imported file contents moved to a collection" + }, + "importTargetHintFolder": { + "message": "Select this option if you want the imported file contents moved to a folder" }, "importUnassignedItemsError": { "message": "割り当てられていないアイテムがファイルに含まれています。" @@ -4080,9 +4280,6 @@ "passkeyNotCopiedAlert": { "message": "パスキーは複製されたアイテムにコピーされません。このアイテムを複製しますか?" }, - "passkeyFeatureIsNotImplementedForAccountsWithoutMasterPassword": { - "message": "開始サイトでの認証が必要です。この機能はマスターパスワードのないアカウントではまだ対応していません。" - }, "logInWithPasskeyQuestion": { "message": "パスキーでログインしますか?" }, @@ -4465,17 +4662,17 @@ } } }, - "copyFieldValue": { - "message": "$FIELD$ 「$VALUE$」 をコピー", + "copyFieldCipherName": { + "message": "Copy $FIELD$, $CIPHERNAME$", "description": "Title for a button that copies a field value to the clipboard.", "placeholders": { "field": { "content": "$1", "example": "Username" }, - "value": { + "ciphername": { "content": "$2", - "example": "Foo" + "example": "Login Item" } } }, @@ -4768,9 +4965,6 @@ } } }, - "enableAnimations": { - "message": "アニメーションを有効化" - }, "showAnimations": { "message": "アニメーションを表示" }, @@ -4983,15 +5177,9 @@ "itemLocation": { "message": "アイテムの場所" }, - "fileSend": { - "message": "ファイル Send" - }, "fileSends": { "message": "ファイル Send" }, - "textSend": { - "message": "テキスト Send" - }, "textSends": { "message": "テキスト Send" }, @@ -5001,6 +5189,18 @@ "showNumberOfAutofillSuggestions": { "message": "拡張機能アイコンにログイン自動入力の候補の数を表示する" }, + "accountAccessRequested": { + "message": "Account access requested" + }, + "confirmAccessAttempt": { + "message": "Confirm access attempt for $EMAIL$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + } + } + }, "showQuickCopyActions": { "message": "保管庫にクイックコピー操作を表示する" }, @@ -5040,9 +5240,6 @@ "vaultCustomTimeoutMinimum": { "message": "カスタムタイムアウトの最小値は1分です。" }, - "additionalContentAvailable": { - "message": "追加コンテンツが利用可能です" - }, "fileSavedToDevice": { "message": "ファイルをデバイスに保存しました。デバイスのダウンロードで管理できます。" }, @@ -5328,6 +5525,12 @@ "changeAtRiskPassword": { "message": "危険なパスワードの変更" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "This login is at-risk and missing a website. Add a website and change the password for stronger security." + }, + "missingWebsite": { + "message": "Missing website" + }, "settingsVaultOptions": { "message": "保管庫オプション" }, @@ -5376,6 +5579,18 @@ "hasItemsVaultNudgeTitle": { "message": "Welcome to your vault!" }, + "phishingPageTitle": { + "message": "Phishing website" + }, + "phishingPageCloseTab": { + "message": "Close tab" + }, + "phishingPageContinue": { + "message": "Continue" + }, + "phishingPageLearnWhy": { + "message": "Why are you seeing this?" + }, "hasItemsVaultNudgeBodyOne": { "message": "Autofill items for the current page" }, @@ -5451,11 +5666,33 @@ "message": "Easily create strong and unique passwords by clicking on the Generate password button to help you keep your logins secure.", "description": "Aria label for the body content of the generator nudge" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "noPermissionsViewPage": { "message": "You do not have permissions to view this page. Try logging in with a different account." }, "wasmNotSupported": { "message": "WebAssembly is not supported on your browser or is not enabled. WebAssembly is required to use the Bitwarden app.", "description": "'WebAssembly' is a technical term and should not be translated." + }, + "showMore": { + "message": "Show more" + }, + "showLess": { + "message": "Show less" + }, + "next": { + "message": "Next" + }, + "moreBreadcrumbs": { + "message": "More breadcrumbs", + "description": "This is used in the context of a breadcrumb navigation, indicating that there are more items in the breadcrumb trail that are not currently displayed." + }, + "confirmKeyConnectorDomain": { + "message": "Confirm Key Connector domain" } } diff --git a/apps/browser/src/_locales/ka/messages.json b/apps/browser/src/_locales/ka/messages.json index efbf97e9a92..245a822cc0d 100644 --- a/apps/browser/src/_locales/ka/messages.json +++ b/apps/browser/src/_locales/ka/messages.json @@ -162,7 +162,7 @@ "message": "Copy passport number" }, "copyLicenseNumber": { - "message": "Copy license number" + "message": "დააკოპირეთ ლიცენზიის ნომერი" }, "copyPrivateKey": { "message": "Copy private key" @@ -547,12 +547,50 @@ "searchVault": { "message": "Search vault" }, + "resetSearch": { + "message": "Reset search" + }, + "archiveNoun": { + "message": "Archive", + "description": "Noun" + }, + "archiveVerb": { + "message": "Archive", + "description": "Verb" + }, + "unarchive": { + "message": "Unarchive" + }, + "itemsInArchive": { + "message": "Items in archive" + }, + "noItemsInArchive": { + "message": "No items in archive" + }, + "noItemsInArchiveDesc": { + "message": "Archived items will appear here and will be excluded from general search results and autofill suggestions." + }, + "itemSentToArchive": { + "message": "Item sent to archive" + }, + "itemRemovedFromArchive": { + "message": "Item removed from archive" + }, + "archiveItem": { + "message": "Archive item" + }, + "archiveItemConfirmDesc": { + "message": "Archived items are excluded from general search results and autofill suggestions. Are you sure you want to archive this item?" + }, "edit": { "message": "ჩასწორება" }, "view": { "message": "ხედი" }, + "viewLogin": { + "message": "View login" + }, "noItemsInList": { "message": "There are no items to list." }, @@ -695,6 +733,15 @@ "invalidMasterPassword": { "message": "Invalid master password" }, + "invalidMasterPasswordConfirmEmailAndHost": { + "message": "Invalid master password. Confirm your email is correct and your account was created on $HOST$.", + "placeholders": { + "host": { + "content": "$1", + "example": "vault.bitwarden.com" + } + } + }, "vaultTimeout": { "message": "Vault timeout" }, @@ -1501,6 +1548,15 @@ "readSecurityKey": { "message": "Read security key" }, + "readingPasskeyLoading": { + "message": "Reading passkey..." + }, + "passkeyAuthenticationFailed": { + "message": "Passkey authentication failed" + }, + "useADifferentLogInMethod": { + "message": "Use a different log in method" + }, "awaitingSecurityKeyInteraction": { "message": "Awaiting security key interaction..." }, @@ -1519,9 +1575,6 @@ "selectTwoStepLoginMethod": { "message": "Select two-step login method" }, - "recoveryCodeDesc": { - "message": "Lost access to all of your two-factor providers? Use your recovery code to turn off all two-factor providers from your account." - }, "recoveryCodeTitle": { "message": "Recovery code" }, @@ -1680,9 +1733,6 @@ "defaultAutoFillOnPageLoadDesc": { "message": "You can turn off autofill on page load for individual login items from the item's Edit view." }, - "itemAutoFillOnPageLoad": { - "message": "Autofill on page load (if set up in Options)" - }, "autoFillOnPageLoadUseDefault": { "message": "Use default setting" }, @@ -1754,23 +1804,8 @@ "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?" }, - "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?" - }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." - }, - "faviconDescAlt": { - "message": "Show a recognizable image next to each login. Applies to all logged in accounts." - }, - "enableBadgeCounter": { - "message": "Show badge counter" - }, - "badgeCounterDesc": { - "message": "Indicate how many logins you have for the current web page." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "cardholderName": { "message": "Cardholder name" @@ -1829,6 +1864,9 @@ "securityCode": { "message": "Security code" }, + "cardNumber": { + "message": "card number" + }, "ex": { "message": "ex." }, @@ -1931,32 +1969,81 @@ "typeNote": { "message": "Note" }, - "newItemHeader": { - "message": "New $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderLogin": { + "message": "New Login", + "description": "Header for new login item type" }, - "editItemHeader": { - "message": "Edit $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderCard": { + "message": "New Card", + "description": "Header for new card item type" }, - "viewItemHeader": { - "message": "View $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderIdentity": { + "message": "New Identity", + "description": "Header for new identity item type" + }, + "newItemHeaderNote": { + "message": "New Note", + "description": "Header for new note item type" + }, + "newItemHeaderSshKey": { + "message": "New SSH key", + "description": "Header for new SSH key item type" + }, + "newItemHeaderTextSend": { + "message": "New Text Send", + "description": "Header for new text send" + }, + "newItemHeaderFileSend": { + "message": "New File Send", + "description": "Header for new file send" + }, + "editItemHeaderLogin": { + "message": "Edit Login", + "description": "Header for edit login item type" + }, + "editItemHeaderCard": { + "message": "Edit Card", + "description": "Header for edit card item type" + }, + "editItemHeaderIdentity": { + "message": "Edit Identity", + "description": "Header for edit identity item type" + }, + "editItemHeaderNote": { + "message": "Edit Note", + "description": "Header for edit note item type" + }, + "editItemHeaderSshKey": { + "message": "Edit SSH key", + "description": "Header for edit SSH key item type" + }, + "editItemHeaderTextSend": { + "message": "Edit Text Send", + "description": "Header for edit text send" + }, + "editItemHeaderFileSend": { + "message": "Edit File Send", + "description": "Header for edit file send" + }, + "viewItemHeaderLogin": { + "message": "View Login", + "description": "Header for view login item type" + }, + "viewItemHeaderCard": { + "message": "View Card", + "description": "Header for view card item type" + }, + "viewItemHeaderIdentity": { + "message": "View Identity", + "description": "Header for view identity item type" + }, + "viewItemHeaderNote": { + "message": "View Note", + "description": "Header for view note item type" + }, + "viewItemHeaderSshKey": { + "message": "View SSH key", + "description": "Header for view SSH key item type" }, "passwordHistory": { "message": "Password history" @@ -3129,6 +3216,24 @@ } } }, + "exportingOrganizationVaultFromPasswordManagerWithDataOwnershipDesc": { + "message": "Only the organization vault associated with $ORGANIZATION$ will be exported.", + "placeholders": { + "organization": { + "content": "$1", + "example": "My Org Name" + } + } + }, + "exportingOrganizationVaultFromAdminConsoleWithDataOwnershipDesc": { + "message": "Only the organization vault associated with $ORGANIZATION$ will be exported. My items collections will not be included.", + "placeholders": { + "organization": { + "content": "$1", + "example": "My Org Name" + } + } + }, "error": { "message": "შეცდომა" }, @@ -3460,6 +3565,28 @@ "logInRequestSent": { "message": "Request sent" }, + "loginRequestApprovedForEmailOnDevice": { + "message": "Login request approved for $EMAIL$ on $DEVICE$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + }, + "device": { + "content": "$2", + "example": "Web app - Chrome" + } + } + }, + "youDeniedLoginAttemptFromAnotherDevice": { + "message": "You denied a login attempt from another device. If this was you, try to log in with the device again." + }, + "device": { + "message": "Device" + }, + "loginStatus": { + "message": "Login status" + }, "masterPasswordChanged": { "message": "Master password saved" }, @@ -3496,9 +3623,6 @@ "autofillPageLoadPolicyActivated": { "message": "Your organization policies have turned on autofill on page load." }, - "howToAutofill": { - "message": "How to autofill" - }, "autofillSelectInfoWithCommand": { "message": "Select an item from this screen, use the shortcut $COMMAND$, or explore other options in settings.", "placeholders": { @@ -3556,6 +3680,94 @@ "rememberThisDeviceToMakeFutureLoginsSeamless": { "message": "Remember this device to make future logins seamless" }, + "manageDevices": { + "message": "Manage devices" + }, + "currentSession": { + "message": "Current session" + }, + "mobile": { + "message": "Mobile", + "description": "Mobile app" + }, + "extension": { + "message": "Extension", + "description": "Browser extension/addon" + }, + "desktop": { + "message": "Desktop", + "description": "Desktop app" + }, + "webVault": { + "message": "Web vault" + }, + "webApp": { + "message": "Web app" + }, + "cli": { + "message": "CLI" + }, + "sdk": { + "message": "SDK", + "description": "Software Development Kit" + }, + "requestPending": { + "message": "Request pending" + }, + "firstLogin": { + "message": "First login" + }, + "trusted": { + "message": "Trusted" + }, + "needsApproval": { + "message": "Needs approval" + }, + "devices": { + "message": "Devices" + }, + "accessAttemptBy": { + "message": "Access attempt by $EMAIL$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + } + } + }, + "confirmAccess": { + "message": "Confirm access" + }, + "denyAccess": { + "message": "Deny access" + }, + "time": { + "message": "Time" + }, + "deviceType": { + "message": "Device Type" + }, + "loginRequest": { + "message": "Login request" + }, + "thisRequestIsNoLongerValid": { + "message": "This request is no longer valid." + }, + "loginRequestHasAlreadyExpired": { + "message": "Login request has already expired." + }, + "justNow": { + "message": "Just now" + }, + "requestedXMinutesAgo": { + "message": "Requested $MINUTES$ minutes ago", + "placeholders": { + "minutes": { + "content": "$1", + "example": "5" + } + } + }, "deviceApprovalRequired": { "message": "Device approval required. Select an approval option below:" }, @@ -3795,18 +4007,10 @@ "aliasDomain": { "message": "Alias domain" }, - "passwordRepromptDisabledAutofillOnPageLoad": { - "message": "Items with master password re-prompt cannot be autofilled on page load. Autofill on page load turned off.", - "description": "Toast message for describing that master password re-prompt cannot be autofilled on page load." - }, "autofillOnPageLoadSetToDefault": { "message": "Autofill on page load set to use default setting.", "description": "Toast message for informing the user that autofill on page load has been set to the default setting." }, - "turnOffMasterPasswordPromptToEditField": { - "message": "Turn off master password re-prompt to edit this field", - "description": "Message appearing below the autofill on load message when master password reprompt is set for a vault item." - }, "toggleSideNavigation": { "message": "Toggle side navigation" }, @@ -4015,15 +4219,11 @@ "selectImportCollection": { "message": "აირჩიეთ კოლექცია" }, - "importTargetHint": { - "message": "Select this option if you want the imported file contents moved to a $DESTINATION$", - "description": "Located as a hint under the import target. Will be appended by either folder or collection, depending if the user is importing into an individual or an organizational vault.", - "placeholders": { - "destination": { - "content": "$1", - "example": "folder or collection" - } - } + "importTargetHintCollection": { + "message": "Select this option if you want the imported file contents moved to a collection" + }, + "importTargetHintFolder": { + "message": "Select this option if you want the imported file contents moved to a folder" }, "importUnassignedItemsError": { "message": "File contains unassigned items." @@ -4080,9 +4280,6 @@ "passkeyNotCopiedAlert": { "message": "The passkey will not be copied to the cloned item. Do you want to continue cloning this item?" }, - "passkeyFeatureIsNotImplementedForAccountsWithoutMasterPassword": { - "message": "Verification required by the initiating site. This feature is not yet implemented for accounts without master password." - }, "logInWithPasskeyQuestion": { "message": "Log in with passkey?" }, @@ -4465,17 +4662,17 @@ } } }, - "copyFieldValue": { - "message": "Copy $FIELD$, $VALUE$", + "copyFieldCipherName": { + "message": "Copy $FIELD$, $CIPHERNAME$", "description": "Title for a button that copies a field value to the clipboard.", "placeholders": { "field": { "content": "$1", "example": "Username" }, - "value": { + "ciphername": { "content": "$2", - "example": "Foo" + "example": "Login Item" } } }, @@ -4768,9 +4965,6 @@ } } }, - "enableAnimations": { - "message": "ანიმაციების ჩართვა" - }, "showAnimations": { "message": "Show animations" }, @@ -4983,15 +5177,9 @@ "itemLocation": { "message": "Item Location" }, - "fileSend": { - "message": "File Send" - }, "fileSends": { "message": "File Sends" }, - "textSend": { - "message": "Text Send" - }, "textSends": { "message": "Text Sends" }, @@ -5001,6 +5189,18 @@ "showNumberOfAutofillSuggestions": { "message": "Show number of login autofill suggestions on extension icon" }, + "accountAccessRequested": { + "message": "Account access requested" + }, + "confirmAccessAttempt": { + "message": "Confirm access attempt for $EMAIL$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + } + } + }, "showQuickCopyActions": { "message": "Show quick copy actions on Vault" }, @@ -5040,9 +5240,6 @@ "vaultCustomTimeoutMinimum": { "message": "Minimum custom timeout is 1 minute." }, - "additionalContentAvailable": { - "message": "Additional content is available" - }, "fileSavedToDevice": { "message": "File saved to device. Manage from your device downloads." }, @@ -5328,6 +5525,12 @@ "changeAtRiskPassword": { "message": "Change at-risk password" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "This login is at-risk and missing a website. Add a website and change the password for stronger security." + }, + "missingWebsite": { + "message": "Missing website" + }, "settingsVaultOptions": { "message": "Vault options" }, @@ -5376,6 +5579,18 @@ "hasItemsVaultNudgeTitle": { "message": "Welcome to your vault!" }, + "phishingPageTitle": { + "message": "Phishing website" + }, + "phishingPageCloseTab": { + "message": "Close tab" + }, + "phishingPageContinue": { + "message": "Continue" + }, + "phishingPageLearnWhy": { + "message": "Why are you seeing this?" + }, "hasItemsVaultNudgeBodyOne": { "message": "Autofill items for the current page" }, @@ -5451,11 +5666,33 @@ "message": "Easily create strong and unique passwords by clicking on the Generate password button to help you keep your logins secure.", "description": "Aria label for the body content of the generator nudge" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "noPermissionsViewPage": { "message": "You do not have permissions to view this page. Try logging in with a different account." }, "wasmNotSupported": { "message": "WebAssembly is not supported on your browser or is not enabled. WebAssembly is required to use the Bitwarden app.", "description": "'WebAssembly' is a technical term and should not be translated." + }, + "showMore": { + "message": "Show more" + }, + "showLess": { + "message": "Show less" + }, + "next": { + "message": "Next" + }, + "moreBreadcrumbs": { + "message": "More breadcrumbs", + "description": "This is used in the context of a breadcrumb navigation, indicating that there are more items in the breadcrumb trail that are not currently displayed." + }, + "confirmKeyConnectorDomain": { + "message": "Confirm Key Connector domain" } } diff --git a/apps/browser/src/_locales/km/messages.json b/apps/browser/src/_locales/km/messages.json index ecc7da63e79..6180d490f09 100644 --- a/apps/browser/src/_locales/km/messages.json +++ b/apps/browser/src/_locales/km/messages.json @@ -547,12 +547,50 @@ "searchVault": { "message": "Search vault" }, + "resetSearch": { + "message": "Reset search" + }, + "archiveNoun": { + "message": "Archive", + "description": "Noun" + }, + "archiveVerb": { + "message": "Archive", + "description": "Verb" + }, + "unarchive": { + "message": "Unarchive" + }, + "itemsInArchive": { + "message": "Items in archive" + }, + "noItemsInArchive": { + "message": "No items in archive" + }, + "noItemsInArchiveDesc": { + "message": "Archived items will appear here and will be excluded from general search results and autofill suggestions." + }, + "itemSentToArchive": { + "message": "Item sent to archive" + }, + "itemRemovedFromArchive": { + "message": "Item removed from archive" + }, + "archiveItem": { + "message": "Archive item" + }, + "archiveItemConfirmDesc": { + "message": "Archived items are excluded from general search results and autofill suggestions. Are you sure you want to archive this item?" + }, "edit": { "message": "Edit" }, "view": { "message": "View" }, + "viewLogin": { + "message": "View login" + }, "noItemsInList": { "message": "There are no items to list." }, @@ -695,6 +733,15 @@ "invalidMasterPassword": { "message": "Invalid master password" }, + "invalidMasterPasswordConfirmEmailAndHost": { + "message": "Invalid master password. Confirm your email is correct and your account was created on $HOST$.", + "placeholders": { + "host": { + "content": "$1", + "example": "vault.bitwarden.com" + } + } + }, "vaultTimeout": { "message": "Vault timeout" }, @@ -1501,6 +1548,15 @@ "readSecurityKey": { "message": "Read security key" }, + "readingPasskeyLoading": { + "message": "Reading passkey..." + }, + "passkeyAuthenticationFailed": { + "message": "Passkey authentication failed" + }, + "useADifferentLogInMethod": { + "message": "Use a different log in method" + }, "awaitingSecurityKeyInteraction": { "message": "Awaiting security key interaction..." }, @@ -1519,9 +1575,6 @@ "selectTwoStepLoginMethod": { "message": "Select two-step login method" }, - "recoveryCodeDesc": { - "message": "Lost access to all of your two-factor providers? Use your recovery code to turn off all two-factor providers from your account." - }, "recoveryCodeTitle": { "message": "Recovery code" }, @@ -1680,9 +1733,6 @@ "defaultAutoFillOnPageLoadDesc": { "message": "You can turn off autofill on page load for individual login items from the item's Edit view." }, - "itemAutoFillOnPageLoad": { - "message": "Autofill on page load (if set up in Options)" - }, "autoFillOnPageLoadUseDefault": { "message": "Use default setting" }, @@ -1754,23 +1804,8 @@ "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?" }, - "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?" - }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." - }, - "faviconDescAlt": { - "message": "Show a recognizable image next to each login. Applies to all logged in accounts." - }, - "enableBadgeCounter": { - "message": "Show badge counter" - }, - "badgeCounterDesc": { - "message": "Indicate how many logins you have for the current web page." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "cardholderName": { "message": "Cardholder name" @@ -1829,6 +1864,9 @@ "securityCode": { "message": "Security code" }, + "cardNumber": { + "message": "card number" + }, "ex": { "message": "ex." }, @@ -1931,32 +1969,81 @@ "typeNote": { "message": "Note" }, - "newItemHeader": { - "message": "New $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderLogin": { + "message": "New Login", + "description": "Header for new login item type" }, - "editItemHeader": { - "message": "Edit $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderCard": { + "message": "New Card", + "description": "Header for new card item type" }, - "viewItemHeader": { - "message": "View $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderIdentity": { + "message": "New Identity", + "description": "Header for new identity item type" + }, + "newItemHeaderNote": { + "message": "New Note", + "description": "Header for new note item type" + }, + "newItemHeaderSshKey": { + "message": "New SSH key", + "description": "Header for new SSH key item type" + }, + "newItemHeaderTextSend": { + "message": "New Text Send", + "description": "Header for new text send" + }, + "newItemHeaderFileSend": { + "message": "New File Send", + "description": "Header for new file send" + }, + "editItemHeaderLogin": { + "message": "Edit Login", + "description": "Header for edit login item type" + }, + "editItemHeaderCard": { + "message": "Edit Card", + "description": "Header for edit card item type" + }, + "editItemHeaderIdentity": { + "message": "Edit Identity", + "description": "Header for edit identity item type" + }, + "editItemHeaderNote": { + "message": "Edit Note", + "description": "Header for edit note item type" + }, + "editItemHeaderSshKey": { + "message": "Edit SSH key", + "description": "Header for edit SSH key item type" + }, + "editItemHeaderTextSend": { + "message": "Edit Text Send", + "description": "Header for edit text send" + }, + "editItemHeaderFileSend": { + "message": "Edit File Send", + "description": "Header for edit file send" + }, + "viewItemHeaderLogin": { + "message": "View Login", + "description": "Header for view login item type" + }, + "viewItemHeaderCard": { + "message": "View Card", + "description": "Header for view card item type" + }, + "viewItemHeaderIdentity": { + "message": "View Identity", + "description": "Header for view identity item type" + }, + "viewItemHeaderNote": { + "message": "View Note", + "description": "Header for view note item type" + }, + "viewItemHeaderSshKey": { + "message": "View SSH key", + "description": "Header for view SSH key item type" }, "passwordHistory": { "message": "Password history" @@ -3129,6 +3216,24 @@ } } }, + "exportingOrganizationVaultFromPasswordManagerWithDataOwnershipDesc": { + "message": "Only the organization vault associated with $ORGANIZATION$ will be exported.", + "placeholders": { + "organization": { + "content": "$1", + "example": "My Org Name" + } + } + }, + "exportingOrganizationVaultFromAdminConsoleWithDataOwnershipDesc": { + "message": "Only the organization vault associated with $ORGANIZATION$ will be exported. My items collections will not be included.", + "placeholders": { + "organization": { + "content": "$1", + "example": "My Org Name" + } + } + }, "error": { "message": "Error" }, @@ -3460,6 +3565,28 @@ "logInRequestSent": { "message": "Request sent" }, + "loginRequestApprovedForEmailOnDevice": { + "message": "Login request approved for $EMAIL$ on $DEVICE$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + }, + "device": { + "content": "$2", + "example": "Web app - Chrome" + } + } + }, + "youDeniedLoginAttemptFromAnotherDevice": { + "message": "You denied a login attempt from another device. If this was you, try to log in with the device again." + }, + "device": { + "message": "Device" + }, + "loginStatus": { + "message": "Login status" + }, "masterPasswordChanged": { "message": "Master password saved" }, @@ -3496,9 +3623,6 @@ "autofillPageLoadPolicyActivated": { "message": "Your organization policies have turned on autofill on page load." }, - "howToAutofill": { - "message": "How to autofill" - }, "autofillSelectInfoWithCommand": { "message": "Select an item from this screen, use the shortcut $COMMAND$, or explore other options in settings.", "placeholders": { @@ -3556,6 +3680,94 @@ "rememberThisDeviceToMakeFutureLoginsSeamless": { "message": "Remember this device to make future logins seamless" }, + "manageDevices": { + "message": "Manage devices" + }, + "currentSession": { + "message": "Current session" + }, + "mobile": { + "message": "Mobile", + "description": "Mobile app" + }, + "extension": { + "message": "Extension", + "description": "Browser extension/addon" + }, + "desktop": { + "message": "Desktop", + "description": "Desktop app" + }, + "webVault": { + "message": "Web vault" + }, + "webApp": { + "message": "Web app" + }, + "cli": { + "message": "CLI" + }, + "sdk": { + "message": "SDK", + "description": "Software Development Kit" + }, + "requestPending": { + "message": "Request pending" + }, + "firstLogin": { + "message": "First login" + }, + "trusted": { + "message": "Trusted" + }, + "needsApproval": { + "message": "Needs approval" + }, + "devices": { + "message": "Devices" + }, + "accessAttemptBy": { + "message": "Access attempt by $EMAIL$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + } + } + }, + "confirmAccess": { + "message": "Confirm access" + }, + "denyAccess": { + "message": "Deny access" + }, + "time": { + "message": "Time" + }, + "deviceType": { + "message": "Device Type" + }, + "loginRequest": { + "message": "Login request" + }, + "thisRequestIsNoLongerValid": { + "message": "This request is no longer valid." + }, + "loginRequestHasAlreadyExpired": { + "message": "Login request has already expired." + }, + "justNow": { + "message": "Just now" + }, + "requestedXMinutesAgo": { + "message": "Requested $MINUTES$ minutes ago", + "placeholders": { + "minutes": { + "content": "$1", + "example": "5" + } + } + }, "deviceApprovalRequired": { "message": "Device approval required. Select an approval option below:" }, @@ -3795,18 +4007,10 @@ "aliasDomain": { "message": "Alias domain" }, - "passwordRepromptDisabledAutofillOnPageLoad": { - "message": "Items with master password re-prompt cannot be autofilled on page load. Autofill on page load turned off.", - "description": "Toast message for describing that master password re-prompt cannot be autofilled on page load." - }, "autofillOnPageLoadSetToDefault": { "message": "Autofill on page load set to use default setting.", "description": "Toast message for informing the user that autofill on page load has been set to the default setting." }, - "turnOffMasterPasswordPromptToEditField": { - "message": "Turn off master password re-prompt to edit this field", - "description": "Message appearing below the autofill on load message when master password reprompt is set for a vault item." - }, "toggleSideNavigation": { "message": "Toggle side navigation" }, @@ -4015,15 +4219,11 @@ "selectImportCollection": { "message": "Select a collection" }, - "importTargetHint": { - "message": "Select this option if you want the imported file contents moved to a $DESTINATION$", - "description": "Located as a hint under the import target. Will be appended by either folder or collection, depending if the user is importing into an individual or an organizational vault.", - "placeholders": { - "destination": { - "content": "$1", - "example": "folder or collection" - } - } + "importTargetHintCollection": { + "message": "Select this option if you want the imported file contents moved to a collection" + }, + "importTargetHintFolder": { + "message": "Select this option if you want the imported file contents moved to a folder" }, "importUnassignedItemsError": { "message": "File contains unassigned items." @@ -4080,9 +4280,6 @@ "passkeyNotCopiedAlert": { "message": "The passkey will not be copied to the cloned item. Do you want to continue cloning this item?" }, - "passkeyFeatureIsNotImplementedForAccountsWithoutMasterPassword": { - "message": "Verification required by the initiating site. This feature is not yet implemented for accounts without master password." - }, "logInWithPasskeyQuestion": { "message": "Log in with passkey?" }, @@ -4465,17 +4662,17 @@ } } }, - "copyFieldValue": { - "message": "Copy $FIELD$, $VALUE$", + "copyFieldCipherName": { + "message": "Copy $FIELD$, $CIPHERNAME$", "description": "Title for a button that copies a field value to the clipboard.", "placeholders": { "field": { "content": "$1", "example": "Username" }, - "value": { + "ciphername": { "content": "$2", - "example": "Foo" + "example": "Login Item" } } }, @@ -4768,9 +4965,6 @@ } } }, - "enableAnimations": { - "message": "Enable animations" - }, "showAnimations": { "message": "Show animations" }, @@ -4983,15 +5177,9 @@ "itemLocation": { "message": "Item Location" }, - "fileSend": { - "message": "File Send" - }, "fileSends": { "message": "File Sends" }, - "textSend": { - "message": "Text Send" - }, "textSends": { "message": "Text Sends" }, @@ -5001,6 +5189,18 @@ "showNumberOfAutofillSuggestions": { "message": "Show number of login autofill suggestions on extension icon" }, + "accountAccessRequested": { + "message": "Account access requested" + }, + "confirmAccessAttempt": { + "message": "Confirm access attempt for $EMAIL$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + } + } + }, "showQuickCopyActions": { "message": "Show quick copy actions on Vault" }, @@ -5040,9 +5240,6 @@ "vaultCustomTimeoutMinimum": { "message": "Minimum custom timeout is 1 minute." }, - "additionalContentAvailable": { - "message": "Additional content is available" - }, "fileSavedToDevice": { "message": "File saved to device. Manage from your device downloads." }, @@ -5328,6 +5525,12 @@ "changeAtRiskPassword": { "message": "Change at-risk password" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "This login is at-risk and missing a website. Add a website and change the password for stronger security." + }, + "missingWebsite": { + "message": "Missing website" + }, "settingsVaultOptions": { "message": "Vault options" }, @@ -5376,6 +5579,18 @@ "hasItemsVaultNudgeTitle": { "message": "Welcome to your vault!" }, + "phishingPageTitle": { + "message": "Phishing website" + }, + "phishingPageCloseTab": { + "message": "Close tab" + }, + "phishingPageContinue": { + "message": "Continue" + }, + "phishingPageLearnWhy": { + "message": "Why are you seeing this?" + }, "hasItemsVaultNudgeBodyOne": { "message": "Autofill items for the current page" }, @@ -5451,11 +5666,33 @@ "message": "Easily create strong and unique passwords by clicking on the Generate password button to help you keep your logins secure.", "description": "Aria label for the body content of the generator nudge" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "noPermissionsViewPage": { "message": "You do not have permissions to view this page. Try logging in with a different account." }, "wasmNotSupported": { "message": "WebAssembly is not supported on your browser or is not enabled. WebAssembly is required to use the Bitwarden app.", "description": "'WebAssembly' is a technical term and should not be translated." + }, + "showMore": { + "message": "Show more" + }, + "showLess": { + "message": "Show less" + }, + "next": { + "message": "Next" + }, + "moreBreadcrumbs": { + "message": "More breadcrumbs", + "description": "This is used in the context of a breadcrumb navigation, indicating that there are more items in the breadcrumb trail that are not currently displayed." + }, + "confirmKeyConnectorDomain": { + "message": "Confirm Key Connector domain" } } diff --git a/apps/browser/src/_locales/kn/messages.json b/apps/browser/src/_locales/kn/messages.json index d4e4498a322..008a0deb1b3 100644 --- a/apps/browser/src/_locales/kn/messages.json +++ b/apps/browser/src/_locales/kn/messages.json @@ -547,12 +547,50 @@ "searchVault": { "message": "ವಾಲ್ಟ್ ಹುಡುಕಿ" }, + "resetSearch": { + "message": "Reset search" + }, + "archiveNoun": { + "message": "Archive", + "description": "Noun" + }, + "archiveVerb": { + "message": "Archive", + "description": "Verb" + }, + "unarchive": { + "message": "Unarchive" + }, + "itemsInArchive": { + "message": "Items in archive" + }, + "noItemsInArchive": { + "message": "No items in archive" + }, + "noItemsInArchiveDesc": { + "message": "Archived items will appear here and will be excluded from general search results and autofill suggestions." + }, + "itemSentToArchive": { + "message": "Item sent to archive" + }, + "itemRemovedFromArchive": { + "message": "Item removed from archive" + }, + "archiveItem": { + "message": "Archive item" + }, + "archiveItemConfirmDesc": { + "message": "Archived items are excluded from general search results and autofill suggestions. Are you sure you want to archive this item?" + }, "edit": { "message": "ಎಡಿಟ್" }, "view": { "message": "ವೀಕ್ಷಣೆ" }, + "viewLogin": { + "message": "View login" + }, "noItemsInList": { "message": "ಪಟ್ಟಿ ಮಾಡಲು ಯಾವುದೇ ಐಟಂಗಳಿಲ್ಲ." }, @@ -695,6 +733,15 @@ "invalidMasterPassword": { "message": "ಅಮಾನ್ಯ ಮಾಸ್ಟರ್ ಪಾಸ್‌ವರ್ಡ್" }, + "invalidMasterPasswordConfirmEmailAndHost": { + "message": "Invalid master password. Confirm your email is correct and your account was created on $HOST$.", + "placeholders": { + "host": { + "content": "$1", + "example": "vault.bitwarden.com" + } + } + }, "vaultTimeout": { "message": "ವಾಲ್ಟ್ ಕಾಲಾವಧಿ" }, @@ -1501,6 +1548,15 @@ "readSecurityKey": { "message": "Read security key" }, + "readingPasskeyLoading": { + "message": "Reading passkey..." + }, + "passkeyAuthenticationFailed": { + "message": "Passkey authentication failed" + }, + "useADifferentLogInMethod": { + "message": "Use a different log in method" + }, "awaitingSecurityKeyInteraction": { "message": "Awaiting security key interaction..." }, @@ -1519,9 +1575,6 @@ "selectTwoStepLoginMethod": { "message": "Select two-step login method" }, - "recoveryCodeDesc": { - "message": "ನಿಮ್ಮ ಎಲ್ಲಾ ಎರಡು ಅಂಶ ಪೂರೈಕೆದಾರರಿಗೆ ಪ್ರವೇಶವನ್ನು ಕಳೆದುಕೊಂಡಿದ್ದೀರಾ? ನಿಮ್ಮ ಖಾತೆಯಿಂದ ಎಲ್ಲಾ ಎರಡು ಅಂಶ ಪೂರೈಕೆದಾರರನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲು ನಿಮ್ಮ ಮರುಪಡೆಯುವಿಕೆ ಕೋಡ್ ಬಳಸಿ." - }, "recoveryCodeTitle": { "message": "ಮರುಪಡೆಯುವಿಕೆ ಕೋಡ್" }, @@ -1680,9 +1733,6 @@ "defaultAutoFillOnPageLoadDesc": { "message": "ಪುಟ ಲೋಡ್‌ನಲ್ಲಿ ಸ್ವಯಂ-ಭರ್ತಿ ಸಕ್ರಿಯಗೊಳಿಸಿದ ನಂತರ, ನೀವು ವೈಯಕ್ತಿಕ ಲಾಗಿನ್ ಐಟಂಗಳಿಗಾಗಿ ವೈಶಿಷ್ಟ್ಯವನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಬಹುದು ಅಥವಾ ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಬಹುದು. ಪ್ರತ್ಯೇಕವಾಗಿ ಕಾನ್ಫಿಗರ್ ಮಾಡದ ಲಾಗಿನ್ ಐಟಂಗಳ ಡೀಫಾಲ್ಟ್ ಸೆಟ್ಟಿಂಗ್ ಇದು." }, - "itemAutoFillOnPageLoad": { - "message": "ಪುಟ ಲೋಡ್‌ನಲ್ಲಿ ಸ್ವಯಂ ಭರ್ತಿ (ಆಯ್ಕೆಗಳಲ್ಲಿ ಸಕ್ರಿಯಗೊಳಿಸಿದ್ದರೆ)" - }, "autoFillOnPageLoadUseDefault": { "message": "ಡೀಫಾಲ್ಟ್ ಸೆಟ್ಟಿಂಗ್ ಬಳಸಿ" }, @@ -1754,23 +1804,8 @@ "popup2faCloseMessage": { "message": "ನಿಮ್ಮ ಪರಿಶೀಲನಾ ಕೋಡ್‌ಗಾಗಿ ನಿಮ್ಮ ಇಮೇಲ್ ಪರಿಶೀಲಿಸಲು ಪಾಪ್ಅಪ್ ವಿಂಡೋದ ಹೊರಗೆ ಕ್ಲಿಕ್ ಮಾಡುವುದರಿಂದ ಈ ಪಾಪ್ಅಪ್ ಮುಚ್ಚಲ್ಪಡುತ್ತದೆ. ಈ ಪಾಪ್ಅಪ್ ಅನ್ನು ಮುಚ್ಚದಿರುವಂತೆ ಹೊಸ ವಿಂಡೋದಲ್ಲಿ ತೆರೆಯಲು ನೀವು ಬಯಸುವಿರಾ?" }, - "popupU2fCloseMessage": { - "message": "ಈ ಬ್ರೌಸರ್ ಈ ಪಾಪ್ಅಪ್ ವಿಂಡೋದಲ್ಲಿ ಯು 2 ಎಫ್ ವಿನಂತಿಗಳನ್ನು ಪ್ರಕ್ರಿಯೆಗೊಳಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ. ಈ ಪಾಪ್ಅಪ್ ಅನ್ನು ಹೊಸ ವಿಂಡೋದಲ್ಲಿ ತೆರೆಯಲು ನೀವು ಬಯಸುವಿರಾ, ಇದರಿಂದ ನೀವು ಯು 2 ಎಫ್ ಬಳಸಿ ಲಾಗ್ ಇನ್ ಆಗಬಹುದು." - }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." - }, - "faviconDescAlt": { - "message": "Show a recognizable image next to each login. Applies to all logged in accounts." - }, - "enableBadgeCounter": { - "message": "Show badge counter" - }, - "badgeCounterDesc": { - "message": "Indicate how many logins you have for the current web page." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "cardholderName": { "message": "ಕಾರ್ಡುದಾರನ ಹೆಸರು" @@ -1829,6 +1864,9 @@ "securityCode": { "message": "ಭದ್ರತಾ ಕೋಡ್ " }, + "cardNumber": { + "message": "card number" + }, "ex": { "message": "ಉದಾಹರಣೆ" }, @@ -1931,32 +1969,81 @@ "typeNote": { "message": "Note" }, - "newItemHeader": { - "message": "New $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderLogin": { + "message": "New Login", + "description": "Header for new login item type" }, - "editItemHeader": { - "message": "Edit $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderCard": { + "message": "New Card", + "description": "Header for new card item type" }, - "viewItemHeader": { - "message": "View $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderIdentity": { + "message": "New Identity", + "description": "Header for new identity item type" + }, + "newItemHeaderNote": { + "message": "New Note", + "description": "Header for new note item type" + }, + "newItemHeaderSshKey": { + "message": "New SSH key", + "description": "Header for new SSH key item type" + }, + "newItemHeaderTextSend": { + "message": "New Text Send", + "description": "Header for new text send" + }, + "newItemHeaderFileSend": { + "message": "New File Send", + "description": "Header for new file send" + }, + "editItemHeaderLogin": { + "message": "Edit Login", + "description": "Header for edit login item type" + }, + "editItemHeaderCard": { + "message": "Edit Card", + "description": "Header for edit card item type" + }, + "editItemHeaderIdentity": { + "message": "Edit Identity", + "description": "Header for edit identity item type" + }, + "editItemHeaderNote": { + "message": "Edit Note", + "description": "Header for edit note item type" + }, + "editItemHeaderSshKey": { + "message": "Edit SSH key", + "description": "Header for edit SSH key item type" + }, + "editItemHeaderTextSend": { + "message": "Edit Text Send", + "description": "Header for edit text send" + }, + "editItemHeaderFileSend": { + "message": "Edit File Send", + "description": "Header for edit file send" + }, + "viewItemHeaderLogin": { + "message": "View Login", + "description": "Header for view login item type" + }, + "viewItemHeaderCard": { + "message": "View Card", + "description": "Header for view card item type" + }, + "viewItemHeaderIdentity": { + "message": "View Identity", + "description": "Header for view identity item type" + }, + "viewItemHeaderNote": { + "message": "View Note", + "description": "Header for view note item type" + }, + "viewItemHeaderSshKey": { + "message": "View SSH key", + "description": "Header for view SSH key item type" }, "passwordHistory": { "message": "ಪಾಸ್ವರ್ಡ್ ಇತಿಹಾಸ" @@ -3129,6 +3216,24 @@ } } }, + "exportingOrganizationVaultFromPasswordManagerWithDataOwnershipDesc": { + "message": "Only the organization vault associated with $ORGANIZATION$ will be exported.", + "placeholders": { + "organization": { + "content": "$1", + "example": "My Org Name" + } + } + }, + "exportingOrganizationVaultFromAdminConsoleWithDataOwnershipDesc": { + "message": "Only the organization vault associated with $ORGANIZATION$ will be exported. My items collections will not be included.", + "placeholders": { + "organization": { + "content": "$1", + "example": "My Org Name" + } + } + }, "error": { "message": "Error" }, @@ -3460,6 +3565,28 @@ "logInRequestSent": { "message": "Request sent" }, + "loginRequestApprovedForEmailOnDevice": { + "message": "Login request approved for $EMAIL$ on $DEVICE$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + }, + "device": { + "content": "$2", + "example": "Web app - Chrome" + } + } + }, + "youDeniedLoginAttemptFromAnotherDevice": { + "message": "You denied a login attempt from another device. If this was you, try to log in with the device again." + }, + "device": { + "message": "Device" + }, + "loginStatus": { + "message": "Login status" + }, "masterPasswordChanged": { "message": "Master password saved" }, @@ -3496,9 +3623,6 @@ "autofillPageLoadPolicyActivated": { "message": "Your organization policies have turned on autofill on page load." }, - "howToAutofill": { - "message": "How to autofill" - }, "autofillSelectInfoWithCommand": { "message": "Select an item from this screen, use the shortcut $COMMAND$, or explore other options in settings.", "placeholders": { @@ -3556,6 +3680,94 @@ "rememberThisDeviceToMakeFutureLoginsSeamless": { "message": "Remember this device to make future logins seamless" }, + "manageDevices": { + "message": "Manage devices" + }, + "currentSession": { + "message": "Current session" + }, + "mobile": { + "message": "Mobile", + "description": "Mobile app" + }, + "extension": { + "message": "Extension", + "description": "Browser extension/addon" + }, + "desktop": { + "message": "Desktop", + "description": "Desktop app" + }, + "webVault": { + "message": "Web vault" + }, + "webApp": { + "message": "Web app" + }, + "cli": { + "message": "CLI" + }, + "sdk": { + "message": "SDK", + "description": "Software Development Kit" + }, + "requestPending": { + "message": "Request pending" + }, + "firstLogin": { + "message": "First login" + }, + "trusted": { + "message": "Trusted" + }, + "needsApproval": { + "message": "Needs approval" + }, + "devices": { + "message": "Devices" + }, + "accessAttemptBy": { + "message": "Access attempt by $EMAIL$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + } + } + }, + "confirmAccess": { + "message": "Confirm access" + }, + "denyAccess": { + "message": "Deny access" + }, + "time": { + "message": "Time" + }, + "deviceType": { + "message": "Device Type" + }, + "loginRequest": { + "message": "Login request" + }, + "thisRequestIsNoLongerValid": { + "message": "This request is no longer valid." + }, + "loginRequestHasAlreadyExpired": { + "message": "Login request has already expired." + }, + "justNow": { + "message": "Just now" + }, + "requestedXMinutesAgo": { + "message": "Requested $MINUTES$ minutes ago", + "placeholders": { + "minutes": { + "content": "$1", + "example": "5" + } + } + }, "deviceApprovalRequired": { "message": "Device approval required. Select an approval option below:" }, @@ -3795,18 +4007,10 @@ "aliasDomain": { "message": "Alias domain" }, - "passwordRepromptDisabledAutofillOnPageLoad": { - "message": "Items with master password re-prompt cannot be autofilled on page load. Autofill on page load turned off.", - "description": "Toast message for describing that master password re-prompt cannot be autofilled on page load." - }, "autofillOnPageLoadSetToDefault": { "message": "Autofill on page load set to use default setting.", "description": "Toast message for informing the user that autofill on page load has been set to the default setting." }, - "turnOffMasterPasswordPromptToEditField": { - "message": "Turn off master password re-prompt to edit this field", - "description": "Message appearing below the autofill on load message when master password reprompt is set for a vault item." - }, "toggleSideNavigation": { "message": "Toggle side navigation" }, @@ -4015,15 +4219,11 @@ "selectImportCollection": { "message": "Select a collection" }, - "importTargetHint": { - "message": "Select this option if you want the imported file contents moved to a $DESTINATION$", - "description": "Located as a hint under the import target. Will be appended by either folder or collection, depending if the user is importing into an individual or an organizational vault.", - "placeholders": { - "destination": { - "content": "$1", - "example": "folder or collection" - } - } + "importTargetHintCollection": { + "message": "Select this option if you want the imported file contents moved to a collection" + }, + "importTargetHintFolder": { + "message": "Select this option if you want the imported file contents moved to a folder" }, "importUnassignedItemsError": { "message": "File contains unassigned items." @@ -4080,9 +4280,6 @@ "passkeyNotCopiedAlert": { "message": "The passkey will not be copied to the cloned item. Do you want to continue cloning this item?" }, - "passkeyFeatureIsNotImplementedForAccountsWithoutMasterPassword": { - "message": "Verification required by the initiating site. This feature is not yet implemented for accounts without master password." - }, "logInWithPasskeyQuestion": { "message": "Log in with passkey?" }, @@ -4465,17 +4662,17 @@ } } }, - "copyFieldValue": { - "message": "Copy $FIELD$, $VALUE$", + "copyFieldCipherName": { + "message": "Copy $FIELD$, $CIPHERNAME$", "description": "Title for a button that copies a field value to the clipboard.", "placeholders": { "field": { "content": "$1", "example": "Username" }, - "value": { + "ciphername": { "content": "$2", - "example": "Foo" + "example": "Login Item" } } }, @@ -4768,9 +4965,6 @@ } } }, - "enableAnimations": { - "message": "Enable animations" - }, "showAnimations": { "message": "Show animations" }, @@ -4983,15 +5177,9 @@ "itemLocation": { "message": "Item Location" }, - "fileSend": { - "message": "File Send" - }, "fileSends": { "message": "File Sends" }, - "textSend": { - "message": "Text Send" - }, "textSends": { "message": "Text Sends" }, @@ -5001,6 +5189,18 @@ "showNumberOfAutofillSuggestions": { "message": "Show number of login autofill suggestions on extension icon" }, + "accountAccessRequested": { + "message": "Account access requested" + }, + "confirmAccessAttempt": { + "message": "Confirm access attempt for $EMAIL$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + } + } + }, "showQuickCopyActions": { "message": "Show quick copy actions on Vault" }, @@ -5040,9 +5240,6 @@ "vaultCustomTimeoutMinimum": { "message": "Minimum custom timeout is 1 minute." }, - "additionalContentAvailable": { - "message": "Additional content is available" - }, "fileSavedToDevice": { "message": "File saved to device. Manage from your device downloads." }, @@ -5328,6 +5525,12 @@ "changeAtRiskPassword": { "message": "Change at-risk password" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "This login is at-risk and missing a website. Add a website and change the password for stronger security." + }, + "missingWebsite": { + "message": "Missing website" + }, "settingsVaultOptions": { "message": "Vault options" }, @@ -5376,6 +5579,18 @@ "hasItemsVaultNudgeTitle": { "message": "Welcome to your vault!" }, + "phishingPageTitle": { + "message": "Phishing website" + }, + "phishingPageCloseTab": { + "message": "Close tab" + }, + "phishingPageContinue": { + "message": "Continue" + }, + "phishingPageLearnWhy": { + "message": "Why are you seeing this?" + }, "hasItemsVaultNudgeBodyOne": { "message": "Autofill items for the current page" }, @@ -5451,11 +5666,33 @@ "message": "Easily create strong and unique passwords by clicking on the Generate password button to help you keep your logins secure.", "description": "Aria label for the body content of the generator nudge" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "noPermissionsViewPage": { "message": "You do not have permissions to view this page. Try logging in with a different account." }, "wasmNotSupported": { "message": "WebAssembly is not supported on your browser or is not enabled. WebAssembly is required to use the Bitwarden app.", "description": "'WebAssembly' is a technical term and should not be translated." + }, + "showMore": { + "message": "Show more" + }, + "showLess": { + "message": "Show less" + }, + "next": { + "message": "Next" + }, + "moreBreadcrumbs": { + "message": "More breadcrumbs", + "description": "This is used in the context of a breadcrumb navigation, indicating that there are more items in the breadcrumb trail that are not currently displayed." + }, + "confirmKeyConnectorDomain": { + "message": "Confirm Key Connector domain" } } diff --git a/apps/browser/src/_locales/ko/messages.json b/apps/browser/src/_locales/ko/messages.json index d5eba5ccbd8..30a157c7119 100644 --- a/apps/browser/src/_locales/ko/messages.json +++ b/apps/browser/src/_locales/ko/messages.json @@ -3,7 +3,7 @@ "message": "Bitwarden" }, "appLogoLabel": { - "message": "Bitwarden logo" + "message": "Bitwarden 로고" }, "extName": { "message": "Bitwarden 비밀번호 관리자", @@ -465,10 +465,10 @@ "message": "암호 생성" }, "passwordGenerated": { - "message": "Password generated" + "message": "비밀번호 생성됨" }, "passphraseGenerated": { - "message": "Passphrase generated" + "message": "패스프레이즈 생성됨" }, "usernameGenerated": { "message": "Username generated" @@ -547,12 +547,50 @@ "searchVault": { "message": "보관함 검색" }, + "resetSearch": { + "message": "Reset search" + }, + "archiveNoun": { + "message": "Archive", + "description": "Noun" + }, + "archiveVerb": { + "message": "Archive", + "description": "Verb" + }, + "unarchive": { + "message": "Unarchive" + }, + "itemsInArchive": { + "message": "Items in archive" + }, + "noItemsInArchive": { + "message": "No items in archive" + }, + "noItemsInArchiveDesc": { + "message": "Archived items will appear here and will be excluded from general search results and autofill suggestions." + }, + "itemSentToArchive": { + "message": "Item sent to archive" + }, + "itemRemovedFromArchive": { + "message": "Item removed from archive" + }, + "archiveItem": { + "message": "Archive item" + }, + "archiveItemConfirmDesc": { + "message": "Archived items are excluded from general search results and autofill suggestions. Are you sure you want to archive this item?" + }, "edit": { "message": "편집" }, "view": { "message": "보기" }, + "viewLogin": { + "message": "View login" + }, "noItemsInList": { "message": "항목이 없습니다." }, @@ -695,6 +733,15 @@ "invalidMasterPassword": { "message": "잘못된 마스터 비밀번호" }, + "invalidMasterPasswordConfirmEmailAndHost": { + "message": "Invalid master password. Confirm your email is correct and your account was created on $HOST$.", + "placeholders": { + "host": { + "content": "$1", + "example": "vault.bitwarden.com" + } + } + }, "vaultTimeout": { "message": "보관함 시간 제한" }, @@ -744,7 +791,7 @@ "message": "시스템 잠금 시" }, "onRestart": { - "message": "브라우저 다시 시작 시" + "message": "브라우저 재시작 시" }, "never": { "message": "안함" @@ -1013,7 +1060,7 @@ "description": "This is the folder for uncategorized items" }, "enableAddLoginNotification": { - "message": "로그인을 추가할 건지 물어보기" + "message": "로그인 추가 확인" }, "vaultSaveOptionsTitle": { "message": "보관함 옵션들을 저장하기" @@ -1025,7 +1072,7 @@ "message": "보관함에 항목이 없을 경우 추가하라는 메시지를 표시합니다. 모든 로그인된 계정에 적용됩니다." }, "showCardsInVaultViewV2": { - "message": "보관함 보기에서 언제나 카드 자동 완성 제안을 표시" + "message": "보관함 보기에서 자동 완성 제안으로 카드를 항상 표시" }, "showCardsCurrentTab": { "message": "탭 페이지에 카드 표시" @@ -1034,7 +1081,7 @@ "message": "간편한 자동완성을 위해 탭에 카드 항목들을 나열" }, "showIdentitiesInVaultViewV2": { - "message": "보관함 보기에서 언제나 신원의 자동 완성 제안을 표시" + "message": "보관함 보기에서 자동 채우기 제안으로 신원을 항상 표시" }, "showIdentitiesCurrentTab": { "message": "탭 페이지에 신원들을 표시" @@ -1046,7 +1093,7 @@ "message": "보관함 보기에서 항목을 클릭하여 자동 완성" }, "clickToAutofill": { - "message": "Click items in autofill suggestion to fill" + "message": "자동 완성 제안에서 항목 클릭으로 채우기" }, "clearClipboard": { "message": "클립보드 비우기", @@ -1180,7 +1227,7 @@ "message": "Change your master password to complete account recovery." }, "enableChangedPasswordNotification": { - "message": "현재 로그인으로 업데이트할 건지 묻기" + "message": "기존 로그인 정보 업데이트 확인" }, "changedPasswordNotificationDesc": { "message": "웹사이트에서 변경 사항이 감지되면 로그인 비밀번호를 업데이트하라는 메시지를 표시합니다." @@ -1210,7 +1257,7 @@ "message": "추가 옵션" }, "enableContextMenuItem": { - "message": "문맥 매뉴 옵션 표시" + "message": "컨텍스트 메뉴 옵션 표시" }, "contextMenuItemDesc": { "message": "우클릭을 사용하여, 비밀번호 생성과 웹사이트 로그인 매칭에 접근하세요" @@ -1261,10 +1308,10 @@ "message": "이 비밀번호는 이 파일을 파일 내보내거나, 가져오는데 사용됩니다." }, "accountRestrictedOptionDescription": { - "message": "내보내기를 당신의 계정의 사용자이름과 마스터비밀번호로부터 파생된 계정 암호화 키를 사용하여 암호화하고, 현재의 Bitwarden 계정으로만 가져오도록 제한합니다." + "message": "당신 계정의 사용자 이름과 마스터 비밀번호를 통한 암호화 키로 내보내기 파일을 암호화 하고, 현재의 Bitwarden 계정으로만 가져올 수 있도록 제한합니다." }, "passwordProtectedOptionDescription": { - "message": "파일에 비밀번호를 설정하여 내보내기를 암호화하고, 어느 Bitwarden 계정으로든 그 비밀번호로 해독하여 가져오기 합니다." + "message": "파일에 비밀번호를 설정하여 내보내기 파일을 암호화하며, 그 비밀번호만 입력하면 어느 Bitwarden 계정으로든 가져올 수 있습니다." }, "exportTypeHeading": { "message": "내보내기 유형" @@ -1483,17 +1530,17 @@ "message": "Don't ask again on this device for 30 days" }, "selectAnotherMethod": { - "message": "Select another method", + "message": "다른 방법 시도", "description": "Select another two-step login method" }, "useYourRecoveryCode": { - "message": "Use your recovery code" + "message": "복구 코드 사용" }, "insertU2f": { "message": "보안 키를 컴퓨터의 USB 포트에 삽입하고 버튼이 있는 경우 누르세요." }, "openInNewTab": { - "message": "Open in new tab" + "message": "새 탭에서 열기" }, "webAuthnAuthenticate": { "message": "WebAuthn 인증" @@ -1501,6 +1548,15 @@ "readSecurityKey": { "message": "Read security key" }, + "readingPasskeyLoading": { + "message": "Reading passkey..." + }, + "passkeyAuthenticationFailed": { + "message": "Passkey authentication failed" + }, + "useADifferentLogInMethod": { + "message": "Use a different log in method" + }, "awaitingSecurityKeyInteraction": { "message": "Awaiting security key interaction..." }, @@ -1519,9 +1575,6 @@ "selectTwoStepLoginMethod": { "message": "Select two-step login method" }, - "recoveryCodeDesc": { - "message": "모든 2단계 인증을 사용할 수 없는 상황인가요? 복구 코드를 사용하여 계정의 모든 2단계 인증을 비활성화할 수 있습니다." - }, "recoveryCodeTitle": { "message": "복구 코드" }, @@ -1627,13 +1680,13 @@ "message": "양식 필드에 자동 완성 제안 표시" }, "showInlineMenuIdentitiesLabel": { - "message": "신원를 제안으로 표시" + "message": "신원을 제안으로 표시" }, "showInlineMenuCardsLabel": { "message": "카드를 제안으로 표시" }, "showInlineMenuOnIconSelectionLabel": { - "message": "아이콘을 선택할 때 제안을 표시" + "message": "아이콘 선택 시 제안 표시" }, "showInlineMenuOnFormFieldsDescAlt": { "message": "로그인한 모든 계정에 적용" @@ -1680,9 +1733,6 @@ "defaultAutoFillOnPageLoadDesc": { "message": "페이지 로드 시 자동 완성을 켠 뒤에는 각 로그인 항목별로 이 기능을 켜거나 끌 수 있습니다. 이 옵션은 해당 기능을 개별적으로 구성하지 않은 항목에 사용되는 기본 설정값입니다." }, - "itemAutoFillOnPageLoad": { - "message": "페이지 로드 시 자동 완성 (옵션에서 켜져 있을 경우)" - }, "autoFillOnPageLoadUseDefault": { "message": "기본 설정 사용" }, @@ -1754,23 +1804,8 @@ "popup2faCloseMessage": { "message": "인증 코드가 담긴 이메일을 확인하기 위해 팝업 창의 바깥쪽을 누르면 이 팝업이 닫힙니다. 팝업 창이 닫히는 것을 방지하기 위해 이 팝업을 새 창에서 다시 여시겠습니까?" }, - "popupU2fCloseMessage": { - "message": "이 브라우저의 팝업 창에서는 U2F 요청을 처리할 수 없습니다. U2F로 로그인할 수 있도록 이 창을 새 창에서 여시겠습니까?" - }, - "enableFavicon": { - "message": "웹사이트 아이콘 표시하기" - }, - "faviconDesc": { - "message": "로그인 정보 옆에 식별용 이미지를 표시합니다." - }, - "faviconDescAlt": { - "message": "각 로그인 정보 옆에 인식할 수 있는 이미지를 표시합니다. 모든 로그인된 계정에 적용됩니다." - }, - "enableBadgeCounter": { - "message": "배지 갯수 표시" - }, - "badgeCounterDesc": { - "message": "현재 웹 페이지에 저장된 로그인 정보의 수를 표시합니다." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "cardholderName": { "message": "카드 소유자 이름" @@ -1829,6 +1864,9 @@ "securityCode": { "message": "보안 코드" }, + "cardNumber": { + "message": "card number" + }, "ex": { "message": "예)" }, @@ -1931,32 +1969,81 @@ "typeNote": { "message": "Note" }, - "newItemHeader": { - "message": "새 $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderLogin": { + "message": "New Login", + "description": "Header for new login item type" }, - "editItemHeader": { - "message": "$TYPE$ 수정", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderCard": { + "message": "New Card", + "description": "Header for new card item type" }, - "viewItemHeader": { - "message": "$TYPE$ 보기", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderIdentity": { + "message": "New Identity", + "description": "Header for new identity item type" + }, + "newItemHeaderNote": { + "message": "New Note", + "description": "Header for new note item type" + }, + "newItemHeaderSshKey": { + "message": "New SSH key", + "description": "Header for new SSH key item type" + }, + "newItemHeaderTextSend": { + "message": "New Text Send", + "description": "Header for new text send" + }, + "newItemHeaderFileSend": { + "message": "New File Send", + "description": "Header for new file send" + }, + "editItemHeaderLogin": { + "message": "Edit Login", + "description": "Header for edit login item type" + }, + "editItemHeaderCard": { + "message": "Edit Card", + "description": "Header for edit card item type" + }, + "editItemHeaderIdentity": { + "message": "Edit Identity", + "description": "Header for edit identity item type" + }, + "editItemHeaderNote": { + "message": "Edit Note", + "description": "Header for edit note item type" + }, + "editItemHeaderSshKey": { + "message": "Edit SSH key", + "description": "Header for edit SSH key item type" + }, + "editItemHeaderTextSend": { + "message": "Edit Text Send", + "description": "Header for edit text send" + }, + "editItemHeaderFileSend": { + "message": "Edit File Send", + "description": "Header for edit file send" + }, + "viewItemHeaderLogin": { + "message": "View Login", + "description": "Header for view login item type" + }, + "viewItemHeaderCard": { + "message": "View Card", + "description": "Header for view card item type" + }, + "viewItemHeaderIdentity": { + "message": "View Identity", + "description": "Header for view identity item type" + }, + "viewItemHeaderNote": { + "message": "View Note", + "description": "Header for view note item type" + }, + "viewItemHeaderSshKey": { + "message": "View SSH key", + "description": "Header for view SSH key item type" }, "passwordHistory": { "message": "비밀번호 변경 기록" @@ -2190,7 +2277,7 @@ "message": "브라우저 다시 시작 시 마스터 비밀번호로 잠금" }, "lockWithMasterPassOnRestart1": { - "message": "브라우저 다시 시작 시 마스터 비밀번호가 필요합니다" + "message": "브라우저 재시작 시 마스터 비밀번호 요구" }, "selectOneCollection": { "message": "반드시 하나 이상의 컬렉션을 선택해야 합니다." @@ -3109,7 +3196,7 @@ } }, "exportingIndividualVaultWithAttachmentsDescription": { - "message": "Only the individual vault items including attachments associated with $EMAIL$ will be exported. Organization vault items will not be included", + "message": "$EMAIL$ 계정과 관련된 개인 보관함 항목과 첨부 파일만 내보내집니다. 조직 보관함 항목은 포함되지 않습니다.", "placeholders": { "email": { "content": "$1", @@ -3129,6 +3216,24 @@ } } }, + "exportingOrganizationVaultFromPasswordManagerWithDataOwnershipDesc": { + "message": "Only the organization vault associated with $ORGANIZATION$ will be exported.", + "placeholders": { + "organization": { + "content": "$1", + "example": "My Org Name" + } + } + }, + "exportingOrganizationVaultFromAdminConsoleWithDataOwnershipDesc": { + "message": "Only the organization vault associated with $ORGANIZATION$ will be exported. My items collections will not be included.", + "placeholders": { + "organization": { + "content": "$1", + "example": "My Org Name" + } + } + }, "error": { "message": "오류" }, @@ -3460,6 +3565,28 @@ "logInRequestSent": { "message": "Request sent" }, + "loginRequestApprovedForEmailOnDevice": { + "message": "Login request approved for $EMAIL$ on $DEVICE$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + }, + "device": { + "content": "$2", + "example": "Web app - Chrome" + } + } + }, + "youDeniedLoginAttemptFromAnotherDevice": { + "message": "You denied a login attempt from another device. If this was you, try to log in with the device again." + }, + "device": { + "message": "Device" + }, + "loginStatus": { + "message": "Login status" + }, "masterPasswordChanged": { "message": "Master password saved" }, @@ -3496,9 +3623,6 @@ "autofillPageLoadPolicyActivated": { "message": "조직 정책에 따라, 페이지 로드 시 자동 완성 기능을 켰습니다." }, - "howToAutofill": { - "message": "자동 완성 사용법" - }, "autofillSelectInfoWithCommand": { "message": "이 화면에서 항목을 선택하거나, 바로 가기 $COMMAND$를 사용하거나, 설정의 다른 옵션을 탐색하세요.", "placeholders": { @@ -3556,6 +3680,94 @@ "rememberThisDeviceToMakeFutureLoginsSeamless": { "message": "향후 로그인을 원활하게 하기 위해 이 기기 기억하기" }, + "manageDevices": { + "message": "Manage devices" + }, + "currentSession": { + "message": "Current session" + }, + "mobile": { + "message": "Mobile", + "description": "Mobile app" + }, + "extension": { + "message": "Extension", + "description": "Browser extension/addon" + }, + "desktop": { + "message": "Desktop", + "description": "Desktop app" + }, + "webVault": { + "message": "Web vault" + }, + "webApp": { + "message": "Web app" + }, + "cli": { + "message": "CLI" + }, + "sdk": { + "message": "SDK", + "description": "Software Development Kit" + }, + "requestPending": { + "message": "Request pending" + }, + "firstLogin": { + "message": "First login" + }, + "trusted": { + "message": "Trusted" + }, + "needsApproval": { + "message": "Needs approval" + }, + "devices": { + "message": "Devices" + }, + "accessAttemptBy": { + "message": "Access attempt by $EMAIL$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + } + } + }, + "confirmAccess": { + "message": "Confirm access" + }, + "denyAccess": { + "message": "Deny access" + }, + "time": { + "message": "Time" + }, + "deviceType": { + "message": "Device Type" + }, + "loginRequest": { + "message": "Login request" + }, + "thisRequestIsNoLongerValid": { + "message": "This request is no longer valid." + }, + "loginRequestHasAlreadyExpired": { + "message": "Login request has already expired." + }, + "justNow": { + "message": "Just now" + }, + "requestedXMinutesAgo": { + "message": "Requested $MINUTES$ minutes ago", + "placeholders": { + "minutes": { + "content": "$1", + "example": "5" + } + } + }, "deviceApprovalRequired": { "message": "기기 승인이 필요합니다. 아래에서 승인 옵션을 선택하세요:" }, @@ -3673,7 +3885,7 @@ "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "sendsBodyNoItems": { - "message": "Share files and data securely with anyone, on any platform. Your information will remain end-to-end encrypted while limiting exposure.", + "message": "플랫폼에 구애받지 않고 누구에게나 파일과 데이터를 안전하게 공유하세요. 전송하는 정보는 종단 간 암호화로 보호되어 외부 노출이 최소화됩니다.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "inputRequired": { @@ -3795,18 +4007,10 @@ "aliasDomain": { "message": "도메인 별칭" }, - "passwordRepromptDisabledAutofillOnPageLoad": { - "message": "마스터 비밀번호 재 요청이 있는 항목은 페이지 로드에서 자동으로 채울 수 없습니다. 페이지 로드의 자동 완성이 꺼졌습니다.", - "description": "Toast message for describing that master password re-prompt cannot be autofilled on page load." - }, "autofillOnPageLoadSetToDefault": { "message": "페이지 로드 시 자동 완성이 기본 설정을 사용하도록 설정되었습니다.", "description": "Toast message for informing the user that autofill on page load has been set to the default setting." }, - "turnOffMasterPasswordPromptToEditField": { - "message": "마스터 암호 재 요청을 해제하여 이 필드를 편집합니다", - "description": "Message appearing below the autofill on load message when master password reprompt is set for a vault item." - }, "toggleSideNavigation": { "message": "사이드 내비게이션 전환" }, @@ -4015,15 +4219,11 @@ "selectImportCollection": { "message": "컬렉션 선택" }, - "importTargetHint": { - "message": "가져온 파일의 내용을 $DESTINATION$로 이동하려면 이 옵션을 선택하세요.", - "description": "Located as a hint under the import target. Will be appended by either folder or collection, depending if the user is importing into an individual or an organizational vault.", - "placeholders": { - "destination": { - "content": "$1", - "example": "folder or collection" - } - } + "importTargetHintCollection": { + "message": "Select this option if you want the imported file contents moved to a collection" + }, + "importTargetHintFolder": { + "message": "Select this option if you want the imported file contents moved to a folder" }, "importUnassignedItemsError": { "message": "파일에 할당되지 않은 항목이 포함되어 있습니다." @@ -4080,9 +4280,6 @@ "passkeyNotCopiedAlert": { "message": "패스키는 복제된 아이템에 복사되지 않습니다. 계속 이 항목을 복제하시겠어요?" }, - "passkeyFeatureIsNotImplementedForAccountsWithoutMasterPassword": { - "message": "사이트에서 인증을 요구합니다. 이 기능은 비밀번호가 없는 계정에서는 아직 지원하지 않습니다." - }, "logInWithPasskeyQuestion": { "message": "패스키로 로그인하시겠어요?" }, @@ -4263,7 +4460,7 @@ "description": "Label indicating the most common import formats" }, "uriMatchDefaultStrategyHint": { - "message": "URI match detection is how Bitwarden identifies autofill suggestions.", + "message": "Bitwarden에서 자동 채우기 제안을 식별하는 방법은 URI 일치 감지입니다.", "description": "Explains to the user that URI match detection determines how Bitwarden suggests autofill options, and clarifies that this default strategy applies when no specific match detection is set for a login item." }, "regExAdvancedOptionWarning": { @@ -4465,17 +4662,17 @@ } } }, - "copyFieldValue": { - "message": "Copy $FIELD$, $VALUE$", + "copyFieldCipherName": { + "message": "Copy $FIELD$, $CIPHERNAME$", "description": "Title for a button that copies a field value to the clipboard.", "placeholders": { "field": { "content": "$1", "example": "Username" }, - "value": { + "ciphername": { "content": "$2", - "example": "Foo" + "example": "Login Item" } } }, @@ -4768,9 +4965,6 @@ } } }, - "enableAnimations": { - "message": "애니메이션 활성화" - }, "showAnimations": { "message": "애니메이션 표시" }, @@ -4983,15 +5177,9 @@ "itemLocation": { "message": "항목 위치" }, - "fileSend": { - "message": "파일 Send" - }, "fileSends": { "message": "파일 Send" }, - "textSend": { - "message": "텍스트 Send" - }, "textSends": { "message": "텍스트 Send" }, @@ -5001,6 +5189,18 @@ "showNumberOfAutofillSuggestions": { "message": "확장 아이콘에 로그인 자동 완성 제안 수 표시" }, + "accountAccessRequested": { + "message": "Account access requested" + }, + "confirmAccessAttempt": { + "message": "Confirm access attempt for $EMAIL$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + } + } + }, "showQuickCopyActions": { "message": "보관함에서 빠른 복사 기능 표시" }, @@ -5040,9 +5240,6 @@ "vaultCustomTimeoutMinimum": { "message": "최소 사용자 지정 시간 초과는 1분입니다." }, - "additionalContentAvailable": { - "message": "추가 콘텐츠를 사용할 수 있습니다" - }, "fileSavedToDevice": { "message": "파일을 장치에 저장했습니다. 장치 다운로드로 관리할 수 있습니다." }, @@ -5328,6 +5525,12 @@ "changeAtRiskPassword": { "message": "Change at-risk password" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "This login is at-risk and missing a website. Add a website and change the password for stronger security." + }, + "missingWebsite": { + "message": "Missing website" + }, "settingsVaultOptions": { "message": "Vault options" }, @@ -5376,6 +5579,18 @@ "hasItemsVaultNudgeTitle": { "message": "Welcome to your vault!" }, + "phishingPageTitle": { + "message": "Phishing website" + }, + "phishingPageCloseTab": { + "message": "Close tab" + }, + "phishingPageContinue": { + "message": "Continue" + }, + "phishingPageLearnWhy": { + "message": "Why are you seeing this?" + }, "hasItemsVaultNudgeBodyOne": { "message": "Autofill items for the current page" }, @@ -5451,11 +5666,33 @@ "message": "Easily create strong and unique passwords by clicking on the Generate password button to help you keep your logins secure.", "description": "Aria label for the body content of the generator nudge" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "noPermissionsViewPage": { "message": "You do not have permissions to view this page. Try logging in with a different account." }, "wasmNotSupported": { "message": "WebAssembly is not supported on your browser or is not enabled. WebAssembly is required to use the Bitwarden app.", "description": "'WebAssembly' is a technical term and should not be translated." + }, + "showMore": { + "message": "Show more" + }, + "showLess": { + "message": "Show less" + }, + "next": { + "message": "Next" + }, + "moreBreadcrumbs": { + "message": "More breadcrumbs", + "description": "This is used in the context of a breadcrumb navigation, indicating that there are more items in the breadcrumb trail that are not currently displayed." + }, + "confirmKeyConnectorDomain": { + "message": "Confirm Key Connector domain" } } diff --git a/apps/browser/src/_locales/lt/messages.json b/apps/browser/src/_locales/lt/messages.json index 33f3b0f0ed6..f8d7be17fde 100644 --- a/apps/browser/src/_locales/lt/messages.json +++ b/apps/browser/src/_locales/lt/messages.json @@ -3,14 +3,14 @@ "message": "Bitwarden" }, "appLogoLabel": { - "message": "Bitwarden logotipas" + "message": "„Bitwarden“ logotipas" }, "extName": { "message": "„Bitwarden“ slaptažodžių tvarkyklė", "description": "Extension name, MUST be less than 40 characters (Safari restriction)" }, "extDesc": { - "message": "Namuose, darbe ar kelyje, Bitwarden apsaugo jūsų slaptažodžius, raktažodžius ir svarbią informaciją", + "message": "Namuose, darbe ar kelyje, „Bitwarden“ apsaugo jūsų slaptažodžius, raktažodžius ir svarbią informaciją", "description": "Extension description, MUST be less than 112 characters (Safari restriction)" }, "loginOrCreateNewAccount": { @@ -23,13 +23,13 @@ "message": "Sukurti paskyrą" }, "newToBitwarden": { - "message": "Pirmą kartą Bitwarden?" + "message": "Pirmą kartą „Bitwarden“?" }, "logInWithPasskey": { "message": "Prisijungti naudojant prieigos raktą" }, "useSingleSignOn": { - "message": "Use single sign-on" + "message": "Naudoti vieningo prisijungimo sistemą" }, "welcomeBack": { "message": "Sveiki sugrįžę" @@ -38,7 +38,7 @@ "message": "Nustatyti stiprų slaptažodį" }, "finishCreatingYourAccountBySettingAPassword": { - "message": "Baigkite kurti paskyrą nustatydami slaptažodį" + "message": "Baikite kurti paskyrą nustatydami slaptažodį" }, "enterpriseSingleSignOn": { "message": "Vienkartinis įmonės prisijungimas" @@ -59,10 +59,10 @@ "message": "Pagrindinis slaptažodis" }, "masterPassDesc": { - "message": "Pagrindinis slaptažodis yra slaptažodis, kurį naudojate norėdami pasiekti savo saugyklą. Labai svarbu nepamiršti pagrindinio slaptažodžio. Nėra galimybių atkurti slaptažodį, jei jį pamiršite." + "message": "Pagrindinis slaptažodis yra slaptažodis, kurį naudojate norėdami pasiekti savo saugyklą. Labai svarbu nepamiršti pagrindinio slaptažodžio. Nėra galimybių atkurti slaptažodžio, jei jį pamiršite." }, "masterPassHintDesc": { - "message": "Pagrindinio slaptažodžio užuomina gali padėti Jums prisiminti slaptažodį, jei jį pamiršite." + "message": "Pagrindinio slaptažodžio užuomina gali padėti jums prisiminti slaptažodį, jei jį pamiršite." }, "masterPassHintText": { "message": "Jei pamiršote slaptažodį, slaptažodžio užuomina gali būti išsiųsta į jūsų el. paštą. $CURRENT$ / $MAXIMUM$ didžiausias simbolių skaičius.", @@ -105,7 +105,7 @@ } }, "finishJoiningThisOrganizationBySettingAMasterPassword": { - "message": "Baigėte prisijungimą prie organizacijos nustatant pagrindinį slaptažodį." + "message": "Užbaikite prisijungimą prie organizacijos nustatydami pagrindinį slaptažodį." }, "tab": { "message": "Skirtukas" @@ -132,7 +132,7 @@ "message": "Kopijuoti slaptažodį" }, "copyPassphrase": { - "message": "Kopijuoti slaptažodžio frazę" + "message": "Kopijuoti slaptą frazę" }, "copyNote": { "message": "Kopijuoti pastabą" @@ -156,13 +156,13 @@ "message": "Kopijuoti įmonę" }, "copySSN": { - "message": "Kopijuoti socialinės apsaugos numerį" + "message": "Kopijuoti asmens kodo numerį" }, "copyPassportNumber": { "message": "Kopijuoti paso numerį" }, "copyLicenseNumber": { - "message": "Kopijuoti licenzijos numerį" + "message": "Kopijuoti licencijos numerį" }, "copyPrivateKey": { "message": "Kopijuoti privatų raktą" @@ -193,7 +193,7 @@ "description": "Copy to clipboard" }, "fill": { - "message": "Fill", + "message": "Užpildyti", "description": "This string is used on the vault page to indicate autofilling. Horizontal space is limited in the interface here so try and keep translations as concise as possible." }, "autoFill": { @@ -209,10 +209,10 @@ "message": "Tapatybės automatinis užpildymas" }, "fillVerificationCode": { - "message": "Fill verification code" + "message": "Užpildyti patvirtinimo kodą" }, "fillVerificationCodeAria": { - "message": "Fill Verification Code", + "message": "Užpildyti patvirtinimo kodą", "description": "Aria label for the heading displayed the inline menu for totp code autofill" }, "generatePasswordCopied": { @@ -240,10 +240,10 @@ "message": "Pridėti tapatybę" }, "unlockVaultMenu": { - "message": "Atrakinti Jūsų saugyklą" + "message": "Atrakinti jūsų saugyklą" }, "loginToVaultMenu": { - "message": "Prisijungti prie Jūsų saugyklos" + "message": "Prisijungti prie jūsų saugyklos" }, "autoFillInfo": { "message": "Nėra galimų prisijungimų prie dabartinio naršyklės skirtuko." @@ -255,16 +255,16 @@ "message": "Pridėti elementą" }, "accountEmail": { - "message": "Account email" + "message": "Paskyros el. paštas" }, "requestHint": { - "message": "Request hint" + "message": "Duoti užuominą" }, "requestPasswordHint": { - "message": "Request password hint" + "message": "Duoti slaptažodžio užuominą" }, "enterYourAccountEmailAddressAndYourPasswordHintWillBeSentToYou": { - "message": "Enter your account email address and your password hint will be sent to you" + "message": "Įveskite savo paskyros el. pašą ir jūsų slaptažodžio užuomina bus atsiųsta jums" }, "getMasterPasswordHint": { "message": "Gauti pagrindinio slaptažodžio užuominą" @@ -291,25 +291,25 @@ "message": "Keisti pagrindinį slaptažodį" }, "continueToWebApp": { - "message": "Tęsti į žiniatinklio programėlę?" + "message": "Tęsti į žiniatinklio programą?" }, "continueToWebAppDesc": { - "message": "Atraskite daugiau savo Bitwarden paskyros funkcijų web programoje." + "message": "Atraskite daugiau savo „Bitwarden“ paskyros funkcijų žiniatinklio programoje." }, "continueToHelpCenter": { "message": "Eiti į pagalbos centrą?" }, "continueToHelpCenterDesc": { - "message": "Pagalbos Centre sužinokite daugiau kaip naudotis Bitwarden." + "message": "Pagalbos centre sužinokite daugiau, kaip naudotis „Bitwarden“." }, "continueToBrowserExtensionStore": { "message": "Eiti į naršyklės plėtinių svetainę?" }, "continueToBrowserExtensionStoreDesc": { - "message": "Padėkite kitiems sužinoti ar Bitwarden yra jiems tinkamas. Apsilankykite naršyklės plėtinių svetainėje ir įvertinkite Bitwarden." + "message": "Padėkite kitiems sužinoti ar B„itwarden“ yra jiems tinkamas. Apsilankykite naršyklės plėtinių svetainėje ir įvertinkite „Bitwarden“." }, "changeMasterPasswordOnWebConfirmation": { - "message": "Pagrindinį slaptažodį galite pakeisti „Bitwarden“ žiniatinklio programėlėje." + "message": "Pagrindinį slaptažodį galite pakeisti „Bitwarden“ žiniatinklio programoje." }, "fingerprintPhrase": { "message": "Pirštų atspaudų frazė", @@ -383,7 +383,7 @@ "message": "Redaguoti aplankalą" }, "editFolderWithName": { - "message": "Edit folder: $FOLDERNAME$", + "message": "Redaguoti aplanką: $FOLDERNAME$", "placeholders": { "foldername": { "content": "$1", @@ -392,10 +392,10 @@ } }, "newFolder": { - "message": "New folder" + "message": "Naujas aplankas" }, "folderName": { - "message": "Folder name" + "message": "Aplanko vardas" }, "folderHintText": { "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums" @@ -547,12 +547,50 @@ "searchVault": { "message": "Ieškoti saugykloje" }, + "resetSearch": { + "message": "Reset search" + }, + "archiveNoun": { + "message": "Archive", + "description": "Noun" + }, + "archiveVerb": { + "message": "Archive", + "description": "Verb" + }, + "unarchive": { + "message": "Unarchive" + }, + "itemsInArchive": { + "message": "Items in archive" + }, + "noItemsInArchive": { + "message": "No items in archive" + }, + "noItemsInArchiveDesc": { + "message": "Archived items will appear here and will be excluded from general search results and autofill suggestions." + }, + "itemSentToArchive": { + "message": "Item sent to archive" + }, + "itemRemovedFromArchive": { + "message": "Item removed from archive" + }, + "archiveItem": { + "message": "Archive item" + }, + "archiveItemConfirmDesc": { + "message": "Archived items are excluded from general search results and autofill suggestions. Are you sure you want to archive this item?" + }, "edit": { "message": "Keisti" }, "view": { "message": "Peržiūrėti" }, + "viewLogin": { + "message": "View login" + }, "noItemsInList": { "message": "Nėra rodytinų elementų." }, @@ -674,7 +712,7 @@ "message": "Your account is locked" }, "or": { - "message": "or" + "message": "arba" }, "unlock": { "message": "Atrakinti" @@ -695,11 +733,20 @@ "invalidMasterPassword": { "message": "Neteisingas pagrindinis slaptažodis" }, + "invalidMasterPasswordConfirmEmailAndHost": { + "message": "Invalid master password. Confirm your email is correct and your account was created on $HOST$.", + "placeholders": { + "host": { + "content": "$1", + "example": "vault.bitwarden.com" + } + } + }, "vaultTimeout": { "message": "Atsijungta nuo saugyklos" }, "vaultTimeout1": { - "message": "Timeout" + "message": "Skirtas laikas" }, "lockNow": { "message": "Užrakinti dabar" @@ -796,10 +843,10 @@ "message": "Jūsų paskyra sukurta! Galite prisijungti." }, "newAccountCreated2": { - "message": "Your new account has been created!" + "message": "Jūsų nauja paskyra buvo sukurta!" }, "youHaveBeenLoggedIn": { - "message": "You have been logged in!" + "message": "Jūs prisijungėte!" }, "youSuccessfullyLoggedIn": { "message": "Jūs sėkmingai prisijungėte" @@ -842,7 +889,7 @@ "message": "Nuskaitykite autentifikatoriaus QR kodą iš dabartinio tinklalapio" }, "totpHelperTitle": { - "message": "Make 2-step verification seamless" + "message": "Padaryti dviejų veiksnių patvirtinimą sklandų" }, "totpHelper": { "message": "Bitwarden can store and fill 2-step verification codes. Copy and paste the key into this field." @@ -869,19 +916,19 @@ "message": "Prisijungti" }, "logInToBitwarden": { - "message": "Log in to Bitwarden" + "message": "Prisijungti prie „Bitwarden“" }, "enterTheCodeSentToYourEmail": { - "message": "Enter the code sent to your email" + "message": "Įveskite kodą išsiųstą jums el. paštu" }, "enterTheCodeFromYourAuthenticatorApp": { - "message": "Enter the code from your authenticator app" + "message": "Įveskite kodą iš autentifikacijos programėlės" }, "pressYourYubiKeyToAuthenticate": { - "message": "Press your YubiKey to authenticate" + "message": "Palieskite savo „YubiKey“, kad autentifikuotumėtės" }, "duoTwoFactorRequiredPageSubtitle": { - "message": "Duo two-step login is required for your account. Follow the steps below to finish logging in." + "message": "„Duo“ dviejų veiksnių prisijungimas yra privalomas jūsų paskyrai. Sekite žingsnius žemiau, kad užbaigtumėte prisijungimą." }, "followTheStepsBelowToFinishLoggingIn": { "message": "Follow the steps below to finish logging in." @@ -1501,6 +1548,15 @@ "readSecurityKey": { "message": "Read security key" }, + "readingPasskeyLoading": { + "message": "Reading passkey..." + }, + "passkeyAuthenticationFailed": { + "message": "Passkey authentication failed" + }, + "useADifferentLogInMethod": { + "message": "Use a different log in method" + }, "awaitingSecurityKeyInteraction": { "message": "Awaiting security key interaction..." }, @@ -1519,9 +1575,6 @@ "selectTwoStepLoginMethod": { "message": "Select two-step login method" }, - "recoveryCodeDesc": { - "message": "Praradai prieigą prie visų savo dviejų veiksnių teikėjų? Naudok atkūrimo kodą, kad iš savo paskyros išjungtum visus dviejų veiksnių teikėjus." - }, "recoveryCodeTitle": { "message": "Atkūrimo kodas" }, @@ -1680,9 +1733,6 @@ "defaultAutoFillOnPageLoadDesc": { "message": "Galite išjungti automatinį pildymą įkeliant puslapį atskiriems prisijungimo elementams, elemento redagavimo rodinyje." }, - "itemAutoFillOnPageLoad": { - "message": "Automatinis pildymas įkeliant puslapį (jei nustatyta Parinktyse)" - }, "autoFillOnPageLoadUseDefault": { "message": "Naudoti numatytuosius nustatymus" }, @@ -1754,23 +1804,8 @@ "popup2faCloseMessage": { "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": "Š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" - }, - "faviconDesc": { - "message": "Rodyti atpažįstamą vaizdą šalia kiekvieno prisijungimo." - }, - "faviconDescAlt": { - "message": "Rodyti atpažįstamą vaizdą šalia kiekvieno prisijungimo. Taikoma visoms prisijungusioms paskyroms." - }, - "enableBadgeCounter": { - "message": "Rodyti ženkliukų skaitiklį" - }, - "badgeCounterDesc": { - "message": "Nurodoma, kiek prisijungimų turi dabartiniame žiniatinklio puslapyje." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "cardholderName": { "message": "Mokėjimo kortelės savininko vardas" @@ -1829,6 +1864,9 @@ "securityCode": { "message": "Apsaugos kodas" }, + "cardNumber": { + "message": "card number" + }, "ex": { "message": "pvz." }, @@ -1931,32 +1969,81 @@ "typeNote": { "message": "Note" }, - "newItemHeader": { - "message": "Naujas $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderLogin": { + "message": "New Login", + "description": "Header for new login item type" }, - "editItemHeader": { - "message": "Redaguoti $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderCard": { + "message": "New Card", + "description": "Header for new card item type" }, - "viewItemHeader": { - "message": "Peržiūrėti $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderIdentity": { + "message": "New Identity", + "description": "Header for new identity item type" + }, + "newItemHeaderNote": { + "message": "New Note", + "description": "Header for new note item type" + }, + "newItemHeaderSshKey": { + "message": "New SSH key", + "description": "Header for new SSH key item type" + }, + "newItemHeaderTextSend": { + "message": "New Text Send", + "description": "Header for new text send" + }, + "newItemHeaderFileSend": { + "message": "New File Send", + "description": "Header for new file send" + }, + "editItemHeaderLogin": { + "message": "Edit Login", + "description": "Header for edit login item type" + }, + "editItemHeaderCard": { + "message": "Edit Card", + "description": "Header for edit card item type" + }, + "editItemHeaderIdentity": { + "message": "Edit Identity", + "description": "Header for edit identity item type" + }, + "editItemHeaderNote": { + "message": "Edit Note", + "description": "Header for edit note item type" + }, + "editItemHeaderSshKey": { + "message": "Edit SSH key", + "description": "Header for edit SSH key item type" + }, + "editItemHeaderTextSend": { + "message": "Edit Text Send", + "description": "Header for edit text send" + }, + "editItemHeaderFileSend": { + "message": "Edit File Send", + "description": "Header for edit file send" + }, + "viewItemHeaderLogin": { + "message": "View Login", + "description": "Header for view login item type" + }, + "viewItemHeaderCard": { + "message": "View Card", + "description": "Header for view card item type" + }, + "viewItemHeaderIdentity": { + "message": "View Identity", + "description": "Header for view identity item type" + }, + "viewItemHeaderNote": { + "message": "View Note", + "description": "Header for view note item type" + }, + "viewItemHeaderSshKey": { + "message": "View SSH key", + "description": "Header for view SSH key item type" }, "passwordHistory": { "message": "Slaptažodžio istorija" @@ -3129,6 +3216,24 @@ } } }, + "exportingOrganizationVaultFromPasswordManagerWithDataOwnershipDesc": { + "message": "Only the organization vault associated with $ORGANIZATION$ will be exported.", + "placeholders": { + "organization": { + "content": "$1", + "example": "My Org Name" + } + } + }, + "exportingOrganizationVaultFromAdminConsoleWithDataOwnershipDesc": { + "message": "Only the organization vault associated with $ORGANIZATION$ will be exported. My items collections will not be included.", + "placeholders": { + "organization": { + "content": "$1", + "example": "My Org Name" + } + } + }, "error": { "message": "Klaida" }, @@ -3460,6 +3565,28 @@ "logInRequestSent": { "message": "Request sent" }, + "loginRequestApprovedForEmailOnDevice": { + "message": "Login request approved for $EMAIL$ on $DEVICE$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + }, + "device": { + "content": "$2", + "example": "Web app - Chrome" + } + } + }, + "youDeniedLoginAttemptFromAnotherDevice": { + "message": "You denied a login attempt from another device. If this was you, try to log in with the device again." + }, + "device": { + "message": "Device" + }, + "loginStatus": { + "message": "Login status" + }, "masterPasswordChanged": { "message": "Master password saved" }, @@ -3496,9 +3623,6 @@ "autofillPageLoadPolicyActivated": { "message": "Your organization policies have turned on autofill on page load." }, - "howToAutofill": { - "message": "Kaip automatiškai užpildyti" - }, "autofillSelectInfoWithCommand": { "message": "Select an item from this screen, use the shortcut $COMMAND$, or explore other options in settings.", "placeholders": { @@ -3556,6 +3680,94 @@ "rememberThisDeviceToMakeFutureLoginsSeamless": { "message": "Remember this device to make future logins seamless" }, + "manageDevices": { + "message": "Manage devices" + }, + "currentSession": { + "message": "Current session" + }, + "mobile": { + "message": "Mobile", + "description": "Mobile app" + }, + "extension": { + "message": "Extension", + "description": "Browser extension/addon" + }, + "desktop": { + "message": "Desktop", + "description": "Desktop app" + }, + "webVault": { + "message": "Web vault" + }, + "webApp": { + "message": "Web app" + }, + "cli": { + "message": "CLI" + }, + "sdk": { + "message": "SDK", + "description": "Software Development Kit" + }, + "requestPending": { + "message": "Request pending" + }, + "firstLogin": { + "message": "First login" + }, + "trusted": { + "message": "Trusted" + }, + "needsApproval": { + "message": "Needs approval" + }, + "devices": { + "message": "Devices" + }, + "accessAttemptBy": { + "message": "Access attempt by $EMAIL$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + } + } + }, + "confirmAccess": { + "message": "Confirm access" + }, + "denyAccess": { + "message": "Deny access" + }, + "time": { + "message": "Time" + }, + "deviceType": { + "message": "Device Type" + }, + "loginRequest": { + "message": "Login request" + }, + "thisRequestIsNoLongerValid": { + "message": "This request is no longer valid." + }, + "loginRequestHasAlreadyExpired": { + "message": "Login request has already expired." + }, + "justNow": { + "message": "Just now" + }, + "requestedXMinutesAgo": { + "message": "Requested $MINUTES$ minutes ago", + "placeholders": { + "minutes": { + "content": "$1", + "example": "5" + } + } + }, "deviceApprovalRequired": { "message": "Įrenginio patvirtinimas reikalingas. Pasirink patvirtinimo būdą toliau:" }, @@ -3795,18 +4007,10 @@ "aliasDomain": { "message": "Domeno slapyvardis" }, - "passwordRepromptDisabledAutofillOnPageLoad": { - "message": "Elementai su pagrindinio slaptažodžio raginimu negali būti automatiškai užpildyti įkeliant puslapį. Automatinis pildymas, įkeliant puslapį, išjungtas.", - "description": "Toast message for describing that master password re-prompt cannot be autofilled on page load." - }, "autofillOnPageLoadSetToDefault": { "message": "Automatinis pildymas įkeliant puslapį nustatytas naudoti numatytąjį nustatymą.", "description": "Toast message for informing the user that autofill on page load has been set to the default setting." }, - "turnOffMasterPasswordPromptToEditField": { - "message": "Išjunkite pagrindinio slaptažodžio raginimą, jei norite redaguoti šį lauką", - "description": "Message appearing below the autofill on load message when master password reprompt is set for a vault item." - }, "toggleSideNavigation": { "message": "Perjungti šoninę naršymą" }, @@ -4015,15 +4219,11 @@ "selectImportCollection": { "message": "Pasirinkti rinkinį" }, - "importTargetHint": { - "message": "Pasirinkite šį pasirinkimą, jei norite, jog importuoto failo turinys, būtų perkeltas į $DESTINATION$", - "description": "Located as a hint under the import target. Will be appended by either folder or collection, depending if the user is importing into an individual or an organizational vault.", - "placeholders": { - "destination": { - "content": "$1", - "example": "folder or collection" - } - } + "importTargetHintCollection": { + "message": "Select this option if you want the imported file contents moved to a collection" + }, + "importTargetHintFolder": { + "message": "Select this option if you want the imported file contents moved to a folder" }, "importUnassignedItemsError": { "message": "Faile yra nepriskirtų elementų." @@ -4080,9 +4280,6 @@ "passkeyNotCopiedAlert": { "message": "The passkey will not be copied to the cloned item. Do you want to continue cloning this item?" }, - "passkeyFeatureIsNotImplementedForAccountsWithoutMasterPassword": { - "message": "Verification required by the initiating site. This feature is not yet implemented for accounts without master password." - }, "logInWithPasskeyQuestion": { "message": "Log in with passkey?" }, @@ -4465,17 +4662,17 @@ } } }, - "copyFieldValue": { - "message": "Copy $FIELD$, $VALUE$", + "copyFieldCipherName": { + "message": "Copy $FIELD$, $CIPHERNAME$", "description": "Title for a button that copies a field value to the clipboard.", "placeholders": { "field": { "content": "$1", "example": "Username" }, - "value": { + "ciphername": { "content": "$2", - "example": "Foo" + "example": "Login Item" } } }, @@ -4768,9 +4965,6 @@ } } }, - "enableAnimations": { - "message": "Enable animations" - }, "showAnimations": { "message": "Show animations" }, @@ -4983,15 +5177,9 @@ "itemLocation": { "message": "Elemento vieta" }, - "fileSend": { - "message": "File Send" - }, "fileSends": { "message": "File Sends" }, - "textSend": { - "message": "Text Send" - }, "textSends": { "message": "Text Sends" }, @@ -5001,6 +5189,18 @@ "showNumberOfAutofillSuggestions": { "message": "Show number of login autofill suggestions on extension icon" }, + "accountAccessRequested": { + "message": "Account access requested" + }, + "confirmAccessAttempt": { + "message": "Confirm access attempt for $EMAIL$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + } + } + }, "showQuickCopyActions": { "message": "Show quick copy actions on Vault" }, @@ -5040,9 +5240,6 @@ "vaultCustomTimeoutMinimum": { "message": "Minimum custom timeout is 1 minute." }, - "additionalContentAvailable": { - "message": "Additional content is available" - }, "fileSavedToDevice": { "message": "File saved to device. Manage from your device downloads." }, @@ -5328,6 +5525,12 @@ "changeAtRiskPassword": { "message": "Change at-risk password" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "This login is at-risk and missing a website. Add a website and change the password for stronger security." + }, + "missingWebsite": { + "message": "Missing website" + }, "settingsVaultOptions": { "message": "Vault options" }, @@ -5376,6 +5579,18 @@ "hasItemsVaultNudgeTitle": { "message": "Welcome to your vault!" }, + "phishingPageTitle": { + "message": "Phishing website" + }, + "phishingPageCloseTab": { + "message": "Close tab" + }, + "phishingPageContinue": { + "message": "Continue" + }, + "phishingPageLearnWhy": { + "message": "Why are you seeing this?" + }, "hasItemsVaultNudgeBodyOne": { "message": "Autofill items for the current page" }, @@ -5451,11 +5666,33 @@ "message": "Easily create strong and unique passwords by clicking on the Generate password button to help you keep your logins secure.", "description": "Aria label for the body content of the generator nudge" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "noPermissionsViewPage": { "message": "You do not have permissions to view this page. Try logging in with a different account." }, "wasmNotSupported": { "message": "WebAssembly is not supported on your browser or is not enabled. WebAssembly is required to use the Bitwarden app.", "description": "'WebAssembly' is a technical term and should not be translated." + }, + "showMore": { + "message": "Show more" + }, + "showLess": { + "message": "Show less" + }, + "next": { + "message": "Next" + }, + "moreBreadcrumbs": { + "message": "More breadcrumbs", + "description": "This is used in the context of a breadcrumb navigation, indicating that there are more items in the breadcrumb trail that are not currently displayed." + }, + "confirmKeyConnectorDomain": { + "message": "Confirm Key Connector domain" } } diff --git a/apps/browser/src/_locales/lv/messages.json b/apps/browser/src/_locales/lv/messages.json index 2235baef2ab..1f2268a59ac 100644 --- a/apps/browser/src/_locales/lv/messages.json +++ b/apps/browser/src/_locales/lv/messages.json @@ -547,12 +547,50 @@ "searchVault": { "message": "Meklēt glabātavā" }, + "resetSearch": { + "message": "Atiestatīt meklēšanu" + }, + "archiveNoun": { + "message": "Arhīvs", + "description": "Noun" + }, + "archiveVerb": { + "message": "Arhivēt", + "description": "Verb" + }, + "unarchive": { + "message": "Atcelt arhivēšanu" + }, + "itemsInArchive": { + "message": "Vienumi arhīvā" + }, + "noItemsInArchive": { + "message": "Arhīvā nav vienumu" + }, + "noItemsInArchiveDesc": { + "message": "Šeit parādīsies arhivētie vienumi, un tie netiks iekļauti vispārējās meklēšanas iznākumos un automātiskās aizpildes ieteikumos." + }, + "itemSentToArchive": { + "message": "Vienums ievietots arhīvā" + }, + "itemRemovedFromArchive": { + "message": "Vienums izņemts no arhīva" + }, + "archiveItem": { + "message": "Arhivēt vienumu" + }, + "archiveItemConfirmDesc": { + "message": "Arhivētie vienumi netiek iekļauti vispārējās meklēšanas iznākumos un automātiskās aizpildes ieteikumos. Vai tiešām ahrivēt šo vienumu?" + }, "edit": { "message": "Labot" }, "view": { "message": "Skatīt" }, + "viewLogin": { + "message": "Apskatīt pieteikšanās vienumu" + }, "noItemsInList": { "message": "Nav vienumu, ko parādīt." }, @@ -602,7 +640,7 @@ "message": "Izdzēst vienumu" }, "viewItem": { - "message": "Skatīt vienumu" + "message": "Apskatīt vienumu" }, "launch": { "message": "Palaist" @@ -695,6 +733,15 @@ "invalidMasterPassword": { "message": "Nederīga galvenā parole" }, + "invalidMasterPasswordConfirmEmailAndHost": { + "message": "Nederīga galvenā parole. Jāpārliecinās, ka e-pasta adrese ir pareiza un konts tika izveidots $HOST$.", + "placeholders": { + "host": { + "content": "$1", + "example": "vault.bitwarden.com" + } + } + }, "vaultTimeout": { "message": "Glabātavas noildze" }, @@ -1177,7 +1224,7 @@ "message": "Pēc savas paroles nomainīšanas būs nepieciešams pieteikties ar jauno paroli. Spēkā esošajās sesijās citās ierīcēs stundas laikā notiks atteikšanās." }, "accountRecoveryUpdateMasterPasswordSubtitle": { - "message": "Jānomaina sava galvenā'parole, lai pabeigtu konta atkopi." + "message": "Jānomaina sava galvenā parole, lai pabeigtu konta atkopi." }, "enableChangedPasswordNotification": { "message": "Vaicāt atjaunināt esošu pieteikšanās vienumu" @@ -1487,7 +1534,7 @@ "description": "Select another two-step login method" }, "useYourRecoveryCode": { - "message": "Izmantot savu atkopes kodu" + "message": "Izmanto savu atkopes kodu" }, "insertU2f": { "message": "Ievieto savu drošības atslēgu datora USB ligzdā! Ja tai ir poga, pieskaries tai!" @@ -1501,6 +1548,15 @@ "readSecurityKey": { "message": "Nolasīt drošības atslēgu" }, + "readingPasskeyLoading": { + "message": "Nolasa piekļuves atslēgu..." + }, + "passkeyAuthenticationFailed": { + "message": "Autentificēšanās ar piekļuves atslēgu neizdevās" + }, + "useADifferentLogInMethod": { + "message": "Jāizmanto cits pieteikšanās veids" + }, "awaitingSecurityKeyInteraction": { "message": "Gaida mijiedarbību ar drošības atslēgu..." }, @@ -1519,11 +1575,8 @@ "selectTwoStepLoginMethod": { "message": "Atlasīt divpakāpju pieteikšanās veidu" }, - "recoveryCodeDesc": { - "message": "Zaudēta piekļuve visiem divpakāpju nodrošinātājiem? Izmanto atkopšanas kodus, lai atspējotu visus sava konta divpakāpju nodrošinātājus!" - }, "recoveryCodeTitle": { - "message": "Atgūšanas kods" + "message": "Atkopes kods" }, "authenticatorAppTitle": { "message": "Autentificētāja lietotne" @@ -1680,9 +1733,6 @@ "defaultAutoFillOnPageLoadDesc": { "message": "Automātisko aizpildi lapas ielādes brīdī atsevišķiem pieteikšanās vienumiem var atslēgt vienuma labošanas skatā." }, - "itemAutoFillOnPageLoad": { - "message": "Automātiski aizpildīt lapas ielādes brīdī (ja iespējots iestatījumos)" - }, "autoFillOnPageLoadUseDefault": { "message": "Izmantot noklusējuma iestatījumu" }, @@ -1754,23 +1804,8 @@ "popup2faCloseMessage": { "message": "Klikšķināšana ārpus uznirstošā loga, lai e-pastā apskatītu apliecinājuma kodu, to aizvērs. Vai atvērt to atsevišķā logā, lai tas netiktu aizvērts?" }, - "popupU2fCloseMessage": { - "message": "Šis pārlūks nevar apstrādāt U2F pieprasījumus šajā uznirstošajā logā. Vai atvērt to atsevišķā logā, lai varētu pieteikties, izmantojot U2F?" - }, - "enableFavicon": { - "message": "Rādīt tīmekļvietņu ikonas" - }, - "faviconDesc": { - "message": "Attēlot atpazīstamu attēlu pie katra pieteikšanās vienuma." - }, - "faviconDescAlt": { - "message": "Parādīt atpazīstamu attēlu pie katra pieteikšanās vienuma. Attiecas uz visiem kontiem, kuros ir notikusi pieteikšanās." - }, - "enableBadgeCounter": { - "message": "Rādīt skaita nozīmīti" - }, - "badgeCounterDesc": { - "message": "Attēlot pašreizējāi tīmekļa vietnei atbilstošo pieteikšanās vienumu skaitu." + "showIconsChangePasswordUrls": { + "message": "Rādīt tīmekļvietņu ikonas un iegūt paroles nomaiņas URL" }, "cardholderName": { "message": "Kartes īpašnieka vārds" @@ -1829,6 +1864,9 @@ "securityCode": { "message": "Drošības kods" }, + "cardNumber": { + "message": "kartes numurs" + }, "ex": { "message": "piem." }, @@ -1931,32 +1969,81 @@ "typeNote": { "message": "Piezīme" }, - "newItemHeader": { - "message": "Jauns/a $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderLogin": { + "message": "Jauns pieteikšanās vienums", + "description": "Header for new login item type" }, - "editItemHeader": { - "message": "Labot $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderCard": { + "message": "Jauna karte", + "description": "Header for new card item type" }, - "viewItemHeader": { - "message": "Apskatīt $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderIdentity": { + "message": "Jauna identitāte", + "description": "Header for new identity item type" + }, + "newItemHeaderNote": { + "message": "Jauna piezīme", + "description": "Header for new note item type" + }, + "newItemHeaderSshKey": { + "message": "Jauna SSH atslēga", + "description": "Header for new SSH key item type" + }, + "newItemHeaderTextSend": { + "message": "Jauns teksta Send", + "description": "Header for new text send" + }, + "newItemHeaderFileSend": { + "message": "Jauns datnes Send", + "description": "Header for new file send" + }, + "editItemHeaderLogin": { + "message": "Labot pieteikšanās vienumu", + "description": "Header for edit login item type" + }, + "editItemHeaderCard": { + "message": "Labot karti", + "description": "Header for edit card item type" + }, + "editItemHeaderIdentity": { + "message": "Labot identitāti", + "description": "Header for edit identity item type" + }, + "editItemHeaderNote": { + "message": "Labot piezīmi", + "description": "Header for edit note item type" + }, + "editItemHeaderSshKey": { + "message": "Labot SSH atslēgu", + "description": "Header for edit SSH key item type" + }, + "editItemHeaderTextSend": { + "message": "Labot teksta Send", + "description": "Header for edit text send" + }, + "editItemHeaderFileSend": { + "message": "Labot datnes Send", + "description": "Header for edit file send" + }, + "viewItemHeaderLogin": { + "message": "Apskatīt pieteikšanās vienumu", + "description": "Header for view login item type" + }, + "viewItemHeaderCard": { + "message": "Apskatīt karti", + "description": "Header for view card item type" + }, + "viewItemHeaderIdentity": { + "message": "Skatīt identitāti", + "description": "Header for view identity item type" + }, + "viewItemHeaderNote": { + "message": "Apskatīt piezīmi", + "description": "Header for view note item type" + }, + "viewItemHeaderSshKey": { + "message": "Apskatīt SSH atslēgu", + "description": "Header for view SSH key item type" }, "passwordHistory": { "message": "Paroļu vēsture" @@ -3129,6 +3216,24 @@ } } }, + "exportingOrganizationVaultFromPasswordManagerWithDataOwnershipDesc": { + "message": "Only the organization vault associated with $ORGANIZATION$ will be exported.", + "placeholders": { + "organization": { + "content": "$1", + "example": "My Org Name" + } + } + }, + "exportingOrganizationVaultFromAdminConsoleWithDataOwnershipDesc": { + "message": "Only the organization vault associated with $ORGANIZATION$ will be exported. My items collections will not be included.", + "placeholders": { + "organization": { + "content": "$1", + "example": "My Org Name" + } + } + }, "error": { "message": "Kļūda" }, @@ -3431,7 +3536,7 @@ "message": "Atkārtoti nosūtīt paziņojumu" }, "viewAllLogInOptions": { - "message": "Skatīt visas pieteikšanās iespējas" + "message": "Apskatīt visas pieteikšanās iespējas" }, "notificationSentDevice": { "message": "Uz ierīci ir nosūtīts paziņojums." @@ -3460,6 +3565,28 @@ "logInRequestSent": { "message": "Pieprasījums nosūtīts" }, + "loginRequestApprovedForEmailOnDevice": { + "message": "$EMAIL$ pieteikšanās pieprasījums apstiprināts $DEVICE$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + }, + "device": { + "content": "$2", + "example": "Web app - Chrome" + } + } + }, + "youDeniedLoginAttemptFromAnotherDevice": { + "message": "Tu noraidīji pieteikšanās mēģinājumu no citas ierīces. Ja tas biji Tu, mēģini pieteikties no ierīces vēlreiz!" + }, + "device": { + "message": "Ierīce" + }, + "loginStatus": { + "message": "Pieteikšanās stāvoklis" + }, "masterPasswordChanged": { "message": "Galvenā parole saglabāta" }, @@ -3496,9 +3623,6 @@ "autofillPageLoadPolicyActivated": { "message": "Tavas apvienības nosacījumos ir ieslēgta automātiskā aizpilde lapas ielādes brīdī." }, - "howToAutofill": { - "message": "Kā automātiski aizpildīt" - }, "autofillSelectInfoWithCommand": { "message": "Jāizvēlas šī skata vienums, jāizmanto īsceļš $COMMAND$ vai iestatījumos jāizpēta citas iespējas.", "placeholders": { @@ -3556,6 +3680,94 @@ "rememberThisDeviceToMakeFutureLoginsSeamless": { "message": "Atcerēties šo ierīci, lai nākotnes pieteikšanos padarītu plūdenāku" }, + "manageDevices": { + "message": "Pārvaldīt ierīces" + }, + "currentSession": { + "message": "Pašreizējā sesija" + }, + "mobile": { + "message": "Tālrunis", + "description": "Mobile app" + }, + "extension": { + "message": "Paplašinājums", + "description": "Browser extension/addon" + }, + "desktop": { + "message": "Darbvirsma", + "description": "Desktop app" + }, + "webVault": { + "message": "Tīmekļa glabātava" + }, + "webApp": { + "message": "Tīmekļa lietotne" + }, + "cli": { + "message": "CLI" + }, + "sdk": { + "message": "SDK", + "description": "Software Development Kit" + }, + "requestPending": { + "message": "Pieprasījums gaida uz apstrādi" + }, + "firstLogin": { + "message": "Pirmā pieteikšanās" + }, + "trusted": { + "message": "Uzticama" + }, + "needsApproval": { + "message": "Nepieciešams apstiprinājums" + }, + "devices": { + "message": "Ierīces" + }, + "accessAttemptBy": { + "message": "$EMAIL$ piekļuves mēģinājums", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + } + } + }, + "confirmAccess": { + "message": "Apstiprināt piekļuvi" + }, + "denyAccess": { + "message": "Noraidīt piekļuvi" + }, + "time": { + "message": "Laiks" + }, + "deviceType": { + "message": "Ierīces veids" + }, + "loginRequest": { + "message": "Pieteikšanās pieprasījums" + }, + "thisRequestIsNoLongerValid": { + "message": "Šis pieprasījums vairs nav derīgs." + }, + "loginRequestHasAlreadyExpired": { + "message": "Pieteikšanās pieprasījuma derīgums jau ir beidzies." + }, + "justNow": { + "message": "Tikko" + }, + "requestedXMinutesAgo": { + "message": "Pieprasīts pirms $MINUTES$ minūtēm", + "placeholders": { + "minutes": { + "content": "$1", + "example": "5" + } + } + }, "deviceApprovalRequired": { "message": "Nepieciešams ierīces apstiprinājums. Zemāk jāatlasa apstiprinājuma iespēja:" }, @@ -3612,7 +3824,7 @@ "description": "European Union" }, "accessDenied": { - "message": "Piekļuve liegta. Nav nepieciešamo atļauju, lai skatītu šo lapu." + "message": "Piekļuve liegta. Nav nepieciešamo atļauju, lai apskatītu šo lapu." }, "general": { "message": "Vispārīgi" @@ -3795,18 +4007,10 @@ "aliasDomain": { "message": "Aizstājdomēns" }, - "passwordRepromptDisabledAutofillOnPageLoad": { - "message": "Vienumus ar galvenās paroles pārvaicāšanu nevar automātiski aizpildīt lapas ielādes brīdī. Automātiskā aizpilde lapas ielādes brīdī ir izslēgta.", - "description": "Toast message for describing that master password re-prompt cannot be autofilled on page load." - }, "autofillOnPageLoadSetToDefault": { "message": "Automātiskā aizpilde lapas ielādes brīdī iestatīta izmantot noklusējuma iestatījumu.", "description": "Toast message for informing the user that autofill on page load has been set to the default setting." }, - "turnOffMasterPasswordPromptToEditField": { - "message": "Jāizslēdz galvenās paroles pārvaicāšana, lai labotu šo lauku", - "description": "Message appearing below the autofill on load message when master password reprompt is set for a vault item." - }, "toggleSideNavigation": { "message": "Pārslēgt sānu pārvietošanās joslu" }, @@ -4015,15 +4219,11 @@ "selectImportCollection": { "message": "Atlasīt krājumu" }, - "importTargetHint": { - "message": "Šī iespēja jāatlasa, ja ir vēlēšanās ievietotās datnes saturu pārvietot uz $DESTINATION$", - "description": "Located as a hint under the import target. Will be appended by either folder or collection, depending if the user is importing into an individual or an organizational vault.", - "placeholders": { - "destination": { - "content": "$1", - "example": "folder or collection" - } - } + "importTargetHintCollection": { + "message": "Šī iespēja jāatlasa, ja ir vēlēšanās ievietotās datnes saturu ievietot krājumā" + }, + "importTargetHintFolder": { + "message": "Šī iespēja jāatlasa, ja ir vēlēšanās ievietotās datnes saturu ievietot mapē" }, "importUnassignedItemsError": { "message": "Datne satur nepiešķirtus vienumus." @@ -4080,9 +4280,6 @@ "passkeyNotCopiedAlert": { "message": "Piekļuves atslēga netiks ievietota klonētajā vienumā. Vai turpināt šī vienuma klonēšanu?" }, - "passkeyFeatureIsNotImplementedForAccountsWithoutMasterPassword": { - "message": "Vietne, kurā tika uzsākta darbība, pieprasa apliecinājumu. Šī iespēja vēl nav īstenota kontiem, kuriem nav galvenās paroles." - }, "logInWithPasskeyQuestion": { "message": "Pieteikties ar piekļuves atslēgu?" }, @@ -4271,7 +4468,7 @@ "description": "Content for dialog which warns a user when selecting 'regular expression' matching strategy as a cipher match strategy" }, "startsWithAdvancedOptionWarning": { - "message": "\"Sākas ar' ir lietpratējiem paredzēta iespēja ar paaugstinātu piekļuves datu atklāšanas bīstamību.", + "message": "“Sākas ar” ir lietpratējiem paredzēta iespēja ar paaugstinātu piekļuves datu atklāšanas bīstamību.", "description": "Content for dialog which warns a user when selecting 'starts with' matching strategy as a cipher match strategy" }, "uriMatchWarningDialogLink": { @@ -4295,7 +4492,7 @@ "description": "Body content for dialog which asks if the user wants to proceed to the Help Center's page about browser password management settings" }, "confirmContinueToHelpCenterKeyboardShortcutsContent": { - "message": "Paplašinājuma īsinājumtaustiņus skatīt un iestatīt var pārlūka iestatījumos.", + "message": "Paplašinājuma īsinājumtaustiņus apskatīt un iestatīt var pārlūka iestatījumos.", "description": "Body content for dialog which asks if the user wants to proceed to the Help Center's page about browser keyboard shortcut settings" }, "confirmContinueToBrowserPasswordManagementSettingsContent": { @@ -4303,7 +4500,7 @@ "description": "Body content for dialog which asks if the user wants to proceed to the browser's password management settings page" }, "confirmContinueToBrowserKeyboardShortcutSettingsContent": { - "message": "Paplašinājuma īsinājumtaustiņus skatīt un iestatīt var pārlūka iestatījumos.", + "message": "Paplašinājuma īsinājumtaustiņus apskatīt un iestatīt var pārlūka iestatījumos.", "description": "Body content for dialog which asks if the user wants to proceed to the browser's keyboard shortcut settings page" }, "overrideDefaultBrowserAutofillTitle": { @@ -4418,7 +4615,7 @@ } }, "viewItemTitle": { - "message": "Skatīt vienumu - $ITEMNAME$", + "message": "Apskatīt vienumu - $ITEMNAME$", "description": "Title for a link that opens a view for an item.", "placeholders": { "itemname": { @@ -4465,17 +4662,17 @@ } } }, - "copyFieldValue": { - "message": "Ievietot starpliktuvē $FIELD$, $VALUE$", + "copyFieldCipherName": { + "message": "Ievietot starpliktuvē $FIELD$, $CIPHERNAME$", "description": "Title for a button that copies a field value to the clipboard.", "placeholders": { "field": { "content": "$1", "example": "Username" }, - "value": { + "ciphername": { "content": "$2", - "example": "Foo" + "example": "Login Item" } } }, @@ -4513,7 +4710,7 @@ "message": "Kļūda mērķa mapes piešķiršanā." }, "viewItemsIn": { - "message": "Skatīt $NAME$ vienumus", + "message": "Apskatīt $NAME$ vienumus", "description": "Button to view the contents of a folder or collection", "placeholders": { "name": { @@ -4768,9 +4965,6 @@ } } }, - "enableAnimations": { - "message": "Iespējot animācijas" - }, "showAnimations": { "message": "Rādīt animācijas" }, @@ -4983,15 +5177,9 @@ "itemLocation": { "message": "Vienuma atrašanās vieta" }, - "fileSend": { - "message": "Datņu Send" - }, "fileSends": { "message": "Datņu Send" }, - "textSend": { - "message": "Teksta Send" - }, "textSends": { "message": "Teksta Send" }, @@ -5001,6 +5189,18 @@ "showNumberOfAutofillSuggestions": { "message": "Paplašinājuma ikonā rādīt pieteikšanās automātiskās aizpildes ieteikumu skaitu" }, + "accountAccessRequested": { + "message": "Pieprasīta piekļuve kontam" + }, + "confirmAccessAttempt": { + "message": "Apstiprināt $EMAIL$ piekļuves mēģinājumu", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + } + } + }, "showQuickCopyActions": { "message": "Glabātavā rādīt ātrās kopēšanas darbības" }, @@ -5040,9 +5240,6 @@ "vaultCustomTimeoutMinimum": { "message": "Mazākā pieļaujamā pielāgotā noildze ir 1 minūte." }, - "additionalContentAvailable": { - "message": "Ir pieejams papildu saturs" - }, "fileSavedToDevice": { "message": "Datne saglabāta ierīcē. Tā ir atrodama ierīces lejupielāžu mapē." }, @@ -5328,6 +5525,12 @@ "changeAtRiskPassword": { "message": "Mainīt riskam pakļautu paroli" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "Šis pieteikšanās vienums ir pakļauts riskam, un tam nav norādīta tīmekļvietne. Lielākai drošībai jāpievieno tīmekļvietne un jānomaina parole." + }, + "missingWebsite": { + "message": "Nav norādīta tīmekļvietne" + }, "settingsVaultOptions": { "message": "Glabātavas iespējas" }, @@ -5376,6 +5579,18 @@ "hasItemsVaultNudgeTitle": { "message": "Laipni lūdzam Tavā glabātavā!" }, + "phishingPageTitle": { + "message": "Pikšķerēšanas tīmekļvietne" + }, + "phishingPageCloseTab": { + "message": "Aizvērt cilni" + }, + "phishingPageContinue": { + "message": "Turpināt" + }, + "phishingPageLearnWhy": { + "message": "Kāpēc šis ir redzams?" + }, "hasItemsVaultNudgeBodyOne": { "message": "Automātiska pašreizējās lapas vienumu aizpildīšana" }, @@ -5451,11 +5666,33 @@ "message": "Vienkārša spēcīgu un neatkārtojamu paroļu izveidošana ar pogu \"Izveidot paroli\", lai palīdzētu uzturēt pieteikšanās vienumus drošus.", "description": "Aria label for the body content of the generator nudge" }, + "aboutThisSetting": { + "message": "Par šo iestatījumu" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden izmantos saglabātos pieteikšanās vienuma URI, lai noteiktu, kuru ikonu vai paroles nomaiņas URL izmantot, lai uzlabotu pieredzi. Šī pakalpojuma izmantošanas laikā nekāda informācija netiek ievākta vai saglabāta." + }, "noPermissionsViewPage": { "message": "Nav atļaujas apskatīt šo lapu. Jāmēģina pieteikties ar citu kontu." }, "wasmNotSupported": { "message": "WebAssembly šajā pārlūkā netiek atbalstīts vai nav iespējots. WebAssebly ir nepieciešams, lai izmantotu Bitwarden lietotni.", "description": "'WebAssembly' is a technical term and should not be translated." + }, + "showMore": { + "message": "Rādīt vairāk" + }, + "showLess": { + "message": "Rādīt mazāk" + }, + "next": { + "message": "Nākamais" + }, + "moreBreadcrumbs": { + "message": "Vairāk norāžu", + "description": "This is used in the context of a breadcrumb navigation, indicating that there are more items in the breadcrumb trail that are not currently displayed." + }, + "confirmKeyConnectorDomain": { + "message": "Apstiprināt Key Connector domēnu" } } diff --git a/apps/browser/src/_locales/ml/messages.json b/apps/browser/src/_locales/ml/messages.json index 7c0050906b0..644a2ef36b2 100644 --- a/apps/browser/src/_locales/ml/messages.json +++ b/apps/browser/src/_locales/ml/messages.json @@ -547,12 +547,50 @@ "searchVault": { "message": "വാൾട് തിരയുക" }, + "resetSearch": { + "message": "Reset search" + }, + "archiveNoun": { + "message": "Archive", + "description": "Noun" + }, + "archiveVerb": { + "message": "Archive", + "description": "Verb" + }, + "unarchive": { + "message": "Unarchive" + }, + "itemsInArchive": { + "message": "Items in archive" + }, + "noItemsInArchive": { + "message": "No items in archive" + }, + "noItemsInArchiveDesc": { + "message": "Archived items will appear here and will be excluded from general search results and autofill suggestions." + }, + "itemSentToArchive": { + "message": "Item sent to archive" + }, + "itemRemovedFromArchive": { + "message": "Item removed from archive" + }, + "archiveItem": { + "message": "Archive item" + }, + "archiveItemConfirmDesc": { + "message": "Archived items are excluded from general search results and autofill suggestions. Are you sure you want to archive this item?" + }, "edit": { "message": "തിരുത്തുക" }, "view": { "message": "കാണുക" }, + "viewLogin": { + "message": "View login" + }, "noItemsInList": { "message": "പ്രദർശിപ്പിക്കാൻ ഇനങ്ങളൊന്നുമില്ല." }, @@ -695,6 +733,15 @@ "invalidMasterPassword": { "message": "അസാധുവായ പ്രാഥമിക പാസ്‌വേഡ്" }, + "invalidMasterPasswordConfirmEmailAndHost": { + "message": "Invalid master password. Confirm your email is correct and your account was created on $HOST$.", + "placeholders": { + "host": { + "content": "$1", + "example": "vault.bitwarden.com" + } + } + }, "vaultTimeout": { "message": "വാൾട് ടൈംഔട്ട്" }, @@ -1501,6 +1548,15 @@ "readSecurityKey": { "message": "Read security key" }, + "readingPasskeyLoading": { + "message": "Reading passkey..." + }, + "passkeyAuthenticationFailed": { + "message": "Passkey authentication failed" + }, + "useADifferentLogInMethod": { + "message": "Use a different log in method" + }, "awaitingSecurityKeyInteraction": { "message": "Awaiting security key interaction..." }, @@ -1519,9 +1575,6 @@ "selectTwoStepLoginMethod": { "message": "Select two-step login method" }, - "recoveryCodeDesc": { - "message": "നിങ്ങളുടെ രണ്ട്-ഘടക ദാതാക്കളിലേക്കുള്ള ആക്‌സസ്സ് നഷ്‌ടപ്പെട്ടോ? നിങ്ങളുടെ അക്കൗണ്ടിൽ നിന്ന് രണ്ട്-ഘടക ദാതാക്കളെ പ്രവർത്തനരഹിതമാക്കാൻ നിങ്ങളുടെ റിക്കവറി കോഡ് ഉപയോഗിക്കുക." - }, "recoveryCodeTitle": { "message": "റിക്കവറി കോഡ്" }, @@ -1680,9 +1733,6 @@ "defaultAutoFillOnPageLoadDesc": { "message": "You can turn off autofill on page load for individual login items from the item's Edit view." }, - "itemAutoFillOnPageLoad": { - "message": "Autofill on page load (if set up in Options)" - }, "autoFillOnPageLoadUseDefault": { "message": "Use default setting" }, @@ -1754,23 +1804,8 @@ "popup2faCloseMessage": { "message": "നിങ്ങളുടെ സ്ഥിരീകരണ കോഡിനായി നിങ്ങളുടെ ഇമെയിൽ പരിശോധിക്കുന്നതിന് പോപ്പ്അപ്പ് വിൻഡോയ്ക്ക് പുറത്ത് ക്ലിക്കുചെയ്യുന്നത് ഈ പോപ്പ്അപ്പ് അടയ്‌ക്കുന്നതിന് കാരണമാകും. ഈ പോപ്പ്അപ്പ് അടയ്‌ക്കാത്തവിധം ഒരു പുതിയ വിൻ‌ഡോയിൽ‌ തുറക്കാൻ‌ നിങ്ങൾ‌ താൽ‌പ്പര്യപ്പെടുന്നോ?" }, - "popupU2fCloseMessage": { - "message": "ഈ ബ്ര pop സറിന് ഈ പോപ്പ്അപ്പ് വിൻഡോയിൽ U2F അഭ്യർത്ഥനകൾ പ്രോസസ്സ് ചെയ്യാൻ കഴിയില്ല. യു 2 എഫ് ഉപയോഗിച്ച് ലോഗിൻ ചെയ്യാൻ ഈ പോപ്പ്അപ്പ് ഒരു പുതിയ വിൻഡോയിൽ തുറക്കാൻ നിങ്ങൾ ആഗ്രഹിക്കുന്നുണ്ടോ?" - }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." - }, - "faviconDescAlt": { - "message": "Show a recognizable image next to each login. Applies to all logged in accounts." - }, - "enableBadgeCounter": { - "message": "Show badge counter" - }, - "badgeCounterDesc": { - "message": "Indicate how many logins you have for the current web page." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "cardholderName": { "message": "കാർഡ് ഉടമയുടെ പേര്" @@ -1829,6 +1864,9 @@ "securityCode": { "message": "സുരക്ഷാ കോഡ്" }, + "cardNumber": { + "message": "card number" + }, "ex": { "message": "ഉദാഹരണം." }, @@ -1931,32 +1969,81 @@ "typeNote": { "message": "Note" }, - "newItemHeader": { - "message": "New $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderLogin": { + "message": "New Login", + "description": "Header for new login item type" }, - "editItemHeader": { - "message": "Edit $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderCard": { + "message": "New Card", + "description": "Header for new card item type" }, - "viewItemHeader": { - "message": "View $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderIdentity": { + "message": "New Identity", + "description": "Header for new identity item type" + }, + "newItemHeaderNote": { + "message": "New Note", + "description": "Header for new note item type" + }, + "newItemHeaderSshKey": { + "message": "New SSH key", + "description": "Header for new SSH key item type" + }, + "newItemHeaderTextSend": { + "message": "New Text Send", + "description": "Header for new text send" + }, + "newItemHeaderFileSend": { + "message": "New File Send", + "description": "Header for new file send" + }, + "editItemHeaderLogin": { + "message": "Edit Login", + "description": "Header for edit login item type" + }, + "editItemHeaderCard": { + "message": "Edit Card", + "description": "Header for edit card item type" + }, + "editItemHeaderIdentity": { + "message": "Edit Identity", + "description": "Header for edit identity item type" + }, + "editItemHeaderNote": { + "message": "Edit Note", + "description": "Header for edit note item type" + }, + "editItemHeaderSshKey": { + "message": "Edit SSH key", + "description": "Header for edit SSH key item type" + }, + "editItemHeaderTextSend": { + "message": "Edit Text Send", + "description": "Header for edit text send" + }, + "editItemHeaderFileSend": { + "message": "Edit File Send", + "description": "Header for edit file send" + }, + "viewItemHeaderLogin": { + "message": "View Login", + "description": "Header for view login item type" + }, + "viewItemHeaderCard": { + "message": "View Card", + "description": "Header for view card item type" + }, + "viewItemHeaderIdentity": { + "message": "View Identity", + "description": "Header for view identity item type" + }, + "viewItemHeaderNote": { + "message": "View Note", + "description": "Header for view note item type" + }, + "viewItemHeaderSshKey": { + "message": "View SSH key", + "description": "Header for view SSH key item type" }, "passwordHistory": { "message": "പാസ്സ്‌വേഡ് നാൾവഴി" @@ -3129,6 +3216,24 @@ } } }, + "exportingOrganizationVaultFromPasswordManagerWithDataOwnershipDesc": { + "message": "Only the organization vault associated with $ORGANIZATION$ will be exported.", + "placeholders": { + "organization": { + "content": "$1", + "example": "My Org Name" + } + } + }, + "exportingOrganizationVaultFromAdminConsoleWithDataOwnershipDesc": { + "message": "Only the organization vault associated with $ORGANIZATION$ will be exported. My items collections will not be included.", + "placeholders": { + "organization": { + "content": "$1", + "example": "My Org Name" + } + } + }, "error": { "message": "Error" }, @@ -3460,6 +3565,28 @@ "logInRequestSent": { "message": "Request sent" }, + "loginRequestApprovedForEmailOnDevice": { + "message": "Login request approved for $EMAIL$ on $DEVICE$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + }, + "device": { + "content": "$2", + "example": "Web app - Chrome" + } + } + }, + "youDeniedLoginAttemptFromAnotherDevice": { + "message": "You denied a login attempt from another device. If this was you, try to log in with the device again." + }, + "device": { + "message": "Device" + }, + "loginStatus": { + "message": "Login status" + }, "masterPasswordChanged": { "message": "Master password saved" }, @@ -3496,9 +3623,6 @@ "autofillPageLoadPolicyActivated": { "message": "Your organization policies have turned on autofill on page load." }, - "howToAutofill": { - "message": "How to autofill" - }, "autofillSelectInfoWithCommand": { "message": "Select an item from this screen, use the shortcut $COMMAND$, or explore other options in settings.", "placeholders": { @@ -3556,6 +3680,94 @@ "rememberThisDeviceToMakeFutureLoginsSeamless": { "message": "Remember this device to make future logins seamless" }, + "manageDevices": { + "message": "Manage devices" + }, + "currentSession": { + "message": "Current session" + }, + "mobile": { + "message": "Mobile", + "description": "Mobile app" + }, + "extension": { + "message": "Extension", + "description": "Browser extension/addon" + }, + "desktop": { + "message": "Desktop", + "description": "Desktop app" + }, + "webVault": { + "message": "Web vault" + }, + "webApp": { + "message": "Web app" + }, + "cli": { + "message": "CLI" + }, + "sdk": { + "message": "SDK", + "description": "Software Development Kit" + }, + "requestPending": { + "message": "Request pending" + }, + "firstLogin": { + "message": "First login" + }, + "trusted": { + "message": "Trusted" + }, + "needsApproval": { + "message": "Needs approval" + }, + "devices": { + "message": "Devices" + }, + "accessAttemptBy": { + "message": "Access attempt by $EMAIL$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + } + } + }, + "confirmAccess": { + "message": "Confirm access" + }, + "denyAccess": { + "message": "Deny access" + }, + "time": { + "message": "Time" + }, + "deviceType": { + "message": "Device Type" + }, + "loginRequest": { + "message": "Login request" + }, + "thisRequestIsNoLongerValid": { + "message": "This request is no longer valid." + }, + "loginRequestHasAlreadyExpired": { + "message": "Login request has already expired." + }, + "justNow": { + "message": "Just now" + }, + "requestedXMinutesAgo": { + "message": "Requested $MINUTES$ minutes ago", + "placeholders": { + "minutes": { + "content": "$1", + "example": "5" + } + } + }, "deviceApprovalRequired": { "message": "Device approval required. Select an approval option below:" }, @@ -3795,18 +4007,10 @@ "aliasDomain": { "message": "Alias domain" }, - "passwordRepromptDisabledAutofillOnPageLoad": { - "message": "Items with master password re-prompt cannot be autofilled on page load. Autofill on page load turned off.", - "description": "Toast message for describing that master password re-prompt cannot be autofilled on page load." - }, "autofillOnPageLoadSetToDefault": { "message": "Autofill on page load set to use default setting.", "description": "Toast message for informing the user that autofill on page load has been set to the default setting." }, - "turnOffMasterPasswordPromptToEditField": { - "message": "Turn off master password re-prompt to edit this field", - "description": "Message appearing below the autofill on load message when master password reprompt is set for a vault item." - }, "toggleSideNavigation": { "message": "Toggle side navigation" }, @@ -4015,15 +4219,11 @@ "selectImportCollection": { "message": "Select a collection" }, - "importTargetHint": { - "message": "Select this option if you want the imported file contents moved to a $DESTINATION$", - "description": "Located as a hint under the import target. Will be appended by either folder or collection, depending if the user is importing into an individual or an organizational vault.", - "placeholders": { - "destination": { - "content": "$1", - "example": "folder or collection" - } - } + "importTargetHintCollection": { + "message": "Select this option if you want the imported file contents moved to a collection" + }, + "importTargetHintFolder": { + "message": "Select this option if you want the imported file contents moved to a folder" }, "importUnassignedItemsError": { "message": "File contains unassigned items." @@ -4080,9 +4280,6 @@ "passkeyNotCopiedAlert": { "message": "The passkey will not be copied to the cloned item. Do you want to continue cloning this item?" }, - "passkeyFeatureIsNotImplementedForAccountsWithoutMasterPassword": { - "message": "Verification required by the initiating site. This feature is not yet implemented for accounts without master password." - }, "logInWithPasskeyQuestion": { "message": "Log in with passkey?" }, @@ -4465,17 +4662,17 @@ } } }, - "copyFieldValue": { - "message": "Copy $FIELD$, $VALUE$", + "copyFieldCipherName": { + "message": "Copy $FIELD$, $CIPHERNAME$", "description": "Title for a button that copies a field value to the clipboard.", "placeholders": { "field": { "content": "$1", "example": "Username" }, - "value": { + "ciphername": { "content": "$2", - "example": "Foo" + "example": "Login Item" } } }, @@ -4768,9 +4965,6 @@ } } }, - "enableAnimations": { - "message": "Enable animations" - }, "showAnimations": { "message": "Show animations" }, @@ -4983,15 +5177,9 @@ "itemLocation": { "message": "Item Location" }, - "fileSend": { - "message": "File Send" - }, "fileSends": { "message": "File Sends" }, - "textSend": { - "message": "Text Send" - }, "textSends": { "message": "Text Sends" }, @@ -5001,6 +5189,18 @@ "showNumberOfAutofillSuggestions": { "message": "Show number of login autofill suggestions on extension icon" }, + "accountAccessRequested": { + "message": "Account access requested" + }, + "confirmAccessAttempt": { + "message": "Confirm access attempt for $EMAIL$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + } + } + }, "showQuickCopyActions": { "message": "Show quick copy actions on Vault" }, @@ -5040,9 +5240,6 @@ "vaultCustomTimeoutMinimum": { "message": "Minimum custom timeout is 1 minute." }, - "additionalContentAvailable": { - "message": "Additional content is available" - }, "fileSavedToDevice": { "message": "File saved to device. Manage from your device downloads." }, @@ -5328,6 +5525,12 @@ "changeAtRiskPassword": { "message": "Change at-risk password" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "This login is at-risk and missing a website. Add a website and change the password for stronger security." + }, + "missingWebsite": { + "message": "Missing website" + }, "settingsVaultOptions": { "message": "Vault options" }, @@ -5376,6 +5579,18 @@ "hasItemsVaultNudgeTitle": { "message": "Welcome to your vault!" }, + "phishingPageTitle": { + "message": "Phishing website" + }, + "phishingPageCloseTab": { + "message": "Close tab" + }, + "phishingPageContinue": { + "message": "Continue" + }, + "phishingPageLearnWhy": { + "message": "Why are you seeing this?" + }, "hasItemsVaultNudgeBodyOne": { "message": "Autofill items for the current page" }, @@ -5451,11 +5666,33 @@ "message": "Easily create strong and unique passwords by clicking on the Generate password button to help you keep your logins secure.", "description": "Aria label for the body content of the generator nudge" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "noPermissionsViewPage": { "message": "You do not have permissions to view this page. Try logging in with a different account." }, "wasmNotSupported": { "message": "WebAssembly is not supported on your browser or is not enabled. WebAssembly is required to use the Bitwarden app.", "description": "'WebAssembly' is a technical term and should not be translated." + }, + "showMore": { + "message": "Show more" + }, + "showLess": { + "message": "Show less" + }, + "next": { + "message": "Next" + }, + "moreBreadcrumbs": { + "message": "More breadcrumbs", + "description": "This is used in the context of a breadcrumb navigation, indicating that there are more items in the breadcrumb trail that are not currently displayed." + }, + "confirmKeyConnectorDomain": { + "message": "Confirm Key Connector domain" } } diff --git a/apps/browser/src/_locales/mr/messages.json b/apps/browser/src/_locales/mr/messages.json index feb3377a2f1..b5d78c14b58 100644 --- a/apps/browser/src/_locales/mr/messages.json +++ b/apps/browser/src/_locales/mr/messages.json @@ -547,12 +547,50 @@ "searchVault": { "message": "तिजोरीत शोधा" }, + "resetSearch": { + "message": "Reset search" + }, + "archiveNoun": { + "message": "Archive", + "description": "Noun" + }, + "archiveVerb": { + "message": "Archive", + "description": "Verb" + }, + "unarchive": { + "message": "Unarchive" + }, + "itemsInArchive": { + "message": "Items in archive" + }, + "noItemsInArchive": { + "message": "No items in archive" + }, + "noItemsInArchiveDesc": { + "message": "Archived items will appear here and will be excluded from general search results and autofill suggestions." + }, + "itemSentToArchive": { + "message": "Item sent to archive" + }, + "itemRemovedFromArchive": { + "message": "Item removed from archive" + }, + "archiveItem": { + "message": "Archive item" + }, + "archiveItemConfirmDesc": { + "message": "Archived items are excluded from general search results and autofill suggestions. Are you sure you want to archive this item?" + }, "edit": { "message": "Edit" }, "view": { "message": "View" }, + "viewLogin": { + "message": "View login" + }, "noItemsInList": { "message": "There are no items to list." }, @@ -695,6 +733,15 @@ "invalidMasterPassword": { "message": "अवैध मुख्य पासवर्ड" }, + "invalidMasterPasswordConfirmEmailAndHost": { + "message": "Invalid master password. Confirm your email is correct and your account was created on $HOST$.", + "placeholders": { + "host": { + "content": "$1", + "example": "vault.bitwarden.com" + } + } + }, "vaultTimeout": { "message": "Vault timeout" }, @@ -1501,6 +1548,15 @@ "readSecurityKey": { "message": "Read security key" }, + "readingPasskeyLoading": { + "message": "Reading passkey..." + }, + "passkeyAuthenticationFailed": { + "message": "Passkey authentication failed" + }, + "useADifferentLogInMethod": { + "message": "Use a different log in method" + }, "awaitingSecurityKeyInteraction": { "message": "Awaiting security key interaction..." }, @@ -1519,9 +1575,6 @@ "selectTwoStepLoginMethod": { "message": "Select two-step login method" }, - "recoveryCodeDesc": { - "message": "Lost access to all of your two-factor providers? Use your recovery code to turn off all two-factor providers from your account." - }, "recoveryCodeTitle": { "message": "Recovery code" }, @@ -1680,9 +1733,6 @@ "defaultAutoFillOnPageLoadDesc": { "message": "You can turn off autofill on page load for individual login items from the item's Edit view." }, - "itemAutoFillOnPageLoad": { - "message": "Autofill on page load (if set up in Options)" - }, "autoFillOnPageLoadUseDefault": { "message": "Use default setting" }, @@ -1754,23 +1804,8 @@ "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?" }, - "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?" - }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." - }, - "faviconDescAlt": { - "message": "Show a recognizable image next to each login. Applies to all logged in accounts." - }, - "enableBadgeCounter": { - "message": "Show badge counter" - }, - "badgeCounterDesc": { - "message": "Indicate how many logins you have for the current web page." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "cardholderName": { "message": "Cardholder name" @@ -1829,6 +1864,9 @@ "securityCode": { "message": "Security code" }, + "cardNumber": { + "message": "card number" + }, "ex": { "message": "ex." }, @@ -1931,32 +1969,81 @@ "typeNote": { "message": "Note" }, - "newItemHeader": { - "message": "New $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderLogin": { + "message": "New Login", + "description": "Header for new login item type" }, - "editItemHeader": { - "message": "Edit $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderCard": { + "message": "New Card", + "description": "Header for new card item type" }, - "viewItemHeader": { - "message": "View $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderIdentity": { + "message": "New Identity", + "description": "Header for new identity item type" + }, + "newItemHeaderNote": { + "message": "New Note", + "description": "Header for new note item type" + }, + "newItemHeaderSshKey": { + "message": "New SSH key", + "description": "Header for new SSH key item type" + }, + "newItemHeaderTextSend": { + "message": "New Text Send", + "description": "Header for new text send" + }, + "newItemHeaderFileSend": { + "message": "New File Send", + "description": "Header for new file send" + }, + "editItemHeaderLogin": { + "message": "Edit Login", + "description": "Header for edit login item type" + }, + "editItemHeaderCard": { + "message": "Edit Card", + "description": "Header for edit card item type" + }, + "editItemHeaderIdentity": { + "message": "Edit Identity", + "description": "Header for edit identity item type" + }, + "editItemHeaderNote": { + "message": "Edit Note", + "description": "Header for edit note item type" + }, + "editItemHeaderSshKey": { + "message": "Edit SSH key", + "description": "Header for edit SSH key item type" + }, + "editItemHeaderTextSend": { + "message": "Edit Text Send", + "description": "Header for edit text send" + }, + "editItemHeaderFileSend": { + "message": "Edit File Send", + "description": "Header for edit file send" + }, + "viewItemHeaderLogin": { + "message": "View Login", + "description": "Header for view login item type" + }, + "viewItemHeaderCard": { + "message": "View Card", + "description": "Header for view card item type" + }, + "viewItemHeaderIdentity": { + "message": "View Identity", + "description": "Header for view identity item type" + }, + "viewItemHeaderNote": { + "message": "View Note", + "description": "Header for view note item type" + }, + "viewItemHeaderSshKey": { + "message": "View SSH key", + "description": "Header for view SSH key item type" }, "passwordHistory": { "message": "Password history" @@ -3129,6 +3216,24 @@ } } }, + "exportingOrganizationVaultFromPasswordManagerWithDataOwnershipDesc": { + "message": "Only the organization vault associated with $ORGANIZATION$ will be exported.", + "placeholders": { + "organization": { + "content": "$1", + "example": "My Org Name" + } + } + }, + "exportingOrganizationVaultFromAdminConsoleWithDataOwnershipDesc": { + "message": "Only the organization vault associated with $ORGANIZATION$ will be exported. My items collections will not be included.", + "placeholders": { + "organization": { + "content": "$1", + "example": "My Org Name" + } + } + }, "error": { "message": "Error" }, @@ -3460,6 +3565,28 @@ "logInRequestSent": { "message": "Request sent" }, + "loginRequestApprovedForEmailOnDevice": { + "message": "Login request approved for $EMAIL$ on $DEVICE$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + }, + "device": { + "content": "$2", + "example": "Web app - Chrome" + } + } + }, + "youDeniedLoginAttemptFromAnotherDevice": { + "message": "You denied a login attempt from another device. If this was you, try to log in with the device again." + }, + "device": { + "message": "Device" + }, + "loginStatus": { + "message": "Login status" + }, "masterPasswordChanged": { "message": "Master password saved" }, @@ -3496,9 +3623,6 @@ "autofillPageLoadPolicyActivated": { "message": "Your organization policies have turned on autofill on page load." }, - "howToAutofill": { - "message": "How to autofill" - }, "autofillSelectInfoWithCommand": { "message": "Select an item from this screen, use the shortcut $COMMAND$, or explore other options in settings.", "placeholders": { @@ -3556,6 +3680,94 @@ "rememberThisDeviceToMakeFutureLoginsSeamless": { "message": "Remember this device to make future logins seamless" }, + "manageDevices": { + "message": "Manage devices" + }, + "currentSession": { + "message": "Current session" + }, + "mobile": { + "message": "Mobile", + "description": "Mobile app" + }, + "extension": { + "message": "Extension", + "description": "Browser extension/addon" + }, + "desktop": { + "message": "Desktop", + "description": "Desktop app" + }, + "webVault": { + "message": "Web vault" + }, + "webApp": { + "message": "Web app" + }, + "cli": { + "message": "CLI" + }, + "sdk": { + "message": "SDK", + "description": "Software Development Kit" + }, + "requestPending": { + "message": "Request pending" + }, + "firstLogin": { + "message": "First login" + }, + "trusted": { + "message": "Trusted" + }, + "needsApproval": { + "message": "Needs approval" + }, + "devices": { + "message": "Devices" + }, + "accessAttemptBy": { + "message": "Access attempt by $EMAIL$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + } + } + }, + "confirmAccess": { + "message": "Confirm access" + }, + "denyAccess": { + "message": "Deny access" + }, + "time": { + "message": "Time" + }, + "deviceType": { + "message": "Device Type" + }, + "loginRequest": { + "message": "Login request" + }, + "thisRequestIsNoLongerValid": { + "message": "This request is no longer valid." + }, + "loginRequestHasAlreadyExpired": { + "message": "Login request has already expired." + }, + "justNow": { + "message": "Just now" + }, + "requestedXMinutesAgo": { + "message": "Requested $MINUTES$ minutes ago", + "placeholders": { + "minutes": { + "content": "$1", + "example": "5" + } + } + }, "deviceApprovalRequired": { "message": "Device approval required. Select an approval option below:" }, @@ -3795,18 +4007,10 @@ "aliasDomain": { "message": "Alias domain" }, - "passwordRepromptDisabledAutofillOnPageLoad": { - "message": "Items with master password re-prompt cannot be autofilled on page load. Autofill on page load turned off.", - "description": "Toast message for describing that master password re-prompt cannot be autofilled on page load." - }, "autofillOnPageLoadSetToDefault": { "message": "Autofill on page load set to use default setting.", "description": "Toast message for informing the user that autofill on page load has been set to the default setting." }, - "turnOffMasterPasswordPromptToEditField": { - "message": "Turn off master password re-prompt to edit this field", - "description": "Message appearing below the autofill on load message when master password reprompt is set for a vault item." - }, "toggleSideNavigation": { "message": "Toggle side navigation" }, @@ -4015,15 +4219,11 @@ "selectImportCollection": { "message": "Select a collection" }, - "importTargetHint": { - "message": "Select this option if you want the imported file contents moved to a $DESTINATION$", - "description": "Located as a hint under the import target. Will be appended by either folder or collection, depending if the user is importing into an individual or an organizational vault.", - "placeholders": { - "destination": { - "content": "$1", - "example": "folder or collection" - } - } + "importTargetHintCollection": { + "message": "Select this option if you want the imported file contents moved to a collection" + }, + "importTargetHintFolder": { + "message": "Select this option if you want the imported file contents moved to a folder" }, "importUnassignedItemsError": { "message": "File contains unassigned items." @@ -4080,9 +4280,6 @@ "passkeyNotCopiedAlert": { "message": "The passkey will not be copied to the cloned item. Do you want to continue cloning this item?" }, - "passkeyFeatureIsNotImplementedForAccountsWithoutMasterPassword": { - "message": "Verification required by the initiating site. This feature is not yet implemented for accounts without master password." - }, "logInWithPasskeyQuestion": { "message": "Log in with passkey?" }, @@ -4465,17 +4662,17 @@ } } }, - "copyFieldValue": { - "message": "Copy $FIELD$, $VALUE$", + "copyFieldCipherName": { + "message": "Copy $FIELD$, $CIPHERNAME$", "description": "Title for a button that copies a field value to the clipboard.", "placeholders": { "field": { "content": "$1", "example": "Username" }, - "value": { + "ciphername": { "content": "$2", - "example": "Foo" + "example": "Login Item" } } }, @@ -4768,9 +4965,6 @@ } } }, - "enableAnimations": { - "message": "Enable animations" - }, "showAnimations": { "message": "Show animations" }, @@ -4983,15 +5177,9 @@ "itemLocation": { "message": "Item Location" }, - "fileSend": { - "message": "File Send" - }, "fileSends": { "message": "File Sends" }, - "textSend": { - "message": "Text Send" - }, "textSends": { "message": "Text Sends" }, @@ -5001,6 +5189,18 @@ "showNumberOfAutofillSuggestions": { "message": "Show number of login autofill suggestions on extension icon" }, + "accountAccessRequested": { + "message": "Account access requested" + }, + "confirmAccessAttempt": { + "message": "Confirm access attempt for $EMAIL$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + } + } + }, "showQuickCopyActions": { "message": "Show quick copy actions on Vault" }, @@ -5040,9 +5240,6 @@ "vaultCustomTimeoutMinimum": { "message": "Minimum custom timeout is 1 minute." }, - "additionalContentAvailable": { - "message": "Additional content is available" - }, "fileSavedToDevice": { "message": "File saved to device. Manage from your device downloads." }, @@ -5328,6 +5525,12 @@ "changeAtRiskPassword": { "message": "Change at-risk password" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "This login is at-risk and missing a website. Add a website and change the password for stronger security." + }, + "missingWebsite": { + "message": "Missing website" + }, "settingsVaultOptions": { "message": "Vault options" }, @@ -5376,6 +5579,18 @@ "hasItemsVaultNudgeTitle": { "message": "Welcome to your vault!" }, + "phishingPageTitle": { + "message": "Phishing website" + }, + "phishingPageCloseTab": { + "message": "Close tab" + }, + "phishingPageContinue": { + "message": "Continue" + }, + "phishingPageLearnWhy": { + "message": "Why are you seeing this?" + }, "hasItemsVaultNudgeBodyOne": { "message": "Autofill items for the current page" }, @@ -5451,11 +5666,33 @@ "message": "Easily create strong and unique passwords by clicking on the Generate password button to help you keep your logins secure.", "description": "Aria label for the body content of the generator nudge" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "noPermissionsViewPage": { "message": "You do not have permissions to view this page. Try logging in with a different account." }, "wasmNotSupported": { "message": "WebAssembly is not supported on your browser or is not enabled. WebAssembly is required to use the Bitwarden app.", "description": "'WebAssembly' is a technical term and should not be translated." + }, + "showMore": { + "message": "Show more" + }, + "showLess": { + "message": "Show less" + }, + "next": { + "message": "Next" + }, + "moreBreadcrumbs": { + "message": "More breadcrumbs", + "description": "This is used in the context of a breadcrumb navigation, indicating that there are more items in the breadcrumb trail that are not currently displayed." + }, + "confirmKeyConnectorDomain": { + "message": "Confirm Key Connector domain" } } diff --git a/apps/browser/src/_locales/my/messages.json b/apps/browser/src/_locales/my/messages.json index ecc7da63e79..6180d490f09 100644 --- a/apps/browser/src/_locales/my/messages.json +++ b/apps/browser/src/_locales/my/messages.json @@ -547,12 +547,50 @@ "searchVault": { "message": "Search vault" }, + "resetSearch": { + "message": "Reset search" + }, + "archiveNoun": { + "message": "Archive", + "description": "Noun" + }, + "archiveVerb": { + "message": "Archive", + "description": "Verb" + }, + "unarchive": { + "message": "Unarchive" + }, + "itemsInArchive": { + "message": "Items in archive" + }, + "noItemsInArchive": { + "message": "No items in archive" + }, + "noItemsInArchiveDesc": { + "message": "Archived items will appear here and will be excluded from general search results and autofill suggestions." + }, + "itemSentToArchive": { + "message": "Item sent to archive" + }, + "itemRemovedFromArchive": { + "message": "Item removed from archive" + }, + "archiveItem": { + "message": "Archive item" + }, + "archiveItemConfirmDesc": { + "message": "Archived items are excluded from general search results and autofill suggestions. Are you sure you want to archive this item?" + }, "edit": { "message": "Edit" }, "view": { "message": "View" }, + "viewLogin": { + "message": "View login" + }, "noItemsInList": { "message": "There are no items to list." }, @@ -695,6 +733,15 @@ "invalidMasterPassword": { "message": "Invalid master password" }, + "invalidMasterPasswordConfirmEmailAndHost": { + "message": "Invalid master password. Confirm your email is correct and your account was created on $HOST$.", + "placeholders": { + "host": { + "content": "$1", + "example": "vault.bitwarden.com" + } + } + }, "vaultTimeout": { "message": "Vault timeout" }, @@ -1501,6 +1548,15 @@ "readSecurityKey": { "message": "Read security key" }, + "readingPasskeyLoading": { + "message": "Reading passkey..." + }, + "passkeyAuthenticationFailed": { + "message": "Passkey authentication failed" + }, + "useADifferentLogInMethod": { + "message": "Use a different log in method" + }, "awaitingSecurityKeyInteraction": { "message": "Awaiting security key interaction..." }, @@ -1519,9 +1575,6 @@ "selectTwoStepLoginMethod": { "message": "Select two-step login method" }, - "recoveryCodeDesc": { - "message": "Lost access to all of your two-factor providers? Use your recovery code to turn off all two-factor providers from your account." - }, "recoveryCodeTitle": { "message": "Recovery code" }, @@ -1680,9 +1733,6 @@ "defaultAutoFillOnPageLoadDesc": { "message": "You can turn off autofill on page load for individual login items from the item's Edit view." }, - "itemAutoFillOnPageLoad": { - "message": "Autofill on page load (if set up in Options)" - }, "autoFillOnPageLoadUseDefault": { "message": "Use default setting" }, @@ -1754,23 +1804,8 @@ "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?" }, - "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?" - }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." - }, - "faviconDescAlt": { - "message": "Show a recognizable image next to each login. Applies to all logged in accounts." - }, - "enableBadgeCounter": { - "message": "Show badge counter" - }, - "badgeCounterDesc": { - "message": "Indicate how many logins you have for the current web page." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "cardholderName": { "message": "Cardholder name" @@ -1829,6 +1864,9 @@ "securityCode": { "message": "Security code" }, + "cardNumber": { + "message": "card number" + }, "ex": { "message": "ex." }, @@ -1931,32 +1969,81 @@ "typeNote": { "message": "Note" }, - "newItemHeader": { - "message": "New $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderLogin": { + "message": "New Login", + "description": "Header for new login item type" }, - "editItemHeader": { - "message": "Edit $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderCard": { + "message": "New Card", + "description": "Header for new card item type" }, - "viewItemHeader": { - "message": "View $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderIdentity": { + "message": "New Identity", + "description": "Header for new identity item type" + }, + "newItemHeaderNote": { + "message": "New Note", + "description": "Header for new note item type" + }, + "newItemHeaderSshKey": { + "message": "New SSH key", + "description": "Header for new SSH key item type" + }, + "newItemHeaderTextSend": { + "message": "New Text Send", + "description": "Header for new text send" + }, + "newItemHeaderFileSend": { + "message": "New File Send", + "description": "Header for new file send" + }, + "editItemHeaderLogin": { + "message": "Edit Login", + "description": "Header for edit login item type" + }, + "editItemHeaderCard": { + "message": "Edit Card", + "description": "Header for edit card item type" + }, + "editItemHeaderIdentity": { + "message": "Edit Identity", + "description": "Header for edit identity item type" + }, + "editItemHeaderNote": { + "message": "Edit Note", + "description": "Header for edit note item type" + }, + "editItemHeaderSshKey": { + "message": "Edit SSH key", + "description": "Header for edit SSH key item type" + }, + "editItemHeaderTextSend": { + "message": "Edit Text Send", + "description": "Header for edit text send" + }, + "editItemHeaderFileSend": { + "message": "Edit File Send", + "description": "Header for edit file send" + }, + "viewItemHeaderLogin": { + "message": "View Login", + "description": "Header for view login item type" + }, + "viewItemHeaderCard": { + "message": "View Card", + "description": "Header for view card item type" + }, + "viewItemHeaderIdentity": { + "message": "View Identity", + "description": "Header for view identity item type" + }, + "viewItemHeaderNote": { + "message": "View Note", + "description": "Header for view note item type" + }, + "viewItemHeaderSshKey": { + "message": "View SSH key", + "description": "Header for view SSH key item type" }, "passwordHistory": { "message": "Password history" @@ -3129,6 +3216,24 @@ } } }, + "exportingOrganizationVaultFromPasswordManagerWithDataOwnershipDesc": { + "message": "Only the organization vault associated with $ORGANIZATION$ will be exported.", + "placeholders": { + "organization": { + "content": "$1", + "example": "My Org Name" + } + } + }, + "exportingOrganizationVaultFromAdminConsoleWithDataOwnershipDesc": { + "message": "Only the organization vault associated with $ORGANIZATION$ will be exported. My items collections will not be included.", + "placeholders": { + "organization": { + "content": "$1", + "example": "My Org Name" + } + } + }, "error": { "message": "Error" }, @@ -3460,6 +3565,28 @@ "logInRequestSent": { "message": "Request sent" }, + "loginRequestApprovedForEmailOnDevice": { + "message": "Login request approved for $EMAIL$ on $DEVICE$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + }, + "device": { + "content": "$2", + "example": "Web app - Chrome" + } + } + }, + "youDeniedLoginAttemptFromAnotherDevice": { + "message": "You denied a login attempt from another device. If this was you, try to log in with the device again." + }, + "device": { + "message": "Device" + }, + "loginStatus": { + "message": "Login status" + }, "masterPasswordChanged": { "message": "Master password saved" }, @@ -3496,9 +3623,6 @@ "autofillPageLoadPolicyActivated": { "message": "Your organization policies have turned on autofill on page load." }, - "howToAutofill": { - "message": "How to autofill" - }, "autofillSelectInfoWithCommand": { "message": "Select an item from this screen, use the shortcut $COMMAND$, or explore other options in settings.", "placeholders": { @@ -3556,6 +3680,94 @@ "rememberThisDeviceToMakeFutureLoginsSeamless": { "message": "Remember this device to make future logins seamless" }, + "manageDevices": { + "message": "Manage devices" + }, + "currentSession": { + "message": "Current session" + }, + "mobile": { + "message": "Mobile", + "description": "Mobile app" + }, + "extension": { + "message": "Extension", + "description": "Browser extension/addon" + }, + "desktop": { + "message": "Desktop", + "description": "Desktop app" + }, + "webVault": { + "message": "Web vault" + }, + "webApp": { + "message": "Web app" + }, + "cli": { + "message": "CLI" + }, + "sdk": { + "message": "SDK", + "description": "Software Development Kit" + }, + "requestPending": { + "message": "Request pending" + }, + "firstLogin": { + "message": "First login" + }, + "trusted": { + "message": "Trusted" + }, + "needsApproval": { + "message": "Needs approval" + }, + "devices": { + "message": "Devices" + }, + "accessAttemptBy": { + "message": "Access attempt by $EMAIL$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + } + } + }, + "confirmAccess": { + "message": "Confirm access" + }, + "denyAccess": { + "message": "Deny access" + }, + "time": { + "message": "Time" + }, + "deviceType": { + "message": "Device Type" + }, + "loginRequest": { + "message": "Login request" + }, + "thisRequestIsNoLongerValid": { + "message": "This request is no longer valid." + }, + "loginRequestHasAlreadyExpired": { + "message": "Login request has already expired." + }, + "justNow": { + "message": "Just now" + }, + "requestedXMinutesAgo": { + "message": "Requested $MINUTES$ minutes ago", + "placeholders": { + "minutes": { + "content": "$1", + "example": "5" + } + } + }, "deviceApprovalRequired": { "message": "Device approval required. Select an approval option below:" }, @@ -3795,18 +4007,10 @@ "aliasDomain": { "message": "Alias domain" }, - "passwordRepromptDisabledAutofillOnPageLoad": { - "message": "Items with master password re-prompt cannot be autofilled on page load. Autofill on page load turned off.", - "description": "Toast message for describing that master password re-prompt cannot be autofilled on page load." - }, "autofillOnPageLoadSetToDefault": { "message": "Autofill on page load set to use default setting.", "description": "Toast message for informing the user that autofill on page load has been set to the default setting." }, - "turnOffMasterPasswordPromptToEditField": { - "message": "Turn off master password re-prompt to edit this field", - "description": "Message appearing below the autofill on load message when master password reprompt is set for a vault item." - }, "toggleSideNavigation": { "message": "Toggle side navigation" }, @@ -4015,15 +4219,11 @@ "selectImportCollection": { "message": "Select a collection" }, - "importTargetHint": { - "message": "Select this option if you want the imported file contents moved to a $DESTINATION$", - "description": "Located as a hint under the import target. Will be appended by either folder or collection, depending if the user is importing into an individual or an organizational vault.", - "placeholders": { - "destination": { - "content": "$1", - "example": "folder or collection" - } - } + "importTargetHintCollection": { + "message": "Select this option if you want the imported file contents moved to a collection" + }, + "importTargetHintFolder": { + "message": "Select this option if you want the imported file contents moved to a folder" }, "importUnassignedItemsError": { "message": "File contains unassigned items." @@ -4080,9 +4280,6 @@ "passkeyNotCopiedAlert": { "message": "The passkey will not be copied to the cloned item. Do you want to continue cloning this item?" }, - "passkeyFeatureIsNotImplementedForAccountsWithoutMasterPassword": { - "message": "Verification required by the initiating site. This feature is not yet implemented for accounts without master password." - }, "logInWithPasskeyQuestion": { "message": "Log in with passkey?" }, @@ -4465,17 +4662,17 @@ } } }, - "copyFieldValue": { - "message": "Copy $FIELD$, $VALUE$", + "copyFieldCipherName": { + "message": "Copy $FIELD$, $CIPHERNAME$", "description": "Title for a button that copies a field value to the clipboard.", "placeholders": { "field": { "content": "$1", "example": "Username" }, - "value": { + "ciphername": { "content": "$2", - "example": "Foo" + "example": "Login Item" } } }, @@ -4768,9 +4965,6 @@ } } }, - "enableAnimations": { - "message": "Enable animations" - }, "showAnimations": { "message": "Show animations" }, @@ -4983,15 +5177,9 @@ "itemLocation": { "message": "Item Location" }, - "fileSend": { - "message": "File Send" - }, "fileSends": { "message": "File Sends" }, - "textSend": { - "message": "Text Send" - }, "textSends": { "message": "Text Sends" }, @@ -5001,6 +5189,18 @@ "showNumberOfAutofillSuggestions": { "message": "Show number of login autofill suggestions on extension icon" }, + "accountAccessRequested": { + "message": "Account access requested" + }, + "confirmAccessAttempt": { + "message": "Confirm access attempt for $EMAIL$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + } + } + }, "showQuickCopyActions": { "message": "Show quick copy actions on Vault" }, @@ -5040,9 +5240,6 @@ "vaultCustomTimeoutMinimum": { "message": "Minimum custom timeout is 1 minute." }, - "additionalContentAvailable": { - "message": "Additional content is available" - }, "fileSavedToDevice": { "message": "File saved to device. Manage from your device downloads." }, @@ -5328,6 +5525,12 @@ "changeAtRiskPassword": { "message": "Change at-risk password" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "This login is at-risk and missing a website. Add a website and change the password for stronger security." + }, + "missingWebsite": { + "message": "Missing website" + }, "settingsVaultOptions": { "message": "Vault options" }, @@ -5376,6 +5579,18 @@ "hasItemsVaultNudgeTitle": { "message": "Welcome to your vault!" }, + "phishingPageTitle": { + "message": "Phishing website" + }, + "phishingPageCloseTab": { + "message": "Close tab" + }, + "phishingPageContinue": { + "message": "Continue" + }, + "phishingPageLearnWhy": { + "message": "Why are you seeing this?" + }, "hasItemsVaultNudgeBodyOne": { "message": "Autofill items for the current page" }, @@ -5451,11 +5666,33 @@ "message": "Easily create strong and unique passwords by clicking on the Generate password button to help you keep your logins secure.", "description": "Aria label for the body content of the generator nudge" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "noPermissionsViewPage": { "message": "You do not have permissions to view this page. Try logging in with a different account." }, "wasmNotSupported": { "message": "WebAssembly is not supported on your browser or is not enabled. WebAssembly is required to use the Bitwarden app.", "description": "'WebAssembly' is a technical term and should not be translated." + }, + "showMore": { + "message": "Show more" + }, + "showLess": { + "message": "Show less" + }, + "next": { + "message": "Next" + }, + "moreBreadcrumbs": { + "message": "More breadcrumbs", + "description": "This is used in the context of a breadcrumb navigation, indicating that there are more items in the breadcrumb trail that are not currently displayed." + }, + "confirmKeyConnectorDomain": { + "message": "Confirm Key Connector domain" } } diff --git a/apps/browser/src/_locales/nb/messages.json b/apps/browser/src/_locales/nb/messages.json index 59a8ca94c9d..ef3b307e194 100644 --- a/apps/browser/src/_locales/nb/messages.json +++ b/apps/browser/src/_locales/nb/messages.json @@ -547,12 +547,50 @@ "searchVault": { "message": "Søk i hvelvet" }, + "resetSearch": { + "message": "Reset search" + }, + "archiveNoun": { + "message": "Archive", + "description": "Noun" + }, + "archiveVerb": { + "message": "Archive", + "description": "Verb" + }, + "unarchive": { + "message": "Unarchive" + }, + "itemsInArchive": { + "message": "Items in archive" + }, + "noItemsInArchive": { + "message": "No items in archive" + }, + "noItemsInArchiveDesc": { + "message": "Archived items will appear here and will be excluded from general search results and autofill suggestions." + }, + "itemSentToArchive": { + "message": "Item sent to archive" + }, + "itemRemovedFromArchive": { + "message": "Item removed from archive" + }, + "archiveItem": { + "message": "Archive item" + }, + "archiveItemConfirmDesc": { + "message": "Archived items are excluded from general search results and autofill suggestions. Are you sure you want to archive this item?" + }, "edit": { "message": "Rediger" }, "view": { "message": "Vis" }, + "viewLogin": { + "message": "View login" + }, "noItemsInList": { "message": "Det er ingen elementer å vise." }, @@ -695,6 +733,15 @@ "invalidMasterPassword": { "message": "Ugyldig hovedpassord" }, + "invalidMasterPasswordConfirmEmailAndHost": { + "message": "Invalid master password. Confirm your email is correct and your account was created on $HOST$.", + "placeholders": { + "host": { + "content": "$1", + "example": "vault.bitwarden.com" + } + } + }, "vaultTimeout": { "message": "Tidsavbrudd i hvelvet" }, @@ -759,7 +806,7 @@ "message": "Hovedpassord" }, "masterPassImportant": { - "message": "Your master password cannot be recovered if you forget it!" + "message": "Hovedpassordet kan ikke gjenopprettes hvis du glemmer det!" }, "masterPassHintLabel": { "message": "Få et hint om hovedpassordet" @@ -814,7 +861,7 @@ "message": "En verifiseringskode er påkrevd." }, "webauthnCancelOrTimeout": { - "message": "The authentication was cancelled or took too long. Please try again." + "message": "Autentiseringen ble avbrutt eller tok for lang tid. Prøv igjen." }, "invalidVerificationCode": { "message": "Ugyldig bekreftelseskode" @@ -1097,7 +1144,7 @@ "description": "Shown to user after item is saved." }, "notificationLoginUpdatedConfirmation": { - "message": "updated in Bitwarden.", + "message": "oppdatert i Bitwarden.", "description": "Shown to user after item is updated." }, "selectItemAriaLabel": { @@ -1252,25 +1299,25 @@ "message": "Filformat" }, "fileEncryptedExportWarningDesc": { - "message": "This file export will be password protected and require the file password to decrypt." + "message": "Denne fileksporten vil bli passordbeskyttet og vil kreve filpassordet ved dekryptering." }, "filePassword": { "message": "Filpassord" }, "exportPasswordDescription": { - "message": "This password will be used to export and import this file" + "message": "Dette passordet brukes for eksport og import av denne filen" }, "accountRestrictedOptionDescription": { - "message": "Use your account encryption key, derived from your account's username and Master Password, to encrypt the export and restrict import to only the current Bitwarden account." + "message": "Bruk kontokrypteringsnøkkelen, avledet fra ditt kontobrukernavn og hovedpassord, for å kryptere eksporten og hindre import til andre kontoer enn den aktuelle Bitwarden-kontoen." }, "passwordProtectedOptionDescription": { - "message": "Set a file password to encrypt the export and import it to any Bitwarden account using the password for decryption." + "message": "Sett et filpassord for kryptering av eksporten. Bruk passordet for å dekryptere og importere til en hvilken som helst Bitwarden-konto." }, "exportTypeHeading": { "message": "Eksporttype" }, "accountRestricted": { - "message": "Account restricted" + "message": "Kontoen er begrenset" }, "filePasswordAndConfirmFilePasswordDoNotMatch": { "message": "«Filpassord» og «Bekreft filpassord» stemmer ikke overens." @@ -1501,6 +1548,15 @@ "readSecurityKey": { "message": "Les sikkerhetsnøkkel" }, + "readingPasskeyLoading": { + "message": "Reading passkey..." + }, + "passkeyAuthenticationFailed": { + "message": "Passkey authentication failed" + }, + "useADifferentLogInMethod": { + "message": "Use a different log in method" + }, "awaitingSecurityKeyInteraction": { "message": "Awaiting security key interaction..." }, @@ -1519,9 +1575,6 @@ "selectTwoStepLoginMethod": { "message": "Velg 2-trinnspåloggingsmetode" }, - "recoveryCodeDesc": { - "message": "Har du mistet tilgang til alle dine 2-trinnsleverandører? Bruk din gjenopprettingskode til å fjerne alle 2-trinnsleverandører fra din konto." - }, "recoveryCodeTitle": { "message": "Gjenopprettingskode" }, @@ -1621,7 +1674,7 @@ } }, "turnOffAutofill": { - "message": "Turn off autofill" + "message": "Skru av autoutfylling" }, "showInlineMenuLabel": { "message": "Vis autoutfyll-forslag i tekstbokser" @@ -1680,9 +1733,6 @@ "defaultAutoFillOnPageLoadDesc": { "message": "Du kan skru av auto-utfylling ved sideinnlastinger for individuelle innloggingsgjenstander fra gjenstandens «Redigér»-visning." }, - "itemAutoFillOnPageLoad": { - "message": "Auto-utfyll på sideinnlastning (hvis aktivert i Alternativer)" - }, "autoFillOnPageLoadUseDefault": { "message": "Bruk standardinnstillinger" }, @@ -1754,23 +1804,8 @@ "popup2faCloseMessage": { "message": "Å klikke utenfor dette oppsprettsvinduet for å sjekke E-postinnboksen din for en verifiseringskoden, vil lukke denne oppspretten. Vil du åpne oppsprettet i et nytt vindu sånn at den ikke lukkes?" }, - "popupU2fCloseMessage": { - "message": "Denne nettleseren kan ikke behandle U2F-forespørsler i dette popup-vinduet. Vil du åpne denne popupen i et nytt vindu, slik at du kan logge deg på med U2F?" - }, - "enableFavicon": { - "message": "Vis nettsideikoner" - }, - "faviconDesc": { - "message": "Vis et gjenkjennelig bilde ved siden av hver innlogging." - }, - "faviconDescAlt": { - "message": "Show a recognizable image next to each login. Applies to all logged in accounts." - }, - "enableBadgeCounter": { - "message": "Vis merke-teller" - }, - "badgeCounterDesc": { - "message": "Indiker hvor mange innlogginger du har for den aktuelle nettsiden." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "cardholderName": { "message": "Kortholderens navn" @@ -1829,6 +1864,9 @@ "securityCode": { "message": "Sikkerhetskode" }, + "cardNumber": { + "message": "kortnummer" + }, "ex": { "message": "f.eks." }, @@ -1931,32 +1969,81 @@ "typeNote": { "message": "Note" }, - "newItemHeader": { - "message": "Ny $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderLogin": { + "message": "New Login", + "description": "Header for new login item type" }, - "editItemHeader": { - "message": "Rediger $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderCard": { + "message": "New Card", + "description": "Header for new card item type" }, - "viewItemHeader": { - "message": "Vis $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderIdentity": { + "message": "New Identity", + "description": "Header for new identity item type" + }, + "newItemHeaderNote": { + "message": "New Note", + "description": "Header for new note item type" + }, + "newItemHeaderSshKey": { + "message": "New SSH key", + "description": "Header for new SSH key item type" + }, + "newItemHeaderTextSend": { + "message": "New Text Send", + "description": "Header for new text send" + }, + "newItemHeaderFileSend": { + "message": "New File Send", + "description": "Header for new file send" + }, + "editItemHeaderLogin": { + "message": "Edit Login", + "description": "Header for edit login item type" + }, + "editItemHeaderCard": { + "message": "Edit Card", + "description": "Header for edit card item type" + }, + "editItemHeaderIdentity": { + "message": "Edit Identity", + "description": "Header for edit identity item type" + }, + "editItemHeaderNote": { + "message": "Edit Note", + "description": "Header for edit note item type" + }, + "editItemHeaderSshKey": { + "message": "Edit SSH key", + "description": "Header for edit SSH key item type" + }, + "editItemHeaderTextSend": { + "message": "Edit Text Send", + "description": "Header for edit text send" + }, + "editItemHeaderFileSend": { + "message": "Edit File Send", + "description": "Header for edit file send" + }, + "viewItemHeaderLogin": { + "message": "View Login", + "description": "Header for view login item type" + }, + "viewItemHeaderCard": { + "message": "View Card", + "description": "Header for view card item type" + }, + "viewItemHeaderIdentity": { + "message": "View Identity", + "description": "Header for view identity item type" + }, + "viewItemHeaderNote": { + "message": "View Note", + "description": "Header for view note item type" + }, + "viewItemHeaderSshKey": { + "message": "View SSH key", + "description": "Header for view SSH key item type" }, "passwordHistory": { "message": "Passordhistorikk" @@ -2531,7 +2618,7 @@ "message": "Endre" }, "changePassword": { - "message": "Change password", + "message": "Endre passord", "description": "Change password button for browser at risk notification on login." }, "changeButtonTitle": { @@ -2720,7 +2807,7 @@ "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "maxAccessCountReached": { - "message": "Max access count reached", + "message": "Maks antall tilganger er nådd", "description": "This text will be displayed after a Send has been accessed the maximum amount of times." }, "hideTextByDefault": { @@ -3070,7 +3157,7 @@ "message": "A master password is no longer required for members of the following organization. Please confirm the domain below with your organization administrator." }, "organizationName": { - "message": "Organization name" + "message": "Organisasjonens navn" }, "keyConnectorDomain": { "message": "Key Connector domain" @@ -3100,7 +3187,7 @@ "message": "Eksporterer personlig hvelv" }, "exportingIndividualVaultDescription": { - "message": "Only the individual vault items associated with $EMAIL$ will be exported. Organization vault items will not be included. Only vault item information will be exported and will not include associated attachments.", + "message": "Kun de individuelle hvelvgjenstandene som er assosiert med $EMAIL$ vil bli eksportert. Organisasjonshvelv-gjenstander vil ikke bli inkludert. Kun hvelvgjenstandsinfo vil bli eksportert og vil ikke inkludere assosierte vedlegg.", "placeholders": { "email": { "content": "$1", @@ -3118,7 +3205,7 @@ } }, "exportingOrganizationVaultTitle": { - "message": "Exporting organization vault" + "message": "Eksporterer organisasjonshvelv" }, "exportingOrganizationVaultDesc": { "message": "Only the organization vault associated with $ORGANIZATION$ will be exported. Items in individual vaults or other organizations will not be included.", @@ -3129,6 +3216,24 @@ } } }, + "exportingOrganizationVaultFromPasswordManagerWithDataOwnershipDesc": { + "message": "Only the organization vault associated with $ORGANIZATION$ will be exported.", + "placeholders": { + "organization": { + "content": "$1", + "example": "My Org Name" + } + } + }, + "exportingOrganizationVaultFromAdminConsoleWithDataOwnershipDesc": { + "message": "Only the organization vault associated with $ORGANIZATION$ will be exported. My items collections will not be included.", + "placeholders": { + "organization": { + "content": "$1", + "example": "My Org Name" + } + } + }, "error": { "message": "Feil" }, @@ -3460,8 +3565,30 @@ "logInRequestSent": { "message": "Forespørsel sendt" }, + "loginRequestApprovedForEmailOnDevice": { + "message": "Login request approved for $EMAIL$ on $DEVICE$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + }, + "device": { + "content": "$2", + "example": "Web app - Chrome" + } + } + }, + "youDeniedLoginAttemptFromAnotherDevice": { + "message": "You denied a login attempt from another device. If this was you, try to log in with the device again." + }, + "device": { + "message": "Enhet" + }, + "loginStatus": { + "message": "Innloggingsstatus" + }, "masterPasswordChanged": { - "message": "Master password saved" + "message": "Hovedpassordet er endret" }, "exposedMasterPassword": { "message": "Eksponert hovedpassord" @@ -3496,9 +3623,6 @@ "autofillPageLoadPolicyActivated": { "message": "Virksomhetsreglene dine har slått på automatisk utfylling av sidene." }, - "howToAutofill": { - "message": "Hvordan bruke auto-utfylling" - }, "autofillSelectInfoWithCommand": { "message": "Velg en gjenstand fra denne skjermen, bruk snarveien $COMMAND$, eller utforsk andre alternativer i innstillingene.", "placeholders": { @@ -3556,6 +3680,94 @@ "rememberThisDeviceToMakeFutureLoginsSeamless": { "message": "Remember this device to make future logins seamless" }, + "manageDevices": { + "message": "Manage devices" + }, + "currentSession": { + "message": "Gjeldende økt" + }, + "mobile": { + "message": "Mobil", + "description": "Mobile app" + }, + "extension": { + "message": "Utvidelse", + "description": "Browser extension/addon" + }, + "desktop": { + "message": "Skrivebord", + "description": "Desktop app" + }, + "webVault": { + "message": "Netthvelv" + }, + "webApp": { + "message": "Nettapp" + }, + "cli": { + "message": "Ledetekst" + }, + "sdk": { + "message": "SDK", + "description": "Software Development Kit" + }, + "requestPending": { + "message": "Request pending" + }, + "firstLogin": { + "message": "First login" + }, + "trusted": { + "message": "Betrodd" + }, + "needsApproval": { + "message": "Trenger godkjenning" + }, + "devices": { + "message": "Enheter" + }, + "accessAttemptBy": { + "message": "Access attempt by $EMAIL$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + } + } + }, + "confirmAccess": { + "message": "Bekreft tilgang" + }, + "denyAccess": { + "message": "Nekt tilgang" + }, + "time": { + "message": "Tid" + }, + "deviceType": { + "message": "Enhetstype" + }, + "loginRequest": { + "message": "Innloggingsforespørsel" + }, + "thisRequestIsNoLongerValid": { + "message": "Denne forespørselen er ikke lenger gyldig." + }, + "loginRequestHasAlreadyExpired": { + "message": "Innloggingsforespørselen har allerede utløpt." + }, + "justNow": { + "message": "Akkurat nå" + }, + "requestedXMinutesAgo": { + "message": "Forespurt for $MINUTES$ minutter siden", + "placeholders": { + "minutes": { + "content": "$1", + "example": "5" + } + } + }, "deviceApprovalRequired": { "message": "Device approval required. Select an approval option below:" }, @@ -3584,7 +3796,7 @@ "message": "You need to log in on a trusted device or ask your administrator to assign you a password." }, "ssoIdentifierRequired": { - "message": "Organization SSO identifier is required." + "message": "Organisasjonsidentifikator er påkrevd." }, "creatingAccountOn": { "message": "Oppretter en konto på" @@ -3612,7 +3824,7 @@ "description": "European Union" }, "accessDenied": { - "message": "Access denied. You do not have permission to view this page." + "message": "Ingen tilgang. Du har ikke tillatelse til å se denne siden." }, "general": { "message": "Generelt" @@ -3621,10 +3833,10 @@ "message": "Vis" }, "accountSuccessfullyCreated": { - "message": "Account successfully created!" + "message": "Kontoen ble vellykket opprettet!" }, "adminApprovalRequested": { - "message": "Admin approval requested" + "message": "Admin-godkjenning forespurt" }, "adminApprovalRequestSentToAdmins": { "message": "Forespørselen din har blitt sendt til administratoren din." @@ -3704,7 +3916,7 @@ } }, "inputForbiddenCharacters": { - "message": "The following characters are not allowed: $CHARACTERS$", + "message": "Følgende tegn er ikke tillatt: $CHARACTERS$", "placeholders": { "characters": { "content": "$1", @@ -3795,18 +4007,10 @@ "aliasDomain": { "message": "Alias-domene" }, - "passwordRepromptDisabledAutofillOnPageLoad": { - "message": "Items with master password re-prompt cannot be autofilled on page load. Autofill on page load turned off.", - "description": "Toast message for describing that master password re-prompt cannot be autofilled on page load." - }, "autofillOnPageLoadSetToDefault": { "message": "Autofill on page load set to use default setting.", "description": "Toast message for informing the user that autofill on page load has been set to the default setting." }, - "turnOffMasterPasswordPromptToEditField": { - "message": "Turn off master password re-prompt to edit this field", - "description": "Message appearing below the autofill on load message when master password reprompt is set for a vault item." - }, "toggleSideNavigation": { "message": "Skru av/på sidenavigering" }, @@ -3911,7 +4115,7 @@ "message": "Importeringsfeil" }, "importErrorDesc": { - "message": "There was a problem with the data you tried to import. Please resolve the errors listed below in your source file and try again." + "message": "Det oppstod et problem med dataene du prøvde å importere. Vennligst løs feilene listet nedenfor i kildefilen og prøv på nytt." }, "resolveTheErrorsBelowAndTryAgain": { "message": "Fiks feilene nedenfor og prøv igjen." @@ -3971,7 +4175,7 @@ "message": "Total" }, "importWarning": { - "message": "You are importing data to $ORGANIZATION$. Your data may be shared with members of this organization. Do you want to proceed?", + "message": "Du importerer data til $ORGANIZATION$. Dataene kan deles med medlemmer av denne organisasjonen. Vil du fortsette?", "placeholders": { "organization": { "content": "$1", @@ -3998,7 +4202,7 @@ "message": "Ingenting ble importert." }, "importEncKeyError": { - "message": "Error decrypting the exported file. Your encryption key does not match the encryption key used export the data." + "message": "Feil under dekryptering av den eksporterte filen. Krypteringsnøkkelen samsvarte ikke med krypteringsnøkkelen som ble brukt eksport av data." }, "invalidFilePassword": { "message": "Ugyldig filpassord, vennligst bruk passordet du skrev inn da du opprettet eksportfilen." @@ -4015,15 +4219,11 @@ "selectImportCollection": { "message": "Velg en samling" }, - "importTargetHint": { - "message": "Select this option if you want the imported file contents moved to a $DESTINATION$", - "description": "Located as a hint under the import target. Will be appended by either folder or collection, depending if the user is importing into an individual or an organizational vault.", - "placeholders": { - "destination": { - "content": "$1", - "example": "folder or collection" - } - } + "importTargetHintCollection": { + "message": "Select this option if you want the imported file contents moved to a collection" + }, + "importTargetHintFolder": { + "message": "Select this option if you want the imported file contents moved to a folder" }, "importUnassignedItemsError": { "message": "Filen inneholder utildelte elementer." @@ -4078,10 +4278,7 @@ "message": "Passkoden vil ikke bli kopiert" }, "passkeyNotCopiedAlert": { - "message": "The passkey will not be copied to the cloned item. Do you want to continue cloning this item?" - }, - "passkeyFeatureIsNotImplementedForAccountsWithoutMasterPassword": { - "message": "Verification required by the initiating site. This feature is not yet implemented for accounts without master password." + "message": "Passnøkkelen kopieres ikke til det klonede elementet. Vil du fortsette kloningen av denne gjenstanden?" }, "logInWithPasskeyQuestion": { "message": "Vil du logge inn med passnøkkel?" @@ -4279,7 +4476,7 @@ "description": "Link to match detection docs on warning dialog for advance match strategy" }, "uriAdvancedOption": { - "message": "Advanced options", + "message": "Avanserte alternativer", "description": "Advanced option placeholder for uri option component" }, "confirmContinueToBrowserSettingsTitle": { @@ -4465,17 +4662,17 @@ } } }, - "copyFieldValue": { - "message": "Kopier $FIELD$, $VALUE$", + "copyFieldCipherName": { + "message": "Copy $FIELD$, $CIPHERNAME$", "description": "Title for a button that copies a field value to the clipboard.", "placeholders": { "field": { "content": "$1", "example": "Username" }, - "value": { + "ciphername": { "content": "$2", - "example": "Foo" + "example": "Login Item" } } }, @@ -4613,31 +4810,31 @@ } }, "downloadBitwarden": { - "message": "Download Bitwarden" + "message": "Last ned Bitwarden" }, "downloadBitwardenOnAllDevices": { "message": "Download Bitwarden on all devices" }, "getTheMobileApp": { - "message": "Get the mobile app" + "message": "Skaff deg mobilappen" }, "getTheMobileAppDesc": { "message": "Access your passwords on the go with the Bitwarden mobile app." }, "getTheDesktopApp": { - "message": "Get the desktop app" + "message": "Skaff deg skrivebordsappen" }, "getTheDesktopAppDesc": { "message": "Access your vault without a browser, then set up unlock with biometrics to expedite unlocking in both the desktop app and browser extension." }, "downloadFromBitwardenNow": { - "message": "Download from bitwarden.com now" + "message": "Last ned fra bitwarden.com nå" }, "getItOnGooglePlay": { - "message": "Get it on Google Play" + "message": "Skaff den på Google Play" }, "downloadOnTheAppStore": { - "message": "Download on the App Store" + "message": "Last ned fra App Store" }, "permanentlyDeleteAttachmentConfirmation": { "message": "Are you sure you want to permanently delete this attachment?" @@ -4768,9 +4965,6 @@ } } }, - "enableAnimations": { - "message": "Aktiver animasjoner" - }, "showAnimations": { "message": "Vis animasjoner" }, @@ -4983,15 +5177,9 @@ "itemLocation": { "message": "Gjenstandens plassering" }, - "fileSend": { - "message": "File Send" - }, "fileSends": { "message": "File Sends" }, - "textSend": { - "message": "Text Send" - }, "textSends": { "message": "Text Sends" }, @@ -5001,6 +5189,18 @@ "showNumberOfAutofillSuggestions": { "message": "Vis antall auto-utfyllingsforslag for pålogging på utvidelsesikonet" }, + "accountAccessRequested": { + "message": "Account access requested" + }, + "confirmAccessAttempt": { + "message": "Confirm access attempt for $EMAIL$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + } + } + }, "showQuickCopyActions": { "message": "Vis hurtigkopieringshandlinger i hvelvet" }, @@ -5040,9 +5240,6 @@ "vaultCustomTimeoutMinimum": { "message": "Minste egendefinerte tidsavbrudd er 1 minutt." }, - "additionalContentAvailable": { - "message": "Ytterligere innhold er tilgjengelig" - }, "fileSavedToDevice": { "message": "File saved to device. Manage from your device downloads." }, @@ -5328,6 +5525,12 @@ "changeAtRiskPassword": { "message": "Change at-risk password" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "This login is at-risk and missing a website. Add a website and change the password for stronger security." + }, + "missingWebsite": { + "message": "Missing website" + }, "settingsVaultOptions": { "message": "Hvelvinnstillinger" }, @@ -5362,7 +5565,7 @@ "message": "Save unlimited passwords across unlimited devices with Bitwarden mobile, browser, and desktop apps." }, "nudgeBadgeAria": { - "message": "1 notification" + "message": "1 varsel" }, "emptyVaultNudgeTitle": { "message": "Importer eksisterende passord" @@ -5376,6 +5579,18 @@ "hasItemsVaultNudgeTitle": { "message": "Velkommen til hvelvet ditt!" }, + "phishingPageTitle": { + "message": "Phishing website" + }, + "phishingPageCloseTab": { + "message": "Close tab" + }, + "phishingPageContinue": { + "message": "Continue" + }, + "phishingPageLearnWhy": { + "message": "Why are you seeing this?" + }, "hasItemsVaultNudgeBodyOne": { "message": "Autofill items for the current page" }, @@ -5389,12 +5604,12 @@ "message": "Spar tid med auto-utfylling" }, "newLoginNudgeBodyOne": { - "message": "Include a", + "message": "Inkluder en", "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", "example": "Include a Website so this login appears as an autofill suggestion." }, "newLoginNudgeBodyBold": { - "message": "Website", + "message": "Nettsted", "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", "example": "Include a Website so this login appears as an autofill suggestion." }, @@ -5451,11 +5666,33 @@ "message": "Easily create strong and unique passwords by clicking on the Generate password button to help you keep your logins secure.", "description": "Aria label for the body content of the generator nudge" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "noPermissionsViewPage": { "message": "You do not have permissions to view this page. Try logging in with a different account." }, "wasmNotSupported": { "message": "WebAssembly is not supported on your browser or is not enabled. WebAssembly is required to use the Bitwarden app.", "description": "'WebAssembly' is a technical term and should not be translated." + }, + "showMore": { + "message": "Show more" + }, + "showLess": { + "message": "Show less" + }, + "next": { + "message": "Next" + }, + "moreBreadcrumbs": { + "message": "More breadcrumbs", + "description": "This is used in the context of a breadcrumb navigation, indicating that there are more items in the breadcrumb trail that are not currently displayed." + }, + "confirmKeyConnectorDomain": { + "message": "Confirm Key Connector domain" } } diff --git a/apps/browser/src/_locales/ne/messages.json b/apps/browser/src/_locales/ne/messages.json index ecc7da63e79..6180d490f09 100644 --- a/apps/browser/src/_locales/ne/messages.json +++ b/apps/browser/src/_locales/ne/messages.json @@ -547,12 +547,50 @@ "searchVault": { "message": "Search vault" }, + "resetSearch": { + "message": "Reset search" + }, + "archiveNoun": { + "message": "Archive", + "description": "Noun" + }, + "archiveVerb": { + "message": "Archive", + "description": "Verb" + }, + "unarchive": { + "message": "Unarchive" + }, + "itemsInArchive": { + "message": "Items in archive" + }, + "noItemsInArchive": { + "message": "No items in archive" + }, + "noItemsInArchiveDesc": { + "message": "Archived items will appear here and will be excluded from general search results and autofill suggestions." + }, + "itemSentToArchive": { + "message": "Item sent to archive" + }, + "itemRemovedFromArchive": { + "message": "Item removed from archive" + }, + "archiveItem": { + "message": "Archive item" + }, + "archiveItemConfirmDesc": { + "message": "Archived items are excluded from general search results and autofill suggestions. Are you sure you want to archive this item?" + }, "edit": { "message": "Edit" }, "view": { "message": "View" }, + "viewLogin": { + "message": "View login" + }, "noItemsInList": { "message": "There are no items to list." }, @@ -695,6 +733,15 @@ "invalidMasterPassword": { "message": "Invalid master password" }, + "invalidMasterPasswordConfirmEmailAndHost": { + "message": "Invalid master password. Confirm your email is correct and your account was created on $HOST$.", + "placeholders": { + "host": { + "content": "$1", + "example": "vault.bitwarden.com" + } + } + }, "vaultTimeout": { "message": "Vault timeout" }, @@ -1501,6 +1548,15 @@ "readSecurityKey": { "message": "Read security key" }, + "readingPasskeyLoading": { + "message": "Reading passkey..." + }, + "passkeyAuthenticationFailed": { + "message": "Passkey authentication failed" + }, + "useADifferentLogInMethod": { + "message": "Use a different log in method" + }, "awaitingSecurityKeyInteraction": { "message": "Awaiting security key interaction..." }, @@ -1519,9 +1575,6 @@ "selectTwoStepLoginMethod": { "message": "Select two-step login method" }, - "recoveryCodeDesc": { - "message": "Lost access to all of your two-factor providers? Use your recovery code to turn off all two-factor providers from your account." - }, "recoveryCodeTitle": { "message": "Recovery code" }, @@ -1680,9 +1733,6 @@ "defaultAutoFillOnPageLoadDesc": { "message": "You can turn off autofill on page load for individual login items from the item's Edit view." }, - "itemAutoFillOnPageLoad": { - "message": "Autofill on page load (if set up in Options)" - }, "autoFillOnPageLoadUseDefault": { "message": "Use default setting" }, @@ -1754,23 +1804,8 @@ "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?" }, - "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?" - }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." - }, - "faviconDescAlt": { - "message": "Show a recognizable image next to each login. Applies to all logged in accounts." - }, - "enableBadgeCounter": { - "message": "Show badge counter" - }, - "badgeCounterDesc": { - "message": "Indicate how many logins you have for the current web page." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "cardholderName": { "message": "Cardholder name" @@ -1829,6 +1864,9 @@ "securityCode": { "message": "Security code" }, + "cardNumber": { + "message": "card number" + }, "ex": { "message": "ex." }, @@ -1931,32 +1969,81 @@ "typeNote": { "message": "Note" }, - "newItemHeader": { - "message": "New $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderLogin": { + "message": "New Login", + "description": "Header for new login item type" }, - "editItemHeader": { - "message": "Edit $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderCard": { + "message": "New Card", + "description": "Header for new card item type" }, - "viewItemHeader": { - "message": "View $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderIdentity": { + "message": "New Identity", + "description": "Header for new identity item type" + }, + "newItemHeaderNote": { + "message": "New Note", + "description": "Header for new note item type" + }, + "newItemHeaderSshKey": { + "message": "New SSH key", + "description": "Header for new SSH key item type" + }, + "newItemHeaderTextSend": { + "message": "New Text Send", + "description": "Header for new text send" + }, + "newItemHeaderFileSend": { + "message": "New File Send", + "description": "Header for new file send" + }, + "editItemHeaderLogin": { + "message": "Edit Login", + "description": "Header for edit login item type" + }, + "editItemHeaderCard": { + "message": "Edit Card", + "description": "Header for edit card item type" + }, + "editItemHeaderIdentity": { + "message": "Edit Identity", + "description": "Header for edit identity item type" + }, + "editItemHeaderNote": { + "message": "Edit Note", + "description": "Header for edit note item type" + }, + "editItemHeaderSshKey": { + "message": "Edit SSH key", + "description": "Header for edit SSH key item type" + }, + "editItemHeaderTextSend": { + "message": "Edit Text Send", + "description": "Header for edit text send" + }, + "editItemHeaderFileSend": { + "message": "Edit File Send", + "description": "Header for edit file send" + }, + "viewItemHeaderLogin": { + "message": "View Login", + "description": "Header for view login item type" + }, + "viewItemHeaderCard": { + "message": "View Card", + "description": "Header for view card item type" + }, + "viewItemHeaderIdentity": { + "message": "View Identity", + "description": "Header for view identity item type" + }, + "viewItemHeaderNote": { + "message": "View Note", + "description": "Header for view note item type" + }, + "viewItemHeaderSshKey": { + "message": "View SSH key", + "description": "Header for view SSH key item type" }, "passwordHistory": { "message": "Password history" @@ -3129,6 +3216,24 @@ } } }, + "exportingOrganizationVaultFromPasswordManagerWithDataOwnershipDesc": { + "message": "Only the organization vault associated with $ORGANIZATION$ will be exported.", + "placeholders": { + "organization": { + "content": "$1", + "example": "My Org Name" + } + } + }, + "exportingOrganizationVaultFromAdminConsoleWithDataOwnershipDesc": { + "message": "Only the organization vault associated with $ORGANIZATION$ will be exported. My items collections will not be included.", + "placeholders": { + "organization": { + "content": "$1", + "example": "My Org Name" + } + } + }, "error": { "message": "Error" }, @@ -3460,6 +3565,28 @@ "logInRequestSent": { "message": "Request sent" }, + "loginRequestApprovedForEmailOnDevice": { + "message": "Login request approved for $EMAIL$ on $DEVICE$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + }, + "device": { + "content": "$2", + "example": "Web app - Chrome" + } + } + }, + "youDeniedLoginAttemptFromAnotherDevice": { + "message": "You denied a login attempt from another device. If this was you, try to log in with the device again." + }, + "device": { + "message": "Device" + }, + "loginStatus": { + "message": "Login status" + }, "masterPasswordChanged": { "message": "Master password saved" }, @@ -3496,9 +3623,6 @@ "autofillPageLoadPolicyActivated": { "message": "Your organization policies have turned on autofill on page load." }, - "howToAutofill": { - "message": "How to autofill" - }, "autofillSelectInfoWithCommand": { "message": "Select an item from this screen, use the shortcut $COMMAND$, or explore other options in settings.", "placeholders": { @@ -3556,6 +3680,94 @@ "rememberThisDeviceToMakeFutureLoginsSeamless": { "message": "Remember this device to make future logins seamless" }, + "manageDevices": { + "message": "Manage devices" + }, + "currentSession": { + "message": "Current session" + }, + "mobile": { + "message": "Mobile", + "description": "Mobile app" + }, + "extension": { + "message": "Extension", + "description": "Browser extension/addon" + }, + "desktop": { + "message": "Desktop", + "description": "Desktop app" + }, + "webVault": { + "message": "Web vault" + }, + "webApp": { + "message": "Web app" + }, + "cli": { + "message": "CLI" + }, + "sdk": { + "message": "SDK", + "description": "Software Development Kit" + }, + "requestPending": { + "message": "Request pending" + }, + "firstLogin": { + "message": "First login" + }, + "trusted": { + "message": "Trusted" + }, + "needsApproval": { + "message": "Needs approval" + }, + "devices": { + "message": "Devices" + }, + "accessAttemptBy": { + "message": "Access attempt by $EMAIL$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + } + } + }, + "confirmAccess": { + "message": "Confirm access" + }, + "denyAccess": { + "message": "Deny access" + }, + "time": { + "message": "Time" + }, + "deviceType": { + "message": "Device Type" + }, + "loginRequest": { + "message": "Login request" + }, + "thisRequestIsNoLongerValid": { + "message": "This request is no longer valid." + }, + "loginRequestHasAlreadyExpired": { + "message": "Login request has already expired." + }, + "justNow": { + "message": "Just now" + }, + "requestedXMinutesAgo": { + "message": "Requested $MINUTES$ minutes ago", + "placeholders": { + "minutes": { + "content": "$1", + "example": "5" + } + } + }, "deviceApprovalRequired": { "message": "Device approval required. Select an approval option below:" }, @@ -3795,18 +4007,10 @@ "aliasDomain": { "message": "Alias domain" }, - "passwordRepromptDisabledAutofillOnPageLoad": { - "message": "Items with master password re-prompt cannot be autofilled on page load. Autofill on page load turned off.", - "description": "Toast message for describing that master password re-prompt cannot be autofilled on page load." - }, "autofillOnPageLoadSetToDefault": { "message": "Autofill on page load set to use default setting.", "description": "Toast message for informing the user that autofill on page load has been set to the default setting." }, - "turnOffMasterPasswordPromptToEditField": { - "message": "Turn off master password re-prompt to edit this field", - "description": "Message appearing below the autofill on load message when master password reprompt is set for a vault item." - }, "toggleSideNavigation": { "message": "Toggle side navigation" }, @@ -4015,15 +4219,11 @@ "selectImportCollection": { "message": "Select a collection" }, - "importTargetHint": { - "message": "Select this option if you want the imported file contents moved to a $DESTINATION$", - "description": "Located as a hint under the import target. Will be appended by either folder or collection, depending if the user is importing into an individual or an organizational vault.", - "placeholders": { - "destination": { - "content": "$1", - "example": "folder or collection" - } - } + "importTargetHintCollection": { + "message": "Select this option if you want the imported file contents moved to a collection" + }, + "importTargetHintFolder": { + "message": "Select this option if you want the imported file contents moved to a folder" }, "importUnassignedItemsError": { "message": "File contains unassigned items." @@ -4080,9 +4280,6 @@ "passkeyNotCopiedAlert": { "message": "The passkey will not be copied to the cloned item. Do you want to continue cloning this item?" }, - "passkeyFeatureIsNotImplementedForAccountsWithoutMasterPassword": { - "message": "Verification required by the initiating site. This feature is not yet implemented for accounts without master password." - }, "logInWithPasskeyQuestion": { "message": "Log in with passkey?" }, @@ -4465,17 +4662,17 @@ } } }, - "copyFieldValue": { - "message": "Copy $FIELD$, $VALUE$", + "copyFieldCipherName": { + "message": "Copy $FIELD$, $CIPHERNAME$", "description": "Title for a button that copies a field value to the clipboard.", "placeholders": { "field": { "content": "$1", "example": "Username" }, - "value": { + "ciphername": { "content": "$2", - "example": "Foo" + "example": "Login Item" } } }, @@ -4768,9 +4965,6 @@ } } }, - "enableAnimations": { - "message": "Enable animations" - }, "showAnimations": { "message": "Show animations" }, @@ -4983,15 +5177,9 @@ "itemLocation": { "message": "Item Location" }, - "fileSend": { - "message": "File Send" - }, "fileSends": { "message": "File Sends" }, - "textSend": { - "message": "Text Send" - }, "textSends": { "message": "Text Sends" }, @@ -5001,6 +5189,18 @@ "showNumberOfAutofillSuggestions": { "message": "Show number of login autofill suggestions on extension icon" }, + "accountAccessRequested": { + "message": "Account access requested" + }, + "confirmAccessAttempt": { + "message": "Confirm access attempt for $EMAIL$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + } + } + }, "showQuickCopyActions": { "message": "Show quick copy actions on Vault" }, @@ -5040,9 +5240,6 @@ "vaultCustomTimeoutMinimum": { "message": "Minimum custom timeout is 1 minute." }, - "additionalContentAvailable": { - "message": "Additional content is available" - }, "fileSavedToDevice": { "message": "File saved to device. Manage from your device downloads." }, @@ -5328,6 +5525,12 @@ "changeAtRiskPassword": { "message": "Change at-risk password" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "This login is at-risk and missing a website. Add a website and change the password for stronger security." + }, + "missingWebsite": { + "message": "Missing website" + }, "settingsVaultOptions": { "message": "Vault options" }, @@ -5376,6 +5579,18 @@ "hasItemsVaultNudgeTitle": { "message": "Welcome to your vault!" }, + "phishingPageTitle": { + "message": "Phishing website" + }, + "phishingPageCloseTab": { + "message": "Close tab" + }, + "phishingPageContinue": { + "message": "Continue" + }, + "phishingPageLearnWhy": { + "message": "Why are you seeing this?" + }, "hasItemsVaultNudgeBodyOne": { "message": "Autofill items for the current page" }, @@ -5451,11 +5666,33 @@ "message": "Easily create strong and unique passwords by clicking on the Generate password button to help you keep your logins secure.", "description": "Aria label for the body content of the generator nudge" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "noPermissionsViewPage": { "message": "You do not have permissions to view this page. Try logging in with a different account." }, "wasmNotSupported": { "message": "WebAssembly is not supported on your browser or is not enabled. WebAssembly is required to use the Bitwarden app.", "description": "'WebAssembly' is a technical term and should not be translated." + }, + "showMore": { + "message": "Show more" + }, + "showLess": { + "message": "Show less" + }, + "next": { + "message": "Next" + }, + "moreBreadcrumbs": { + "message": "More breadcrumbs", + "description": "This is used in the context of a breadcrumb navigation, indicating that there are more items in the breadcrumb trail that are not currently displayed." + }, + "confirmKeyConnectorDomain": { + "message": "Confirm Key Connector domain" } } diff --git a/apps/browser/src/_locales/nl/messages.json b/apps/browser/src/_locales/nl/messages.json index 71134c7a33b..cf152e2ded4 100644 --- a/apps/browser/src/_locales/nl/messages.json +++ b/apps/browser/src/_locales/nl/messages.json @@ -547,12 +547,50 @@ "searchVault": { "message": "Kluis doorzoeken" }, + "resetSearch": { + "message": "Zoekopdracht resetten" + }, + "archiveNoun": { + "message": "Archief", + "description": "Noun" + }, + "archiveVerb": { + "message": "Archiveren", + "description": "Verb" + }, + "unarchive": { + "message": "Dearchiveren" + }, + "itemsInArchive": { + "message": "Items in archief" + }, + "noItemsInArchive": { + "message": "Geen items in archief" + }, + "noItemsInArchiveDesc": { + "message": "Gearchiveerde items verschijnen hier en worden uitgesloten van algemene zoekresultaten en automatisch invulsuggesties." + }, + "itemSentToArchive": { + "message": "Item naar archief verzonden" + }, + "itemRemovedFromArchive": { + "message": "Item verwijderd uit archief" + }, + "archiveItem": { + "message": "Item archiveren" + }, + "archiveItemConfirmDesc": { + "message": "Gearchiveerde items worden uitgesloten van algemene zoekresultaten en automatische invulsuggesties. Weet je zeker dat je dit item wilt archiveren?" + }, "edit": { "message": "Bewerken" }, "view": { "message": "Weergeven" }, + "viewLogin": { + "message": "Login bekijken" + }, "noItemsInList": { "message": "Er zijn geen items om weer te geven." }, @@ -695,6 +733,15 @@ "invalidMasterPassword": { "message": "Ongeldig hoofdwachtwoord" }, + "invalidMasterPasswordConfirmEmailAndHost": { + "message": "Ongeldig hoofdwachtwoord. Check of je e-mailadres klopt en of je account is aangemaakt op $HOST$.", + "placeholders": { + "host": { + "content": "$1", + "example": "vault.bitwarden.com" + } + } + }, "vaultTimeout": { "message": "Time-out van de kluis" }, @@ -1019,7 +1066,7 @@ "message": "Opslaan in kluisopties" }, "addLoginNotificationDesc": { - "message": "\"Melding bij nieuwe login\" vraagt automatisch om nieuwe sites in de kluis op te slaan wanneer je ergens voor de eerste keer inlogt." + "message": "Vraag om een item toe te voegen als deze niet in je kluis is gevonden." }, "addLoginNotificationDescAlt": { "message": "Vraag om een item toe te voegen als het niet is gevonden is je kluis. Dit geld voor alle ingelogde accounts." @@ -1501,6 +1548,15 @@ "readSecurityKey": { "message": "Beveiligingssleutel lezen" }, + "readingPasskeyLoading": { + "message": "Passkey uitlezen..." + }, + "passkeyAuthenticationFailed": { + "message": "Passkey-authenticatie mislukt" + }, + "useADifferentLogInMethod": { + "message": "Gebruik een andere loginmethode" + }, "awaitingSecurityKeyInteraction": { "message": "Wacht op interactie met beveiligingssleutel…" }, @@ -1519,9 +1575,6 @@ "selectTwoStepLoginMethod": { "message": "Kies methode voor tweestapslogin" }, - "recoveryCodeDesc": { - "message": "Ben je de toegang tot al je tweestapsaanbieders verloren? Gebruik dan je herstelcode om alle tweestapsaanbieders op je account uit te schakelen." - }, "recoveryCodeTitle": { "message": "Herstelcode" }, @@ -1680,9 +1733,6 @@ "defaultAutoFillOnPageLoadDesc": { "message": "Na het inschakelen van Automatisch invullen bij laden van pagina, kun je de functie voor individuele inlogitems in- of uitschakelen. Dit is de standaardinstelling voor inlogitems die niet afzonderlijk zijn geconfigureerd." }, - "itemAutoFillOnPageLoad": { - "message": "Automatisch invullen bij laden van pagina (als ingeschakeld in Opties)" - }, "autoFillOnPageLoadUseDefault": { "message": "Standaardinstelling gebruiken" }, @@ -1754,23 +1804,8 @@ "popup2faCloseMessage": { "message": "Als je buiten het pop-upvenster klikt om je e-mail te controleren op een verificatiecode, dan zal de pop-up sluiten. Wil je het pop-upvenster openen in een nieuw scherm, zodat het niet wordt gesloten?" }, - "popupU2fCloseMessage": { - "message": "Deze browser kan U2F-verzoeken niet verwerken in dit popupvenster. Wilt je deze pop-up openen in een nieuw venster zodat je kunt inloggen met U2F?" - }, - "enableFavicon": { - "message": "Websitepictogrammen weergeven" - }, - "faviconDesc": { - "message": "Een herkenbare afbeelding naast iedere login weergeven." - }, - "faviconDescAlt": { - "message": "Toon een herkenbare afbeelding naast elke login. Geldt voor alle ingelogde accounts." - }, - "enableBadgeCounter": { - "message": "Teller weergeven" - }, - "badgeCounterDesc": { - "message": "Indicatie van het aantal logins dat je hebt voor de huidige webpagina." + "showIconsChangePasswordUrls": { + "message": "Websitepictogrammen weergeven en URL's voor wachtwoordwijzigingen ophalen" }, "cardholderName": { "message": "Naam kaarthouder" @@ -1829,6 +1864,9 @@ "securityCode": { "message": "Beveiligingscode" }, + "cardNumber": { + "message": "kaartnummer" + }, "ex": { "message": "bijv." }, @@ -1931,32 +1969,81 @@ "typeNote": { "message": "Notitie" }, - "newItemHeader": { - "message": "Nieuwe $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderLogin": { + "message": "Nieuwe login", + "description": "Header for new login item type" }, - "editItemHeader": { - "message": "$TYPE$ bewerken", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderCard": { + "message": "Nieuwe kaart", + "description": "Header for new card item type" }, - "viewItemHeader": { - "message": "$TYPE$ weergeven", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderIdentity": { + "message": "Nieuwe identiteit", + "description": "Header for new identity item type" + }, + "newItemHeaderNote": { + "message": "Nieuwe notitie", + "description": "Header for new note item type" + }, + "newItemHeaderSshKey": { + "message": "Nieuwe SSH-sleutel", + "description": "Header for new SSH key item type" + }, + "newItemHeaderTextSend": { + "message": "Nieuwe Send (tekst)", + "description": "Header for new text send" + }, + "newItemHeaderFileSend": { + "message": "Nieuwe Send (bestand)", + "description": "Header for new file send" + }, + "editItemHeaderLogin": { + "message": "Login bewerken", + "description": "Header for edit login item type" + }, + "editItemHeaderCard": { + "message": "Kaart bewerken", + "description": "Header for edit card item type" + }, + "editItemHeaderIdentity": { + "message": "Identiteit bewerken", + "description": "Header for edit identity item type" + }, + "editItemHeaderNote": { + "message": "Notitie bewerken", + "description": "Header for edit note item type" + }, + "editItemHeaderSshKey": { + "message": "SSH-sleutel bewerken", + "description": "Header for edit SSH key item type" + }, + "editItemHeaderTextSend": { + "message": "Send (tekst) bewerken", + "description": "Header for edit text send" + }, + "editItemHeaderFileSend": { + "message": "Send (bestand) bewerken", + "description": "Header for edit file send" + }, + "viewItemHeaderLogin": { + "message": "Login bekijken", + "description": "Header for view login item type" + }, + "viewItemHeaderCard": { + "message": "Kaart bekijken", + "description": "Header for view card item type" + }, + "viewItemHeaderIdentity": { + "message": "Identiteit bekijken", + "description": "Header for view identity item type" + }, + "viewItemHeaderNote": { + "message": "Notitie bekijken", + "description": "Header for view note item type" + }, + "viewItemHeaderSshKey": { + "message": "SSH-sleutel bekijken", + "description": "Header for view SSH key item type" }, "passwordHistory": { "message": "Geschiedenis" @@ -3067,13 +3154,13 @@ "message": "Geen unieke id gevonden." }, "removeMasterPasswordForOrganizationUserKeyConnector": { - "message": "A master password is no longer required for members of the following organization. Please confirm the domain below with your organization administrator." + "message": "Voor leden van de volgende organisatie is een hoofdwachtwoord niet langer nodig. Bevestig het domein hieronder met de beheerder van je organisatie." }, "organizationName": { - "message": "Organization name" + "message": "Organisatienaam" }, "keyConnectorDomain": { - "message": "Key Connector domain" + "message": "Key Connector domein" }, "leaveOrganization": { "message": "Organisatie verlaten" @@ -3129,6 +3216,24 @@ } } }, + "exportingOrganizationVaultFromPasswordManagerWithDataOwnershipDesc": { + "message": "Alleen de organisatiekluis die gekoppeld is aan $ORGANIZATION$ wordt geëxporteerd.", + "placeholders": { + "organization": { + "content": "$1", + "example": "My Org Name" + } + } + }, + "exportingOrganizationVaultFromAdminConsoleWithDataOwnershipDesc": { + "message": "Exporteert alleen de organisatiekluis van $ORGANIZATION$. Geen persoonlijke kluis-items.", + "placeholders": { + "organization": { + "content": "$1", + "example": "My Org Name" + } + } + }, "error": { "message": "Fout" }, @@ -3368,10 +3473,10 @@ "message": "Premium-abonnement vereist" }, "organizationIsDisabled": { - "message": "Organisatie is uitgeschakeld." + "message": "Organisatie opgeschort." }, "disabledOrganizationFilterError": { - "message": "Je kunt uitgeschakelde items in een organisatie niet benaderen. Neem contact op met de eigenaar van je organisatie voor hulp." + "message": "Je kunt items in opgeschorte organisaties niet benaderen. Neem contact op met de eigenaar van je organisatie voor hulp." }, "loggingInTo": { "message": "Inloggen op $DOMAIN$", @@ -3460,6 +3565,28 @@ "logInRequestSent": { "message": "Verzoek verzonden" }, + "loginRequestApprovedForEmailOnDevice": { + "message": "Inloggen voor $EMAIL$ goedgekeurd op $DEVICE$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + }, + "device": { + "content": "$2", + "example": "Web app - Chrome" + } + } + }, + "youDeniedLoginAttemptFromAnotherDevice": { + "message": "Je hebt een inlogpoging vanaf een ander apparaat geweigerd. Als je dit toch echt zelf was, probeer dan opnieuw in te loggen met het apparaat." + }, + "device": { + "message": "Apparaat" + }, + "loginStatus": { + "message": "Loginstatus" + }, "masterPasswordChanged": { "message": "Hoofdwachtwoord gewijzigd" }, @@ -3496,9 +3623,6 @@ "autofillPageLoadPolicyActivated": { "message": "Je organisatiebeleid heeft het automatisch invullen bij laden van pagina ingeschakeld." }, - "howToAutofill": { - "message": "Hoe automatisch invullen" - }, "autofillSelectInfoWithCommand": { "message": "Selecteer een item in dit scherm, gebruik de sneltoets $COMMAND$ of verken andere opties in de instellingen.", "placeholders": { @@ -3556,6 +3680,94 @@ "rememberThisDeviceToMakeFutureLoginsSeamless": { "message": "Onthoud dit apparaat om in het vervolg naadloos in te loggen" }, + "manageDevices": { + "message": "Apparaten beheren" + }, + "currentSession": { + "message": "Huidige sessie" + }, + "mobile": { + "message": "Mobiel", + "description": "Mobile app" + }, + "extension": { + "message": "Extensie", + "description": "Browser extension/addon" + }, + "desktop": { + "message": "Desktop", + "description": "Desktop app" + }, + "webVault": { + "message": "Webkluis" + }, + "webApp": { + "message": "Web-app" + }, + "cli": { + "message": "CLI" + }, + "sdk": { + "message": "SDK", + "description": "Software Development Kit" + }, + "requestPending": { + "message": "Verzoek in behandeling" + }, + "firstLogin": { + "message": "Eerst inloggen" + }, + "trusted": { + "message": "Vertrouwd" + }, + "needsApproval": { + "message": "Heeft goedkeuring nodig" + }, + "devices": { + "message": "Apparaten" + }, + "accessAttemptBy": { + "message": "Inlogpoging door $EMAIL$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + } + } + }, + "confirmAccess": { + "message": "Toegang bevestigen" + }, + "denyAccess": { + "message": "Toegang weigeren" + }, + "time": { + "message": "Tijd" + }, + "deviceType": { + "message": "Apparaattype" + }, + "loginRequest": { + "message": "Log-inverzoek" + }, + "thisRequestIsNoLongerValid": { + "message": "Dit verzoek is niet langer geldig." + }, + "loginRequestHasAlreadyExpired": { + "message": "Inlogverzoek is al verlopen." + }, + "justNow": { + "message": "Zojuist" + }, + "requestedXMinutesAgo": { + "message": "$MINUTES$ minuten geleden aangevraagd", + "placeholders": { + "minutes": { + "content": "$1", + "example": "5" + } + } + }, "deviceApprovalRequired": { "message": "Apparaattoestemming vereist. Kies een goedkeuringsoptie hieronder:" }, @@ -3795,18 +4007,10 @@ "aliasDomain": { "message": "Aliasdomein" }, - "passwordRepromptDisabledAutofillOnPageLoad": { - "message": "Items met hoofdwachtwoord re-prompt kunnen niet automatisch worden ingevuld bij het laden van de pagina. Automatisch invullen bij laden van pagina uitgeschakeld.", - "description": "Toast message for describing that master password re-prompt cannot be autofilled on page load." - }, "autofillOnPageLoadSetToDefault": { "message": "Automatisch invullen bij het laden van een pagina ingesteld op de standaardinstelling.", "description": "Toast message for informing the user that autofill on page load has been set to the default setting." }, - "turnOffMasterPasswordPromptToEditField": { - "message": "Hoofdwachtwoord herhaalprompt uitschakelen om dit veld te bewerken", - "description": "Message appearing below the autofill on load message when master password reprompt is set for a vault item." - }, "toggleSideNavigation": { "message": "Zijnavigatie schakelen" }, @@ -4015,15 +4219,11 @@ "selectImportCollection": { "message": "Collectie selecteren" }, - "importTargetHint": { - "message": "Kies deze optie als je de geïmporteerde bestandsinhoud wilt verplaatsen naar een $DESTINATION$", - "description": "Located as a hint under the import target. Will be appended by either folder or collection, depending if the user is importing into an individual or an organizational vault.", - "placeholders": { - "destination": { - "content": "$1", - "example": "folder or collection" - } - } + "importTargetHintCollection": { + "message": "Kies deze optie als je de geïmporteerde bestandsinhoud naar een collectie wilt verplaatsen" + }, + "importTargetHintFolder": { + "message": "Kies deze optie als je de geïmporteerde bestandsinhoud naar een map wilt verplaatsen" }, "importUnassignedItemsError": { "message": "Bestand bevat niet-toegewezen items." @@ -4080,9 +4280,6 @@ "passkeyNotCopiedAlert": { "message": "De passkey wordt niet gekopieerd naar het gekloonde item. Wil je doorgaan met het klonen van dit item?" }, - "passkeyFeatureIsNotImplementedForAccountsWithoutMasterPassword": { - "message": "De initiërende site vereist verificatie. Deze functie is nog niet geïmplementeerd voor accounts zonder hoofdwachtwoord." - }, "logInWithPasskeyQuestion": { "message": "Inloggen met passkey?" }, @@ -4465,17 +4662,17 @@ } } }, - "copyFieldValue": { - "message": "$FIELD$, $VALUE$ kopiëren", + "copyFieldCipherName": { + "message": "$FIELD$, $CIPHERNAME$ kopiëren", "description": "Title for a button that copies a field value to the clipboard.", "placeholders": { "field": { "content": "$1", "example": "Username" }, - "value": { + "ciphername": { "content": "$2", - "example": "Foo" + "example": "Login Item" } } }, @@ -4637,7 +4834,7 @@ "message": "Download op Google Play" }, "downloadOnTheAppStore": { - "message": "Download on the App Store" + "message": "Te downloaden in de App Store" }, "permanentlyDeleteAttachmentConfirmation": { "message": "Weet je zeker dat je deze bijlage definitief wilt verwijderen?" @@ -4768,9 +4965,6 @@ } } }, - "enableAnimations": { - "message": "Animaties inschakelen" - }, "showAnimations": { "message": "Animaties weergeven" }, @@ -4983,15 +5177,9 @@ "itemLocation": { "message": "Itemlocatie" }, - "fileSend": { - "message": "Bestand verzenden" - }, "fileSends": { "message": "Bestanden verzenden" }, - "textSend": { - "message": "Tekst-Sends" - }, "textSends": { "message": "Tekst-Sends" }, @@ -5001,6 +5189,18 @@ "showNumberOfAutofillSuggestions": { "message": "Aantal login automatisch invullen suggesties op het extensie-pictogram weergeven" }, + "accountAccessRequested": { + "message": "Accounttoegang aangevraagd" + }, + "confirmAccessAttempt": { + "message": "Inlogpoging voor $EMAIL$ bevestigen", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + } + } + }, "showQuickCopyActions": { "message": "Toon snelle kopieeracties in de kluis" }, @@ -5040,9 +5240,6 @@ "vaultCustomTimeoutMinimum": { "message": "Minimale aangepaste time-out is 1 minuut." }, - "additionalContentAvailable": { - "message": "Extra inhoud beschikbaar" - }, "fileSavedToDevice": { "message": "Bestand op apparaat opgeslagen. Beheer vanaf de downloads op je apparaat." }, @@ -5328,6 +5525,12 @@ "changeAtRiskPassword": { "message": "Risicovol wachtwoord wijzigen" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "Deze login is in gevaar en mist een website. Voeg een website toe en verander het wachtwoord voor een sterkere beveiliging." + }, + "missingWebsite": { + "message": "Ontbrekende website" + }, "settingsVaultOptions": { "message": "Kluis-instellingen" }, @@ -5376,6 +5579,18 @@ "hasItemsVaultNudgeTitle": { "message": "Welkom in je kluis!" }, + "phishingPageTitle": { + "message": "Kwaadaardige website" + }, + "phishingPageCloseTab": { + "message": "Tabblad sluiten" + }, + "phishingPageContinue": { + "message": "Doorgaan" + }, + "phishingPageLearnWhy": { + "message": "Waarom zie je dit?" + }, "hasItemsVaultNudgeBodyOne": { "message": "Automatisch invullen van items voor de huidige pagina" }, @@ -5451,11 +5666,33 @@ "message": "Maak eenvoudig sterke en unieke wachtwoorden door op de knop Wachtwoord genereren te klikken om je logins veilig te houden.", "description": "Aria label for the body content of the generator nudge" }, + "aboutThisSetting": { + "message": "Over deze instelling" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden gebruikt opgeslagen login-URI's om te bepalen welk pictogram of URL voor het wijzigen van het wachtwoord moet worden gebruikt om je ervaring te verbeteren. Er wordt geen informatie verzameld of opgeslagen wanneer je deze service gebruikt." + }, "noPermissionsViewPage": { "message": "Je hebt geen rechten om deze pagina te bekijken. Probeer in te loggen met een ander account." }, "wasmNotSupported": { "message": "WebAssembly wordt niet ondersteund in je browser of is niet ingeschakeld. WebAssembly is vereist om de Bitwarden-app te gebruiken.", "description": "'WebAssembly' is a technical term and should not be translated." + }, + "showMore": { + "message": "Meer weergeven" + }, + "showLess": { + "message": "Minder weergeven" + }, + "next": { + "message": "Volgende" + }, + "moreBreadcrumbs": { + "message": "Meer broodkruimels", + "description": "This is used in the context of a breadcrumb navigation, indicating that there are more items in the breadcrumb trail that are not currently displayed." + }, + "confirmKeyConnectorDomain": { + "message": "Key Connector-domein bevestigen" } } diff --git a/apps/browser/src/_locales/nn/messages.json b/apps/browser/src/_locales/nn/messages.json index ecc7da63e79..6180d490f09 100644 --- a/apps/browser/src/_locales/nn/messages.json +++ b/apps/browser/src/_locales/nn/messages.json @@ -547,12 +547,50 @@ "searchVault": { "message": "Search vault" }, + "resetSearch": { + "message": "Reset search" + }, + "archiveNoun": { + "message": "Archive", + "description": "Noun" + }, + "archiveVerb": { + "message": "Archive", + "description": "Verb" + }, + "unarchive": { + "message": "Unarchive" + }, + "itemsInArchive": { + "message": "Items in archive" + }, + "noItemsInArchive": { + "message": "No items in archive" + }, + "noItemsInArchiveDesc": { + "message": "Archived items will appear here and will be excluded from general search results and autofill suggestions." + }, + "itemSentToArchive": { + "message": "Item sent to archive" + }, + "itemRemovedFromArchive": { + "message": "Item removed from archive" + }, + "archiveItem": { + "message": "Archive item" + }, + "archiveItemConfirmDesc": { + "message": "Archived items are excluded from general search results and autofill suggestions. Are you sure you want to archive this item?" + }, "edit": { "message": "Edit" }, "view": { "message": "View" }, + "viewLogin": { + "message": "View login" + }, "noItemsInList": { "message": "There are no items to list." }, @@ -695,6 +733,15 @@ "invalidMasterPassword": { "message": "Invalid master password" }, + "invalidMasterPasswordConfirmEmailAndHost": { + "message": "Invalid master password. Confirm your email is correct and your account was created on $HOST$.", + "placeholders": { + "host": { + "content": "$1", + "example": "vault.bitwarden.com" + } + } + }, "vaultTimeout": { "message": "Vault timeout" }, @@ -1501,6 +1548,15 @@ "readSecurityKey": { "message": "Read security key" }, + "readingPasskeyLoading": { + "message": "Reading passkey..." + }, + "passkeyAuthenticationFailed": { + "message": "Passkey authentication failed" + }, + "useADifferentLogInMethod": { + "message": "Use a different log in method" + }, "awaitingSecurityKeyInteraction": { "message": "Awaiting security key interaction..." }, @@ -1519,9 +1575,6 @@ "selectTwoStepLoginMethod": { "message": "Select two-step login method" }, - "recoveryCodeDesc": { - "message": "Lost access to all of your two-factor providers? Use your recovery code to turn off all two-factor providers from your account." - }, "recoveryCodeTitle": { "message": "Recovery code" }, @@ -1680,9 +1733,6 @@ "defaultAutoFillOnPageLoadDesc": { "message": "You can turn off autofill on page load for individual login items from the item's Edit view." }, - "itemAutoFillOnPageLoad": { - "message": "Autofill on page load (if set up in Options)" - }, "autoFillOnPageLoadUseDefault": { "message": "Use default setting" }, @@ -1754,23 +1804,8 @@ "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?" }, - "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?" - }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." - }, - "faviconDescAlt": { - "message": "Show a recognizable image next to each login. Applies to all logged in accounts." - }, - "enableBadgeCounter": { - "message": "Show badge counter" - }, - "badgeCounterDesc": { - "message": "Indicate how many logins you have for the current web page." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "cardholderName": { "message": "Cardholder name" @@ -1829,6 +1864,9 @@ "securityCode": { "message": "Security code" }, + "cardNumber": { + "message": "card number" + }, "ex": { "message": "ex." }, @@ -1931,32 +1969,81 @@ "typeNote": { "message": "Note" }, - "newItemHeader": { - "message": "New $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderLogin": { + "message": "New Login", + "description": "Header for new login item type" }, - "editItemHeader": { - "message": "Edit $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderCard": { + "message": "New Card", + "description": "Header for new card item type" }, - "viewItemHeader": { - "message": "View $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderIdentity": { + "message": "New Identity", + "description": "Header for new identity item type" + }, + "newItemHeaderNote": { + "message": "New Note", + "description": "Header for new note item type" + }, + "newItemHeaderSshKey": { + "message": "New SSH key", + "description": "Header for new SSH key item type" + }, + "newItemHeaderTextSend": { + "message": "New Text Send", + "description": "Header for new text send" + }, + "newItemHeaderFileSend": { + "message": "New File Send", + "description": "Header for new file send" + }, + "editItemHeaderLogin": { + "message": "Edit Login", + "description": "Header for edit login item type" + }, + "editItemHeaderCard": { + "message": "Edit Card", + "description": "Header for edit card item type" + }, + "editItemHeaderIdentity": { + "message": "Edit Identity", + "description": "Header for edit identity item type" + }, + "editItemHeaderNote": { + "message": "Edit Note", + "description": "Header for edit note item type" + }, + "editItemHeaderSshKey": { + "message": "Edit SSH key", + "description": "Header for edit SSH key item type" + }, + "editItemHeaderTextSend": { + "message": "Edit Text Send", + "description": "Header for edit text send" + }, + "editItemHeaderFileSend": { + "message": "Edit File Send", + "description": "Header for edit file send" + }, + "viewItemHeaderLogin": { + "message": "View Login", + "description": "Header for view login item type" + }, + "viewItemHeaderCard": { + "message": "View Card", + "description": "Header for view card item type" + }, + "viewItemHeaderIdentity": { + "message": "View Identity", + "description": "Header for view identity item type" + }, + "viewItemHeaderNote": { + "message": "View Note", + "description": "Header for view note item type" + }, + "viewItemHeaderSshKey": { + "message": "View SSH key", + "description": "Header for view SSH key item type" }, "passwordHistory": { "message": "Password history" @@ -3129,6 +3216,24 @@ } } }, + "exportingOrganizationVaultFromPasswordManagerWithDataOwnershipDesc": { + "message": "Only the organization vault associated with $ORGANIZATION$ will be exported.", + "placeholders": { + "organization": { + "content": "$1", + "example": "My Org Name" + } + } + }, + "exportingOrganizationVaultFromAdminConsoleWithDataOwnershipDesc": { + "message": "Only the organization vault associated with $ORGANIZATION$ will be exported. My items collections will not be included.", + "placeholders": { + "organization": { + "content": "$1", + "example": "My Org Name" + } + } + }, "error": { "message": "Error" }, @@ -3460,6 +3565,28 @@ "logInRequestSent": { "message": "Request sent" }, + "loginRequestApprovedForEmailOnDevice": { + "message": "Login request approved for $EMAIL$ on $DEVICE$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + }, + "device": { + "content": "$2", + "example": "Web app - Chrome" + } + } + }, + "youDeniedLoginAttemptFromAnotherDevice": { + "message": "You denied a login attempt from another device. If this was you, try to log in with the device again." + }, + "device": { + "message": "Device" + }, + "loginStatus": { + "message": "Login status" + }, "masterPasswordChanged": { "message": "Master password saved" }, @@ -3496,9 +3623,6 @@ "autofillPageLoadPolicyActivated": { "message": "Your organization policies have turned on autofill on page load." }, - "howToAutofill": { - "message": "How to autofill" - }, "autofillSelectInfoWithCommand": { "message": "Select an item from this screen, use the shortcut $COMMAND$, or explore other options in settings.", "placeholders": { @@ -3556,6 +3680,94 @@ "rememberThisDeviceToMakeFutureLoginsSeamless": { "message": "Remember this device to make future logins seamless" }, + "manageDevices": { + "message": "Manage devices" + }, + "currentSession": { + "message": "Current session" + }, + "mobile": { + "message": "Mobile", + "description": "Mobile app" + }, + "extension": { + "message": "Extension", + "description": "Browser extension/addon" + }, + "desktop": { + "message": "Desktop", + "description": "Desktop app" + }, + "webVault": { + "message": "Web vault" + }, + "webApp": { + "message": "Web app" + }, + "cli": { + "message": "CLI" + }, + "sdk": { + "message": "SDK", + "description": "Software Development Kit" + }, + "requestPending": { + "message": "Request pending" + }, + "firstLogin": { + "message": "First login" + }, + "trusted": { + "message": "Trusted" + }, + "needsApproval": { + "message": "Needs approval" + }, + "devices": { + "message": "Devices" + }, + "accessAttemptBy": { + "message": "Access attempt by $EMAIL$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + } + } + }, + "confirmAccess": { + "message": "Confirm access" + }, + "denyAccess": { + "message": "Deny access" + }, + "time": { + "message": "Time" + }, + "deviceType": { + "message": "Device Type" + }, + "loginRequest": { + "message": "Login request" + }, + "thisRequestIsNoLongerValid": { + "message": "This request is no longer valid." + }, + "loginRequestHasAlreadyExpired": { + "message": "Login request has already expired." + }, + "justNow": { + "message": "Just now" + }, + "requestedXMinutesAgo": { + "message": "Requested $MINUTES$ minutes ago", + "placeholders": { + "minutes": { + "content": "$1", + "example": "5" + } + } + }, "deviceApprovalRequired": { "message": "Device approval required. Select an approval option below:" }, @@ -3795,18 +4007,10 @@ "aliasDomain": { "message": "Alias domain" }, - "passwordRepromptDisabledAutofillOnPageLoad": { - "message": "Items with master password re-prompt cannot be autofilled on page load. Autofill on page load turned off.", - "description": "Toast message for describing that master password re-prompt cannot be autofilled on page load." - }, "autofillOnPageLoadSetToDefault": { "message": "Autofill on page load set to use default setting.", "description": "Toast message for informing the user that autofill on page load has been set to the default setting." }, - "turnOffMasterPasswordPromptToEditField": { - "message": "Turn off master password re-prompt to edit this field", - "description": "Message appearing below the autofill on load message when master password reprompt is set for a vault item." - }, "toggleSideNavigation": { "message": "Toggle side navigation" }, @@ -4015,15 +4219,11 @@ "selectImportCollection": { "message": "Select a collection" }, - "importTargetHint": { - "message": "Select this option if you want the imported file contents moved to a $DESTINATION$", - "description": "Located as a hint under the import target. Will be appended by either folder or collection, depending if the user is importing into an individual or an organizational vault.", - "placeholders": { - "destination": { - "content": "$1", - "example": "folder or collection" - } - } + "importTargetHintCollection": { + "message": "Select this option if you want the imported file contents moved to a collection" + }, + "importTargetHintFolder": { + "message": "Select this option if you want the imported file contents moved to a folder" }, "importUnassignedItemsError": { "message": "File contains unassigned items." @@ -4080,9 +4280,6 @@ "passkeyNotCopiedAlert": { "message": "The passkey will not be copied to the cloned item. Do you want to continue cloning this item?" }, - "passkeyFeatureIsNotImplementedForAccountsWithoutMasterPassword": { - "message": "Verification required by the initiating site. This feature is not yet implemented for accounts without master password." - }, "logInWithPasskeyQuestion": { "message": "Log in with passkey?" }, @@ -4465,17 +4662,17 @@ } } }, - "copyFieldValue": { - "message": "Copy $FIELD$, $VALUE$", + "copyFieldCipherName": { + "message": "Copy $FIELD$, $CIPHERNAME$", "description": "Title for a button that copies a field value to the clipboard.", "placeholders": { "field": { "content": "$1", "example": "Username" }, - "value": { + "ciphername": { "content": "$2", - "example": "Foo" + "example": "Login Item" } } }, @@ -4768,9 +4965,6 @@ } } }, - "enableAnimations": { - "message": "Enable animations" - }, "showAnimations": { "message": "Show animations" }, @@ -4983,15 +5177,9 @@ "itemLocation": { "message": "Item Location" }, - "fileSend": { - "message": "File Send" - }, "fileSends": { "message": "File Sends" }, - "textSend": { - "message": "Text Send" - }, "textSends": { "message": "Text Sends" }, @@ -5001,6 +5189,18 @@ "showNumberOfAutofillSuggestions": { "message": "Show number of login autofill suggestions on extension icon" }, + "accountAccessRequested": { + "message": "Account access requested" + }, + "confirmAccessAttempt": { + "message": "Confirm access attempt for $EMAIL$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + } + } + }, "showQuickCopyActions": { "message": "Show quick copy actions on Vault" }, @@ -5040,9 +5240,6 @@ "vaultCustomTimeoutMinimum": { "message": "Minimum custom timeout is 1 minute." }, - "additionalContentAvailable": { - "message": "Additional content is available" - }, "fileSavedToDevice": { "message": "File saved to device. Manage from your device downloads." }, @@ -5328,6 +5525,12 @@ "changeAtRiskPassword": { "message": "Change at-risk password" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "This login is at-risk and missing a website. Add a website and change the password for stronger security." + }, + "missingWebsite": { + "message": "Missing website" + }, "settingsVaultOptions": { "message": "Vault options" }, @@ -5376,6 +5579,18 @@ "hasItemsVaultNudgeTitle": { "message": "Welcome to your vault!" }, + "phishingPageTitle": { + "message": "Phishing website" + }, + "phishingPageCloseTab": { + "message": "Close tab" + }, + "phishingPageContinue": { + "message": "Continue" + }, + "phishingPageLearnWhy": { + "message": "Why are you seeing this?" + }, "hasItemsVaultNudgeBodyOne": { "message": "Autofill items for the current page" }, @@ -5451,11 +5666,33 @@ "message": "Easily create strong and unique passwords by clicking on the Generate password button to help you keep your logins secure.", "description": "Aria label for the body content of the generator nudge" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "noPermissionsViewPage": { "message": "You do not have permissions to view this page. Try logging in with a different account." }, "wasmNotSupported": { "message": "WebAssembly is not supported on your browser or is not enabled. WebAssembly is required to use the Bitwarden app.", "description": "'WebAssembly' is a technical term and should not be translated." + }, + "showMore": { + "message": "Show more" + }, + "showLess": { + "message": "Show less" + }, + "next": { + "message": "Next" + }, + "moreBreadcrumbs": { + "message": "More breadcrumbs", + "description": "This is used in the context of a breadcrumb navigation, indicating that there are more items in the breadcrumb trail that are not currently displayed." + }, + "confirmKeyConnectorDomain": { + "message": "Confirm Key Connector domain" } } diff --git a/apps/browser/src/_locales/or/messages.json b/apps/browser/src/_locales/or/messages.json index ecc7da63e79..6180d490f09 100644 --- a/apps/browser/src/_locales/or/messages.json +++ b/apps/browser/src/_locales/or/messages.json @@ -547,12 +547,50 @@ "searchVault": { "message": "Search vault" }, + "resetSearch": { + "message": "Reset search" + }, + "archiveNoun": { + "message": "Archive", + "description": "Noun" + }, + "archiveVerb": { + "message": "Archive", + "description": "Verb" + }, + "unarchive": { + "message": "Unarchive" + }, + "itemsInArchive": { + "message": "Items in archive" + }, + "noItemsInArchive": { + "message": "No items in archive" + }, + "noItemsInArchiveDesc": { + "message": "Archived items will appear here and will be excluded from general search results and autofill suggestions." + }, + "itemSentToArchive": { + "message": "Item sent to archive" + }, + "itemRemovedFromArchive": { + "message": "Item removed from archive" + }, + "archiveItem": { + "message": "Archive item" + }, + "archiveItemConfirmDesc": { + "message": "Archived items are excluded from general search results and autofill suggestions. Are you sure you want to archive this item?" + }, "edit": { "message": "Edit" }, "view": { "message": "View" }, + "viewLogin": { + "message": "View login" + }, "noItemsInList": { "message": "There are no items to list." }, @@ -695,6 +733,15 @@ "invalidMasterPassword": { "message": "Invalid master password" }, + "invalidMasterPasswordConfirmEmailAndHost": { + "message": "Invalid master password. Confirm your email is correct and your account was created on $HOST$.", + "placeholders": { + "host": { + "content": "$1", + "example": "vault.bitwarden.com" + } + } + }, "vaultTimeout": { "message": "Vault timeout" }, @@ -1501,6 +1548,15 @@ "readSecurityKey": { "message": "Read security key" }, + "readingPasskeyLoading": { + "message": "Reading passkey..." + }, + "passkeyAuthenticationFailed": { + "message": "Passkey authentication failed" + }, + "useADifferentLogInMethod": { + "message": "Use a different log in method" + }, "awaitingSecurityKeyInteraction": { "message": "Awaiting security key interaction..." }, @@ -1519,9 +1575,6 @@ "selectTwoStepLoginMethod": { "message": "Select two-step login method" }, - "recoveryCodeDesc": { - "message": "Lost access to all of your two-factor providers? Use your recovery code to turn off all two-factor providers from your account." - }, "recoveryCodeTitle": { "message": "Recovery code" }, @@ -1680,9 +1733,6 @@ "defaultAutoFillOnPageLoadDesc": { "message": "You can turn off autofill on page load for individual login items from the item's Edit view." }, - "itemAutoFillOnPageLoad": { - "message": "Autofill on page load (if set up in Options)" - }, "autoFillOnPageLoadUseDefault": { "message": "Use default setting" }, @@ -1754,23 +1804,8 @@ "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?" }, - "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?" - }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." - }, - "faviconDescAlt": { - "message": "Show a recognizable image next to each login. Applies to all logged in accounts." - }, - "enableBadgeCounter": { - "message": "Show badge counter" - }, - "badgeCounterDesc": { - "message": "Indicate how many logins you have for the current web page." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "cardholderName": { "message": "Cardholder name" @@ -1829,6 +1864,9 @@ "securityCode": { "message": "Security code" }, + "cardNumber": { + "message": "card number" + }, "ex": { "message": "ex." }, @@ -1931,32 +1969,81 @@ "typeNote": { "message": "Note" }, - "newItemHeader": { - "message": "New $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderLogin": { + "message": "New Login", + "description": "Header for new login item type" }, - "editItemHeader": { - "message": "Edit $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderCard": { + "message": "New Card", + "description": "Header for new card item type" }, - "viewItemHeader": { - "message": "View $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderIdentity": { + "message": "New Identity", + "description": "Header for new identity item type" + }, + "newItemHeaderNote": { + "message": "New Note", + "description": "Header for new note item type" + }, + "newItemHeaderSshKey": { + "message": "New SSH key", + "description": "Header for new SSH key item type" + }, + "newItemHeaderTextSend": { + "message": "New Text Send", + "description": "Header for new text send" + }, + "newItemHeaderFileSend": { + "message": "New File Send", + "description": "Header for new file send" + }, + "editItemHeaderLogin": { + "message": "Edit Login", + "description": "Header for edit login item type" + }, + "editItemHeaderCard": { + "message": "Edit Card", + "description": "Header for edit card item type" + }, + "editItemHeaderIdentity": { + "message": "Edit Identity", + "description": "Header for edit identity item type" + }, + "editItemHeaderNote": { + "message": "Edit Note", + "description": "Header for edit note item type" + }, + "editItemHeaderSshKey": { + "message": "Edit SSH key", + "description": "Header for edit SSH key item type" + }, + "editItemHeaderTextSend": { + "message": "Edit Text Send", + "description": "Header for edit text send" + }, + "editItemHeaderFileSend": { + "message": "Edit File Send", + "description": "Header for edit file send" + }, + "viewItemHeaderLogin": { + "message": "View Login", + "description": "Header for view login item type" + }, + "viewItemHeaderCard": { + "message": "View Card", + "description": "Header for view card item type" + }, + "viewItemHeaderIdentity": { + "message": "View Identity", + "description": "Header for view identity item type" + }, + "viewItemHeaderNote": { + "message": "View Note", + "description": "Header for view note item type" + }, + "viewItemHeaderSshKey": { + "message": "View SSH key", + "description": "Header for view SSH key item type" }, "passwordHistory": { "message": "Password history" @@ -3129,6 +3216,24 @@ } } }, + "exportingOrganizationVaultFromPasswordManagerWithDataOwnershipDesc": { + "message": "Only the organization vault associated with $ORGANIZATION$ will be exported.", + "placeholders": { + "organization": { + "content": "$1", + "example": "My Org Name" + } + } + }, + "exportingOrganizationVaultFromAdminConsoleWithDataOwnershipDesc": { + "message": "Only the organization vault associated with $ORGANIZATION$ will be exported. My items collections will not be included.", + "placeholders": { + "organization": { + "content": "$1", + "example": "My Org Name" + } + } + }, "error": { "message": "Error" }, @@ -3460,6 +3565,28 @@ "logInRequestSent": { "message": "Request sent" }, + "loginRequestApprovedForEmailOnDevice": { + "message": "Login request approved for $EMAIL$ on $DEVICE$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + }, + "device": { + "content": "$2", + "example": "Web app - Chrome" + } + } + }, + "youDeniedLoginAttemptFromAnotherDevice": { + "message": "You denied a login attempt from another device. If this was you, try to log in with the device again." + }, + "device": { + "message": "Device" + }, + "loginStatus": { + "message": "Login status" + }, "masterPasswordChanged": { "message": "Master password saved" }, @@ -3496,9 +3623,6 @@ "autofillPageLoadPolicyActivated": { "message": "Your organization policies have turned on autofill on page load." }, - "howToAutofill": { - "message": "How to autofill" - }, "autofillSelectInfoWithCommand": { "message": "Select an item from this screen, use the shortcut $COMMAND$, or explore other options in settings.", "placeholders": { @@ -3556,6 +3680,94 @@ "rememberThisDeviceToMakeFutureLoginsSeamless": { "message": "Remember this device to make future logins seamless" }, + "manageDevices": { + "message": "Manage devices" + }, + "currentSession": { + "message": "Current session" + }, + "mobile": { + "message": "Mobile", + "description": "Mobile app" + }, + "extension": { + "message": "Extension", + "description": "Browser extension/addon" + }, + "desktop": { + "message": "Desktop", + "description": "Desktop app" + }, + "webVault": { + "message": "Web vault" + }, + "webApp": { + "message": "Web app" + }, + "cli": { + "message": "CLI" + }, + "sdk": { + "message": "SDK", + "description": "Software Development Kit" + }, + "requestPending": { + "message": "Request pending" + }, + "firstLogin": { + "message": "First login" + }, + "trusted": { + "message": "Trusted" + }, + "needsApproval": { + "message": "Needs approval" + }, + "devices": { + "message": "Devices" + }, + "accessAttemptBy": { + "message": "Access attempt by $EMAIL$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + } + } + }, + "confirmAccess": { + "message": "Confirm access" + }, + "denyAccess": { + "message": "Deny access" + }, + "time": { + "message": "Time" + }, + "deviceType": { + "message": "Device Type" + }, + "loginRequest": { + "message": "Login request" + }, + "thisRequestIsNoLongerValid": { + "message": "This request is no longer valid." + }, + "loginRequestHasAlreadyExpired": { + "message": "Login request has already expired." + }, + "justNow": { + "message": "Just now" + }, + "requestedXMinutesAgo": { + "message": "Requested $MINUTES$ minutes ago", + "placeholders": { + "minutes": { + "content": "$1", + "example": "5" + } + } + }, "deviceApprovalRequired": { "message": "Device approval required. Select an approval option below:" }, @@ -3795,18 +4007,10 @@ "aliasDomain": { "message": "Alias domain" }, - "passwordRepromptDisabledAutofillOnPageLoad": { - "message": "Items with master password re-prompt cannot be autofilled on page load. Autofill on page load turned off.", - "description": "Toast message for describing that master password re-prompt cannot be autofilled on page load." - }, "autofillOnPageLoadSetToDefault": { "message": "Autofill on page load set to use default setting.", "description": "Toast message for informing the user that autofill on page load has been set to the default setting." }, - "turnOffMasterPasswordPromptToEditField": { - "message": "Turn off master password re-prompt to edit this field", - "description": "Message appearing below the autofill on load message when master password reprompt is set for a vault item." - }, "toggleSideNavigation": { "message": "Toggle side navigation" }, @@ -4015,15 +4219,11 @@ "selectImportCollection": { "message": "Select a collection" }, - "importTargetHint": { - "message": "Select this option if you want the imported file contents moved to a $DESTINATION$", - "description": "Located as a hint under the import target. Will be appended by either folder or collection, depending if the user is importing into an individual or an organizational vault.", - "placeholders": { - "destination": { - "content": "$1", - "example": "folder or collection" - } - } + "importTargetHintCollection": { + "message": "Select this option if you want the imported file contents moved to a collection" + }, + "importTargetHintFolder": { + "message": "Select this option if you want the imported file contents moved to a folder" }, "importUnassignedItemsError": { "message": "File contains unassigned items." @@ -4080,9 +4280,6 @@ "passkeyNotCopiedAlert": { "message": "The passkey will not be copied to the cloned item. Do you want to continue cloning this item?" }, - "passkeyFeatureIsNotImplementedForAccountsWithoutMasterPassword": { - "message": "Verification required by the initiating site. This feature is not yet implemented for accounts without master password." - }, "logInWithPasskeyQuestion": { "message": "Log in with passkey?" }, @@ -4465,17 +4662,17 @@ } } }, - "copyFieldValue": { - "message": "Copy $FIELD$, $VALUE$", + "copyFieldCipherName": { + "message": "Copy $FIELD$, $CIPHERNAME$", "description": "Title for a button that copies a field value to the clipboard.", "placeholders": { "field": { "content": "$1", "example": "Username" }, - "value": { + "ciphername": { "content": "$2", - "example": "Foo" + "example": "Login Item" } } }, @@ -4768,9 +4965,6 @@ } } }, - "enableAnimations": { - "message": "Enable animations" - }, "showAnimations": { "message": "Show animations" }, @@ -4983,15 +5177,9 @@ "itemLocation": { "message": "Item Location" }, - "fileSend": { - "message": "File Send" - }, "fileSends": { "message": "File Sends" }, - "textSend": { - "message": "Text Send" - }, "textSends": { "message": "Text Sends" }, @@ -5001,6 +5189,18 @@ "showNumberOfAutofillSuggestions": { "message": "Show number of login autofill suggestions on extension icon" }, + "accountAccessRequested": { + "message": "Account access requested" + }, + "confirmAccessAttempt": { + "message": "Confirm access attempt for $EMAIL$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + } + } + }, "showQuickCopyActions": { "message": "Show quick copy actions on Vault" }, @@ -5040,9 +5240,6 @@ "vaultCustomTimeoutMinimum": { "message": "Minimum custom timeout is 1 minute." }, - "additionalContentAvailable": { - "message": "Additional content is available" - }, "fileSavedToDevice": { "message": "File saved to device. Manage from your device downloads." }, @@ -5328,6 +5525,12 @@ "changeAtRiskPassword": { "message": "Change at-risk password" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "This login is at-risk and missing a website. Add a website and change the password for stronger security." + }, + "missingWebsite": { + "message": "Missing website" + }, "settingsVaultOptions": { "message": "Vault options" }, @@ -5376,6 +5579,18 @@ "hasItemsVaultNudgeTitle": { "message": "Welcome to your vault!" }, + "phishingPageTitle": { + "message": "Phishing website" + }, + "phishingPageCloseTab": { + "message": "Close tab" + }, + "phishingPageContinue": { + "message": "Continue" + }, + "phishingPageLearnWhy": { + "message": "Why are you seeing this?" + }, "hasItemsVaultNudgeBodyOne": { "message": "Autofill items for the current page" }, @@ -5451,11 +5666,33 @@ "message": "Easily create strong and unique passwords by clicking on the Generate password button to help you keep your logins secure.", "description": "Aria label for the body content of the generator nudge" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "noPermissionsViewPage": { "message": "You do not have permissions to view this page. Try logging in with a different account." }, "wasmNotSupported": { "message": "WebAssembly is not supported on your browser or is not enabled. WebAssembly is required to use the Bitwarden app.", "description": "'WebAssembly' is a technical term and should not be translated." + }, + "showMore": { + "message": "Show more" + }, + "showLess": { + "message": "Show less" + }, + "next": { + "message": "Next" + }, + "moreBreadcrumbs": { + "message": "More breadcrumbs", + "description": "This is used in the context of a breadcrumb navigation, indicating that there are more items in the breadcrumb trail that are not currently displayed." + }, + "confirmKeyConnectorDomain": { + "message": "Confirm Key Connector domain" } } diff --git a/apps/browser/src/_locales/pl/messages.json b/apps/browser/src/_locales/pl/messages.json index a6d5e34c03e..29e76da67ce 100644 --- a/apps/browser/src/_locales/pl/messages.json +++ b/apps/browser/src/_locales/pl/messages.json @@ -26,7 +26,7 @@ "message": "Nowy w Bitwarden?" }, "logInWithPasskey": { - "message": "Logowaniem kluczem dostępu" + "message": "Logowanie kluczem dostępu" }, "useSingleSignOn": { "message": "Użyj logowania jednokrotnego" @@ -96,7 +96,7 @@ "message": "Dołącz do organizacji" }, "joinOrganizationName": { - "message": "Dołącz do $ORGANIZATIONNAME$", + "message": "Dołącz do organizacji $ORGANIZATIONNAME$", "placeholders": { "organizationName": { "content": "$1", @@ -291,19 +291,19 @@ "message": "Zmień hasło główne" }, "continueToWebApp": { - "message": "Przejść do aplikacji internetowej?" + "message": "Kontynuować przejście do aplikacji internetowej?" }, "continueToWebAppDesc": { "message": "Odkryj więcej funkcji konta Bitwarden w aplikacji internetowej." }, "continueToHelpCenter": { - "message": "Przejść do centrum pomocy?" + "message": "Kontynuować przejście do centrum pomocy?" }, "continueToHelpCenterDesc": { "message": "Dowiedz się więcej o tym, jak korzystać z centrum pomocy Bitwarden." }, "continueToBrowserExtensionStore": { - "message": "Przejść do sklepu z rozszerzeniami przeglądarki?" + "message": "Kontynuować przejście do sklepu z rozszerzeniami przeglądarki?" }, "continueToBrowserExtensionStoreDesc": { "message": "Pomóż innym sprawdzić, czy Bitwarden jest dla nich odpowiedni. Odwiedź sklep z rozszerzeniami przeglądarki i zostaw ocenę." @@ -335,10 +335,10 @@ "message": "Więcej od Bitwarden" }, "continueToBitwardenDotCom": { - "message": "Przejść do bitwarden.com?" + "message": "Kontynuować przejście do bitwarden.com?" }, "bitwardenForBusiness": { - "message": "Bitwarden dla biznesu" + "message": "Bitwarden dla firm" }, "bitwardenAuthenticator": { "message": "Bitwarden Authenticator" @@ -347,16 +347,16 @@ "message": "Bitwarden Authenticator umożliwia przechowywanie kluczy uwierzytelniających i generowanie kodów TOTP dla weryfikacji dwustopniowej. Dowiedz się wiecej na bitwarden.com" }, "bitwardenSecretsManager": { - "message": "Menedżer sekretów Bitwarden" + "message": "Bitwarden Secrets Manager" }, "continueToSecretsManagerPageDesc": { - "message": "Bezpiecznie przechowuj, zarządzaj i udostępniaj sekrety programistów z Menedżerem sekretów Bitwarden. Dowiedz się więcej na stronie bitwarden.com." + "message": "Bezpiecznie przechowuj, zarządzaj i udostępniaj sekrety deweloperów za pomocą usługi Bitwarden Secrets Manager. Dowiedz się więcej na stronie bitwarden.com." }, "passwordlessDotDev": { "message": "Passwordless.dev" }, "continueToPasswordlessDotDevPageDesc": { - "message": "Twórz przyjemne i bezpieczne doświadczenia z logowaniem wolne od tradycyjnych haseł za pomocą Passwordless.dev. Dowiedz się więcej na stronie bitwarden.com." + "message": "Loguj się szybko i bezpiecznie bez tradycyjnych haseł za pomocą usługi Passwordless.dev. Dowiedz się więcej na stronie bitwarden.com." }, "freeBitwardenFamilies": { "message": "Darmowy plan rodzinny" @@ -483,7 +483,7 @@ "message": "Opcje" }, "length": { - "message": "Długość" + "message": "Liczba znaków" }, "include": { "message": "Uwzględnij", @@ -541,18 +541,56 @@ "description": "Label for the avoid ambiguous characters checkbox." }, "generatorPolicyInEffect": { - "message": "Wymagania polityki przedsiębiorstwa zostały użyte do ustawienia opcji generatora.", + "message": "Zasady organizacji zostały zastosowane do opcji generatora.", "description": "Indicates that a policy limits the credential generator screen." }, "searchVault": { "message": "Szukaj w sejfie" }, + "resetSearch": { + "message": "Zresetuj wyszukiwanie" + }, + "archiveNoun": { + "message": "Archiwum", + "description": "Noun" + }, + "archiveVerb": { + "message": "Archiwizuj", + "description": "Verb" + }, + "unarchive": { + "message": "Usuń z archiwum" + }, + "itemsInArchive": { + "message": "Elementy w archiwum" + }, + "noItemsInArchive": { + "message": "Brak elementów w archiwum" + }, + "noItemsInArchiveDesc": { + "message": "Zarchiwizowane elementy pojawią się tutaj i zostaną wykluczone z wyników wyszukiwania i sugestii autouzupełniania." + }, + "itemSentToArchive": { + "message": "Element został przeniesiony do archiwum" + }, + "itemRemovedFromArchive": { + "message": "Element został usunięty z archiwum" + }, + "archiveItem": { + "message": "Archiwizuj element" + }, + "archiveItemConfirmDesc": { + "message": "Zarchiwizowane elementy są wykluczone z wyników wyszukiwania i sugestii autouzupełniania. Czy na pewno chcesz archiwizować element?" + }, "edit": { "message": "Edytuj" }, "view": { "message": "Pokaż" }, + "viewLogin": { + "message": "Pokaż dane logowania" + }, "noItemsInList": { "message": "Brak elementów do wyświetlenia." }, @@ -647,7 +685,7 @@ "message": "Blokowanie sejfu" }, "otherOptions": { - "message": "Pozostałe opcje" + "message": "Inne opcje" }, "rateExtension": { "message": "Oceń rozszerzenie" @@ -659,7 +697,7 @@ "message": "Zweryfikuj tożsamość" }, "weDontRecognizeThisDevice": { - "message": "Nie rozpoznajemy tego urządzenia. Wpisz kod wysłany na Twój e-mail, aby zweryfikować tożsamość." + "message": "Nie rozpoznajemy tego urządzenia. Wpisz kod wysłany na adres e-mail, aby zweryfikować swoją tożsamość." }, "continueLoggingIn": { "message": "Kontynuuj logowanie" @@ -695,6 +733,15 @@ "invalidMasterPassword": { "message": "Hasło główne jest nieprawidłowe" }, + "invalidMasterPasswordConfirmEmailAndHost": { + "message": "Invalid master password. Confirm your email is correct and your account was created on $HOST$.", + "placeholders": { + "host": { + "content": "$1", + "example": "vault.bitwarden.com" + } + } + }, "vaultTimeout": { "message": "Blokowanie sejfu" }, @@ -741,10 +788,10 @@ "message": "4 godziny" }, "onLocked": { - "message": "Po zablokowaniu komputera" + "message": "Po zablokowaniu urządzenia" }, "onRestart": { - "message": "Po restarcie przeglądarki" + "message": "Po uruchomieniu przeglądarki" }, "never": { "message": "Nigdy" @@ -802,7 +849,7 @@ "message": "Zalogowano!" }, "youSuccessfullyLoggedIn": { - "message": "Zalogowałeś się pomyślnie" + "message": "Zalogowano" }, "youMayCloseThisWindow": { "message": "Możesz zamknąć to okno" @@ -830,10 +877,10 @@ } }, "autofillError": { - "message": "Nie można zastosować autouzupełnienia na tej stronie. Skopiuj i wklej informacje ręcznie." + "message": "Nie można uzupełnić elementu na tej stronie internetowej. Skopiuj i wklej informacje ręcznie." }, "totpCaptureError": { - "message": "Nie można zeskanować kodu QR z bieżącej strony" + "message": "Nie można zeskanować kodu QR z obecnej strony" }, "totpCaptureSuccess": { "message": "Klucz uwierzytelniający został dodany" @@ -851,7 +898,7 @@ "message": "Bitwarden może przechowywać i uzupełniać kody weryfikacyjne. Wybierz ikonę aparatu, aby zrobić zrzut ekranu z kodem QR lub skopiuj i wklej klucz do tego pola." }, "learnMoreAboutAuthenticators": { - "message": "Dowiedz się więcej o uwierzytelniaczach" + "message": "Dowiedz się więcej o uwierzytelnianiu" }, "copyTOTP": { "message": "Kopiuj klucz uwierzytelniający (TOTP)" @@ -860,7 +907,7 @@ "message": "Wylogowano" }, "loggedOutDesc": { - "message": "Zostałeś wylogowany z konta." + "message": "Wylogowano z konta." }, "loginExpired": { "message": "Twoja sesja wygasła." @@ -890,13 +937,13 @@ "message": "Wykonaj poniższe kroki, aby zakończyć logowanie za pomocą klucza bezpieczeństwa." }, "restartRegistration": { - "message": "Zacznij rejestrację od początku" + "message": "Rozpocznij rejestrację od początku" }, "expiredLink": { "message": "Link wygasł" }, "pleaseRestartRegistrationOrTryLoggingIn": { - "message": "Zrestartuj rejestrację lub spróbuj się zalogować." + "message": "Rozpocznij rejestrację od początku lub spróbuj się zalogować." }, "youMayAlreadyHaveAnAccount": { "message": "Możesz mieć już konto" @@ -926,10 +973,10 @@ "message": "Logowanie dwustopniowe zwiększa bezpieczeństwo konta, wymagając weryfikacji logowania za pomocą innego urządzenia, takiego jak klucz bezpieczeństwa, aplikacja uwierzytelniająca, wiadomość SMS, połączenie telefoniczne lub wiadomość e-mail. Logowanie dwustopniowe możesz skonfigurować w sejfie internetowym bitwarden.com. Czy chcesz przejść do strony?" }, "twoStepLoginConfirmationContent": { - "message": "Spraw, aby Twoje konto było bezpieczniejsze poprzez skonfigurowanie dwustopniowego logowania w aplikacji internetowej Bitwarden." + "message": "Zwiększ bezpieczeństwo konta, konfigurując logowanie dwustopniowe w aplikacji internetowej Bitwarden." }, "twoStepLoginConfirmationTitle": { - "message": "Przejść do aplikacji internetowej?" + "message": "Kontynuować przejście do aplikacji internetowej?" }, "editedFolder": { "message": "Folder został zapisany" @@ -1019,28 +1066,28 @@ "message": "Opcje zapisywania w sejfie" }, "addLoginNotificationDesc": { - "message": "\"Dodaj powiadomienia logowania\" automatycznie wyświetla monit o zapisanie nowych danych logowania do sejfu przy każdym pierwszym logowaniu." + "message": "Proponuj zapisywanie danych logowania, jeśli nie ma ich w sejfie." }, "addLoginNotificationDescAlt": { - "message": "Poproś o dodanie elementu, jeśli nie zostanie znaleziony w Twoim sejfie. Dotyczy wszystkich zalogowanych kont." + "message": "Proponuj zapisywanie danych logowania, jeśli nie ma ich w sejfie. Dotyczy wszystkich zalogowanych kont." }, "showCardsInVaultViewV2": { - "message": "Pokazuj zawsze karty w sugestiach autouzupełniania" + "message": "Zawsze pokazuj karty w sugestiach autouzupełniania" }, "showCardsCurrentTab": { "message": "Pokaż karty na stronie głównej" }, "showCardsCurrentTabDesc": { - "message": "Pokaż elementy karty na stronie głównej, aby ułatwić autouzupełnianie." + "message": "Wyświetla karty na głównej karcie sejfu." }, "showIdentitiesInVaultViewV2": { - "message": "Pokazuj zawsze tożsamości w sugestiach autouzupełniania" + "message": "Zawsze pokazuj tożsamości w sugestiach autouzupełniania" }, "showIdentitiesCurrentTab": { "message": "Pokaż tożsamości na stronie głównej" }, "showIdentitiesCurrentTabDesc": { - "message": "Pokaż elementy tożsamości na stronie głównej, aby ułatwić autouzupełnianie." + "message": "Wyświetla tożsamości na głównej karcie sejfu." }, "clickToAutofillOnVault": { "message": "Kliknij na elementy, aby je uzupełnić" @@ -1063,7 +1110,7 @@ "message": "Zapisz" }, "notificationViewAria": { - "message": "Wyświetl $ITEMNAME$, otworzy się w nowym oknie", + "message": "Pokaż $ITEMNAME$, otwiera się w nowym oknie", "placeholders": { "itemName": { "content": "$1" @@ -1129,7 +1176,7 @@ "description": "Prompt asking the user if they want to save their login details." }, "updateLogin": { - "message": "Zaktualizuj obecne dane logowania", + "message": "Zaktualizuj dane logowania", "description": "Prompt asking the user if they want to update an existing login entry." }, "loginSaveSuccess": { @@ -1141,7 +1188,7 @@ "description": "Message displayed when login details are successfully updated." }, "loginUpdateTaskSuccess": { - "message": "Świetna robota! Podjęto kroki mające na celu zwiększenie bezpieczeństwa Twojego oraz $ORGANIZATION$.", + "message": "Dobra robota! Twoje konto i organizacja $ORGANIZATION$ jest bezpieczniejsza.", "placeholders": { "organization": { "content": "$1" @@ -1150,7 +1197,7 @@ "description": "Shown to user after login is updated." }, "loginUpdateTaskSuccessAdditional": { - "message": "Dziękujemy za dbanie o bezpieczeństwo $ORGANIZATION$. Pozostało $TASK_COUNT$ haseł do zaktualizowania.", + "message": "Dziękujemy za zwiększenie bezpieczeństwa organizacji $ORGANIZATION$. Zaktualizuj hasła dla jeszcze $TASK_COUNT$ danych logowania.", "placeholders": { "organization": { "content": "$1" @@ -1174,7 +1221,7 @@ "description": "Detailed error message shown when saving login details fails." }, "changePasswordWarning": { - "message": "After changing your password, you will need to log in with your new password. Active sessions on other devices will be logged out within one hour." + "message": "Po zmianie hasła zaloguj się za pomocą nowego hasła. Aktywne sesje na innych urządzeniach zostaną wylogowane w ciągu jednej godziny." }, "accountRecoveryUpdateMasterPasswordSubtitle": { "message": "Zmień hasło główne, aby zakończyć odzyskiwanie konta." @@ -1183,10 +1230,10 @@ "message": "Proponuj aktualizuję obecnych danych logowania" }, "changedPasswordNotificationDesc": { - "message": "Poproś o aktualizację hasła danych logowania po wykryciu zmiany w witrynie." + "message": "Proponuj aktualizację hasła po wykryciu zmiany na stronie internetowej." }, "changedPasswordNotificationDescAlt": { - "message": "Poproś o aktualizację hasła, gdy zmiana zostanie wykryta na stronie. Dotyczy wszystkich zalogowanych kont." + "message": "Proponuj aktualizację hasła po wykryciu zmiany na stronie internetowej. Dotyczy wszystkich zalogowanych kont." }, "enableUsePasskeys": { "message": "Proponuj zapisywanie i używanie kluczy dostępu" @@ -1201,7 +1248,7 @@ "message": "Zaktualizuj" }, "notificationUnlockDesc": { - "message": "Odblokuj swój sejf Bitwarden, aby ukończyć żądanie autouzupełniania." + "message": "Odblokuj sejf Bitwarden, aby uzupełnić dane." }, "notificationUnlock": { "message": "Odblokuj" @@ -1213,17 +1260,17 @@ "message": "Pokaż opcje w menu kontekstowym" }, "contextMenuItemDesc": { - "message": "Użyj drugiego kliknięcia, aby uzyskać dostęp do generowania haseł i pasujących danych logowania do witryny." + "message": "Użyj drugiego kliknięcia, aby uzyskać dostęp do generatora hasła i pasujących danych logowania." }, "contextMenuItemDescAlt": { - "message": "Użyj drugiego kliknięcia, aby uzyskać dostęp do generowania haseł i pasujących danych logowania do witryny. Dotyczy wszystkich zalogowanych kont." + "message": "Użyj drugiego kliknięcia, aby uzyskać dostęp do generatora hasła i pasujących danych logowania. Dotyczy wszystkich zalogowanych kont." }, "defaultUriMatchDetection": { "message": "Domyślne wykrywanie dopasowania", "description": "Default URI match detection for autofill." }, "defaultUriMatchDetectionDesc": { - "message": "Wybierz domyślny sposób wykrywania dopasowania adresów dla czynności takich jak autouzupełnianie." + "message": "Wybierz domyślne wykrywanie dopasowania dla autouzupełniania." }, "theme": { "message": "Motyw" @@ -1252,7 +1299,7 @@ "message": "Format pliku" }, "fileEncryptedExportWarningDesc": { - "message": "Plik będzie chroniony hasłem, które będzie wymagane do odszyfrowania pliku." + "message": "Plik zostanie zaszyfrowany hasłem." }, "filePassword": { "message": "Hasło pliku" @@ -1270,7 +1317,7 @@ "message": "Rodzaj eksportu" }, "accountRestricted": { - "message": "Konto ograniczone" + "message": "Konto zostało ograniczone" }, "filePasswordAndConfirmFilePasswordDoNotMatch": { "message": "Hasła pliku nie pasują do siebie." @@ -1287,7 +1334,7 @@ "message": "Potwierdź eksportowanie sejfu" }, "exportWarningDesc": { - "message": "Plik zawiera dane sejfu w niezaszyfrowanym formacie. Nie powinieneś go przechowywać, ani przesyłać poprzez niezabezpieczone kanały (takie jak poczta e-mail). Skasuj go natychmiast po użyciu." + "message": "Plik zawiera dane sejfu w niezaszyfrowanym formacie. Nie należy go przechowywać ani przesyłać poprzez niezabezpieczone kanały (takie jak poczta e-mail). Usuń go natychmiast po użyciu." }, "encExportKeyWarningDesc": { "message": "Dane eksportu zostaną zaszyfrowane za pomocą klucza szyfrowania konta. Jeśli kiedykolwiek zmienisz ten klucz, wyeksportuj dane ponownie, ponieważ nie będziesz w stanie odszyfrować tego pliku." @@ -1296,13 +1343,13 @@ "message": "Klucze szyfrowania konta są unikalne dla każdego użytkownika Bitwarden, więc nie możesz zaimportować zaszyfrowanego pliku eksportu na inne konto." }, "exportMasterPassword": { - "message": "Wpisz hasło główne, aby wyeksportować dane z sejfu." + "message": "Wpisz hasło główne, aby wyeksportować dane sejfu." }, "shared": { "message": "Udostępnione" }, "bitwardenForBusinessPageDesc": { - "message": "Bitwarden dla biznesu pozwala na udostępnianie zawartości sejfu innym użytkownikom za pośrednictwem organizacji. Dowiedz się więcej na stronie bitwarden.com." + "message": "Bitwarden dla firm pozwala na udostępnianie zawartości sejfu innym użytkownikom za pośrednictwem organizacji. Dowiedz się więcej na stronie bitwarden.com." }, "moveToOrganization": { "message": "Przenieś do organizacji" @@ -1372,7 +1419,7 @@ "message": "Funkcja jest niedostępna" }, "legacyEncryptionUnsupported": { - "message": "Starsze szyfrowanie nie jest już obsługiwane. Skontaktuj się z pomocą techniczną, aby odzyskać swoje konto." + "message": "Starsze szyfrowanie nie jest już obsługiwane. Skontaktuj się z pomocą techniczną, aby odzyskać konto." }, "premiumMembership": { "message": "Konto premium" @@ -1402,7 +1449,7 @@ "message": "Specjalne opcje logowania dwustopniowego, takie jak YubiKey i Duo." }, "ppremiumSignUpReports": { - "message": "Raporty bezpieczeństwa haseł, stanu konta i raporty wycieków danych, aby Twoje dane były bezpieczne." + "message": "Raporty bezpieczeństwa haseł, konta i wycieków danych, aby Twoje dane były bezpieczne." }, "ppremiumSignUpTotp": { "message": "Generator kodów weryfikacyjnych TOTP dla danych logowania w sejfie." @@ -1456,7 +1503,7 @@ "message": "Automatycznie kopiuje kod TOTP do schowka podczas autouzupełniania." }, "enableAutoBiometricsPrompt": { - "message": "Poproś o dane biometryczne przy uruchomieniu" + "message": "Wymagaj odblokowania biometrią po uruchomieniu przeglądarki" }, "premiumRequired": { "message": "Konto premium jest wymagane" @@ -1465,10 +1512,10 @@ "message": "Konto premium jest wymagane, aby skorzystać z tej funkcji." }, "authenticationTimeout": { - "message": "Limit czasu uwierzytelniania" + "message": "Przekroczono limit czasu uwierzytelniania" }, "authenticationSessionTimedOut": { - "message": "Upłynął limit czasu uwierzytelniania. Uruchom ponownie proces logowania." + "message": "Upłynął limit czasu uwierzytelniania. Zaloguj się ponownie." }, "verificationCodeEmailSent": { "message": "Wiadomość weryfikacyjna została wysłana na adres $EMAIL$.", @@ -1490,7 +1537,7 @@ "message": "Użyj kodu odzyskiwania" }, "insertU2f": { - "message": "Włóż klucz bezpieczeństwa do portu USB komputera. Jeśli klucz posiada przycisk, dotknij go." + "message": "Włóż klucz bezpieczeństwa do portu USB urządzenia. Jeśli klucz ma przycisk, dotknij go." }, "openInNewTab": { "message": "Otwórz w nowej karcie" @@ -1501,17 +1548,26 @@ "readSecurityKey": { "message": "Odczytaj klucz bezpieczeństwa" }, + "readingPasskeyLoading": { + "message": "Odczytywanie klucza dostępu..." + }, + "passkeyAuthenticationFailed": { + "message": "Passkey authentication failed" + }, + "useADifferentLogInMethod": { + "message": "Użyj innej metody logowania" + }, "awaitingSecurityKeyInteraction": { - "message": "Oczekiwanie na interakcję z kluczem bezpieczeństwa..." + "message": "Oczekiwanie na klucz bezpieczeństwa..." }, "loginUnavailable": { "message": "Logowanie jest niedostępne" }, "noTwoStepProviders": { - "message": "Konto posiada włączoną opcję logowania dwustopniowego, jednak ta przeglądarka nie wspiera żadnego ze skonfigurowanych mechanizmów autoryzacji dwustopniowej." + "message": "Konto jest zabezpieczone logowaniem dwustopniowym, ale żadna ze skonfigurowanych metod nie jest obsługiwana w tej przeglądarce." }, "noTwoStepProviders2": { - "message": "Proszę użyć obsługiwanej przeglądarki (takiej jak Chrome) i/lub dodać dodatkowych dostawców, którzy są lepiej wspierani przez przeglądarki internetowe (np. aplikacja uwierzytelniająca)." + "message": "Użyj obsługiwanej przeglądarki (np. Chrome) lub dodaj dodatkowe opcje logowania dwustopniowego, które są obsługiwane na różnych przeglądarkach (takie jak aplikacja uwierzytelniająca)." }, "twoStepOptions": { "message": "Opcje logowania dwustopniowego" @@ -1519,9 +1575,6 @@ "selectTwoStepLoginMethod": { "message": "Wybierz metodę logowania dwustopniowego" }, - "recoveryCodeDesc": { - "message": "Utraciłeś dostęp do wszystkich swoich mechanizmów dwustopniowego logowania? Użyj kodów odzyskiwania, aby wyłączyć dwustopniowe logowanie na Twoim koncie." - }, "recoveryCodeTitle": { "message": "Kod odzyskiwania" }, @@ -1550,7 +1603,7 @@ "message": "FIDO2 WebAuthn" }, "webAuthnDesc": { - "message": "Użyj dowolnego klucza bezpieczeństwa WebAuthn, aby uzyskać dostęp do swojego konta." + "message": "Użyj dowolnego klucza bezpieczeństwa WebAuthn, aby uzyskać dostęp do konta." }, "emailTitle": { "message": "Adres e-mail" @@ -1606,10 +1659,10 @@ "message": "Sugestie autouzupełniania" }, "autofillSpotlightTitle": { - "message": "Łatwe znajdowanie sugestii autouzupełniania" + "message": "Łatwe wyszukiwanie sugestii autouzupełniania" }, "autofillSpotlightDesc": { - "message": "Wyłącz ustawienia autouzupełniania swojej przeglądarki, aby nie kolidowały z Bitwarden." + "message": "Wyłącz autouzupełnianie przeglądarki, aby uniknąć konfliktów z Bitwarden." }, "turnOffBrowserAutofill": { "message": "Wyłącz autouzupełnianie $BROWSER$", @@ -1639,21 +1692,21 @@ "message": "Dotyczy wszystkich zalogowanych kont." }, "turnOffBrowserBuiltInPasswordManagerSettings": { - "message": "Wyłącz wbudowany w przeglądarkę menedżer haseł, aby uniknąć konfliktów." + "message": "Wyłącz menedżer haseł przeglądarki, aby uniknąć konfliktów." }, "turnOffBrowserBuiltInPasswordManagerSettingsLink": { "message": "Edytuj ustawienia przeglądarki." }, "autofillOverlayVisibilityOff": { - "message": "Wył.", + "message": "Wyłączone", "description": "Overlay setting select option for disabling autofill overlay" }, "autofillOverlayVisibilityOnFieldFocus": { - "message": "Gdy pole jest zaznaczone", + "message": "Po kliknięciu pola", "description": "Overlay appearance select option for showing the field on focus of the input element" }, "autofillOverlayVisibilityOnButtonClick": { - "message": "Gdy wybrano ikonę autouzupełniania", + "message": "Po kliknięciu ikony autouzupełniania", "description": "Overlay appearance select option for showing the field on click of the overlay icon" }, "enableAutoFillOnPageLoadSectionTitle": { @@ -1678,10 +1731,7 @@ "message": "Domyślne ustawienie autouzupełniania" }, "defaultAutoFillOnPageLoadDesc": { - "message": "Po włączeniu autouzupełnianiu po załadowaniu strony możesz włączyć lub wyłączyć tę funkcję dla poszczególnych wpisów." - }, - "itemAutoFillOnPageLoad": { - "message": "Automatycznie uzupełniaj po załadowaniu strony (jeśli włączono w opcjach)" + "message": "Możesz wyłączyć autouzupełnianie po załadowaniu strony dla poszczególnych elementów w opcjach konkretnych elementów." }, "autoFillOnPageLoadUseDefault": { "message": "Użyj domyślnego ustawienia" @@ -1754,23 +1804,8 @@ "popup2faCloseMessage": { "message": "Kliknięcie poza okno, w celu sprawdzenia wiadomość z kodem weryfikacyjnym spowoduje, że zostanie ono zamknięte. Czy chcesz otworzyć nowe okno tak, aby się nie zamknęło?" }, - "popupU2fCloseMessage": { - "message": "Ta przeglądarka nie może przetworzyć żądania U2F w wyskakującym oknie. Czy chcesz otworzyć nowe okno przeglądarki, aby zalogować się przy pomocy klucza U2F?" - }, - "enableFavicon": { - "message": "Pokaż ikony stron internetowych" - }, - "faviconDesc": { - "message": "Pokaż rozpoznawalny obraz obok danych logowania." - }, - "faviconDescAlt": { - "message": "Pokaż rozpoznawalny obraz obok danych logowania. Dotyczy wszystkich zalogowanych kont." - }, - "enableBadgeCounter": { - "message": "Pokaż licznik na ikonie" - }, - "badgeCounterDesc": { - "message": "Wskaż, ile masz danych logowania do bieżącej strony internetowej." + "showIconsChangePasswordUrls": { + "message": "Pokaż ikony stron internetowych i pobierz adresy URL do zmiany hasła" }, "cardholderName": { "message": "Właściciel karty" @@ -1829,6 +1864,9 @@ "securityCode": { "message": "Kod zabezpieczający" }, + "cardNumber": { + "message": "numer karty" + }, "ex": { "message": "np." }, @@ -1931,32 +1969,81 @@ "typeNote": { "message": "Notatka" }, - "newItemHeader": { - "message": "$TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderLogin": { + "message": "Nowe dane logowania", + "description": "Header for new login item type" }, - "editItemHeader": { - "message": "$TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderCard": { + "message": "Nowa karta", + "description": "Header for new card item type" }, - "viewItemHeader": { - "message": "Pokaż $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderIdentity": { + "message": "Nowa tożsamość", + "description": "Header for new identity item type" + }, + "newItemHeaderNote": { + "message": "Nowa notatka", + "description": "Header for new note item type" + }, + "newItemHeaderSshKey": { + "message": "Nowy klucz SSH", + "description": "Header for new SSH key item type" + }, + "newItemHeaderTextSend": { + "message": "Nowa wysyłka tekstu", + "description": "Header for new text send" + }, + "newItemHeaderFileSend": { + "message": "Nowa wysyłka pliku", + "description": "Header for new file send" + }, + "editItemHeaderLogin": { + "message": "Edytuj dane logowania", + "description": "Header for edit login item type" + }, + "editItemHeaderCard": { + "message": "Edytuj kartę", + "description": "Header for edit card item type" + }, + "editItemHeaderIdentity": { + "message": "Edytuj tożsamość", + "description": "Header for edit identity item type" + }, + "editItemHeaderNote": { + "message": "Edytuj notatkę", + "description": "Header for edit note item type" + }, + "editItemHeaderSshKey": { + "message": "Edytuj klucz SSH", + "description": "Header for edit SSH key item type" + }, + "editItemHeaderTextSend": { + "message": "Edytuj tekst wysyłki", + "description": "Header for edit text send" + }, + "editItemHeaderFileSend": { + "message": "Edytuj plik wysyłki", + "description": "Header for edit file send" + }, + "viewItemHeaderLogin": { + "message": "Pokaż dane logowania", + "description": "Header for view login item type" + }, + "viewItemHeaderCard": { + "message": "Pokaż kartę", + "description": "Header for view card item type" + }, + "viewItemHeaderIdentity": { + "message": "Pokaż tożsamość", + "description": "Header for view identity item type" + }, + "viewItemHeaderNote": { + "message": "Pokaż notatkę", + "description": "Header for view note item type" + }, + "viewItemHeaderSshKey": { + "message": "Pokaż klucz SSH", + "description": "Header for view SSH key item type" }, "passwordHistory": { "message": "Historia hasła" @@ -1968,7 +2055,7 @@ "message": "Wyczyść historię generatora" }, "cleargGeneratorHistoryDescription": { - "message": "Jeśli zatwierdzisz, wszystkie wygenerowane hasła zostaną usunięte z historii generatora. Czy chcesz kontynuować mimo to?" + "message": "Wszystkie wpisy zostaną trwale usunięte z historii generatora. Czy na pewno chcesz kontynuować?" }, "back": { "message": "Wstecz" @@ -1977,7 +2064,7 @@ "message": "Kolekcje" }, "nCollections": { - "message": "Kolekcje: $COUNT$", + "message": "W $COUNT$ kolekcjach", "placeholders": { "count": { "content": "$1", @@ -2063,7 +2150,7 @@ "description": "Default URI match detection for autofill." }, "toggleOptions": { - "message": "Zmień opcje" + "message": "Przełącz opcje" }, "toggleCurrentUris": { "message": "Przełącz obecny URI", @@ -2093,13 +2180,13 @@ "message": "Brak zawartości do pokazania" }, "nothingGeneratedRecently": { - "message": "Nic nie zostało wygenerowane przez ciebie w ostatnim czasie" + "message": "Nic nie zostało wygenerowane w ostatnim czasie" }, "remove": { "message": "Usuń" }, "default": { - "message": "Domyślne" + "message": "Domyślna" }, "dateUpdated": { "message": "Zaktualizowano", @@ -2110,7 +2197,7 @@ "description": "ex. Date this item was created" }, "datePasswordUpdated": { - "message": "Hasło zostało zaktualizowane", + "message": "Ostatnia aktualizacja hasła", "description": "ex. Date this password was updated" }, "neverLockWarning": { @@ -2126,7 +2213,7 @@ "message": "Właściciel" }, "whoOwnsThisItem": { - "message": "Kto jest właścicielem tego elementu?" + "message": "Kto jest właścicielem elementu?" }, "strong": { "message": "Silne", @@ -2144,7 +2231,7 @@ "message": "Hasło główne jest słabe" }, "weakMasterPasswordDesc": { - "message": "Wybrane przez Ciebie hasło główne jest słabe. Powinieneś użyć silniejszego hasła (lub frazy), aby właściwie chronić swoje konto Bitwarden. Czy na pewno chcesz użyć tego hasła głównego?" + "message": "Użyj silniejszego hasła, aby odpowiednio chronić konto Bitwarden. Czy na pewno chcesz użyć tego hasła głównego?" }, "pin": { "message": "Kod PIN", @@ -2160,10 +2247,10 @@ "message": "Ustaw kod PIN" }, "setYourPinCode": { - "message": "Ustaw kod PIN do odblokowywania aplikacji Bitwarden. Ustawienia odblokowywania kodem PIN zostaną zresetowane po wylogowaniu." + "message": "Ustaw kod PIN do odblokowania aplikacji Bitwarden. Ustawienia kodu PIN zostaną zresetowane po wylogowaniu." }, "setPinCode": { - "message": "Możesz użyć tego kodu PIN, aby odblokować Bitwarden. Twój kod PIN zostanie zresetowany, jeśli kiedykolwiek wylogujesz się z aplikacji." + "message": "Możesz użyć tego kodu PIN do odblokowania aplikacji Bitwarden. Kod PIN zostanie zresetowany po wylogowaniu." }, "pinRequired": { "message": "Kod PIN jest wymagany." @@ -2172,7 +2259,7 @@ "message": "Kod PIN jest nieprawidłowy." }, "tooManyInvalidPinEntryAttemptsLoggingOut": { - "message": "Zbyt wiele nieprawidłowych prób wpisywania PIN. Wylogowywanie." + "message": "Zbyt wiele nieprawidłowych prób wpisywania kodu PIN. Trwa wylogowanie" }, "unlockWithBiometrics": { "message": "Odblokuj biometrią" @@ -2184,13 +2271,13 @@ "message": "Oczekiwanie na potwierdzenie z aplikacji desktopowej" }, "awaitDesktopDesc": { - "message": "Włącz dane biometryczne w aplikacji desktopowej Bitwarden, aby włączyć tę samą funkcję w przeglądarce." + "message": "Włącz najpierw biometrię w aplikacji desktopowej Bitwarden, aby skonfigurować dane biometryczne w przeglądarce." }, "lockWithMasterPassOnRestart": { "message": "Zablokuj hasłem głównym po uruchomieniu przeglądarki" }, "lockWithMasterPassOnRestart1": { - "message": "Wymagaj hasła głównego przy ponownym uruchomieniu przeglądarki" + "message": "Wymagaj hasła głównego po uruchomieniu przeglądarki" }, "selectOneCollection": { "message": "Musisz wybrać co najmniej jedną kolekcję." @@ -2220,14 +2307,14 @@ "message": "Użyj tej nazwy użytkownika" }, "securePasswordGenerated": { - "message": "Wygenerowane bezpieczne hasło! Nie zapomnij również zaktualizować hasła na stronie." + "message": "Bezpieczne hasło zostało wygenerowane! Nie zapomnij zaktualizować hasła na stronie internetowej." }, "useGeneratorHelpTextPartOne": { "message": "Użyj generatora", "description": "This will be used as part of a larger sentence, broken up to include the generator icon. The full sentence will read 'Use the generator [GENERATOR_ICON] to create a strong unique password'" }, "useGeneratorHelpTextPartTwo": { - "message": ", aby utworzyć mocne unikalne hasło", + "message": ", aby utworzyć silne i unikalne hasło", "description": "This will be used as part of a larger sentence, broken up to include the generator icon. The full sentence will read 'Use the generator [GENERATOR_ICON] to create a strong unique password'" }, "vaultCustomization": { @@ -2293,10 +2380,10 @@ "message": "Czy chcesz uzupełnić dane logowania?" }, "autofillIframeWarning": { - "message": "Formularz jest hostowany przez inną domenę niż zapisany adres URI dla tego loginu. Wybierz OK, aby i tak automatycznie wypełnić lub anuluj, aby zatrzymać." + "message": "Formularz jest hostowany przez inną domenę niż URI zapisanych danych logowania. Kliknij OK, aby uzupełnić dane logowania lub Anuluj, aby zatrzymać." }, "autofillIframeWarningTip": { - "message": "Aby zapobiec temu ostrzeżeniu w przyszłości, zapisz ten URI, $HOSTNAME$, dla tej witryny.", + "message": "Aby uniknąć ostrzeżenia w przyszłości, zapisz URI $HOSTNAME$ w danych logowania.", "placeholders": { "hostname": { "content": "$1", @@ -2365,7 +2452,7 @@ "message": "Anuluj subskrypcję" }, "atAnyTime": { - "message": "w każdej chwili." + "message": "w dowolnym momencie." }, "byContinuingYouAgreeToThe": { "message": "Kontynuując, akceptujesz" @@ -2404,7 +2491,7 @@ "message": "Weryfikacja synchronizacji z aplikacją desktopową" }, "desktopIntegrationVerificationText": { - "message": "Zweryfikuj aplikację desktopową z odciskiem klucza: " + "message": "Zweryfikuj aplikację desktopową z identyfikatorem: " }, "desktopIntegrationDisabledTitle": { "message": "Połączenie z przeglądarką jest wyłączone" @@ -2416,7 +2503,7 @@ "message": "Uruchom aplikację desktopową Bitwarden" }, "startDesktopDesc": { - "message": "Aplikacja desktopowa Bitwarden, przed odblokowaniem danymi biometrycznymi, musi zostać ponownie uruchomiona." + "message": "Aplikacja desktopowa Bitwarden musi zostać uruchomiona przed odblokowaniem za pomocą biometrii." }, "errorEnableBiometricTitle": { "message": "Nie można włączyć biometrii" @@ -2431,7 +2518,7 @@ "message": "Komunikacja z aplikacją desktopową została przerwana" }, "nativeMessagingWrongUserDesc": { - "message": "W aplikacji desktopowej jesteś zalogowany na inne konto. Upewnij się, że w obu aplikacjach jesteś zalogowany na to same konto." + "message": "Aplikacja desktopowa jest zalogowana na inne konto. Upewnij się, że obie aplikacje są zalogowane na to samo konto." }, "nativeMessagingWrongUserTitle": { "message": "Konto jest niezgodne" @@ -2440,13 +2527,13 @@ "message": "Klucz biometrii jest nieprawidłowy" }, "nativeMessagingWrongUserKeyDesc": { - "message": "Odblokowanie biometryczne się nie powiodło. Sekretny klucz biometryczny nie odblokował sejfu. Spróbuj skonfigurować biometrię ponownie." + "message": "Odblokowanie biometrią nie powiodło się. Klucz biometrii nie odblokował sejfu. Spróbuj ponownie skonfigurować biometrię." }, "biometricsNotEnabledTitle": { "message": "Biometria jest wyłączona" }, "biometricsNotEnabledDesc": { - "message": "Aby włączyć dane biometryczne w przeglądarce, musisz włączyć tę samą funkcję w ustawianiach aplikacji desktopowej." + "message": "Aby skonfigurować dane biometryczne w przeglądarce, włącz najpierw biometrię w aplikacji desktopowej." }, "biometricsNotSupportedTitle": { "message": "Biometria nie jest obsługiwana" @@ -2470,19 +2557,19 @@ "message": "Logowanie biometrią nie powiodło się" }, "biometricsFailedDesc": { - "message": "Dane biometryczne nie mogę być użyte, rozważ użycie hasła głównego lub wylogowanie. Jeśli się to powtarza, skontaktuj się z pomocą techniczną Bitwarden." + "message": "Weryfikacja biometryczna nie powiodła się. Zaloguj się za pomocą hasła głównego. Jeśli problem się powtarza, skontaktuj się z pomocą techniczną Bitwarden." }, "nativeMessaginPermissionErrorTitle": { "message": "Uprawnienie nie zostało przyznane" }, "nativeMessaginPermissionErrorDesc": { - "message": "Bez uprawnienia do komunikowania się z aplikacją desktopową Bitwarden nie możemy dostarczyć obsługi danych biometrycznych w rozszerzeniu przeglądarki. Spróbuj ponownie." + "message": "Odblokowanie biometrią jest dostępne dopiero po połączeniu rozszerzenia przeglądarki z aplikacją desktopową Bitwarden. Spróbuj ponownie." }, "nativeMessaginPermissionSidebarTitle": { "message": "Wystąpił błąd żądania uprawnienia" }, "nativeMessaginPermissionSidebarDesc": { - "message": "Ta operacja nie może zostać wykonana na pasku bocznym. Spróbuj ponownie w nowym oknie." + "message": "Akcji nie można wykonać na pasku bocznym. Otwórz rozszerzenie w oknie." }, "personalOwnershipSubmitError": { "message": "Ze względu na zasadę organizacji, nie możesz zapisywać elementów w osobistym sejfie. Zmień właściciela elementu na organizację i wybierz jedną z dostępnych kolekcji." @@ -2491,13 +2578,13 @@ "message": "Zasada organizacji ma wpływ na opcję własności elementów." }, "personalOwnershipPolicyInEffectImports": { - "message": "Polityka organizacji zablokowała importowanie elementów do Twojego sejfu." + "message": "Zasada organizacji zablokowała importowanie elementów do osobistego sejfu." }, "restrictCardTypeImport": { "message": "Nie można zaimportować karty" }, "restrictCardTypeImportDesc": { - "message": "Polityka ustawiona przez 1 lub więcej organizacji uniemożliwia importowanie kart do sejfów." + "message": "Zasada ustawiona przez co najmniej 1 organizację uniemożliwia importowanie kart do sejfów." }, "domainsTitle": { "message": "Domeny", @@ -2604,7 +2691,7 @@ "message": "Sprawdź i zmień 1 zagrożone hasło" }, "reviewAndChangeAtRiskPasswordsPlural": { - "message": "Przejrzyj i zmień $COUNT$ zagrożonych haseł ", + "message": "Sprawdź i zmień zagrożone hasła ($COUNT$)", "placeholders": { "count": { "content": "$1", @@ -2616,7 +2703,7 @@ "message": "Zmień zagrożone hasła szybciej" }, "changeAtRiskPasswordsFasterDesc": { - "message": "Zaktualizuj swoje ustawienia, aby szybko autouzupełniać hasła i generować nowe" + "message": "Zaktualizuj ustawienia, aby szybko uzupełniać hasła i generować nowe." }, "reviewAtRiskLogins": { "message": "Sprawdź zagrożone dane logowania" @@ -2625,14 +2712,14 @@ "message": "Sprawdź zagrożone hasła" }, "reviewAtRiskLoginsSlideDesc": { - "message": "Twoje hasła organizacji są zagrożone, ponieważ są słabe, ponownie używane i/lub narażone.", + "message": "Hasła w Twojej organizacji są zagrożone, ponieważ są słabe, identyczne lub ujawnione.", "description": "Description of the review at-risk login slide on the at-risk password page carousel" }, "reviewAtRiskLoginSlideImgAltPeriod": { "message": "Ilustracja listy danych logowania, które są zagrożone." }, "generatePasswordSlideDesc": { - "message": "Szybko wygeneruj silne, unikalne hasło z menu autouzupełniania Bitwarden na stronie narażonej na ryzyko.", + "message": "Wygeneruj silne i unikalne hasło dla zagrożonej strony internetowej za pomocą autouzupełniania Bitwarden.", "description": "Description of the generate password slide on the at-risk password page carousel" }, "generatePasswordSlideImgAltPeriod": { @@ -2642,17 +2729,17 @@ "message": "Zaktualizuj w Bitwarden" }, "updateInBitwardenSlideDesc": { - "message": "Bitwarden poprosi Cię o aktualizację hasła w menedżerze haseł.", + "message": "Bitwarden zaproponuje aktualizację hasła w menedżerze haseł.", "description": "Description of the update in Bitwarden slide on the at-risk password page carousel" }, "updateInBitwardenSlideImgAltPeriod": { - "message": "Ilustracja powiadomienia Bitwardena, skłaniająca użytkownika do zaktualizowania danych logowania." + "message": "Ilustracja powiadomienia Bitwarden, zachęcająca użytkownika do zaktualizowania danych logowania." }, "turnOnAutofill": { "message": "Włącz autouzupełnianie" }, "turnedOnAutofill": { - "message": "Włączono autouzupełnianie" + "message": "Autouzupełnianie zostało włączone" }, "dismiss": { "message": "Odrzuć" @@ -2884,7 +2971,7 @@ "message": "Aby wybrać plik, otwórz rozszerzenie w oknie." }, "popOut": { - "message": "Odepnij" + "message": "Otwórz w nowym oknie" }, "sendFileCalloutHeader": { "message": "Zanim zaczniesz" @@ -2902,7 +2989,7 @@ "message": "Data i czas usunięcia są wymagane." }, "dateParsingError": { - "message": "Wystąpił błąd podczas zapisywania daty usunięcia i wygaśnięcia." + "message": "Wystąpił błąd podczas zapisywania dat usunięcia i wygaśnięcia." }, "hideYourEmail": { "message": "Ukryj mój adres e-mail przed odbiorcami." @@ -2957,7 +3044,7 @@ "description": "Used as a message within the notification bar when no folders are found" }, "orgPermissionsUpdatedMustSetPassword": { - "message": "Uprawnienia w Twojej organizacji zostały zaktualizowane, musisz teraz ustawić hasło główne.", + "message": "Uprawnienia organizacji zostały zaktualizowane. Ustaw hasło główne.", "description": "Used as a card title description on the set password page to explain why the user is there" }, "orgRequiresYouToSetPassword": { @@ -2984,10 +3071,10 @@ "message": "Minuty" }, "vaultTimeoutPolicyAffectingOptions": { - "message": "Wymagania polityki przedsiębiorstwa zostały zastosowane do twoich opcji przekrocznia limitu czasu" + "message": "Zasady organizacji zostały zastosowane do opcji blokowania sejfu" }, "vaultTimeoutPolicyInEffect": { - "message": "Zasady organizacji mają wpływ czas blokowania sejfu. Maksymalny dozwolony czas wynosi $HOURS$ godz. i $MINUTES$ min.", + "message": "Zasady organizacji mają wpływ na czas blokowania sejfu. Maksymalny dozwolony czas wynosi $HOURS$ godz. i $MINUTES$ min.", "placeholders": { "hours": { "content": "$1", @@ -3013,7 +3100,7 @@ } }, "vaultTimeoutPolicyMaximumError": { - "message": "Limit czasu przekracza ograniczenie ustawione przez Twoją organizację: $HOURS$ godzin(y) i $MINUTES$ minut(y) maksymalnie", + "message": "Czas blokowania sejfu przekracza zasady organizacji. Maksymalny dozwolony czas wynosi $HOURS$ godz. i $MINUTES$ min.", "placeholders": { "hours": { "content": "$1", @@ -3043,7 +3130,7 @@ } }, "vaultTimeoutActionPolicyInEffect": { - "message": "Zasady organizacji ustawiły czas blokowania sejfu na $ACTION$.", + "message": "Zasady organizacji wymuszają sposób blokowania sejfu na $ACTION$.", "placeholders": { "action": { "content": "$1", @@ -3052,7 +3139,7 @@ } }, "vaultTimeoutTooLarge": { - "message": "Czas blokowania sejfu przekracza limit określony przez organizację." + "message": "Czas blokowania aplikacji przekracza limit określony przez organizację." }, "vaultExportDisabled": { "message": "Eksportowanie sejfu jest niedostępne" @@ -3109,7 +3196,7 @@ } }, "exportingIndividualVaultWithAttachmentsDescription": { - "message": "Tylko poszczególne elementy sejfu łącznie z załącznikami powiązanymi z $EMAIL$ zostaną wyeksportowane. Elementy sejfu organizacji nie będą dołączone", + "message": "Tylko osobisty sejf $EMAIL$ zostanie wyeksportowany. Elementy organizacji nie zostaną uwzględnione.", "placeholders": { "email": { "content": "$1", @@ -3121,7 +3208,7 @@ "message": "Eksportowanie sejfu organizacji" }, "exportingOrganizationVaultDesc": { - "message": "Tylko sejf organizacji powiązany z $ORGANIZATION$ zostanie wyeksportowany. Pozycje w poszczególnych sejfach lub innych organizacji nie będą uwzględnione.", + "message": "Tylko sejf organizacji $ORGANIZATION$ zostanie wyeksportowany. Elementy innych sejfów nie zostaną uwzględnione.", "placeholders": { "organization": { "content": "$1", @@ -3129,6 +3216,24 @@ } } }, + "exportingOrganizationVaultFromPasswordManagerWithDataOwnershipDesc": { + "message": "Tylko sejf organizacji $ORGANIZATION$ zostanie wyeksportowany.", + "placeholders": { + "organization": { + "content": "$1", + "example": "My Org Name" + } + } + }, + "exportingOrganizationVaultFromAdminConsoleWithDataOwnershipDesc": { + "message": "Tylko sejf organizacji $ORGANIZATION$ zostanie wyeksportowany. Twoje kolekcje nie zostaną uwzględnione.", + "placeholders": { + "organization": { + "content": "$1", + "example": "My Org Name" + } + } + }, "error": { "message": "Błąd" }, @@ -3136,14 +3241,14 @@ "message": "Błąd odszyfrowywania" }, "couldNotDecryptVaultItemsBelow": { - "message": "Bitwarden nie mógł odszyfrować elementów sejfu wymienionych poniżej." + "message": "Bitwarden nie mógł odszyfrować poniższych elementów sejfu." }, "contactCSToAvoidDataLossPart1": { "message": "Skontaktuj się z działem obsługi klienta,", "description": "This is part of a larger sentence. The full sentence will read 'Contact customer success to avoid additional data loss.'" }, "contactCSToAvoidDataLossPart2": { - "message": "aby uniknąć dalszej utraty danych.", + "message": "aby uniknąć dodatkowej utraty danych.", "description": "This is part of a larger sentence. The full sentence will read 'Contact customer success to avoid additional data loss.'" }, "generateUsername": { @@ -3240,7 +3345,7 @@ } }, "forwarderGeneratedBy": { - "message": "Wygenerowane przez Bitwarden.", + "message": "Wygenerowano przez Bitwarden.", "description": "Displayed with the address on the forwarding service's configuration screen." }, "forwarderGeneratedByWithWebsite": { @@ -3302,7 +3407,7 @@ } }, "forwarderNoAccountId": { - "message": "Nie można uzyskać ID maskowanego konta e-mail dla $SERVICENAME$.", + "message": "Nie można uzyskać identyfikatora konta e-mail $SERVICENAME$.", "description": "Displayed when the forwarding service fails to return an account ID.", "placeholders": { "servicename": { @@ -3342,7 +3447,7 @@ } }, "forwarderUnknownForwarder": { - "message": "Nieznana usługa przekierowania: '$SERVICENAME$'.", + "message": "Usługa „$SERVICENAME$” jest nieznana.", "description": "Displayed when the forwarding service is not supported.", "placeholders": { "servicename": { @@ -3362,7 +3467,7 @@ "message": "Klucz API" }, "ssoKeyConnectorError": { - "message": "Błąd serwera Key Connector: upewnij się, że serwer Key Connector jest dostępny i działa poprawnie." + "message": "Wystąpił błąd serwera Key Connector. Upewnij się, że serwer jest dostępny i działa poprawnie." }, "premiumSubcriptionRequired": { "message": "Wymagana jest subskrypcja premium" @@ -3374,7 +3479,7 @@ "message": "Nie można uzyskać dostępu do elementów w zawieszonych organizacjach. Skontaktuj się z właścicielem organizacji, aby uzyskać pomoc." }, "loggingInTo": { - "message": "Logowanie na $DOMAIN$", + "message": "Serwer: $DOMAIN$", "placeholders": { "domain": { "content": "$1", @@ -3392,7 +3497,7 @@ "message": "Inny dostawca" }, "thirdPartyServerMessage": { - "message": "Połączono z implementacją serwera innego dostawcy, $SERVERNAME$. Zweryfikuj błędy za pomocą oficjalnego serwera lub zgłoś je serwerowi innego dostawcy.", + "message": "Połączono z implementacją serwera innego dostawcy $SERVERNAME$. Zweryfikuj błędy za pomocą oficjalnego serwera lub zgłoś je serwerowi.", "placeholders": { "servername": { "content": "$1", @@ -3425,7 +3530,7 @@ "message": "Unikalny identyfikator konta" }, "fingerprintMatchInfo": { - "message": "Upewnij się, że sejf jest odblokowany, a unikalny identyfikator konta pasuje do drugiego urządzenia." + "message": "Upewnij się, że sejf jest odblokowany, a identyfikator pasuje do drugiego urządzenia." }, "resendNotification": { "message": "Wyślij ponownie powiadomienie" @@ -3443,13 +3548,13 @@ "message": "aplikacji internetowej" }, "notificationSentDevicePart2": { - "message": "Upewnij się, że fraza odcisku palca zgadza się z tą poniżej, zanim zatwierdzisz." + "message": "Upewnij się, że identyfikator jest zgodny." }, "aNotificationWasSentToYourDevice": { "message": "Powiadomienie zostało wysłane na urządzenie" }, "youWillBeNotifiedOnceTheRequestIsApproved": { - "message": "Zostaniesz powiadomiony po zatwierdzeniu prośby" + "message": "Zostaniesz powiadomiony po potwierdzeniu" }, "needAnotherOptionV1": { "message": "Potrzebujesz innej opcji?" @@ -3458,7 +3563,29 @@ "message": "Logowanie rozpoczęte" }, "logInRequestSent": { - "message": "Żądanie wysłane" + "message": "Prośba została wysłana" + }, + "loginRequestApprovedForEmailOnDevice": { + "message": "Potwierdzono logowanie $EMAIL$ ($DEVICE$)", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + }, + "device": { + "content": "$2", + "example": "Web app - Chrome" + } + } + }, + "youDeniedLoginAttemptFromAnotherDevice": { + "message": "Odrzucono próbę logowania z innego urządzenia. Zaloguj się ponownie z tego urządzenia." + }, + "device": { + "message": "Urządzenie" + }, + "loginStatus": { + "message": "Status logowania" }, "masterPasswordChanged": { "message": "Hasło główne zostało zapisane" @@ -3467,7 +3594,7 @@ "message": "Hasło główne zostało ujawnione" }, "exposedMasterPasswordDesc": { - "message": "Hasło ujawnione w wyniku naruszenia ochrony danych. Użyj unikalnego hasła, aby chronić swoje konto. Czy na pewno chcesz użyć ujawnionego hasła?" + "message": "Hasło zostało ujawnione w wycieku danych. Użyj unikalnego hasła, aby chronić konto. Czy na pewno chcesz użyć ujawnionego hasła?" }, "weakAndExposedMasterPassword": { "message": "Hasło główne jest słabe i ujawnione" @@ -3476,7 +3603,7 @@ "message": "Hasło jest słabe i zostało ujawnione w wycieku danych. Użyj mocnego i unikalnego hasła, aby chronić konto. Czy na pewno chcesz użyć tego hasła?" }, "checkForBreaches": { - "message": "Sprawdź znane naruszenia ochrony danych tego hasła" + "message": "Sprawdź hasło w znanych wyciekach danych" }, "important": { "message": "Ważne:" @@ -3494,10 +3621,7 @@ } }, "autofillPageLoadPolicyActivated": { - "message": "Twoja organizacja włączyła autouzupełnianie podczas wczytywania strony." - }, - "howToAutofill": { - "message": "Jak autouzupełniać" + "message": "Twoja organizacja włączyła autouzupełnianie po załadowaniu strony." }, "autofillSelectInfoWithCommand": { "message": "Wybierz element, użyj skrótu $COMMAND$ lub zobacz inne opcje w ustawieniach.", @@ -3509,7 +3633,7 @@ } }, "autofillSelectInfoWithoutCommand": { - "message": "Wybierz element z tego ekranu lub zobacz inne opcje w ustawieniach." + "message": "Wybierz element lub zobacz inne opcje w ustawieniach." }, "gotIt": { "message": "Ok" @@ -3554,31 +3678,119 @@ "message": "Otwiera w nowym oknie" }, "rememberThisDeviceToMakeFutureLoginsSeamless": { - "message": "Zapamiętaj to urządzenie, aby przyszłe logowania były bezproblemowe" + "message": "Zapamiętaj urządzenie, aby przyszłe logowania były bezproblemowe" + }, + "manageDevices": { + "message": "Zarządzaj urządzeniami" + }, + "currentSession": { + "message": "Obecna sesja" + }, + "mobile": { + "message": "Telefon", + "description": "Mobile app" + }, + "extension": { + "message": "Rozszerzenie", + "description": "Browser extension/addon" + }, + "desktop": { + "message": "Komputer", + "description": "Desktop app" + }, + "webVault": { + "message": "Sejf internetowy" + }, + "webApp": { + "message": "Aplikacja internetowa" + }, + "cli": { + "message": "CLI" + }, + "sdk": { + "message": "SDK", + "description": "Software Development Kit" + }, + "requestPending": { + "message": "Oczekująca prośba" + }, + "firstLogin": { + "message": "Pierwsze logowanie" + }, + "trusted": { + "message": "Zaufane" + }, + "needsApproval": { + "message": "Potwierdzenie jest wymagane" + }, + "devices": { + "message": "Urządzenia" + }, + "accessAttemptBy": { + "message": "Próba dostępu przez $EMAIL$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + } + } + }, + "confirmAccess": { + "message": "Potwierdź dostęp" + }, + "denyAccess": { + "message": "Odmów dostępu" + }, + "time": { + "message": "Czas" + }, + "deviceType": { + "message": "Rodzaj urządzenia" + }, + "loginRequest": { + "message": "Prośba logowania" + }, + "thisRequestIsNoLongerValid": { + "message": "Prośba nie jest już ważna." + }, + "loginRequestHasAlreadyExpired": { + "message": "Prośba logowania wygasła." + }, + "justNow": { + "message": "Teraz" + }, + "requestedXMinutesAgo": { + "message": "$MINUTES$ min temu", + "placeholders": { + "minutes": { + "content": "$1", + "example": "5" + } + } }, "deviceApprovalRequired": { - "message": "Wymagane zatwierdzenie urządzenia. Wybierz opcję zatwierdzenia poniżej:" + "message": "Potwierdzenie urządzenia jest wymagane. Wybierz opcję:" }, "deviceApprovalRequiredV2": { - "message": "Wymagane zatwierdzenie urządzenia" + "message": "Potwierdzenie urządzenia jest wymagane" }, "selectAnApprovalOptionBelow": { - "message": "Wybierz opcję zatwierdzenia poniżej" + "message": "Wybierz opcję potwierdzenia" }, "rememberThisDevice": { "message": "Zapamiętaj urządzenie" }, "uncheckIfPublicDevice": { - "message": "Odznacz, jeśli używasz publicznego urządzenia" + "message": "Wyłącz na obcych urządzeniach" }, "approveFromYourOtherDevice": { - "message": "Zatwierdź z innego twojego urządzenia" + "message": "Potwierdź za pomocą innego urządzenia" }, "requestAdminApproval": { - "message": "Poproś administratora o zatwierdzenie" + "message": "Poproś administratora o potwierdzenie" }, "unableToCompleteLogin": { - "message": "Nie można ukończyć logowania" + "message": "Logowanie nie powiodło się" }, "loginOnTrustedDeviceOrAskAdminToAssignPassword": { "message": "Musisz zalogować się na zaufanym urządzeniu lub poprosić administratora o przypisanie hasła." @@ -3593,7 +3805,7 @@ "message": "Sprawdź swoją pocztę e-mail" }, "followTheLinkInTheEmailSentTo": { - "message": "Kliknij łącze w wiadomości e-mail wysłanej do" + "message": "Kliknij link w wiadomości wysłanej na adres" }, "andContinueCreatingYourAccount": { "message": "i kontynuuj tworzenie konta." @@ -3612,7 +3824,7 @@ "description": "European Union" }, "accessDenied": { - "message": "Odmowa dostępu. Nie masz uprawnień do przeglądania tej strony." + "message": "Odmowa dostępu. Nie masz uprawnień do wyświetlenia tej strony." }, "general": { "message": "Ogólne" @@ -3624,10 +3836,10 @@ "message": "Konto zostało utworzone!" }, "adminApprovalRequested": { - "message": "Poproszono administratora o zatwierdzenie" + "message": "Poproszono administratora o potwierdzenie" }, "adminApprovalRequestSentToAdmins": { - "message": "Twoja prośba została wysłana do Twojego administratora." + "message": "Prośba została wysłana do administratora." }, "troubleLoggingIn": { "message": "Problem z logowaniem?" @@ -3642,7 +3854,7 @@ "message": "Nie znaleziono aktywnego adresu e-mail. Trwa wylogowanie." }, "deviceTrusted": { - "message": "Zaufano urządzeniu" + "message": "Urządzenie zostało zaufane" }, "trustOrganization": { "message": "Zaufaj organizacji" @@ -3657,10 +3869,10 @@ "message": "Organizacja nie jest zaufana" }, "emergencyAccessTrustWarning": { - "message": "Dla bezpieczeństwa Twojego konta potwierdź tylko, jeśli przyznano temu użytkownikowi dostęp awaryjny i jego odcisk palca pasuje do tego, co widnieje na jego koncie" + "message": "Potwierdź tylko wtedy, gdy chcesz przyznać użytkownikowi dostęp awaryjny i jego unikalny identyfikator konta jest prawidłowy." }, "orgTrustWarning": { - "message": "Dla zapewnienia bezpieczeństwa konta kontynuuj tylko wtedy, gdy jesteś członkiem tej organizacji, włączono odzyskiwanie konta, a odcisk palca wyświetlany poniżej pasuje do odcisku palca organizacji." + "message": "Kontynuuj tylko wtedy, gdy jesteś członkiem organizacji, masz włączone odzyskiwanie konta, a unikalny identyfikator pasuje do organizacji." }, "orgTrustWarning1": { "message": "Zasada organizacji pozwala administratorom organizacji na zmianę Twojego hasła. Kontynuuj tylko wtedy, gdy rozpoznajesz organizację, a unikalny identyfikator pasuje do organizacji." @@ -3673,7 +3885,7 @@ "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "sendsBodyNoItems": { - "message": "Udostępniaj pliki i teksty każdemu, na dowolnej platformie. Informacje będę szyfrowane end-to-end, zapewniając poufność.", + "message": "Udostępniaj pliki i teksty każdemu na dowolnej platformie. Informacje będę szyfrowane end-to-end, zapewniając poufność.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "inputRequired": { @@ -3795,23 +4007,15 @@ "aliasDomain": { "message": "Domena aliasu" }, - "passwordRepromptDisabledAutofillOnPageLoad": { - "message": "Elementy z pytaniem o hasło główne nie mogą być autouzupełniane przy wczytywaniu strony. Autouzupełnianie podczas wczytywania strony zostało wyłączone.", - "description": "Toast message for describing that master password re-prompt cannot be autofilled on page load." - }, "autofillOnPageLoadSetToDefault": { - "message": "Automatyczne wypełnianie przy wczytywaniu strony zostało ustawione, aby używać ustawień domyślnych.", + "message": "Autouzupełnianie po załadowaniu strony zostało ustawione do domyślnych ustawień.", "description": "Toast message for informing the user that autofill on page load has been set to the default setting." }, - "turnOffMasterPasswordPromptToEditField": { - "message": "Wyłącz prośbę o podanie hasła głównego, aby edytować to pole", - "description": "Message appearing below the autofill on load message when master password reprompt is set for a vault item." - }, "toggleSideNavigation": { "message": "Przełącz nawigację boczną" }, "skipToContent": { - "message": "Przejdź do treści" + "message": "Przejdź do zawartości" }, "bitwardenOverlayButton": { "message": "Przycisk menu autouzupełniania Bitwarden", @@ -3826,7 +4030,7 @@ "description": "Page title in overlay" }, "unlockYourAccountToViewMatchingLogins": { - "message": "Odblokuj swoje konto, aby wyświetlić pasujące elementy", + "message": "Odblokuj konto, aby zobaczy pasujące dane logowania", "description": "Text to display in overlay when the account is locked." }, "unlockYourAccountToViewAutofillSuggestions": { @@ -3838,7 +4042,7 @@ "description": "Button text to display in overlay when the account is locked." }, "unlockAccountAria": { - "message": "Odblokuj swoje konto, otwiera się w nowym oknie", + "message": "Odblokuj konto, otwiera się w nowym oknie", "description": "Screen reader text (aria-label) for unlock account button in overlay" }, "totpCodeAria": { @@ -3846,7 +4050,7 @@ "description": "Aria label for the totp code displayed in the inline menu for autofill" }, "totpSecondsSpanAria": { - "message": "Pozostały czas do wygaśnięcia bieżącego TOTP", + "message": "Pozostały czas do wygaśnięcia kodu TOTP", "description": "Aria label for the totp seconds displayed in the inline menu for autofill" }, "fillCredentialsFor": { @@ -3874,7 +4078,7 @@ "description": "Button text to display within inline menu when there are no matching items on a login field" }, "addNewLoginItemAria": { - "message": "Dodaj nowe dane logowania do sejfu, otwiera się w nowym oknie", + "message": "Dodaj nowe dane logowania, otwiera się w nowym oknie", "description": "Screen reader text (aria-label) for new login button within inline menu" }, "newCard": { @@ -3882,7 +4086,7 @@ "description": "Button text to display within inline menu when there are no matching items on a credit card field" }, "addNewCardItemAria": { - "message": "Dodaj nową kartę do sejfu, otwiera się w nowym oknie", + "message": "Dodaj nową kartę, otwiera się w nowym oknie", "description": "Screen reader text (aria-label) for new card button within inline menu" }, "newIdentity": { @@ -3890,7 +4094,7 @@ "description": "Button text to display within inline menu when there are no matching items on an identity field" }, "addNewIdentityItemAria": { - "message": "Dodaj nową tożsamość do sejfu, otwiera się w nowym oknie", + "message": "Dodaj nową tożsamość, otwiera się w nowym oknie", "description": "Screen reader text (aria-label) for new identity button within inline menu" }, "bitwardenOverlayMenuAvailable": { @@ -3911,7 +4115,7 @@ "message": "Błąd importowania" }, "importErrorDesc": { - "message": "Wystąpił problem z danymi, które chcesz zaimportować. Rozwiąż poniższe problemy w Twoim pliku i spróbuj ponownie." + "message": "Wystąpił problem podczas importowania danych. Usuń poniższe błędy w pliku źródłowym i spróbuj ponownie." }, "resolveTheErrorsBelowAndTryAgain": { "message": "Rozwiąż poniższe błędy i spróbuj ponownie." @@ -3947,7 +4151,7 @@ "message": "Oczekiwanie na potwierdzenie" }, "couldNotCompleteBiometrics": { - "message": "Nie można ukończyć z użyciem biometrii." + "message": "Logowanie biometrią nie powiodło się" }, "needADifferentMethod": { "message": "Potrzebujesz innej metody?" @@ -3986,13 +4190,13 @@ "message": "Konto wymaga logowania dwustopniowego Duo." }, "popoutExtension": { - "message": "Otwórz rozszerzenie w nowym oknie" + "message": "Otwórz rozszerzenie w oknie" }, "launchDuo": { "message": "Uruchom Duo" }, "importFormatError": { - "message": "Dane nie są poprawnie sformatowane. Sprawdź importowany plik i spróbuj ponownie." + "message": "Dane nie są prawidłowo sformatowane. Sprawdź plik i spróbuj ponownie." }, "importNothingError": { "message": "Nic nie zostało zaimportowane." @@ -4001,7 +4205,7 @@ "message": "Wystąpił błąd podczas odszyfrowywania pliku. Klucz szyfrowania nie pasuje do klucza użytego podczas eksportowania danych." }, "invalidFilePassword": { - "message": "Hasło do pliku jest nieprawidłowe. Użyj hasła które podano przy tworzeniu pliku eksportu." + "message": "Hasło pliku jest nieprawidłowe. Użyj prawidłowego hasła." }, "destination": { "message": "Miejsce docelowe" @@ -4015,15 +4219,11 @@ "selectImportCollection": { "message": "Wybierz kolekcję" }, - "importTargetHint": { - "message": "Wybierz tę opcję, jeśli chcesz, aby zawartość zaimportowanego pliku została przeniesiona do $DESTINATION$", - "description": "Located as a hint under the import target. Will be appended by either folder or collection, depending if the user is importing into an individual or an organizational vault.", - "placeholders": { - "destination": { - "content": "$1", - "example": "folder or collection" - } - } + "importTargetHintCollection": { + "message": "Wybierz tę opcję, jeśli chcesz przenieść dane do kolekcji" + }, + "importTargetHintFolder": { + "message": "Wybierz tę opcję, jeśli chcesz przenieść dane do folderu" }, "importUnassignedItemsError": { "message": "Plik zawiera nieprzypisane elementy." @@ -4057,7 +4257,7 @@ "message": "Potwierdź importowanie sejfu" }, "confirmVaultImportDesc": { - "message": "Plik jest chroniony hasłem. Wprowadź hasło pliku, aby zaimportować dane." + "message": "Plik jest chroniony hasłem. Wpisz hasło pliku, aby zaimportować dane." }, "confirmFilePassword": { "message": "Potwierdź hasło pliku" @@ -4069,7 +4269,7 @@ "message": "Klucz dostępu" }, "accessing": { - "message": "Logowanie na" + "message": "Serwer" }, "loggedInExclamation": { "message": "Zalogowano!" @@ -4080,9 +4280,6 @@ "passkeyNotCopiedAlert": { "message": "Klucz dostępu nie zostanie skopiowany do sklonowanego elementu. Czy chcesz kontynuować klonowanie elementu?" }, - "passkeyFeatureIsNotImplementedForAccountsWithoutMasterPassword": { - "message": "Weryfikacja jest wymagana przez stronę inicjującą. Ta funkcja nie jest jeszcze zaimplementowana dla kont bez hasła głównego." - }, "logInWithPasskeyQuestion": { "message": "Zalogować się kluczem dostępu?" }, @@ -4114,7 +4311,7 @@ "message": "Wybierz dane logowania, do których przypisać klucz dostępu" }, "chooseCipherForPasskeyAuth": { - "message": "Wybierz klucz dostępu, żeby się zalogować" + "message": "Wybierz klucz dostępu" }, "passkeyItem": { "message": "Element klucza dostępu" @@ -4129,16 +4326,16 @@ "message": "Funkcja nie jest jeszcze obsługiwana" }, "yourPasskeyIsLocked": { - "message": "Wymagane uwierzytelnienie, aby używać klucza dostępu. Sprawdź swoją tożsamość, aby kontynuować." + "message": "Aby użyć klucza dostępu, wymagane jest uwierzytelnienie. Zweryfikuj swoją tożsamość." }, "multifactorAuthenticationCancelled": { - "message": "Uwierzytelnianie wieloskładnikowe zostało anulowane" + "message": "Logowanie dwustopniowe zostało anulowane" }, "noLastPassDataFound": { "message": "Nie znaleziono danych LastPass" }, "incorrectUsernameOrPassword": { - "message": "Nieprawidłowa nazwa użytkownika lub hasło" + "message": "Nazwa użytkownika lub hasło są nieprawidłowe" }, "incorrectPassword": { "message": "Hasło jest nieprawidłowe" @@ -4150,7 +4347,7 @@ "message": "Kod PIN jest nieprawidłowy" }, "multifactorAuthenticationFailed": { - "message": "Uwierzytelnianie wieloskładnikowe nie powiodło się" + "message": "Logowanie dwustopniowe nie powiodło się" }, "includeSharedFolders": { "message": "Dołącz udostępnione foldery" @@ -4162,13 +4359,13 @@ "message": "Importowanie konta..." }, "lastPassMFARequired": { - "message": "Wymagane jest uwierzytelnianie wieloskładnikowe LastPass" + "message": "Logowanie dwustopniowe LastPass jest wymagane" }, "lastPassMFADesc": { - "message": "Wprowadź jednorazowy kod z aplikacji uwierzytelniającej" + "message": "Wpisz jednorazowy kod z aplikacji uwierzytelniającej" }, "lastPassOOBDesc": { - "message": "Zatwierdź żądanie logowania w aplikacji uwierzytelniającej lub wprowadź jednorazowe hasło." + "message": "Potwierdź logowanie w aplikacji uwierzytelniającej lub wpisz jednorazowy kod." }, "passcode": { "message": "Kod" @@ -4177,7 +4374,7 @@ "message": "Hasło główne LastPass" }, "lastPassAuthRequired": { - "message": "Wymagane uwierzytelnianie LastPass" + "message": "Uwierzytelnianie LastPass jest wymagane" }, "awaitingSSO": { "message": "Oczekiwanie na logowanie jednokrotne" @@ -4196,7 +4393,7 @@ "message": "Importuj z CSV" }, "lastPassTryAgainCheckEmail": { - "message": "Spróbuj ponownie lub poszukaj wiadomości e-mail od LastPass, aby zweryfikować, że to Ty." + "message": "Spróbuj ponownie lub poszukaj wiadomości od LastPass, aby zweryfikować logowanie." }, "collection": { "message": "Kolekcja" @@ -4238,16 +4435,16 @@ "message": "serwer" }, "hostedAt": { - "message": "hostowany w" + "message": "serwer" }, "useDeviceOrHardwareKey": { - "message": "Użyj swojego urządzenia lub klucza sprzętowego" + "message": "Użyj urządzenia lub klucza sprzętowego" }, "justOnce": { "message": "Tylko raz" }, "alwaysForThisSite": { - "message": "Zawsze dla tej witryny" + "message": "Zawsze dla tej strony" }, "domainAddedToExcludedDomains": { "message": "Domena $DOMAIN$ została dodana do wykluczonych domen.", @@ -4263,7 +4460,7 @@ "description": "Label indicating the most common import formats" }, "uriMatchDefaultStrategyHint": { - "message": "Wykrywanie URI polega na tym, jak Bitwarden identyfikuje sugestie autouzupełniania.", + "message": "Wykrywanie dopasowania to sposób, w jaki Bitwarden identyfikuje sugestie autouzupełniania.", "description": "Explains to the user that URI match detection determines how Bitwarden suggests autofill options, and clarifies that this default strategy applies when no specific match detection is set for a login item." }, "regExAdvancedOptionWarning": { @@ -4279,15 +4476,15 @@ "description": "Link to match detection docs on warning dialog for advance match strategy" }, "uriAdvancedOption": { - "message": "Ustawienia zaawansowane", + "message": "Opcje zaawansowane", "description": "Advanced option placeholder for uri option component" }, "confirmContinueToBrowserSettingsTitle": { - "message": "Przejść do ustawień przeglądarki?", + "message": "Kontynuować przejście do ustawień przeglądarki?", "description": "Title for dialog which asks if the user wants to proceed to a relevant browser settings page" }, "confirmContinueToHelpCenter": { - "message": "Przejść do centrum pomocy?", + "message": "Kontynuować przejście do centrum pomocy?", "description": "Title for dialog which asks if the user wants to proceed to a relevant Help Center page" }, "confirmContinueToHelpCenterPasswordManagementContent": { @@ -4307,11 +4504,11 @@ "description": "Body content for dialog which asks if the user wants to proceed to the browser's keyboard shortcut settings page" }, "overrideDefaultBrowserAutofillTitle": { - "message": "Czy ustawić Bitwarden jako domyślny menadżer haseł?", + "message": "Ustawić Bitwarden jako domyślny menadżer haseł?", "description": "Dialog title facilitating the ability to override a chrome browser's default autofill behavior" }, "overrideDefaultBrowserAutofillDescription": { - "message": "Ignorowanie tej opcji może spowodować konflikty pomiędzy menu autouzupełniania Bitwarden a przeglądarką.", + "message": "Zignorowanie tej opcji może spowodować konflikty pomiędzy autouzupełnianiem Bitwarden a przeglądarką.", "description": "Dialog message facilitating the ability to override a chrome browser's default autofill behavior" }, "overrideDefaultBrowserAutoFillSettings": { @@ -4323,7 +4520,7 @@ "description": "Title for the dialog that appears when the user has not granted the extension permission to set privacy settings" }, "privacyPermissionAdditionNotGrantedDescription": { - "message": "Musisz przyznać Bitwarden uprawnienia do prywatności przeglądarki, aby ustawić go jako domyślnego menedżera haseł.", + "message": "Aby ustawić Bitwarden jako domyślny menedżer haseł, przyznaj rozszerzeniu uprawnienie do zmiany ustawień prywatności.", "description": "Description for the dialog that appears when the user has not granted the extension permission to set privacy settings" }, "makeDefault": { @@ -4465,17 +4662,17 @@ } } }, - "copyFieldValue": { - "message": "Kopiuj $FIELD$, $VALUE$", + "copyFieldCipherName": { + "message": "Kopiuj $FIELD$, $CIPHERNAME$", "description": "Title for a button that copies a field value to the clipboard.", "placeholders": { "field": { "content": "$1", "example": "Username" }, - "value": { + "ciphername": { "content": "$2", - "example": "Foo" + "example": "Login Item" } } }, @@ -4616,19 +4813,19 @@ "message": "Pobierz Bitwarden" }, "downloadBitwardenOnAllDevices": { - "message": "Pobierz Bitwarden na wszystkich urządzeniach" + "message": "Bitwarden na inne urządzenia" }, "getTheMobileApp": { "message": "Pobierz aplikację mobilną" }, "getTheMobileAppDesc": { - "message": "Uzyskaj dostęp do haseł przy pomocy aplikacji mobilnej Bitwarden." + "message": "Uzyskaj dostęp do haseł za pomocą aplikacji mobilnej Bitwarden." }, "getTheDesktopApp": { "message": "Pobierz aplikację desktopową" }, "getTheDesktopAppDesc": { - "message": "Uzyskaj dostęp do sejfu bez przeglądarki, a następnie ustaw odblokowanie biometryczne, aby przyspieszyć odblokowanie zarówno w aplikacji desktopowej, jak i w rozszerzeniu przeglądarki." + "message": "Uzyskaj dostęp do sejfu bez przeglądarki. Skonfiguruj biometrię, aby przyśpieszyć odblokowywanie aplikacji." }, "downloadFromBitwardenNow": { "message": "Pobierz z bitwarden.com" @@ -4655,7 +4852,7 @@ "message": "Filtruj sejf" }, "filterApplied": { - "message": "Zastosowano jeden filtr" + "message": "Zastosowano 1 filtr" }, "filterAppliedPlural": { "message": "$COUNT$ filtrów zastosowanych", @@ -4685,7 +4882,7 @@ } }, "cardNumberEndsWith": { - "message": "numer karty kończy się", + "message": "numer karty kończący się", "description": "Used within the inline menu to provide an aria description when users are attempting to fill a card cipher." }, "loginCredentials": { @@ -4754,7 +4951,7 @@ "message": "Karta wygasła" }, "cardExpiredMessage": { - "message": "Jeśli ją wznowiłeś, zaktualizuj informacje o karcie" + "message": "Jeśli karta została odnowiona, zaktualizuj informacje o niej" }, "cardDetails": { "message": "Szczegóły karty" @@ -4768,9 +4965,6 @@ } } }, - "enableAnimations": { - "message": "Włącz animacje" - }, "showAnimations": { "message": "Pokaż animacje" }, @@ -4792,7 +4986,7 @@ "description": "A section header for a list of passwords." }, "logInWithPasskeyAriaLabel": { - "message": "Logowaniem kluczem dostępu", + "message": "Logowanie kluczem dostępu", "description": "ARIA label for the inline menu button that logs in with a passkey." }, "assign": { @@ -4832,16 +5026,16 @@ "message": "Użyj pól tekstowych dla danych takich jak pytania bezpieczeństwa" }, "hiddenHelpText": { - "message": "Użyj ukrytych pól dla danych poufnych, takich jak hasło" + "message": "Użyj ukrytych pól dla danych poufnych takich jak hasło" }, "checkBoxHelpText": { - "message": "Użyj pól wyboru, jeśli chcesz automatycznie wypełnić pole wyboru formularza, np. zapamiętaj e-mail" + "message": "Użyj pól wyboru, gdy chcesz uzupełnić pole wyboru formularza, np. zapamiętaj adres e-mail" }, "linkedHelpText": { "message": "Użyj powiązanego pola, gdy masz problemy z autouzupełnianiem na konkretnej stronie internetowej." }, "linkedLabelHelpText": { - "message": "Wprowadź atrybut z HTML'a: id, name, aria-label lub placeholder." + "message": "Wpisz identyfikator, nazwę, etykietę lub tekst zastępczy pola HTML." }, "editField": { "message": "Edytuj pole" @@ -4874,7 +5068,7 @@ } }, "reorderToggleButton": { - "message": "Zmień kolejność $LABEL$. Użyj klawiszy ze strzałkami, aby przenieść element w górę lub w dół.", + "message": "Zmień kolejność pola $LABEL$. Użyj klawiszy ze strzałkami, aby przenieść element w górę lub w dół.", "placeholders": { "label": { "content": "$1", @@ -4883,10 +5077,10 @@ } }, "reorderWebsiteUriButton": { - "message": "Zmień kolejność URI strony. Użyj klawiszy ze strzałkami, aby przenieść element w górę lub w dół." + "message": "Zmień kolejność stron internetowych. Użyj klawiszy ze strzałkami, aby przenieść element w górę lub w dół." }, "reorderFieldUp": { - "message": "$LABEL$ przeniósł się w górę, pozycja $INDEX$ z $LENGTH$", + "message": "Pole $LABEL$ zostało przeniesione w górę. Pozycja $INDEX$ z $LENGTH$", "placeholders": { "label": { "content": "$1", @@ -4909,7 +5103,7 @@ "message": "Element zostanie przeniesiony do organizacji. Nie będziesz już właścicielem elementu." }, "personalItemsTransferWarningPlural": { - "message": "$PERSONAL_ITEMS_COUNT$ elementów zostanie trwale przeniesionych do wybranej organizacji. Nie będziesz już posiadać tych elementów.", + "message": "Nie będziesz już właścicielem $PERSONAL_ITEMS_COUNT$ elementów przeniesionych do organizacji.", "placeholders": { "personal_items_count": { "content": "$1", @@ -4927,7 +5121,7 @@ } }, "personalItemsWithOrgTransferWarningPlural": { - "message": "$PERSONAL_ITEMS_COUNT$ elementy zostaną trwale przeniesione do $ORG$. Nie będziesz już posiadać tych elementów.", + "message": "Nie będziesz już właścicielem $PERSONAL_ITEMS_COUNT$ elementów przeniesionych do organizacji $ORG$.", "placeholders": { "personal_items_count": { "content": "$1", @@ -4943,7 +5137,7 @@ "message": "Przypisano kolekcje" }, "nothingSelected": { - "message": "Nie zaznaczyłeś żadnych elementów." + "message": "Nie zaznaczono żadnych elementów." }, "itemsMovedToOrg": { "message": "Elementy zostały przeniesione do organizacji $ORGNAME$", @@ -4964,7 +5158,7 @@ } }, "reorderFieldDown": { - "message": "$LABEL$ przeniósł się w dół, pozycja $INDEX$ z $LENGTH$", + "message": "Pole $LABEL$ zostało przeniesione w dół. Pozycja $INDEX$ z $LENGTH$", "placeholders": { "label": { "content": "$1", @@ -4983,15 +5177,9 @@ "itemLocation": { "message": "Lokalizacja elementu" }, - "fileSend": { - "message": "Plik wysyłki" - }, "fileSends": { "message": "Wysyłki plików" }, - "textSend": { - "message": "Tekst wysyłki" - }, "textSends": { "message": "Wysyłki tekstów" }, @@ -5001,6 +5189,18 @@ "showNumberOfAutofillSuggestions": { "message": "Pokaż liczbę sugestii autouzupełniania na ikonie rozszerzenia" }, + "accountAccessRequested": { + "message": "Poproszono o dostęp do konta" + }, + "confirmAccessAttempt": { + "message": "Potwierdź próbę dostępu dla $EMAIL$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + } + } + }, "showQuickCopyActions": { "message": "Pokaż akcje szybkiego kopiowania w sejfie" }, @@ -5008,7 +5208,7 @@ "message": "Domyślny systemu" }, "enterprisePolicyRequirementsApplied": { - "message": "Zastosowano wymagania zasady organizacji" + "message": "Wymagania zasady organizacji zostały zastosowane" }, "sshPrivateKey": { "message": "Klucz prywatny" @@ -5035,16 +5235,13 @@ "message": "RSA 4096-bit" }, "retry": { - "message": "Powtórz" + "message": "Spróbuj ponownie" }, "vaultCustomTimeoutMinimum": { "message": "Minimalny niestandardowy czas to 1 minuta." }, - "additionalContentAvailable": { - "message": "Dostępna jest dodatkowa zawartość" - }, "fileSavedToDevice": { - "message": "Plik zapisany na urządzeniu. Zarządzaj plikiem na swoim urządzeniu." + "message": "Plik został zapisany na urządzeniu." }, "showCharacterCount": { "message": "Pokaż liczbę znaków" @@ -5068,10 +5265,10 @@ "message": "Przywróć" }, "deleteForever": { - "message": "Usuń na zawsze" + "message": "Usuń trwale" }, "noEditPermissions": { - "message": "Nie masz uprawnień do edycji tego elementu" + "message": "Nie masz uprawnień do edycji elementu" }, "biometricsStatusHelptextUnlockNeeded": { "message": "Odblokowanie biometrią jest niedostępne, ponieważ najpierw wymagane jest odblokowanie kodem PIN lub hasłem." @@ -5104,7 +5301,7 @@ "message": "Odblokuj sejf w kilka sekund" }, "unlockVaultDesc": { - "message": "Możesz dostosować ustawienia odblokowania i limitu czasu, aby szybciej uzyskać dostęp do sejfu." + "message": "Możesz dostosować sposób i czas blokowania sejfu, aby uzyskać szybszy dostęp do sejfu." }, "unlockPinSet": { "message": "Kod PIN został ustawiony" @@ -5278,10 +5475,10 @@ "message": "Szerokość rozszerzenia" }, "wide": { - "message": "Szerokie" + "message": "Szeroka" }, "extraWide": { - "message": "Bardzo szerokie" + "message": "Bardzo szeroka" }, "sshKeyWrongPassword": { "message": "Hasło jest nieprawidłowe." @@ -5311,7 +5508,7 @@ "message": "Klucz SSH został zaimportowany" }, "cannotRemoveViewOnlyCollections": { - "message": "Nie można usunąć kolekcji z uprawnieniami tylko do przeglądania: $COLLECTIONS$", + "message": "Nie możesz usunąć następujących kolekcji z uprawnieniami tylko do odczytu: $COLLECTIONS$", "placeholders": { "collections": { "content": "$1", @@ -5323,16 +5520,22 @@ "message": "Zaktualizuj aplikację desktopową" }, "updateDesktopAppOrDisableFingerprintDialogMessage": { - "message": "Aby używać odblokowywania biometrycznego, zaktualizuj aplikację na komputerze lub wyłącz odblokowywanie odciskiem palca w ustawieniach aplikacji na komputerze." + "message": "Aby używać biometrii, zaktualizuj aplikację desktopową." }, "changeAtRiskPassword": { "message": "Zmień zagrożone hasło" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "Dane logowania są zagrożone i nie zawierają strony internetowej. Dodaj stronę internetową i zmień hasło." + }, + "missingWebsite": { + "message": "Brak strony internetowej" + }, "settingsVaultOptions": { - "message": "Ustawienia Sejfu" + "message": "Opcje sejfu" }, "emptyVaultDescription": { - "message": "Sejf chroni nie tylko Twoje hasła. Przechowuj tutaj bezpiecznie loginy, identyfikatory, karty i notatki." + "message": "Sejf chroni nie tylko hasła. Przechowuj bezpiecznie dane logowania, identyfikatory, karty i notatki." }, "introCarouselLabel": { "message": "Witaj w Bitwarden" @@ -5376,14 +5579,26 @@ "hasItemsVaultNudgeTitle": { "message": "Witaj w sejfie!" }, + "phishingPageTitle": { + "message": "Witryna phishingowa" + }, + "phishingPageCloseTab": { + "message": "Zamknij kartę" + }, + "phishingPageContinue": { + "message": "Kontynuuj" + }, + "phishingPageLearnWhy": { + "message": "Dlaczego to widzę?" + }, "hasItemsVaultNudgeBodyOne": { - "message": "Autouzupełnianie elementów dla bieżącej strony" + "message": "Uzupełniaj elementy na stronie internetowej" }, "hasItemsVaultNudgeBodyTwo": { - "message": "Ulubione elementy dla szybkiego dostępu" + "message": "Dodawaj do ulubionych wybrane elementy" }, "hasItemsVaultNudgeBodyThree": { - "message": "Przeszukaj sejf w poszukiwaniu czegoś innego" + "message": "Przeszukuj sejf w poszukiwaniu czegoś innego" }, "newLoginNudgeTitle": { "message": "Oszczędzaj czas dzięki autouzupełnianiu" @@ -5451,11 +5666,33 @@ "message": "Twórz silne i unikalne hasła, klikając przycisk Wygeneruj hasło, aby zapewnić bezpieczeństwo danych logowania.", "description": "Aria label for the body content of the generator nudge" }, + "aboutThisSetting": { + "message": "O ustawieniu" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden użyje zapisanych adresów URL danych logowania, aby określić, która ikona lub adres URL zmiany hasła powinien zostać użyty w celu poprawy komfortu użytkowania. Usługa nie zapisuje żadnych danych." + }, "noPermissionsViewPage": { - "message": "Nie masz uprawnień do przeglądania tej strony. Spróbuj zalogować się na inne konto." + "message": "Nie masz uprawnień do przeglądania tej strony. Zaloguj się na inne konto." }, "wasmNotSupported": { - "message": "Zestaw WebAssembly nie jest obsługiwany w przeglądarce lub nie jest włączony. Do korzystania z aplikacji Bitwarden wymagany jest zestaw WebAssembre.", + "message": "WebAssembly nie jest obsługiwany w przeglądarce lub jest wyłączony. WebAssembly jest wymagany do korzystania z aplikacji Bitwarden.", "description": "'WebAssembly' is a technical term and should not be translated." + }, + "showMore": { + "message": "Pokaż więcej" + }, + "showLess": { + "message": "Pokaż mniej" + }, + "next": { + "message": "Dalej" + }, + "moreBreadcrumbs": { + "message": "Więcej nawigacji", + "description": "This is used in the context of a breadcrumb navigation, indicating that there are more items in the breadcrumb trail that are not currently displayed." + }, + "confirmKeyConnectorDomain": { + "message": "Potwierdź domenę Key Connector" } } diff --git a/apps/browser/src/_locales/pt_BR/messages.json b/apps/browser/src/_locales/pt_BR/messages.json index 4d0e4148782..57367d84329 100644 --- a/apps/browser/src/_locales/pt_BR/messages.json +++ b/apps/browser/src/_locales/pt_BR/messages.json @@ -547,12 +547,50 @@ "searchVault": { "message": "Pesquisar no Cofre" }, + "resetSearch": { + "message": "Reset search" + }, + "archiveNoun": { + "message": "Archive", + "description": "Noun" + }, + "archiveVerb": { + "message": "Archive", + "description": "Verb" + }, + "unarchive": { + "message": "Unarchive" + }, + "itemsInArchive": { + "message": "Items in archive" + }, + "noItemsInArchive": { + "message": "No items in archive" + }, + "noItemsInArchiveDesc": { + "message": "Archived items will appear here and will be excluded from general search results and autofill suggestions." + }, + "itemSentToArchive": { + "message": "Item sent to archive" + }, + "itemRemovedFromArchive": { + "message": "Item removed from archive" + }, + "archiveItem": { + "message": "Archive item" + }, + "archiveItemConfirmDesc": { + "message": "Archived items are excluded from general search results and autofill suggestions. Are you sure you want to archive this item?" + }, "edit": { "message": "Editar" }, "view": { "message": "Ver" }, + "viewLogin": { + "message": "View login" + }, "noItemsInList": { "message": "Não há itens para listar." }, @@ -695,6 +733,15 @@ "invalidMasterPassword": { "message": "Senha mestra inválida" }, + "invalidMasterPasswordConfirmEmailAndHost": { + "message": "Invalid master password. Confirm your email is correct and your account was created on $HOST$.", + "placeholders": { + "host": { + "content": "$1", + "example": "vault.bitwarden.com" + } + } + }, "vaultTimeout": { "message": "Cofre - tempo esgotado" }, @@ -1034,7 +1081,7 @@ "message": "Exibir itens de cartão em páginas com abas para simplificar o preenchimento automático" }, "showIdentitiesInVaultViewV2": { - "message": "Sempre mostrar identidades como sugestões de preenchimento automático na Tela do Cofre" + "message": "Sempre mostrar identidades como sugestões de preenchimento automático na tela do Cofre" }, "showIdentitiesCurrentTab": { "message": "Exibir Identidades na Aba Atual" @@ -1501,6 +1548,15 @@ "readSecurityKey": { "message": "Ler chave de segurança" }, + "readingPasskeyLoading": { + "message": "Reading passkey..." + }, + "passkeyAuthenticationFailed": { + "message": "Passkey authentication failed" + }, + "useADifferentLogInMethod": { + "message": "Use a different log in method" + }, "awaitingSecurityKeyInteraction": { "message": "Aguardando interação com a chave de segurança..." }, @@ -1519,9 +1575,6 @@ "selectTwoStepLoginMethod": { "message": "Escolher iniciar sessão em duas etapas" }, - "recoveryCodeDesc": { - "message": "Perdeu o acesso a todos os seus provedores de duas etapas? Utilize o seu código de recuperação para desativar todos os provedores de duas etapas da sua conta." - }, "recoveryCodeTitle": { "message": "Código de Recuperação" }, @@ -1680,9 +1733,6 @@ "defaultAutoFillOnPageLoadDesc": { "message": "Você pode desativar o preenchimento automático no carregamento da página para credenciais individuais na tela de Editar do item." }, - "itemAutoFillOnPageLoad": { - "message": "Preencher automaticamente ao carregar a página (se configurado nas Opções)" - }, "autoFillOnPageLoadUseDefault": { "message": "Usar configuração padrão" }, @@ -1754,23 +1804,8 @@ "popup2faCloseMessage": { "message": "Ao clicar fora da janela de pop-up para verificar seu e-mail para o seu código de verificação fará com que este pop-up feche. Você deseja abrir este pop-up em uma nova janela para que ele não seja fechado?" }, - "popupU2fCloseMessage": { - "message": "Este navegador não pode processar requisições U2F nesta janela popup. Você quer abrir este popup em uma nova janela para que você possa entrar usando U2F?" - }, - "enableFavicon": { - "message": "Mostrar ícones do site" - }, - "faviconDesc": { - "message": "Mostrar uma imagem reconhecível ao lado de cada login." - }, - "faviconDescAlt": { - "message": "Mostre uma imagem reconhecível ao lado de cada login. Aplica-se a todas as contas conectadas." - }, - "enableBadgeCounter": { - "message": "Mostrar contador de insígnia" - }, - "badgeCounterDesc": { - "message": "Indique quantos acessos você tem para a página “web” atual." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "cardholderName": { "message": "Titular do Cartão" @@ -1829,6 +1864,9 @@ "securityCode": { "message": "Código de Segurança" }, + "cardNumber": { + "message": "card number" + }, "ex": { "message": "ex." }, @@ -1929,34 +1967,83 @@ "message": "Chave SSH" }, "typeNote": { - "message": "Note" + "message": "Nota" }, - "newItemHeader": { - "message": "Nova $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderLogin": { + "message": "New Login", + "description": "Header for new login item type" }, - "editItemHeader": { - "message": "Editar $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderCard": { + "message": "New Card", + "description": "Header for new card item type" }, - "viewItemHeader": { - "message": "Visualizar $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderIdentity": { + "message": "New Identity", + "description": "Header for new identity item type" + }, + "newItemHeaderNote": { + "message": "New Note", + "description": "Header for new note item type" + }, + "newItemHeaderSshKey": { + "message": "New SSH key", + "description": "Header for new SSH key item type" + }, + "newItemHeaderTextSend": { + "message": "New Text Send", + "description": "Header for new text send" + }, + "newItemHeaderFileSend": { + "message": "New File Send", + "description": "Header for new file send" + }, + "editItemHeaderLogin": { + "message": "Edit Login", + "description": "Header for edit login item type" + }, + "editItemHeaderCard": { + "message": "Edit Card", + "description": "Header for edit card item type" + }, + "editItemHeaderIdentity": { + "message": "Edit Identity", + "description": "Header for edit identity item type" + }, + "editItemHeaderNote": { + "message": "Edit Note", + "description": "Header for edit note item type" + }, + "editItemHeaderSshKey": { + "message": "Edit SSH key", + "description": "Header for edit SSH key item type" + }, + "editItemHeaderTextSend": { + "message": "Edit Text Send", + "description": "Header for edit text send" + }, + "editItemHeaderFileSend": { + "message": "Edit File Send", + "description": "Header for edit file send" + }, + "viewItemHeaderLogin": { + "message": "View Login", + "description": "Header for view login item type" + }, + "viewItemHeaderCard": { + "message": "View Card", + "description": "Header for view card item type" + }, + "viewItemHeaderIdentity": { + "message": "View Identity", + "description": "Header for view identity item type" + }, + "viewItemHeaderNote": { + "message": "View Note", + "description": "Header for view note item type" + }, + "viewItemHeaderSshKey": { + "message": "View SSH key", + "description": "Header for view SSH key item type" }, "passwordHistory": { "message": "Histórico de Senha" @@ -3129,6 +3216,24 @@ } } }, + "exportingOrganizationVaultFromPasswordManagerWithDataOwnershipDesc": { + "message": "Only the organization vault associated with $ORGANIZATION$ will be exported.", + "placeholders": { + "organization": { + "content": "$1", + "example": "My Org Name" + } + } + }, + "exportingOrganizationVaultFromAdminConsoleWithDataOwnershipDesc": { + "message": "Only the organization vault associated with $ORGANIZATION$ will be exported. My items collections will not be included.", + "placeholders": { + "organization": { + "content": "$1", + "example": "My Org Name" + } + } + }, "error": { "message": "Erro" }, @@ -3460,6 +3565,28 @@ "logInRequestSent": { "message": "Pedido enviado" }, + "loginRequestApprovedForEmailOnDevice": { + "message": "Login request approved for $EMAIL$ on $DEVICE$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + }, + "device": { + "content": "$2", + "example": "Web app - Chrome" + } + } + }, + "youDeniedLoginAttemptFromAnotherDevice": { + "message": "You denied a login attempt from another device. If this was you, try to log in with the device again." + }, + "device": { + "message": "Device" + }, + "loginStatus": { + "message": "Login status" + }, "masterPasswordChanged": { "message": "Master password saved" }, @@ -3496,9 +3623,6 @@ "autofillPageLoadPolicyActivated": { "message": "Suas políticas de organização ativaram o preenchimento automático ao carregar a página." }, - "howToAutofill": { - "message": "Como preencher automaticamente" - }, "autofillSelectInfoWithCommand": { "message": "Selecione um item desta tela, use o atalho $COMMAND$, ou explore outras opções nas configurações.", "placeholders": { @@ -3556,6 +3680,94 @@ "rememberThisDeviceToMakeFutureLoginsSeamless": { "message": "Lembrar deste dispositivo para permanecer conectado" }, + "manageDevices": { + "message": "Gerenciar dispositivos" + }, + "currentSession": { + "message": "Current session" + }, + "mobile": { + "message": "Mobile", + "description": "Mobile app" + }, + "extension": { + "message": "Extension", + "description": "Browser extension/addon" + }, + "desktop": { + "message": "Desktop", + "description": "Desktop app" + }, + "webVault": { + "message": "Web vault" + }, + "webApp": { + "message": "Web app" + }, + "cli": { + "message": "CLI" + }, + "sdk": { + "message": "SDK", + "description": "Software Development Kit" + }, + "requestPending": { + "message": "Request pending" + }, + "firstLogin": { + "message": "First login" + }, + "trusted": { + "message": "Trusted" + }, + "needsApproval": { + "message": "Needs approval" + }, + "devices": { + "message": "Dispositivos" + }, + "accessAttemptBy": { + "message": "Access attempt by $EMAIL$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + } + } + }, + "confirmAccess": { + "message": "Confirm access" + }, + "denyAccess": { + "message": "Deny access" + }, + "time": { + "message": "Time" + }, + "deviceType": { + "message": "Device Type" + }, + "loginRequest": { + "message": "Login request" + }, + "thisRequestIsNoLongerValid": { + "message": "This request is no longer valid." + }, + "loginRequestHasAlreadyExpired": { + "message": "Login request has already expired." + }, + "justNow": { + "message": "Just now" + }, + "requestedXMinutesAgo": { + "message": "Requested $MINUTES$ minutes ago", + "placeholders": { + "minutes": { + "content": "$1", + "example": "5" + } + } + }, "deviceApprovalRequired": { "message": "Aprovação do dispositivo necessária. Selecione uma opção de aprovação abaixo:" }, @@ -3669,11 +3881,11 @@ "message": "Trust user" }, "sendsTitleNoItems": { - "message": "Send sensitive information safely", + "message": "Envie informações confidenciais com segurança", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "sendsBodyNoItems": { - "message": "Share files and data securely with anyone, on any platform. Your information will remain end-to-end encrypted while limiting exposure.", + "message": "Compartilhe arquivos e dados de forma segura com qualquer pessoa, em qualquer plataforma. Suas informações permanecerão criptografadas de ponta a ponta enquanto limitam a exposição.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "inputRequired": { @@ -3795,18 +4007,10 @@ "aliasDomain": { "message": "Alias do domínio" }, - "passwordRepromptDisabledAutofillOnPageLoad": { - "message": "Os itens com confirmação de senha mestra não podem ser preenchidos automaticamente ao carregar a página. O preenchimento automático ao carregar a página será desativado.", - "description": "Toast message for describing that master password re-prompt cannot be autofilled on page load." - }, "autofillOnPageLoadSetToDefault": { "message": "O preenchimento automático ao carregar a página está usando a configuração padrão.", "description": "Toast message for informing the user that autofill on page load has been set to the default setting." }, - "turnOffMasterPasswordPromptToEditField": { - "message": "Desative a re-solicitação de senha mestra para editar este campo", - "description": "Message appearing below the autofill on load message when master password reprompt is set for a vault item." - }, "toggleSideNavigation": { "message": "Ativar/desativar navegação lateral" }, @@ -4015,15 +4219,11 @@ "selectImportCollection": { "message": "Selecione uma coleção" }, - "importTargetHint": { - "message": "Selecione esta opção se você quer o conteúdo do arquivo importado movido para $DESTINATION$", - "description": "Located as a hint under the import target. Will be appended by either folder or collection, depending if the user is importing into an individual or an organizational vault.", - "placeholders": { - "destination": { - "content": "$1", - "example": "folder or collection" - } - } + "importTargetHintCollection": { + "message": "Select this option if you want the imported file contents moved to a collection" + }, + "importTargetHintFolder": { + "message": "Select this option if you want the imported file contents moved to a folder" }, "importUnassignedItemsError": { "message": "Arquivo contém itens não atribuídos." @@ -4080,9 +4280,6 @@ "passkeyNotCopiedAlert": { "message": "A chave de acesso não será copiada para o item clonado. Deseja continuar clonando este item?" }, - "passkeyFeatureIsNotImplementedForAccountsWithoutMasterPassword": { - "message": "Verificação requerida pelo site que a iniciou. Esse recurso ainda não está implementado para contas sem senha mestra." - }, "logInWithPasskeyQuestion": { "message": "Fazer ‘login’ com chave de acesso?" }, @@ -4465,17 +4662,17 @@ } } }, - "copyFieldValue": { - "message": "Copiar $FIELD$, $VALUE$", + "copyFieldCipherName": { + "message": "Copy $FIELD$, $CIPHERNAME$", "description": "Title for a button that copies a field value to the clipboard.", "placeholders": { "field": { "content": "$1", "example": "Username" }, - "value": { + "ciphername": { "content": "$2", - "example": "Foo" + "example": "Login Item" } } }, @@ -4613,25 +4810,25 @@ } }, "downloadBitwarden": { - "message": "Download Bitwarden" + "message": "Baixar o Bitwarden" }, "downloadBitwardenOnAllDevices": { - "message": "Download Bitwarden on all devices" + "message": "Baixar o Bitwarden em todos os dispositivos" }, "getTheMobileApp": { - "message": "Get the mobile app" + "message": "Baixar o aplicativo para dispositivos móveis" }, "getTheMobileAppDesc": { - "message": "Access your passwords on the go with the Bitwarden mobile app." + "message": "Acesse as suas senhas em qualquer lugar com o aplicativo móvel Bitwarden." }, "getTheDesktopApp": { - "message": "Get the desktop app" + "message": "Obter o aplicativo para desktop" }, "getTheDesktopAppDesc": { - "message": "Access your vault without a browser, then set up unlock with biometrics to expedite unlocking in both the desktop app and browser extension." + "message": "Acesse o seu cofre sem um navegador e, em seguida, configure o desbloqueio com dados biométricos para facilitar o desbloqueio tanto no aplicativo desktop quanto na extensão do navegador." }, "downloadFromBitwardenNow": { - "message": "Download from bitwarden.com now" + "message": "Baixar em bitwarden.com agora" }, "getItOnGooglePlay": { "message": "Get it on Google Play" @@ -4768,9 +4965,6 @@ } } }, - "enableAnimations": { - "message": "Habilita animações" - }, "showAnimations": { "message": "Exibir animações" }, @@ -4983,15 +5177,9 @@ "itemLocation": { "message": "Localização do Item" }, - "fileSend": { - "message": "Arquivo enviado" - }, "fileSends": { "message": "Arquivos enviados" }, - "textSend": { - "message": "Enviar texto" - }, "textSends": { "message": "Texto enviado" }, @@ -5001,6 +5189,18 @@ "showNumberOfAutofillSuggestions": { "message": "Mostrar o número de sugestões de preenchimento automático de login no ícone da extensão" }, + "accountAccessRequested": { + "message": "Account access requested" + }, + "confirmAccessAttempt": { + "message": "Confirm access attempt for $EMAIL$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + } + } + }, "showQuickCopyActions": { "message": "Mostrar a opção de cópia rápida no Cofre" }, @@ -5040,9 +5240,6 @@ "vaultCustomTimeoutMinimum": { "message": "Tempo limite mínimo personalizado é 1 minuto." }, - "additionalContentAvailable": { - "message": "Conteúdo adicional está disponível" - }, "fileSavedToDevice": { "message": "Arquivo salvo no dispositivo. Gerencie a partir das transferências do seu dispositivo." }, @@ -5328,8 +5525,14 @@ "changeAtRiskPassword": { "message": "Alterar senhas vulneráveis" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "This login is at-risk and missing a website. Add a website and change the password for stronger security." + }, + "missingWebsite": { + "message": "Missing website" + }, "settingsVaultOptions": { - "message": "Vault options" + "message": "Opções do cofre" }, "emptyVaultDescription": { "message": "The vault protects more than just your passwords. Store secure logins, IDs, cards and notes securely here." @@ -5376,6 +5579,18 @@ "hasItemsVaultNudgeTitle": { "message": "Welcome to your vault!" }, + "phishingPageTitle": { + "message": "Phishing website" + }, + "phishingPageCloseTab": { + "message": "Close tab" + }, + "phishingPageContinue": { + "message": "Continue" + }, + "phishingPageLearnWhy": { + "message": "Why are you seeing this?" + }, "hasItemsVaultNudgeBodyOne": { "message": "Autofill items for the current page" }, @@ -5451,11 +5666,33 @@ "message": "Easily create strong and unique passwords by clicking on the Generate password button to help you keep your logins secure.", "description": "Aria label for the body content of the generator nudge" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "noPermissionsViewPage": { "message": "You do not have permissions to view this page. Try logging in with a different account." }, "wasmNotSupported": { "message": "WebAssembly is not supported on your browser or is not enabled. WebAssembly is required to use the Bitwarden app.", "description": "'WebAssembly' is a technical term and should not be translated." + }, + "showMore": { + "message": "Show more" + }, + "showLess": { + "message": "Show less" + }, + "next": { + "message": "Next" + }, + "moreBreadcrumbs": { + "message": "More breadcrumbs", + "description": "This is used in the context of a breadcrumb navigation, indicating that there are more items in the breadcrumb trail that are not currently displayed." + }, + "confirmKeyConnectorDomain": { + "message": "Confirm Key Connector domain" } } diff --git a/apps/browser/src/_locales/pt_PT/messages.json b/apps/browser/src/_locales/pt_PT/messages.json index 8f06014b6b2..df830be16ad 100644 --- a/apps/browser/src/_locales/pt_PT/messages.json +++ b/apps/browser/src/_locales/pt_PT/messages.json @@ -65,7 +65,7 @@ "message": "Uma dica da palavra-passe mestra pode ajudá-lo a lembrar-se da sua palavra-passe, caso se esqueça dela." }, "masterPassHintText": { - "message": "Se se esquecer da sua palavra-passe, a dica da palavra-passe pode ser enviada para o seu e-mail. Máximo de $CURRENT$/$MAXIMUM$ carateres.", + "message": "Se se esquecer da sua palavra-passe, a dica da palavra-passe pode ser enviada para o seu e-mail. Máximo de $CURRENT$/$MAXIMUM$ caracteres.", "placeholders": { "current": { "content": "$1", @@ -450,7 +450,7 @@ "message": "Gera automaticamente palavras-passe fortes e únicas para as suas credenciais." }, "bitWebVaultApp": { - "message": "Aplicação Web Bitwarden" + "message": "Aplicação web Bitwarden" }, "importItems": { "message": "Importar itens" @@ -490,7 +490,7 @@ "description": "Card header for password generator include block" }, "uppercaseDescription": { - "message": "Incluir carateres em maiúsculas", + "message": "Incluir caracteres em maiúsculas", "description": "Tooltip for the password generator uppercase character checkbox" }, "uppercaseLabel": { @@ -498,7 +498,7 @@ "description": "Label for the password generator uppercase character checkbox" }, "lowercaseDescription": { - "message": "Incluir carateres em minúsculas", + "message": "Incluir caracteres em minúsculas", "description": "Full description for the password generator lowercase character checkbox" }, "lowercaseLabel": { @@ -514,7 +514,7 @@ "description": "Label for the password generator numbers checkbox" }, "specialCharactersDescription": { - "message": "Incluir carateres especiais", + "message": "Incluir caracteres especiais", "description": "Full description for the password generator special characters checkbox" }, "numWords": { @@ -534,10 +534,10 @@ "message": "Mínimo de números" }, "minSpecial": { - "message": "Mínimo de carateres especiais" + "message": "Mínimo de caracteres especiais" }, "avoidAmbiguous": { - "message": "Evitar carateres ambíguos", + "message": "Evitar caracteres ambíguos", "description": "Label for the avoid ambiguous characters checkbox." }, "generatorPolicyInEffect": { @@ -547,12 +547,50 @@ "searchVault": { "message": "Procurar no cofre" }, + "resetSearch": { + "message": "Repor pesquisa" + }, + "archiveNoun": { + "message": "Arquivo", + "description": "Noun" + }, + "archiveVerb": { + "message": "Arquivar", + "description": "Verb" + }, + "unarchive": { + "message": "Desarquivar" + }, + "itemsInArchive": { + "message": "Itens no arquivo" + }, + "noItemsInArchive": { + "message": "Nenhum item no arquivo" + }, + "noItemsInArchiveDesc": { + "message": "Os itens arquivados aparecerão aqui e serão excluídos dos resultados gerais da pesquisa e das sugestões de preenchimento automático." + }, + "itemSentToArchive": { + "message": "Item movido para o arquivo" + }, + "itemRemovedFromArchive": { + "message": "Item removido do arquivo" + }, + "archiveItem": { + "message": "Arquivar item" + }, + "archiveItemConfirmDesc": { + "message": "Os itens arquivados são excluídos dos resultados gerais da pesquisa e das sugestões de preenchimento automático. Tem a certeza de que pretende arquivar este item?" + }, "edit": { "message": "Editar" }, "view": { "message": "Ver" }, + "viewLogin": { + "message": "Ver credencial" + }, "noItemsInList": { "message": "Não existem itens para listar." }, @@ -653,7 +691,7 @@ "message": "Classificar a extensão" }, "browserNotSupportClipboard": { - "message": "O seu navegador Web não suporta a cópia fácil da área de transferência. Em vez disso, copie manualmente." + "message": "O seu navegador web não suporta a cópia fácil da área de transferência. Em vez disso, copie manualmente." }, "verifyYourIdentity": { "message": "Verifique a sua identidade" @@ -695,6 +733,15 @@ "invalidMasterPassword": { "message": "Palavra-passe mestra inválida" }, + "invalidMasterPasswordConfirmEmailAndHost": { + "message": "Palavra-passe mestra inválida. Confirme se o seu e-mail está correto e se a sua conta foi criada em $HOST$.", + "placeholders": { + "host": { + "content": "$1", + "example": "vault.bitwarden.com" + } + } + }, "vaultTimeout": { "message": "Tempo limite do cofre" }, @@ -780,7 +827,7 @@ "message": "É necessário reescrever a palavra-passe mestra." }, "masterPasswordMinlength": { - "message": "A palavra-passe mestra deve ter pelo menos $VALUE$ carateres.", + "message": "A palavra-passe mestra deve ter pelo menos $VALUE$ caracteres.", "description": "The Master Password must be at least a specific number of characters long.", "placeholders": { "value": { @@ -929,7 +976,7 @@ "message": "Torne a sua conta mais segura configurando a verificação de dois passos na aplicação Web Bitwarden." }, "twoStepLoginConfirmationTitle": { - "message": "Continuar para a aplicação Web?" + "message": "Continuar para a aplicação web?" }, "editedFolder": { "message": "Pasta guardada" @@ -1229,10 +1276,10 @@ "message": "Tema" }, "themeDesc": { - "message": "Altere o tema de cores da aplicação." + "message": "Altere o tema da aplicação." }, "themeDescAlt": { - "message": "Altere o tema de cores da aplicação. Aplica-se a todas as contas com sessão iniciada." + "message": "Altere o tema da aplicação. Aplica-se a todas as contas com sessão iniciada." }, "dark": { "message": "Escuro", @@ -1501,6 +1548,15 @@ "readSecurityKey": { "message": "Ler chave de segurança" }, + "readingPasskeyLoading": { + "message": "A ler chave de acesso..." + }, + "passkeyAuthenticationFailed": { + "message": "Falha na autenticação da chave de acesso" + }, + "useADifferentLogInMethod": { + "message": "Utilizar um método de início de sessão diferente" + }, "awaitingSecurityKeyInteraction": { "message": "A aguardar interação da chave de segurança..." }, @@ -1519,9 +1575,6 @@ "selectTwoStepLoginMethod": { "message": "Selecionar método de verificação de dois passos" }, - "recoveryCodeDesc": { - "message": "Perdeu o acesso a todos os seus fornecedores de verificação de dois passos? Utilize o seu código de recuperação para desativar todos os fornecedores de verificação de dois passos da sua conta." - }, "recoveryCodeTitle": { "message": "Código de recuperação" }, @@ -1584,7 +1637,7 @@ "message": "URL do servidor da API" }, "webVaultUrl": { - "message": "URL do servidor do cofre Web" + "message": "URL do servidor do cofre web" }, "identityUrl": { "message": "URL do servidor de identidade" @@ -1680,9 +1733,6 @@ "defaultAutoFillOnPageLoadDesc": { "message": "Pode desativar o preenchimento automático ao carregar a página para itens de início de sessão individuais a partir da vista Editar do item." }, - "itemAutoFillOnPageLoad": { - "message": "Preencher automaticamente ao carregar a página (se configurado nas Opções)" - }, "autoFillOnPageLoadUseDefault": { "message": "Utilizar a predefinição" }, @@ -1754,23 +1804,8 @@ "popup2faCloseMessage": { "message": "Ao clicar fora da janela pop-up para verificar o código de verificação no seu e-mail fará com que este pop-up se feche. Pretende abrir esta janela pop-up numa nova janela para que não se feche?" }, - "popupU2fCloseMessage": { - "message": "Este navegador não pode processar pedidos U2F nesta janela pop-up. Pretende abrir este pop-up numa nova janela para poder iniciar sessão utilizando o U2F?" - }, - "enableFavicon": { - "message": "Mostrar ícones do site" - }, - "faviconDesc": { - "message": "Mostrar uma imagem reconhecível junto a cada credencial." - }, - "faviconDescAlt": { - "message": "Mostrar uma imagem reconhecível junto a cada credencial. Aplica-se a todas as contas com sessão iniciada." - }, - "enableBadgeCounter": { - "message": "Mostrar distintivo de contador" - }, - "badgeCounterDesc": { - "message": "Indica quantas credenciais tem para a página Web atual." + "showIconsChangePasswordUrls": { + "message": "Mostrar ícones de sites e recuperar URLs de alteração de palavra-passe" }, "cardholderName": { "message": "Titular do cartão" @@ -1829,6 +1864,9 @@ "securityCode": { "message": "Código de segurança" }, + "cardNumber": { + "message": "número do cartão" + }, "ex": { "message": "ex." }, @@ -1931,32 +1969,81 @@ "typeNote": { "message": "Nota" }, - "newItemHeader": { - "message": "Novo(a) $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderLogin": { + "message": "Nova credencial", + "description": "Header for new login item type" }, - "editItemHeader": { - "message": "Editar $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderCard": { + "message": "Novo cartão", + "description": "Header for new card item type" }, - "viewItemHeader": { - "message": "Ver $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderIdentity": { + "message": "Nova identidade", + "description": "Header for new identity item type" + }, + "newItemHeaderNote": { + "message": "Nova nota", + "description": "Header for new note item type" + }, + "newItemHeaderSshKey": { + "message": "Nova chave SSH", + "description": "Header for new SSH key item type" + }, + "newItemHeaderTextSend": { + "message": "Novo Send de texto", + "description": "Header for new text send" + }, + "newItemHeaderFileSend": { + "message": "Novo Send de ficheiro", + "description": "Header for new file send" + }, + "editItemHeaderLogin": { + "message": "Editar credencial", + "description": "Header for edit login item type" + }, + "editItemHeaderCard": { + "message": "Editar cartão", + "description": "Header for edit card item type" + }, + "editItemHeaderIdentity": { + "message": "Editar identidade", + "description": "Header for edit identity item type" + }, + "editItemHeaderNote": { + "message": "Editar nota", + "description": "Header for edit note item type" + }, + "editItemHeaderSshKey": { + "message": "Editar chave SSH", + "description": "Header for edit SSH key item type" + }, + "editItemHeaderTextSend": { + "message": "Editar Send de texto", + "description": "Header for edit text send" + }, + "editItemHeaderFileSend": { + "message": "Editar Send de ficheiro", + "description": "Header for edit file send" + }, + "viewItemHeaderLogin": { + "message": "Ver credencial", + "description": "Header for view login item type" + }, + "viewItemHeaderCard": { + "message": "Ver cartão", + "description": "Header for view card item type" + }, + "viewItemHeaderIdentity": { + "message": "Ver identidade", + "description": "Header for view identity item type" + }, + "viewItemHeaderNote": { + "message": "Ver nota", + "description": "Header for view note item type" + }, + "viewItemHeaderSshKey": { + "message": "Ver chave SSH", + "description": "Header for view SSH key item type" }, "passwordHistory": { "message": "Histórico de palavras-passe" @@ -2338,16 +2425,16 @@ } }, "policyInEffectUppercase": { - "message": "Contém um ou mais carateres em maiúsculas" + "message": "Contém um ou mais caracteres em maiúsculas" }, "policyInEffectLowercase": { - "message": "Contém um ou mais carateres em minúsculas" + "message": "Contém um ou mais caracteres em minúsculas" }, "policyInEffectNumbers": { "message": "Contém um ou mais números" }, "policyInEffectSpecial": { - "message": "Contém um ou mais dos seguintes carateres especiais $CHARS$", + "message": "Contém um ou mais dos seguintes caracteres especiais $CHARS$", "placeholders": { "chars": { "content": "$1", @@ -3091,7 +3178,7 @@ "message": "Saiu da organização." }, "toggleCharacterCount": { - "message": "Mostrar/ocultar contagem de carateres" + "message": "Mostrar/ocultar contagem de caracteres" }, "sessionTimeout": { "message": "A sua sessão expirou. Por favor, volte atrás e tente iniciar sessão novamente." @@ -3129,6 +3216,24 @@ } } }, + "exportingOrganizationVaultFromPasswordManagerWithDataOwnershipDesc": { + "message": "Apenas o cofre da organização associado a $ORGANIZATION$ será exportado.", + "placeholders": { + "organization": { + "content": "$1", + "example": "My Org Name" + } + } + }, + "exportingOrganizationVaultFromAdminConsoleWithDataOwnershipDesc": { + "message": "Apenas o cofre da organização associado a $ORGANIZATION$ será exportado. As coleções dos meus itens não serão incluídas.", + "placeholders": { + "organization": { + "content": "$1", + "example": "My Org Name" + } + } + }, "error": { "message": "Erro" }, @@ -3167,7 +3272,7 @@ } }, "passwordLengthRecommendationHint": { - "message": " Utilize $RECOMMENDED$ carateres ou mais para gerar uma palavra-passe forte.", + "message": " Utilize $RECOMMENDED$ caracteres ou mais para gerar uma palavra-passe forte.", "description": "Appended to `spinboxBoundariesHint` to recommend a length to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", "placeholders": { "recommended": { @@ -3460,6 +3565,28 @@ "logInRequestSent": { "message": "Pedido enviado" }, + "loginRequestApprovedForEmailOnDevice": { + "message": "Pedido de início de sessão aprovado para $EMAIL$ no $DEVICE$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + }, + "device": { + "content": "$2", + "example": "Web app - Chrome" + } + } + }, + "youDeniedLoginAttemptFromAnotherDevice": { + "message": "Recusou uma tentativa de início de sessão de outro dispositivo. Se foi realmente o caso, tente iniciar sessão com o dispositivo novamente." + }, + "device": { + "message": "Dispositivo" + }, + "loginStatus": { + "message": "Estado do início de sessão" + }, "masterPasswordChanged": { "message": "Palavra-passe mestra guardada" }, @@ -3485,7 +3612,7 @@ "message": "A sua palavra-passe mestra não pode ser recuperada se a esquecer!" }, "characterMinimum": { - "message": "$LENGTH$ carateres no mínimo", + "message": "$LENGTH$ caracteres no mínimo", "placeholders": { "length": { "content": "$1", @@ -3496,9 +3623,6 @@ "autofillPageLoadPolicyActivated": { "message": "As políticas da sua organização ativaram o preenchimento automático ao carregar a página." }, - "howToAutofill": { - "message": "Como preencher automaticamente" - }, "autofillSelectInfoWithCommand": { "message": "Selecione um item a partir deste ecrã, utilize o atalho $COMMAND$ ou explore outras opções nas definições.", "placeholders": { @@ -3556,6 +3680,94 @@ "rememberThisDeviceToMakeFutureLoginsSeamless": { "message": "Memorizar este dispositivo para facilitar futuros inícios de sessão" }, + "manageDevices": { + "message": "Gerir dispositivos" + }, + "currentSession": { + "message": "Sessão atual" + }, + "mobile": { + "message": "Móvel", + "description": "Mobile app" + }, + "extension": { + "message": "Extensão", + "description": "Browser extension/addon" + }, + "desktop": { + "message": "Computador", + "description": "Desktop app" + }, + "webVault": { + "message": "Cofre web" + }, + "webApp": { + "message": "Aplicação web" + }, + "cli": { + "message": "CLI" + }, + "sdk": { + "message": "SDK", + "description": "Software Development Kit" + }, + "requestPending": { + "message": "Pedido pendente" + }, + "firstLogin": { + "message": "Primeiro início de sessão" + }, + "trusted": { + "message": "Confiável" + }, + "needsApproval": { + "message": "Precisa de aprovação" + }, + "devices": { + "message": "Dispositivos" + }, + "accessAttemptBy": { + "message": "Tentativa de acesso por $EMAIL$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + } + } + }, + "confirmAccess": { + "message": "Confirmar acesso" + }, + "denyAccess": { + "message": "Recusar acesso" + }, + "time": { + "message": "Hora" + }, + "deviceType": { + "message": "Tipo de dispositivo" + }, + "loginRequest": { + "message": "Pedido de início de sessão" + }, + "thisRequestIsNoLongerValid": { + "message": "Este pedido já não é válido." + }, + "loginRequestHasAlreadyExpired": { + "message": "O pedido de início de sessão já expirou." + }, + "justNow": { + "message": "Agora mesmo" + }, + "requestedXMinutesAgo": { + "message": "Pedido há $MINUTES$ minutos", + "placeholders": { + "minutes": { + "content": "$1", + "example": "5" + } + } + }, "deviceApprovalRequired": { "message": "É necessária a aprovação do dispositivo. Selecione uma opção de aprovação abaixo:" }, @@ -3612,7 +3824,7 @@ "description": "European Union" }, "accessDenied": { - "message": "Acesso negado. Não tem permissão para visualizar esta página." + "message": "Acesso negado. Não tem permissão para ver esta página." }, "general": { "message": "Geral" @@ -3686,7 +3898,7 @@ "message": "Procurar" }, "inputMinLength": { - "message": "O campo deve ter pelo menos $COUNT$ carateres.", + "message": "O campo deve ter pelo menos $COUNT$ caracteres.", "placeholders": { "count": { "content": "$1", @@ -3695,7 +3907,7 @@ } }, "inputMaxLength": { - "message": "O campo não pode exceder os $COUNT$ carateres de comprimento.", + "message": "O campo não pode exceder os $COUNT$ caracteres de comprimento.", "placeholders": { "count": { "content": "$1", @@ -3704,7 +3916,7 @@ } }, "inputForbiddenCharacters": { - "message": "Não são permitidos os seguintes carateres: $CHARACTERS$", + "message": "Não são permitidos os seguintes caracteres: $CHARACTERS$", "placeholders": { "characters": { "content": "$1", @@ -3713,7 +3925,7 @@ } }, "inputMinValue": { - "message": "O valor do campo tem de ser, pelo menos, $MIN$ carateres.", + "message": "O valor do campo tem de ser, pelo menos, $MIN$ caracteres.", "placeholders": { "min": { "content": "$1", @@ -3722,7 +3934,7 @@ } }, "inputMaxValue": { - "message": "O valor do campo não pode exceder os $MAX$ carateres.", + "message": "O valor do campo não pode exceder os $MAX$ caracteres.", "placeholders": { "max": { "content": "$1", @@ -3795,18 +4007,10 @@ "aliasDomain": { "message": "Alias de domínio" }, - "passwordRepromptDisabledAutofillOnPageLoad": { - "message": "Os itens que voltem a pedir a palavra-passe mestra não podem ser preenchidos automaticamente no carregamento da página. Preenchimento automático no carregamento da página desativado.", - "description": "Toast message for describing that master password re-prompt cannot be autofilled on page load." - }, "autofillOnPageLoadSetToDefault": { "message": "Preencher automaticamente ao carregar a página definido para utilizar a predefinição.", "description": "Toast message for informing the user that autofill on page load has been set to the default setting." }, - "turnOffMasterPasswordPromptToEditField": { - "message": "Desativar o pedido para reintroduzir a palavra-passe mestra para editar este campo", - "description": "Message appearing below the autofill on load message when master password reprompt is set for a vault item." - }, "toggleSideNavigation": { "message": "Ativar/desativar navegação lateral" }, @@ -4015,15 +4219,11 @@ "selectImportCollection": { "message": "Selecionar uma coleção" }, - "importTargetHint": { - "message": "Selecione esta opção se pretender que o conteúdo do ficheiro importado seja transferido para $DESTINATION$", - "description": "Located as a hint under the import target. Will be appended by either folder or collection, depending if the user is importing into an individual or an organizational vault.", - "placeholders": { - "destination": { - "content": "$1", - "example": "folder or collection" - } - } + "importTargetHintCollection": { + "message": "Selecione esta opção se pretender que o conteúdo do ficheiro importado seja transferido para uma coleção" + }, + "importTargetHintFolder": { + "message": "Selecione esta opção se pretender que o conteúdo do ficheiro importado seja transferido para uma pasta" }, "importUnassignedItemsError": { "message": "O ficheiro contém itens não atribuídos." @@ -4080,9 +4280,6 @@ "passkeyNotCopiedAlert": { "message": "A chave de acesso não será copiada para o item duplicado. Pretende ainda assim duplicar este item?" }, - "passkeyFeatureIsNotImplementedForAccountsWithoutMasterPassword": { - "message": "Verificação exigida pelo site inicial. Esta funcionalidade ainda não está implementada para contas sem palavra-passe mestra." - }, "logInWithPasskeyQuestion": { "message": "Iniciar sessão com a chave de acesso?" }, @@ -4267,7 +4464,7 @@ "description": "Explains to the user that URI match detection determines how Bitwarden suggests autofill options, and clarifies that this default strategy applies when no specific match detection is set for a login item." }, "regExAdvancedOptionWarning": { - "message": "A \"expressão regular\" é uma opção avançada com um risco acrescido de exposição de credenciais.", + "message": "A \"Expressão regular\" é uma opção avançada com um risco acrescido de exposição de credenciais.", "description": "Content for dialog which warns a user when selecting 'regular expression' matching strategy as a cipher match strategy" }, "startsWithAdvancedOptionWarning": { @@ -4465,17 +4662,17 @@ } } }, - "copyFieldValue": { - "message": "Copiar $FIELD$, $VALUE$", + "copyFieldCipherName": { + "message": "Copiar $FIELD$, $CIPHERNAME$", "description": "Title for a button that copies a field value to the clipboard.", "placeholders": { "field": { "content": "$1", "example": "Username" }, - "value": { + "ciphername": { "content": "$2", - "example": "Foo" + "example": "Login Item" } } }, @@ -4768,9 +4965,6 @@ } } }, - "enableAnimations": { - "message": "Ativar animações" - }, "showAnimations": { "message": "Mostrar animações" }, @@ -4983,15 +5177,9 @@ "itemLocation": { "message": "Localização do item" }, - "fileSend": { - "message": "Send de ficheiro" - }, "fileSends": { "message": "Sends de ficheiros" }, - "textSend": { - "message": "Send de texto" - }, "textSends": { "message": "Sends de texto" }, @@ -5001,6 +5189,18 @@ "showNumberOfAutofillSuggestions": { "message": "Mostrar o número de sugestões de preenchimento automático de credenciais no ícone da extensão" }, + "accountAccessRequested": { + "message": "Acesso à conta solicitado" + }, + "confirmAccessAttempt": { + "message": "Confirmar tentativa de acesso para $EMAIL$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + } + } + }, "showQuickCopyActions": { "message": "Mostrar ações de cópia rápida no cofre" }, @@ -5040,17 +5240,14 @@ "vaultCustomTimeoutMinimum": { "message": "O tempo limite mínimo personalizado é de 1 minuto." }, - "additionalContentAvailable": { - "message": "Estão disponíveis conteúdos adicionais" - }, "fileSavedToDevice": { "message": "Ficheiro guardado no dispositivo. Gira-o a partir das transferências do seu dispositivo." }, "showCharacterCount": { - "message": "Mostrar contagem de carateres" + "message": "Mostrar contagem de caracteres" }, "hideCharacterCount": { - "message": "Ocultar contagem de carateres" + "message": "Ocultar contagem de caracteres" }, "itemsInTrash": { "message": "Itens no lixo" @@ -5328,6 +5525,12 @@ "changeAtRiskPassword": { "message": "Alterar palavra-passe em risco" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "Esta credencial está em risco e não tem um site. Adicione um site e altere a palavra-passe para uma segurança mais forte." + }, + "missingWebsite": { + "message": "Site em falta" + }, "settingsVaultOptions": { "message": "Opções do cofre" }, @@ -5376,6 +5579,18 @@ "hasItemsVaultNudgeTitle": { "message": "Bem-vindo ao seu cofre!" }, + "phishingPageTitle": { + "message": "Site de phishing" + }, + "phishingPageCloseTab": { + "message": "Fechar separador" + }, + "phishingPageContinue": { + "message": "Continuar" + }, + "phishingPageLearnWhy": { + "message": "Porque é que está a ver isto?" + }, "hasItemsVaultNudgeBodyOne": { "message": "Preenchimento automático de itens para a página atual" }, @@ -5451,11 +5666,33 @@ "message": "Crie facilmente palavras-passe fortes e únicas clicando no botão Gerar palavra-passe para o ajudar a manter as suas credenciais seguras.", "description": "Aria label for the body content of the generator nudge" }, + "aboutThisSetting": { + "message": "Acerca desta definição" + }, + "permitCipherDetailsDescription": { + "message": "O Bitwarden utilizará os URIs de credenciais guardadas para identificar qual o ícone ou URL de alteração de palavra-passe que deve ser utilizado para melhorar a sua experiência. Nenhuma informação é recolhida ou guardada quando utiliza este serviço." + }, "noPermissionsViewPage": { "message": "Não tem permissões para ver esta página. Tente iniciar sessão com uma conta diferente." }, "wasmNotSupported": { "message": "O WebAssembly não é suportado no seu navegador ou não está ativado. O WebAssembly é necessário para utilizar a app Bitwarden.", "description": "'WebAssembly' is a technical term and should not be translated." + }, + "showMore": { + "message": "Mostrar mais" + }, + "showLess": { + "message": "Mostrar menos" + }, + "next": { + "message": "Seguinte" + }, + "moreBreadcrumbs": { + "message": "Mais da navegação estrutural", + "description": "This is used in the context of a breadcrumb navigation, indicating that there are more items in the breadcrumb trail that are not currently displayed." + }, + "confirmKeyConnectorDomain": { + "message": "Confirmar o domínio do Key Connector" } } diff --git a/apps/browser/src/_locales/ro/messages.json b/apps/browser/src/_locales/ro/messages.json index 02fc0054e73..15dd663451d 100644 --- a/apps/browser/src/_locales/ro/messages.json +++ b/apps/browser/src/_locales/ro/messages.json @@ -398,7 +398,7 @@ "message": "Numele folderului" }, "folderHintText": { - "message": "Nest a folder by adding the parent folder's name followed by a “/”. Example: Social/Forums" + "message": "Grupează un folder prin adăugarea numelui folderului părinte urmat de \"/\" Exemplu: Social/Forums" }, "noFoldersAdded": { "message": "No folders added" @@ -547,12 +547,50 @@ "searchVault": { "message": "Căutare în seif" }, + "resetSearch": { + "message": "Reset search" + }, + "archiveNoun": { + "message": "Archive", + "description": "Noun" + }, + "archiveVerb": { + "message": "Archive", + "description": "Verb" + }, + "unarchive": { + "message": "Unarchive" + }, + "itemsInArchive": { + "message": "Items in archive" + }, + "noItemsInArchive": { + "message": "No items in archive" + }, + "noItemsInArchiveDesc": { + "message": "Archived items will appear here and will be excluded from general search results and autofill suggestions." + }, + "itemSentToArchive": { + "message": "Item sent to archive" + }, + "itemRemovedFromArchive": { + "message": "Item removed from archive" + }, + "archiveItem": { + "message": "Archive item" + }, + "archiveItemConfirmDesc": { + "message": "Archived items are excluded from general search results and autofill suggestions. Are you sure you want to archive this item?" + }, "edit": { "message": "Editare" }, "view": { "message": "Afișare" }, + "viewLogin": { + "message": "View login" + }, "noItemsInList": { "message": "Nu există niciun articol de afișat." }, @@ -695,6 +733,15 @@ "invalidMasterPassword": { "message": "Parolă principală incorectă" }, + "invalidMasterPasswordConfirmEmailAndHost": { + "message": "Invalid master password. Confirm your email is correct and your account was created on $HOST$.", + "placeholders": { + "host": { + "content": "$1", + "example": "vault.bitwarden.com" + } + } + }, "vaultTimeout": { "message": "Expirare seif" }, @@ -887,7 +934,7 @@ "message": "Follow the steps below to finish logging in." }, "followTheStepsBelowToFinishLoggingInWithSecurityKey": { - "message": "Follow the steps below to finish logging in with your security key." + "message": "Urmează pașii de mai jos pentru a finaliza autentificarea cu cheia de securitate." }, "restartRegistration": { "message": "Reporniți înregistrarea" @@ -929,7 +976,7 @@ "message": "Make your account more secure by setting up two-step login in the Bitwarden web app." }, "twoStepLoginConfirmationTitle": { - "message": "Continue to web app?" + "message": "Continuați în aplicația web?" }, "editedFolder": { "message": "Dosar salvat" @@ -1046,7 +1093,7 @@ "message": "Click items to autofill on Vault view" }, "clickToAutofill": { - "message": "Click items in autofill suggestion to fill" + "message": "Faceți clic pe elementele din sugestia de completare automată pentru a completa" }, "clearClipboard": { "message": "Golire clipboard", @@ -1501,6 +1548,15 @@ "readSecurityKey": { "message": "Read security key" }, + "readingPasskeyLoading": { + "message": "Reading passkey..." + }, + "passkeyAuthenticationFailed": { + "message": "Passkey authentication failed" + }, + "useADifferentLogInMethod": { + "message": "Use a different log in method" + }, "awaitingSecurityKeyInteraction": { "message": "Awaiting security key interaction..." }, @@ -1519,9 +1575,6 @@ "selectTwoStepLoginMethod": { "message": "Select two-step login method" }, - "recoveryCodeDesc": { - "message": "Ați pierdut accesul la toți furnizorii de autentificare în două etape? Utilizați codul de recuperare pentru a dezactiva toți acești furnizori din contul dvs." - }, "recoveryCodeTitle": { "message": "Cod de recuperare" }, @@ -1680,9 +1733,6 @@ "defaultAutoFillOnPageLoadDesc": { "message": "Puteți dezactiva completarea automată la încărcarea paginii pentru elementele de autentificare individuale din vizualizarea Editare element." }, - "itemAutoFillOnPageLoad": { - "message": "Completare automată la încărcarea paginii (dacă este configurată în Opțiuni)" - }, "autoFillOnPageLoadUseDefault": { "message": "Utilizați setarea implicită" }, @@ -1754,23 +1804,8 @@ "popup2faCloseMessage": { "message": "Dând clic în afara ferestrei pop-up pentru a vă verifica e-mailul pentru codul de verificare, aceasta se va închide. Doriți să deschideți acest pop-up într-o fereastră nouă, astfel încât aceasta să nu se închidă?" }, - "popupU2fCloseMessage": { - "message": "Acest browser nu poate procesa cererile U2F în această fereastră pop-up. Doriți să deschideți acest pop-up într-o fereastră nouă, astfel încât să vă puteți conecta utilizând U2F?" - }, - "enableFavicon": { - "message": "Afișați pictogramele site-ului web" - }, - "faviconDesc": { - "message": "Afișează o imagine ușor de recunoscut lângă fiecare autentificare." - }, - "faviconDescAlt": { - "message": "Show a recognizable image next to each login. Applies to all logged in accounts." - }, - "enableBadgeCounter": { - "message": "Afișați contorul de insigne" - }, - "badgeCounterDesc": { - "message": "Indică numărul de autentificări pe care le aveți pentru pagina web curentă." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "cardholderName": { "message": "Numele titularului cardului" @@ -1829,6 +1864,9 @@ "securityCode": { "message": "Cod de securitate" }, + "cardNumber": { + "message": "card number" + }, "ex": { "message": "ex." }, @@ -1931,32 +1969,81 @@ "typeNote": { "message": "Note" }, - "newItemHeader": { - "message": "New $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderLogin": { + "message": "New Login", + "description": "Header for new login item type" }, - "editItemHeader": { - "message": "Edit $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderCard": { + "message": "New Card", + "description": "Header for new card item type" }, - "viewItemHeader": { - "message": "View $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderIdentity": { + "message": "New Identity", + "description": "Header for new identity item type" + }, + "newItemHeaderNote": { + "message": "New Note", + "description": "Header for new note item type" + }, + "newItemHeaderSshKey": { + "message": "New SSH key", + "description": "Header for new SSH key item type" + }, + "newItemHeaderTextSend": { + "message": "New Text Send", + "description": "Header for new text send" + }, + "newItemHeaderFileSend": { + "message": "New File Send", + "description": "Header for new file send" + }, + "editItemHeaderLogin": { + "message": "Edit Login", + "description": "Header for edit login item type" + }, + "editItemHeaderCard": { + "message": "Edit Card", + "description": "Header for edit card item type" + }, + "editItemHeaderIdentity": { + "message": "Edit Identity", + "description": "Header for edit identity item type" + }, + "editItemHeaderNote": { + "message": "Edit Note", + "description": "Header for edit note item type" + }, + "editItemHeaderSshKey": { + "message": "Edit SSH key", + "description": "Header for edit SSH key item type" + }, + "editItemHeaderTextSend": { + "message": "Edit Text Send", + "description": "Header for edit text send" + }, + "editItemHeaderFileSend": { + "message": "Edit File Send", + "description": "Header for edit file send" + }, + "viewItemHeaderLogin": { + "message": "View Login", + "description": "Header for view login item type" + }, + "viewItemHeaderCard": { + "message": "View Card", + "description": "Header for view card item type" + }, + "viewItemHeaderIdentity": { + "message": "View Identity", + "description": "Header for view identity item type" + }, + "viewItemHeaderNote": { + "message": "View Note", + "description": "Header for view note item type" + }, + "viewItemHeaderSshKey": { + "message": "View SSH key", + "description": "Header for view SSH key item type" }, "passwordHistory": { "message": "Istoric parole" @@ -3129,6 +3216,24 @@ } } }, + "exportingOrganizationVaultFromPasswordManagerWithDataOwnershipDesc": { + "message": "Only the organization vault associated with $ORGANIZATION$ will be exported.", + "placeholders": { + "organization": { + "content": "$1", + "example": "My Org Name" + } + } + }, + "exportingOrganizationVaultFromAdminConsoleWithDataOwnershipDesc": { + "message": "Only the organization vault associated with $ORGANIZATION$ will be exported. My items collections will not be included.", + "placeholders": { + "organization": { + "content": "$1", + "example": "My Org Name" + } + } + }, "error": { "message": "Eroare" }, @@ -3460,6 +3565,28 @@ "logInRequestSent": { "message": "Request sent" }, + "loginRequestApprovedForEmailOnDevice": { + "message": "Login request approved for $EMAIL$ on $DEVICE$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + }, + "device": { + "content": "$2", + "example": "Web app - Chrome" + } + } + }, + "youDeniedLoginAttemptFromAnotherDevice": { + "message": "You denied a login attempt from another device. If this was you, try to log in with the device again." + }, + "device": { + "message": "Device" + }, + "loginStatus": { + "message": "Login status" + }, "masterPasswordChanged": { "message": "Master password saved" }, @@ -3496,9 +3623,6 @@ "autofillPageLoadPolicyActivated": { "message": "Politicile organizației dvs. au activat auto-completarea la încărcarea paginii." }, - "howToAutofill": { - "message": "Instrucțiuni de auto-completare" - }, "autofillSelectInfoWithCommand": { "message": "Select an item from this screen, use the shortcut $COMMAND$, or explore other options in settings.", "placeholders": { @@ -3556,6 +3680,94 @@ "rememberThisDeviceToMakeFutureLoginsSeamless": { "message": "Remember this device to make future logins seamless" }, + "manageDevices": { + "message": "Manage devices" + }, + "currentSession": { + "message": "Current session" + }, + "mobile": { + "message": "Mobile", + "description": "Mobile app" + }, + "extension": { + "message": "Extension", + "description": "Browser extension/addon" + }, + "desktop": { + "message": "Desktop", + "description": "Desktop app" + }, + "webVault": { + "message": "Web vault" + }, + "webApp": { + "message": "Web app" + }, + "cli": { + "message": "CLI" + }, + "sdk": { + "message": "SDK", + "description": "Software Development Kit" + }, + "requestPending": { + "message": "Request pending" + }, + "firstLogin": { + "message": "First login" + }, + "trusted": { + "message": "Trusted" + }, + "needsApproval": { + "message": "Needs approval" + }, + "devices": { + "message": "Devices" + }, + "accessAttemptBy": { + "message": "Access attempt by $EMAIL$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + } + } + }, + "confirmAccess": { + "message": "Confirm access" + }, + "denyAccess": { + "message": "Deny access" + }, + "time": { + "message": "Time" + }, + "deviceType": { + "message": "Device Type" + }, + "loginRequest": { + "message": "Login request" + }, + "thisRequestIsNoLongerValid": { + "message": "This request is no longer valid." + }, + "loginRequestHasAlreadyExpired": { + "message": "Login request has already expired." + }, + "justNow": { + "message": "Just now" + }, + "requestedXMinutesAgo": { + "message": "Requested $MINUTES$ minutes ago", + "placeholders": { + "minutes": { + "content": "$1", + "example": "5" + } + } + }, "deviceApprovalRequired": { "message": "Este necesară aprobarea dispozitivului. Selectați o opțiune de autorizare de mai jos:" }, @@ -3795,18 +4007,10 @@ "aliasDomain": { "message": "Alias domain" }, - "passwordRepromptDisabledAutofillOnPageLoad": { - "message": "Elementele în care parola principală este solicitată din nou nu pot fi completate automat la încărcarea paginii. Completarea automată la încărcarea paginii este dezactivată.", - "description": "Toast message for describing that master password re-prompt cannot be autofilled on page load." - }, "autofillOnPageLoadSetToDefault": { "message": "Completarea automată la încărcarea paginii este setată la valoarea implicită.", "description": "Toast message for informing the user that autofill on page load has been set to the default setting." }, - "turnOffMasterPasswordPromptToEditField": { - "message": "Dezactivați reintroducerea parolei principale pentru a edita acest câmp", - "description": "Message appearing below the autofill on load message when master password reprompt is set for a vault item." - }, "toggleSideNavigation": { "message": "Toggle side navigation" }, @@ -4015,15 +4219,11 @@ "selectImportCollection": { "message": "Select a collection" }, - "importTargetHint": { - "message": "Select this option if you want the imported file contents moved to a $DESTINATION$", - "description": "Located as a hint under the import target. Will be appended by either folder or collection, depending if the user is importing into an individual or an organizational vault.", - "placeholders": { - "destination": { - "content": "$1", - "example": "folder or collection" - } - } + "importTargetHintCollection": { + "message": "Select this option if you want the imported file contents moved to a collection" + }, + "importTargetHintFolder": { + "message": "Select this option if you want the imported file contents moved to a folder" }, "importUnassignedItemsError": { "message": "File contains unassigned items." @@ -4080,9 +4280,6 @@ "passkeyNotCopiedAlert": { "message": "The passkey will not be copied to the cloned item. Do you want to continue cloning this item?" }, - "passkeyFeatureIsNotImplementedForAccountsWithoutMasterPassword": { - "message": "Verification required by the initiating site. This feature is not yet implemented for accounts without master password." - }, "logInWithPasskeyQuestion": { "message": "Log in with passkey?" }, @@ -4465,17 +4662,17 @@ } } }, - "copyFieldValue": { - "message": "Copy $FIELD$, $VALUE$", + "copyFieldCipherName": { + "message": "Copy $FIELD$, $CIPHERNAME$", "description": "Title for a button that copies a field value to the clipboard.", "placeholders": { "field": { "content": "$1", "example": "Username" }, - "value": { + "ciphername": { "content": "$2", - "example": "Foo" + "example": "Login Item" } } }, @@ -4768,9 +4965,6 @@ } } }, - "enableAnimations": { - "message": "Enable animations" - }, "showAnimations": { "message": "Show animations" }, @@ -4983,15 +5177,9 @@ "itemLocation": { "message": "Item Location" }, - "fileSend": { - "message": "File Send" - }, "fileSends": { "message": "File Sends" }, - "textSend": { - "message": "Text Send" - }, "textSends": { "message": "Text Sends" }, @@ -5001,6 +5189,18 @@ "showNumberOfAutofillSuggestions": { "message": "Show number of login autofill suggestions on extension icon" }, + "accountAccessRequested": { + "message": "Account access requested" + }, + "confirmAccessAttempt": { + "message": "Confirm access attempt for $EMAIL$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + } + } + }, "showQuickCopyActions": { "message": "Show quick copy actions on Vault" }, @@ -5040,9 +5240,6 @@ "vaultCustomTimeoutMinimum": { "message": "Minimum custom timeout is 1 minute." }, - "additionalContentAvailable": { - "message": "Additional content is available" - }, "fileSavedToDevice": { "message": "File saved to device. Manage from your device downloads." }, @@ -5328,6 +5525,12 @@ "changeAtRiskPassword": { "message": "Change at-risk password" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "This login is at-risk and missing a website. Add a website and change the password for stronger security." + }, + "missingWebsite": { + "message": "Missing website" + }, "settingsVaultOptions": { "message": "Vault options" }, @@ -5376,6 +5579,18 @@ "hasItemsVaultNudgeTitle": { "message": "Welcome to your vault!" }, + "phishingPageTitle": { + "message": "Phishing website" + }, + "phishingPageCloseTab": { + "message": "Close tab" + }, + "phishingPageContinue": { + "message": "Continue" + }, + "phishingPageLearnWhy": { + "message": "Why are you seeing this?" + }, "hasItemsVaultNudgeBodyOne": { "message": "Autofill items for the current page" }, @@ -5451,11 +5666,33 @@ "message": "Easily create strong and unique passwords by clicking on the Generate password button to help you keep your logins secure.", "description": "Aria label for the body content of the generator nudge" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "noPermissionsViewPage": { "message": "You do not have permissions to view this page. Try logging in with a different account." }, "wasmNotSupported": { "message": "WebAssembly is not supported on your browser or is not enabled. WebAssembly is required to use the Bitwarden app.", "description": "'WebAssembly' is a technical term and should not be translated." + }, + "showMore": { + "message": "Show more" + }, + "showLess": { + "message": "Show less" + }, + "next": { + "message": "Next" + }, + "moreBreadcrumbs": { + "message": "More breadcrumbs", + "description": "This is used in the context of a breadcrumb navigation, indicating that there are more items in the breadcrumb trail that are not currently displayed." + }, + "confirmKeyConnectorDomain": { + "message": "Confirm Key Connector domain" } } diff --git a/apps/browser/src/_locales/ru/messages.json b/apps/browser/src/_locales/ru/messages.json index 2c9aa0f4d45..c23f51dc39d 100644 --- a/apps/browser/src/_locales/ru/messages.json +++ b/apps/browser/src/_locales/ru/messages.json @@ -547,12 +547,50 @@ "searchVault": { "message": "Поиск в хранилище" }, + "resetSearch": { + "message": "Сбросить поиск" + }, + "archiveNoun": { + "message": "Архив", + "description": "Noun" + }, + "archiveVerb": { + "message": "Архивировать", + "description": "Verb" + }, + "unarchive": { + "message": "Разархивировать" + }, + "itemsInArchive": { + "message": "Элементы в архиве" + }, + "noItemsInArchive": { + "message": "В архиве нет элементов" + }, + "noItemsInArchiveDesc": { + "message": "Архивированные элементы появятся здесь и будут исключены из общих результатов поиска и предложений автозаполнения." + }, + "itemSentToArchive": { + "message": "Элемент отправлен в архив" + }, + "itemRemovedFromArchive": { + "message": "Элемент удален из архива" + }, + "archiveItem": { + "message": "Архивировать элемент" + }, + "archiveItemConfirmDesc": { + "message": "Архивированные элементы исключены из общих результатов поиска и предложений автозаполнения. Вы уверены, что хотите архивировать этот элемент?" + }, "edit": { "message": "Изменить" }, "view": { "message": "Просмотр" }, + "viewLogin": { + "message": "Просмотр логина" + }, "noItemsInList": { "message": "Нет элементов для отображения." }, @@ -695,6 +733,15 @@ "invalidMasterPassword": { "message": "Неверный мастер-пароль" }, + "invalidMasterPasswordConfirmEmailAndHost": { + "message": "Неверный мастер-пароль. Подтвердите, что ваш адрес email указан верно и ваш аккаунт был создан на $HOST$.", + "placeholders": { + "host": { + "content": "$1", + "example": "vault.bitwarden.com" + } + } + }, "vaultTimeout": { "message": "Тайм-аут хранилища" }, @@ -1501,6 +1548,15 @@ "readSecurityKey": { "message": "Считать ключ безопасности" }, + "readingPasskeyLoading": { + "message": "Чтение passkey..." + }, + "passkeyAuthenticationFailed": { + "message": "Не удалось выполнить аутентификацию с помощью passkey" + }, + "useADifferentLogInMethod": { + "message": "Использовать другой способ авторизации" + }, "awaitingSecurityKeyInteraction": { "message": "Ожидание взаимодействия с ключом безопасности..." }, @@ -1519,9 +1575,6 @@ "selectTwoStepLoginMethod": { "message": "Выбрать другой метод двухэтапной аутентификации" }, - "recoveryCodeDesc": { - "message": "Потеряли доступ ко всем вариантам двухэтапной аутентификации? Используйте код восстановления, чтобы отключить двухэтапную аутентификацию для вашей учетной записи." - }, "recoveryCodeTitle": { "message": "Код восстановления" }, @@ -1680,9 +1733,6 @@ "defaultAutoFillOnPageLoadDesc": { "message": "Вы можете отключить автозаполнение при загрузке страницы для отдельных логинов в режиме редактирования элемента." }, - "itemAutoFillOnPageLoad": { - "message": "Автозаполнение при загрузке страницы (если включено в настройках)" - }, "autoFillOnPageLoadUseDefault": { "message": "Использовать настройки по умолчанию" }, @@ -1754,23 +1804,8 @@ "popup2faCloseMessage": { "message": "Щелчок за пределами этого окна для просмотра кода проверки из электронной почты приведет к его закрытию. Открыть bitwarden в новом окне?" }, - "popupU2fCloseMessage": { - "message": "Этот браузер не может обрабатывать запросы U2F в этом всплывающем окне. Вы хотите открыть это всплывающее окно в новом окне, чтобы иметь возможность войти в систему, используя U2F?" - }, - "enableFavicon": { - "message": "Показать значки сайтов" - }, - "faviconDesc": { - "message": "Отображать узнаваемое изображение рядом с каждым логином." - }, - "faviconDescAlt": { - "message": "Показывать узнаваемое изображение рядом с каждым логином. Применяется ко всем авторизованным аккаунтам." - }, - "enableBadgeCounter": { - "message": "Показать счетчик на значке" - }, - "badgeCounterDesc": { - "message": "Показывает количество логинов для текущей веб-страницы." + "showIconsChangePasswordUrls": { + "message": "Показывать значки сайтов и извлекать URL изменения пароля" }, "cardholderName": { "message": "Имя владельца карты" @@ -1829,6 +1864,9 @@ "securityCode": { "message": "Код безопасности" }, + "cardNumber": { + "message": "номер карты" + }, "ex": { "message": "напр." }, @@ -1931,32 +1969,81 @@ "typeNote": { "message": "Заметка" }, - "newItemHeader": { - "message": "Новый $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderLogin": { + "message": "Новый логин", + "description": "Header for new login item type" }, - "editItemHeader": { - "message": "Изменить $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderCard": { + "message": "Новая карта", + "description": "Header for new card item type" }, - "viewItemHeader": { - "message": "Просмотр $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderIdentity": { + "message": "Новая личная информация", + "description": "Header for new identity item type" + }, + "newItemHeaderNote": { + "message": "Новая заметка", + "description": "Header for new note item type" + }, + "newItemHeaderSshKey": { + "message": "Новый ключ SSH", + "description": "Header for new SSH key item type" + }, + "newItemHeaderTextSend": { + "message": "Новая текстовая Send", + "description": "Header for new text send" + }, + "newItemHeaderFileSend": { + "message": "Новая файловая Send", + "description": "Header for new file send" + }, + "editItemHeaderLogin": { + "message": "Изменить логин", + "description": "Header for edit login item type" + }, + "editItemHeaderCard": { + "message": "Редактировать карту", + "description": "Header for edit card item type" + }, + "editItemHeaderIdentity": { + "message": "Редактировать личную информацию", + "description": "Header for edit identity item type" + }, + "editItemHeaderNote": { + "message": "Редактировать заметку", + "description": "Header for edit note item type" + }, + "editItemHeaderSshKey": { + "message": "Редактировать ключ SSH", + "description": "Header for edit SSH key item type" + }, + "editItemHeaderTextSend": { + "message": "Изменить тестовую Send", + "description": "Header for edit text send" + }, + "editItemHeaderFileSend": { + "message": "Изменить файловую Send", + "description": "Header for edit file send" + }, + "viewItemHeaderLogin": { + "message": "Просмотр логина", + "description": "Header for view login item type" + }, + "viewItemHeaderCard": { + "message": "Просмотр карты", + "description": "Header for view card item type" + }, + "viewItemHeaderIdentity": { + "message": "Просмотр личной информации", + "description": "Header for view identity item type" + }, + "viewItemHeaderNote": { + "message": "Просмотр заметки", + "description": "Header for view note item type" + }, + "viewItemHeaderSshKey": { + "message": "Просмотр ключа SSH", + "description": "Header for view SSH key item type" }, "passwordHistory": { "message": "История паролей" @@ -3129,6 +3216,24 @@ } } }, + "exportingOrganizationVaultFromPasswordManagerWithDataOwnershipDesc": { + "message": "Будет экспортировано только хранилище организации, связанное с $ORGANIZATION$.", + "placeholders": { + "organization": { + "content": "$1", + "example": "My Org Name" + } + } + }, + "exportingOrganizationVaultFromAdminConsoleWithDataOwnershipDesc": { + "message": "Будет экспортировано только хранилище организации, связанное с $ORGANIZATION$. Коллекции Мои элементы включены не будут.", + "placeholders": { + "organization": { + "content": "$1", + "example": "My Org Name" + } + } + }, "error": { "message": "Ошибка" }, @@ -3460,6 +3565,28 @@ "logInRequestSent": { "message": "Запрос отправлен" }, + "loginRequestApprovedForEmailOnDevice": { + "message": "Запрос входа для $EMAIL$ на $DEVICE$ одобрен", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + }, + "device": { + "content": "$2", + "example": "Web app - Chrome" + } + } + }, + "youDeniedLoginAttemptFromAnotherDevice": { + "message": "Вы отклонили попытку авторизации с другого устройства. Если это были вы, попробуйте авторизоваться с этого устройства еще раз." + }, + "device": { + "message": "Устройство" + }, + "loginStatus": { + "message": "Статус авторизации" + }, "masterPasswordChanged": { "message": "Мастер-пароль сохранен" }, @@ -3496,9 +3623,6 @@ "autofillPageLoadPolicyActivated": { "message": "Автозаполнение при загрузке страницы было активировано политиками вашей организации." }, - "howToAutofill": { - "message": "Как использовать автозаполнение" - }, "autofillSelectInfoWithCommand": { "message": "Выберите элемент на этой странице, используйте сочетание клавиш: $COMMAND$ или ознакомьтесь с другими параметрами в настройках.", "placeholders": { @@ -3556,6 +3680,94 @@ "rememberThisDeviceToMakeFutureLoginsSeamless": { "message": "Запомнить это устройство, чтобы в будущем авторизовываться быстрее" }, + "manageDevices": { + "message": "Управление устройствами" + }, + "currentSession": { + "message": "Текущая сессия" + }, + "mobile": { + "message": "Мобильный", + "description": "Mobile app" + }, + "extension": { + "message": "Расширение", + "description": "Browser extension/addon" + }, + "desktop": { + "message": "Компьютер", + "description": "Desktop app" + }, + "webVault": { + "message": "Веб-хранилище" + }, + "webApp": { + "message": "Веб-приложение" + }, + "cli": { + "message": "CLI" + }, + "sdk": { + "message": "SDK", + "description": "Software Development Kit" + }, + "requestPending": { + "message": "Запрос в ожидании" + }, + "firstLogin": { + "message": "Первый вход" + }, + "trusted": { + "message": "Доверенный" + }, + "needsApproval": { + "message": "Требуется одобрение" + }, + "devices": { + "message": "Устройства" + }, + "accessAttemptBy": { + "message": "Попытка доступа $EMAIL$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + } + } + }, + "confirmAccess": { + "message": "Подтвердить доступ" + }, + "denyAccess": { + "message": "Отказать в доступе" + }, + "time": { + "message": "Время" + }, + "deviceType": { + "message": "Тип устройства" + }, + "loginRequest": { + "message": "Запрос на вход" + }, + "thisRequestIsNoLongerValid": { + "message": "Этот запрос больше не действителен." + }, + "loginRequestHasAlreadyExpired": { + "message": "Запрос на вход истек." + }, + "justNow": { + "message": "Только что" + }, + "requestedXMinutesAgo": { + "message": "Запрошено $MINUTES$ минут назад", + "placeholders": { + "minutes": { + "content": "$1", + "example": "5" + } + } + }, "deviceApprovalRequired": { "message": "Требуется одобрение устройства. Выберите вариант ниже:" }, @@ -3663,7 +3875,7 @@ "message": "В целях обеспечения безопасности вашего аккаунта продолжайте только в том случае, если вы являетесь членом этой организации, у вас включено восстановление аккаунта, а отображаемый ниже отпечаток совпадает с отпечатком организации." }, "orgTrustWarning1": { - "message": "В этой организации действует политика, которая позволит вам участвовать в восстановлении аккаунта. Регистрация позволит администраторам организации изменить ваш пароль. Продолжайте, только если вы знаете эту организацию и фраза отпечатков, показанная ниже, совпадает с отпечатками организации." + "message": "Эта организация имеет корпоративную политику, которая зарегистрирует вас в системе восстановления аккаунта. Регистрация позволит администраторам организации изменить ваш пароль. Продолжайте только в том случае, если вы узнаете эту организацию и фраза отпечатка, отображаемая ниже, соответствует отпечатку организации." }, "trustUser": { "message": "Доверенный пользователь" @@ -3795,18 +4007,10 @@ "aliasDomain": { "message": "Псевдоним домена" }, - "passwordRepromptDisabledAutofillOnPageLoad": { - "message": "Элементы с повторным запросом мастер-пароля не могут быть автоматически заполнены при загрузке страницы. Автозаполнение при загрузке страницы выключено.", - "description": "Toast message for describing that master password re-prompt cannot be autofilled on page load." - }, "autofillOnPageLoadSetToDefault": { "message": "Автозаполнение при загрузке страницы использует настройку по умолчанию.", "description": "Toast message for informing the user that autofill on page load has been set to the default setting." }, - "turnOffMasterPasswordPromptToEditField": { - "message": "Для редактирования этого поля отключите повторный запрос мастер-пароля", - "description": "Message appearing below the autofill on load message when master password reprompt is set for a vault item." - }, "toggleSideNavigation": { "message": "Переключить боковую навигацию" }, @@ -4015,15 +4219,11 @@ "selectImportCollection": { "message": "Выберите коллекцию" }, - "importTargetHint": { - "message": "Выберите эту опцию, если хотите, чтобы содержимое импортированного файла было перемещено в $DESTINATION$", - "description": "Located as a hint under the import target. Will be appended by either folder or collection, depending if the user is importing into an individual or an organizational vault.", - "placeholders": { - "destination": { - "content": "$1", - "example": "folder or collection" - } - } + "importTargetHintCollection": { + "message": "Выберите эту опцию, если хотите, чтобы содержимое импортированного файла было перемещено в коллекцию" + }, + "importTargetHintFolder": { + "message": "Выберите эту опцию, если хотите, чтобы содержимое импортированного файла было перемещено в папку" }, "importUnassignedItemsError": { "message": "Файл содержит неназначенные элементы." @@ -4080,9 +4280,6 @@ "passkeyNotCopiedAlert": { "message": "Passkey не будет скопирован в клонированный элемент. Продолжить клонирование этого элемента?" }, - "passkeyFeatureIsNotImplementedForAccountsWithoutMasterPassword": { - "message": "Необходима верификация со стороны инициирующего сайта. Для аккаунтов без мастер-пароля эта возможность пока не реализована." - }, "logInWithPasskeyQuestion": { "message": "Войти с passkey?" }, @@ -4465,17 +4662,17 @@ } } }, - "copyFieldValue": { - "message": "Скопировать $FIELD$, $VALUE$", + "copyFieldCipherName": { + "message": "Копировать $FIELD$, $CIPHERNAME$", "description": "Title for a button that copies a field value to the clipboard.", "placeholders": { "field": { "content": "$1", "example": "Username" }, - "value": { + "ciphername": { "content": "$2", - "example": "Foo" + "example": "Login Item" } } }, @@ -4768,9 +4965,6 @@ } } }, - "enableAnimations": { - "message": "Включить анимацию" - }, "showAnimations": { "message": "Показать анимацию" }, @@ -4983,15 +5177,9 @@ "itemLocation": { "message": "Расположение элемента" }, - "fileSend": { - "message": "Файловая Send" - }, "fileSends": { "message": "Файловая Send" }, - "textSend": { - "message": "Текстовая Send" - }, "textSends": { "message": "Текстовая Send" }, @@ -5001,6 +5189,18 @@ "showNumberOfAutofillSuggestions": { "message": "Показывать количество вариантов автозаполнения логина на значке расширения" }, + "accountAccessRequested": { + "message": "Запрошен доступ к аккаунту" + }, + "confirmAccessAttempt": { + "message": "Подтвердить попытку доступа $EMAIL$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + } + } + }, "showQuickCopyActions": { "message": "Показать быстрые действия копирования в хранилище" }, @@ -5040,9 +5240,6 @@ "vaultCustomTimeoutMinimum": { "message": "Минимальный пользовательский тайм-аут составляет 1 минуту." }, - "additionalContentAvailable": { - "message": "Дополнительный контент доступен" - }, "fileSavedToDevice": { "message": "Файл сохранен на устройстве. Управляйте им из загрузок устройства." }, @@ -5110,7 +5307,7 @@ "message": "Установить PIN--код разблокировки" }, "unlockWithBiometricSet": { - "message": "Разблокировать с помощью биометрии" + "message": "Разблокировка с помощью биометрии настроена" }, "authenticating": { "message": "Аутентификация" @@ -5328,6 +5525,12 @@ "changeAtRiskPassword": { "message": "Изменить пароль, подверженный риску" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "This login is at-risk and missing a website. Add a website and change the password for stronger security." + }, + "missingWebsite": { + "message": "Missing website" + }, "settingsVaultOptions": { "message": "Настройки хранилища" }, @@ -5376,6 +5579,18 @@ "hasItemsVaultNudgeTitle": { "message": "Добро пожаловать в ваше хранилище!" }, + "phishingPageTitle": { + "message": "Фишинг-сайт" + }, + "phishingPageCloseTab": { + "message": "Закрыть вкладку" + }, + "phishingPageContinue": { + "message": "Продолжить" + }, + "phishingPageLearnWhy": { + "message": "Почему вы это видите?" + }, "hasItemsVaultNudgeBodyOne": { "message": "Автозаполнение элементов на текущей странице" }, @@ -5451,11 +5666,33 @@ "message": "Легко создавайте надежные и уникальные пароли, нажатием на кнопку 'Сгенерировать пароль', чтобы обеспечить безопасность ваших логинов.", "description": "Aria label for the body content of the generator nudge" }, + "aboutThisSetting": { + "message": "Об этой настройке" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden будет использовать сохраненные URI логинов, чтобы определить, какой значок или URL для смены пароля следует использовать для улучшения вашего взаимодействия. При использовании этого сервиса никакая информация не собирается и не сохраняется." + }, "noPermissionsViewPage": { "message": "У вас нет прав для просмотра этой страницы. Попробуйте авторизоваться под другим аккаунтом." }, "wasmNotSupported": { "message": "WebAssembly не поддерживается вашим браузером или не включен. WebAssembly необходим для использования приложения Bitwarden.", "description": "'WebAssembly' is a technical term and should not be translated." + }, + "showMore": { + "message": "Больше" + }, + "showLess": { + "message": "Меньше" + }, + "next": { + "message": "Далее" + }, + "moreBreadcrumbs": { + "message": "More breadcrumbs", + "description": "This is used in the context of a breadcrumb navigation, indicating that there are more items in the breadcrumb trail that are not currently displayed." + }, + "confirmKeyConnectorDomain": { + "message": "Подтвердите домен соединителя ключей" } } diff --git a/apps/browser/src/_locales/si/messages.json b/apps/browser/src/_locales/si/messages.json index aa88e12ba39..66bc97ef431 100644 --- a/apps/browser/src/_locales/si/messages.json +++ b/apps/browser/src/_locales/si/messages.json @@ -547,12 +547,50 @@ "searchVault": { "message": "සුරක්ෂිතාගාරය සොයන්න" }, + "resetSearch": { + "message": "Reset search" + }, + "archiveNoun": { + "message": "Archive", + "description": "Noun" + }, + "archiveVerb": { + "message": "Archive", + "description": "Verb" + }, + "unarchive": { + "message": "Unarchive" + }, + "itemsInArchive": { + "message": "Items in archive" + }, + "noItemsInArchive": { + "message": "No items in archive" + }, + "noItemsInArchiveDesc": { + "message": "Archived items will appear here and will be excluded from general search results and autofill suggestions." + }, + "itemSentToArchive": { + "message": "Item sent to archive" + }, + "itemRemovedFromArchive": { + "message": "Item removed from archive" + }, + "archiveItem": { + "message": "Archive item" + }, + "archiveItemConfirmDesc": { + "message": "Archived items are excluded from general search results and autofill suggestions. Are you sure you want to archive this item?" + }, "edit": { "message": "සංස්කරණය" }, "view": { "message": "දකින්න" }, + "viewLogin": { + "message": "View login" + }, "noItemsInList": { "message": "ලැයිස්තු ගත කිරීමට අයිතම නොමැත." }, @@ -695,6 +733,15 @@ "invalidMasterPassword": { "message": "වලංගු නොවන ප්රධාන මුරපදය" }, + "invalidMasterPasswordConfirmEmailAndHost": { + "message": "Invalid master password. Confirm your email is correct and your account was created on $HOST$.", + "placeholders": { + "host": { + "content": "$1", + "example": "vault.bitwarden.com" + } + } + }, "vaultTimeout": { "message": "සුරක්ෂිතාගාරය වේලාව" }, @@ -1501,6 +1548,15 @@ "readSecurityKey": { "message": "Read security key" }, + "readingPasskeyLoading": { + "message": "Reading passkey..." + }, + "passkeyAuthenticationFailed": { + "message": "Passkey authentication failed" + }, + "useADifferentLogInMethod": { + "message": "Use a different log in method" + }, "awaitingSecurityKeyInteraction": { "message": "Awaiting security key interaction..." }, @@ -1519,9 +1575,6 @@ "selectTwoStepLoginMethod": { "message": "Select two-step login method" }, - "recoveryCodeDesc": { - "message": "ඔබගේ ද්වි-සාධක සපයන්නන් සියලු ප්රවේශ අහිමි? ඔබගේ ගිණුමෙන් සියලුම ද්වි-සාධක සපයන්නන් අක්රීය කිරීමට ඔබගේ ප්රතිසාධන කේතය භාවිතා කරන්න." - }, "recoveryCodeTitle": { "message": "ප්රතිසාධන කේතය" }, @@ -1680,9 +1733,6 @@ "defaultAutoFillOnPageLoadDesc": { "message": "පිටු පැටවුම් මත වාහන-පිරවීම සක්රීය කිරීමෙන් පසු, ඔබ තනි පිවිසුම් අයිතම සඳහා විශේෂාංගය සක්රිය හෝ අක්රිය කළ හැකිය. වෙන වෙනම වින්යාස කර නොමැති පිවිසුම් අයිතම සඳහා පෙරනිමි සැකසුම මෙයයි." }, - "itemAutoFillOnPageLoad": { - "message": "පිටු පැටවුම් මත ස්වයංක්රීය-පිරවීම (විකල්ප සක්රීය නම්)" - }, "autoFillOnPageLoadUseDefault": { "message": "පෙරනිමි සැකසුම භාවිතා" }, @@ -1754,23 +1804,8 @@ "popup2faCloseMessage": { "message": "ඔබගේ සත්යාපන කේතය සඳහා ඔබගේ ඊ-තැපැල් පරීක්ෂා කිරීමට උත්පතන කවුළුවෙන් පිටත ක්ලික් කිරීමෙන් මෙම උත්පතන වසා දැමීමට හේතු වේ. මෙම උත්පතන නව කවුළුවක විවෘත කිරීමට ඔබට අවශ්යද?" }, - "popupU2fCloseMessage": { - "message": "මෙම බ්රවුසරයට මෙම උත්පතන කවුළුව තුළ U2F ඉල්ලීම් සැකසීමට නොහැක. ඔබට U2F භාවිතයෙන් පිවිසිය හැකි වන පරිදි නව කවුළුවක මෙම උත්පතන විවෘත කිරීමට අවශ්යද?" - }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." - }, - "faviconDescAlt": { - "message": "Show a recognizable image next to each login. Applies to all logged in accounts." - }, - "enableBadgeCounter": { - "message": "Show badge counter" - }, - "badgeCounterDesc": { - "message": "Indicate how many logins you have for the current web page." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "cardholderName": { "message": "කාඞ්පත් හිමි නම" @@ -1829,6 +1864,9 @@ "securityCode": { "message": "ආරක්ෂක කේතය" }, + "cardNumber": { + "message": "card number" + }, "ex": { "message": "හිටපු." }, @@ -1931,32 +1969,81 @@ "typeNote": { "message": "Note" }, - "newItemHeader": { - "message": "New $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderLogin": { + "message": "New Login", + "description": "Header for new login item type" }, - "editItemHeader": { - "message": "Edit $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderCard": { + "message": "New Card", + "description": "Header for new card item type" }, - "viewItemHeader": { - "message": "View $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderIdentity": { + "message": "New Identity", + "description": "Header for new identity item type" + }, + "newItemHeaderNote": { + "message": "New Note", + "description": "Header for new note item type" + }, + "newItemHeaderSshKey": { + "message": "New SSH key", + "description": "Header for new SSH key item type" + }, + "newItemHeaderTextSend": { + "message": "New Text Send", + "description": "Header for new text send" + }, + "newItemHeaderFileSend": { + "message": "New File Send", + "description": "Header for new file send" + }, + "editItemHeaderLogin": { + "message": "Edit Login", + "description": "Header for edit login item type" + }, + "editItemHeaderCard": { + "message": "Edit Card", + "description": "Header for edit card item type" + }, + "editItemHeaderIdentity": { + "message": "Edit Identity", + "description": "Header for edit identity item type" + }, + "editItemHeaderNote": { + "message": "Edit Note", + "description": "Header for edit note item type" + }, + "editItemHeaderSshKey": { + "message": "Edit SSH key", + "description": "Header for edit SSH key item type" + }, + "editItemHeaderTextSend": { + "message": "Edit Text Send", + "description": "Header for edit text send" + }, + "editItemHeaderFileSend": { + "message": "Edit File Send", + "description": "Header for edit file send" + }, + "viewItemHeaderLogin": { + "message": "View Login", + "description": "Header for view login item type" + }, + "viewItemHeaderCard": { + "message": "View Card", + "description": "Header for view card item type" + }, + "viewItemHeaderIdentity": { + "message": "View Identity", + "description": "Header for view identity item type" + }, + "viewItemHeaderNote": { + "message": "View Note", + "description": "Header for view note item type" + }, + "viewItemHeaderSshKey": { + "message": "View SSH key", + "description": "Header for view SSH key item type" }, "passwordHistory": { "message": "මුරපද ඉතිහාසය" @@ -3129,6 +3216,24 @@ } } }, + "exportingOrganizationVaultFromPasswordManagerWithDataOwnershipDesc": { + "message": "Only the organization vault associated with $ORGANIZATION$ will be exported.", + "placeholders": { + "organization": { + "content": "$1", + "example": "My Org Name" + } + } + }, + "exportingOrganizationVaultFromAdminConsoleWithDataOwnershipDesc": { + "message": "Only the organization vault associated with $ORGANIZATION$ will be exported. My items collections will not be included.", + "placeholders": { + "organization": { + "content": "$1", + "example": "My Org Name" + } + } + }, "error": { "message": "Error" }, @@ -3460,6 +3565,28 @@ "logInRequestSent": { "message": "Request sent" }, + "loginRequestApprovedForEmailOnDevice": { + "message": "Login request approved for $EMAIL$ on $DEVICE$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + }, + "device": { + "content": "$2", + "example": "Web app - Chrome" + } + } + }, + "youDeniedLoginAttemptFromAnotherDevice": { + "message": "You denied a login attempt from another device. If this was you, try to log in with the device again." + }, + "device": { + "message": "Device" + }, + "loginStatus": { + "message": "Login status" + }, "masterPasswordChanged": { "message": "Master password saved" }, @@ -3496,9 +3623,6 @@ "autofillPageLoadPolicyActivated": { "message": "Your organization policies have turned on autofill on page load." }, - "howToAutofill": { - "message": "How to autofill" - }, "autofillSelectInfoWithCommand": { "message": "Select an item from this screen, use the shortcut $COMMAND$, or explore other options in settings.", "placeholders": { @@ -3556,6 +3680,94 @@ "rememberThisDeviceToMakeFutureLoginsSeamless": { "message": "Remember this device to make future logins seamless" }, + "manageDevices": { + "message": "Manage devices" + }, + "currentSession": { + "message": "Current session" + }, + "mobile": { + "message": "Mobile", + "description": "Mobile app" + }, + "extension": { + "message": "Extension", + "description": "Browser extension/addon" + }, + "desktop": { + "message": "Desktop", + "description": "Desktop app" + }, + "webVault": { + "message": "Web vault" + }, + "webApp": { + "message": "Web app" + }, + "cli": { + "message": "CLI" + }, + "sdk": { + "message": "SDK", + "description": "Software Development Kit" + }, + "requestPending": { + "message": "Request pending" + }, + "firstLogin": { + "message": "First login" + }, + "trusted": { + "message": "Trusted" + }, + "needsApproval": { + "message": "Needs approval" + }, + "devices": { + "message": "Devices" + }, + "accessAttemptBy": { + "message": "Access attempt by $EMAIL$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + } + } + }, + "confirmAccess": { + "message": "Confirm access" + }, + "denyAccess": { + "message": "Deny access" + }, + "time": { + "message": "Time" + }, + "deviceType": { + "message": "Device Type" + }, + "loginRequest": { + "message": "Login request" + }, + "thisRequestIsNoLongerValid": { + "message": "This request is no longer valid." + }, + "loginRequestHasAlreadyExpired": { + "message": "Login request has already expired." + }, + "justNow": { + "message": "Just now" + }, + "requestedXMinutesAgo": { + "message": "Requested $MINUTES$ minutes ago", + "placeholders": { + "minutes": { + "content": "$1", + "example": "5" + } + } + }, "deviceApprovalRequired": { "message": "Device approval required. Select an approval option below:" }, @@ -3795,18 +4007,10 @@ "aliasDomain": { "message": "Alias domain" }, - "passwordRepromptDisabledAutofillOnPageLoad": { - "message": "Items with master password re-prompt cannot be autofilled on page load. Autofill on page load turned off.", - "description": "Toast message for describing that master password re-prompt cannot be autofilled on page load." - }, "autofillOnPageLoadSetToDefault": { "message": "Autofill on page load set to use default setting.", "description": "Toast message for informing the user that autofill on page load has been set to the default setting." }, - "turnOffMasterPasswordPromptToEditField": { - "message": "Turn off master password re-prompt to edit this field", - "description": "Message appearing below the autofill on load message when master password reprompt is set for a vault item." - }, "toggleSideNavigation": { "message": "Toggle side navigation" }, @@ -4015,15 +4219,11 @@ "selectImportCollection": { "message": "Select a collection" }, - "importTargetHint": { - "message": "Select this option if you want the imported file contents moved to a $DESTINATION$", - "description": "Located as a hint under the import target. Will be appended by either folder or collection, depending if the user is importing into an individual or an organizational vault.", - "placeholders": { - "destination": { - "content": "$1", - "example": "folder or collection" - } - } + "importTargetHintCollection": { + "message": "Select this option if you want the imported file contents moved to a collection" + }, + "importTargetHintFolder": { + "message": "Select this option if you want the imported file contents moved to a folder" }, "importUnassignedItemsError": { "message": "File contains unassigned items." @@ -4080,9 +4280,6 @@ "passkeyNotCopiedAlert": { "message": "The passkey will not be copied to the cloned item. Do you want to continue cloning this item?" }, - "passkeyFeatureIsNotImplementedForAccountsWithoutMasterPassword": { - "message": "Verification required by the initiating site. This feature is not yet implemented for accounts without master password." - }, "logInWithPasskeyQuestion": { "message": "Log in with passkey?" }, @@ -4465,17 +4662,17 @@ } } }, - "copyFieldValue": { - "message": "Copy $FIELD$, $VALUE$", + "copyFieldCipherName": { + "message": "Copy $FIELD$, $CIPHERNAME$", "description": "Title for a button that copies a field value to the clipboard.", "placeholders": { "field": { "content": "$1", "example": "Username" }, - "value": { + "ciphername": { "content": "$2", - "example": "Foo" + "example": "Login Item" } } }, @@ -4768,9 +4965,6 @@ } } }, - "enableAnimations": { - "message": "Enable animations" - }, "showAnimations": { "message": "Show animations" }, @@ -4983,15 +5177,9 @@ "itemLocation": { "message": "Item Location" }, - "fileSend": { - "message": "File Send" - }, "fileSends": { "message": "File Sends" }, - "textSend": { - "message": "Text Send" - }, "textSends": { "message": "Text Sends" }, @@ -5001,6 +5189,18 @@ "showNumberOfAutofillSuggestions": { "message": "Show number of login autofill suggestions on extension icon" }, + "accountAccessRequested": { + "message": "Account access requested" + }, + "confirmAccessAttempt": { + "message": "Confirm access attempt for $EMAIL$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + } + } + }, "showQuickCopyActions": { "message": "Show quick copy actions on Vault" }, @@ -5040,9 +5240,6 @@ "vaultCustomTimeoutMinimum": { "message": "Minimum custom timeout is 1 minute." }, - "additionalContentAvailable": { - "message": "Additional content is available" - }, "fileSavedToDevice": { "message": "File saved to device. Manage from your device downloads." }, @@ -5328,6 +5525,12 @@ "changeAtRiskPassword": { "message": "Change at-risk password" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "This login is at-risk and missing a website. Add a website and change the password for stronger security." + }, + "missingWebsite": { + "message": "Missing website" + }, "settingsVaultOptions": { "message": "Vault options" }, @@ -5376,6 +5579,18 @@ "hasItemsVaultNudgeTitle": { "message": "Welcome to your vault!" }, + "phishingPageTitle": { + "message": "Phishing website" + }, + "phishingPageCloseTab": { + "message": "Close tab" + }, + "phishingPageContinue": { + "message": "Continue" + }, + "phishingPageLearnWhy": { + "message": "Why are you seeing this?" + }, "hasItemsVaultNudgeBodyOne": { "message": "Autofill items for the current page" }, @@ -5451,11 +5666,33 @@ "message": "Easily create strong and unique passwords by clicking on the Generate password button to help you keep your logins secure.", "description": "Aria label for the body content of the generator nudge" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "noPermissionsViewPage": { "message": "You do not have permissions to view this page. Try logging in with a different account." }, "wasmNotSupported": { "message": "WebAssembly is not supported on your browser or is not enabled. WebAssembly is required to use the Bitwarden app.", "description": "'WebAssembly' is a technical term and should not be translated." + }, + "showMore": { + "message": "Show more" + }, + "showLess": { + "message": "Show less" + }, + "next": { + "message": "Next" + }, + "moreBreadcrumbs": { + "message": "More breadcrumbs", + "description": "This is used in the context of a breadcrumb navigation, indicating that there are more items in the breadcrumb trail that are not currently displayed." + }, + "confirmKeyConnectorDomain": { + "message": "Confirm Key Connector domain" } } diff --git a/apps/browser/src/_locales/sk/messages.json b/apps/browser/src/_locales/sk/messages.json index 356617ea25c..6d0bbfc02d6 100644 --- a/apps/browser/src/_locales/sk/messages.json +++ b/apps/browser/src/_locales/sk/messages.json @@ -216,7 +216,7 @@ "description": "Aria label for the heading displayed the inline menu for totp code autofill" }, "generatePasswordCopied": { - "message": "Vygenerovať heslo (skopírované)" + "message": "Vygenerovať heslo (+skopírovať)" }, "copyElementIdentifier": { "message": "Kopírovať názov vlastného poľa" @@ -547,12 +547,50 @@ "searchVault": { "message": "Prehľadávať trezor" }, + "resetSearch": { + "message": "Resetovať vyhľadávanie" + }, + "archiveNoun": { + "message": "Archív", + "description": "Noun" + }, + "archiveVerb": { + "message": "Archivovať", + "description": "Verb" + }, + "unarchive": { + "message": "Zrušiť archiváciu" + }, + "itemsInArchive": { + "message": "Položky v archíve" + }, + "noItemsInArchive": { + "message": "Žiadne položky v archíve" + }, + "noItemsInArchiveDesc": { + "message": "Tu sa zobrazia archivované položky, ktoré budú vylúčené zo všeobecného vyhľadávania a z návrhov automatického vypĺňania." + }, + "itemSentToArchive": { + "message": "Položka bola archivovaná" + }, + "itemRemovedFromArchive": { + "message": "Položka bola odobraná z archívu" + }, + "archiveItem": { + "message": "Archivovať položku" + }, + "archiveItemConfirmDesc": { + "message": "Archivované položky sú vylúčené zo všeobecného vyhľadávania a z návrhov automatického vypĺňania. Naozaj chcete archivovať túto položku?" + }, "edit": { "message": "Upraviť" }, "view": { "message": "Zobraziť" }, + "viewLogin": { + "message": "Zobraziť prihlásenie" + }, "noItemsInList": { "message": "Neexistujú žiadne položky na zobrazenie." }, @@ -695,6 +733,15 @@ "invalidMasterPassword": { "message": "Neplatné hlavné heslo" }, + "invalidMasterPasswordConfirmEmailAndHost": { + "message": "Neplatné hlavné heslo. Potvrďte, že váš e-mail je správny a účet bol vytvorený na $HOST$.", + "placeholders": { + "host": { + "content": "$1", + "example": "vault.bitwarden.com" + } + } + }, "vaultTimeout": { "message": "Časový limit pre trezor" }, @@ -976,7 +1023,7 @@ "description": "'Domain' here refers to an internet domain name (e.g. 'bitwarden.com') and the message in whole described the act of putting a domain value into the context." }, "addedItem": { - "message": "Pridaná položka" + "message": "Položka bola pridaná" }, "editedItem": { "message": "Položka upravená" @@ -1501,6 +1548,15 @@ "readSecurityKey": { "message": "Prečítať bezpečnostný kľúč" }, + "readingPasskeyLoading": { + "message": "Načítava sa prístupový kľúč…" + }, + "passkeyAuthenticationFailed": { + "message": "Overenie prístupovým kľúčom zlyhalo" + }, + "useADifferentLogInMethod": { + "message": "Použiť iný spôsob prihlásenia" + }, "awaitingSecurityKeyInteraction": { "message": "Čaká sa na interakciu s bezpečnostným kľúčom..." }, @@ -1519,9 +1575,6 @@ "selectTwoStepLoginMethod": { "message": "Vyberte metódu dvojstupňového prihlásenia" }, - "recoveryCodeDesc": { - "message": "Stratili ste prístup ku všetkým vašim dvojstupňovým poskytovateľom? Použite váš záchranný kód pre vypnutie všetkých poskytovateľov vo vašom účte." - }, "recoveryCodeTitle": { "message": "Záchranný kód" }, @@ -1680,9 +1733,6 @@ "defaultAutoFillOnPageLoadDesc": { "message": "Pri úprave položky prihlásenia môžete individuálne zapnúť alebo vypnúť automatické vypĺňanie pri načítaní stránky pre danú položku." }, - "itemAutoFillOnPageLoad": { - "message": "Automatické vypĺňanie pri načítaní stránky (ak je povolené v možnostiach)" - }, "autoFillOnPageLoadUseDefault": { "message": "Pôvodné nastavenia" }, @@ -1754,23 +1804,8 @@ "popup2faCloseMessage": { "message": "Kliknutie mimo popup okna na prezretie vášho emailu pre overovací kód spôsobí zavretie tohto popupu. Chcete otvoriť tento popup v novom okne tak, aby sa nezavrel?" }, - "popupU2fCloseMessage": { - "message": "Tento prehliadač nedokáže spracovať U2F požiadavku v popup okne. Chcete ho otvoriť v novom okne aby ste sa mohli prihlásiť pomocou U2F?" - }, - "enableFavicon": { - "message": "Zobrazovať favikony stránok" - }, - "faviconDesc": { - "message": "Pri každom prihlásení zobrazí rozpoznateľný obrázok." - }, - "faviconDescAlt": { - "message": "Vedľa každého účtu zobraziť rozpoznateľný obrázok. Použije sa na všetky prihlásené účty." - }, - "enableBadgeCounter": { - "message": "Zobraziť počítadlo na ikone" - }, - "badgeCounterDesc": { - "message": "Ukazuje, koľko prihlásení máte pre aktuálnu webovú stránku." + "showIconsChangePasswordUrls": { + "message": "Zobraziť ikony webových stránok a načítať adresy URL na zmenu hesla" }, "cardholderName": { "message": "Meno vlastníka karty" @@ -1829,6 +1864,9 @@ "securityCode": { "message": "Bezpečnostný kód" }, + "cardNumber": { + "message": "číslo karty" + }, "ex": { "message": "napr." }, @@ -1931,32 +1969,81 @@ "typeNote": { "message": "Poznámka" }, - "newItemHeader": { - "message": "Nové $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderLogin": { + "message": "Nové prihlásenie", + "description": "Header for new login item type" }, - "editItemHeader": { - "message": "Upraviť $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderCard": { + "message": "Nová karta", + "description": "Header for new card item type" }, - "viewItemHeader": { - "message": "Zobraziť $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderIdentity": { + "message": "Nová identita", + "description": "Header for new identity item type" + }, + "newItemHeaderNote": { + "message": "Nová poznámka", + "description": "Header for new note item type" + }, + "newItemHeaderSshKey": { + "message": "Nový kľúč SSH", + "description": "Header for new SSH key item type" + }, + "newItemHeaderTextSend": { + "message": "Nový textový Send", + "description": "Header for new text send" + }, + "newItemHeaderFileSend": { + "message": "Nový súborový Send", + "description": "Header for new file send" + }, + "editItemHeaderLogin": { + "message": "Upraviť prihlásenie", + "description": "Header for edit login item type" + }, + "editItemHeaderCard": { + "message": "Upraviť kartu", + "description": "Header for edit card item type" + }, + "editItemHeaderIdentity": { + "message": "Upraviť identitu", + "description": "Header for edit identity item type" + }, + "editItemHeaderNote": { + "message": "Upraviť poznámku", + "description": "Header for edit note item type" + }, + "editItemHeaderSshKey": { + "message": "Upraviť kľúč SSH", + "description": "Header for edit SSH key item type" + }, + "editItemHeaderTextSend": { + "message": "Upraviť textový Send", + "description": "Header for edit text send" + }, + "editItemHeaderFileSend": { + "message": "Upraviť súborový Send", + "description": "Header for edit file send" + }, + "viewItemHeaderLogin": { + "message": "Zobraziť prihlásenie", + "description": "Header for view login item type" + }, + "viewItemHeaderCard": { + "message": "Zobraziť kartu", + "description": "Header for view card item type" + }, + "viewItemHeaderIdentity": { + "message": "Zobraziť identitu", + "description": "Header for view identity item type" + }, + "viewItemHeaderNote": { + "message": "Zobraziť poznámku", + "description": "Header for view note item type" + }, + "viewItemHeaderSshKey": { + "message": "Zobraziť kľúč SSH", + "description": "Header for view SSH key item type" }, "passwordHistory": { "message": "História hesla" @@ -3129,6 +3216,24 @@ } } }, + "exportingOrganizationVaultFromPasswordManagerWithDataOwnershipDesc": { + "message": "Exportuje sa len trezor organizácie spojený s $ORGANIZATION$.", + "placeholders": { + "organization": { + "content": "$1", + "example": "My Org Name" + } + } + }, + "exportingOrganizationVaultFromAdminConsoleWithDataOwnershipDesc": { + "message": "Exportuje sa len trezor organizácie spojený s $ORGANIZATION$. Moje zbierky položiek nebudú zahrnuté.", + "placeholders": { + "organization": { + "content": "$1", + "example": "My Org Name" + } + } + }, "error": { "message": "Chyba" }, @@ -3460,6 +3565,28 @@ "logInRequestSent": { "message": "Požiadavka bola odoslaná" }, + "loginRequestApprovedForEmailOnDevice": { + "message": "Potvrdené prihlásenie pre $EMAIL$ na $DEVICE$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + }, + "device": { + "content": "$2", + "example": "Web app - Chrome" + } + } + }, + "youDeniedLoginAttemptFromAnotherDevice": { + "message": "Odmietli ste pokus o prihlásenie z iného zariadenia. Ak ste to boli vy, skúste sa prihlásiť pomocou zariadenia znova." + }, + "device": { + "message": "Zariadenie" + }, + "loginStatus": { + "message": "Stav prihlásenia" + }, "masterPasswordChanged": { "message": "Hlavné heslo uložené" }, @@ -3496,9 +3623,6 @@ "autofillPageLoadPolicyActivated": { "message": "V pravidlách vašej organizácie je zapnuté automatické vypĺňanie pri načítaní stránky." }, - "howToAutofill": { - "message": "Ako používať automatické vypĺňanie" - }, "autofillSelectInfoWithCommand": { "message": "Vyberte položku z ponuky, použite klávesovú skratku $COMMAND$, alebo preskúmajte ďalšie možnosti nastavenia.", "placeholders": { @@ -3556,6 +3680,94 @@ "rememberThisDeviceToMakeFutureLoginsSeamless": { "message": "Zapamätať si toto zariadenie, pre budúce bezproblémové prihlásenie" }, + "manageDevices": { + "message": "Spravovať zariadenia" + }, + "currentSession": { + "message": "Aktuálna relácia" + }, + "mobile": { + "message": "Mobil", + "description": "Mobile app" + }, + "extension": { + "message": "Rozšírenie", + "description": "Browser extension/addon" + }, + "desktop": { + "message": "Počítač", + "description": "Desktop app" + }, + "webVault": { + "message": "Webový trezor" + }, + "webApp": { + "message": "Webová aplikácia" + }, + "cli": { + "message": "Príkazový riadok (CLI)" + }, + "sdk": { + "message": "SDK", + "description": "Software Development Kit" + }, + "requestPending": { + "message": "Žiadosť čaká na spracovanie" + }, + "firstLogin": { + "message": "Prvé prihlásenie" + }, + "trusted": { + "message": "Dôveryhodné" + }, + "needsApproval": { + "message": "Potrebuje súhlas" + }, + "devices": { + "message": "Zariadenia" + }, + "accessAttemptBy": { + "message": "Pokus o prístup z $EMAIL$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + } + } + }, + "confirmAccess": { + "message": "Potvrdiť prístup" + }, + "denyAccess": { + "message": "Zamietnuť prístup" + }, + "time": { + "message": "Čas" + }, + "deviceType": { + "message": "Typ zariadenia" + }, + "loginRequest": { + "message": "Žiadosť o prihlásenie" + }, + "thisRequestIsNoLongerValid": { + "message": "Táto žiadosť už nie je platná." + }, + "loginRequestHasAlreadyExpired": { + "message": "Platnosť žiadosti o prihlásenie už vypršala." + }, + "justNow": { + "message": "Práve teraz" + }, + "requestedXMinutesAgo": { + "message": "Vyžiadané pred $MINUTES$ min.", + "placeholders": { + "minutes": { + "content": "$1", + "example": "5" + } + } + }, "deviceApprovalRequired": { "message": "Vyžaduje sa schválenie zariadenia. Vyberte možnosť schválenia nižšie:" }, @@ -3795,18 +4007,10 @@ "aliasDomain": { "message": "Alias doména" }, - "passwordRepromptDisabledAutofillOnPageLoad": { - "message": "Položky, ktoré vyžadujú opätovné zadanie hlavného hesla sa nedajú automaticky vyplniť pri načítaní stránky. Automatické vypĺňanie pri načítaní stránky je vypnuté.", - "description": "Toast message for describing that master password re-prompt cannot be autofilled on page load." - }, "autofillOnPageLoadSetToDefault": { "message": "Automatické vypĺňanie pri načítaní stránky nastavené na pôvodnú predvoľbu.", "description": "Toast message for informing the user that autofill on page load has been set to the default setting." }, - "turnOffMasterPasswordPromptToEditField": { - "message": "Vypnite výzvu na opätovné zadanie hlavného hesla na úpravu tohto poľa", - "description": "Message appearing below the autofill on load message when master password reprompt is set for a vault item." - }, "toggleSideNavigation": { "message": "Prepnúť bočnú navigáciu" }, @@ -4015,15 +4219,11 @@ "selectImportCollection": { "message": "Vyberte zbierku" }, - "importTargetHint": { - "message": "Zvoľte túto možnosť, ak chcete obsah importovaného súboru presunúť do $DESTINATION$", - "description": "Located as a hint under the import target. Will be appended by either folder or collection, depending if the user is importing into an individual or an organizational vault.", - "placeholders": { - "destination": { - "content": "$1", - "example": "folder or collection" - } - } + "importTargetHintCollection": { + "message": "Zvoľte túto možnosť, ak chcete obsah importovaného súboru presunúť do zbierky" + }, + "importTargetHintFolder": { + "message": "Zvoľte túto možnosť, ak chcete obsah importovaného súboru presunúť do priečinka" }, "importUnassignedItemsError": { "message": "Súbor obsahuje nepriradené položky." @@ -4080,9 +4280,6 @@ "passkeyNotCopiedAlert": { "message": "Prístupový kľúč sa do klonovanej položky neskopíruje. Chcete pokračovať v klonovaní tejto položky?" }, - "passkeyFeatureIsNotImplementedForAccountsWithoutMasterPassword": { - "message": "Overenie požadované iniciujúcim webom. Táto funkcia zatiaľ nie je implementovaná pre účty bez hlavného hesla." - }, "logInWithPasskeyQuestion": { "message": "Prihlásiť sa s prístupovým kľúčom?" }, @@ -4465,17 +4662,17 @@ } } }, - "copyFieldValue": { - "message": "Kopírovať $FIELD$, $VALUE$", + "copyFieldCipherName": { + "message": "Kopírovať $FIELD$, $CIPHERNAME$", "description": "Title for a button that copies a field value to the clipboard.", "placeholders": { "field": { "content": "$1", "example": "Username" }, - "value": { + "ciphername": { "content": "$2", - "example": "Foo" + "example": "Login Item" } } }, @@ -4768,9 +4965,6 @@ } } }, - "enableAnimations": { - "message": "Povoliť animácie" - }, "showAnimations": { "message": "Zobraziť animácie" }, @@ -4983,15 +5177,9 @@ "itemLocation": { "message": "Umiestnenie položky" }, - "fileSend": { - "message": "Send so súborom" - }, "fileSends": { "message": "Sendy so súborom" }, - "textSend": { - "message": "Textový Send" - }, "textSends": { "message": "Textové Sendy" }, @@ -5001,6 +5189,18 @@ "showNumberOfAutofillSuggestions": { "message": "Zobraziť počet odporúčaných prihlasovacích údajov na ikone rozšírenia" }, + "accountAccessRequested": { + "message": "Žiadosť o prístup k účtu" + }, + "confirmAccessAttempt": { + "message": "Potvrďte pokus o prístup pre $EMAIL$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + } + } + }, "showQuickCopyActions": { "message": "Zobraziť akcie rýchleho kopírovania v trezore" }, @@ -5040,9 +5240,6 @@ "vaultCustomTimeoutMinimum": { "message": "Minimálny vlastný časový limit je 1 minúta." }, - "additionalContentAvailable": { - "message": "K dispozícii je ďalší obsah" - }, "fileSavedToDevice": { "message": "Súbor sa uložil do zariadenia. Spravujte stiahnuté súbory zo zariadenia." }, @@ -5328,6 +5525,12 @@ "changeAtRiskPassword": { "message": "Zmeniť rizikové heslá" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "Toto prihlásenie je v ohrození a chýba mu webová stránka. Pridajte webovú stránku a zmeňte heslo na silnejšie zabezpečenie." + }, + "missingWebsite": { + "message": "Chýbajúca webová stránka" + }, "settingsVaultOptions": { "message": "Možnosti trezoru" }, @@ -5376,6 +5579,18 @@ "hasItemsVaultNudgeTitle": { "message": "Vitajte vo svojom trezore!" }, + "phishingPageTitle": { + "message": "Phishingová webová stránka" + }, + "phishingPageCloseTab": { + "message": "Zavrieť kartu" + }, + "phishingPageContinue": { + "message": "Pokračovať" + }, + "phishingPageLearnWhy": { + "message": "Prečo to vidíte?" + }, "hasItemsVaultNudgeBodyOne": { "message": "Položky na automatické vypĺňanie pre aktuálnu stránku" }, @@ -5451,11 +5666,33 @@ "message": "Jednoducho vytvorte silné a jedinečné heslá kliknutím na tlačidlo Generovať heslo, aby ste zabezpečili prihlasovacie údaje.", "description": "Aria label for the body content of the generator nudge" }, + "aboutThisSetting": { + "message": "O tomto nastavení" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden použije uložené prihlasovacie URI na určenie ikony alebo adresy URL na zmenu hesla, ktoré by sa mali použiť na zlepšenie vášho zážitku. Pri používaní tejto služby sa nezbierajú ani neukladajú žiadne informácie." + }, "noPermissionsViewPage": { "message": "Nemáte oprávnenie na zobrazenie tejto stránky. Skúste sa prihlásiť pomocou iného účtu." }, "wasmNotSupported": { "message": "WebAssembly nie je vo vašom prehliadači podporovaný alebo nie je povolený. Na používanie Bitwardenu sa vyžaduje WebAssembly.", "description": "'WebAssembly' is a technical term and should not be translated." + }, + "showMore": { + "message": "Zobraziť viac" + }, + "showLess": { + "message": "Zobraziť menej" + }, + "next": { + "message": "Ďalej" + }, + "moreBreadcrumbs": { + "message": "Viac", + "description": "This is used in the context of a breadcrumb navigation, indicating that there are more items in the breadcrumb trail that are not currently displayed." + }, + "confirmKeyConnectorDomain": { + "message": "Potvrdiť doménu Key Connectora" } } diff --git a/apps/browser/src/_locales/sl/messages.json b/apps/browser/src/_locales/sl/messages.json index 72f058254e4..ab914ee0804 100644 --- a/apps/browser/src/_locales/sl/messages.json +++ b/apps/browser/src/_locales/sl/messages.json @@ -547,12 +547,50 @@ "searchVault": { "message": "Išči v trezorju" }, + "resetSearch": { + "message": "Reset search" + }, + "archiveNoun": { + "message": "Archive", + "description": "Noun" + }, + "archiveVerb": { + "message": "Archive", + "description": "Verb" + }, + "unarchive": { + "message": "Unarchive" + }, + "itemsInArchive": { + "message": "Items in archive" + }, + "noItemsInArchive": { + "message": "No items in archive" + }, + "noItemsInArchiveDesc": { + "message": "Archived items will appear here and will be excluded from general search results and autofill suggestions." + }, + "itemSentToArchive": { + "message": "Item sent to archive" + }, + "itemRemovedFromArchive": { + "message": "Item removed from archive" + }, + "archiveItem": { + "message": "Archive item" + }, + "archiveItemConfirmDesc": { + "message": "Archived items are excluded from general search results and autofill suggestions. Are you sure you want to archive this item?" + }, "edit": { "message": "Uredi" }, "view": { "message": "Pogled" }, + "viewLogin": { + "message": "View login" + }, "noItemsInList": { "message": "Tukaj ni ničesar." }, @@ -695,6 +733,15 @@ "invalidMasterPassword": { "message": "Napačno glavno geslo" }, + "invalidMasterPasswordConfirmEmailAndHost": { + "message": "Invalid master password. Confirm your email is correct and your account was created on $HOST$.", + "placeholders": { + "host": { + "content": "$1", + "example": "vault.bitwarden.com" + } + } + }, "vaultTimeout": { "message": "Zakleni trezor, ko preteče toliko časa:" }, @@ -1501,6 +1548,15 @@ "readSecurityKey": { "message": "Read security key" }, + "readingPasskeyLoading": { + "message": "Reading passkey..." + }, + "passkeyAuthenticationFailed": { + "message": "Passkey authentication failed" + }, + "useADifferentLogInMethod": { + "message": "Use a different log in method" + }, "awaitingSecurityKeyInteraction": { "message": "Awaiting security key interaction..." }, @@ -1519,9 +1575,6 @@ "selectTwoStepLoginMethod": { "message": "Select two-step login method" }, - "recoveryCodeDesc": { - "message": "Ste izgubili dostop do vseh ponudnikov dvostopenjske prijave? Uporabite svojo kodo za obnovitev in tako onemogočite dvostopenjsko prijavo v svoj račun." - }, "recoveryCodeTitle": { "message": "Koda za obnovitev" }, @@ -1680,9 +1733,6 @@ "defaultAutoFillOnPageLoadDesc": { "message": "Samodejno izpolnjevanje ob naložitvi strani lahko izklopite za posamčne prijave, ko jih urejate." }, - "itemAutoFillOnPageLoad": { - "message": "Samodejno izpolni ob naložitvi strani (če je omogočeno v Možnostih)" - }, "autoFillOnPageLoadUseDefault": { "message": "Uporabi privzete nastavitve" }, @@ -1754,23 +1804,8 @@ "popup2faCloseMessage": { "message": "Če kliknete izven tega pojavnega okna, da bi preverili pošto, se to pojavno okno zaprlo. Želite odpreti to pojavno okno v novem oknu, da se ne bo zaprlo?" }, - "popupU2fCloseMessage": { - "message": "Ta spletni brskalnik ne more obdelati U2F zahteve v tem pojavnem oknu. Želite odpreti to pojavno okno v novem oknu, tako, da se lahko prijavite z U2F?" - }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." - }, - "faviconDescAlt": { - "message": "Show a recognizable image next to each login. Applies to all logged in accounts." - }, - "enableBadgeCounter": { - "message": "Show badge counter" - }, - "badgeCounterDesc": { - "message": "Indicate how many logins you have for the current web page." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "cardholderName": { "message": "Ime imetnika kartice" @@ -1829,6 +1864,9 @@ "securityCode": { "message": "Varnostna koda" }, + "cardNumber": { + "message": "card number" + }, "ex": { "message": "npr." }, @@ -1931,32 +1969,81 @@ "typeNote": { "message": "Note" }, - "newItemHeader": { - "message": "New $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderLogin": { + "message": "New Login", + "description": "Header for new login item type" }, - "editItemHeader": { - "message": "Edit $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderCard": { + "message": "New Card", + "description": "Header for new card item type" }, - "viewItemHeader": { - "message": "View $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderIdentity": { + "message": "New Identity", + "description": "Header for new identity item type" + }, + "newItemHeaderNote": { + "message": "New Note", + "description": "Header for new note item type" + }, + "newItemHeaderSshKey": { + "message": "New SSH key", + "description": "Header for new SSH key item type" + }, + "newItemHeaderTextSend": { + "message": "New Text Send", + "description": "Header for new text send" + }, + "newItemHeaderFileSend": { + "message": "New File Send", + "description": "Header for new file send" + }, + "editItemHeaderLogin": { + "message": "Edit Login", + "description": "Header for edit login item type" + }, + "editItemHeaderCard": { + "message": "Edit Card", + "description": "Header for edit card item type" + }, + "editItemHeaderIdentity": { + "message": "Edit Identity", + "description": "Header for edit identity item type" + }, + "editItemHeaderNote": { + "message": "Edit Note", + "description": "Header for edit note item type" + }, + "editItemHeaderSshKey": { + "message": "Edit SSH key", + "description": "Header for edit SSH key item type" + }, + "editItemHeaderTextSend": { + "message": "Edit Text Send", + "description": "Header for edit text send" + }, + "editItemHeaderFileSend": { + "message": "Edit File Send", + "description": "Header for edit file send" + }, + "viewItemHeaderLogin": { + "message": "View Login", + "description": "Header for view login item type" + }, + "viewItemHeaderCard": { + "message": "View Card", + "description": "Header for view card item type" + }, + "viewItemHeaderIdentity": { + "message": "View Identity", + "description": "Header for view identity item type" + }, + "viewItemHeaderNote": { + "message": "View Note", + "description": "Header for view note item type" + }, + "viewItemHeaderSshKey": { + "message": "View SSH key", + "description": "Header for view SSH key item type" }, "passwordHistory": { "message": "Zgodovina gesel" @@ -3129,6 +3216,24 @@ } } }, + "exportingOrganizationVaultFromPasswordManagerWithDataOwnershipDesc": { + "message": "Only the organization vault associated with $ORGANIZATION$ will be exported.", + "placeholders": { + "organization": { + "content": "$1", + "example": "My Org Name" + } + } + }, + "exportingOrganizationVaultFromAdminConsoleWithDataOwnershipDesc": { + "message": "Only the organization vault associated with $ORGANIZATION$ will be exported. My items collections will not be included.", + "placeholders": { + "organization": { + "content": "$1", + "example": "My Org Name" + } + } + }, "error": { "message": "Napaka" }, @@ -3460,6 +3565,28 @@ "logInRequestSent": { "message": "Request sent" }, + "loginRequestApprovedForEmailOnDevice": { + "message": "Login request approved for $EMAIL$ on $DEVICE$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + }, + "device": { + "content": "$2", + "example": "Web app - Chrome" + } + } + }, + "youDeniedLoginAttemptFromAnotherDevice": { + "message": "You denied a login attempt from another device. If this was you, try to log in with the device again." + }, + "device": { + "message": "Device" + }, + "loginStatus": { + "message": "Login status" + }, "masterPasswordChanged": { "message": "Master password saved" }, @@ -3496,9 +3623,6 @@ "autofillPageLoadPolicyActivated": { "message": "V pravilih vaše organizacije je vklopljeno samodejno izpolnjevanje." }, - "howToAutofill": { - "message": "Kako uporabljati samodejno izpolnjevanje" - }, "autofillSelectInfoWithCommand": { "message": "Select an item from this screen, use the shortcut $COMMAND$, or explore other options in settings.", "placeholders": { @@ -3556,6 +3680,94 @@ "rememberThisDeviceToMakeFutureLoginsSeamless": { "message": "Remember this device to make future logins seamless" }, + "manageDevices": { + "message": "Manage devices" + }, + "currentSession": { + "message": "Current session" + }, + "mobile": { + "message": "Mobile", + "description": "Mobile app" + }, + "extension": { + "message": "Extension", + "description": "Browser extension/addon" + }, + "desktop": { + "message": "Desktop", + "description": "Desktop app" + }, + "webVault": { + "message": "Web vault" + }, + "webApp": { + "message": "Web app" + }, + "cli": { + "message": "CLI" + }, + "sdk": { + "message": "SDK", + "description": "Software Development Kit" + }, + "requestPending": { + "message": "Request pending" + }, + "firstLogin": { + "message": "First login" + }, + "trusted": { + "message": "Trusted" + }, + "needsApproval": { + "message": "Needs approval" + }, + "devices": { + "message": "Devices" + }, + "accessAttemptBy": { + "message": "Access attempt by $EMAIL$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + } + } + }, + "confirmAccess": { + "message": "Confirm access" + }, + "denyAccess": { + "message": "Deny access" + }, + "time": { + "message": "Time" + }, + "deviceType": { + "message": "Device Type" + }, + "loginRequest": { + "message": "Login request" + }, + "thisRequestIsNoLongerValid": { + "message": "This request is no longer valid." + }, + "loginRequestHasAlreadyExpired": { + "message": "Login request has already expired." + }, + "justNow": { + "message": "Just now" + }, + "requestedXMinutesAgo": { + "message": "Requested $MINUTES$ minutes ago", + "placeholders": { + "minutes": { + "content": "$1", + "example": "5" + } + } + }, "deviceApprovalRequired": { "message": "Device approval required. Select an approval option below:" }, @@ -3795,18 +4007,10 @@ "aliasDomain": { "message": "Alias domain" }, - "passwordRepromptDisabledAutofillOnPageLoad": { - "message": "Items with master password re-prompt cannot be autofilled on page load. Autofill on page load turned off.", - "description": "Toast message for describing that master password re-prompt cannot be autofilled on page load." - }, "autofillOnPageLoadSetToDefault": { "message": "Autofill on page load set to use default setting.", "description": "Toast message for informing the user that autofill on page load has been set to the default setting." }, - "turnOffMasterPasswordPromptToEditField": { - "message": "Turn off master password re-prompt to edit this field", - "description": "Message appearing below the autofill on load message when master password reprompt is set for a vault item." - }, "toggleSideNavigation": { "message": "Toggle side navigation" }, @@ -4015,15 +4219,11 @@ "selectImportCollection": { "message": "Select a collection" }, - "importTargetHint": { - "message": "Select this option if you want the imported file contents moved to a $DESTINATION$", - "description": "Located as a hint under the import target. Will be appended by either folder or collection, depending if the user is importing into an individual or an organizational vault.", - "placeholders": { - "destination": { - "content": "$1", - "example": "folder or collection" - } - } + "importTargetHintCollection": { + "message": "Select this option if you want the imported file contents moved to a collection" + }, + "importTargetHintFolder": { + "message": "Select this option if you want the imported file contents moved to a folder" }, "importUnassignedItemsError": { "message": "File contains unassigned items." @@ -4080,9 +4280,6 @@ "passkeyNotCopiedAlert": { "message": "The passkey will not be copied to the cloned item. Do you want to continue cloning this item?" }, - "passkeyFeatureIsNotImplementedForAccountsWithoutMasterPassword": { - "message": "Verification required by the initiating site. This feature is not yet implemented for accounts without master password." - }, "logInWithPasskeyQuestion": { "message": "Log in with passkey?" }, @@ -4465,17 +4662,17 @@ } } }, - "copyFieldValue": { - "message": "Copy $FIELD$, $VALUE$", + "copyFieldCipherName": { + "message": "Copy $FIELD$, $CIPHERNAME$", "description": "Title for a button that copies a field value to the clipboard.", "placeholders": { "field": { "content": "$1", "example": "Username" }, - "value": { + "ciphername": { "content": "$2", - "example": "Foo" + "example": "Login Item" } } }, @@ -4768,9 +4965,6 @@ } } }, - "enableAnimations": { - "message": "Enable animations" - }, "showAnimations": { "message": "Show animations" }, @@ -4983,15 +5177,9 @@ "itemLocation": { "message": "Item Location" }, - "fileSend": { - "message": "File Send" - }, "fileSends": { "message": "File Sends" }, - "textSend": { - "message": "Text Send" - }, "textSends": { "message": "Text Sends" }, @@ -5001,6 +5189,18 @@ "showNumberOfAutofillSuggestions": { "message": "Show number of login autofill suggestions on extension icon" }, + "accountAccessRequested": { + "message": "Account access requested" + }, + "confirmAccessAttempt": { + "message": "Confirm access attempt for $EMAIL$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + } + } + }, "showQuickCopyActions": { "message": "Show quick copy actions on Vault" }, @@ -5040,9 +5240,6 @@ "vaultCustomTimeoutMinimum": { "message": "Minimum custom timeout is 1 minute." }, - "additionalContentAvailable": { - "message": "Additional content is available" - }, "fileSavedToDevice": { "message": "File saved to device. Manage from your device downloads." }, @@ -5328,6 +5525,12 @@ "changeAtRiskPassword": { "message": "Change at-risk password" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "This login is at-risk and missing a website. Add a website and change the password for stronger security." + }, + "missingWebsite": { + "message": "Missing website" + }, "settingsVaultOptions": { "message": "Vault options" }, @@ -5376,6 +5579,18 @@ "hasItemsVaultNudgeTitle": { "message": "Welcome to your vault!" }, + "phishingPageTitle": { + "message": "Phishing website" + }, + "phishingPageCloseTab": { + "message": "Close tab" + }, + "phishingPageContinue": { + "message": "Continue" + }, + "phishingPageLearnWhy": { + "message": "Why are you seeing this?" + }, "hasItemsVaultNudgeBodyOne": { "message": "Autofill items for the current page" }, @@ -5451,11 +5666,33 @@ "message": "Easily create strong and unique passwords by clicking on the Generate password button to help you keep your logins secure.", "description": "Aria label for the body content of the generator nudge" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "noPermissionsViewPage": { "message": "You do not have permissions to view this page. Try logging in with a different account." }, "wasmNotSupported": { "message": "WebAssembly is not supported on your browser or is not enabled. WebAssembly is required to use the Bitwarden app.", "description": "'WebAssembly' is a technical term and should not be translated." + }, + "showMore": { + "message": "Show more" + }, + "showLess": { + "message": "Show less" + }, + "next": { + "message": "Next" + }, + "moreBreadcrumbs": { + "message": "More breadcrumbs", + "description": "This is used in the context of a breadcrumb navigation, indicating that there are more items in the breadcrumb trail that are not currently displayed." + }, + "confirmKeyConnectorDomain": { + "message": "Confirm Key Connector domain" } } diff --git a/apps/browser/src/_locales/sr/messages.json b/apps/browser/src/_locales/sr/messages.json index b802fab75f6..c931242e4a8 100644 --- a/apps/browser/src/_locales/sr/messages.json +++ b/apps/browser/src/_locales/sr/messages.json @@ -547,12 +547,50 @@ "searchVault": { "message": "Претражи сеф" }, + "resetSearch": { + "message": "Ресетовати претрагу" + }, + "archiveNoun": { + "message": "Архива", + "description": "Noun" + }, + "archiveVerb": { + "message": "Архива", + "description": "Verb" + }, + "unarchive": { + "message": "Врати из архиве" + }, + "itemsInArchive": { + "message": "Ставке у архиви" + }, + "noItemsInArchive": { + "message": "Нема ставка у архиви" + }, + "noItemsInArchiveDesc": { + "message": "Архивиране ставке ће се овде појавити и бити искључени из општих резултата претраге и сугестија о ауто-пуњењу." + }, + "itemSentToArchive": { + "message": "Ставка је послата у архиву" + }, + "itemRemovedFromArchive": { + "message": "Ставка је уклоњена из архиве" + }, + "archiveItem": { + "message": "Архивирај ставку" + }, + "archiveItemConfirmDesc": { + "message": "Архивиране ставке су искључене из општих резултата претраге и предлога за ауто попуњавање. Јесте ли сигурни да желите да архивирате ову ставку?" + }, "edit": { "message": "Уреди" }, "view": { "message": "Приказ" }, + "viewLogin": { + "message": "Преглед пријаве" + }, "noItemsInList": { "message": "Нема ставке у листи." }, @@ -695,6 +733,15 @@ "invalidMasterPassword": { "message": "Погрешна главна лозинка" }, + "invalidMasterPasswordConfirmEmailAndHost": { + "message": "Неважећа главна лозинка. Потврдите да је ваш имејл тачан и ваш рачун је креиран на $HOST$.", + "placeholders": { + "host": { + "content": "$1", + "example": "vault.bitwarden.com" + } + } + }, "vaultTimeout": { "message": "Тајмаут сефа" }, @@ -1174,10 +1221,10 @@ "description": "Detailed error message shown when saving login details fails." }, "changePasswordWarning": { - "message": "After changing your password, you will need to log in with your new password. Active sessions on other devices will be logged out within one hour." + "message": "Након промене лозинке, мораћете да се пријавите са новом лозинком. Активне сесије на другим уређајима биће одјављене у року од једног сата." }, "accountRecoveryUpdateMasterPasswordSubtitle": { - "message": "Change your master password to complete account recovery." + "message": "Промените главну лозинку да бисте завршили опоравак налога." }, "enableChangedPasswordNotification": { "message": "Питај за ажурирање постојеће пријаве" @@ -1501,6 +1548,15 @@ "readSecurityKey": { "message": "Читај сигурносни кључ" }, + "readingPasskeyLoading": { + "message": "Reading passkey..." + }, + "passkeyAuthenticationFailed": { + "message": "Passkey authentication failed" + }, + "useADifferentLogInMethod": { + "message": "Use a different log in method" + }, "awaitingSecurityKeyInteraction": { "message": "Чека се интеракција сигурносног кључа..." }, @@ -1519,9 +1575,6 @@ "selectTwoStepLoginMethod": { "message": "Одабрати методу пријављивања у два корака" }, - "recoveryCodeDesc": { - "message": "Изгубили сте приступ свим својим двофакторским добављачима? Употребите код за опоравак да онемогућите све двофакторске добављаче из налога." - }, "recoveryCodeTitle": { "message": "Шифра за опоравак" }, @@ -1612,7 +1665,7 @@ "message": "Искључите подешавања ауто-пуњења прегледача, тако да се не сукобљавај са Bitwarden." }, "turnOffBrowserAutofill": { - "message": "Turn off $BROWSER$ autofill", + "message": "Угасити ауто-пуњење $BROWSER$-а", "placeholders": { "browser": { "content": "$1", @@ -1621,7 +1674,7 @@ } }, "turnOffAutofill": { - "message": "Turn off autofill" + "message": "Угасити ауто-пуњење" }, "showInlineMenuLabel": { "message": "Прикажи предлоге за ауто-попуњавање у пољима обрасца" @@ -1680,9 +1733,6 @@ "defaultAutoFillOnPageLoadDesc": { "message": "Након што омогућите ауто-попуњавање странице, можете омогућити или онемогућити функцију за појединачне ставке за пријаву. Ово је подразумевана поставка за ставке за пријаву које нису различито конфигурисане." }, - "itemAutoFillOnPageLoad": { - "message": "Ауто-попуњавање након учитавања странице (ако је омогућено у опцијама)" - }, "autoFillOnPageLoadUseDefault": { "message": "Користи подразумевано подешавање" }, @@ -1754,23 +1804,8 @@ "popup2faCloseMessage": { "message": "Ако кликнете изван искачућег прозора да бисте проверили имејл за верификациони код, овај прозор ће се затворити. Да ли желите да отворите овај прозор у новом прозору да се не би затворио?" }, - "popupU2fCloseMessage": { - "message": "Овај прегледач не може да обрађује U2F захтеве у овом искачућем прозору. Да ли желите да отворите овај искачући прозор у новом прозору како бисте могли да се пријавите користећи U2F?" - }, - "enableFavicon": { - "message": "Прикажи иконе сајтова" - }, - "faviconDesc": { - "message": "Прикажи препознатљиву слику поред сваке ставке за пријаву." - }, - "faviconDescAlt": { - "message": "Приказује препознатљиву слику поред сваке пријаве. Важи за све пријављене налоге." - }, - "enableBadgeCounter": { - "message": "Прикажи бедж са бројачем" - }, - "badgeCounterDesc": { - "message": "Означи број пријава које се могу користити на тренутној Web страници." + "showIconsChangePasswordUrls": { + "message": "Прикажи иконе веб локација и преузмите линкове промене лозинке" }, "cardholderName": { "message": "Име Власника Картице" @@ -1829,6 +1864,9 @@ "securityCode": { "message": "Сигурносни код" }, + "cardNumber": { + "message": "број картице" + }, "ex": { "message": "нпр." }, @@ -1931,32 +1969,81 @@ "typeNote": { "message": "Белешка" }, - "newItemHeader": { - "message": "Нови $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderLogin": { + "message": "Ново пријављивање", + "description": "Header for new login item type" }, - "editItemHeader": { - "message": "Уреди $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderCard": { + "message": "Нова картица", + "description": "Header for new card item type" }, - "viewItemHeader": { - "message": "Видети $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderIdentity": { + "message": "Нови идентитет", + "description": "Header for new identity item type" + }, + "newItemHeaderNote": { + "message": "Нова белешка", + "description": "Header for new note item type" + }, + "newItemHeaderSshKey": { + "message": "Нов SSH кљич", + "description": "Header for new SSH key item type" + }, + "newItemHeaderTextSend": { + "message": "Нови текст Send", + "description": "Header for new text send" + }, + "newItemHeaderFileSend": { + "message": "Нова датотека Send", + "description": "Header for new file send" + }, + "editItemHeaderLogin": { + "message": "Уреди пријаву", + "description": "Header for edit login item type" + }, + "editItemHeaderCard": { + "message": "Уреди картицу", + "description": "Header for edit card item type" + }, + "editItemHeaderIdentity": { + "message": "Уреди идентитет", + "description": "Header for edit identity item type" + }, + "editItemHeaderNote": { + "message": "Уреди белешку", + "description": "Header for edit note item type" + }, + "editItemHeaderSshKey": { + "message": "Уреди SSH кључ", + "description": "Header for edit SSH key item type" + }, + "editItemHeaderTextSend": { + "message": "Уреди текст Send", + "description": "Header for edit text send" + }, + "editItemHeaderFileSend": { + "message": "Уреди датотеку Send", + "description": "Header for edit file send" + }, + "viewItemHeaderLogin": { + "message": "Преглед пријаве", + "description": "Header for view login item type" + }, + "viewItemHeaderCard": { + "message": "Преглед картице", + "description": "Header for view card item type" + }, + "viewItemHeaderIdentity": { + "message": "Преглед идентитета", + "description": "Header for view identity item type" + }, + "viewItemHeaderNote": { + "message": "Преглед белешке", + "description": "Header for view note item type" + }, + "viewItemHeaderSshKey": { + "message": "Преглед SSH кључа", + "description": "Header for view SSH key item type" }, "passwordHistory": { "message": "Историја Лозинке" @@ -2926,7 +3013,7 @@ "message": "Морате да потврдите е-пошту да бисте користили ову функцију. Можете да потврдите е-пошту у веб сефу." }, "masterPasswordSuccessfullySet": { - "message": "Master password successfully set" + "message": "Главна лозинка успешно постављена" }, "updatedMasterPassword": { "message": "Главна лозинка ажурирана" @@ -3129,6 +3216,24 @@ } } }, + "exportingOrganizationVaultFromPasswordManagerWithDataOwnershipDesc": { + "message": "Извешће се само сеф организације повезана са $ORGANIZATION$.", + "placeholders": { + "organization": { + "content": "$1", + "example": "My Org Name" + } + } + }, + "exportingOrganizationVaultFromAdminConsoleWithDataOwnershipDesc": { + "message": "Извешће се само сеф организације повезан са $ORGANIZATION$. Колекције мојих предмета неће бити укључене.", + "placeholders": { + "organization": { + "content": "$1", + "example": "My Org Name" + } + } + }, "error": { "message": "Грешка" }, @@ -3460,8 +3565,30 @@ "logInRequestSent": { "message": "Захтев је послат" }, + "loginRequestApprovedForEmailOnDevice": { + "message": "Захтев за пријаву одобрен за $EMAIL$ на $DEVICE$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + }, + "device": { + "content": "$2", + "example": "Web app - Chrome" + } + } + }, + "youDeniedLoginAttemptFromAnotherDevice": { + "message": "Одбили сте покушај пријаве са другог уређаја. Ако сте то били ви, покушајте поново да се пријавите помоћу уређаја." + }, + "device": { + "message": "Уређај" + }, + "loginStatus": { + "message": "Статус пријаве" + }, "masterPasswordChanged": { - "message": "Master password saved" + "message": "Главна лозинка сачувана" }, "exposedMasterPassword": { "message": "Изложена главна лозинка" @@ -3496,9 +3623,6 @@ "autofillPageLoadPolicyActivated": { "message": "Смернице ваше организације су укључиле ауто-пуњење при учитавању странице." }, - "howToAutofill": { - "message": "Како ауто-попуњавати" - }, "autofillSelectInfoWithCommand": { "message": "Изаберите ставку са овог екрана, користите пречицу $COMMAND$, или истражите друге опције у подешавањима.", "placeholders": { @@ -3556,6 +3680,94 @@ "rememberThisDeviceToMakeFutureLoginsSeamless": { "message": "Запамтити овај уређај да би будуће пријаве биле беспрекорне" }, + "manageDevices": { + "message": "Управљање уређајима" + }, + "currentSession": { + "message": "Тренутна сесија" + }, + "mobile": { + "message": "Мобилни", + "description": "Mobile app" + }, + "extension": { + "message": "Додатак", + "description": "Browser extension/addon" + }, + "desktop": { + "message": "Десктоп", + "description": "Desktop app" + }, + "webVault": { + "message": "Интернет Сеф" + }, + "webApp": { + "message": "Веб апликација" + }, + "cli": { + "message": "CLI" + }, + "sdk": { + "message": "SDK", + "description": "Software Development Kit" + }, + "requestPending": { + "message": "Захтев је на чекању" + }, + "firstLogin": { + "message": "Прва пријава" + }, + "trusted": { + "message": "Поуздан" + }, + "needsApproval": { + "message": "Потребно је одобрење" + }, + "devices": { + "message": "Уређаји" + }, + "accessAttemptBy": { + "message": "Покушај приступа са $EMAIL$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + } + } + }, + "confirmAccess": { + "message": "Потврди приступ" + }, + "denyAccess": { + "message": "Одбиј приступ" + }, + "time": { + "message": "Време" + }, + "deviceType": { + "message": "Тип уређаја" + }, + "loginRequest": { + "message": "Захтев за пријаву" + }, + "thisRequestIsNoLongerValid": { + "message": "Овај захтев више није важећи." + }, + "loginRequestHasAlreadyExpired": { + "message": "Захтев за пријаву је већ истекао." + }, + "justNow": { + "message": "Управо сада" + }, + "requestedXMinutesAgo": { + "message": "Затражено пре $MINUTES$ минута", + "placeholders": { + "minutes": { + "content": "$1", + "example": "5" + } + } + }, "deviceApprovalRequired": { "message": "Потребно је одобрење уређаја. Изаберите опцију одобрења испод:" }, @@ -3578,10 +3790,10 @@ "message": "Затражити одобрење администратора" }, "unableToCompleteLogin": { - "message": "Unable to complete login" + "message": "Није могуће завршити пријаву" }, "loginOnTrustedDeviceOrAskAdminToAssignPassword": { - "message": "You need to log in on a trusted device or ask your administrator to assign you a password." + "message": "Потребно је да се пријавите на поузданом уређају или да замолите администратора да вам додели лозинку." }, "ssoIdentifierRequired": { "message": "Потребан је SSO идентификатор организације." @@ -3663,7 +3875,7 @@ "message": "За сигурност вашег рачуна, наставите само ако сте члан ове организације, омогућили опоравак рачуна и отисак који се приказује испод одговара прстима организације." }, "orgTrustWarning1": { - "message": "This organization has an Enterprise policy that will enroll you in account recovery. Enrollment will allow organization administrators to change your password. Only proceed if you recognize this organization and the fingerprint phrase displayed below matches the organization's fingerprint." + "message": "Ова организација има политику за предузећа која ће вас уписати у опоравак налога. Упис ће омогућити администраторима организације да промене вашу лозинку. Наставите само ако препознајете ову организацију и ако се фраза отиска приказана испод поклапа са отиском организације." }, "trustUser": { "message": "Повери кориснику" @@ -3795,18 +4007,10 @@ "aliasDomain": { "message": "Домен алијаса" }, - "passwordRepromptDisabledAutofillOnPageLoad": { - "message": "Ставке са упитом за поновно постављање главне лозинке не могу се ауто-попунити при учитавању странице. Ауто-попуњавање при учитавању странице је искључено.", - "description": "Toast message for describing that master password re-prompt cannot be autofilled on page load." - }, "autofillOnPageLoadSetToDefault": { "message": "Ауто-попуњавање при учитавању странице је подешено да користи подразумевано подешавање.", "description": "Toast message for informing the user that autofill on page load has been set to the default setting." }, - "turnOffMasterPasswordPromptToEditField": { - "message": "Искључите поновни упит главне лозинке да бисте уредили ово поље", - "description": "Message appearing below the autofill on load message when master password reprompt is set for a vault item." - }, "toggleSideNavigation": { "message": "Укључите бочну навигацију" }, @@ -4015,15 +4219,11 @@ "selectImportCollection": { "message": "Изабери колекцију" }, - "importTargetHint": { - "message": "Изаберите ову опцију ако желите да се садржај увезене датотеке премести у $DESTINATION$", - "description": "Located as a hint under the import target. Will be appended by either folder or collection, depending if the user is importing into an individual or an organizational vault.", - "placeholders": { - "destination": { - "content": "$1", - "example": "folder or collection" - } - } + "importTargetHintCollection": { + "message": "Изаберите ову опцију ако желите да се садржај увезене датотеке пребацио у колекцију" + }, + "importTargetHintFolder": { + "message": "Изаберите ову опцију ако желите да се садржај увезене датотеке пребацио у фасцикли" }, "importUnassignedItemsError": { "message": "Датотека садржи недодељене ставке." @@ -4080,9 +4280,6 @@ "passkeyNotCopiedAlert": { "message": "Приступни кључ неће бити копиран на клонирану ставку. Да ли желите да наставите са клонирањем ставке?" }, - "passkeyFeatureIsNotImplementedForAccountsWithoutMasterPassword": { - "message": "Верификацију захтева сајт који покреће. Ова функција још увек није имплементирана за налоге без главне лозинке." - }, "logInWithPasskeyQuestion": { "message": "Пријавите се са приступним кључем?" }, @@ -4263,23 +4460,23 @@ "description": "Label indicating the most common import formats" }, "uriMatchDefaultStrategyHint": { - "message": "URI match detection is how Bitwarden identifies autofill suggestions.", + "message": "Детекција подударања URI-ја је начин на који Bitwarden идентификује предлоге за ауто-попуњавање.", "description": "Explains to the user that URI match detection determines how Bitwarden suggests autofill options, and clarifies that this default strategy applies when no specific match detection is set for a login item." }, "regExAdvancedOptionWarning": { - "message": "\"Regular expression\" is an advanced option with increased risk of exposing credentials.", + "message": "„Регуларни израз“ је напредна опција са повећаним ризиком од откривања акредитива.", "description": "Content for dialog which warns a user when selecting 'regular expression' matching strategy as a cipher match strategy" }, "startsWithAdvancedOptionWarning": { - "message": "\"Starts with\" is an advanced option with increased risk of exposing credentials.", + "message": "„Почни са“ је напредна опција са повећаним ризиком од откривања акредитива.", "description": "Content for dialog which warns a user when selecting 'starts with' matching strategy as a cipher match strategy" }, "uriMatchWarningDialogLink": { - "message": "More about match detection", + "message": "Више о откривању подударања", "description": "Link to match detection docs on warning dialog for advance match strategy" }, "uriAdvancedOption": { - "message": "Advanced options", + "message": "Напредне опције", "description": "Advanced option placeholder for uri option component" }, "confirmContinueToBrowserSettingsTitle": { @@ -4465,17 +4662,17 @@ } } }, - "copyFieldValue": { - "message": "Копирај $FIELD$, $VALUE$", + "copyFieldCipherName": { + "message": "Копирај $FIELD$, $CIPHERNAME$", "description": "Title for a button that copies a field value to the clipboard.", "placeholders": { "field": { "content": "$1", "example": "Username" }, - "value": { + "ciphername": { "content": "$2", - "example": "Foo" + "example": "Login Item" } } }, @@ -4768,9 +4965,6 @@ } } }, - "enableAnimations": { - "message": "Омогући анимације" - }, "showAnimations": { "message": "Прикажи анимације" }, @@ -4983,15 +5177,9 @@ "itemLocation": { "message": "Смештај ставке" }, - "fileSend": { - "message": "Датотека „Send“" - }, "fileSends": { "message": "Датотека „Send“" }, - "textSend": { - "message": "Текст „Send“" - }, "textSends": { "message": "Текст „Send“" }, @@ -5001,6 +5189,18 @@ "showNumberOfAutofillSuggestions": { "message": "Прикажи број предлога за ауто-попуњавање пријаве на икони додатка" }, + "accountAccessRequested": { + "message": "Приступ рачуна је затражен" + }, + "confirmAccessAttempt": { + "message": "Потврдити приступ за $EMAIL$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + } + } + }, "showQuickCopyActions": { "message": "Приказати брзе радње копирања у Сефу" }, @@ -5040,9 +5240,6 @@ "vaultCustomTimeoutMinimum": { "message": "Минимално прилагођено временско ограничење је 1 минут." }, - "additionalContentAvailable": { - "message": "Додатни садржај је доступан" - }, "fileSavedToDevice": { "message": "Датотека је сачувана на уређају. Управљајте преузимањима са свог уређаја." }, @@ -5328,6 +5525,12 @@ "changeAtRiskPassword": { "message": "Променити ризичну лозинку" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "Ова пријава је ризична и недостаје веб локација. Додајте веб страницу и промените лозинку за јачу сигурност." + }, + "missingWebsite": { + "message": "Недостаје веб страница" + }, "settingsVaultOptions": { "message": "Опције сефа" }, @@ -5376,6 +5579,18 @@ "hasItemsVaultNudgeTitle": { "message": "Добродошли у ваш сеф!" }, + "phishingPageTitle": { + "message": "Пронађен злонамеран сајт" + }, + "phishingPageCloseTab": { + "message": "Затвори језичак" + }, + "phishingPageContinue": { + "message": "Настави" + }, + "phishingPageLearnWhy": { + "message": "Зашто видите ово?" + }, "hasItemsVaultNudgeBodyOne": { "message": "Ауто-пуњење предмета за тренутну страницу" }, @@ -5404,7 +5619,7 @@ "example": "Include a Website so this login appears as an autofill suggestion." }, "newCardNudgeTitle": { - "message": "Seamless online checkout" + "message": "Лако онлајн плачање" }, "newCardNudgeBody": { "message": "Са картицама, лако и сигурносно попуните формуларе за плаћање." @@ -5451,11 +5666,33 @@ "message": "Лако креирајте снажне и јединствене лозинке кликом на дугме „Генерирате лозинку“ да вам помогне да чувате своје пријаве на сигурно.", "description": "Aria label for the body content of the generator nudge" }, + "aboutThisSetting": { + "message": "О овом подешавању" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden ће користити сачуване URI-јеве за пријаву да би одредио коју икону или URL за промену лозинке треба користити како би побољшао ваше искуство. Никакви подаци нису сакупљени нити сачувани приликом коришћења ове услуге." + }, "noPermissionsViewPage": { "message": "Немате дозволе за преглед ове странице. Покушајте да се пријавите са другим налогом." }, "wasmNotSupported": { "message": "WebAssembly није подржано или није уапљено на вашем прегледачу. WebAssembly је потребно да би се користила апликација Bitwarden.", "description": "'WebAssembly' is a technical term and should not be translated." + }, + "showMore": { + "message": "Прикажи више" + }, + "showLess": { + "message": "Прикажи мање" + }, + "next": { + "message": "Следеће" + }, + "moreBreadcrumbs": { + "message": "Више мрвица", + "description": "This is used in the context of a breadcrumb navigation, indicating that there are more items in the breadcrumb trail that are not currently displayed." + }, + "confirmKeyConnectorDomain": { + "message": "Потврдите домен конектора кључа" } } diff --git a/apps/browser/src/_locales/sv/messages.json b/apps/browser/src/_locales/sv/messages.json index 315cafd7ed7..5976deb4200 100644 --- a/apps/browser/src/_locales/sv/messages.json +++ b/apps/browser/src/_locales/sv/messages.json @@ -547,12 +547,50 @@ "searchVault": { "message": "Sök i valvet" }, + "resetSearch": { + "message": "Nollställ sökning" + }, + "archiveNoun": { + "message": "Arkiv", + "description": "Noun" + }, + "archiveVerb": { + "message": "Arkivera", + "description": "Verb" + }, + "unarchive": { + "message": "Packa upp" + }, + "itemsInArchive": { + "message": "Objekt i arkiv" + }, + "noItemsInArchive": { + "message": "Inga objekt i arkivet" + }, + "noItemsInArchiveDesc": { + "message": "Arkiverade objekt kommer att visas här och kommer att uteslutas från allmänna sökresultat och förslag för autofyll." + }, + "itemSentToArchive": { + "message": "Objekt skickat till arkiv" + }, + "itemRemovedFromArchive": { + "message": "Objekt borttaget från arkiv" + }, + "archiveItem": { + "message": "Arkivera objekt" + }, + "archiveItemConfirmDesc": { + "message": "Arkiverade objekt är exkluderade från allmänna sökresultat och förslag för autofyll. Är du säker på att du vill arkivera detta objekt?" + }, "edit": { "message": "Redigera" }, "view": { "message": "Visa" }, + "viewLogin": { + "message": "Visa inloggning" + }, "noItemsInList": { "message": "Det finns inga objekt att visa." }, @@ -695,6 +733,15 @@ "invalidMasterPassword": { "message": "Ogiltigt huvudlösenord" }, + "invalidMasterPasswordConfirmEmailAndHost": { + "message": "Ogiltigt huvudlösenord. Bekräfta att din e-postadress är korrekt och ditt konto skapades på $HOST$.", + "placeholders": { + "host": { + "content": "$1", + "example": "vault.bitwarden.com" + } + } + }, "vaultTimeout": { "message": "Valvets tidsgräns" }, @@ -1501,6 +1548,15 @@ "readSecurityKey": { "message": "Läs säkerhetsnyckel" }, + "readingPasskeyLoading": { + "message": "Läser inloggningsnyckel..." + }, + "passkeyAuthenticationFailed": { + "message": "Autentisering med inloggningsnyckel misslyckades" + }, + "useADifferentLogInMethod": { + "message": "Använd en annan inloggningsmetod" + }, "awaitingSecurityKeyInteraction": { "message": "Väntar på interaktion med säkerhetsnyckel..." }, @@ -1519,9 +1575,6 @@ "selectTwoStepLoginMethod": { "message": "Välj metod för tvåstegsverifiering" }, - "recoveryCodeDesc": { - "message": "Förlorat åtkomst till alla dina metoder för tvåstegsverifiering? Använd din återställningskod för att inaktivera tvåstegsverifiering på ditt konto." - }, "recoveryCodeTitle": { "message": "Återställningskod" }, @@ -1680,9 +1733,6 @@ "defaultAutoFillOnPageLoadDesc": { "message": "Efter att du har aktiverat automatisk ifyllnad vid sidhämtning kan du aktivera eller inaktivera funktionen för enskilda inloggningsobjekt. Detta är standardinställningen för inloggningsobjekt som inte är konfigurerade separat." }, - "itemAutoFillOnPageLoad": { - "message": "Automatisk ifyllning vid sidhämtning (om aktiverat i Alternativ)" - }, "autoFillOnPageLoadUseDefault": { "message": "Använd standardinställningen" }, @@ -1754,23 +1804,8 @@ "popup2faCloseMessage": { "message": "Om du klickar utanför popup-fönstret för att kontrollera din email efter din verifieringskod så stängs popup-fönstret. Vill du öppna popup-fönstret i ett nytt fönster, så att det inte stängs?" }, - "popupU2fCloseMessage": { - "message": "Den här webbläsaren kan inte bearbeta U2F-förfrågningar i detta popup-fönster. Vill du öppna ett nytt fönster så att du kan logga in med U2F?" - }, - "enableFavicon": { - "message": "Visa webbplatsikoner" - }, - "faviconDesc": { - "message": "Visa en identifierbar bild bredvid varje inloggning." - }, - "faviconDescAlt": { - "message": "Visa en igenkännbar bild bredvid varje inloggning. Gäller för alla inloggade konton." - }, - "enableBadgeCounter": { - "message": "Visa aktivitetsräknaren" - }, - "badgeCounterDesc": { - "message": "Visa hur många inloggningar du har för den aktuella webbsidan." + "showIconsChangePasswordUrls": { + "message": "Visa webbplatsikoner och URLer för lösenordsändringar" }, "cardholderName": { "message": "Kortinnehavarens namn" @@ -1829,6 +1864,9 @@ "securityCode": { "message": "Säkerhetskod" }, + "cardNumber": { + "message": "kortnummer" + }, "ex": { "message": "t. ex." }, @@ -1931,32 +1969,81 @@ "typeNote": { "message": "Anteckning" }, - "newItemHeader": { - "message": "Ny $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderLogin": { + "message": "Ny inloggning", + "description": "Header for new login item type" }, - "editItemHeader": { - "message": "Redigera $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderCard": { + "message": "Nytt kort", + "description": "Header for new card item type" }, - "viewItemHeader": { - "message": "Visa $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderIdentity": { + "message": "Ny identitet", + "description": "Header for new identity item type" + }, + "newItemHeaderNote": { + "message": "Ny anteckning", + "description": "Header for new note item type" + }, + "newItemHeaderSshKey": { + "message": "Ny SSH-nyckel", + "description": "Header for new SSH key item type" + }, + "newItemHeaderTextSend": { + "message": "Ny textsändning", + "description": "Header for new text send" + }, + "newItemHeaderFileSend": { + "message": "Ny filsändning", + "description": "Header for new file send" + }, + "editItemHeaderLogin": { + "message": "Redigera inloggning", + "description": "Header for edit login item type" + }, + "editItemHeaderCard": { + "message": "Redigera kort", + "description": "Header for edit card item type" + }, + "editItemHeaderIdentity": { + "message": "Redigera identitet", + "description": "Header for edit identity item type" + }, + "editItemHeaderNote": { + "message": "Redigera anteckning", + "description": "Header for edit note item type" + }, + "editItemHeaderSshKey": { + "message": "Redigera SSH-nyckel", + "description": "Header for edit SSH key item type" + }, + "editItemHeaderTextSend": { + "message": "Redigera textsändning", + "description": "Header for edit text send" + }, + "editItemHeaderFileSend": { + "message": "Redigera filsändning", + "description": "Header for edit file send" + }, + "viewItemHeaderLogin": { + "message": "Visa inloggning", + "description": "Header for view login item type" + }, + "viewItemHeaderCard": { + "message": "Visa kort", + "description": "Header for view card item type" + }, + "viewItemHeaderIdentity": { + "message": "Visa identitet", + "description": "Header for view identity item type" + }, + "viewItemHeaderNote": { + "message": "Visa anteckning", + "description": "Header for view note item type" + }, + "viewItemHeaderSshKey": { + "message": "Visa SSH-nyckel", + "description": "Header for view SSH key item type" }, "passwordHistory": { "message": "Lösenordshistorik" @@ -3129,6 +3216,24 @@ } } }, + "exportingOrganizationVaultFromPasswordManagerWithDataOwnershipDesc": { + "message": "Endast organisationsvalvet som är associerat med $ORGANIZATION$ kommer att exporteras.", + "placeholders": { + "organization": { + "content": "$1", + "example": "My Org Name" + } + } + }, + "exportingOrganizationVaultFromAdminConsoleWithDataOwnershipDesc": { + "message": "Endast organisationsvalvet som associeras med $ORGANIZATION$ kommer att exporteras. Mina objektsamlingar kommer inte att inkluderas.", + "placeholders": { + "organization": { + "content": "$1", + "example": "My Org Name" + } + } + }, "error": { "message": "Fel" }, @@ -3460,6 +3565,28 @@ "logInRequestSent": { "message": "Begäran skickad" }, + "loginRequestApprovedForEmailOnDevice": { + "message": "Inloggningsbegäran godkänd för $EMAIL$ på $DEVICE$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + }, + "device": { + "content": "$2", + "example": "Web app - Chrome" + } + } + }, + "youDeniedLoginAttemptFromAnotherDevice": { + "message": "Du nekade ett inloggningsförsök från en annan enhet. Om det var du, försök att logga in med enheten igen." + }, + "device": { + "message": "Enhet" + }, + "loginStatus": { + "message": "Inloggningsstatus" + }, "masterPasswordChanged": { "message": "Huvudlösenordet sparades" }, @@ -3496,9 +3623,6 @@ "autofillPageLoadPolicyActivated": { "message": "Dina organisationspolicyer har aktiverat automatisk ifyllnad vid sidladdning." }, - "howToAutofill": { - "message": "Hur du fyller i automatiskt" - }, "autofillSelectInfoWithCommand": { "message": "Välj ett objekt från den här skärmen, använd genvägen $COMMAND$ eller utforska andra alternativ i inställningarna.", "placeholders": { @@ -3556,6 +3680,94 @@ "rememberThisDeviceToMakeFutureLoginsSeamless": { "message": "Kom ihåg den här enheten för att göra framtida inloggningar smidiga" }, + "manageDevices": { + "message": "Hantera enheter" + }, + "currentSession": { + "message": "Aktuell session" + }, + "mobile": { + "message": "Mobil", + "description": "Mobile app" + }, + "extension": { + "message": "Tillägg", + "description": "Browser extension/addon" + }, + "desktop": { + "message": "Skrivbord", + "description": "Desktop app" + }, + "webVault": { + "message": "Webbvalv" + }, + "webApp": { + "message": "Webbapp" + }, + "cli": { + "message": "CLI" + }, + "sdk": { + "message": "SDK", + "description": "Software Development Kit" + }, + "requestPending": { + "message": "Förfrågning väntar" + }, + "firstLogin": { + "message": "Första inloggningen" + }, + "trusted": { + "message": "Betrodd" + }, + "needsApproval": { + "message": "Kräver godkännande" + }, + "devices": { + "message": "Enheter" + }, + "accessAttemptBy": { + "message": "Åtkomstförsök av $EMAIL$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + } + } + }, + "confirmAccess": { + "message": "Bekräfta åtkomst" + }, + "denyAccess": { + "message": "Neka åtkomst" + }, + "time": { + "message": "Tid" + }, + "deviceType": { + "message": "Enhetstyp" + }, + "loginRequest": { + "message": "Begäran om inloggning" + }, + "thisRequestIsNoLongerValid": { + "message": "Denna begäran är inte längre giltig." + }, + "loginRequestHasAlreadyExpired": { + "message": "Inloggningsbegäran har redan gått ut." + }, + "justNow": { + "message": "Just nu" + }, + "requestedXMinutesAgo": { + "message": "Begärdes för $MINUTES$ minuter sedan", + "placeholders": { + "minutes": { + "content": "$1", + "example": "5" + } + } + }, "deviceApprovalRequired": { "message": "Godkännande av enhet krävs. Välj ett alternativ för godkännande nedan:" }, @@ -3795,18 +4007,10 @@ "aliasDomain": { "message": "Aliasdomän" }, - "passwordRepromptDisabledAutofillOnPageLoad": { - "message": "Objekt med \"Återupprepa huvudlösenord\" kan inte fyllas i automatiskt vid sidladdning. Automatisk ifyllning vid sidladdning avstängd.", - "description": "Toast message for describing that master password re-prompt cannot be autofilled on page load." - }, "autofillOnPageLoadSetToDefault": { "message": "Aktivera automatisk ifyllnad vid sidhämtning sattes till att använda standardinställningen.", "description": "Toast message for informing the user that autofill on page load has been set to the default setting." }, - "turnOffMasterPasswordPromptToEditField": { - "message": "Stäng av \"återupprepa huvudlösenord\" för att redigera detta fält", - "description": "Message appearing below the autofill on load message when master password reprompt is set for a vault item." - }, "toggleSideNavigation": { "message": "Växla sidonavigering" }, @@ -4015,15 +4219,11 @@ "selectImportCollection": { "message": "Välj en samling" }, - "importTargetHint": { - "message": "Välj det här alternativet om du vill att innehållet i den importerade filen ska flyttas till en $DESTINATION$", - "description": "Located as a hint under the import target. Will be appended by either folder or collection, depending if the user is importing into an individual or an organizational vault.", - "placeholders": { - "destination": { - "content": "$1", - "example": "folder or collection" - } - } + "importTargetHintCollection": { + "message": "Välj detta alternativ om du vill att innehållet i den importerade filen ska flyttas till en samling" + }, + "importTargetHintFolder": { + "message": "Välj detta alternativ om du vill att innehållet i den importerade filen ska flyttas till en mapp" }, "importUnassignedItemsError": { "message": "Filen innehåller otilldelade objekt." @@ -4069,25 +4269,22 @@ "message": "Nyckel" }, "accessing": { - "message": "Åtkomst" + "message": "Åtkomst via" }, "loggedInExclamation": { "message": "Inloggad!" }, "passkeyNotCopied": { - "message": "Lösennyckeln kommer inte kopieras" + "message": "Inloggningsnyckeln kommer inte kopieras" }, "passkeyNotCopiedAlert": { - "message": "Lösennyckeln kommer inte att kopieras till det klonade objektet. Vill du fortsätta klona det här objektet?" - }, - "passkeyFeatureIsNotImplementedForAccountsWithoutMasterPassword": { - "message": "Verifiering krävs av den initierande webbplatsen. Denna funktion är ännu inte implementerad för konton utan huvudlösenord." + "message": "Inloggningsnyckeln kommer inte att kopieras till det klonade objektet. Vill du fortsätta klona det här objektet?" }, "logInWithPasskeyQuestion": { "message": "Logga in med nyckel?" }, "passkeyAlreadyExists": { - "message": "En lösennyckel finns redan för detta program." + "message": "En inloggningsnyckel finns redan för detta program." }, "noPasskeysFoundForThisApplication": { "message": "Inga lösennycklar hittades för detta program." @@ -4111,25 +4308,25 @@ "message": "Spara nyckel som ny inloggning" }, "chooseCipherForPasskeySave": { - "message": "Välj en inloggning som du vill spara nyckeln till" + "message": "Välj en inloggning som du vill spara inloggningsnyckeln till" }, "chooseCipherForPasskeyAuth": { - "message": "Välj en lösenordskod att logga in med" + "message": "Välj en inloggningsnyckel att logga in med" }, "passkeyItem": { - "message": "Lösennyckelobjekt" + "message": "Inloggningsnyckelsobjekt" }, "overwritePasskey": { - "message": "Skriv över lösennyckel?" + "message": "Skriv över inloggningsnyckel?" }, "overwritePasskeyAlert": { - "message": "Detta objekt innehåller redan en lösennyckel. Är du säker på att du vill skriva över nuvarande lösennyckeln?" + "message": "Detta objekt innehåller redan en inloggningsnyckel. Är du säker på att du vill skriva över nuvarande inloggningsnyckel?" }, "featureNotSupported": { "message": "Funktionen stöds ännu inte" }, "yourPasskeyIsLocked": { - "message": "Autentisering krävs för att använda lösennyckel. Verifiera din identitet för att fortsätta." + "message": "Autentisering krävs för att använda inloggningsnyckel. Verifiera din identitet för att fortsätta." }, "multifactorAuthenticationCancelled": { "message": "Flerfaktorsautentisering avbruten" @@ -4354,10 +4551,10 @@ "message": "Lyckades" }, "removePasskey": { - "message": "Ta bort passkey" + "message": "Ta bort inloggningsnyckel" }, "passkeyRemoved": { - "message": "Passkey borttagen" + "message": "Inloggningsnyckel borttagen" }, "autofillSuggestions": { "message": "Förslag för autofyll" @@ -4465,17 +4662,17 @@ } } }, - "copyFieldValue": { - "message": "Kopiera $FIELD$, $VALUE$", + "copyFieldCipherName": { + "message": "Kopiera $FIELD$, $CIPHERNAME$", "description": "Title for a button that copies a field value to the clipboard.", "placeholders": { "field": { "content": "$1", "example": "Username" }, - "value": { + "ciphername": { "content": "$2", - "example": "Foo" + "example": "Login Item" } } }, @@ -4768,9 +4965,6 @@ } } }, - "enableAnimations": { - "message": "Aktivera animationer" - }, "showAnimations": { "message": "Visa animationer" }, @@ -4983,15 +5177,9 @@ "itemLocation": { "message": "Föremålets placering" }, - "fileSend": { - "message": "Skicka fil" - }, "fileSends": { "message": "Skicka filer" }, - "textSend": { - "message": "Skicka text" - }, "textSends": { "message": "Text skickas" }, @@ -5001,6 +5189,18 @@ "showNumberOfAutofillSuggestions": { "message": "Visa antal autofyllförslag för inloggning på tilläggsikonen" }, + "accountAccessRequested": { + "message": "Begäran om åtkomst till konto" + }, + "confirmAccessAttempt": { + "message": "Bekräfta åtkomstförsök för $EMAIL$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + } + } + }, "showQuickCopyActions": { "message": "Visa snabbkopieringsåtgärder på Vault" }, @@ -5040,9 +5240,6 @@ "vaultCustomTimeoutMinimum": { "message": "Minsta anpassade timeout är 1 minut." }, - "additionalContentAvailable": { - "message": "Ytterligare innehåll är tillgängligt" - }, "fileSavedToDevice": { "message": "Fil sparad till enhet. Hantera nedladdningar från din enhet." }, @@ -5328,6 +5525,12 @@ "changeAtRiskPassword": { "message": "Ändra lösenord för riskgrupper" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "Denna inloggning är utsatt för risk och saknar en webbplats. Lägg till en webbplats och ändra lösenordet för ökad säkerhet." + }, + "missingWebsite": { + "message": "Saknar webbplats" + }, "settingsVaultOptions": { "message": "Alternativ för valv" }, @@ -5376,6 +5579,18 @@ "hasItemsVaultNudgeTitle": { "message": "Välkommen till ditt valv!" }, + "phishingPageTitle": { + "message": "Webbsida för nätfiske" + }, + "phishingPageCloseTab": { + "message": "Stäng flik" + }, + "phishingPageContinue": { + "message": "Fortsätt" + }, + "phishingPageLearnWhy": { + "message": "Varför ser du detta?" + }, "hasItemsVaultNudgeBodyOne": { "message": "Autofyll objekt för den aktuella sidan" }, @@ -5451,11 +5666,33 @@ "message": "Skapa enkelt starka och unika lösenord genom att klicka på knappen Generera lösenord så att du kan hålla dina inloggningar säkra.", "description": "Aria label for the body content of the generator nudge" }, + "aboutThisSetting": { + "message": "Om denna inställning" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden använder sparade inloggnings-URI: er för att identifiera vilken ikon eller URL för lösenordsändring som ska användas för att förbättra din upplevelse. Ingen information samlas in eller sparas när du använder denna tjänst." + }, "noPermissionsViewPage": { "message": "Du har inte behörighet att visa den här sidan. Försök att logga in med ett annat konto." }, "wasmNotSupported": { "message": "WebAssembly stöds inte av din webbläsare eller är inte aktiverat. WebAssembly krävs för att använda Bitwarden-appen.", "description": "'WebAssembly' is a technical term and should not be translated." + }, + "showMore": { + "message": "Visa mer" + }, + "showLess": { + "message": "Visa mindre" + }, + "next": { + "message": "Nästa" + }, + "moreBreadcrumbs": { + "message": "Fler länkstigar", + "description": "This is used in the context of a breadcrumb navigation, indicating that there are more items in the breadcrumb trail that are not currently displayed." + }, + "confirmKeyConnectorDomain": { + "message": "Bekräfta Key Connector-domän" } } diff --git a/apps/browser/src/_locales/ta/messages.json b/apps/browser/src/_locales/ta/messages.json new file mode 100644 index 00000000000..e0a64ab13d1 --- /dev/null +++ b/apps/browser/src/_locales/ta/messages.json @@ -0,0 +1,5698 @@ +{ + "appName": { + "message": "Bitwarden" + }, + "appLogoLabel": { + "message": "Bitwarden லோகோ" + }, + "extName": { + "message": "Bitwarden கடவுச்சொல் மேலாளர்", + "description": "Extension name, MUST be less than 40 characters (Safari restriction)" + }, + "extDesc": { + "message": "வீட்டிலோ, வேலையிலோ, பயணத்திலோ, Bitwarden உங்கள் கடவுச்சொற்கள் மற்றும் முக்கிய தகவல்களை எளிதாகப் பாதுகாக்கிறது", + "description": "Extension description, MUST be less than 112 characters (Safari restriction)" + }, + "loginOrCreateNewAccount": { + "message": "உங்கள் பாதுகாப்பான வால்ட்டை அணுக, உள்நுழையவும் அல்லது புதிய கணக்கை உருவாக்கவும்." + }, + "inviteAccepted": { + "message": "அழைப்பு ஏற்கப்பட்டது" + }, + "createAccount": { + "message": "கணக்கை உருவாக்கவும்" + }, + "newToBitwarden": { + "message": "Bitwarden-க்கு புதியவரா?" + }, + "logInWithPasskey": { + "message": "பாஸ்கீயுடன் உள்நுழையவும்" + }, + "useSingleSignOn": { + "message": "ஒற்றை உள்நுழைவைப் பயன்படுத்தவும்" + }, + "welcomeBack": { + "message": "மீண்டும் வருக" + }, + "setAStrongPassword": { + "message": "ஒரு வலிமையான கடவுச்சொல்லை அமைக்கவும்" + }, + "finishCreatingYourAccountBySettingAPassword": { + "message": "கடவுச்சொல்லை அமைப்பதன் மூலம் உங்கள் கணக்கை உருவாக்குவதை முடிக்கவும்" + }, + "enterpriseSingleSignOn": { + "message": "என்டர்பிரைஸ் ஒற்றை உள்நுழைவு" + }, + "cancel": { + "message": "ரத்துசெய்" + }, + "close": { + "message": "மூடு" + }, + "submit": { + "message": "சமர்ப்பி" + }, + "emailAddress": { + "message": "மின்னஞ்சல் முகவரி" + }, + "masterPass": { + "message": "முதன்மை கடவுச்சொல்" + }, + "masterPassDesc": { + "message": "முதன்மை கடவுச்சொல் என்பது உங்கள் வால்ட்டை அணுக நீங்கள் பயன்படுத்தும் கடவுச்சொல் ஆகும். உங்கள் முதன்மை கடவுச்சொல்லை மறக்காமல் இருப்பது மிகவும் முக்கியம். அதை நீங்கள் மறந்துவிட்டால், அதை மீட்டெடுக்க வழி இல்லை." + }, + "masterPassHintDesc": { + "message": "உங்கள் முதன்மை கடவுச்சொல்லை மறந்துவிட்டால், அதை நினைவில் வைத்துக்கொள்ள முதன்மை கடவுச்சொல் குறிப்பு உதவும்." + }, + "masterPassHintText": { + "message": "உங்கள் கடவுச்சொல்லை மறந்துவிட்டால், கடவுச்சொல் குறிப்பு உங்கள் மின்னஞ்சலுக்கு அனுப்பப்படலாம். $CURRENT$/$MAXIMUM$ எழுத்து அதிகபட்சம்.", + "placeholders": { + "current": { + "content": "$1", + "example": "0" + }, + "maximum": { + "content": "$2", + "example": "50" + } + } + }, + "reTypeMasterPass": { + "message": "முதன்மை கடவுச்சொல்லை மீண்டும் தட்டச்சு செய்யவும்" + }, + "masterPassHint": { + "message": "முதன்மை கடவுச்சொல் குறிப்பு (விரும்பினால்)" + }, + "passwordStrengthScore": { + "message": "கடவுச்சொல் வலிமை மதிப்பெண் $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, + "joinOrganization": { + "message": "நிறுவனத்தில் சேர்" + }, + "joinOrganizationName": { + "message": "$ORGANIZATIONNAME$ இல் சேரவும்", + "placeholders": { + "organizationName": { + "content": "$1", + "example": "My Org Name" + } + } + }, + "finishJoiningThisOrganizationBySettingAMasterPassword": { + "message": "ஒரு முதன்மை கடவுச்சொல்லை அமைப்பதன் மூலம் இந்த நிறுவனத்தில் இணைவதை முடிக்கவும்." + }, + "tab": { + "message": "தாவல்" + }, + "vault": { + "message": "வால்ட்" + }, + "myVault": { + "message": "எனது வால்ட்" + }, + "allVaults": { + "message": "அனைத்து வால்ட்களும்" + }, + "tools": { + "message": "கருவிகள்" + }, + "settings": { + "message": "அமைப்புகள்" + }, + "currentTab": { + "message": "தற்போதைய தாவல்" + }, + "copyPassword": { + "message": "கடவுச்சொல்லை நகலெடு" + }, + "copyPassphrase": { + "message": "கடவுச்சொல் சொற்றொடரை நகலெடு" + }, + "copyNote": { + "message": "குறிப்பை நகலெடு" + }, + "copyUri": { + "message": "URI-ஐ நகலெடு" + }, + "copyUsername": { + "message": "பயனர்பெயரை நகலெடு" + }, + "copyNumber": { + "message": "எண்ணை நகலெடு" + }, + "copySecurityCode": { + "message": "பாதுகாப்பு குறியீட்டை நகலெடு" + }, + "copyName": { + "message": "பெயரை நகலெடு" + }, + "copyCompany": { + "message": "நிறுவனத்தை நகலெடு" + }, + "copySSN": { + "message": "சமூகப் பாதுகாப்பு எண்ணை நகலெடு" + }, + "copyPassportNumber": { + "message": "பாஸ்போர்ட் எண்ணை நகலெடு" + }, + "copyLicenseNumber": { + "message": "உரிமம் எண்ணை நகலெடு" + }, + "copyPrivateKey": { + "message": "தனிப்பட்ட விசையை நகலெடு" + }, + "copyPublicKey": { + "message": "பொது விசையை நகலெடு" + }, + "copyFingerprint": { + "message": "கைரேகையை நகலெடு" + }, + "copyCustomField": { + "message": "$FIELD$-ஐ நகலெடு", + "placeholders": { + "field": { + "content": "$1", + "example": "Custom field label" + } + } + }, + "copyWebsite": { + "message": "வலைத்தளத்தை நகலெடு" + }, + "copyNotes": { + "message": "குறிப்புகளை நகலெடு" + }, + "copy": { + "message": "நகலெடு", + "description": "Copy to clipboard" + }, + "fill": { + "message": "நிரப்பு", + "description": "This string is used on the vault page to indicate autofilling. Horizontal space is limited in the interface here so try and keep translations as concise as possible." + }, + "autoFill": { + "message": "தானாக நிரப்பு" + }, + "autoFillLogin": { + "message": "உள்நுழைவை தானாக நிரப்பு" + }, + "autoFillCard": { + "message": "அட்டையைத் தானாக நிரப்பு" + }, + "autoFillIdentity": { + "message": "அடையாளத்தைத் தானாக நிரப்பு" + }, + "fillVerificationCode": { + "message": "சரிபார்ப்புக் குறியீட்டை நிரப்பு" + }, + "fillVerificationCodeAria": { + "message": "சரிபார்ப்புக் குறியீட்டை நிரப்பு", + "description": "Aria label for the heading displayed the inline menu for totp code autofill" + }, + "generatePasswordCopied": { + "message": "கடவுச்சொல்லை உருவாக்கு (நகலெடுக்கப்பட்டது)" + }, + "copyElementIdentifier": { + "message": "விருப்பப்பட்ட புல பெயரை நகலெடு" + }, + "noMatchingLogins": { + "message": "பொருந்தும் உள்நுழைவுகள் இல்லை" + }, + "noCards": { + "message": "அட்டைகள் இல்லை" + }, + "noIdentities": { + "message": "அடையாளங்கள் இல்லை" + }, + "addLoginMenu": { + "message": "உள்நுழைவைச் சேர்" + }, + "addCardMenu": { + "message": "அட்டையைச் சேர்" + }, + "addIdentityMenu": { + "message": "அடையாளத்தைச் சேர்" + }, + "unlockVaultMenu": { + "message": "உங்கள் வால்ட்டைத் திறக்கவும்" + }, + "loginToVaultMenu": { + "message": "உங்கள் வால்ட்டில் உள்நுழையவும்" + }, + "autoFillInfo": { + "message": "தற்போதைய உலாவியில் தானாக நிரப்புவதற்கு உள்நுழைவுகள் எதுவும் இல்லை." + }, + "addLogin": { + "message": "ஒரு உள்நுழைவைச் சேர்" + }, + "addItem": { + "message": "உருப்படியைச் சேர்" + }, + "accountEmail": { + "message": "கணக்கு மின்னஞ்சல்" + }, + "requestHint": { + "message": "குறிப்பைக் கோரு" + }, + "requestPasswordHint": { + "message": "கடவுச்சொல் குறிப்பைக் கோரு" + }, + "enterYourAccountEmailAddressAndYourPasswordHintWillBeSentToYou": { + "message": "உங்கள் கணக்கு மின்னஞ்சல் முகவரியை உள்ளிடவும், உங்கள் கடவுச்சொல் குறிப்பு உங்களுக்கு அனுப்பப்படும்" + }, + "getMasterPasswordHint": { + "message": "முதன்மை கடவுச்சொல் குறிப்பைப் பெறு" + }, + "continue": { + "message": "தொடர்" + }, + "sendVerificationCode": { + "message": "உங்கள் மின்னஞ்சலுக்கு ஒரு சரிபார்ப்புக் குறியீட்டை அனுப்பவும்" + }, + "sendCode": { + "message": "குறியீட்டை அனுப்பு" + }, + "codeSent": { + "message": "குறியீடு அனுப்பப்பட்டது" + }, + "verificationCode": { + "message": "சரிபார்ப்புக் குறியீடு" + }, + "confirmIdentity": { + "message": "தொடர உங்கள் அடையாளத்தை உறுதிப்படுத்தவும்." + }, + "changeMasterPassword": { + "message": "முதன்மை கடவுச்சொல்லை மாற்றவும்" + }, + "continueToWebApp": { + "message": "வலை பயன்பாட்டிற்கு தொடரவா?" + }, + "continueToWebAppDesc": { + "message": "வலை பயன்பாட்டில் உங்கள் Bitwarden கணக்கின் கூடுதல் அம்சங்களை ஆராயுங்கள்." + }, + "continueToHelpCenter": { + "message": "உதவி மையத்திற்கு தொடரவா?" + }, + "continueToHelpCenterDesc": { + "message": "உதவி மையத்தில் Bitwarden-ஐ எவ்வாறு பயன்படுத்துவது என்பது பற்றி மேலும் அறிக." + }, + "continueToBrowserExtensionStore": { + "message": "உலாவி நீட்டிப்பு ஸ்டோரைத் தொடரவா?" + }, + "continueToBrowserExtensionStoreDesc": { + "message": "Bitwarden அவர்களுக்கு சரியானதா என்பதை மற்றவர்கள் கண்டறிய உதவுங்கள். உங்கள் உலாவியின் நீட்டிப்பு ஸ்டோருக்குச் சென்று இப்போது ஒரு மதிப்பீட்டை விடுங்கள்." + }, + "changeMasterPasswordOnWebConfirmation": { + "message": "Bitwarden வலை பயன்பாட்டில் உங்கள் முதன்மை கடவுச்சொல்லை மாற்றலாம்." + }, + "fingerprintPhrase": { + "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": "உங்கள் கணக்கின் கைரேகை சொற்றொடர்", + "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": "இரண்டு-படி உள்நுழைவு" + }, + "logOut": { + "message": "வெளியேறு" + }, + "aboutBitwarden": { + "message": "Bitwarden பற்றி" + }, + "about": { + "message": "பற்றி" + }, + "moreFromBitwarden": { + "message": "Bitwarden-இலிருந்து மேலும்" + }, + "continueToBitwardenDotCom": { + "message": "bitwarden.com தளத்திற்கு செல்லவா?" + }, + "bitwardenForBusiness": { + "message": "வணிகத்திற்கான Bitwarden" + }, + "bitwardenAuthenticator": { + "message": "Bitwarden அங்கீகரிப்பான்" + }, + "continueToAuthenticatorPageDesc": { + "message": "Bitwarden Authenticator ஆனது அங்கீகரிப்பு விசைகளைச் சேமிக்கவும், 2-படி சரிபார்ப்பு ஓட்டங்களுக்கு TOTP குறியீடுகளை உருவாக்கவும் உங்களை அனுமதிக்கிறது. bitwarden.com வலைத்தளத்தில் மேலும் அறிக" + }, + "bitwardenSecretsManager": { + "message": "Bitwarden ரகசியங்கள் மேலாளர்" + }, + "continueToSecretsManagerPageDesc": { + "message": "Bitwarden Secrets Manager-ஐப் பயன்படுத்தி டெவலப்பர் ரகசியங்களை பாதுகாப்பாக சேமித்து, நிர்வகித்து, பகிருங்கள். bitwarden.com வலைத்தளத்தில் மேலும் அறிக." + }, + "passwordlessDotDev": { + "message": "Passwordless.dev" + }, + "continueToPasswordlessDotDevPageDesc": { + "message": "Passwordless.dev-ஐப் பயன்படுத்தி பாரம்பரிய கடவுச்சொற்கள் இல்லாத, எளிதான மற்றும் பாதுகாப்பான உள்நுழைவு அனுபவங்களை உருவாக்குங்கள். bitwarden.com வலைத்தளத்தில் மேலும் அறிக." + }, + "freeBitwardenFamilies": { + "message": "இலவச Bitwarden Families" + }, + "freeBitwardenFamiliesPageDesc": { + "message": "நீங்கள் இலவச Bitwarden Families-க்கு தகுதியுடையவர். இந்தச் சலுகையை இன்று வலை பயன்பாட்டில் மீட்டெடுக்கவும்." + }, + "version": { + "message": "பதிப்பு" + }, + "save": { + "message": "சேமி" + }, + "move": { + "message": "நகர்த்து" + }, + "addFolder": { + "message": "கோப்புறையைச் சேர்" + }, + "name": { + "message": "பெயர்" + }, + "editFolder": { + "message": "கோப்புறையைத் திருத்து" + }, + "editFolderWithName": { + "message": "கோப்புறையைத் திருத்து: $FOLDERNAME$", + "placeholders": { + "foldername": { + "content": "$1", + "example": "Social" + } + } + }, + "newFolder": { + "message": "புதிய கோப்புறை" + }, + "folderName": { + "message": "கோப்புறை பெயர்" + }, + "folderHintText": { + "message": "ஒரு கோப்புறையின் பெயரைச் சேர்த்து, அதைத் தொடர்ந்து ஒரு “/” ஐச் சேர்ப்பதன் மூலம் ஒரு கோப்புறையை உருவாக்கலாம். எடுத்துக்காட்டு: Social/Forums" + }, + "noFoldersAdded": { + "message": "கோப்புறைகள் சேர்க்கப்படவில்லை" + }, + "createFoldersToOrganize": { + "message": "உங்கள் வால்ட் உருப்படிகளை ஒழுங்கமைக்க கோப்புறைகளை உருவாக்கவும்" + }, + "deleteFolderPermanently": { + "message": "இந்த கோப்புறையை நிரந்தரமாக நீக்க விரும்புகிறீர்களா?" + }, + "deleteFolder": { + "message": "கோப்புறையை நீக்கு" + }, + "folders": { + "message": "கோப்புறைகள்" + }, + "noFolders": { + "message": "பட்டியலிட கோப்புறைகள் எதுவும் இல்லை." + }, + "helpFeedback": { + "message": "உதவி மற்றும் பின்னூட்டம்" + }, + "helpCenter": { + "message": "Bitwarden உதவி மையம்" + }, + "communityForums": { + "message": "Bitwarden சமூக மன்றங்களை ஆராயுங்கள்" + }, + "contactSupport": { + "message": "Bitwarden ஆதரவைத் தொடர்பு கொள்ளுங்கள்" + }, + "sync": { + "message": "ஒத்திசை" + }, + "syncVaultNow": { + "message": "இப்போது வால்ட்டை ஒத்திசை" + }, + "lastSync": { + "message": "கடைசி ஒத்திசைவு:" + }, + "passGen": { + "message": "கடவுச்சொல் உருவாக்கி" + }, + "generator": { + "message": "உருவாக்கி", + "description": "Short for 'credential generator'." + }, + "passGenInfo": { + "message": "உங்கள் உள்நுழைவுகளுக்கு தானாகவே வலிமையான, தனித்துவமான கடவுச்சொற்களை உருவாக்குங்கள்." + }, + "bitWebVaultApp": { + "message": "Bitwarden வலை பயன்பாடு" + }, + "importItems": { + "message": "உருப்படிகளை இறக்குமதிசெய்" + }, + "select": { + "message": "தேர்ந்தெடு" + }, + "generatePassword": { + "message": "கடவுச்சொல்லை உருவாக்கு" + }, + "generatePassphrase": { + "message": "கடவுச்சொல் சொற்றொடரை உருவாக்கு" + }, + "passwordGenerated": { + "message": "கடவுச்சொல் உருவாக்கப்பட்டது" + }, + "passphraseGenerated": { + "message": "கடவுச்சொல் சொற்றொடர் உருவாக்கப்பட்டது" + }, + "usernameGenerated": { + "message": "பயனர்பெயர் உருவாக்கப்பட்டது" + }, + "emailGenerated": { + "message": "மின்னஞ்சல் உருவாக்கப்பட்டது" + }, + "regeneratePassword": { + "message": "கடவுச்சொல்லை மீண்டும் உருவாக்கு" + }, + "options": { + "message": "விருப்பத்தேர்வுகள்" + }, + "length": { + "message": "நீளம்" + }, + "include": { + "message": "சேர்த்துக்கொள்", + "description": "Card header for password generator include block" + }, + "uppercaseDescription": { + "message": "பெரிய எழுத்துக்களை சேர்த்துக்கொள்", + "description": "Tooltip for the password generator uppercase character checkbox" + }, + "uppercaseLabel": { + "message": "A-Z", + "description": "Label for the password generator uppercase character checkbox" + }, + "lowercaseDescription": { + "message": "சிறிய எழுத்துக்களை சேர்த்துக்கொள்", + "description": "Full description for the password generator lowercase character checkbox" + }, + "lowercaseLabel": { + "message": "a-z", + "description": "Label for the password generator lowercase character checkbox" + }, + "numbersDescription": { + "message": "எண்களை சேர்த்துக்கொள்", + "description": "Full description for the password generator numbers checkbox" + }, + "numbersLabel": { + "message": "0-9", + "description": "Label for the password generator numbers checkbox" + }, + "specialCharactersDescription": { + "message": "சிறப்பு எழுத்துக்களை சேர்த்துக்கொள்", + "description": "Full description for the password generator special characters checkbox" + }, + "numWords": { + "message": "வார்த்தைகளின் எண்ணிக்கை" + }, + "wordSeparator": { + "message": "வார்த்தை பிரிப்பான்" + }, + "capitalize": { + "message": "பெரிய எழுத்தாக்கு", + "description": "Make the first letter of a work uppercase." + }, + "includeNumber": { + "message": "எண்ணைச் சேர்த்துக்கொள்" + }, + "minNumbers": { + "message": "குறைந்தபட்ச எண்கள்" + }, + "minSpecial": { + "message": "குறைந்தபட்ச சிறப்பு" + }, + "avoidAmbiguous": { + "message": "தெளிவற்ற எழுத்துக்களை தவிர்க்கவும்", + "description": "Label for the avoid ambiguous characters checkbox." + }, + "generatorPolicyInEffect": { + "message": "உங்கள் உருவாக்கி விருப்பத்தேர்வுகளுக்கு என்டர்பிரைஸ் கொள்கை தேவைகள் பயன்படுத்தப்பட்டுள்ளன.", + "description": "Indicates that a policy limits the credential generator screen." + }, + "searchVault": { + "message": "வால்ட்டைத் தேடு" + }, + "resetSearch": { + "message": "தேடலை மீட்டமை" + }, + "archiveNoun": { + "message": "Archive", + "description": "Noun" + }, + "archiveVerb": { + "message": "Archive", + "description": "Verb" + }, + "unarchive": { + "message": "Unarchive" + }, + "itemsInArchive": { + "message": "Items in archive" + }, + "noItemsInArchive": { + "message": "No items in archive" + }, + "noItemsInArchiveDesc": { + "message": "Archived items will appear here and will be excluded from general search results and autofill suggestions." + }, + "itemSentToArchive": { + "message": "Item sent to archive" + }, + "itemRemovedFromArchive": { + "message": "Item removed from archive" + }, + "archiveItem": { + "message": "Archive item" + }, + "archiveItemConfirmDesc": { + "message": "Archived items are excluded from general search results and autofill suggestions. Are you sure you want to archive this item?" + }, + "edit": { + "message": "திருத்து" + }, + "view": { + "message": "காண்" + }, + "viewLogin": { + "message": "உள்நுழைவைக் காண்க" + }, + "noItemsInList": { + "message": "பட்டியலிட உருப்படிகள் எதுவும் இல்லை." + }, + "itemInformation": { + "message": "உருப்படி தகவல்" + }, + "username": { + "message": "பயனர்பெயர்" + }, + "password": { + "message": "கடவுச்சொல்" + }, + "totp": { + "message": "அங்கீகரிப்பு இரகசியம்" + }, + "passphrase": { + "message": "கடவுச்சொல் சொற்றொடர்" + }, + "favorite": { + "message": "விருப்பமானது" + }, + "unfavorite": { + "message": "விருப்பமற்றது" + }, + "itemAddedToFavorites": { + "message": "உருப்படி விருப்பமானதில் சேர்க்கப்பட்டது" + }, + "itemRemovedFromFavorites": { + "message": "உருப்படி விருப்பமானதிலிருந்து நீக்கப்பட்டது" + }, + "notes": { + "message": "குறிப்புகள்" + }, + "privateNote": { + "message": "தனிப்பட்ட குறிப்பு" + }, + "note": { + "message": "குறிப்பு" + }, + "editItem": { + "message": "உருப்படியைத் திருத்து" + }, + "folder": { + "message": "கோப்புறை" + }, + "deleteItem": { + "message": "உருப்படியை நீக்கு" + }, + "viewItem": { + "message": "உருப்படியைக் காண்" + }, + "launch": { + "message": "தொடங்கு" + }, + "launchWebsite": { + "message": "வலைத்தளத்தைத் தொடங்கு" + }, + "launchWebsiteName": { + "message": "$ITEMNAME$ வலைத்தளத்தைத் தொடங்கு", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret item" + } + } + }, + "website": { + "message": "வலைத்தளம்" + }, + "toggleVisibility": { + "message": "காண்பிக்கும் நிலையை மாற்று" + }, + "manage": { + "message": "நிர்வகி" + }, + "other": { + "message": "மற்றவை" + }, + "unlockMethods": { + "message": "திறக்கும் விருப்பத்தேர்வுகள்" + }, + "unlockMethodNeededToChangeTimeoutActionDesc": { + "message": "உங்கள் வால்ட் காலக்கெடு செயலை மாற்ற ஒரு திறக்கும் முறையை அமைக்கவும்." + }, + "unlockMethodNeeded": { + "message": "அமைப்புகளில் ஒரு திறக்கும் முறையை அமைக்கவும்" + }, + "sessionTimeoutHeader": { + "message": "அமர்வு காலக்கெடு" + }, + "vaultTimeoutHeader": { + "message": "வால்ட் காலக்கெடு" + }, + "otherOptions": { + "message": "பிற விருப்பத்தேர்வுகள்" + }, + "rateExtension": { + "message": "நீட்டிப்புக்கு மதிப்பிடு" + }, + "browserNotSupportClipboard": { + "message": "உங்கள் உலாவி எளிதான நகலெடுப்பதை ஆதரிக்கவில்லை. அதற்குப் பதிலாக கைமுறையாக நகலெடுக்கவும்." + }, + "verifyYourIdentity": { + "message": "உங்கள் அடையாளத்தைச் சரிபார்க்கவும்" + }, + "weDontRecognizeThisDevice": { + "message": "இந்த சாதனத்தை நாங்கள் அடையாளம் காணவில்லை. உங்கள் அடையாளத்தைச் சரிபார்க்க உங்கள் மின்னஞ்சலுக்கு அனுப்பப்பட்ட குறியீட்டை உள்ளிடவும்." + }, + "continueLoggingIn": { + "message": "உள்நுழைவைத் தொடரவும்" + }, + "yourVaultIsLocked": { + "message": "உங்கள் வால்ட் பூட்டப்பட்டுள்ளது. தொடர உங்கள் அடையாளத்தைச் சரிபார்க்கவும்." + }, + "yourVaultIsLockedV2": { + "message": "உங்கள் வால்ட் பூட்டப்பட்டுள்ளது" + }, + "yourAccountIsLocked": { + "message": "உங்கள் கணக்கு பூட்டப்பட்டுள்ளது" + }, + "or": { + "message": "அல்லது" + }, + "unlock": { + "message": "திற" + }, + "loggedInAsOn": { + "message": "$HOSTNAME$-இல் $EMAIL$-ஆக உள்நுழைந்துள்ளார்.", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + }, + "hostname": { + "content": "$2", + "example": "bitwarden.com" + } + } + }, + "invalidMasterPassword": { + "message": "தவறான முதன்மை கடவுச்சொல்" + }, + "invalidMasterPasswordConfirmEmailAndHost": { + "message": "Invalid master password. Confirm your email is correct and your account was created on $HOST$.", + "placeholders": { + "host": { + "content": "$1", + "example": "vault.bitwarden.com" + } + } + }, + "vaultTimeout": { + "message": "வால்ட் காலக்கெடு" + }, + "vaultTimeout1": { + "message": "காலக்கெடு" + }, + "lockNow": { + "message": "இப்போது பூட்டு" + }, + "lockAll": { + "message": "அனைத்தையும் பூட்டு" + }, + "immediately": { + "message": "உடனடியாக" + }, + "tenSeconds": { + "message": "10 வினாடிகள்" + }, + "twentySeconds": { + "message": "20 வினாடிகள்" + }, + "thirtySeconds": { + "message": "30 வினாடிகள்" + }, + "oneMinute": { + "message": "1 நிமிடம்" + }, + "twoMinutes": { + "message": "2 நிமிடங்கள்" + }, + "fiveMinutes": { + "message": "5 நிமிடங்கள்" + }, + "fifteenMinutes": { + "message": "15 நிமிடங்கள்" + }, + "thirtyMinutes": { + "message": "30 நிமிடங்கள்" + }, + "oneHour": { + "message": "1 மணிநேரம்" + }, + "fourHours": { + "message": "4 மணிநேரங்கள்" + }, + "onLocked": { + "message": "சிஸ்டம் பூட்டப்பட்டவுடன்" + }, + "onRestart": { + "message": "உலாவி மறுதொடக்கம் செய்யப்பட்டவுடன்" + }, + "never": { + "message": "ஒருபோதும் இல்லை" + }, + "security": { + "message": "பாதுகாப்பு" + }, + "confirmMasterPassword": { + "message": "முதன்மை கடவுச்சொல்லை உறுதிப்படுத்து" + }, + "masterPassword": { + "message": "முதன்மை கடவுச்சொல்" + }, + "masterPassImportant": { + "message": "உங்கள் முதன்மை கடவுச்சொல்லை மறந்துவிட்டால் அதை மீட்டெடுக்க முடியாது!" + }, + "masterPassHintLabel": { + "message": "முதன்மை கடவுச்சொல் குறிப்பு" + }, + "errorOccurred": { + "message": "ஒரு பிழை ஏற்பட்டது" + }, + "emailRequired": { + "message": "மின்னஞ்சல் முகவரி அவசியம்." + }, + "invalidEmail": { + "message": "தவறான மின்னஞ்சல் முகவரி." + }, + "masterPasswordRequired": { + "message": "முதன்மை கடவுச்சொல் அவசியம்." + }, + "confirmMasterPasswordRequired": { + "message": "முதன்மை கடவுச்சொல்லை மீண்டும் தட்டச்சு செய்வது அவசியம்." + }, + "masterPasswordMinlength": { + "message": "முதன்மை கடவுச்சொல் குறைந்தது $VALUE$ எழுத்து நீளம் இருக்க வேண்டும்.", + "description": "The Master Password must be at least a specific number of characters long.", + "placeholders": { + "value": { + "content": "$1", + "example": "8" + } + } + }, + "masterPassDoesntMatch": { + "message": "முதன்மை கடவுச்சொல் உறுதிப்படுத்தல் பொருந்தவில்லை." + }, + "newAccountCreated": { + "message": "உங்கள் புதிய கணக்கு உருவாக்கப்பட்டது! இப்போது நீங்கள் உள்நுழையலாம்." + }, + "newAccountCreated2": { + "message": "உங்கள் புதிய கணக்கு உருவாக்கப்பட்டது!" + }, + "youHaveBeenLoggedIn": { + "message": "நீங்கள் உள்நுழைந்துள்ளீர்கள்!" + }, + "youSuccessfullyLoggedIn": { + "message": "நீங்கள் வெற்றிகரமாக உள்நுழைந்துள்ளீர்கள்" + }, + "youMayCloseThisWindow": { + "message": "நீங்கள் இந்த சாளரத்தை மூடலாம்" + }, + "masterPassSent": { + "message": "உங்கள் முதன்மை கடவுச்சொல் குறிப்புடன் ஒரு மின்னஞ்சலை நாங்கள் உங்களுக்கு அனுப்பி உள்ளோம்." + }, + "verificationCodeRequired": { + "message": "சரிபார்ப்புக் குறியீடு அவசியம்." + }, + "webauthnCancelOrTimeout": { + "message": "அங்கீகாரம் ரத்து செய்யப்பட்டது அல்லது அதிக நேரம் எடுத்தது. மீண்டும் முயற்சிக்கவும்." + }, + "invalidVerificationCode": { + "message": "தவறான சரிபார்ப்புக் குறியீடு" + }, + "valueCopied": { + "message": "$VALUE$ நகலெடுக்கப்பட்டது", + "description": "Value has been copied to the clipboard.", + "placeholders": { + "value": { + "content": "$1", + "example": "Password" + } + } + }, + "autofillError": { + "message": "இந்த பக்கத்தில் தேர்ந்தெடுக்கப்பட்ட உருப்படியை தானாக நிரப்ப முடியவில்லை. அதற்குப் பதிலாக தகவலை நகலெடுத்து ஒட்டவும்." + }, + "totpCaptureError": { + "message": "தற்போதைய வலைப்பக்கத்திலிருந்து QR குறியீட்டை ஸ்கேன் செய்ய முடியவில்லை" + }, + "totpCaptureSuccess": { + "message": "அங்கீகரிப்பு விசை சேர்க்கப்பட்டது" + }, + "totpCapture": { + "message": "தற்போதைய வலைப்பக்கத்திலிருந்து அங்கீகரிப்பு QR குறியீட்டை ஸ்கேன் செய்யவும்" + }, + "totpHelperTitle": { + "message": "2-படி சரிபார்ப்பை தடையற்றதாக்கு" + }, + "totpHelper": { + "message": "Bitwarden 2-படி சரிபார்ப்புக் குறியீடுகளை சேமித்து நிரப்ப முடியும். விசையை இந்த புலத்தில் நகலெடுத்து ஒட்டவும்." + }, + "totpHelperWithCapture": { + "message": "Bitwarden 2-படி சரிபார்ப்புக் குறியீடுகளை சேமித்து நிரப்ப முடியும். இந்த வலைத்தளத்தின் அங்கீகரிப்பு QR குறியீட்டின் ஸ்கிரீன்ஷாட்டை எடுக்க கேமரா ஐகானைத் தேர்ந்தெடுக்கவும், அல்லது விசையை இந்த புலத்தில் நகலெடுத்து ஒட்டவும்." + }, + "learnMoreAboutAuthenticators": { + "message": "அங்கீகரிப்பாளர்கள் பற்றி மேலும் அறிக" + }, + "copyTOTP": { + "message": "அங்கீகரிப்பு விசையை நகலெடு (TOTP)" + }, + "loggedOut": { + "message": "வெளியேறிவிட்டது" + }, + "loggedOutDesc": { + "message": "உங்கள் கணக்கிலிருந்து நீங்கள் வெளியேறிவிட்டீர்கள்." + }, + "loginExpired": { + "message": "உங்கள் உள்நுழைவு அமர்வு காலாவதியாகிவிட்டது." + }, + "logIn": { + "message": "உள்நுழை" + }, + "logInToBitwarden": { + "message": "Bitwarden-இல் உள்நுழை" + }, + "enterTheCodeSentToYourEmail": { + "message": "உங்கள் மின்னஞ்சலுக்கு அனுப்பப்பட்ட குறியீட்டை உள்ளிடவும்" + }, + "enterTheCodeFromYourAuthenticatorApp": { + "message": "உங்கள் அங்கீகரிப்பு பயன்பாட்டிலிருந்து குறியீட்டை உள்ளிடவும்" + }, + "pressYourYubiKeyToAuthenticate": { + "message": "அங்கீகரிக்க உங்கள் YubiKey-ஐ அழுத்தவும்" + }, + "duoTwoFactorRequiredPageSubtitle": { + "message": "உங்கள் கணக்கிற்கு Duo இரண்டு-படி உள்நுழைவு அவசியம். உள்நுழைவதை முடிக்க கீழே உள்ள படிகளைப் பின்பற்றவும்." + }, + "followTheStepsBelowToFinishLoggingIn": { + "message": "உள்நுழைவதை முடிக்க கீழே உள்ள படிகளைப் பின்பற்றவும்." + }, + "followTheStepsBelowToFinishLoggingInWithSecurityKey": { + "message": "உங்கள் பாதுகாப்பு விசையுடன் உள்நுழைவதை முடிக்க கீழே உள்ள படிகளைப் பின்பற்றவும்." + }, + "restartRegistration": { + "message": "பதிவை மறுதொடக்கம் செய்" + }, + "expiredLink": { + "message": "காலாவதியான இணைப்பு" + }, + "pleaseRestartRegistrationOrTryLoggingIn": { + "message": "தயவுசெய்து பதிவை மறுதொடக்கம் செய்யவும் அல்லது உள்நுழைய முயற்சிக்கவும்." + }, + "youMayAlreadyHaveAnAccount": { + "message": "உங்களுக்கு ஏற்கனவே ஒரு கணக்கு இருக்கலாம்" + }, + "logOutConfirmation": { + "message": "நீங்கள் வெளியேற விரும்புகிறீர்களா?" + }, + "yes": { + "message": "ஆம்" + }, + "no": { + "message": "இல்லை" + }, + "location": { + "message": "இருப்பிடம்" + }, + "unexpectedError": { + "message": "எதிர்பாராத பிழை ஏற்பட்டது." + }, + "nameRequired": { + "message": "பெயர் அவசியம்." + }, + "addedFolder": { + "message": "கோப்புறை சேர்க்கப்பட்டது" + }, + "twoStepLoginConfirmation": { + "message": "இரண்டு-படி உள்நுழைவு உங்கள் உள்நுழைவை ஒரு பாதுகாப்பு விசை, அங்கீகரிப்பு பயன்பாடு, SMS, தொலைபேசி அழைப்பு அல்லது மின்னஞ்சல் போன்ற மற்றொரு சாதனத்துடன் சரிபார்க்கும்படி செய்வதன் மூலம் உங்கள் கணக்கை மேலும் பாதுகாப்பானதாக்குகிறது. இரண்டு-படி உள்நுழைவை bitwarden.com வலை வால்ட்டில் அமைக்கலாம். இப்போது வலைத்தளத்தைப் பார்வையிட விரும்புகிறீர்களா?" + }, + "twoStepLoginConfirmationContent": { + "message": "Bitwarden வலை பயன்பாட்டில் இரண்டு-படி உள்நுழைவை அமைப்பதன் மூலம் உங்கள் கணக்கை மேலும் பாதுகாப்பானதாக்குங்கள்." + }, + "twoStepLoginConfirmationTitle": { + "message": "வலை பயன்பாட்டிற்கு தொடரவா?" + }, + "editedFolder": { + "message": "கோப்புறை சேமிக்கப்பட்டது" + }, + "deleteFolderConfirmation": { + "message": "இந்த கோப்புறையை நீக்க விரும்புகிறீர்களா?" + }, + "deletedFolder": { + "message": "கோப்புறை நீக்கப்பட்டது" + }, + "gettingStartedTutorial": { + "message": "தொடங்குவதற்கான வழிகாட்டி" + }, + "gettingStartedTutorialVideo": { + "message": "உலாவி நீட்டிப்பிலிருந்து அதிகபட்ச பயனை எவ்வாறு பெறுவது என்பதை அறிய, எங்கள் தொடங்குவதற்கான வழிகாட்டியைப் பார்க்கவும்." + }, + "syncingComplete": { + "message": "ஒத்திசைவு முடிந்தது" + }, + "syncingFailed": { + "message": "ஒத்திசைவு தோல்வியடைந்தது" + }, + "passwordCopied": { + "message": "கடவுச்சொல் நகலெடுக்கப்பட்டது" + }, + "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": "புதிய URI" + }, + "addDomain": { + "message": "டொமைனைச் சேர்", + "description": "'Domain' here refers to an internet domain name (e.g. 'bitwarden.com') and the message in whole described the act of putting a domain value into the context." + }, + "addedItem": { + "message": "உருப்படி சேர்க்கப்பட்டது" + }, + "editedItem": { + "message": "உருப்படி சேமிக்கப்பட்டது" + }, + "deleteItemConfirmation": { + "message": "நீங்கள் உண்மையிலேயே குப்பைக்கு அனுப்ப விரும்புகிறீர்களா?" + }, + "deletedItem": { + "message": "உருப்படி குப்பைக்கு அனுப்பப்பட்டது" + }, + "overwritePassword": { + "message": "கடவுச்சொல்லை மேலெழுது" + }, + "overwritePasswordConfirmation": { + "message": "தற்போதைய கடவுச்சொல்லை மேலெழுத விரும்புகிறீர்களா?" + }, + "overwriteUsername": { + "message": "பயனர்பெயரை மேலெழுது" + }, + "overwriteUsernameConfirmation": { + "message": "தற்போதைய பயனர்பெயரை மேலெழுது விரும்புகிறீர்களா?" + }, + "searchFolder": { + "message": "கோப்புறையைத் தேடு" + }, + "searchCollection": { + "message": "சேகரிப்பைத் தேடு" + }, + "searchType": { + "message": "தேடல் வகை" + }, + "noneFolder": { + "message": "கோப்புறை இல்லை", + "description": "This is the folder for uncategorized items" + }, + "enableAddLoginNotification": { + "message": "உள்நுழைவைச் சேர்க்க கேட்கவும்" + }, + "vaultSaveOptionsTitle": { + "message": "வால்ட்டில் சேமிக்கும் விருப்பத்தேர்வுகள்" + }, + "addLoginNotificationDesc": { + "message": "உங்கள் வால்ட்டில் ஒரு உருப்படி காணப்படவில்லை என்றால், அதைச் சேர்க்க கேட்கவும்." + }, + "addLoginNotificationDescAlt": { + "message": "உங்கள் வால்ட்டில் ஒரு உருப்படி காணப்படவில்லை என்றால், அதைச் சேர்க்க கேட்கவும். அனைத்து உள்நுழைந்த கணக்குகளுக்கும் பொருந்தும்." + }, + "showCardsInVaultViewV2": { + "message": "வால்ட் பார்வையில் தானாக நிரப்பும் பரிந்துரைகளாக எப்போதும் அட்டைகளைக் காட்டு" + }, + "showCardsCurrentTab": { + "message": "தாவல் பக்கத்தில் அட்டைகளைக் காட்டு" + }, + "showCardsCurrentTabDesc": { + "message": "எளிதான தானாக நிரப்புதலுக்காக தாவல் பக்கத்தில் அட்டை உருப்படிகளைப் பட்டியலிடு." + }, + "showIdentitiesInVaultViewV2": { + "message": "வால்ட் பார்வையில் தானாக நிரப்பும் பரிந்துரைகளாக எப்போதும் அடையாளங்களைக் காட்டு" + }, + "showIdentitiesCurrentTab": { + "message": "தாவல் பக்கத்தில் அடையாளங்களைக் காட்டு" + }, + "showIdentitiesCurrentTabDesc": { + "message": "எளிதான தானாக நிரப்புதலுக்காக தாவல் பக்கத்தில் அடையாள உருப்படிகளைப் பட்டியலிடு." + }, + "clickToAutofillOnVault": { + "message": "வால்ட் பார்வையில் உருப்படிகளை தானாக நிரப்ப கிளிக் செய்யவும்" + }, + "clickToAutofill": { + "message": "தானாக நிரப்பும் பரிந்துரையில் உருப்படிகளை நிரப்ப கிளிக் செய்யவும்" + }, + "clearClipboard": { + "message": "கிளிப்போர்டை அழி", + "description": "Clipboard is the operating system thing where you copy/paste data to on your device." + }, + "clearClipboardDesc": { + "message": "உங்கள் கிளிப்போர்டிலிருந்து நகலெடுக்கப்பட்ட மதிப்புகளை தானாகவே அழிக்கவும்.", + "description": "Clipboard is the operating system thing where you copy/paste data to on your device." + }, + "notificationAddDesc": { + "message": "இந்த கடவுச்சொல்லை Bitwarden உங்களுக்காக நினைவில் வைத்திருக்க வேண்டுமா?" + }, + "notificationAddSave": { + "message": "சேமி" + }, + "notificationViewAria": { + "message": "$ITEMNAME$ ஐப் பார்க்கவும், புதிய சாளரத்தில் திறக்கும்", + "placeholders": { + "itemName": { + "content": "$1" + } + }, + "description": "Aria label for the view button in notification bar confirmation message" + }, + "notificationNewItemAria": { + "message": "புதிய உருப்படி, புதிய சாளரத்தில் திறக்கும்", + "description": "Aria label for the new item button in notification bar confirmation message when error is prompted" + }, + "notificationEditTooltip": { + "message": "சேமிக்கும் முன் திருத்து", + "description": "Tooltip and Aria label for edit button on cipher item" + }, + "newNotification": { + "message": "புதிய அறிவிப்பு" + }, + "labelWithNotification": { + "message": "$LABEL$: புதிய அறிவிப்பு", + "description": "Label for the notification with a new login suggestion.", + "placeholders": { + "label": { + "content": "$1", + "example": "Login" + } + } + }, + "notificationLoginSaveConfirmation": { + "message": "Bitwarden இல் சேமிக்கப்பட்டது.", + "description": "Shown to user after item is saved." + }, + "notificationLoginUpdatedConfirmation": { + "message": "Bitwarden-இல் புதுப்பிக்கப்பட்டது.", + "description": "Shown to user after item is updated." + }, + "selectItemAriaLabel": { + "message": "$ITEMTYPE$ஐத் தேர்ந்தெடுக்கவும், $ITEMNAME$", + "description": "Used by screen readers. $1 is the item type (like vault or folder), $2 is the selected item name.", + "placeholders": { + "itemType": { + "content": "$1" + }, + "itemName": { + "content": "$2" + } + } + }, + "saveAsNewLoginAction": { + "message": "புதிய உள்நுழைவாக சேமி", + "description": "Button text for saving login details as a new entry." + }, + "updateLoginAction": { + "message": "உள்நுழைவை புதுப்பி", + "description": "Button text for updating an existing login entry." + }, + "unlockToSave": { + "message": "இந்த உள்நுழைவை சேமிக்க திறக்கவும்", + "description": "User prompt to take action in order to save the login they just entered." + }, + "saveLogin": { + "message": "உள்நுழைவை சேமி", + "description": "Prompt asking the user if they want to save their login details." + }, + "updateLogin": { + "message": "தற்போதுள்ள உள்நுழைவை புதுப்பி", + "description": "Prompt asking the user if they want to update an existing login entry." + }, + "loginSaveSuccess": { + "message": "உள்நுழைவு சேமிக்கப்பட்டது", + "description": "Message displayed when login details are successfully saved." + }, + "loginUpdateSuccess": { + "message": "உள்நுழைவு புதுப்பிக்கப்பட்டது", + "description": "Message displayed when login details are successfully updated." + }, + "loginUpdateTaskSuccess": { + "message": "சிறப்பான வேலை! உங்களையும் $ORGANIZATION$-ஐயும் மேலும் பாதுகாப்பானதாக்க நீங்கள் நடவடிக்கைகளை எடுத்துள்ளீர்கள்.", + "placeholders": { + "organization": { + "content": "$1" + } + }, + "description": "Shown to user after login is updated." + }, + "loginUpdateTaskSuccessAdditional": { + "message": "$ORGANIZATION$-ஐ மேலும் பாதுகாப்பானதாக்கியதற்கு நன்றி. புதுப்பிக்க உங்களுக்கு இன்னும் $TASK_COUNT$ கடவுச்சொற்கள் உள்ளன.", + "placeholders": { + "organization": { + "content": "$1" + }, + "task_count": { + "content": "$2" + } + }, + "description": "Shown to user after login is updated." + }, + "nextSecurityTaskAction": { + "message": "அடுத்த கடவுச்சொல்லை மாற்றவும்", + "description": "Message prompting user to undertake completion of another security task." + }, + "saveFailure": { + "message": "சேமிப்பதில் பிழை", + "description": "Error message shown when the system fails to save login details." + }, + "saveFailureDetails": { + "message": "ஐயோ! இதை எங்களால் சேமிக்க முடியவில்லை. விவரங்களை கைமுறையாக உள்ளிட முயற்சிக்கவும்.", + "description": "Detailed error message shown when saving login details fails." + }, + "changePasswordWarning": { + "message": "உங்கள் கடவுச்சொல்லை மாற்றிய பிறகு, உங்கள் புதிய கடவுச்சொல்லுடன் உள்நுழைய வேண்டும். மற்ற சாதனங்களில் உள்ள செயலில் உள்ள அமர்வுகள் ஒரு மணி நேரத்திற்குள் வெளியேறிவிடும்." + }, + "accountRecoveryUpdateMasterPasswordSubtitle": { + "message": "கணக்கு மீட்டெடுப்பை முடிக்க உங்கள் முதன்மை கடவுச்சொல்லை மாற்றவும்." + }, + "enableChangedPasswordNotification": { + "message": "தற்போதுள்ள உள்நுழைவை புதுப்பிக்க கேட்கவும்" + }, + "changedPasswordNotificationDesc": { + "message": "ஒரு வலைத்தளத்தில் ஒரு மாற்றம் கண்டறியப்படும்போது ஒரு உள்நுழைவின் கடவுச்சொல்லை புதுப்பிக்க கேட்கவும்." + }, + "changedPasswordNotificationDescAlt": { + "message": "ஒரு வலைத்தளத்தில் ஒரு மாற்றம் கண்டறியப்படும்போது ஒரு உள்நுழைவின் கடவுச்சொல்லை புதுப்பிக்க கேட்கவும். அனைத்து உள்நுழைந்த கணக்குகளுக்கும் பொருந்தும்." + }, + "enableUsePasskeys": { + "message": "பாஸ்கீகளை சேமிக்கவும் பயன்படுத்தவும் கேட்கவும்" + }, + "usePasskeysDesc": { + "message": "புதிய பாஸ்கீகளை சேமிக்க அல்லது உங்கள் வால்ட்டில் சேமிக்கப்பட்ட பாஸ்கீகளைப் பயன்படுத்தி உள்நுழைய கேட்கவும். அனைத்து உள்நுழைந்த கணக்குகளுக்கும் பொருந்தும்." + }, + "notificationChangeDesc": { + "message": "இந்த கடவுச்சொல்லை Bitwarden-இல் புதுப்பிக்க விரும்புகிறீர்களா?" + }, + "notificationChangeSave": { + "message": "புதுப்பி" + }, + "notificationUnlockDesc": { + "message": "தானாக நிரப்பும் கோரிக்கையை முடிக்க உங்கள் Bitwarden வால்ட்டைத் திறக்கவும்." + }, + "notificationUnlock": { + "message": "திற" + }, + "additionalOptions": { + "message": "கூடுதல் விருப்பத்தேர்வுகள்" + }, + "enableContextMenuItem": { + "message": "சூழல் மெனு விருப்பத்தேர்வுகளைக் காட்டு" + }, + "contextMenuItemDesc": { + "message": "வலைத்தளத்திற்கான கடவுச்சொல் உருவாக்கம் மற்றும் பொருந்தும் உள்நுழைவுகளை அணுக ஒரு இரண்டாம் கிளிக் பயன்படுத்தவும்." + }, + "contextMenuItemDescAlt": { + "message": "வலைத்தளத்திற்கான கடவுச்சொல் உருவாக்கம் மற்றும் பொருந்தும் உள்நுழைவுகளை அணுக ஒரு இரண்டாம் கிளிக் பயன்படுத்தவும். அனைத்து உள்நுழைந்த கணக்குகளுக்கும் பொருந்தும்." + }, + "defaultUriMatchDetection": { + "message": "இயல்புநிலை URI பொருத்தம் கண்டறிதல்", + "description": "Default URI match detection for autofill." + }, + "defaultUriMatchDetectionDesc": { + "message": "தானாக நிரப்புதல் போன்ற செயல்களைச் செய்யும்போது உள்நுழைவுகளுக்கான URI பொருத்தம் கண்டறிதல் கையாளப்படும் இயல்புநிலை வழியைத் தேர்ந்தெடுக்கவும்." + }, + "theme": { + "message": "தீம்" + }, + "themeDesc": { + "message": "பயன்பாட்டின் வண்ண தீமை மாற்றவும்." + }, + "themeDescAlt": { + "message": "பயன்பாட்டின் வண்ண தீமை மாற்றவும். அனைத்து உள்நுழைந்த கணக்குகளுக்கும் பொருந்தும்." + }, + "dark": { + "message": "டார்க்", + "description": "Dark color" + }, + "light": { + "message": "லைட்", + "description": "Light color" + }, + "exportFrom": { + "message": "இதிலிருந்து ஏற்றுமதிசெய்" + }, + "exportVault": { + "message": "வால்ட்டை ஏற்றுமதிசெய்" + }, + "fileFormat": { + "message": "கோப்பு வடிவம்" + }, + "fileEncryptedExportWarningDesc": { + "message": "இந்த கோப்பு ஏற்றுமதி கடவுச்சொல் பாதுகாக்கப்பட்டதாக இருக்கும் மற்றும் அதைத் திறக்க கோப்பு கடவுச்சொல் தேவைப்படும்." + }, + "filePassword": { + "message": "கோப்பு கடவுச்சொல்" + }, + "exportPasswordDescription": { + "message": "இந்த கடவுச்சொல், இந்தக் கோப்பை ஏற்றுமதி செய்வதற்கும் இறக்குமதி செய்வதற்கும் பயன்படுத்தப்படும்" + }, + "accountRestrictedOptionDescription": { + "message": "ஏற்றுமதியை என்க்ரிப்ட் செய்யவும், தற்போதைய Bitwarden கணக்கிற்கு மட்டுமே இறக்குமதி செய்வதைக் கட்டுப்படுத்தவும் உங்கள் கணக்கின் பயனர்பெயர் மற்றும் முதன்மைக் கடவுச்சொல்லிலிருந்து பெறப்பட்ட உங்கள் கணக்கின் என்க்ரிப்ஷன் கீயை பயன்படுத்தவும்." + }, + "passwordProtectedOptionDescription": { + "message": "ஏற்றுமதியை என்க்ரிப்ட் செய்ய ஒரு கோப்பு கடவுச்சொல்லை அமைத்து, அதை டீக்ரிப்ட் செய்ய கடவுச்சொல்லைப் பயன்படுத்தி, அதை எந்த Bitwarden கணக்கிற்கும் இறக்குமதி செய்யவும்." + }, + "exportTypeHeading": { + "message": "ஏற்றுமதி வகை" + }, + "accountRestricted": { + "message": "கணக்கு கட்டுப்படுத்தப்பட்டது" + }, + "filePasswordAndConfirmFilePasswordDoNotMatch": { + "message": "“கோப்பு கடவுச்சொல்” மற்றும் “கோப்பு கடவுச்சொல்லை உறுதிப்படுத்து“ ஆகியவை பொருந்தவில்லை." + }, + "warning": { + "message": "எச்சரிக்கை", + "description": "WARNING (should stay in capitalized letters if the language permits)" + }, + "warningCapitalized": { + "message": "எச்சரிக்கை", + "description": "Warning (should maintain locale-relevant capitalization)" + }, + "confirmVaultExport": { + "message": "வால்ட் ஏற்றுமதியை உறுதிப்படுத்துக" + }, + "exportWarningDesc": { + "message": "இந்த ஏற்றுமதியில், உங்கள் வால்ட் டேட்டா என்க்ரிப்ட் செய்யப்படாத வடிவத்தில் உள்ளது. ஏற்றுமதி செய்யப்பட்ட கோப்பை பாதுகாப்பற்ற சேனல்கள் (மின்னஞ்சல் போன்றவை) வழியாக சேமிக்கவோ அல்லது அனுப்பவோ கூடாது. அதைப் பயன்படுத்தி முடித்தவுடன் உடனடியாக அதை நீக்கிவிடவும்." + }, + "encExportKeyWarningDesc": { + "message": "இந்த ஏற்றுமதி உங்கள் கணக்கின் என்க்ரிப்ஷன் கீயைப் பயன்படுத்தி உங்கள் டேட்டாவை என்க்ரிப்ட் செய்கிறது. உங்கள் கணக்கின் என்க்ரிப்ஷன் கீயை நீங்கள் மாற்றினால், நீங்கள் மீண்டும் ஏற்றுமதி செய்ய வேண்டும், ஏனெனில் உங்களால் இந்த ஏற்றுமதி கோப்பை டீக்ரிப்ட் செய்ய முடியாது." + }, + "encExportAccountWarningDesc": { + "message": "கணக்கு என்க்ரிப்ஷன் கீகள் ஒவ்வொரு Bitwarden பயனர் கணக்கிற்கும் தனித்துவமானது, எனவே என்க்ரிப்ட் செய்யப்பட்ட ஏற்றுமதியை வேறொரு கணக்கில் இறக்குமதி செய்ய முடியாது." + }, + "exportMasterPassword": { + "message": "உங்கள் வால்ட் டேட்டாவை ஏற்றுமதி செய்ய உங்கள் முதன்மைக் கடவுச்சொல்லை உள்ளிடவும்." + }, + "shared": { + "message": "பகிரப்பட்டது" + }, + "bitwardenForBusinessPageDesc": { + "message": "Bitwarden for Business ஒரு அமைப்பைப் பயன்படுத்தி மற்றவர்களுடன் உங்கள் வால்ட் பொருட்களைப் பகிர உங்களை அனுமதிக்கிறது. bitwarden.com வலைத்தளத்தில் மேலும் அறிக." + }, + "moveToOrganization": { + "message": "அமைப்புக்கு நகர்த்து" + }, + "movedItemToOrg": { + "message": "$ITEMNAME$ $ORGNAME$-க்கு நகர்த்தப்பட்டது", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + }, + "orgname": { + "content": "$2", + "example": "Company Name" + } + } + }, + "moveToOrgDesc": { + "message": "இந்த பொருளை எந்த அமைப்புக்கு நகர்த்த விரும்புகிறீர்கள் என்பதைத் தேர்ந்தெடுக்கவும். ஒரு அமைப்புக்கு நகர்த்துவது அந்த பொருளின் உரிமையை அந்த அமைப்புக்கு மாற்றுகிறது. அது நகர்த்தப்பட்டவுடன் நீங்கள் இனி இந்த பொருளின் நேரடி உரிமையாளராக இருக்க மாட்டீர்கள்." + }, + "learnMore": { + "message": "மேலும் அறிக" + }, + "authenticatorKeyTotp": { + "message": "அங்கீகரிப்பு விசை (TOTP)" + }, + "verificationCodeTotp": { + "message": "சரிபார்ப்புக் குறியீடு (TOTP)" + }, + "copyVerificationCode": { + "message": "சரிபார்ப்புக் குறியீட்டை நகலெடு" + }, + "attachments": { + "message": "இணைப்புகள்" + }, + "deleteAttachment": { + "message": "இணைப்பை நீக்கு" + }, + "deleteAttachmentConfirmation": { + "message": "இந்த இணைப்பை நீக்க நீங்கள் உறுதியாக உள்ளீர்களா?" + }, + "deletedAttachment": { + "message": "இணைப்பு நீக்கப்பட்டது" + }, + "newAttachment": { + "message": "புதிய இணைப்பைச் சேர்" + }, + "noAttachments": { + "message": "இணைப்புகள் இல்லை." + }, + "attachmentSaved": { + "message": "இணைப்பு சேமிக்கப்பட்டது" + }, + "file": { + "message": "கோப்பு" + }, + "fileToShare": { + "message": "பகிர வேண்டிய கோப்பு" + }, + "selectFile": { + "message": "ஒரு கோப்பைத் தேர்ந்தெடுக்கவும்" + }, + "maxFileSize": { + "message": "அதிகபட்ச கோப்பு அளவு 500 MB ஆகும்." + }, + "featureUnavailable": { + "message": "வசதி கிடைக்கவில்லை" + }, + "legacyEncryptionUnsupported": { + "message": "மரபு என்க்ரிப்ஷன் இனி ஆதரிக்கப்படாது. உங்கள் கணக்கை மீட்டெடுக்க ஆதரவைத் தொடர்பு கொள்ளவும்." + }, + "premiumMembership": { + "message": "பிரீமியம் மெம்பர்ஷிப்" + }, + "premiumManage": { + "message": "மெம்பர்ஷிப்பை நிர்வகி" + }, + "premiumManageAlert": { + "message": "bitwarden.com வலை வால்ட்டில் உங்கள் மெம்பர்ஷிப்பை நீங்கள் நிர்வகிக்கலாம். இப்போது வலைத்தளத்தைப் பார்வையிட விரும்புகிறீர்களா?" + }, + "premiumRefresh": { + "message": "மெம்பர்ஷிப்பை ரெஃப்ரெஷ் செய்" + }, + "premiumNotCurrentMember": { + "message": "நீங்கள் தற்போது பிரீமியம் மெம்பர் இல்லை." + }, + "premiumSignUpAndGet": { + "message": "ஒரு பிரீமியம் மெம்பர்ஷிப்பிற்கு சைன் அப் செய்து பெறுங்கள்:" + }, + "ppremiumSignUpStorage": { + "message": "கோப்பு இணைப்புகளுக்கு 1 GB என்க்ரிப்ட் செய்யப்பட்ட ஸ்டோரேஜ்." + }, + "premiumSignUpEmergency": { + "message": "அவசர அணுகல்." + }, + "premiumSignUpTwoStepOptions": { + "message": "YubiKey மற்றும் Duo போன்ற பிரத்யேக டூ-ஸ்டெப் உள்நுழைவு விருப்பங்கள்." + }, + "ppremiumSignUpReports": { + "message": "உங்கள் வால்ட்டைப் பாதுகாப்பாக வைத்திருக்க கடவுச்சொல் சுகாதாரம், கணக்கின் ஆரோக்கியம் மற்றும் டேட்டா மீறல் அறிக்கைகள்." + }, + "ppremiumSignUpTotp": { + "message": "உங்கள் வால்ட்டில் உள்நுழைவுகளுக்கான TOTP சரிபார்ப்புக் குறியீடு (2FA) ஜெனரேட்டர்." + }, + "ppremiumSignUpSupport": { + "message": "முன்னுரிமை வாடிக்கையாளர் ஆதரவு." + }, + "ppremiumSignUpFuture": { + "message": "எதிர்கால பிரீமியம் அம்சங்கள் அனைத்தும். மேலும் பல விரைவில் வருகிறது!" + }, + "premiumPurchase": { + "message": "பிரீமியம் வாங்கு" + }, + "premiumPurchaseAlertV2": { + "message": "Bitwarden வலை செயலியில் உங்கள் கணக்கு அமைப்புகளிலிருந்து பிரீமியம் வாங்கலாம்." + }, + "premiumCurrentMember": { + "message": "நீங்கள் ஒரு பிரீமியம் மெம்பர்!" + }, + "premiumCurrentMemberThanks": { + "message": "Bitwarden-ஐ ஆதரித்ததற்கு நன்றி." + }, + "premiumFeatures": { + "message": "பிரீமியத்திற்கு மேம்படுத்திப் பெறுங்கள்:" + }, + "premiumPrice": { + "message": "எல்லாம் வெறும் $PRICE$ /ஆண்டுக்கு!", + "placeholders": { + "price": { + "content": "$1", + "example": "$10" + } + } + }, + "premiumPriceV2": { + "message": "ஆண்டுக்கு வெறும் $PRICE$க்கு அனைத்தும்!", + "placeholders": { + "price": { + "content": "$1", + "example": "$10" + } + } + }, + "refreshComplete": { + "message": "ரெஃப்ரெஷ் நிறைவடைந்தது" + }, + "enableAutoTotpCopy": { + "message": "TOTP-ஐ தானாக நகலெடு" + }, + "disableAutoTotpCopyDesc": { + "message": "ஒரு உள்நுழைவுக்கு ஒரு அங்கீகரிப்பு விசை இருந்தால், நீங்கள் உள்நுழைவை ஆட்டோஃபில் செய்யும்போது TOTP சரிபார்ப்புக் குறியீட்டை உங்கள் கிளிப்-போர்டுக்கு நகலெடுக்கவும்." + }, + "enableAutoBiometricsPrompt": { + "message": "தொடங்கும் போது பயோமெட்ரிக்ஸைக் கேட்கவும்" + }, + "premiumRequired": { + "message": "பிரீமியம் தேவை" + }, + "premiumRequiredDesc": { + "message": "இந்த அம்சத்தைப் பயன்படுத்த ஒரு பிரீமியம் மெம்பர்ஷிப் தேவை." + }, + "authenticationTimeout": { + "message": "அங்கீகரிப்பு டைம் அவுட்" + }, + "authenticationSessionTimedOut": { + "message": "அங்கீகரிப்பு அமர்வு காலாவதியானது. தயவுசெய்து உள்நுழைவு செயல்முறையை மீண்டும் தொடங்கவும்." + }, + "verificationCodeEmailSent": { + "message": "சரிபார்ப்பு மின்னஞ்சல் $EMAIL$-க்கு அனுப்பப்பட்டது.", + "placeholders": { + "email": { + "content": "$1", + "example": "example@gmail.com" + } + } + }, + "dontAskAgainOnThisDeviceFor30Days": { + "message": "இந்த சாதனத்தில் 30 நாட்களுக்கு மீண்டும் கேட்க வேண்டாம்" + }, + "selectAnotherMethod": { + "message": "மற்றொரு முறையைத் தேர்ந்தெடுக்கவும்", + "description": "Select another two-step login method" + }, + "useYourRecoveryCode": { + "message": "உங்கள் மீட்புக் குறியீட்டைப் பயன்படுத்தவும்" + }, + "insertU2f": { + "message": "உங்கள் கணினியின் USB போர்ட்டில் உங்கள் பாதுகாப்பு விசையைச் செருகவும். அதற்கு ஒரு பட்டன் இருந்தால், அதைத் தொடவும்." + }, + "openInNewTab": { + "message": "புதிய டேப்பில் திற" + }, + "webAuthnAuthenticate": { + "message": "WebAuthn-ஐ அங்கீகரி" + }, + "readSecurityKey": { + "message": "பாதுகாப்பு விசையைப் படி" + }, + "readingPasskeyLoading": { + "message": "Reading passkey..." + }, + "passkeyAuthenticationFailed": { + "message": "Passkey authentication failed" + }, + "useADifferentLogInMethod": { + "message": "Use a different log in method" + }, + "awaitingSecurityKeyInteraction": { + "message": "பாதுகாப்பு விசை தொடர்புகொள்ளக் காத்திருக்கிறது..." + }, + "loginUnavailable": { + "message": "உள்நுழைவு கிடைக்கவில்லை" + }, + "noTwoStepProviders": { + "message": "இந்த கணக்கில் டூ-ஸ்டெப் உள்நுழைவு அமைக்கப்பட்டுள்ளது, இருப்பினும், கட்டமைக்கப்பட்ட டூ-ஸ்டெப் வழங்குநர்களில் எதுவும் இந்த வலை உலாவியால் ஆதரிக்கப்படவில்லை." + }, + "noTwoStepProviders2": { + "message": "தயவுசெய்து ஆதரிக்கப்பட்ட வலை உலாவியை (Chrome போன்றது) பயன்படுத்தவும் மற்றும்/அல்லது வலை உலாவிகளில் சிறந்த முறையில் ஆதரிக்கப்படும் கூடுதல் வழங்குநர்களைச் சேர்க்கவும் (அங்கீகரிப்பு செயலி போன்றது)." + }, + "twoStepOptions": { + "message": "டூ-ஸ்டெப் உள்நுழைவு விருப்பங்கள்" + }, + "selectTwoStepLoginMethod": { + "message": "டூ-ஸ்டெப் உள்நுழைவு முறையைத் தேர்ந்தெடுக்கவும்" + }, + "recoveryCodeTitle": { + "message": "மீட்புக் குறியீடு" + }, + "authenticatorAppTitle": { + "message": "அங்கீகரிப்பு செயலி" + }, + "authenticatorAppDescV2": { + "message": "Bitwarden Authenticator போன்ற அங்கீகரிப்பு செயலியால் உருவாக்கப்பட்ட குறியீட்டை உள்ளிடவும்.", + "description": "'Bitwarden Authenticator' is a product name and should not be translated." + }, + "yubiKeyTitleV2": { + "message": "Yubico OTP பாதுகாப்பு விசை" + }, + "yubiKeyDesc": { + "message": "உங்கள் கணக்கை அணுக ஒரு YubiKey-ஐப் பயன்படுத்தவும். YubiKey 4, 4 Nano, 4C, மற்றும் NEO சாதனங்களுடன் வேலை செய்கிறது." + }, + "duoDescV2": { + "message": "Duo Security-யால் உருவாக்கப்பட்ட குறியீட்டை உள்ளிடவும்.", + "description": "'Duo Security' and 'Duo Mobile' are product names and should not be translated." + }, + "duoOrganizationDesc": { + "message": "Duo Mobile செயலி, SMS, ஃபோன் கால் அல்லது U2F பாதுகாப்பு விசையைப் பயன்படுத்தி உங்கள் அமைப்புக்கான Duo Security-யுடன் சரிபார்க்கவும்.", + "description": "'Duo Security' and 'Duo Mobile' are product names and should not be translated." + }, + "webAuthnTitle": { + "message": "FIDO2 WebAuthn" + }, + "webAuthnDesc": { + "message": "உங்கள் கணக்கை அணுக, WebAuthn இணக்கமான எந்தவொரு பாதுகாப்பு விசையையும் பயன்படுத்தவும்." + }, + "emailTitle": { + "message": "மின்னஞ்சல்" + }, + "emailDescV2": { + "message": "உங்கள் மின்னஞ்சலுக்கு அனுப்பப்பட்ட குறியீட்டை உள்ளிடவும்." + }, + "selfHostedEnvironment": { + "message": "சுய-ஹோஸ்ட் செய்யப்பட்ட சூழல்" + }, + "selfHostedBaseUrlHint": { + "message": "உங்கள் ஆன்-ப்ரிமைஸ் ஹோஸ்ட் செய்யப்பட்ட Bitwarden இன்ஸ்டாலேஷனின் பேஸ் URL-ஐ குறிப்பிடவும். உதாரணம்: https://bitwarden.company.com" + }, + "selfHostedCustomEnvHeader": { + "message": "மேம்பட்ட கட்டமைப்பிற்காக, ஒவ்வொரு சேவையின் பேஸ் URL-ஐயும் தனித்தனியாக நீங்கள் குறிப்பிடலாம்." + }, + "selfHostedEnvFormInvalid": { + "message": "நீங்கள் பேஸ் சர்வர் URL-ஐ அல்லது குறைந்தது ஒரு தனிப்பயன் சூழலைச் சேர்க்க வேண்டும்." + }, + "customEnvironment": { + "message": "தனிப்பயன் சூழல்" + }, + "baseUrl": { + "message": "சர்வர் URL" + }, + "selfHostBaseUrl": { + "message": "சுய-ஹோஸ்ட் சர்வர் URL", + "description": "Label for field requesting a self-hosted integration service URL" + }, + "apiUrl": { + "message": "API சர்வர் URL" + }, + "webVaultUrl": { + "message": "வலை வால்ட் சர்வர் URL" + }, + "identityUrl": { + "message": "Identity சர்வர் URL" + }, + "notificationsUrl": { + "message": "அறிவிப்புகள் சர்வர் URL" + }, + "iconsUrl": { + "message": "ஐகான்ஸ் சர்வர் URL" + }, + "environmentSaved": { + "message": "சூழல் URLகள் சேமிக்கப்பட்டன" + }, + "showAutoFillMenuOnFormFields": { + "message": "படிவப் புலங்களில் ஆட்டோஃபில் மெனுவைக் காட்டு", + "description": "Represents the message for allowing the user to enable the autofill overlay" + }, + "autofillSuggestionsSectionTitle": { + "message": "ஆட்டோஃபில் பரிந்துரைகள்" + }, + "autofillSpotlightTitle": { + "message": "ஆட்டோஃபில் பரிந்துரைகளை எளிதாகக் கண்டறியவும்" + }, + "autofillSpotlightDesc": { + "message": "உங்கள் உலாவி ஆட்டோஃபில் அமைப்புகளை முடக்கவும், அதனால் அவை Bitwarden-உடன் முரண்படாது." + }, + "turnOffBrowserAutofill": { + "message": "$BROWSER$ ஆட்டோஃபில்லை முடக்கு", + "placeholders": { + "browser": { + "content": "$1", + "example": "Chrome" + } + } + }, + "turnOffAutofill": { + "message": "ஆட்டோஃபில்லை முடக்கு" + }, + "showInlineMenuLabel": { + "message": "படிவப் புலங்களில் ஆட்டோஃபில் பரிந்துரைகளைக் காட்டு" + }, + "showInlineMenuIdentitiesLabel": { + "message": "பரிந்துரைகளாக அடையாளங்களைக் காட்டு" + }, + "showInlineMenuCardsLabel": { + "message": "பரிந்துரைகளாக கார்டுகளைக் காட்டு" + }, + "showInlineMenuOnIconSelectionLabel": { + "message": "ஐகான் தேர்ந்தெடுக்கப்பட்டபோது பரிந்துரைகளைக் காட்டு" + }, + "showInlineMenuOnFormFieldsDescAlt": { + "message": "உள்நுழைந்த அனைத்து கணக்குகளுக்கும் பொருந்தும்." + }, + "turnOffBrowserBuiltInPasswordManagerSettings": { + "message": "முரண்பாடுகளைத் தவிர்க்க, உங்கள் உலாவியின் உள்ளமைக்கப்பட்ட கடவுச்சொல் மேனேஜர் அமைப்புகளை முடக்கவும்." + }, + "turnOffBrowserBuiltInPasswordManagerSettingsLink": { + "message": "உலாவி அமைப்புகளை எடிட் செய்." + }, + "autofillOverlayVisibilityOff": { + "message": "ஆஃப்", + "description": "Overlay setting select option for disabling autofill overlay" + }, + "autofillOverlayVisibilityOnFieldFocus": { + "message": "புலம் தேர்ந்தெடுக்கப்பட்டபோது (ஃபோகஸ்-இல்)", + "description": "Overlay appearance select option for showing the field on focus of the input element" + }, + "autofillOverlayVisibilityOnButtonClick": { + "message": "ஆட்டோஃபில் ஐகான் தேர்ந்தெடுக்கப்பட்டபோது", + "description": "Overlay appearance select option for showing the field on click of the overlay icon" + }, + "enableAutoFillOnPageLoadSectionTitle": { + "message": "பக்கம் லோட் ஆகும்போது ஆட்டோஃபில்" + }, + "enableAutoFillOnPageLoad": { + "message": "பக்கம் லோட் ஆகும்போது ஆட்டோஃபில்" + }, + "enableAutoFillOnPageLoadDesc": { + "message": "ஒரு உள்நுழைவுப் படிவம் கண்டறியப்பட்டால், வலைப் பக்கம் லோட் ஆகும்போது ஆட்டோஃபில் செய்யவும்." + }, + "experimentalFeature": { + "message": "பாதிக்கப்பட்ட அல்லது நம்பத்தகாத வலைத்தளங்கள் பக்கம் லோட் ஆகும்போது ஆட்டோஃபில்லை பயன்படுத்திக் கொள்ள முடியும்." + }, + "learnMoreAboutAutofillOnPageLoadLinkText": { + "message": "ஆபத்துகளைப் பற்றி மேலும் அறிக" + }, + "learnMoreAboutAutofill": { + "message": "ஆட்டோஃபில் பற்றி மேலும் அறிக" + }, + "defaultAutoFillOnPageLoad": { + "message": "உள்நுழைவு பொருட்களுக்கான டிஃபால்ட் ஆட்டோஃபில் அமைப்பு" + }, + "defaultAutoFillOnPageLoadDesc": { + "message": "உள்நுழைவு பொருட்களுக்கான டிஃபால்ட் ஆட்டோஃபில் அமைப்பை ஐட்டம்-இன் எடிட் வியூவிலிருந்து பக்க லோட்-இல் முடக்கலாம்." + }, + "autoFillOnPageLoadUseDefault": { + "message": "டிஃபால்ட் அமைப்பைப் பயன்படுத்து" + }, + "autoFillOnPageLoadYes": { + "message": "பக்கம் லோட் ஆகும்போது ஆட்டோஃபில்" + }, + "autoFillOnPageLoadNo": { + "message": "பக்கம் லோட் ஆகும்போது ஆட்டோஃபில் செய்ய வேண்டாம்" + }, + "commandOpenPopup": { + "message": "வால்ட் பாப்-அப்பைத் திற" + }, + "commandOpenSidebar": { + "message": "சைட்பாரில் வால்ட்டைத் திற" + }, + "commandAutofillLoginDesc": { + "message": "தற்போதைய வலைத்தளத்திற்கான கடைசியாகப் பயன்படுத்தப்பட்ட உள்நுழைவை ஆட்டோஃபில் செய்யவும்" + }, + "commandAutofillCardDesc": { + "message": "தற்போதைய வலைத்தளத்திற்கான கடைசியாகப் பயன்படுத்தப்பட்ட கார்டை ஆட்டோஃபில் செய்யவும்" + }, + "commandAutofillIdentityDesc": { + "message": "தற்போதைய வலைத்தளத்திற்கான கடைசியாகப் பயன்படுத்தப்பட்ட அடையாளத்தை ஆட்டோஃபில் செய்யவும்" + }, + "commandGeneratePasswordDesc": { + "message": "புதிய சீரற்ற கடவுச்சொல்லை உருவாக்கி கிளிப்போர்டுக்கு நகலெடுக்கவும்" + }, + "commandLockVaultDesc": { + "message": "வால்ட்டை லாக் செய்" + }, + "customFields": { + "message": "தனிப்பயன் புலங்கள்" + }, + "copyValue": { + "message": "மதிப்பை நகலெடு" + }, + "value": { + "message": "மதிப்பு" + }, + "newCustomField": { + "message": "புதிய தனிப்பயன் புலம்" + }, + "dragToSort": { + "message": "வரிசைப்படுத்த இழு" + }, + "dragToReorder": { + "message": "மீண்டும் வரிசைப்படுத்த இழுக்கவும்" + }, + "cfTypeText": { + "message": "உரை" + }, + "cfTypeHidden": { + "message": "மறைக்கப்பட்டது" + }, + "cfTypeBoolean": { + "message": "பூலியன்" + }, + "cfTypeCheckbox": { + "message": "பெட்டி" + }, + "cfTypeLinked": { + "message": "இணைக்கப்பட்டது", + "description": "This describes a field that is 'linked' (tied) to another field." + }, + "linkedValue": { + "message": "இணைக்கப்பட்ட மதிப்பு", + "description": "This describes a value that is 'linked' (tied) to another value." + }, + "popup2faCloseMessage": { + "message": "உங்கள் சரிபார்ப்புக் குறியீட்டிற்கான உங்கள் மின்னஞ்சலைச் சரிபார்க்க, பாப்அப் சாளரத்திற்கு வெளியே கிளிக் செய்வதால், இந்த பாப்அப் மூடப்படும். இந்த பாப்அப் மூடாமல் இருக்க, புதிய சாளரத்தில் திறக்க விரும்புகிறீர்களா?" + }, + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" + }, + "cardholderName": { + "message": "அட்டைதாரர் பெயர்" + }, + "number": { + "message": "எண்" + }, + "brand": { + "message": "பிராண்ட்" + }, + "expirationMonth": { + "message": "காலாவதி மாதம்" + }, + "expirationYear": { + "message": "காலாவதி ஆண்டு" + }, + "expiration": { + "message": "காலாவதி" + }, + "january": { + "message": "ஜனவரி" + }, + "february": { + "message": "பிப்ரவரி" + }, + "march": { + "message": "மார்ச்" + }, + "april": { + "message": "ஏப்ரல்" + }, + "may": { + "message": "மே" + }, + "june": { + "message": "ஜூன்" + }, + "july": { + "message": "ஜூலை" + }, + "august": { + "message": "ஆகஸ்ட்" + }, + "september": { + "message": "செப்டம்பர்" + }, + "october": { + "message": "அக்டோபர்" + }, + "november": { + "message": "நவம்பர்" + }, + "december": { + "message": "டிசம்பர்" + }, + "securityCode": { + "message": "பாதுகாப்புக் குறியீடு" + }, + "cardNumber": { + "message": "அட்டை எண்" + }, + "ex": { + "message": "உதா." + }, + "title": { + "message": "பதவி" + }, + "mr": { + "message": "திரு" + }, + "mrs": { + "message": "திருமதி" + }, + "ms": { + "message": "Ms" + }, + "dr": { + "message": "டாக்டர்" + }, + "mx": { + "message": "Mx" + }, + "firstName": { + "message": "முதல் பெயர்" + }, + "middleName": { + "message": "நடுப் பெயர்" + }, + "lastName": { + "message": "கடைசி பெயர்" + }, + "fullName": { + "message": "முழுப் பெயர்" + }, + "identityName": { + "message": "அடையாளப் பெயர்" + }, + "company": { + "message": "நிறுவனம்" + }, + "ssn": { + "message": "சமூக பாதுகாப்பு எண்" + }, + "passportNumber": { + "message": "கடவுச்சீட்டு எண்" + }, + "licenseNumber": { + "message": "உரிமம் எண்" + }, + "email": { + "message": "மின்னஞ்சல்" + }, + "phone": { + "message": "தொலைபேசி" + }, + "address": { + "message": "முகவரி" + }, + "address1": { + "message": "முகவரி 1" + }, + "address2": { + "message": "முகவரி 2" + }, + "address3": { + "message": "முகவரி 3" + }, + "cityTown": { + "message": "நகரம் / ஊர்" + }, + "stateProvince": { + "message": "மாநிலம் / மாகாணம்" + }, + "zipPostalCode": { + "message": "ஜிப் / அஞ்சல் குறியீடு" + }, + "country": { + "message": "நாடு" + }, + "type": { + "message": "வகை" + }, + "typeLogin": { + "message": "உள்நுழை" + }, + "typeLogins": { + "message": "உள்நுழைவுகள்" + }, + "typeSecureNote": { + "message": "பாதுகாப்பான குறிப்பு" + }, + "typeCard": { + "message": "அட்டை" + }, + "typeIdentity": { + "message": "அடையாளம்" + }, + "typeSshKey": { + "message": "SSH விசை" + }, + "typeNote": { + "message": "குறிப்பு" + }, + "newItemHeaderLogin": { + "message": "New Login", + "description": "Header for new login item type" + }, + "newItemHeaderCard": { + "message": "New Card", + "description": "Header for new card item type" + }, + "newItemHeaderIdentity": { + "message": "New Identity", + "description": "Header for new identity item type" + }, + "newItemHeaderNote": { + "message": "New Note", + "description": "Header for new note item type" + }, + "newItemHeaderSshKey": { + "message": "New SSH key", + "description": "Header for new SSH key item type" + }, + "newItemHeaderTextSend": { + "message": "New Text Send", + "description": "Header for new text send" + }, + "newItemHeaderFileSend": { + "message": "New File Send", + "description": "Header for new file send" + }, + "editItemHeaderLogin": { + "message": "Edit Login", + "description": "Header for edit login item type" + }, + "editItemHeaderCard": { + "message": "Edit Card", + "description": "Header for edit card item type" + }, + "editItemHeaderIdentity": { + "message": "Edit Identity", + "description": "Header for edit identity item type" + }, + "editItemHeaderNote": { + "message": "Edit Note", + "description": "Header for edit note item type" + }, + "editItemHeaderSshKey": { + "message": "Edit SSH key", + "description": "Header for edit SSH key item type" + }, + "editItemHeaderTextSend": { + "message": "Edit Text Send", + "description": "Header for edit text send" + }, + "editItemHeaderFileSend": { + "message": "Edit File Send", + "description": "Header for edit file send" + }, + "viewItemHeaderLogin": { + "message": "View Login", + "description": "Header for view login item type" + }, + "viewItemHeaderCard": { + "message": "View Card", + "description": "Header for view card item type" + }, + "viewItemHeaderIdentity": { + "message": "View Identity", + "description": "Header for view identity item type" + }, + "viewItemHeaderNote": { + "message": "View Note", + "description": "Header for view note item type" + }, + "viewItemHeaderSshKey": { + "message": "View SSH key", + "description": "Header for view SSH key item type" + }, + "passwordHistory": { + "message": "கடவுச்சொல் வரலாறு" + }, + "generatorHistory": { + "message": "ஜெனரேட்டர் வரலாறு" + }, + "clearGeneratorHistoryTitle": { + "message": "ஜெனரேட்டர் வரலாற்றை அழி" + }, + "cleargGeneratorHistoryDescription": { + "message": "நீங்கள் தொடர்ந்தால், ஜெனரேட்டரின் வரலாற்றிலிருந்து அனைத்து உள்ளீடுகளும் நிரந்தரமாக நீக்கப்படும். நீங்கள் தொடர விரும்புகிறீர்களா?" + }, + "back": { + "message": "பின்" + }, + "collections": { + "message": "சேகரிப்புகள்" + }, + "nCollections": { + "message": "$COUNT$ சேகரிப்புகள்", + "placeholders": { + "count": { + "content": "$1", + "example": "2" + } + } + }, + "favorites": { + "message": "பிடித்தவை" + }, + "popOutNewWindow": { + "message": "புதிய சாளரத்தில் பாப்அப்" + }, + "refresh": { + "message": "மீட்டமை" + }, + "cards": { + "message": "அட்டைகள்" + }, + "identities": { + "message": "அடையாளங்கள்" + }, + "logins": { + "message": "உள்நுழைவுகள்" + }, + "secureNotes": { + "message": "பாதுகாப்பான குறிப்புகள்" + }, + "sshKeys": { + "message": "SSH விசைகள்" + }, + "clear": { + "message": "அழி", + "description": "To clear something out. example: To clear browser history." + }, + "checkPassword": { + "message": "கடவுச்சொல் வெளிப்பட்டதா எனச் சரிபார்க்கவும்." + }, + "passwordExposed": { + "message": "இந்த கடவுச்சொல் தரவு மீறல்களில் $VALUE$ முறை வெளிப்படுத்தப்பட்டுள்ளது. இதை நீங்கள் மாற்ற வேண்டும்.", + "placeholders": { + "value": { + "content": "$1", + "example": "2" + } + } + }, + "passwordSafe": { + "message": "இந்த கடவுச்சொல் அறியப்பட்ட எந்த தரவு மீறல்களிலும் காணப்படவில்லை. அதைப் பயன்படுத்துவது பாதுகாப்பானது." + }, + "baseDomain": { + "message": "அடிப்படை டொமைன்", + "description": "Domain name. Ex. website.com" + }, + "baseDomainOptionRecommended": { + "message": "அடிப்படை டொமைன் (பரிந்துரைக்கப்பட்டது)", + "description": "Domain name. Ex. website.com" + }, + "domainName": { + "message": "டொமைன் பெயர்", + "description": "Domain name. Ex. website.com" + }, + "host": { + "message": "ஹோஸ்ட்", + "description": "A URL's host value. For example, the host of https://sub.domain.com:443 is 'sub.domain.com:443'." + }, + "exact": { + "message": "சரியானது" + }, + "startsWith": { + "message": "இதனுடன் தொடங்கும்" + }, + "regEx": { + "message": "ஒழுங்குமுறை வெளிப்பாடு", + "description": "A programming term, also known as 'RegEx'." + }, + "matchDetection": { + "message": "பொருந்தும் கண்டறிதல்", + "description": "URI match detection for autofill." + }, + "defaultMatchDetection": { + "message": "இயல்புநிலை பொருத்தம் கண்டறிதல்", + "description": "Default URI match detection for autofill." + }, + "toggleOptions": { + "message": "விருப்பங்களை மாற்று" + }, + "toggleCurrentUris": { + "message": "தற்போதைய URLகளை மாற்று", + "description": "Toggle the display of the URIs of the currently open tabs in the browser." + }, + "currentUri": { + "message": "தற்போதைய URI", + "description": "The URI of one of the current open tabs in the browser." + }, + "organization": { + "message": "அமைப்பு", + "description": "An entity of multiple related people (ex. a team or business organization)." + }, + "types": { + "message": "வகைகள்" + }, + "allItems": { + "message": "அனைத்து பொருட்கள்" + }, + "noPasswordsInList": { + "message": "பட்டியலிட கடவுச்சொற்கள் இல்லை." + }, + "clearHistory": { + "message": "வரலாற்றை அழி" + }, + "nothingToShow": { + "message": "காட்ட எதுவும் இல்லை" + }, + "nothingGeneratedRecently": { + "message": "சமீபத்தில் நீங்கள் எதையும் உருவாக்கவில்லை" + }, + "remove": { + "message": "அகற்று" + }, + "default": { + "message": "இயல்புநிலை" + }, + "dateUpdated": { + "message": "புதுப்பிக்கப்பட்டது", + "description": "ex. Date this item was updated" + }, + "dateCreated": { + "message": "உருவாக்கப்பட்டது", + "description": "ex. Date this item was created" + }, + "datePasswordUpdated": { + "message": "கடவுச்சொல் புதுப்பிக்கப்பட்டது", + "description": "ex. Date this password was updated" + }, + "neverLockWarning": { + "message": "\"ஒருபோதும் இல்லை\" விருப்பத்தைப் பயன்படுத்த விரும்புகிறீர்களா? உங்கள் பூட்டு விருப்பங்களை \"ஒருபோதும் இல்லை\" என அமைப்பது உங்கள் பெட்டகத்தின் என்கிரிப்ஷன் விசையை உங்கள் சாதனத்தில் சேமிக்கிறது. இந்த விருப்பத்தைப் பயன்படுத்தினால், உங்கள் சாதனத்தை நீங்கள் சரியாகப் பாதுகாத்து வைத்திருப்பதை உறுதி செய்ய வேண்டும்." + }, + "noOrganizationsList": { + "message": "நீங்கள் எந்த அமைப்புகளையும் சேர்ந்தவர் அல்ல. அமைப்புகள் மற்ற பயனர்களுடன் பொருட்களைப் பாதுகாப்பாகப் பகிர உங்களை அனுமதிக்கின்றன." + }, + "noCollectionsInList": { + "message": "பட்டியலிட சேகரிப்புகள் இல்லை." + }, + "ownership": { + "message": "உரிமை" + }, + "whoOwnsThisItem": { + "message": "இந்த பொருளுக்கு யார் உரிமையாளர்?" + }, + "strong": { + "message": "வலுவான", + "description": "ex. A strong password. Scale: Weak -> Good -> Strong" + }, + "good": { + "message": "நல்ல", + "description": "ex. A good password. Scale: Weak -> Good -> Strong" + }, + "weak": { + "message": "பலவீனமான", + "description": "ex. A weak password. Scale: Weak -> Good -> Strong" + }, + "weakMasterPassword": { + "message": "பலவீனமான முதன்மை கடவுச்சொல்" + }, + "weakMasterPasswordDesc": { + "message": "நீங்கள் தேர்ந்தெடுத்த முதன்மை கடவுச்சொல் பலவீனமானது. உங்கள் Bitwarden கணக்கைப் பாதுகாக்க, நீங்கள் ஒரு வலுவான முதன்மை கடவுச்சொல்லை (அல்லது ஒரு கடவுச்சொல் சொற்றொடரை) பயன்படுத்த வேண்டும். இந்த முதன்மை கடவுச்சொல்லைப் பயன்படுத்த நீங்கள் உறுதியாக இருக்கிறீர்களா?" + }, + "pin": { + "message": "PIN", + "description": "PIN code. Ex. The short code (often numeric) that you use to unlock a device." + }, + "unlockWithPin": { + "message": "PIN உடன் திற" + }, + "setYourPinTitle": { + "message": "PIN ஐ அமை" + }, + "setYourPinButton": { + "message": "PIN ஐ அமை" + }, + "setYourPinCode": { + "message": "Bitwarden ஐத் திறக்க உங்கள் PIN குறியீட்டை அமை. பயன்பாட்டிலிருந்து நீங்கள் முழுமையாக வெளியேறினால், உங்கள் PIN அமைப்புகள் மீட்டமைக்கப்படும்." + }, + "setPinCode": { + "message": "Bitwarden ஐத் திறக்க இந்த PIN ஐ நீங்கள் பயன்படுத்தலாம். பயன்பாட்டிலிருந்து நீங்கள் முழுமையாக வெளியேறினால், உங்கள் PIN மீட்டமைக்கப்படும்." + }, + "pinRequired": { + "message": "PIN குறியீடு தேவை." + }, + "invalidPin": { + "message": "தவறான PIN குறியீடு." + }, + "tooManyInvalidPinEntryAttemptsLoggingOut": { + "message": "அதிகமான தவறான PIN உள்ளீட்டு முயற்சிகள். வெளியேறுகிறது." + }, + "unlockWithBiometrics": { + "message": "பயோமெட்ரிக்ஸ் உடன் திற" + }, + "unlockWithMasterPassword": { + "message": "முதன்மை கடவுச்சொல்லுடன் திற" + }, + "awaitDesktop": { + "message": "டெஸ்க்டாப்பிலிருந்து உறுதிப்படுத்தலுக்காக காத்திருக்கிறது" + }, + "awaitDesktopDesc": { + "message": "உலாவிக்கான பயோமெட்ரிக்ஸை அமைக்க, Bitwarden டெஸ்க்டாப் பயன்பாட்டில் பயோமெட்ரிக்ஸைப் பயன்படுத்தி உறுதிப்படுத்தவும்." + }, + "lockWithMasterPassOnRestart": { + "message": "உலாவி மீண்டும் தொடங்கும் போது முதன்மை கடவுச்சொல்லுடன் பூட்டு" + }, + "lockWithMasterPassOnRestart1": { + "message": "உலாவி மீண்டும் தொடங்கும் போது முதன்மை கடவுச்சொல் தேவை" + }, + "selectOneCollection": { + "message": "நீங்கள் குறைந்தது ஒரு சேகரிப்பைத் தேர்ந்தெடுக்க வேண்டும்." + }, + "cloneItem": { + "message": "பொருளை நகலெடு" + }, + "clone": { + "message": "நகலெடு" + }, + "passwordGenerator": { + "message": "கடவுச்சொல் ஜெனரேட்டர்" + }, + "usernameGenerator": { + "message": "பயனர் பெயர் ஜெனரேட்டர்" + }, + "useThisEmail": { + "message": "இந்த மின்னஞ்சலைப் பயன்படுத்து" + }, + "useThisPassword": { + "message": "இந்த கடவுச்சொல்லைப் பயன்படுத்து" + }, + "useThisPassphrase": { + "message": "இந்த கடவுச்சொல் சொற்றொடரைப் பயன்படுத்து" + }, + "useThisUsername": { + "message": "இந்த பயனர் பெயரைப் பயன்படுத்து" + }, + "securePasswordGenerated": { + "message": "பாதுகாப்பான கடவுச்சொல் உருவாக்கப்பட்டது! இணையதளத்திலும் உங்கள் கடவுச்சொல்லைப் புதுப்பிக்க மறக்காதீர்கள்." + }, + "useGeneratorHelpTextPartOne": { + "message": "ஜெனரேட்டரைப் பயன்படுத்து", + "description": "This will be used as part of a larger sentence, broken up to include the generator icon. The full sentence will read 'Use the generator [GENERATOR_ICON] to create a strong unique password'" + }, + "useGeneratorHelpTextPartTwo": { + "message": "ஒரு வலுவான தனிப்பட்ட கடவுச்சொல்லை உருவாக்க", + "description": "This will be used as part of a larger sentence, broken up to include the generator icon. The full sentence will read 'Use the generator [GENERATOR_ICON] to create a strong unique password'" + }, + "vaultCustomization": { + "message": "பெட்டக தனிப்பயனாக்கம்" + }, + "vaultTimeoutAction": { + "message": "பெட்டக காலக்கெடு நடவடிக்கை" + }, + "vaultTimeoutAction1": { + "message": "காலக்கெடு நடவடிக்கை" + }, + "lock": { + "message": "பூட்டு", + "description": "Verb form: to make secure or inaccessible by" + }, + "trash": { + "message": "குப்பை", + "description": "Noun: a special folder to hold deleted items" + }, + "searchTrash": { + "message": "குப்பையில் தேடு" + }, + "permanentlyDeleteItem": { + "message": "பொருளை நிரந்தரமாக நீக்கு" + }, + "permanentlyDeleteItemConfirmation": { + "message": "இந்த பொருளை நிரந்தரமாக நீக்க விரும்புகிறீர்களா?" + }, + "permanentlyDeletedItem": { + "message": "பொருள் நிரந்தரமாக நீக்கப்பட்டது" + }, + "restoreItem": { + "message": "பொருளை மீட்டமை" + }, + "restoredItem": { + "message": "பொருள் மீட்டமைக்கப்பட்டது" + }, + "alreadyHaveAccount": { + "message": "ஏற்கனவே ஒரு கணக்கு உள்ளதா?" + }, + "vaultTimeoutLogOutConfirmation": { + "message": "வெளியேறுவது உங்கள் பெட்டகத்திற்கான அனைத்து அணுகலையும் அகற்றும் மற்றும் காலக்கெடு காலத்திற்குப் பிறகு ஆன்லைன் அங்கீகாரத்தை கோருகிறது. இந்த அமைப்பைப் பயன்படுத்த நீங்கள் உறுதியாக இருக்கிறீர்களா?" + }, + "vaultTimeoutLogOutConfirmationTitle": { + "message": "காலக்கெடு நடவடிக்கை உறுதிப்படுத்தல்" + }, + "autoFillAndSave": { + "message": "தானாக நிரப்பு மற்றும் சேமி" + }, + "fillAndSave": { + "message": "நிரப்பு மற்றும் சேமி" + }, + "autoFillSuccessAndSavedUri": { + "message": "பொருள் தானாக நிரப்பப்பட்டது மற்றும் URI சேமிக்கப்பட்டது" + }, + "autoFillSuccess": { + "message": "பொருள் தானாக நிரப்பப்பட்டது " + }, + "insecurePageWarning": { + "message": "எச்சரிக்கை: இது ஒரு பாதுகாப்பற்ற HTTP பக்கம், நீங்கள் சமர்ப்பிக்கும் எந்த தகவலும் மற்றவர்களால் காணப்படலாம் மற்றும் மாற்றப்படலாம். இந்த உள்நுழைவு முதலில் பாதுகாப்பான (HTTPS) பக்கத்தில் சேமிக்கப்பட்டது." + }, + "insecurePageWarningFillPrompt": { + "message": "இந்த உள்நுழைவை இன்னும் நிரப்ப விரும்புகிறீர்களா?" + }, + "autofillIframeWarning": { + "message": "படிவம் உங்கள் சேமிக்கப்பட்ட உள்நுழைவின் URI ஐ விட வேறு டொமைனால் ஹோஸ்ட் செய்யப்பட்டுள்ளது. எப்படியும் தானாக நிரப்ப சரி என்பதைத் தேர்ந்தெடு, அல்லது நிறுத்த ரத்துசெய் என்பதைத் தேர்ந்தெடு." + }, + "autofillIframeWarningTip": { + "message": "எதிர்காலத்தில் இந்த எச்சரிக்கையைத் தடுக்க, இந்த URI, $HOSTNAME$, இந்த தளத்திற்கான உங்கள் Bitwarden உள்நுழைவு பொருளில் சேமிக்கவும்.", + "placeholders": { + "hostname": { + "content": "$1", + "example": "www.example.com" + } + } + }, + "setMasterPassword": { + "message": "முதன்மை கடவுச்சொல்லை அமை" + }, + "currentMasterPass": { + "message": "தற்போதைய முதன்மை கடவுச்சொல்" + }, + "newMasterPass": { + "message": "புதிய முதன்மை கடவுச்சொல்" + }, + "confirmNewMasterPass": { + "message": "புதிய முதன்மை கடவுச்சொல்லை உறுதிப்படுத்து" + }, + "masterPasswordPolicyInEffect": { + "message": "ஒன்று அல்லது அதற்கு மேற்பட்ட அமைப்பு கொள்கைகள் உங்கள் முதன்மை கடவுச்சொல் பின்வரும் தேவைகளைப் பூர்த்தி செய்ய வேண்டும்:" + }, + "policyInEffectMinComplexity": { + "message": "குறைந்தபட்ச சிக்கலான மதிப்பெண் $SCORE$", + "placeholders": { + "score": { + "content": "$1", + "example": "4" + } + } + }, + "policyInEffectMinLength": { + "message": "குறைந்தபட்ச நீளம் $LENGTH$", + "placeholders": { + "length": { + "content": "$1", + "example": "14" + } + } + }, + "policyInEffectUppercase": { + "message": "ஒன்று அல்லது அதற்கு மேற்பட்ட பெரிய எழுத்துக்களைக் கொண்டிரு" + }, + "policyInEffectLowercase": { + "message": "ஒன்று அல்லது அதற்கு மேற்பட்ட சிறிய எழுத்துக்களைக் கொண்டிரு" + }, + "policyInEffectNumbers": { + "message": "ஒன்று அல்லது அதற்கு மேற்பட்ட எண்களைக் கொண்டிரு" + }, + "policyInEffectSpecial": { + "message": "பின்வரும் சிறப்பு எழுத்துகளில் ஒன்று அல்லது அதற்கு மேற்பட்டவற்றை கொண்டிரு $CHARS$", + "placeholders": { + "chars": { + "content": "$1", + "example": "!@#$%^&*" + } + } + }, + "masterPasswordPolicyRequirementsNotMet": { + "message": "உங்கள் புதிய முதன்மை கடவுச்சொல் கொள்கை தேவைகளைப் பூர்த்தி செய்யவில்லை." + }, + "receiveMarketingEmailsV2": { + "message": "உங்கள் இன்பாக்ஸில் Bitwarden இலிருந்து ஆலோசனை, அறிவிப்புகள் மற்றும் ஆராய்ச்சி வாய்ப்புகளைப் பெறுங்கள்." + }, + "unsubscribe": { + "message": "தவிர்க்கவும்" + }, + "atAnyTime": { + "message": "எந்த நேரத்திலும்." + }, + "byContinuingYouAgreeToThe": { + "message": "தொடர்வதன் மூலம், நீங்கள் இதற்கு ஒப்புக்கொள்கிறீர்கள்" + }, + "and": { + "message": "மற்றும்" + }, + "acceptPolicies": { + "message": "இந்த பெட்டியைத் தேர்ந்தெடுப்பதன் மூலம் பின்வருவனவற்றை நீங்கள் ஒப்புக்கொள்கிறீர்கள்:" + }, + "acceptPoliciesRequired": { + "message": "சேவை விதிமுறைகள் மற்றும் தனியுரிமைக் கொள்கை ஒப்புக்கொள்ளப்படவில்லை." + }, + "termsOfService": { + "message": "சேவை விதிமுறைகள்" + }, + "privacyPolicy": { + "message": "தனியுரிமைக் கொள்கை" + }, + "yourNewPasswordCannotBeTheSameAsYourCurrentPassword": { + "message": "உங்கள் புதிய கடவுச்சொல் உங்கள் தற்போதைய கடவுச்சொல்லாக இருக்க முடியாது." + }, + "hintEqualsPassword": { + "message": "உங்கள் கடவுச்சொல் குறிப்பு உங்கள் கடவுச்சொல்லாக இருக்க முடியாது." + }, + "ok": { + "message": "சரி" + }, + "errorRefreshingAccessToken": { + "message": "அணுகல் டோக்கன் மீட்டமைப்பு பிழை" + }, + "errorRefreshingAccessTokenDesc": { + "message": "மீட்டமைப்பு டோக்கன் அல்லது API விசைகள் காணப்படவில்லை. வெளியேறி மீண்டும் உள்நுழைய முயற்சிக்கவும்." + }, + "desktopSyncVerificationTitle": { + "message": "டெஸ்க்டாப் ஒத்திசைவு சரிபார்ப்பு" + }, + "desktopIntegrationVerificationText": { + "message": "டெஸ்க்டாப் பயன்பாட்டில் இந்த கைரேகையைக் காட்டுகிறதா என சரிபார்க்கவும்: " + }, + "desktopIntegrationDisabledTitle": { + "message": "உலாவி ஒருங்கிணைப்பு அமைக்கப்படவில்லை" + }, + "desktopIntegrationDisabledDesc": { + "message": "Bitwarden டெஸ்க்டாப் பயன்பாட்டில் உலாவி ஒருங்கிணைப்பு அமைக்கப்படவில்லை. டெஸ்க்டாப் பயன்பாட்டில் உள்ள அமைப்புகளில் அதை அமைக்கவும்." + }, + "startDesktopTitle": { + "message": "Bitwarden டெஸ்க்டாப் பயன்பாட்டைத் தொடங்கு" + }, + "startDesktopDesc": { + "message": "பயோமெட்ரிக்ஸ் உடன் திறப்பதைப் பயன்படுத்துவதற்கு முன் Bitwarden டெஸ்க்டாப் பயன்பாடு தொடங்கப்பட வேண்டும்." + }, + "errorEnableBiometricTitle": { + "message": "பயோமெட்ரிக்ஸை அமைக்க முடியவில்லை" + }, + "errorEnableBiometricDesc": { + "message": "டெஸ்க்டாப் பயன்பாட்டால் நடவடிக்கை ரத்து செய்யப்பட்டது" + }, + "nativeMessagingInvalidEncryptionDesc": { + "message": "டெஸ்க்டாப் பயன்பாடு பாதுகாப்பான தகவல்தொடர்பு சேனலை செல்லாததாக்கியது. இந்த செயல்பாட்டை மீண்டும் முயற்சிக்கவும்" + }, + "nativeMessagingInvalidEncryptionTitle": { + "message": "டெஸ்க்டாப் தொடர்பு தடைபட்டது" + }, + "nativeMessagingWrongUserDesc": { + "message": "டெஸ்க்டாப் பயன்பாடு வேறு கணக்கில் உள்நுழைந்துள்ளது. இரண்டு பயன்பாடுகளும் ஒரே கணக்கில் உள்நுழைந்துள்ளன என்பதை உறுதிப்படுத்தவும்." + }, + "nativeMessagingWrongUserTitle": { + "message": "கணக்கு பொருந்தவில்லை" + }, + "nativeMessagingWrongUserKeyTitle": { + "message": "பயோமெட்ரிக் விசை பொருந்தவில்லை" + }, + "nativeMessagingWrongUserKeyDesc": { + "message": "பயோமெட்ரிக் திறத்தல் தோல்வியடைந்தது. பயோமெட்ரிக் ரகசிய விசை பெட்டகத்தைத் திறக்கத் தவறிவிட்டது. பயோமெட்ரிக்ஸை மீண்டும் அமைக்க முயற்சிக்கவும்." + }, + "biometricsNotEnabledTitle": { + "message": "பயோமெட்ரிக்ஸ் அமைக்கப்படவில்லை" + }, + "biometricsNotEnabledDesc": { + "message": "உலாவி பயோமெட்ரிக்ஸ் டெஸ்க்டாப் பயோமெட்ரிக்கை முதலில் அமைப்புகளில் அமைக்க வேண்டும்." + }, + "biometricsNotSupportedTitle": { + "message": "பயோமெட்ரிக்ஸ் ஆதரிக்கப்படவில்லை" + }, + "biometricsNotSupportedDesc": { + "message": "இந்த சாதனத்தில் உலாவி பயோமெட்ரிக்ஸ் ஆதரிக்கப்படவில்லை." + }, + "biometricsNotUnlockedTitle": { + "message": "பயனர் பூட்டப்பட்டார் அல்லது வெளியேறினார்" + }, + "biometricsNotUnlockedDesc": { + "message": "டெஸ்க்டாப் பயன்பாட்டில் இந்த பயனரைத் திறந்து மீண்டும் முயற்சிக்கவும்." + }, + "biometricsNotAvailableTitle": { + "message": "பயோமெட்ரிக் திறத்தல் கிடைக்கவில்லை" + }, + "biometricsNotAvailableDesc": { + "message": "பயோமெட்ரிக் திறத்தல் தற்போது கிடைக்கவில்லை. பிறகு மீண்டும் முயற்சிக்கவும்." + }, + "biometricsFailedTitle": { + "message": "பயோமெட்ரிக்ஸ் தோல்வியடைந்தது" + }, + "biometricsFailedDesc": { + "message": "பயோமெட்ரிக்ஸ் முடிக்க முடியாது, ஒரு முதன்மை கடவுச்சொல்லைப் பயன்படுத்த அல்லது வெளியேற பரிசீலிக்கவும். இது தொடர்ந்தால், Bitwarden ஆதரவை தொடர்பு கொள்ளவும்." + }, + "nativeMessaginPermissionErrorTitle": { + "message": "அனுமதி வழங்கப்படவில்லை" + }, + "nativeMessaginPermissionErrorDesc": { + "message": "Bitwarden டெஸ்க்டாப் பயன்பாட்டுடன் தொடர்பு கொள்ள அனுமதி இல்லாமல், உலாவி நீட்டிப்பில் நாங்கள் பயோமெட்ரிக்ஸை வழங்க முடியாது. மீண்டும் முயற்சிக்கவும்." + }, + "nativeMessaginPermissionSidebarTitle": { + "message": "அனுமதி கோரிக்கை பிழை" + }, + "nativeMessaginPermissionSidebarDesc": { + "message": "இந்த நடவடிக்கை பக்கவாட்டில் செய்ய முடியாது, பாப்அப் அல்லது பாப்அவுட்டில் மீண்டும் நடவடிக்கை எடுக்கவும்." + }, + "personalOwnershipSubmitError": { + "message": "ஒரு என்டர்பிரைஸ் கொள்கை காரணமாக, உங்கள் தனிப்பட்ட பெட்டகத்தில் பொருட்களைச் சேமிப்பதிலிருந்து நீங்கள் தடை செய்யப்பட்டுள்ளீர்கள். உரிமை விருப்பத்தை ஒரு அமைப்புக்கு மாற்றி, கிடைக்கக்கூடிய சேகரிப்புகளில் இருந்து தேர்ந்தெடுக்கவும்." + }, + "personalOwnershipPolicyInEffect": { + "message": "ஒரு அமைப்பு கொள்கை உங்கள் உரிமை விருப்பங்களை பாதிக்கிறது." + }, + "personalOwnershipPolicyInEffectImports": { + "message": "ஒரு அமைப்பு கொள்கை உங்கள் தனிப்பட்ட பெட்டகத்திற்கு பொருட்களை இறக்குமதி செய்வதைத் தடுத்துள்ளது." + }, + "restrictCardTypeImport": { + "message": "அட்டை பொருள் வகைகளை இறக்குமதி செய்ய முடியாது" + }, + "restrictCardTypeImportDesc": { + "message": "1 அல்லது அதற்கு மேற்பட்ட அமைப்புகளால் அமைக்கப்பட்டுள்ள ஒரு கொள்கை உங்கள் பெட்டகங்களுக்கு அட்டைகளை இறக்குமதி செய்வதிலிருந்து உங்களைத் தடுக்கிறது." + }, + "domainsTitle": { + "message": "டொமைன்கள்", + "description": "A category title describing the concept of web domains" + }, + "blockedDomains": { + "message": "தடைசெய்யப்பட்ட டொமைன்கள்" + }, + "learnMoreAboutBlockedDomains": { + "message": "தடைசெய்யப்பட்ட டொமைன்கள் பற்றி மேலும் அறிய" + }, + "excludedDomains": { + "message": "விலக்கப்பட்ட டொமைன்கள்" + }, + "excludedDomainsDesc": { + "message": "இந்த டொமைன்களுக்கான உள்நுழைவு விவரங்களைச் சேமிக்க Bitwarden கேட்காது. மாற்றங்கள் நடைமுறைக்கு வர பக்கத்தை மீண்டும் மீட்டமைக்க வேண்டும்." + }, + "excludedDomainsDescAlt": { + "message": "உள்நுழைந்த அனைத்து கணக்குகளுக்கும் இந்த டொமைன்களுக்கான உள்நுழைவு விவரங்களைச் சேமிக்க Bitwarden கேட்காது. மாற்றங்கள் நடைமுறைக்கு வர பக்கத்தை மீண்டும் மீட்டமைக்க வேண்டும்." + }, + "blockedDomainsDesc": { + "message": "இந்த இணையதளங்களுக்கு தானாக நிரப்புதல் மற்றும் பிற தொடர்புடைய அம்சங்கள் வழங்கப்படாது. மாற்றங்கள் நடைமுறைக்கு வர பக்கத்தை மீண்டும் மீட்டமைக்க வேண்டும்." + }, + "autofillBlockedNoticeV2": { + "message": "இந்த இணையதளத்திற்கு தானாக நிரப்புதல் தடைசெய்யப்பட்டுள்ளது." + }, + "autofillBlockedNoticeGuidance": { + "message": "அமைப்புகளில் இதை மாற்று" + }, + "change": { + "message": "மாற்று" + }, + "changePassword": { + "message": "கடவுச்சொல்லை மாற்று", + "description": "Change password button for browser at risk notification on login." + }, + "changeButtonTitle": { + "message": "கடவுச்சொல்லை மாற்று - $ITEMNAME$", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "atRiskPassword": { + "message": "ஆபத்தில் உள்ள கடவுச்சொல்" + }, + "atRiskPasswords": { + "message": "ஆபத்தில் உள்ள கடவுச்சொற்கள்" + }, + "atRiskPasswordDescSingleOrg": { + "message": "$ORGANIZATION$ ஒரு கடவுச்சொல்லை மாற்றும்படி கோருகிறது, ஏனெனில் அது ஆபத்தில் உள்ளது.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + } + }, + "atRiskPasswordsDescSingleOrgPlural": { + "message": "$ORGANIZATION$ $COUNT$ கடவுச்சொற்களை மாற்றும்படி கோருகிறது, ஏனெனில் அவை ஆபத்தில் உள்ளன.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + }, + "count": { + "content": "$2", + "example": "2" + } + } + }, + "atRiskPasswordsDescMultiOrgPlural": { + "message": "உங்கள் நிறுவனங்கள் $COUNT$ கடவுச்சொற்களை மாற்றும்படி கோருகின்றன, ஏனெனில் அவை ஆபத்தில் உள்ளன.", + "placeholders": { + "count": { + "content": "$1", + "example": "2" + } + } + }, + "atRiskChangePrompt": { + "message": "இந்த தளத்திற்கான உங்கள் கடவுச்சொல் ஆபத்தில் உள்ளது. $ORGANIZATION$ அதை மாற்றும்படி கோரியுள்ளது.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + }, + "description": "Notification body when a login triggers an at-risk password change request and the change password domain is known." + }, + "atRiskNavigatePrompt": { + "message": "$ORGANIZATION$ இந்த கடவுச்சொல் ஆபத்தில் இருப்பதால் அதை மாற்ற விரும்புகிறது. கடவுச்சொல்லை மாற்ற உங்கள் கணக்கு அமைப்புகளுக்குச் செல்லவும்.", + "placeholders": { + "organization": { + "content": "$1", + "example": "Acme Corp" + } + }, + "description": "Notification body when a login triggers an at-risk password change request and no change password domain is provided." + }, + "reviewAndChangeAtRiskPassword": { + "message": "ஒரு ஆபத்தில் உள்ள கடவுச்சொல்லை மதிப்பாய்வு செய்து மாற்று" + }, + "reviewAndChangeAtRiskPasswordsPlural": { + "message": "$COUNT$ ஆபத்தில் உள்ள கடவுச்சொற்களை மதிப்பாய்வு செய்து மாற்று", + "placeholders": { + "count": { + "content": "$1", + "example": "2" + } + } + }, + "changeAtRiskPasswordsFaster": { + "message": "ஆபத்தில் உள்ள கடவுச்சொற்களை வேகமாக மாற்று" + }, + "changeAtRiskPasswordsFasterDesc": { + "message": "உங்கள் அமைப்புகளைப் புதுப்பித்து, உங்கள் கடவுச்சொற்களை விரைவாக தானாக நிரப்பலாம் மற்றும் புதியவற்றை உருவாக்கலாம்" + }, + "reviewAtRiskLogins": { + "message": "ஆபத்தில் உள்ள உள்நுழைவுகளை மதிப்பாய்வு செய்" + }, + "reviewAtRiskPasswords": { + "message": "ஆபத்தில் உள்ள கடவுச்சொற்களை மதிப்பாய்வு செய்" + }, + "reviewAtRiskLoginsSlideDesc": { + "message": "உங்கள் நிறுவன கடவுச்சொற்கள் பலவீனமாக, மீண்டும் பயன்படுத்தப்பட்டு, மற்றும்/அல்லது வெளிப்படுத்தப்பட்டதால் ஆபத்தில் உள்ளன.", + "description": "Description of the review at-risk login slide on the at-risk password page carousel" + }, + "reviewAtRiskLoginSlideImgAltPeriod": { + "message": "ஆபத்தில் உள்ள உள்நுழைவுகளின் பட்டியலின் விளக்கம்." + }, + "generatePasswordSlideDesc": { + "message": "ஆபத்தில் உள்ள தளத்தில் உள்ள Bitwarden தானாக நிரப்பு மெனுவுடன் ஒரு வலுவான, தனிப்பட்ட கடவுச்சொல்லை விரைவாக உருவாக்குங்கள்.", + "description": "Description of the generate password slide on the at-risk password page carousel" + }, + "generatePasswordSlideImgAltPeriod": { + "message": "உருவாக்கப்பட்ட கடவுச்சொல்லைக் காட்டும் Bitwarden தானாக நிரப்பு மெனுவின் விளக்கம்." + }, + "updateInBitwarden": { + "message": "Bitwarden இல் புதுப்பி" + }, + "updateInBitwardenSlideDesc": { + "message": "Bitwarden பின்னர் கடவுச்சொல் நிர்வாகியில் கடவுச்சொல்லைப் புதுப்பிக்க உங்களைத் தூண்டும்.", + "description": "Description of the update in Bitwarden slide on the at-risk password page carousel" + }, + "updateInBitwardenSlideImgAltPeriod": { + "message": "பயனரை உள்நுழைவைப் புதுப்பிக்கும்படி தூண்டும் Bitwarden இன் அறிவிப்பின் விளக்கம்." + }, + "turnOnAutofill": { + "message": "தானாக நிரப்புதலை இயக்கு" + }, + "turnedOnAutofill": { + "message": "தானாக நிரப்புதல் இயக்கப்பட்டது" + }, + "dismiss": { + "message": "நீக்கு" + }, + "websiteItemLabel": { + "message": "இணையதளம் $number$ (URI)", + "placeholders": { + "number": { + "content": "$1", + "example": "3" + } + } + }, + "excludedDomainsInvalidDomain": { + "message": "$DOMAIN$ ஒரு செல்லுபடியாகும் டொமைன் அல்ல", + "placeholders": { + "domain": { + "content": "$1", + "example": "duckduckgo.com" + } + } + }, + "blockedDomainsSavedSuccess": { + "message": "தடைசெய்யப்பட்ட டொமைன் மாற்றங்கள் சேமிக்கப்பட்டன" + }, + "excludedDomainsSavedSuccess": { + "message": "விலக்கப்பட்ட டொமைன் மாற்றங்கள் சேமிக்கப்பட்டன" + }, + "limitSendViews": { + "message": "பார்வைகளை வரம்புபடுத்து" + }, + "limitSendViewsHint": { + "message": "வரம்பு எட்டிய பிறகு யாரும் இந்த அனுப்புதலைப் பார்க்க முடியாது.", + "description": "Displayed under the limit views field on Send" + }, + "limitSendViewsCount": { + "message": "$ACCESSCOUNT$ காட்சிகள் மீதமுள்ளன", + "description": "Displayed under the limit views field on Send", + "placeholders": { + "accessCount": { + "content": "$1", + "example": "2" + } + } + }, + "send": { + "message": "அனுப்பு", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendDetails": { + "message": "அனுப்பு விவரங்கள்", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendTypeText": { + "message": "உரை" + }, + "sendTypeTextToShare": { + "message": "பகிர்வதற்கான உரை" + }, + "sendTypeFile": { + "message": "கோப்பு" + }, + "allSends": { + "message": "அனைத்து அனுப்புகளும்", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "maxAccessCountReached": { + "message": "அதிகபட்ச அணுகல் எண்ணிக்கை எட்டப்பட்டது", + "description": "This text will be displayed after a Send has been accessed the maximum amount of times." + }, + "hideTextByDefault": { + "message": "இயல்புநிலையாக உரையை மறை" + }, + "expired": { + "message": "காலாவதியானது" + }, + "passwordProtected": { + "message": "கடவுச்சொல் பாதுகாக்கப்பட்டது" + }, + "copyLink": { + "message": "இணைப்பை நகலெடு" + }, + "copySendLink": { + "message": "அனுப்பு இணைப்பை நகலெடு", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "removePassword": { + "message": "கடவுச்சொல்லை அகற்று" + }, + "delete": { + "message": "நீக்கு" + }, + "removedPassword": { + "message": "கடவுச்சொல் அகற்றப்பட்டது" + }, + "deletedSend": { + "message": "அனுப்பு நீக்கப்பட்டது", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendLink": { + "message": "அனுப்பு இணைப்பு", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "disabled": { + "message": "முடக்கப்பட்டது" + }, + "removePasswordConfirmation": { + "message": "கடவுச்சொல்லை அகற்ற விரும்புகிறீர்களா?" + }, + "deleteSend": { + "message": "அனுப்பு நீக்கு", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "deleteSendConfirmation": { + "message": "இந்த அனுப்புதலை நீக்க விரும்புகிறீர்களா?", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "deleteSendPermanentConfirmation": { + "message": "இந்த அனுப்புதலை நிரந்தரமாக நீக்க விரும்புகிறீர்களா?", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "editSend": { + "message": "அனுப்பு திருத்து", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "deletionDate": { + "message": "நீக்கப்பட்ட தேதி" + }, + "deletionDateDescV2": { + "message": "இந்த தேதியில் அனுப்புதல் நிரந்தரமாக நீக்கப்படும்.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "expirationDate": { + "message": "காலாவதி தேதி" + }, + "oneDay": { + "message": "1 நாள்" + }, + "days": { + "message": "$DAYS$ நாட்கள்", + "placeholders": { + "days": { + "content": "$1", + "example": "2" + } + } + }, + "custom": { + "message": "தனிப்பயன்" + }, + "sendPasswordDescV3": { + "message": "பெறுநர்கள் இந்த அனுப்புதலை அணுக ஒரு விருப்ப கடவுச்சொல்லைச் சேர்க்கவும்.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "createSend": { + "message": "புதிய அனுப்பு", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "newPassword": { + "message": "புதிய கடவுச்சொல்" + }, + "sendDisabled": { + "message": "அனுப்பு அகற்றப்பட்டது", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendDisabledWarning": { + "message": "ஒரு நிறுவன கொள்கை காரணமாக, நீங்கள் ஏற்கனவே உள்ள அனுப்புதலை மட்டுமே நீக்க முடியும்.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "createdSend": { + "message": "அனுப்பு உருவாக்கப்பட்டது", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "createdSendSuccessfully": { + "message": "அனுப்புதல் வெற்றிகரமாக உருவாக்கப்பட்டது!", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendExpiresInHoursSingle": { + "message": "அடுத்த 1 மணிநேரத்திற்கு இணைப்பைக் கொண்ட எவரும் அனுப்புதலை அணுகலாம்.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendExpiresInHours": { + "message": "அடுத்த $HOURS$ மணிநேரத்திற்கு இணைப்பைக் கொண்ட எவரும் அனுப்புதலை அணுகலாம்.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.", + "placeholders": { + "hours": { + "content": "$1", + "example": "5" + } + } + }, + "sendExpiresInDaysSingle": { + "message": "அடுத்த 1 நாளுக்கு இணைப்பைக் கொண்ட எவரும் அனுப்புதலை அணுகலாம்.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendExpiresInDays": { + "message": "அடுத்த $DAYS$ நாட்களுக்கு இணைப்பைக் கொண்ட எவரும் அனுப்புதலை அணுகலாம்.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.", + "placeholders": { + "days": { + "content": "$1", + "example": "5" + } + } + }, + "sendLinkCopied": { + "message": "அனுப்பு இணைப்பு நகலெடுக்கப்பட்டது", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "editedSend": { + "message": "அனுப்பு சேமிக்கப்பட்டது", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendFilePopoutDialogText": { + "message": "நீட்டிப்பை வெளியேற்றவா?", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendFilePopoutDialogDesc": { + "message": "ஒரு கோப்பு அனுப்புதலை உருவாக்க, நீங்கள் நீட்டிப்பை ஒரு புதிய சாளரத்திற்கு வெளியேற்ற வேண்டும்.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendLinuxChromiumFileWarning": { + "message": "ஒரு கோப்பைத் தேர்வு செய்ய, நீட்டிப்பை பக்கவாட்டில் (முடிந்தால்) திறக்கவும் அல்லது இந்த பதாகையைக் கிளிக் செய்வதன் மூலம் புதிய சாளரத்திற்கு வெளியேற்றவும்." + }, + "sendFirefoxFileWarning": { + "message": "Firefox ஐப் பயன்படுத்தி ஒரு கோப்பைத் தேர்வு செய்ய, நீட்டிப்பை பக்கவாட்டில் திறக்கவும் அல்லது இந்த பதாகையைக் கிளிக் செய்வதன் மூலம் புதிய சாளரத்திற்கு வெளியேற்றவும்." + }, + "sendSafariFileWarning": { + "message": "Safari ஐப் பயன்படுத்தி ஒரு கோப்பைத் தேர்வு செய்ய, இந்த பதாகையைக் கிளிக் செய்வதன் மூலம் புதிய சாளரத்திற்கு வெளியேற்றவும்." + }, + "popOut": { + "message": "வெளியேற்றவும்" + }, + "sendFileCalloutHeader": { + "message": "நீங்கள் தொடங்குவதற்கு முன்" + }, + "expirationDateIsInvalid": { + "message": "வழங்கப்பட்ட காலாவதி தேதி செல்லாது." + }, + "deletionDateIsInvalid": { + "message": "வழங்கப்பட்ட நீக்கப்பட்ட தேதி செல்லாது." + }, + "expirationDateAndTimeRequired": { + "message": "ஒரு காலாவதி தேதி மற்றும் நேரம் தேவை." + }, + "deletionDateAndTimeRequired": { + "message": "ஒரு நீக்கப்பட்ட தேதி மற்றும் நேரம் தேவை." + }, + "dateParsingError": { + "message": "உங்கள் நீக்கப்பட்ட மற்றும் காலாவதி தேதிகளைச் சேமிப்பதில் ஒரு பிழை இருந்தது." + }, + "hideYourEmail": { + "message": "பார்வையாளர்களிடமிருந்து உங்கள் மின்னஞ்சல் முகவரியை மறைக்கவும்." + }, + "passwordPrompt": { + "message": "முதன்மை கடவுச்சொல் மீண்டும் கேட்கவும்" + }, + "passwordConfirmation": { + "message": "முதன்மை கடவுச்சொல் உறுதிப்படுத்தல்" + }, + "passwordConfirmationDesc": { + "message": "இந்த நடவடிக்கை பாதுகாக்கப்பட்டது. தொடர, உங்கள் அடையாளத்தைச் சரிபார்க்க உங்கள் முதன்மை கடவுச்சொல்லை மீண்டும் உள்ளிடவும்." + }, + "emailVerificationRequired": { + "message": "மின்னஞ்சல் சரிபார்ப்பு தேவை" + }, + "emailVerifiedV2": { + "message": "மின்னஞ்சல் சரிபார்க்கப்பட்டது" + }, + "emailVerificationRequiredDesc": { + "message": "இந்த அம்சத்தைப் பயன்படுத்த நீங்கள் உங்கள் மின்னஞ்சலைச் சரிபார்க்க வேண்டும். நீங்கள் வலை பெட்டகத்தில் உங்கள் மின்னஞ்சலைச் சரிபார்க்கலாம்." + }, + "masterPasswordSuccessfullySet": { + "message": "முதன்மை கடவுச்சொல் வெற்றிகரமாக அமைக்கப்பட்டது" + }, + "updatedMasterPassword": { + "message": "புதுப்பிக்கப்பட்ட முதன்மை கடவுச்சொல்" + }, + "updateMasterPassword": { + "message": "முதன்மை கடவுச்சொல்லைப் புதுப்பி" + }, + "updateMasterPasswordWarning": { + "message": "உங்கள் முதன்மை கடவுச்சொல் சமீபத்தில் உங்கள் நிறுவனத்தில் ஒரு நிர்வாகியால் மாற்றப்பட்டது. பெட்டகத்தை அணுக, நீங்கள் அதை இப்போது புதுப்பிக்க வேண்டும். தொடர்வது உங்கள் தற்போதைய அமர்விலிருந்து உங்களை வெளியேற்றும், மீண்டும் உள்நுழைய வேண்டும். மற்ற சாதனங்களில் உள்ள செயலில் உள்ள அமர்வுகள் ஒரு மணிநேரம் வரை செயலில் இருக்கலாம்." + }, + "updateWeakMasterPasswordWarning": { + "message": "உங்கள் முதன்மை கடவுச்சொல் உங்கள் நிறுவன கொள்கைகளில் ஒன்று அல்லது அதற்கு மேற்பட்டவற்றை பூர்த்தி செய்யவில்லை. பெட்டகத்தை அணுக, நீங்கள் உங்கள் முதன்மை கடவுச்சொல்லை இப்போது புதுப்பிக்க வேண்டும். தொடர்வது உங்கள் தற்போதைய அமர்விலிருந்து உங்களை வெளியேற்றும், மீண்டும் உள்நுழைய வேண்டும். மற்ற சாதனங்களில் உள்ள செயலில் உள்ள அமர்வுகள் ஒரு மணிநேரம் வரை செயலில் இருக்கலாம்." + }, + "tdeDisabledMasterPasswordRequired": { + "message": "உங்கள் நிறுவனம் நம்பகமான சாதன குறியாக்கத்தை முடக்கியுள்ளது. உங்கள் பெட்டகத்தை அணுக ஒரு முதன்மை கடவுச்சொல்லை அமைக்கவும்." + }, + "resetPasswordPolicyAutoEnroll": { + "message": "தானியங்கி பதிவு" + }, + "resetPasswordAutoEnrollInviteWarning": { + "message": "இந்த நிறுவனத்தில் ஒரு நிறுவன கொள்கை உள்ளது, அது கடவுச்சொல் மீட்டமைப்பில் உங்களை தானாகவே பதிவு செய்யும். பதிவு செய்வது நிறுவன நிர்வாகிகளை உங்கள் முதன்மை கடவுச்சொல்லை மாற்ற அனுமதிக்கும்." + }, + "selectFolder": { + "message": "கோப்புறையைத் தேர்ந்தெடு..." + }, + "noFoldersFound": { + "message": "கோப்புறைகள் எதுவும் இல்லை", + "description": "Used as a message within the notification bar when no folders are found" + }, + "orgPermissionsUpdatedMustSetPassword": { + "message": "உங்கள் நிறுவன அனுமதிகள் புதுப்பிக்கப்பட்டன, உங்கள் முதன்மை கடவுச்சொல்லை அமைக்க வேண்டும்.", + "description": "Used as a card title description on the set password page to explain why the user is there" + }, + "orgRequiresYouToSetPassword": { + "message": "உங்கள் நிறுவனம் ஒரு முதன்மை கடவுச்சொல்லை அமைக்க உங்களைக் கோருகிறது.", + "description": "Used as a card title description on the set password page to explain why the user is there" + }, + "cardMetrics": { + "message": "$TOTAL$ இல்", + "placeholders": { + "total": { + "content": "$1", + "example": "5" + } + } + }, + "verificationRequired": { + "message": "சரிபார்ப்பு தேவை", + "description": "Default title for the user verification dialog." + }, + "hours": { + "message": "மணிநேரம்" + }, + "minutes": { + "message": "நிமிடங்கள்" + }, + "vaultTimeoutPolicyAffectingOptions": { + "message": "நிறுவன கொள்கை தேவைகள் உங்கள் காலக்கெடு விருப்பங்களுக்குப் பயன்படுத்தப்பட்டுள்ளன" + }, + "vaultTimeoutPolicyInEffect": { + "message": "உங்கள் நிறுவன கொள்கைகள் உங்கள் அதிகபட்ச அனுமதிக்கப்பட்ட பெட்டக காலக்கெடுவை $HOURS$ மணிநேரம் மற்றும் $MINUTES$ நிமிடங்களாக அமைத்துள்ளன.", + "placeholders": { + "hours": { + "content": "$1", + "example": "5" + }, + "minutes": { + "content": "$2", + "example": "5" + } + } + }, + "vaultTimeoutPolicyInEffect1": { + "message": "$HOURS$ மணிநேரம் மற்றும் $MINUTES$ நிமிடங்கள் அதிகபட்சம்.", + "placeholders": { + "hours": { + "content": "$1", + "example": "5" + }, + "minutes": { + "content": "$2", + "example": "5" + } + } + }, + "vaultTimeoutPolicyMaximumError": { + "message": "காலக்கெடு உங்கள் நிறுவனத்தால் அமைக்கப்பட்ட கட்டுப்பாட்டை மீறுகிறது: $HOURS$ மணிநேரம் மற்றும் $MINUTES$ நிமிடங்கள் அதிகபட்சம்", + "placeholders": { + "hours": { + "content": "$1", + "example": "5" + }, + "minutes": { + "content": "$2", + "example": "5" + } + } + }, + "vaultTimeoutPolicyWithActionInEffect": { + "message": "உங்கள் நிறுவன கொள்கைகள் உங்கள் பெட்டக காலக்கெடுவைப் பாதிக்கின்றன. அதிகபட்ச அனுமதிக்கப்பட்ட பெட்டக காலக்கெடு $HOURS$ மணிநேரம் மற்றும் $MINUTES$ நிமிடங்கள். உங்கள் பெட்டக காலக்கெடு நடவடிக்கை $ACTION$ ஆக அமைக்கப்பட்டுள்ளது.", + "placeholders": { + "hours": { + "content": "$1", + "example": "5" + }, + "minutes": { + "content": "$2", + "example": "5" + }, + "action": { + "content": "$3", + "example": "Lock" + } + } + }, + "vaultTimeoutActionPolicyInEffect": { + "message": "உங்கள் நிறுவன கொள்கைகள் உங்கள் பெட்டக காலக்கெடு நடவடிக்கையை $ACTION$ ஆக அமைத்துள்ளன.", + "placeholders": { + "action": { + "content": "$1", + "example": "Lock" + } + } + }, + "vaultTimeoutTooLarge": { + "message": "உங்கள் பெட்டக காலக்கெடு உங்கள் நிறுவனத்தால் அமைக்கப்பட்ட கட்டுப்பாடுகளை மீறுகிறது." + }, + "vaultExportDisabled": { + "message": "பெட்டக ஏற்றுமதி கிடைக்கவில்லை" + }, + "personalVaultExportPolicyInEffect": { + "message": "ஒன்று அல்லது அதற்கு மேற்பட்ட நிறுவன கொள்கைகள் உங்கள் தனிப்பட்ட பெட்டகத்தை ஏற்றுமதி செய்வதிலிருந்து உங்களைத் தடுக்கின்றன." + }, + "copyCustomFieldNameInvalidElement": { + "message": "செல்லுபடியாகும் படிவ உறுப்பை அடையாளம் காண முடியவில்லை. அதற்கு பதிலாக HTML ஐ ஆய்வு செய்ய முயற்சிக்கவும்." + }, + "copyCustomFieldNameNotUnique": { + "message": "தனிப்பட்ட அடையாளங்காட்டி எதுவும் இல்லை." + }, + "removeMasterPasswordForOrganizationUserKeyConnector": { + "message": "பின்வரும் நிறுவனத்தின் உறுப்பினர்களுக்கு இனி ஒரு முதன்மை கடவுச்சொல் தேவையில்லை. உங்கள் நிறுவன நிர்வாகியுடன் கீழே உள்ள டொமைனை உறுதிப்படுத்தவும்." + }, + "organizationName": { + "message": "நிறுவன பெயர்" + }, + "keyConnectorDomain": { + "message": "விசை இணைப்பான் டொமைன்" + }, + "leaveOrganization": { + "message": "நிறுவனத்திலிருந்து விலகு" + }, + "removeMasterPassword": { + "message": "முதன்மை கடவுச்சொல்லை அகற்று" + }, + "removedMasterPassword": { + "message": "முதன்மை கடவுச்சொல் அகற்றப்பட்டது" + }, + "leaveOrganizationConfirmation": { + "message": "நீங்கள் இந்த நிறுவனத்திலிருந்து விலக விரும்புகிறீர்களா?" + }, + "leftOrganization": { + "message": "நீங்கள் நிறுவனத்திலிருந்து விலகிவிட்டீர்கள்." + }, + "toggleCharacterCount": { + "message": "எழுத்து எண்ணிக்கையை மாற்று" + }, + "sessionTimeout": { + "message": "உங்கள் அமர்வு காலாவதியாகிவிட்டது. தயவுசெய்து திரும்பிச் சென்று மீண்டும் உள்நுழைய முயற்சிக்கவும்." + }, + "exportingPersonalVaultTitle": { + "message": "தனிப்பட்ட பெட்டகத்தை ஏற்றுமதி செய்கிறது" + }, + "exportingIndividualVaultDescription": { + "message": "$EMAIL$ உடன் தொடர்புடைய தனிப்பட்ட பெட்டக பொருட்கள் மட்டுமே ஏற்றுமதி செய்யப்படும். நிறுவன பெட்டக பொருட்கள் சேர்க்கப்படாது. பெட்டக பொருள் தகவல்கள் மட்டுமே ஏற்றுமதி செய்யப்படும் மற்றும் அதனுடன் தொடர்புடைய இணைப்புகள் சேர்க்கப்படாது.", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + } + } + }, + "exportingIndividualVaultWithAttachmentsDescription": { + "message": "$EMAIL$ உடன் தொடர்புடைய இணைப்புகள் உட்பட தனிப்பட்ட பெட்டக பொருட்கள் மட்டுமே ஏற்றுமதி செய்யப்படும். நிறுவன பெட்டக பொருட்கள் சேர்க்கப்படாது", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + } + } + }, + "exportingOrganizationVaultTitle": { + "message": "நிறுவன பெட்டகத்தை ஏற்றுமதி செய்கிறது" + }, + "exportingOrganizationVaultDesc": { + "message": "$ORGANIZATION$ உடன் தொடர்புடைய நிறுவன பெட்டகம் மட்டுமே ஏற்றுமதி செய்யப்படும். தனிப்பட்ட பெட்டகங்கள் அல்லது பிற நிறுவனங்களில் உள்ள பொருட்கள் சேர்க்கப்படாது.", + "placeholders": { + "organization": { + "content": "$1", + "example": "ACME Moving Co." + } + } + }, + "exportingOrganizationVaultFromPasswordManagerWithDataOwnershipDesc": { + "message": "Only the organization vault associated with $ORGANIZATION$ will be exported.", + "placeholders": { + "organization": { + "content": "$1", + "example": "My Org Name" + } + } + }, + "exportingOrganizationVaultFromAdminConsoleWithDataOwnershipDesc": { + "message": "Only the organization vault associated with $ORGANIZATION$ will be exported. My items collections will not be included.", + "placeholders": { + "organization": { + "content": "$1", + "example": "My Org Name" + } + } + }, + "error": { + "message": "பிழை" + }, + "decryptionError": { + "message": "குறியாக்கம் நீக்கப் பிழை" + }, + "couldNotDecryptVaultItemsBelow": { + "message": "Bitwarden கீழே பட்டியலிடப்பட்ட பெட்டக பொருளை குறியாக்கம் நீக்க முடியவில்லை." + }, + "contactCSToAvoidDataLossPart1": { + "message": "கூடுதல் தரவு இழப்பைத் தவிர்க்க", + "description": "This is part of a larger sentence. The full sentence will read 'Contact customer success to avoid additional data loss.'" + }, + "contactCSToAvoidDataLossPart2": { + "message": "வாடிக்கையாளர் ஆதரவைத் தொடர்பு கொள்ளவும்.", + "description": "This is part of a larger sentence. The full sentence will read 'Contact customer success to avoid additional data loss.'" + }, + "generateUsername": { + "message": "பயனர் பெயரை உருவாக்கு" + }, + "generateEmail": { + "message": "மின்னஞ்சலை உருவாக்கு" + }, + "spinboxBoundariesHint": { + "message": "மதிப்பு $MIN$ மற்றும் $MAX$ க்கு இடையில் இருக்க வேண்டும்.", + "description": "Explains spin box minimum and maximum values to the user", + "placeholders": { + "min": { + "content": "$1", + "example": "8" + }, + "max": { + "content": "$2", + "example": "128" + } + } + }, + "passwordLengthRecommendationHint": { + "message": " ஒரு வலுவான கடவுச்சொல்லை உருவாக்க $RECOMMENDED$ எழுத்துகள் அல்லது அதற்கு மேற்பட்டவற்றைப் பயன்படுத்தவும்.", + "description": "Appended to `spinboxBoundariesHint` to recommend a length to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "14" + } + } + }, + "passphraseNumWordsRecommendationHint": { + "message": " ஒரு வலுவான கடவுச்சொல் சொற்றொடரை உருவாக்க $RECOMMENDED$ சொற்கள் அல்லது அதற்கு மேற்பட்டவற்றைப் பயன்படுத்தவும்.", + "description": "Appended to `spinboxBoundariesHint` to recommend a number of words to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", + "placeholders": { + "recommended": { + "content": "$1", + "example": "6" + } + } + }, + "plusAddressedEmail": { + "message": "பிளஸ் முகவரியிடப்பட்ட மின்னஞ்சல்", + "description": "Username generator option that appends a random sub-address to the username. For example: address+subaddress@email.com" + }, + "plusAddressedEmailDesc": { + "message": "உங்கள் மின்னஞ்சல் வழங்குநரின் துணை-முகவரி திறன்களைப் பயன்படுத்தவும்." + }, + "catchallEmail": { + "message": "அனைத்தையும் ஏற்றுக்கொள்ளும் மின்னஞ்சல்" + }, + "catchallEmailDesc": { + "message": "உங்கள் டொமைனின் கட்டமைக்கப்பட்ட அனைத்தையும் ஏற்றுக்கொள்ளும் இன்பாக்ஸைப் பயன்படுத்தவும்." + }, + "random": { + "message": "சீரற்ற" + }, + "randomWord": { + "message": "சீரற்ற சொல்" + }, + "websiteName": { + "message": "இணையதள பெயர்" + }, + "service": { + "message": "சேவை" + }, + "forwardedEmail": { + "message": "முன்னனுப்பப்பட்ட மின்னஞ்சல் புனைப்பெயர்" + }, + "forwardedEmailDesc": { + "message": "ஒரு வெளிப்புற அனுப்புதல் சேவையுடன் ஒரு மின்னஞ்சல் புனைப்பெயரை உருவாக்கு." + }, + "forwarderDomainName": { + "message": "மின்னஞ்சல் டொமைன்", + "description": "Labels the domain name email forwarder service option" + }, + "forwarderDomainNameHint": { + "message": "தேர்ந்தெடுக்கப்பட்ட சேவையால் ஆதரிக்கப்படும் ஒரு டொமைனைத் தேர்ந்தெடு", + "description": "Guidance provided for email forwarding services that support multiple email domains." + }, + "forwarderError": { + "message": "$SERVICENAME$ பிழை: $ERRORMESSAGE$", + "description": "Reports an error returned by a forwarding service to the user.", + "placeholders": { + "servicename": { + "content": "$1", + "example": "SimpleLogin" + }, + "errormessage": { + "content": "$2", + "example": "Invalid characters in domain name." + } + } + }, + "forwarderGeneratedBy": { + "message": "Bitwarden மூலம் உருவாக்கப்பட்டது.", + "description": "Displayed with the address on the forwarding service's configuration screen." + }, + "forwarderGeneratedByWithWebsite": { + "message": "இணையதளம்: $WEBSITE$. Bitwarden மூலம் உருவாக்கப்பட்டது.", + "description": "Displayed with the address on the forwarding service's configuration screen.", + "placeholders": { + "WEBSITE": { + "content": "$1", + "example": "www.example.com" + } + } + }, + "forwaderInvalidToken": { + "message": "செல்லாத $SERVICENAME$ API டோக்கன்", + "description": "Displayed when the user's API token is empty or rejected by the forwarding service.", + "placeholders": { + "servicename": { + "content": "$1", + "example": "SimpleLogin" + } + } + }, + "forwaderInvalidTokenWithMessage": { + "message": "செல்லாத $SERVICENAME$ API டோக்கன்: $ERRORMESSAGE$", + "description": "Displayed when the user's API token is rejected by the forwarding service with an error message.", + "placeholders": { + "servicename": { + "content": "$1", + "example": "SimpleLogin" + }, + "errormessage": { + "content": "$2", + "example": "Please verify your email address to continue." + } + } + }, + "forwaderInvalidOperation": { + "message": "$SERVICENAME$ உங்கள் கோரிக்கையை நிராகரித்தது. உதவிக்கு உங்கள் சேவை வழங்குநரைத் தொடர்பு கொள்ளவும்.", + "description": "Displayed when the user is forbidden from using the API by the forwarding service.", + "placeholders": { + "servicename": { + "content": "$1", + "example": "SimpleLogin" + } + } + }, + "forwaderInvalidOperationWithMessage": { + "message": "$SERVICENAME$ உங்கள் கோரிக்கையை நிராகரித்தது: $ERRORMESSAGE$", + "description": "Displayed when the user is forbidden from using the API by the forwarding service with an error message.", + "placeholders": { + "servicename": { + "content": "$1", + "example": "SimpleLogin" + }, + "errormessage": { + "content": "$2", + "example": "Please verify your email address to continue." + } + } + }, + "forwarderNoAccountId": { + "message": "$SERVICENAME$ மறைக்கப்பட்ட மின்னஞ்சல் கணக்கு ID ஐப் பெற முடியவில்லை.", + "description": "Displayed when the forwarding service fails to return an account ID.", + "placeholders": { + "servicename": { + "content": "$1", + "example": "SimpleLogin" + } + } + }, + "forwarderNoDomain": { + "message": "செல்லாத $SERVICENAME$ டொமைன்.", + "description": "Displayed when the domain is empty or domain authorization failed at the forwarding service.", + "placeholders": { + "servicename": { + "content": "$1", + "example": "SimpleLogin" + } + } + }, + "forwarderNoUrl": { + "message": "செல்லாத $SERVICENAME$ URL.", + "description": "Displayed when the url of the forwarding service wasn't supplied.", + "placeholders": { + "servicename": { + "content": "$1", + "example": "SimpleLogin" + } + } + }, + "forwarderUnknownError": { + "message": "தெரியாத $SERVICENAME$ பிழை ஏற்பட்டது.", + "description": "Displayed when the forwarding service failed due to an unknown error.", + "placeholders": { + "servicename": { + "content": "$1", + "example": "SimpleLogin" + } + } + }, + "forwarderUnknownForwarder": { + "message": "தெரியாத ஃபார்வர்டர்: '$SERVICENAME$'.", + "description": "Displayed when the forwarding service is not supported.", + "placeholders": { + "servicename": { + "content": "$1", + "example": "JustTrust.us" + } + } + }, + "hostname": { + "message": "ஹோஸ்ட் பெயர்", + "description": "Part of a URL." + }, + "apiAccessToken": { + "message": "API அணுகல் டோக்கன்" + }, + "apiKey": { + "message": "API சாவி" + }, + "ssoKeyConnectorError": { + "message": "சாவி இணைப்பி பிழை: சாவி இணைப்பி கிடைப்பதை மற்றும் சரியாக வேலை செய்வதை உறுதிப்படுத்தவும்." + }, + "premiumSubcriptionRequired": { + "message": "பிரீமியம் சந்தா தேவை" + }, + "organizationIsDisabled": { + "message": "நிறுவனம் இடைநிறுத்தப்பட்டது." + }, + "disabledOrganizationFilterError": { + "message": "இடைநிறுத்தப்பட்ட நிறுவனங்களில் உள்ள உருப்படிகளை அணுக முடியாது. உதவிக்கு உங்கள் நிறுவன உரிமையாளரைத் தொடர்பு கொள்ளுங்கள்." + }, + "loggingInTo": { + "message": "$DOMAIN$-க்குள் உள்நுழைகிறது", + "placeholders": { + "domain": { + "content": "$1", + "example": "example.com" + } + } + }, + "serverVersion": { + "message": "சர்வர் பதிப்பு" + }, + "selfHostedServer": { + "message": "சுயமாக ஹோஸ்ட் செய்யப்பட்டது" + }, + "thirdParty": { + "message": "மூன்றாம் தரப்பு" + }, + "thirdPartyServerMessage": { + "message": "மூன்றாம் தரப்பு சர்வர் செயல்படுத்தலுடன் இணைக்கப்பட்டுள்ளது, $SERVERNAME$. அதிகாரப்பூர்வ சேவையகத்தைப் பயன்படுத்தி பிழைகளைச் சரிபார்க்கவும், அல்லது மூன்றாம் தரப்பு சேவையகத்திற்கு புகாரளிக்கவும்.", + "placeholders": { + "servername": { + "content": "$1", + "example": "ThirdPartyServerName" + } + } + }, + "lastSeenOn": { + "message": "கடைசியாக பார்த்தது: $DATE$", + "placeholders": { + "date": { + "content": "$1", + "example": "Jun 15, 2015" + } + } + }, + "loginWithMasterPassword": { + "message": "மாஸ்டர் கடவுச்சொல்லுடன் உள்நுழைக" + }, + "newAroundHere": { + "message": "இங்கே புதியவரா?" + }, + "rememberEmail": { + "message": "மின்னஞ்சலை நினைவில் கொள்க" + }, + "loginWithDevice": { + "message": "சாதனத்துடன் உள்நுழைக" + }, + "fingerprintPhraseHeader": { + "message": "கைரேகை சொற்றொடர்" + }, + "fingerprintMatchInfo": { + "message": "உங்கள் வால்ட் திறக்கப்பட்டிருப்பதையும் கைரேகை சொற்றொடர் மற்ற சாதனத்தில் பொருந்துவதையும் உறுதிப்படுத்தவும்." + }, + "resendNotification": { + "message": "அறிவிப்பை மீண்டும் அனுப்பவும்" + }, + "viewAllLogInOptions": { + "message": "அனைத்து உள்நுழைவு விருப்பங்களையும் காண்க" + }, + "notificationSentDevice": { + "message": "உங்கள் சாதனத்திற்கு அறிவிப்பு அனுப்பப்பட்டுள்ளது." + }, + "notificationSentDevicePart1": { + "message": "உங்கள் சாதனத்தில் அல்லது" + }, + "notificationSentDeviceAnchor": { + "message": "வலை செயலியில்" + }, + "notificationSentDevicePart2": { + "message": "Bitwarden-ஐ திறக்கவும். ஒப்புதல் அளிப்பதற்கு முன், கைரேகை சொற்றொடர் கீழே உள்ளவற்றுடன் பொருந்துவதை உறுதிப்படுத்தவும்." + }, + "aNotificationWasSentToYourDevice": { + "message": "உங்கள் சாதனத்திற்கு ஒரு அறிவிப்பு அனுப்பப்பட்டது" + }, + "youWillBeNotifiedOnceTheRequestIsApproved": { + "message": "கோரிக்கை அங்கீகரிக்கப்பட்டதும் உங்களுக்கு அறிவிக்கப்படும்" + }, + "needAnotherOptionV1": { + "message": "வேறொரு விருப்பம் தேவையா?" + }, + "loginInitiated": { + "message": "உள்நுழைவு தொடங்கப்பட்டது" + }, + "logInRequestSent": { + "message": "கோரிக்கை அனுப்பப்பட்டது" + }, + "loginRequestApprovedForEmailOnDevice": { + "message": "$DEVICE$-இல் உள்ள $EMAIL$-க்கான உள்நுழைவு கோரிக்கை அங்கீகரிக்கப்பட்டது", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + }, + "device": { + "content": "$2", + "example": "Web app - Chrome" + } + } + }, + "youDeniedLoginAttemptFromAnotherDevice": { + "message": "மற்றொரு சாதனத்திலிருந்து உள்நுழைய நீங்கள் மேற்கொண்ட முயற்சியை மறுத்துவிட்டீர்கள். இது நீங்களாக இருந்தால், மீண்டும் அந்தச் சாதனத்துடன் உள்நுழைய முயற்சிக்கவும்." + }, + "device": { + "message": "சாதனம்" + }, + "loginStatus": { + "message": "உள்நுழைவு நிலை" + }, + "masterPasswordChanged": { + "message": "மாஸ்டர் கடவுச்சொல் சேமிக்கப்பட்டது" + }, + "exposedMasterPassword": { + "message": "வெளியான மாஸ்டர் கடவுச்சொல்" + }, + "exposedMasterPasswordDesc": { + "message": "தரவு மீறலில் கடவுச்சொல் கண்டறியப்பட்டது. உங்கள் கணக்கைப் பாதுகாக்க ஒரு தனிப்பட்ட கடவுச்சொல்லைப் பயன்படுத்தவும். வெளியான கடவுச்சொல்லைப் பயன்படுத்த நீங்கள் உறுதியாக இருக்கிறீர்களா?" + }, + "weakAndExposedMasterPassword": { + "message": "பலவீனமான மற்றும் வெளியான மாஸ்டர் கடவுச்சொல்" + }, + "weakAndBreachedMasterPasswordDesc": { + "message": "பலவீனமான கடவுச்சொல் அடையாளம் காணப்பட்டு, தரவு மீறலில் கண்டறியப்பட்டது. உங்கள் கணக்கைப் பாதுகாக்க வலுவான மற்றும் தனிப்பட்ட கடவுச்சொல்லைப் பயன்படுத்தவும். இந்தக் கடவுச்சொல்லைப் பயன்படுத்த நீங்கள் உறுதியாக இருக்கிறீர்களா?" + }, + "checkForBreaches": { + "message": "இந்தக் கடவுச்சொல்லுக்கான அறியப்பட்ட தரவு மீறல்களைச் சரிபார்க்கவும்" + }, + "important": { + "message": "முக்கியமானது:" + }, + "masterPasswordHint": { + "message": "உங்கள் மாஸ்டர் கடவுச்சொல்லை மறந்துவிட்டால் அதை மீண்டும் பெற முடியாது!" + }, + "characterMinimum": { + "message": "$LENGTH$ எழுத்துக்கள் குறைந்தது", + "placeholders": { + "length": { + "content": "$1", + "example": "14" + } + } + }, + "autofillPageLoadPolicyActivated": { + "message": "பக்கம் ஏற்றப்படும்போது தானியங்கு நிரப்புதலை உங்கள் நிறுவனக் கொள்கைகள் செயல்படுத்தியுள்ளன." + }, + "autofillSelectInfoWithCommand": { + "message": "இந்தத் திரையில் இருந்து ஒரு உருப்படியைத் தேர்ந்தெடுக்கவும், $COMMAND$ என்ற குறுக்குவழியைப் பயன்படுத்தவும் அல்லது அமைப்புகளில் பிற விருப்பங்களை ஆராயவும்.", + "placeholders": { + "command": { + "content": "$1", + "example": "CTRL+Shift+L" + } + } + }, + "autofillSelectInfoWithoutCommand": { + "message": "இந்தத் திரையில் இருந்து ஒரு உருப்படியைத் தேர்ந்தெடுக்கவும், அல்லது அமைப்புகளில் பிற விருப்பங்களை ஆராயவும்." + }, + "gotIt": { + "message": "புரிந்துகொண்டேன்" + }, + "autofillSettings": { + "message": "தானியங்கு நிரப்புதல் அமைப்புகள்" + }, + "autofillKeyboardShortcutSectionTitle": { + "message": "தானியங்கு நிரப்புதல் குறுக்குவழி" + }, + "autofillKeyboardShortcutUpdateLabel": { + "message": "குறுக்குவழியை மாற்று" + }, + "autofillKeyboardManagerShortcutsLabel": { + "message": "குறுக்குவழிகளை நிர்வகி" + }, + "autofillShortcut": { + "message": "தானியங்கு நிரப்புதல் விசைப்பலகை குறுக்குவழி" + }, + "autofillLoginShortcutNotSet": { + "message": "தானியங்கு நிரப்புதல் உள்நுழைவு குறுக்குவழி அமைக்கப்படவில்லை. இதை உலாவியின் அமைப்புகளில் மாற்றவும்." + }, + "autofillLoginShortcutText": { + "message": "தானியங்கு நிரப்புதல் உள்நுழைவு குறுக்குவழி $COMMAND$ ஆகும். உலாவியின் அமைப்புகளில் அனைத்து குறுக்குவழிகளையும் நிர்வகிக்கவும்.", + "placeholders": { + "command": { + "content": "$1", + "example": "CTRL+Shift+L" + } + } + }, + "autofillShortcutTextSafari": { + "message": "இயல்புநிலை தானியங்கு நிரப்புதல் குறுக்குவழி: $COMMAND$.", + "placeholders": { + "command": { + "content": "$1", + "example": "CTRL+Shift+L" + } + } + }, + "opensInANewWindow": { + "message": "புதிய சாளரத்தில் திறக்கும்" + }, + "rememberThisDeviceToMakeFutureLoginsSeamless": { + "message": "எதிர்கால உள்நுழைவுகளை தடையற்றதாக மாற்ற இந்தச் சாதனத்தை நினைவில் கொள்க" + }, + "manageDevices": { + "message": "சாதனங்களை நிர்வகி" + }, + "currentSession": { + "message": "தற்போதைய அமர்வு" + }, + "mobile": { + "message": "மொபைல்", + "description": "Mobile app" + }, + "extension": { + "message": "விரிவாக்கம்", + "description": "Browser extension/addon" + }, + "desktop": { + "message": "டெஸ்க்டாப்", + "description": "Desktop app" + }, + "webVault": { + "message": "வலை வால்ட்" + }, + "webApp": { + "message": "வலை செயலி" + }, + "cli": { + "message": "CLI" + }, + "sdk": { + "message": "SDK", + "description": "Software Development Kit" + }, + "requestPending": { + "message": "கோரிக்கை நிலுவையில் உள்ளது" + }, + "firstLogin": { + "message": "முதல் உள்நுழைவு" + }, + "trusted": { + "message": "நம்பகமானது" + }, + "needsApproval": { + "message": "அங்கீகாரம் தேவை" + }, + "devices": { + "message": "சாதனங்கள்" + }, + "accessAttemptBy": { + "message": "$EMAIL$ மூலம் அணுகல் முயற்சி", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + } + } + }, + "confirmAccess": { + "message": "அணுகலை உறுதிப்படுத்து" + }, + "denyAccess": { + "message": "அணுகலை மறு" + }, + "time": { + "message": "நேரம்" + }, + "deviceType": { + "message": "சாதன வகை" + }, + "loginRequest": { + "message": "உள்நுழைவு கோரிக்கை" + }, + "thisRequestIsNoLongerValid": { + "message": "இந்தக் கோரிக்கை இனி செல்லாது." + }, + "loginRequestHasAlreadyExpired": { + "message": "உள்நுழைவு கோரிக்கை ஏற்கனவே காலாவதியாகிவிட்டது." + }, + "justNow": { + "message": "இப்போதுதான்" + }, + "requestedXMinutesAgo": { + "message": "$MINUTES$ நிமிடங்களுக்கு முன் கோரப்பட்டது", + "placeholders": { + "minutes": { + "content": "$1", + "example": "5" + } + } + }, + "deviceApprovalRequired": { + "message": "சாதன அங்கீகாரம் தேவை. கீழே உள்ள அங்கீகரிப்பு விருப்பங்களில் ஒன்றைத் தேர்ந்தெடுக்கவும்:" + }, + "deviceApprovalRequiredV2": { + "message": "சாதன அங்கீகாரம் தேவை" + }, + "selectAnApprovalOptionBelow": { + "message": "கீழே உள்ள அங்கீகரிப்பு விருப்பங்களில் ஒன்றைத் தேர்ந்தெடுக்கவும்" + }, + "rememberThisDevice": { + "message": "இந்தச் சாதனத்தை நினைவில் கொள்க" + }, + "uncheckIfPublicDevice": { + "message": "பொது சாதனத்தைப் பயன்படுத்தினால் தேர்வு செய்யாதே" + }, + "approveFromYourOtherDevice": { + "message": "உங்கள் மற்ற சாதனத்திலிருந்து அங்கீகரி" + }, + "requestAdminApproval": { + "message": "நிர்வாகி அங்கீகாரத்தைக் கோரு" + }, + "unableToCompleteLogin": { + "message": "உள்நுழைவை முடிக்க முடியவில்லை" + }, + "loginOnTrustedDeviceOrAskAdminToAssignPassword": { + "message": "நீங்கள் ஒரு நம்பகமான சாதனத்தில் உள்நுழைய வேண்டும் அல்லது உங்கள் நிர்வாகியிடம் கடவுச்சொல்லை ஒதுக்குமாறு கேட்க வேண்டும்." + }, + "ssoIdentifierRequired": { + "message": "நிறுவன SSO அடையாளங்காட்டி தேவை." + }, + "creatingAccountOn": { + "message": "கணக்கை உருவாக்குகிறது" + }, + "checkYourEmail": { + "message": "உங்கள் மின்னஞ்சலைச் சரிபார்க்கவும்" + }, + "followTheLinkInTheEmailSentTo": { + "message": "அனுப்பப்பட்ட மின்னஞ்சலில் உள்ள இணைப்பைப் பின்பற்றவும்" + }, + "andContinueCreatingYourAccount": { + "message": "மேலும் உங்கள் கணக்கை உருவாக்கத் தொடரவும்." + }, + "noEmail": { + "message": "மின்னஞ்சல் இல்லையா?" + }, + "goBack": { + "message": "திரும்பிச் செல்" + }, + "toEditYourEmailAddress": { + "message": "உங்கள் மின்னஞ்சல் முகவரியைத் திருத்த." + }, + "eu": { + "message": "EU", + "description": "European Union" + }, + "accessDenied": { + "message": "அணுகல் மறுக்கப்பட்டது. இந்த பக்கத்தை பார்க்க உங்களுக்கு அனுமதி இல்லை." + }, + "general": { + "message": "பொது" + }, + "display": { + "message": "காட்சி" + }, + "accountSuccessfullyCreated": { + "message": "கணக்கு வெற்றிகரமாக உருவாக்கப்பட்டது!" + }, + "adminApprovalRequested": { + "message": "நிர்வாகி அங்கீகாரம் கோரப்பட்டது" + }, + "adminApprovalRequestSentToAdmins": { + "message": "உங்கள் கோரிக்கை உங்கள் நிர்வாகிக்கு அனுப்பப்பட்டுள்ளது." + }, + "troubleLoggingIn": { + "message": "உள்நுழைவதில் சிக்கலா?" + }, + "loginApproved": { + "message": "உள்நுழைவு அங்கீகரிக்கப்பட்டது" + }, + "userEmailMissing": { + "message": "பயனர் மின்னஞ்சல் இல்லை" + }, + "activeUserEmailNotFoundLoggingYouOut": { + "message": "செயலில் உள்ள பயனர் மின்னஞ்சல் கண்டறியப்படவில்லை. நீங்கள் வெளியேற்றப்படுகிறீர்கள்." + }, + "deviceTrusted": { + "message": "சாதனம் நம்பகமானது" + }, + "trustOrganization": { + "message": "நிறுவனத்தை நம்பு" + }, + "trust": { + "message": "நம்பு" + }, + "doNotTrust": { + "message": "நம்பாதே" + }, + "organizationNotTrusted": { + "message": "நிறுவனம் நம்பகமானது அல்ல" + }, + "emergencyAccessTrustWarning": { + "message": "உங்கள் கணக்கின் பாதுகாப்பிற்காக, நீங்கள் இந்த பயனருக்கு அவசர அணுகலை வழங்கியிருந்தால் மட்டுமே உறுதிப்படுத்தவும், மேலும் அவர்களின் கைரேகை அவர்களின் கணக்கில் காட்டப்படும்வற்றுடன் பொருந்துவதை உறுதிப்படுத்தவும்" + }, + "orgTrustWarning": { + "message": "உங்கள் கணக்கின் பாதுகாப்பிற்காக, நீங்கள் இந்த நிறுவனத்தின் உறுப்பினராக இருந்தால், கணக்கு மீட்டெடுப்பு இயக்கப்பட்டு இருந்தால், மற்றும் கீழே காட்டப்படும் கைரேகை நிறுவனத்தின் கைரேகையுடன் பொருந்தினால் மட்டுமே தொடரவும்." + }, + "orgTrustWarning1": { + "message": "இந்த நிறுவனத்திற்கு ஒரு என்டர்பிரைஸ் கொள்கை உள்ளது, அது உங்களை கணக்கு மீட்டெடுப்பில் பதிவு செய்யும். பதிவு, நிறுவனத்தின் நிர்வாகிகளை உங்கள் கடவுச்சொல்லை மாற்ற அனுமதிக்கும். இந்த நிறுவனத்தை நீங்கள் அடையாளம் கண்டால், மற்றும் கீழே காட்டப்படும் கைரேகை சொற்றொடர் நிறுவனத்தின் கைரேகையுடன் பொருந்தினால் மட்டுமே தொடரவும்." + }, + "trustUser": { + "message": "பயனரை நம்பு" + }, + "sendsTitleNoItems": { + "message": "உணர்திறன் வாய்ந்த தகவல்களைப் பாதுகாப்பாக அனுப்பவும்", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "sendsBodyNoItems": { + "message": "கோப்புகள் மற்றும் தரவை யாருடனும், எந்த தளத்திலும் பாதுகாப்பாகப் பகிரவும். உங்கள் தகவல் எண்ட்-டு-எண்ட் என்க்ரிப்ட் செய்யப்பட்டிருக்கும், அதே நேரத்தில் வெளிப்பாட்டைக் கட்டுப்படுத்தும்.", + "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." + }, + "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" + } + } + }, + "singleFieldNeedsAttention": { + "message": "1 புலம் உங்கள் கவனத்தை கோருகிறது." + }, + "multipleFieldsNeedAttention": { + "message": "$COUNT$ புலங்களுக்கு உங்கள் கவனம் தேவை.", + "placeholders": { + "count": { + "content": "$1", + "example": "2" + } + } + }, + "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." + }, + "aliasDomain": { + "message": "புனைப்பெயர் டொமைன்" + }, + "autofillOnPageLoadSetToDefault": { + "message": "பக்க ஏற்றத்தில் தானியங்கு நிரப்புதல் இயல்புநிலை அமைப்பைப் பயன்படுத்த அமைக்கப்பட்டுள்ளது.", + "description": "Toast message for informing the user that autofill on page load has been set to the default setting." + }, + "toggleSideNavigation": { + "message": "பக்க வழிசெலுத்தலை மாற்று" + }, + "skipToContent": { + "message": "உள்ளடக்கத்திற்கு செல்க" + }, + "bitwardenOverlayButton": { + "message": "Bitwarden தானியங்கு நிரப்புதல் மெனு பொத்தான்", + "description": "Page title for the iframe containing the overlay button" + }, + "toggleBitwardenVaultOverlay": { + "message": "Bitwarden தானியங்கு நிரப்புதல் மெனுவைத் மாற்று", + "description": "Screen reader and tool tip label for the overlay button" + }, + "bitwardenVault": { + "message": "Bitwarden தானியங்கு நிரப்புதல் மெனு", + "description": "Page title in overlay" + }, + "unlockYourAccountToViewMatchingLogins": { + "message": "பொருந்தும் உள்நுழைவுகளைக் காண உங்கள் கணக்கைத் திறக்கவும்", + "description": "Text to display in overlay when the account is locked." + }, + "unlockYourAccountToViewAutofillSuggestions": { + "message": "தானியங்கு நிரப்புதல் பரிந்துரைகளைக் காண உங்கள் கணக்கைத் திறக்கவும்", + "description": "Text to display in overlay when the account is locked." + }, + "unlockAccount": { + "message": "கணக்கைத் திற", + "description": "Button text to display in overlay when the account is locked." + }, + "unlockAccountAria": { + "message": "உங்கள் கணக்கைத் திறக்கவும், புதிய சாளரத்தில் திறக்கும்", + "description": "Screen reader text (aria-label) for unlock account button in overlay" + }, + "totpCodeAria": { + "message": "நேர அடிப்படையிலான ஒரு முறை கடவுச்சொல் சரிபார்ப்புக் குறியீடு", + "description": "Aria label for the totp code displayed in the inline menu for autofill" + }, + "totpSecondsSpanAria": { + "message": "தற்போதைய TOTP காலாவதியாவதற்கு முன் மீதமுள்ள நேரம்", + "description": "Aria label for the totp seconds displayed in the inline menu for autofill" + }, + "fillCredentialsFor": { + "message": "இதற்கான அங்கீகார சான்றுகளை நிரப்பு", + "description": "Screen reader text for when overlay item is in focused" + }, + "partialUsername": { + "message": "பகுதி பயனர் பெயர்", + "description": "Screen reader text for when a login item is focused where a partial username is displayed. SR will announce this phrase before reading the text of the partial username" + }, + "noItemsToShow": { + "message": "காட்ட உருப்படிகள் இல்லை", + "description": "Text to show in overlay if there are no matching items" + }, + "newItem": { + "message": "புதிய உருப்படி", + "description": "Button text to display in overlay when there are no matching items" + }, + "addNewVaultItem": { + "message": "புதிய வால்ட் உருப்படியைச் சேர்", + "description": "Screen reader text (aria-label) for new item button in overlay" + }, + "newLogin": { + "message": "புதிய உள்நுழைவு", + "description": "Button text to display within inline menu when there are no matching items on a login field" + }, + "addNewLoginItemAria": { + "message": "புதிய வால்ட் உள்நுழைவு உருப்படியைச் சேர், புதிய சாளரத்தில் திறக்கும்", + "description": "Screen reader text (aria-label) for new login button within inline menu" + }, + "newCard": { + "message": "புதிய அட்டை", + "description": "Button text to display within inline menu when there are no matching items on a credit card field" + }, + "addNewCardItemAria": { + "message": "புதிய வால்ட் அட்டை உருப்படியைச் சேர், புதிய சாளரத்தில் திறக்கும்", + "description": "Screen reader text (aria-label) for new card button within inline menu" + }, + "newIdentity": { + "message": "புதிய அடையாளம்", + "description": "Button text to display within inline menu when there are no matching items on an identity field" + }, + "addNewIdentityItemAria": { + "message": "புதிய வால்ட் அடையாள உருப்படியைச் சேர், புதிய சாளரத்தில் திறக்கும்", + "description": "Screen reader text (aria-label) for new identity button within inline menu" + }, + "bitwardenOverlayMenuAvailable": { + "message": "Bitwarden தானியங்கு நிரப்புதல் மெனு கிடைக்கிறது. தேர்ந்தெடுக்க கீழ் அம்புக்குறி விசையை அழுத்தவும்.", + "description": "Screen reader text for announcing when the overlay opens on the page" + }, + "turnOn": { + "message": "இயக்கு" + }, + "ignore": { + "message": "புறக்கணி" + }, + "importData": { + "message": "தரவை இறக்குமதி செய்", + "description": "Used for the header of the import dialog, the import button and within the file-password-prompt" + }, + "importError": { + "message": "இறக்குமதி பிழை" + }, + "importErrorDesc": { + "message": "நீங்கள் இறக்குமதி செய்ய முயன்ற தரவில் சிக்கல் இருந்தது. உங்கள் மூலக் கோப்பில் கீழே பட்டியலிடப்பட்ட பிழைகளைத் தீர்த்துவிட்டு மீண்டும் முயற்சிக்கவும்." + }, + "resolveTheErrorsBelowAndTryAgain": { + "message": "கீழே உள்ள பிழைகளைத் தீர்த்துவிட்டு மீண்டும் முயற்சிக்கவும்." + }, + "description": { + "message": "விளக்கம்" + }, + "importSuccess": { + "message": "தரவு வெற்றிகரமாக இறக்குமதி செய்யப்பட்டது" + }, + "importSuccessNumberOfItems": { + "message": "மொத்தம் $AMOUNT$ உருப்படிகள் இறக்குமதி செய்யப்பட்டன.", + "placeholders": { + "amount": { + "content": "$1", + "example": "2" + } + } + }, + "tryAgain": { + "message": "மீண்டும் முயற்சி செய்" + }, + "verificationRequiredForActionSetPinToContinue": { + "message": "இந்த செயலுக்கு சரிபார்ப்பு தேவை. தொடர ஒரு PIN-ஐ அமைக்கவும்." + }, + "setPin": { + "message": "PIN-ஐ அமை" + }, + "verifyWithBiometrics": { + "message": "பயோமெட்ரிக்ஸ் மூலம் சரிபார்" + }, + "awaitingConfirmation": { + "message": "உறுதிப்படுத்தலுக்காக காத்திருக்கிறது" + }, + "couldNotCompleteBiometrics": { + "message": "பயோமெட்ரிக்ஸை முடிக்க முடியவில்லை." + }, + "needADifferentMethod": { + "message": "வேறு முறை தேவையா?" + }, + "useMasterPassword": { + "message": "மாஸ்டர் கடவுச்சொல்லைப் பயன்படுத்து" + }, + "usePin": { + "message": "PIN-ஐப் பயன்படுத்து" + }, + "useBiometrics": { + "message": "பயோமெட்ரிக்ஸைப் பயன்படுத்து" + }, + "enterVerificationCodeSentToEmail": { + "message": "உங்கள் மின்னஞ்சலுக்கு அனுப்பப்பட்ட சரிபார்ப்புக் குறியீட்டை உள்ளிடவும்." + }, + "resendCode": { + "message": "குறியீட்டை மீண்டும் அனுப்பு" + }, + "total": { + "message": "மொத்தம்" + }, + "importWarning": { + "message": "நீங்கள் $ORGANIZATION$-க்கு தரவை இறக்குமதி செய்கிறீர்கள். உங்கள் தரவு இந்த நிறுவனத்தின் உறுப்பினர்களுடன் பகிரப்படலாம். தொடர விரும்புகிறீர்களா?", + "placeholders": { + "organization": { + "content": "$1", + "example": "My Org Name" + } + } + }, + "duoHealthCheckResultsInNullAuthUrlError": { + "message": "Duo சேவையுடன் இணைப்பதில் பிழை. வேறு இரு-படி உள்நுழைவு முறையைப் பயன்படுத்தவும் அல்லது உதவிக்கு Duo-வைத் தொடர்பு கொள்ளவும்." + }, + "duoRequiredForAccount": { + "message": "உங்கள் கணக்கிற்கு Duo இரு-படி உள்நுழைவு தேவை." + }, + "popoutExtension": { + "message": "விரிவாக்கத்தை வெளியே எடு" + }, + "launchDuo": { + "message": "Duo-வை தொடங்கு" + }, + "importFormatError": { + "message": "தரவு சரியாக வடிவமைக்கப்படவில்லை. உங்கள் இறக்குமதி கோப்பைச் சரிபார்த்து மீண்டும் முயற்சிக்கவும்." + }, + "importNothingError": { + "message": "எதுவும் இறக்குமதி செய்யப்படவில்லை." + }, + "importEncKeyError": { + "message": "ஏற்றுமதி செய்யப்பட்ட கோப்பை குறியாக்கம் நீக்குவதில் பிழை. உங்கள் என்க்ரிப்ஷன் சாவி, தரவை ஏற்றுமதி செய்யப் பயன்படுத்தப்பட்ட என்க்ரிப்ஷன் சாவுடன் பொருந்தவில்லை." + }, + "invalidFilePassword": { + "message": "தவறான கோப்பு கடவுச்சொல், ஏற்றுமதி கோப்பை உருவாக்கும்போது நீங்கள் உள்ளிட்ட கடவுச்சொல்லைப் பயன்படுத்தவும்." + }, + "destination": { + "message": "சேருமிடம்" + }, + "learnAboutImportOptions": { + "message": "உங்கள் இறக்குமதி விருப்பங்களைப் பற்றி அறிக" + }, + "selectImportFolder": { + "message": "ஒரு கோப்புறையைத் தேர்ந்தெடு" + }, + "selectImportCollection": { + "message": "ஒரு சேகரிப்பைத் தேர்ந்தெடு" + }, + "importTargetHintCollection": { + "message": "இறக்குமதி செய்யப்பட்ட கோப்பு உள்ளடக்கங்கள் ஒரு சேகரிப்புக்கு நகர்த்தப்பட விரும்பினால் இந்த விருப்பத்தைத் தேர்ந்தெடுக்கவும்" + }, + "importTargetHintFolder": { + "message": "இறக்குமதி செய்யப்பட்ட கோப்பு உள்ளடக்கங்கள் ஒரு கோப்புறைக்கு நகர்த்தப்பட விரும்பினால் இந்த விருப்பத்தைத் தேர்ந்தெடுக்கவும்" + }, + "importUnassignedItemsError": { + "message": "கோப்பில் ஒதுக்கப்படாத உருப்படிகள் உள்ளன." + }, + "selectFormat": { + "message": "இறக்குமதி கோப்பின் வடிவத்தைத் தேர்ந்தெடுக்கவும்" + }, + "selectImportFile": { + "message": "இறக்குமதி கோப்பைத் தேர்ந்தெடுக்கவும்" + }, + "chooseFile": { + "message": "கோப்பைத் தேர்ந்தெடு" + }, + "noFileChosen": { + "message": "கோப்பு எதுவும் தேர்ந்தெடுக்கப்படவில்லை" + }, + "orCopyPasteFileContents": { + "message": "அல்லது இறக்குமதி கோப்பின் உள்ளடக்கத்தை நகலெடுத்து ஒட்டவும்" + }, + "instructionsFor": { + "message": "$NAME$ வழிமுறைகள்", + "description": "The title for the import tool instructions.", + "placeholders": { + "name": { + "content": "$1", + "example": "LastPass (csv)" + } + } + }, + "confirmVaultImport": { + "message": "வால்ட் இறக்குமதியை உறுதிப்படுத்தவும்" + }, + "confirmVaultImportDesc": { + "message": "இந்தக் கோப்பு கடவுச்சொல் பாதுகாக்கப்பட்டது. தரவை இறக்குமதி செய்ய, கோப்பின் கடவுச்சொல்லை உள்ளிடவும்." + }, + "confirmFilePassword": { + "message": "கோப்பு கடவுச்சொல்லை உறுதிப்படுத்தவும்" + }, + "exportSuccess": { + "message": "வால்ட் தரவு ஏற்றுமதி செய்யப்பட்டது" + }, + "typePasskey": { + "message": "பாஸ்கி" + }, + "accessing": { + "message": "அணுகுகிறது" + }, + "loggedInExclamation": { + "message": "உள்நுழைந்துவிட்டது!" + }, + "passkeyNotCopied": { + "message": "பாஸ்கி நகலெடுக்கப்படாது" + }, + "passkeyNotCopiedAlert": { + "message": "பாஸ்கி குளோன் செய்யப்பட்ட உருப்படிக்கு நகலெடுக்கப்படாது. இந்த உருப்படியைக் குளோன் செய்வதைத் தொடர விரும்புகிறீர்களா?" + }, + "logInWithPasskeyQuestion": { + "message": "பாஸ்கியுடன் உள்நுழைய வேண்டுமா?" + }, + "passkeyAlreadyExists": { + "message": "இந்த அப்ளிகேஷனுக்கு ஒரு பாஸ்கி ஏற்கனவே உள்ளது." + }, + "noPasskeysFoundForThisApplication": { + "message": "இந்த அப்ளிகேஷனுக்கு பாஸ்கிகள் எதுவும் கண்டறியப்படவில்லை." + }, + "noMatchingPasskeyLogin": { + "message": "இந்த தளத்திற்கான பொருத்தமான உள்நுழைவு உங்களிடம் இல்லை." + }, + "noMatchingLoginsForSite": { + "message": "இந்த தளத்திற்குப் பொருத்தமான உள்நுழைவுகள் எதுவும் இல்லை" + }, + "searchSavePasskeyNewLogin": { + "message": "தேடவும் அல்லது பாஸ்கியை புதிய உள்நுழைவாகச் சேமிக்கவும்" + }, + "confirm": { + "message": "உறுதிப்படுத்து" + }, + "savePasskey": { + "message": "பாஸ்கியைச் சேமி" + }, + "savePasskeyNewLogin": { + "message": "புதிய உள்நுழைவாகப் பாஸ்கியைச் சேமி" + }, + "chooseCipherForPasskeySave": { + "message": "இந்த பாஸ்கியைச் சேமிக்க ஒரு உள்நுழைவைத் தேர்ந்தெடுக்கவும்" + }, + "chooseCipherForPasskeyAuth": { + "message": "உள்நுழைய ஒரு பாஸ்கியைத் தேர்ந்தெடுக்கவும்" + }, + "passkeyItem": { + "message": "பாஸ்கி உருப்படி" + }, + "overwritePasskey": { + "message": "பாஸ்கியை மேலெழுத வேண்டுமா?" + }, + "overwritePasskeyAlert": { + "message": "இந்த உருப்படியில் ஏற்கனவே ஒரு பாஸ்கி உள்ளது. தற்போதைய பாஸ்கியை மேலெழுத விரும்புகிறீர்களா?" + }, + "featureNotSupported": { + "message": "இந்த அம்சம் இன்னும் ஆதரிக்கப்படவில்லை" + }, + "yourPasskeyIsLocked": { + "message": "பாஸ்கியைப் பயன்படுத்த அங்கீகாரம் தேவை. தொடர உங்கள் அடையாளத்தைச் சரிபார்க்கவும்." + }, + "multifactorAuthenticationCancelled": { + "message": "பல காரணி அங்கீகாரம் ரத்து செய்யப்பட்டது" + }, + "noLastPassDataFound": { + "message": "LastPass தரவு எதுவும் கண்டறியப்படவில்லை" + }, + "incorrectUsernameOrPassword": { + "message": "தவறான பயனர்பெயர் அல்லது கடவுச்சொல்" + }, + "incorrectPassword": { + "message": "தவறான கடவுச்சொல்" + }, + "incorrectCode": { + "message": "தவறான குறியீடு" + }, + "incorrectPin": { + "message": "தவறான PIN" + }, + "multifactorAuthenticationFailed": { + "message": "பல காரணி அங்கீகாரம் தோல்வியடைந்தது" + }, + "includeSharedFolders": { + "message": "பகிரப்பட்ட கோப்புறைகளைச் சேர்" + }, + "lastPassEmail": { + "message": "LastPass மின்னஞ்சல்" + }, + "importingYourAccount": { + "message": "உங்கள் கணக்கைப் புதுப்பிக்கிறது..." + }, + "lastPassMFARequired": { + "message": "LastPass பல காரணி அங்கீகாரம் தேவை" + }, + "lastPassMFADesc": { + "message": "உங்கள் அங்கீகரிப்பு அப்ளிகேஷனில் இருந்து ஒரு முறை கடவுச்சொல்லை உள்ளிடவும்" + }, + "lastPassOOBDesc": { + "message": "உங்கள் அங்கீகரிப்பு அப்ளிகேஷனில் உள்நுழைவு கோரிக்கையை அங்கீகரிக்கவும் அல்லது ஒரு முறை கடவுச்சொல்லை உள்ளிடவும்." + }, + "passcode": { + "message": "கடவுச்சொல்" + }, + "lastPassMasterPassword": { + "message": "LastPass மாஸ்டர் கடவுச்சொல்" + }, + "lastPassAuthRequired": { + "message": "LastPass அங்கீகாரம் தேவை" + }, + "awaitingSSO": { + "message": "SSO அங்கீகாரத்திற்காகக் காத்திருக்கிறது" + }, + "awaitingSSODesc": { + "message": "உங்கள் நிறுவனத்தின் சான்றுகளைப் பயன்படுத்தி உள்நுழைவைத் தொடரவும்." + }, + "seeDetailedInstructions": { + "message": "எங்கள் உதவி தளத்தில் விரிவான வழிமுறைகளைப் பார்க்கவும்", + "description": "This is followed a by a hyperlink to the help website." + }, + "importDirectlyFromLastPass": { + "message": "LastPass-லிருந்து நேரடியாக இறக்குமதி செய்" + }, + "importFromCSV": { + "message": "CSV-லிருந்து இறக்குமதி செய்" + }, + "lastPassTryAgainCheckEmail": { + "message": "மீண்டும் முயற்சிக்கவும் அல்லது அது நீங்கள் தானா என்பதைச் சரிபார்க்க LastPass-லிருந்து வந்த மின்னஞ்சலைத் தேடவும்." + }, + "collection": { + "message": "சேகரிப்பு" + }, + "lastPassYubikeyDesc": { + "message": "உங்கள் LastPass கணக்குடன் தொடர்புடைய YubiKey-யை உங்கள் கம்ப்யூட்டரின் USB போர்ட்டில் செருகவும், பின்னர் அதன் பட்டனைத் தொடவும்." + }, + "switchAccount": { + "message": "கணக்கை மாற்று" + }, + "switchAccounts": { + "message": "கணக்குகளை மாற்று" + }, + "switchToAccount": { + "message": "கணக்கிற்கு மாறு" + }, + "activeAccount": { + "message": "செயலில் உள்ள கணக்கு" + }, + "bitwardenAccount": { + "message": "Bitwarden கணக்கு" + }, + "availableAccounts": { + "message": "கிடைக்கும் கணக்குகள்" + }, + "accountLimitReached": { + "message": "கணக்கு வரம்பு எட்டப்பட்டது. மற்றொரு கணக்கைச் சேர்க்க, ஒரு கணக்கிலிருந்து வெளியேறவும்." + }, + "active": { + "message": "செயலில் உள்ளது" + }, + "locked": { + "message": "பூட்டப்பட்டது" + }, + "unlocked": { + "message": "திறக்கப்பட்டது" + }, + "server": { + "message": "சர்வர்" + }, + "hostedAt": { + "message": "இதில் ஹோஸ்ட் செய்யப்பட்டுள்ளது" + }, + "useDeviceOrHardwareKey": { + "message": "உங்கள் சாதனம் அல்லது ஹார்டுவேர் கீயைப் பயன்படுத்தவும்" + }, + "justOnce": { + "message": "ஒரு முறை மட்டும்" + }, + "alwaysForThisSite": { + "message": "இந்தத் தளத்திற்கு எப்போதும்" + }, + "domainAddedToExcludedDomains": { + "message": "$DOMAIN$ விலக்கப்பட்ட டொமைன்களில் சேர்க்கப்பட்டது.", + "placeholders": { + "domain": { + "content": "$1", + "example": "duckduckgo.com" + } + } + }, + "commonImportFormats": { + "message": "பொதுவான வடிவங்கள்", + "description": "Label indicating the most common import formats" + }, + "uriMatchDefaultStrategyHint": { + "message": "URI மேட்ச் டிடெக்‌ஷன் என்பது Bitwarden தன்னியக்க நிரப்புதல் பரிந்துரைகளை எப்படி அடையாளம் காண்கிறது என்பதைக் குறிக்கிறது.", + "description": "Explains to the user that URI match detection determines how Bitwarden suggests autofill options, and clarifies that this default strategy applies when no specific match detection is set for a login item." + }, + "regExAdvancedOptionWarning": { + "message": "\"Regular expression\" என்பது ஒரு மேம்பட்ட விருப்பத்தேர்வு, இதில் சான்றுகள் அம்பலப்படுத்தப்படும் ஆபத்து அதிகம் உள்ளது.", + "description": "Content for dialog which warns a user when selecting 'regular expression' matching strategy as a cipher match strategy" + }, + "startsWithAdvancedOptionWarning": { + "message": "\"Starts with\" என்பது ஒரு மேம்பட்ட விருப்பத்தேர்வு, இதில் சான்றுகள் அம்பலப்படுத்தப்படும் ஆபத்து அதிகம் உள்ளது.", + "description": "Content for dialog which warns a user when selecting 'starts with' matching strategy as a cipher match strategy" + }, + "uriMatchWarningDialogLink": { + "message": "பொருத்தமான கண்டறிதல் பற்றி மேலும் அறிக", + "description": "Link to match detection docs on warning dialog for advance match strategy" + }, + "uriAdvancedOption": { + "message": "மேம்பட்ட விருப்பத்தேர்வுகள்", + "description": "Advanced option placeholder for uri option component" + }, + "confirmContinueToBrowserSettingsTitle": { + "message": "உலாவி அமைப்புகளுக்குத் தொடர வேண்டுமா?", + "description": "Title for dialog which asks if the user wants to proceed to a relevant browser settings page" + }, + "confirmContinueToHelpCenter": { + "message": "உதவி மையத்திற்குத் தொடர வேண்டுமா?", + "description": "Title for dialog which asks if the user wants to proceed to a relevant Help Center page" + }, + "confirmContinueToHelpCenterPasswordManagementContent": { + "message": "உங்கள் உலாவியின் தன்னியக்க நிரப்புதல் மற்றும் கடவுச்சொல் மேலாண்மை அமைப்புகளை மாற்றவும்.", + "description": "Body content for dialog which asks if the user wants to proceed to the Help Center's page about browser password management settings" + }, + "confirmContinueToHelpCenterKeyboardShortcutsContent": { + "message": "உங்கள் உலாவியின் அமைப்புகளில் நீட்டிப்பு ஷார்ட்கட்களைப் பார்க்கலாம் மற்றும் அமைக்கலாம்.", + "description": "Body content for dialog which asks if the user wants to proceed to the Help Center's page about browser keyboard shortcut settings" + }, + "confirmContinueToBrowserPasswordManagementSettingsContent": { + "message": "உங்கள் உலாவியின் தன்னியக்க நிரப்புதல் மற்றும் கடவுச்சொல் மேலாண்மை அமைப்புகளை மாற்றவும்.", + "description": "Body content for dialog which asks if the user wants to proceed to the browser's password management settings page" + }, + "confirmContinueToBrowserKeyboardShortcutSettingsContent": { + "message": "உங்கள் உலாவியின் அமைப்புகளில் நீட்டிப்பு ஷார்ட்கட்களைப் பார்க்கலாம் மற்றும் அமைக்கலாம்.", + "description": "Body content for dialog which asks if the user wants to proceed to the browser's keyboard shortcut settings page" + }, + "overrideDefaultBrowserAutofillTitle": { + "message": "Bitwarden-ஐ உங்கள் இயல்புநிலை கடவுச்சொல் நிர்வாகியாக மாற்ற வேண்டுமா?", + "description": "Dialog title facilitating the ability to override a chrome browser's default autofill behavior" + }, + "overrideDefaultBrowserAutofillDescription": { + "message": "இந்த விருப்பத்தேர்வைப் புறக்கணிப்பது, Bitwarden தன்னியக்க நிரப்புதல் பரிந்துரைகளுக்கும் உங்கள் உலாவியின் பரிந்துரைகளுக்கும் இடையில் முரண்பாடுகளை ஏற்படுத்தலாம்.", + "description": "Dialog message facilitating the ability to override a chrome browser's default autofill behavior" + }, + "overrideDefaultBrowserAutoFillSettings": { + "message": "Bitwarden-ஐ உங்கள் இயல்புநிலை கடவுச்சொல் நிர்வாகியாக மாற்று", + "description": "Label for the setting that allows overriding the default browser autofill settings" + }, + "privacyPermissionAdditionNotGrantedTitle": { + "message": "Bitwarden-ஐ இயல்புநிலை கடவுச்சொல் நிர்வாகியாக அமைக்க முடியவில்லை", + "description": "Title for the dialog that appears when the user has not granted the extension permission to set privacy settings" + }, + "privacyPermissionAdditionNotGrantedDescription": { + "message": "Bitwarden-ஐ இயல்புநிலை கடவுச்சொல் நிர்வாகியாக அமைக்க, நீங்கள் உலாவியின் தனியுரிமை அனுமதிகளை வழங்க வேண்டும்.", + "description": "Description for the dialog that appears when the user has not granted the extension permission to set privacy settings" + }, + "makeDefault": { + "message": "இயல்புநிலையாக அமை", + "description": "Button text for the setting that allows overriding the default browser autofill settings" + }, + "saveCipherAttemptSuccess": { + "message": "சான்றுகள் வெற்றிகரமாகச் சேமிக்கப்பட்டன!", + "description": "Notification message for when saving credentials has succeeded." + }, + "passwordSaved": { + "message": "கடவுச்சொல் சேமிக்கப்பட்டது!", + "description": "Notification message for when saving credentials has succeeded." + }, + "updateCipherAttemptSuccess": { + "message": "சான்றுகள் வெற்றிகரமாகப் புதுப்பிக்கப்பட்டன!", + "description": "Notification message for when updating credentials has succeeded." + }, + "passwordUpdated": { + "message": "கடவுச்சொல் புதுப்பிக்கப்பட்டது!", + "description": "Notification message for when updating credentials has succeeded." + }, + "saveCipherAttemptFailed": { + "message": "சான்றுகளைச் சேமிப்பதில் பிழை ஏற்பட்டது. விவரங்களுக்குக் கன்சோலைச் சரிபார்க்கவும்.", + "description": "Notification message for when saving credentials has failed." + }, + "success": { + "message": "வெற்றி" + }, + "removePasskey": { + "message": "பாஸ்கியை அகற்று" + }, + "passkeyRemoved": { + "message": "பாஸ்கி அகற்றப்பட்டது" + }, + "autofillSuggestions": { + "message": "தன்னியக்க நிரப்புதல் பரிந்துரைகள்" + }, + "itemSuggestions": { + "message": "பரிந்துரைக்கப்பட்ட உருப்படிகள்" + }, + "autofillSuggestionsTip": { + "message": "தன்னியக்கமாக நிரப்புவதற்கு இந்தத் தளத்திற்கான உள்நுழைவு உருப்படியைச் சேமிக்கவும்" + }, + "yourVaultIsEmpty": { + "message": "உங்கள் வால்ட் காலியாக உள்ளது" + }, + "noItemsMatchSearch": { + "message": "உங்கள் தேடலுடன் பொருந்தக்கூடிய உருப்படிகள் எதுவும் இல்லை" + }, + "clearFiltersOrTryAnother": { + "message": "ஃபில்ட்டர்களை அகற்றுங்கள் அல்லது வேறு தேடல் சொல்லை முயற்சிக்கவும்" + }, + "copyInfoTitle": { + "message": "தகவலை நகலெடு - $ITEMNAME$", + "description": "Title for a button that opens a menu with options to copy information from an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "copyNoteTitle": { + "message": "குறிப்பை நகலெடு - $ITEMNAME$", + "description": "Title for a button copies a note to the clipboard.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Note Item" + } + } + }, + "moreOptionsLabel": { + "message": "மேலும் விருப்பத்தேர்வுகள், $ITEMNAME$", + "description": "Aria label for a button that opens a menu with more options for an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "moreOptionsTitle": { + "message": "மேலும் விருப்பத்தேர்வுகள் - $ITEMNAME$", + "description": "Title for a button that opens a menu with more options for an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "viewItemTitle": { + "message": "உருப்படியைப் பார் - $ITEMNAME$", + "description": "Title for a link that opens a view for an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "viewItemTitleWithField": { + "message": "உருப்படியைப் பார் - $ITEMNAME$ - $FIELD$", + "description": "Title for a link that opens a view for an item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + }, + "field": { + "content": "$2", + "example": "Username" + } + } + }, + "autofillTitle": { + "message": "தன்னியக்கமாக நிரப்பு - $ITEMNAME$", + "description": "Title for a button that autofills a login item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + } + } + }, + "autofillTitleWithField": { + "message": "தன்னியக்கமாக நிரப்பு - $ITEMNAME$ - $FIELD$", + "description": "Title for a button that autofills a login item.", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Secret Item" + }, + "field": { + "content": "$2", + "example": "Username" + } + } + }, + "copyFieldCipherName": { + "message": "நகலெடு $FIELD$, $CIPHERNAME$", + "description": "Title for a button that copies a field value to the clipboard.", + "placeholders": { + "field": { + "content": "$1", + "example": "Username" + }, + "ciphername": { + "content": "$2", + "example": "Login Item" + } + } + }, + "noValuesToCopy": { + "message": "நகலெடுக்க மதிப்புகள் எதுவும் இல்லை" + }, + "assignToCollections": { + "message": "சேகரிப்புகளுக்கு ஒதுக்கு" + }, + "copyEmail": { + "message": "மின்னஞ்சலை நகலெடு" + }, + "copyPhone": { + "message": "ஃபோனை நகலெடு" + }, + "copyAddress": { + "message": "முகவரியை நகலெடு" + }, + "adminConsole": { + "message": "நிர்வாகக் கன்சோல்" + }, + "accountSecurity": { + "message": "கணக்கு பாதுகாப்பு" + }, + "notifications": { + "message": "அறிவிப்புகள்" + }, + "appearance": { + "message": "தோற்றம்" + }, + "errorAssigningTargetCollection": { + "message": "இலக்கு சேகரிப்பை ஒதுக்குவதில் பிழை." + }, + "errorAssigningTargetFolder": { + "message": "இலக்கு கோப்புறையை ஒதுக்குவதில் பிழை." + }, + "viewItemsIn": { + "message": "$NAME$-இல் உள்ள உருப்படிகளைப் பார்", + "description": "Button to view the contents of a folder or collection", + "placeholders": { + "name": { + "content": "$1", + "example": "Work" + } + } + }, + "backTo": { + "message": "$NAME$-க்குத் திரும்பு", + "description": "Navigate back to a previous folder or collection", + "placeholders": { + "name": { + "content": "$1", + "example": "Work" + } + } + }, + "new": { + "message": "புதியது" + }, + "removeItem": { + "message": "$NAME$-ஐ அகற்று", + "description": "Remove a selected option, such as a folder or collection", + "placeholders": { + "name": { + "content": "$1", + "example": "Work" + } + } + }, + "itemsWithNoFolder": { + "message": "கோப்புறை இல்லாத உருப்படிகள்" + }, + "itemDetails": { + "message": "உருப்படி விவரங்கள்" + }, + "itemName": { + "message": "உருப்படி பெயர்" + }, + "organizationIsDeactivated": { + "message": "நிறுவனம் செயலிழக்கச் செய்யப்பட்டது" + }, + "owner": { + "message": "உரிமையாளர்" + }, + "selfOwnershipLabel": { + "message": "நீங்கள்", + "description": "Used as a label to indicate that the user is the owner of an item." + }, + "contactYourOrgAdmin": { + "message": "செயலிழக்கச் செய்யப்பட்ட நிறுவனங்களில் உள்ள உருப்படிகளை அணுக முடியாது. உதவிக்கு உங்கள் நிறுவன நிர்வாகியைத் தொடர்பு கொள்ளவும்." + }, + "additionalInformation": { + "message": "கூடுதல் தகவல்" + }, + "itemHistory": { + "message": "உருப்படி வரலாறு" + }, + "lastEdited": { + "message": "கடைசியாகத் திருத்தப்பட்டது" + }, + "ownerYou": { + "message": "உரிமையாளர்: நீங்கள்" + }, + "linked": { + "message": "இணைக்கப்பட்டது" + }, + "copySuccessful": { + "message": "வெற்றிகரமாக நகலெடுக்கப்பட்டது" + }, + "upload": { + "message": "பதிவேற்று" + }, + "addAttachment": { + "message": "இணைப்பைச் சேர்" + }, + "maxFileSizeSansPunctuation": { + "message": "அதிகபட்ச கோப்பு அளவு 500 MB ஆகும்" + }, + "deleteAttachmentName": { + "message": "இணைப்பு $NAME$-ஐ நீக்கு", + "placeholders": { + "name": { + "content": "$1", + "example": "Attachment Name" + } + } + }, + "downloadAttachmentName": { + "message": "பதிவிறக்கு $NAME$", + "placeholders": { + "name": { + "content": "$1", + "example": "Attachment Name" + } + } + }, + "downloadBitwarden": { + "message": "Bitwarden-ஐப் பதிவிறக்கு" + }, + "downloadBitwardenOnAllDevices": { + "message": "அனைத்துச் சாதனங்களிலும் Bitwarden-ஐப் பதிவிறக்கு" + }, + "getTheMobileApp": { + "message": "மொபைல் அப்ளிகேஷனைப் பெறு" + }, + "getTheMobileAppDesc": { + "message": "Bitwarden மொபைல் அப்ளிகேஷன் மூலம் எங்கு சென்றாலும் உங்கள் கடவுச்சொற்களை அணுகவும்." + }, + "getTheDesktopApp": { + "message": "டெஸ்க்டாப் அப்ளிகேஷனைப் பெறு" + }, + "getTheDesktopAppDesc": { + "message": "உலாவி இல்லாமலே உங்கள் வால்ட்டை அணுகவும், பின்னர் பயோமெட்ரிக்ஸுடன் திறப்பதைப் பதிவு செய்து, டெஸ்க்டாப் அப்ளிகேஷன் மற்றும் உலாவி நீட்டிப்பு இரண்டிலும் விரைவாகத் திறக்கலாம்." + }, + "downloadFromBitwardenNow": { + "message": "இப்போது bitwarden.com-லிருந்து பதிவிறக்கு" + }, + "getItOnGooglePlay": { + "message": "Google Play-இல் பெறு" + }, + "downloadOnTheAppStore": { + "message": "App Store-இல் பதிவிறக்கு" + }, + "permanentlyDeleteAttachmentConfirmation": { + "message": "இந்த இணைப்பை நிரந்தரமாக நீக்க விரும்புகிறீர்களா?" + }, + "premium": { + "message": "பிரீமியம்" + }, + "freeOrgsCannotUseAttachments": { + "message": "இலவச நிறுவனங்கள் இணைப்புகளைப் பயன்படுத்த முடியாது" + }, + "filters": { + "message": "ஃபில்ட்டர்கள்" + }, + "filterVault": { + "message": "வால்ட்டை ஃபில்ட்டர் செய்" + }, + "filterApplied": { + "message": "ஒரு ஃபில்ட்டர் பயன்படுத்தப்பட்டது" + }, + "filterAppliedPlural": { + "message": "$COUNT$ ஃபில்ட்டர்கள் பயன்படுத்தப்பட்டன", + "placeholders": { + "count": { + "content": "$1", + "example": "3" + } + } + }, + "personalDetails": { + "message": "தனிப்பட்ட விவரங்கள்" + }, + "identification": { + "message": "அடையாளம்" + }, + "contactInfo": { + "message": "தொடர்பு தகவல்" + }, + "downloadAttachment": { + "message": "பதிவிறக்கு - $ITEMNAME$", + "placeholders": { + "itemname": { + "content": "$1", + "example": "Your File" + } + } + }, + "cardNumberEndsWith": { + "message": "அட்டை எண் முடிவது", + "description": "Used within the inline menu to provide an aria description when users are attempting to fill a card cipher." + }, + "loginCredentials": { + "message": "உள்நுழைவுச் சான்றுகள்" + }, + "authenticatorKey": { + "message": "அங்கீகரிப்பு விசை" + }, + "autofillOptions": { + "message": "தன்னியக்க நிரப்புதல் விருப்பத்தேர்வுகள்" + }, + "websiteUri": { + "message": "வலைத்தளம் (URI)" + }, + "websiteUriCount": { + "message": "வலைத்தளம் (URI) $COUNT$", + "description": "Label for an input field that contains a website URI. The input field is part of a list of fields, and the count indicates the position of the field in the list.", + "placeholders": { + "count": { + "content": "$1", + "example": "3" + } + } + }, + "websiteAdded": { + "message": "வலைத்தளம் சேர்க்கப்பட்டது" + }, + "addWebsite": { + "message": "வலைத்தளத்தைச் சேர்" + }, + "deleteWebsite": { + "message": "வலைத்தளத்தை நீக்கு" + }, + "defaultLabel": { + "message": "இயல்புநிலை ($VALUE$)", + "description": "A label that indicates the default value for a field with the current default value in parentheses.", + "placeholders": { + "value": { + "content": "$1", + "example": "Base domain" + } + } + }, + "showMatchDetection": { + "message": "பொருத்தமான கண்டறிதலைக் காட்டு $WEBSITE$", + "placeholders": { + "website": { + "content": "$1", + "example": "https://example.com" + } + } + }, + "hideMatchDetection": { + "message": "பொருத்தமான கண்டறிதலை மறை $WEBSITE$", + "placeholders": { + "website": { + "content": "$1", + "example": "https://example.com" + } + } + }, + "autoFillOnPageLoad": { + "message": "பக்கத்தை ஏற்றும்போது தானாக நிரப்ப வேண்டுமா?" + }, + "cardExpiredTitle": { + "message": "காலாவதியான அட்டை" + }, + "cardExpiredMessage": { + "message": "புதுப்பித்திருந்தால், அட்டையின் தகவலைப் புதுப்பிக்கவும்" + }, + "cardDetails": { + "message": "அட்டை விவரங்கள்" + }, + "cardBrandDetails": { + "message": "$BRAND$ விவரங்கள்", + "placeholders": { + "brand": { + "content": "$1", + "example": "Visa" + } + } + }, + "showAnimations": { + "message": "அசைவூட்டங்களைக் காட்டு" + }, + "addAccount": { + "message": "கணக்கைச் சேர்" + }, + "loading": { + "message": "ஏற்றுகிறது" + }, + "data": { + "message": "தரவு" + }, + "passkeys": { + "message": "பாஸ்கிகள்", + "description": "A section header for a list of passkeys." + }, + "passwords": { + "message": "கடவுச்சொற்கள்", + "description": "A section header for a list of passwords." + }, + "logInWithPasskeyAriaLabel": { + "message": "பாஸ்கியுடன் உள்நுழை", + "description": "ARIA label for the inline menu button that logs in with a passkey." + }, + "assign": { + "message": "ஒதுக்கு" + }, + "bulkCollectionAssignmentDialogDescriptionSingular": { + "message": "இந்தச் சேகரிப்புகளை அணுகும் நிறுவன உறுப்பினர்கள் மட்டுமே இந்த உருப்படியைப் பார்க்க முடியும்." + }, + "bulkCollectionAssignmentDialogDescriptionPlural": { + "message": "இந்தச் சேகரிப்புகளை அணுகும் நிறுவன உறுப்பினர்கள் மட்டுமே இந்த உருப்படிகளைப் பார்க்க முடியும்." + }, + "bulkCollectionAssignmentWarning": { + "message": "நீங்கள் $TOTAL_COUNT$ உருப்படிகளைத் தேர்ந்தெடுத்துள்ளீர்கள். உங்களால் $READONLY_COUNT$ உருப்படிகளைப் புதுப்பிக்க முடியாது, ஏனெனில் உங்களிடம் திருத்துவதற்கான அனுமதிகள் இல்லை.", + "placeholders": { + "total_count": { + "content": "$1", + "example": "10" + }, + "readonly_count": { + "content": "$2" + } + } + }, + "addField": { + "message": "ஃபீல்டைச் சேர்" + }, + "add": { + "message": "சேர்" + }, + "fieldType": { + "message": "ஃபீல்டு வகை" + }, + "fieldLabel": { + "message": "ஃபீல்டு லேபிள்" + }, + "textHelpText": { + "message": "பாதுகாப்பு கேள்விகள் போன்ற தரவுகளுக்கு உரை புலங்களைப் பயன்படுத்தவும்" + }, + "hiddenHelpText": { + "message": "கடவுச்சொல் போன்ற முக்கியமான தரவுகளுக்கு மறைக்கப்பட்ட புலங்களைப் பயன்படுத்தவும்" + }, + "checkBoxHelpText": { + "message": "மின்னஞ்சலை நினைவில் வைப்பது போன்ற படிவத்தின் செக்பாக்ஸை தானாக நிரப்ப விரும்பினால் செக்பாக்ஸ்களைப் பயன்படுத்தவும்" + }, + "linkedHelpText": { + "message": "ஒரு குறிப்பிட்ட இணையதளத்திற்கு தானாக நிரப்புவதில் சிக்கல்கள் இருந்தால் ஒரு இணைக்கப்பட்ட புலத்தைப் பயன்படுத்தவும்." + }, + "linkedLabelHelpText": { + "message": "புலத்தின் html id, name, aria-label, அல்லது placeholder ஐ உள்ளிடவும்." + }, + "editField": { + "message": "புலத்தை திருத்தவும்" + }, + "editFieldLabel": { + "message": "$LABEL$ ஐ திருத்தவும்", + "placeholders": { + "label": { + "content": "$1", + "example": "Custom field" + } + } + }, + "deleteCustomField": { + "message": "$LABEL$ ஐ நீக்கவும்", + "placeholders": { + "label": { + "content": "$1", + "example": "Custom field" + } + } + }, + "fieldAdded": { + "message": "$LABEL$ சேர்க்கப்பட்டது", + "placeholders": { + "label": { + "content": "$1", + "example": "Custom field" + } + } + }, + "reorderToggleButton": { + "message": "$LABEL$ ஐ மறுவரிசைப்படுத்தவும். பொருளை மேலும் கீழும் நகர்த்த அம்புக்குறி விசையைப் பயன்படுத்தவும்.", + "placeholders": { + "label": { + "content": "$1", + "example": "Custom field" + } + } + }, + "reorderWebsiteUriButton": { + "message": "இணையதள URI ஐ மறுவரிசைப்படுத்தவும். பொருளை மேலும் கீழும் நகர்த்த அம்புக்குறி விசையைப் பயன்படுத்தவும்." + }, + "reorderFieldUp": { + "message": "$LABEL$ மேல்நோக்கி நகர்த்தப்பட்டது, நிலை $INDEX$ of $LENGTH$", + "placeholders": { + "label": { + "content": "$1", + "example": "Custom field" + }, + "index": { + "content": "$2", + "example": "1" + }, + "length": { + "content": "$3", + "example": "3" + } + } + }, + "selectCollectionsToAssign": { + "message": "ஒதுக்கப்பட வேண்டிய சேகரிப்புகளைத் தேர்ந்தெடுக்கவும்" + }, + "personalItemTransferWarningSingular": { + "message": "1 பொருள் தேர்ந்தெடுக்கப்பட்ட நிறுவனத்திற்கு நிரந்தரமாக மாற்றப்படும். இந்தப் பொருள் இனி உங்களிடம் இருக்காது." + }, + "personalItemsTransferWarningPlural": { + "message": "$PERSONAL_ITEMS_COUNT$ பொருள்கள் தேர்ந்தெடுக்கப்பட்ட நிறுவனத்திற்கு நிரந்தரமாக மாற்றப்படும். இந்தப் பொருள்கள் இனி உங்களிடம் இருக்காது.", + "placeholders": { + "personal_items_count": { + "content": "$1", + "example": "2" + } + } + }, + "personalItemWithOrgTransferWarningSingular": { + "message": "1 பொருள் நிரந்தரமாக $ORG$க்கு மாற்றப்படும். இந்தப் பொருள் இனி உங்களிடம் இருக்காது.", + "placeholders": { + "org": { + "content": "$1", + "example": "Organization name" + } + } + }, + "personalItemsWithOrgTransferWarningPlural": { + "message": "$PERSONAL_ITEMS_COUNT$ பொருள்கள் நிரந்தரமாக $ORG$க்கு மாற்றப்படும். இந்தப் பொருள்கள் இனி உங்களிடம் இருக்காது.", + "placeholders": { + "personal_items_count": { + "content": "$1", + "example": "2" + }, + "org": { + "content": "$2", + "example": "Organization name" + } + } + }, + "successfullyAssignedCollections": { + "message": "சேகரிப்புகள் வெற்றிகரமாக ஒதுக்கப்பட்டன" + }, + "nothingSelected": { + "message": "நீங்கள் எதையும் தேர்ந்தெடுக்கவில்லை." + }, + "itemsMovedToOrg": { + "message": "பொருள்கள் $ORGNAME$ க்கு நகர்த்தப்பட்டன", + "placeholders": { + "orgname": { + "content": "$1", + "example": "Company Name" + } + } + }, + "itemMovedToOrg": { + "message": "பொருள் $ORGNAME$க்கு நகர்த்தப்பட்டது", + "placeholders": { + "orgname": { + "content": "$1", + "example": "Company Name" + } + } + }, + "reorderFieldDown": { + "message": "$LABEL$ கீழ்நோக்கி நகர்த்தப்பட்டது, நிலை $INDEX$ of $LENGTH$", + "placeholders": { + "label": { + "content": "$1", + "example": "Custom field" + }, + "index": { + "content": "$2", + "example": "1" + }, + "length": { + "content": "$3", + "example": "3" + } + } + }, + "itemLocation": { + "message": "பொருளின் இருப்பிடம்" + }, + "fileSends": { + "message": "கோப்பு அனுப்புகள்" + }, + "textSends": { + "message": "உரை அனுப்புகள்" + }, + "accountActions": { + "message": "கணக்கு செயல்கள்" + }, + "showNumberOfAutofillSuggestions": { + "message": "நீட்டிப்பு ஐகானில் உள்நுழைவு தானாக நிரப்புவதற்கான பரிந்துரைகளின் எண்ணிக்கையைக் காட்டு" + }, + "accountAccessRequested": { + "message": "கணக்கு அணுகல் கோரப்பட்டது" + }, + "confirmAccessAttempt": { + "message": "$EMAIL$க்கான அணுகல் முயற்சியை உறுதிப்படுத்தவும்", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + } + } + }, + "showQuickCopyActions": { + "message": "சேமிப்பு பெட்டகத்தில் விரைவான நகல் செயல்களைக் காட்டு" + }, + "systemDefault": { + "message": "சிஸ்டம் இயல்புநிலை" + }, + "enterprisePolicyRequirementsApplied": { + "message": "பெருநிறுவன கொள்கை தேவைகள் இந்த அமைப்பிற்குப் பயன்படுத்தப்பட்டுள்ளன" + }, + "sshPrivateKey": { + "message": "தனிப்பட்ட விசை" + }, + "sshPublicKey": { + "message": "பொது விசை" + }, + "sshFingerprint": { + "message": "கைரேகை" + }, + "sshKeyAlgorithm": { + "message": "விசை வகை" + }, + "sshKeyAlgorithmED25519": { + "message": "ED25519" + }, + "sshKeyAlgorithmRSA2048": { + "message": "RSA 2048-பிட்" + }, + "sshKeyAlgorithmRSA3072": { + "message": "RSA 3072-பிட்" + }, + "sshKeyAlgorithmRSA4096": { + "message": "RSA 4096-பிட்" + }, + "retry": { + "message": "மீண்டும் முயற்சி செய்" + }, + "vaultCustomTimeoutMinimum": { + "message": "குறைந்தபட்ச தனிப்பயன் காலக்கெடு 1 நிமிடம் ஆகும்." + }, + "fileSavedToDevice": { + "message": "கோப்பு சாதனத்தில் சேமிக்கப்பட்டது. உங்கள் சாதன பதிவிறக்கங்களிலிருந்து நிர்வகிக்கவும்." + }, + "showCharacterCount": { + "message": "எழுத்து எண்ணிக்கையைக் காட்டு" + }, + "hideCharacterCount": { + "message": "எழுத்து எண்ணிக்கையை மறை" + }, + "itemsInTrash": { + "message": "குப்பையில் உள்ள பொருள்கள்" + }, + "noItemsInTrash": { + "message": "குப்பையில் பொருள்கள் இல்லை" + }, + "noItemsInTrashDesc": { + "message": "நீங்கள் நீக்கிய பொருள்கள் இங்கு தோன்றும் மற்றும் 30 நாட்களுக்குப் பிறகு நிரந்தரமாக நீக்கப்படும்" + }, + "trashWarning": { + "message": "30 நாட்களுக்கும் மேலாக குப்பையில் இருந்த பொருள்கள் தானாகவே நீக்கப்படும்" + }, + "restore": { + "message": "மீட்டெடு" + }, + "deleteForever": { + "message": "என்றென்றும் நீக்கு" + }, + "noEditPermissions": { + "message": "இந்த பொருளை திருத்த உங்களுக்கு அனுமதி இல்லை" + }, + "biometricsStatusHelptextUnlockNeeded": { + "message": "முதலில் PIN அல்லது கடவுச்சொல் திறத்தல் தேவைப்படுவதால் பயோமெட்ரிக் திறத்தல் கிடைக்கவில்லை." + }, + "biometricsStatusHelptextHardwareUnavailable": { + "message": "பயோமெட்ரிக் திறத்தல் தற்போது கிடைக்கவில்லை." + }, + "biometricsStatusHelptextAutoSetupNeeded": { + "message": "தவறாக அமைக்கப்பட்ட சிஸ்டம் கோப்புகள் காரணமாக பயோமெட்ரிக் திறத்தல் கிடைக்கவில்லை." + }, + "biometricsStatusHelptextManualSetupNeeded": { + "message": "தவறாக அமைக்கப்பட்ட சிஸ்டம் கோப்புகள் காரணமாக பயோமெட்ரிக் திறத்தல் கிடைக்கவில்லை." + }, + "biometricsStatusHelptextDesktopDisconnected": { + "message": "Bitwarden டெஸ்க்டாப் செயலி மூடப்பட்டதால் பயோமெட்ரிக் திறத்தல் கிடைக்கவில்லை." + }, + "biometricsStatusHelptextNotEnabledInDesktop": { + "message": "Bitwarden டெஸ்க்டாப் செயலியில் $EMAIL$க்கான பயோமெட்ரிக் திறத்தல் இயக்கப்படாததால் அது கிடைக்கவில்லை.", + "placeholders": { + "email": { + "content": "$1", + "example": "mail@example.com" + } + } + }, + "biometricsStatusHelptextUnavailableReasonUnknown": { + "message": "தெரியாத காரணங்களுக்காக பயோமெட்ரிக் திறத்தல் தற்போது கிடைக்கவில்லை." + }, + "unlockVault": { + "message": "உங்கள் சேமிப்பு பெட்டகத்தை நொடிகளில் திறக்கவும்" + }, + "unlockVaultDesc": { + "message": "உங்கள் சேமிப்பு பெட்டகத்தை விரைவாக அணுக உங்கள் திறத்தல் மற்றும் காலக்கெடு அமைப்புகளைத் தனிப்பயனாக்கலாம்." + }, + "unlockPinSet": { + "message": "பின் திறத்தல் அமைக்கப்பட்டது" + }, + "unlockWithBiometricSet": { + "message": "பயோமெட்ரிக்ஸுடன் திறத்தல் அமைக்கப்பட்டது" + }, + "authenticating": { + "message": "அங்கீகரிக்கிறது" + }, + "fillGeneratedPassword": { + "message": "உருவாக்கப்பட்ட கடவுச்சொல்லை நிரப்பு", + "description": "Heading for the password generator within the inline menu" + }, + "passwordRegenerated": { + "message": "கடவுச்சொல் மீண்டும் உருவாக்கப்பட்டது", + "description": "Notification message for when a password has been regenerated" + }, + "saveToBitwarden": { + "message": "Bitwarden இல் சேமி", + "description": "Confirmation message for saving a login to Bitwarden" + }, + "spaceCharacterDescriptor": { + "message": "இடைவெளி", + "description": "Represents the space key in screen reader content as a readable word" + }, + "tildeCharacterDescriptor": { + "message": "டில்ட்", + "description": "Represents the ~ key in screen reader content as a readable word" + }, + "backtickCharacterDescriptor": { + "message": "பேக்டிக்", + "description": "Represents the ` key in screen reader content as a readable word" + }, + "exclamationCharacterDescriptor": { + "message": "ஆச்சரியக்குறி", + "description": "Represents the ! key in screen reader content as a readable word" + }, + "atSignCharacterDescriptor": { + "message": "அட் சைன்", + "description": "Represents the @ key in screen reader content as a readable word" + }, + "hashSignCharacterDescriptor": { + "message": "ஹேஷ் சைன்", + "description": "Represents the # key in screen reader content as a readable word" + }, + "dollarSignCharacterDescriptor": { + "message": "டாலர் சைன்", + "description": "Represents the $ key in screen reader content as a readable word" + }, + "percentSignCharacterDescriptor": { + "message": "சதவீதக் குறி", + "description": "Represents the % key in screen reader content as a readable word" + }, + "caretCharacterDescriptor": { + "message": "கேரட்", + "description": "Represents the ^ key in screen reader content as a readable word" + }, + "ampersandCharacterDescriptor": { + "message": "ஆம்பசண்ட்", + "description": "Represents the & key in screen reader content as a readable word" + }, + "asteriskCharacterDescriptor": { + "message": "அஸ்டெரிஸ்க்", + "description": "Represents the * key in screen reader content as a readable word" + }, + "parenLeftCharacterDescriptor": { + "message": "இடது அடைப்புக்குறி", + "description": "Represents the ( key in screen reader content as a readable word" + }, + "parenRightCharacterDescriptor": { + "message": "வலது அடைப்புக்குறி", + "description": "Represents the ) key in screen reader content as a readable word" + }, + "hyphenCharacterDescriptor": { + "message": "கோடிட்ட கோடு", + "description": "Represents the _ key in screen reader content as a readable word" + }, + "underscoreCharacterDescriptor": { + "message": "ஹைபன்", + "description": "Represents the - key in screen reader content as a readable word" + }, + "plusCharacterDescriptor": { + "message": "கூட்டல்", + "description": "Represents the + key in screen reader content as a readable word" + }, + "equalsCharacterDescriptor": { + "message": "சமம்", + "description": "Represents the = key in screen reader content as a readable word" + }, + "braceLeftCharacterDescriptor": { + "message": "இடது பிரேஸ்", + "description": "Represents the { key in screen reader content as a readable word" + }, + "braceRightCharacterDescriptor": { + "message": "வலது பிரேஸ்", + "description": "Represents the } key in screen reader content as a readable word" + }, + "bracketLeftCharacterDescriptor": { + "message": "இடது பிராக்கெட்", + "description": "Represents the [ key in screen reader content as a readable word" + }, + "bracketRightCharacterDescriptor": { + "message": "வலது பிராக்கெட்", + "description": "Represents the ] key in screen reader content as a readable word" + }, + "pipeCharacterDescriptor": { + "message": "பைப்பு", + "description": "Represents the | key in screen reader content as a readable word" + }, + "backSlashCharacterDescriptor": { + "message": "பேக் ஸ்லாஷ்", + "description": "Represents the back slash key in screen reader content as a readable word" + }, + "colonCharacterDescriptor": { + "message": "கோலன்", + "description": "Represents the : key in screen reader content as a readable word" + }, + "semicolonCharacterDescriptor": { + "message": "அரைப்புள்ளி", + "description": "Represents the ; key in screen reader content as a readable word" + }, + "doubleQuoteCharacterDescriptor": { + "message": "இரட்டை மேற்கோள் குறி", + "description": "Represents the double quote key in screen reader content as a readable word" + }, + "singleQuoteCharacterDescriptor": { + "message": "ஒற்றை மேற்கோள் குறி", + "description": "Represents the ' key in screen reader content as a readable word" + }, + "lessThanCharacterDescriptor": { + "message": "குறைவான", + "description": "Represents the < key in screen reader content as a readable word" + }, + "greaterThanCharacterDescriptor": { + "message": "அதிகமான", + "description": "Represents the > key in screen reader content as a readable word" + }, + "commaCharacterDescriptor": { + "message": "கமா", + "description": "Represents the , key in screen reader content as a readable word" + }, + "periodCharacterDescriptor": { + "message": "புள்ளி", + "description": "Represents the . key in screen reader content as a readable word" + }, + "questionCharacterDescriptor": { + "message": "கேள்விக்குறி", + "description": "Represents the ? key in screen reader content as a readable word" + }, + "forwardSlashCharacterDescriptor": { + "message": "ஃபார்வர்ட் ஸ்லாஷ்", + "description": "Represents the / key in screen reader content as a readable word" + }, + "lowercaseAriaLabel": { + "message": "சிறிய எழுத்து" + }, + "uppercaseAriaLabel": { + "message": "பெரிய எழுத்து" + }, + "generatedPassword": { + "message": "உருவாக்கப்பட்ட கடவுச்சொல்" + }, + "compactMode": { + "message": "காம்பாக்ட் மோட்" + }, + "beta": { + "message": "பீட்டா" + }, + "extensionWidth": { + "message": "நீட்டிப்பு அகலம்" + }, + "wide": { + "message": "அகலமானது" + }, + "extraWide": { + "message": "அதிக அகலமானது" + }, + "sshKeyWrongPassword": { + "message": "நீங்கள் உள்ளிடப்பட்ட கடவுச்சொல் தவறானது." + }, + "importSshKey": { + "message": "இறக்குமதி" + }, + "confirmSshKeyPassword": { + "message": "கடவுச்சொல்லை உறுதிப்படுத்து" + }, + "enterSshKeyPasswordDesc": { + "message": "SSH விசையின் கடவுச்சொல்லை உள்ளிடவும்." + }, + "enterSshKeyPassword": { + "message": "கடவுச்சொல்லை உள்ளிடவும்" + }, + "invalidSshKey": { + "message": "SSH விசை செல்லாதது" + }, + "sshKeyTypeUnsupported": { + "message": "SSH விசை வகை ஆதரிக்கப்படவில்லை" + }, + "importSshKeyFromClipboard": { + "message": "கிளிப்போர்டிலிருந்து விசையை இறக்குமதி செய்" + }, + "sshKeyImported": { + "message": "SSH விசை வெற்றிகரமாக இறக்குமதி செய்யப்பட்டது" + }, + "cannotRemoveViewOnlyCollections": { + "message": "காட்சி மட்டுமே அனுமதியுடன் சேகரிப்புகளை நீங்கள் அகற்ற முடியாது: $COLLECTIONS$", + "placeholders": { + "collections": { + "content": "$1", + "example": "Work, Personal" + } + } + }, + "updateDesktopAppOrDisableFingerprintDialogTitle": { + "message": "உங்கள் டெஸ்க்டாப் செயலியைப் புதுப்பிக்கவும்" + }, + "updateDesktopAppOrDisableFingerprintDialogMessage": { + "message": "பயோமெட்ரிக் திறத்தலைப் பயன்படுத்த, உங்கள் டெஸ்க்டாப் செயலியைப் புதுப்பிக்கவும் அல்லது டெஸ்க்டாப் அமைப்புகளில் கைரேகை திறத்தலை முடக்கவும்." + }, + "changeAtRiskPassword": { + "message": "அபாயத்திலுள்ள கடவுச்சொல்லை மாற்றவும்" + }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "இந்த உள்நுழைவு ஆபத்தில் உள்ளது, மேலும் அதில் ஒரு வலைத்தளமும் இல்லை. வலுவான பாதுகாப்பிற்காக ஒரு வலைத்தளத்தைச் சேர்த்து கடவுச்சொல்லை மாற்றவும்." + }, + "missingWebsite": { + "message": "காணாமல் போன வலைத்தளம்" + }, + "settingsVaultOptions": { + "message": "சேமிப்பு பெட்டக விருப்பத்தேர்வுகள்" + }, + "emptyVaultDescription": { + "message": "சேமிப்பு பெட்டகம் உங்கள் கடவுச்சொற்களை மட்டுமல்லாமல், பாதுகாப்பான உள்நுழைவுகள், அடையாளங்கள், அட்டைகள் மற்றும் குறிப்புகளையும் இங்கு பாதுகாக்கிறது." + }, + "introCarouselLabel": { + "message": "Bitwarden க்கு நல்வரவு" + }, + "securityPrioritized": { + "message": "பாதுகாப்புக்கு முன்னுரிமை" + }, + "securityPrioritizedBody": { + "message": "உள்நுழைவுகள், அட்டைகள் மற்றும் அடையாளங்களை உங்கள் பாதுகாப்பான சேமிப்பு பெட்டகத்தில் சேமிக்கவும். Bitwarden உங்களுக்கு முக்கியமானதை பாதுகாக்க ஜீரோ-నాలெட்ஜ், எண்ட்-டு-எண்ட் என்கிரிப்ஷனைப் பயன்படுத்துகிறது." + }, + "quickLogin": { + "message": "விரைவான மற்றும் எளிதான உள்நுழைவு" + }, + "quickLoginBody": { + "message": "ஒற்றை எழுத்தைக் கூட தட்டச்சு செய்யாமல் உங்கள் கணக்குகளில் உள்நுழைய பயோமெட்ரிக் திறத்தல் மற்றும் தானாக நிரப்புதல் ஆகியவற்றை அமைக்கவும்." + }, + "secureUser": { + "message": "உங்கள் உள்நுழைவுகளை மேம்படுத்தவும்" + }, + "secureUserBody": { + "message": "உங்கள் கணக்குகள் அனைத்திற்கும் வலுவான, தனித்துவமான கடவுச்சொற்களை உருவாக்கி சேமிக்க ஜெனரேட்டரைப் பயன்படுத்தவும்." + }, + "secureDevices": { + "message": "உங்களுக்குத் தேவைப்படும்போது மற்றும் எங்கு தேவைப்படும்போது உங்கள் தரவு" + }, + "secureDevicesBody": { + "message": "Bitwarden மொபைல், உலாவி மற்றும் டெஸ்க்டாப் செயலிகளுடன் வரம்பற்ற சாதனங்களில் வரம்பற்ற கடவுச்சொற்களைச் சேமிக்கவும்." + }, + "nudgeBadgeAria": { + "message": "1 அறிவிப்பு" + }, + "emptyVaultNudgeTitle": { + "message": "ஏற்கனவே உள்ள கடவுச்சொற்களை இறக்குமதி செய்" + }, + "emptyVaultNudgeBody": { + "message": "உள்நுழைவுகளை கைமுறையாக சேர்க்காமல், அவற்றை Bitwarden க்கு விரைவாக மாற்ற இறக்குமதியாளரைப் பயன்படுத்தவும்." + }, + "emptyVaultNudgeButton": { + "message": "இப்போது இறக்குமதி செய்" + }, + "hasItemsVaultNudgeTitle": { + "message": "உங்கள் சேமிப்பு பெட்டகத்திற்கு நல்வரவு!" + }, + "phishingPageTitle": { + "message": "Phishing website" + }, + "phishingPageCloseTab": { + "message": "Close tab" + }, + "phishingPageContinue": { + "message": "Continue" + }, + "phishingPageLearnWhy": { + "message": "Why are you seeing this?" + }, + "hasItemsVaultNudgeBodyOne": { + "message": "தற்போதைய பக்கத்திற்கான தானாக நிரப்பு பொருள்கள்" + }, + "hasItemsVaultNudgeBodyTwo": { + "message": "எளிதாக அணுக பிடித்தமான பொருள்கள்" + }, + "hasItemsVaultNudgeBodyThree": { + "message": "வேறு ஏதாவது ஒன்றுக்காக உங்கள் சேமிப்பு பெட்டகத்தைத் தேடு" + }, + "newLoginNudgeTitle": { + "message": "தானாக நிரப்புவதன் மூலம் நேரத்தைச் சேமி" + }, + "newLoginNudgeBodyOne": { + "message": "ஒரு", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyBold": { + "message": "இணையதளத்தை", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newLoginNudgeBodyTwo": { + "message": "சேர், இதனால் இந்த உள்நுழைவு தானாக நிரப்பும் பரிந்துரையாகத் தோன்றும்.", + "description": "This is in multiple parts to allow for bold text in the middle of the sentence.", + "example": "Include a Website so this login appears as an autofill suggestion." + }, + "newCardNudgeTitle": { + "message": "தடையில்லா ஆன்லைன் செக்அவுட்" + }, + "newCardNudgeBody": { + "message": "அட்டைகளுடன், எளிதாக ஆன்லைன் பேமெண்ட் படிவங்களை பாதுகாப்பாகவும் துல்லியமாகவும் நிரப்பலாம்." + }, + "newIdentityNudgeTitle": { + "message": "கணக்குகளை உருவாக்குவதை எளிதாக்கு" + }, + "newIdentityNudgeBody": { + "message": "அடையாளங்களுடன், நீண்ட பதிவு அல்லது தொடர்பு படிவங்களை விரைவாக தானாக நிரப்பலாம்." + }, + "newNoteNudgeTitle": { + "message": "உங்கள் முக்கியமான தரவைப் பாதுகாப்பாக வைத்திரு" + }, + "newNoteNudgeBody": { + "message": "குறிப்புகளுடன், வங்கி அல்லது காப்பீடு விவரங்கள் போன்ற முக்கியமான தரவுகளைப் பாதுகாப்பாக சேமிக்கவும்." + }, + "newSshNudgeTitle": { + "message": "டெவெலப்பர்-நட்பு SSH அணுகல்" + }, + "newSshNudgeBodyOne": { + "message": "வேகமான, என்கிரிப்ட் செய்யப்பட்ட அங்கீகாரத்திற்கு உங்கள் விசைகளை சேமித்து SSH ஏஜென்டில் இணையுங்கள்.", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "newSshNudgeBodyTwo": { + "message": "SSH ஏஜென்ட் பற்றி மேலும் அறிக", + "description": "Two part message", + "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" + }, + "generatorNudgeTitle": { + "message": "விரைவாக கடவுச்சொற்களை உருவாக்கு" + }, + "generatorNudgeBodyOne": { + "message": "இந்த உருப்படியைக் கிளிக் செய்வதன் மூலம் வலுவான மற்றும் தனித்துவமான கடவுச்சொற்களை எளிதாக உருவாக்கவும்", + "description": "Two part message", + "example": "Easily create strong and unique passwords by clicking on {icon} to help you keep your logins secure." + }, + "generatorNudgeBodyTwo": { + "message": "உங்கள் உள்நுழைவுகளைப் பாதுகாப்பாக வைத்திருக்க உதவும்.", + "description": "Two part message", + "example": "Easily create strong and unique passwords by clicking on {icon} to help you keep your logins secure." + }, + "generatorNudgeBodyAria": { + "message": "உங்கள் உள்நுழைவுகளைப் பாதுகாப்பாக வைத்திருக்க கடவுச்சொல்லை உருவாக்கு பொத்தானை கிளிக் செய்வதன் மூலம் வலுவான மற்றும் தனித்துவமான கடவுச்சொற்களை எளிதாக உருவாக்கலாம்.", + "description": "Aria label for the body content of the generator nudge" + }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, + "noPermissionsViewPage": { + "message": "இந்த பக்கத்தைக் காண உங்களுக்கு அனுமதிகள் இல்லை. வேறு கணக்குடன் உள்நுழைய முயற்சிக்கவும்." + }, + "wasmNotSupported": { + "message": "உங்கள் உலாவியில் WebAssembly ஆதரிக்கப்படவில்லை அல்லது இயக்கப்படவில்லை. Bitwarden செயலியைப் பயன்படுத்த WebAssembly தேவை.", + "description": "'WebAssembly' is a technical term and should not be translated." + }, + "showMore": { + "message": "மேலும் காட்டு" + }, + "showLess": { + "message": "குறைவாக காட்டு" + }, + "next": { + "message": "அடுத்து" + }, + "moreBreadcrumbs": { + "message": "மேலும் பிரெட்க்ரம்ப்கள்", + "description": "This is used in the context of a breadcrumb navigation, indicating that there are more items in the breadcrumb trail that are not currently displayed." + }, + "confirmKeyConnectorDomain": { + "message": "Key Connector டொமைனை உறுதிப்படுத்து" + } +} diff --git a/apps/browser/src/_locales/te/messages.json b/apps/browser/src/_locales/te/messages.json index ecc7da63e79..6180d490f09 100644 --- a/apps/browser/src/_locales/te/messages.json +++ b/apps/browser/src/_locales/te/messages.json @@ -547,12 +547,50 @@ "searchVault": { "message": "Search vault" }, + "resetSearch": { + "message": "Reset search" + }, + "archiveNoun": { + "message": "Archive", + "description": "Noun" + }, + "archiveVerb": { + "message": "Archive", + "description": "Verb" + }, + "unarchive": { + "message": "Unarchive" + }, + "itemsInArchive": { + "message": "Items in archive" + }, + "noItemsInArchive": { + "message": "No items in archive" + }, + "noItemsInArchiveDesc": { + "message": "Archived items will appear here and will be excluded from general search results and autofill suggestions." + }, + "itemSentToArchive": { + "message": "Item sent to archive" + }, + "itemRemovedFromArchive": { + "message": "Item removed from archive" + }, + "archiveItem": { + "message": "Archive item" + }, + "archiveItemConfirmDesc": { + "message": "Archived items are excluded from general search results and autofill suggestions. Are you sure you want to archive this item?" + }, "edit": { "message": "Edit" }, "view": { "message": "View" }, + "viewLogin": { + "message": "View login" + }, "noItemsInList": { "message": "There are no items to list." }, @@ -695,6 +733,15 @@ "invalidMasterPassword": { "message": "Invalid master password" }, + "invalidMasterPasswordConfirmEmailAndHost": { + "message": "Invalid master password. Confirm your email is correct and your account was created on $HOST$.", + "placeholders": { + "host": { + "content": "$1", + "example": "vault.bitwarden.com" + } + } + }, "vaultTimeout": { "message": "Vault timeout" }, @@ -1501,6 +1548,15 @@ "readSecurityKey": { "message": "Read security key" }, + "readingPasskeyLoading": { + "message": "Reading passkey..." + }, + "passkeyAuthenticationFailed": { + "message": "Passkey authentication failed" + }, + "useADifferentLogInMethod": { + "message": "Use a different log in method" + }, "awaitingSecurityKeyInteraction": { "message": "Awaiting security key interaction..." }, @@ -1519,9 +1575,6 @@ "selectTwoStepLoginMethod": { "message": "Select two-step login method" }, - "recoveryCodeDesc": { - "message": "Lost access to all of your two-factor providers? Use your recovery code to turn off all two-factor providers from your account." - }, "recoveryCodeTitle": { "message": "Recovery code" }, @@ -1680,9 +1733,6 @@ "defaultAutoFillOnPageLoadDesc": { "message": "You can turn off autofill on page load for individual login items from the item's Edit view." }, - "itemAutoFillOnPageLoad": { - "message": "Autofill on page load (if set up in Options)" - }, "autoFillOnPageLoadUseDefault": { "message": "Use default setting" }, @@ -1754,23 +1804,8 @@ "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?" }, - "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?" - }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." - }, - "faviconDescAlt": { - "message": "Show a recognizable image next to each login. Applies to all logged in accounts." - }, - "enableBadgeCounter": { - "message": "Show badge counter" - }, - "badgeCounterDesc": { - "message": "Indicate how many logins you have for the current web page." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "cardholderName": { "message": "Cardholder name" @@ -1829,6 +1864,9 @@ "securityCode": { "message": "Security code" }, + "cardNumber": { + "message": "card number" + }, "ex": { "message": "ex." }, @@ -1931,32 +1969,81 @@ "typeNote": { "message": "Note" }, - "newItemHeader": { - "message": "New $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderLogin": { + "message": "New Login", + "description": "Header for new login item type" }, - "editItemHeader": { - "message": "Edit $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderCard": { + "message": "New Card", + "description": "Header for new card item type" }, - "viewItemHeader": { - "message": "View $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderIdentity": { + "message": "New Identity", + "description": "Header for new identity item type" + }, + "newItemHeaderNote": { + "message": "New Note", + "description": "Header for new note item type" + }, + "newItemHeaderSshKey": { + "message": "New SSH key", + "description": "Header for new SSH key item type" + }, + "newItemHeaderTextSend": { + "message": "New Text Send", + "description": "Header for new text send" + }, + "newItemHeaderFileSend": { + "message": "New File Send", + "description": "Header for new file send" + }, + "editItemHeaderLogin": { + "message": "Edit Login", + "description": "Header for edit login item type" + }, + "editItemHeaderCard": { + "message": "Edit Card", + "description": "Header for edit card item type" + }, + "editItemHeaderIdentity": { + "message": "Edit Identity", + "description": "Header for edit identity item type" + }, + "editItemHeaderNote": { + "message": "Edit Note", + "description": "Header for edit note item type" + }, + "editItemHeaderSshKey": { + "message": "Edit SSH key", + "description": "Header for edit SSH key item type" + }, + "editItemHeaderTextSend": { + "message": "Edit Text Send", + "description": "Header for edit text send" + }, + "editItemHeaderFileSend": { + "message": "Edit File Send", + "description": "Header for edit file send" + }, + "viewItemHeaderLogin": { + "message": "View Login", + "description": "Header for view login item type" + }, + "viewItemHeaderCard": { + "message": "View Card", + "description": "Header for view card item type" + }, + "viewItemHeaderIdentity": { + "message": "View Identity", + "description": "Header for view identity item type" + }, + "viewItemHeaderNote": { + "message": "View Note", + "description": "Header for view note item type" + }, + "viewItemHeaderSshKey": { + "message": "View SSH key", + "description": "Header for view SSH key item type" }, "passwordHistory": { "message": "Password history" @@ -3129,6 +3216,24 @@ } } }, + "exportingOrganizationVaultFromPasswordManagerWithDataOwnershipDesc": { + "message": "Only the organization vault associated with $ORGANIZATION$ will be exported.", + "placeholders": { + "organization": { + "content": "$1", + "example": "My Org Name" + } + } + }, + "exportingOrganizationVaultFromAdminConsoleWithDataOwnershipDesc": { + "message": "Only the organization vault associated with $ORGANIZATION$ will be exported. My items collections will not be included.", + "placeholders": { + "organization": { + "content": "$1", + "example": "My Org Name" + } + } + }, "error": { "message": "Error" }, @@ -3460,6 +3565,28 @@ "logInRequestSent": { "message": "Request sent" }, + "loginRequestApprovedForEmailOnDevice": { + "message": "Login request approved for $EMAIL$ on $DEVICE$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + }, + "device": { + "content": "$2", + "example": "Web app - Chrome" + } + } + }, + "youDeniedLoginAttemptFromAnotherDevice": { + "message": "You denied a login attempt from another device. If this was you, try to log in with the device again." + }, + "device": { + "message": "Device" + }, + "loginStatus": { + "message": "Login status" + }, "masterPasswordChanged": { "message": "Master password saved" }, @@ -3496,9 +3623,6 @@ "autofillPageLoadPolicyActivated": { "message": "Your organization policies have turned on autofill on page load." }, - "howToAutofill": { - "message": "How to autofill" - }, "autofillSelectInfoWithCommand": { "message": "Select an item from this screen, use the shortcut $COMMAND$, or explore other options in settings.", "placeholders": { @@ -3556,6 +3680,94 @@ "rememberThisDeviceToMakeFutureLoginsSeamless": { "message": "Remember this device to make future logins seamless" }, + "manageDevices": { + "message": "Manage devices" + }, + "currentSession": { + "message": "Current session" + }, + "mobile": { + "message": "Mobile", + "description": "Mobile app" + }, + "extension": { + "message": "Extension", + "description": "Browser extension/addon" + }, + "desktop": { + "message": "Desktop", + "description": "Desktop app" + }, + "webVault": { + "message": "Web vault" + }, + "webApp": { + "message": "Web app" + }, + "cli": { + "message": "CLI" + }, + "sdk": { + "message": "SDK", + "description": "Software Development Kit" + }, + "requestPending": { + "message": "Request pending" + }, + "firstLogin": { + "message": "First login" + }, + "trusted": { + "message": "Trusted" + }, + "needsApproval": { + "message": "Needs approval" + }, + "devices": { + "message": "Devices" + }, + "accessAttemptBy": { + "message": "Access attempt by $EMAIL$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + } + } + }, + "confirmAccess": { + "message": "Confirm access" + }, + "denyAccess": { + "message": "Deny access" + }, + "time": { + "message": "Time" + }, + "deviceType": { + "message": "Device Type" + }, + "loginRequest": { + "message": "Login request" + }, + "thisRequestIsNoLongerValid": { + "message": "This request is no longer valid." + }, + "loginRequestHasAlreadyExpired": { + "message": "Login request has already expired." + }, + "justNow": { + "message": "Just now" + }, + "requestedXMinutesAgo": { + "message": "Requested $MINUTES$ minutes ago", + "placeholders": { + "minutes": { + "content": "$1", + "example": "5" + } + } + }, "deviceApprovalRequired": { "message": "Device approval required. Select an approval option below:" }, @@ -3795,18 +4007,10 @@ "aliasDomain": { "message": "Alias domain" }, - "passwordRepromptDisabledAutofillOnPageLoad": { - "message": "Items with master password re-prompt cannot be autofilled on page load. Autofill on page load turned off.", - "description": "Toast message for describing that master password re-prompt cannot be autofilled on page load." - }, "autofillOnPageLoadSetToDefault": { "message": "Autofill on page load set to use default setting.", "description": "Toast message for informing the user that autofill on page load has been set to the default setting." }, - "turnOffMasterPasswordPromptToEditField": { - "message": "Turn off master password re-prompt to edit this field", - "description": "Message appearing below the autofill on load message when master password reprompt is set for a vault item." - }, "toggleSideNavigation": { "message": "Toggle side navigation" }, @@ -4015,15 +4219,11 @@ "selectImportCollection": { "message": "Select a collection" }, - "importTargetHint": { - "message": "Select this option if you want the imported file contents moved to a $DESTINATION$", - "description": "Located as a hint under the import target. Will be appended by either folder or collection, depending if the user is importing into an individual or an organizational vault.", - "placeholders": { - "destination": { - "content": "$1", - "example": "folder or collection" - } - } + "importTargetHintCollection": { + "message": "Select this option if you want the imported file contents moved to a collection" + }, + "importTargetHintFolder": { + "message": "Select this option if you want the imported file contents moved to a folder" }, "importUnassignedItemsError": { "message": "File contains unassigned items." @@ -4080,9 +4280,6 @@ "passkeyNotCopiedAlert": { "message": "The passkey will not be copied to the cloned item. Do you want to continue cloning this item?" }, - "passkeyFeatureIsNotImplementedForAccountsWithoutMasterPassword": { - "message": "Verification required by the initiating site. This feature is not yet implemented for accounts without master password." - }, "logInWithPasskeyQuestion": { "message": "Log in with passkey?" }, @@ -4465,17 +4662,17 @@ } } }, - "copyFieldValue": { - "message": "Copy $FIELD$, $VALUE$", + "copyFieldCipherName": { + "message": "Copy $FIELD$, $CIPHERNAME$", "description": "Title for a button that copies a field value to the clipboard.", "placeholders": { "field": { "content": "$1", "example": "Username" }, - "value": { + "ciphername": { "content": "$2", - "example": "Foo" + "example": "Login Item" } } }, @@ -4768,9 +4965,6 @@ } } }, - "enableAnimations": { - "message": "Enable animations" - }, "showAnimations": { "message": "Show animations" }, @@ -4983,15 +5177,9 @@ "itemLocation": { "message": "Item Location" }, - "fileSend": { - "message": "File Send" - }, "fileSends": { "message": "File Sends" }, - "textSend": { - "message": "Text Send" - }, "textSends": { "message": "Text Sends" }, @@ -5001,6 +5189,18 @@ "showNumberOfAutofillSuggestions": { "message": "Show number of login autofill suggestions on extension icon" }, + "accountAccessRequested": { + "message": "Account access requested" + }, + "confirmAccessAttempt": { + "message": "Confirm access attempt for $EMAIL$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + } + } + }, "showQuickCopyActions": { "message": "Show quick copy actions on Vault" }, @@ -5040,9 +5240,6 @@ "vaultCustomTimeoutMinimum": { "message": "Minimum custom timeout is 1 minute." }, - "additionalContentAvailable": { - "message": "Additional content is available" - }, "fileSavedToDevice": { "message": "File saved to device. Manage from your device downloads." }, @@ -5328,6 +5525,12 @@ "changeAtRiskPassword": { "message": "Change at-risk password" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "This login is at-risk and missing a website. Add a website and change the password for stronger security." + }, + "missingWebsite": { + "message": "Missing website" + }, "settingsVaultOptions": { "message": "Vault options" }, @@ -5376,6 +5579,18 @@ "hasItemsVaultNudgeTitle": { "message": "Welcome to your vault!" }, + "phishingPageTitle": { + "message": "Phishing website" + }, + "phishingPageCloseTab": { + "message": "Close tab" + }, + "phishingPageContinue": { + "message": "Continue" + }, + "phishingPageLearnWhy": { + "message": "Why are you seeing this?" + }, "hasItemsVaultNudgeBodyOne": { "message": "Autofill items for the current page" }, @@ -5451,11 +5666,33 @@ "message": "Easily create strong and unique passwords by clicking on the Generate password button to help you keep your logins secure.", "description": "Aria label for the body content of the generator nudge" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "noPermissionsViewPage": { "message": "You do not have permissions to view this page. Try logging in with a different account." }, "wasmNotSupported": { "message": "WebAssembly is not supported on your browser or is not enabled. WebAssembly is required to use the Bitwarden app.", "description": "'WebAssembly' is a technical term and should not be translated." + }, + "showMore": { + "message": "Show more" + }, + "showLess": { + "message": "Show less" + }, + "next": { + "message": "Next" + }, + "moreBreadcrumbs": { + "message": "More breadcrumbs", + "description": "This is used in the context of a breadcrumb navigation, indicating that there are more items in the breadcrumb trail that are not currently displayed." + }, + "confirmKeyConnectorDomain": { + "message": "Confirm Key Connector domain" } } diff --git a/apps/browser/src/_locales/th/messages.json b/apps/browser/src/_locales/th/messages.json index c085b7557e0..744f1e6aa49 100644 --- a/apps/browser/src/_locales/th/messages.json +++ b/apps/browser/src/_locales/th/messages.json @@ -547,12 +547,50 @@ "searchVault": { "message": "ค้นหาในตู้นิรภัย" }, + "resetSearch": { + "message": "Reset search" + }, + "archiveNoun": { + "message": "Archive", + "description": "Noun" + }, + "archiveVerb": { + "message": "Archive", + "description": "Verb" + }, + "unarchive": { + "message": "Unarchive" + }, + "itemsInArchive": { + "message": "Items in archive" + }, + "noItemsInArchive": { + "message": "No items in archive" + }, + "noItemsInArchiveDesc": { + "message": "Archived items will appear here and will be excluded from general search results and autofill suggestions." + }, + "itemSentToArchive": { + "message": "Item sent to archive" + }, + "itemRemovedFromArchive": { + "message": "Item removed from archive" + }, + "archiveItem": { + "message": "Archive item" + }, + "archiveItemConfirmDesc": { + "message": "Archived items are excluded from general search results and autofill suggestions. Are you sure you want to archive this item?" + }, "edit": { "message": "แก้ไข" }, "view": { "message": "แสดง" }, + "viewLogin": { + "message": "View login" + }, "noItemsInList": { "message": "ไม่มีรายการ" }, @@ -695,6 +733,15 @@ "invalidMasterPassword": { "message": "รหัสผ่านหลักไม่ถูกต้อง" }, + "invalidMasterPasswordConfirmEmailAndHost": { + "message": "Invalid master password. Confirm your email is correct and your account was created on $HOST$.", + "placeholders": { + "host": { + "content": "$1", + "example": "vault.bitwarden.com" + } + } + }, "vaultTimeout": { "message": "ระยะเวลาล็อกตู้เซฟ" }, @@ -1501,6 +1548,15 @@ "readSecurityKey": { "message": "Read security key" }, + "readingPasskeyLoading": { + "message": "Reading passkey..." + }, + "passkeyAuthenticationFailed": { + "message": "Passkey authentication failed" + }, + "useADifferentLogInMethod": { + "message": "Use a different log in method" + }, "awaitingSecurityKeyInteraction": { "message": "Awaiting security key interaction..." }, @@ -1519,9 +1575,6 @@ "selectTwoStepLoginMethod": { "message": "Select two-step login method" }, - "recoveryCodeDesc": { - "message": "Lost access to all of your two-factor providers? Use your recovery code to turn off all two-factor providers from your account." - }, "recoveryCodeTitle": { "message": "Recovery Code" }, @@ -1680,9 +1733,6 @@ "defaultAutoFillOnPageLoadDesc": { "message": "You can turn off autofill on page load for individual login items from the item's Edit view." }, - "itemAutoFillOnPageLoad": { - "message": "Autofill on page load (if set up in Options)" - }, "autoFillOnPageLoadUseDefault": { "message": "Use default setting" }, @@ -1754,23 +1804,8 @@ "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?" }, - "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?" - }, - "enableFavicon": { - "message": "Show website icons" - }, - "faviconDesc": { - "message": "Show a recognizable image next to each login." - }, - "faviconDescAlt": { - "message": "Show a recognizable image next to each login. Applies to all logged in accounts." - }, - "enableBadgeCounter": { - "message": "Show badge counter" - }, - "badgeCounterDesc": { - "message": "Indicate how many logins you have for the current web page." + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "cardholderName": { "message": "Cardholder Name" @@ -1829,6 +1864,9 @@ "securityCode": { "message": "Security Code" }, + "cardNumber": { + "message": "card number" + }, "ex": { "message": "ex." }, @@ -1931,32 +1969,81 @@ "typeNote": { "message": "Note" }, - "newItemHeader": { - "message": "New $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderLogin": { + "message": "New Login", + "description": "Header for new login item type" }, - "editItemHeader": { - "message": "Edit $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderCard": { + "message": "New Card", + "description": "Header for new card item type" }, - "viewItemHeader": { - "message": "View $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderIdentity": { + "message": "New Identity", + "description": "Header for new identity item type" + }, + "newItemHeaderNote": { + "message": "New Note", + "description": "Header for new note item type" + }, + "newItemHeaderSshKey": { + "message": "New SSH key", + "description": "Header for new SSH key item type" + }, + "newItemHeaderTextSend": { + "message": "New Text Send", + "description": "Header for new text send" + }, + "newItemHeaderFileSend": { + "message": "New File Send", + "description": "Header for new file send" + }, + "editItemHeaderLogin": { + "message": "Edit Login", + "description": "Header for edit login item type" + }, + "editItemHeaderCard": { + "message": "Edit Card", + "description": "Header for edit card item type" + }, + "editItemHeaderIdentity": { + "message": "Edit Identity", + "description": "Header for edit identity item type" + }, + "editItemHeaderNote": { + "message": "Edit Note", + "description": "Header for edit note item type" + }, + "editItemHeaderSshKey": { + "message": "Edit SSH key", + "description": "Header for edit SSH key item type" + }, + "editItemHeaderTextSend": { + "message": "Edit Text Send", + "description": "Header for edit text send" + }, + "editItemHeaderFileSend": { + "message": "Edit File Send", + "description": "Header for edit file send" + }, + "viewItemHeaderLogin": { + "message": "View Login", + "description": "Header for view login item type" + }, + "viewItemHeaderCard": { + "message": "View Card", + "description": "Header for view card item type" + }, + "viewItemHeaderIdentity": { + "message": "View Identity", + "description": "Header for view identity item type" + }, + "viewItemHeaderNote": { + "message": "View Note", + "description": "Header for view note item type" + }, + "viewItemHeaderSshKey": { + "message": "View SSH key", + "description": "Header for view SSH key item type" }, "passwordHistory": { "message": "ประวัติของรหัสผ่าน" @@ -3129,6 +3216,24 @@ } } }, + "exportingOrganizationVaultFromPasswordManagerWithDataOwnershipDesc": { + "message": "Only the organization vault associated with $ORGANIZATION$ will be exported.", + "placeholders": { + "organization": { + "content": "$1", + "example": "My Org Name" + } + } + }, + "exportingOrganizationVaultFromAdminConsoleWithDataOwnershipDesc": { + "message": "Only the organization vault associated with $ORGANIZATION$ will be exported. My items collections will not be included.", + "placeholders": { + "organization": { + "content": "$1", + "example": "My Org Name" + } + } + }, "error": { "message": "Error" }, @@ -3460,6 +3565,28 @@ "logInRequestSent": { "message": "Request sent" }, + "loginRequestApprovedForEmailOnDevice": { + "message": "Login request approved for $EMAIL$ on $DEVICE$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + }, + "device": { + "content": "$2", + "example": "Web app - Chrome" + } + } + }, + "youDeniedLoginAttemptFromAnotherDevice": { + "message": "You denied a login attempt from another device. If this was you, try to log in with the device again." + }, + "device": { + "message": "Device" + }, + "loginStatus": { + "message": "Login status" + }, "masterPasswordChanged": { "message": "Master password saved" }, @@ -3496,9 +3623,6 @@ "autofillPageLoadPolicyActivated": { "message": "Your organization policies have turned on autofill on page load." }, - "howToAutofill": { - "message": "How to autofill" - }, "autofillSelectInfoWithCommand": { "message": "Select an item from this screen, use the shortcut $COMMAND$, or explore other options in settings.", "placeholders": { @@ -3556,6 +3680,94 @@ "rememberThisDeviceToMakeFutureLoginsSeamless": { "message": "Remember this device to make future logins seamless" }, + "manageDevices": { + "message": "Manage devices" + }, + "currentSession": { + "message": "Current session" + }, + "mobile": { + "message": "Mobile", + "description": "Mobile app" + }, + "extension": { + "message": "Extension", + "description": "Browser extension/addon" + }, + "desktop": { + "message": "Desktop", + "description": "Desktop app" + }, + "webVault": { + "message": "Web vault" + }, + "webApp": { + "message": "Web app" + }, + "cli": { + "message": "CLI" + }, + "sdk": { + "message": "SDK", + "description": "Software Development Kit" + }, + "requestPending": { + "message": "Request pending" + }, + "firstLogin": { + "message": "First login" + }, + "trusted": { + "message": "Trusted" + }, + "needsApproval": { + "message": "Needs approval" + }, + "devices": { + "message": "Devices" + }, + "accessAttemptBy": { + "message": "Access attempt by $EMAIL$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + } + } + }, + "confirmAccess": { + "message": "Confirm access" + }, + "denyAccess": { + "message": "Deny access" + }, + "time": { + "message": "Time" + }, + "deviceType": { + "message": "Device Type" + }, + "loginRequest": { + "message": "Login request" + }, + "thisRequestIsNoLongerValid": { + "message": "This request is no longer valid." + }, + "loginRequestHasAlreadyExpired": { + "message": "Login request has already expired." + }, + "justNow": { + "message": "Just now" + }, + "requestedXMinutesAgo": { + "message": "Requested $MINUTES$ minutes ago", + "placeholders": { + "minutes": { + "content": "$1", + "example": "5" + } + } + }, "deviceApprovalRequired": { "message": "Device approval required. Select an approval option below:" }, @@ -3795,18 +4007,10 @@ "aliasDomain": { "message": "Alias domain" }, - "passwordRepromptDisabledAutofillOnPageLoad": { - "message": "Items with master password re-prompt cannot be autofilled on page load. Autofill on page load turned off.", - "description": "Toast message for describing that master password re-prompt cannot be autofilled on page load." - }, "autofillOnPageLoadSetToDefault": { "message": "Autofill on page load set to use default setting.", "description": "Toast message for informing the user that autofill on page load has been set to the default setting." }, - "turnOffMasterPasswordPromptToEditField": { - "message": "Turn off master password re-prompt to edit this field", - "description": "Message appearing below the autofill on load message when master password reprompt is set for a vault item." - }, "toggleSideNavigation": { "message": "Toggle side navigation" }, @@ -4015,15 +4219,11 @@ "selectImportCollection": { "message": "Select a collection" }, - "importTargetHint": { - "message": "Select this option if you want the imported file contents moved to a $DESTINATION$", - "description": "Located as a hint under the import target. Will be appended by either folder or collection, depending if the user is importing into an individual or an organizational vault.", - "placeholders": { - "destination": { - "content": "$1", - "example": "folder or collection" - } - } + "importTargetHintCollection": { + "message": "Select this option if you want the imported file contents moved to a collection" + }, + "importTargetHintFolder": { + "message": "Select this option if you want the imported file contents moved to a folder" }, "importUnassignedItemsError": { "message": "File contains unassigned items." @@ -4080,9 +4280,6 @@ "passkeyNotCopiedAlert": { "message": "The passkey will not be copied to the cloned item. Do you want to continue cloning this item?" }, - "passkeyFeatureIsNotImplementedForAccountsWithoutMasterPassword": { - "message": "Verification required by the initiating site. This feature is not yet implemented for accounts without master password." - }, "logInWithPasskeyQuestion": { "message": "Log in with passkey?" }, @@ -4465,17 +4662,17 @@ } } }, - "copyFieldValue": { - "message": "Copy $FIELD$, $VALUE$", + "copyFieldCipherName": { + "message": "Copy $FIELD$, $CIPHERNAME$", "description": "Title for a button that copies a field value to the clipboard.", "placeholders": { "field": { "content": "$1", "example": "Username" }, - "value": { + "ciphername": { "content": "$2", - "example": "Foo" + "example": "Login Item" } } }, @@ -4768,9 +4965,6 @@ } } }, - "enableAnimations": { - "message": "Enable animations" - }, "showAnimations": { "message": "Show animations" }, @@ -4983,15 +5177,9 @@ "itemLocation": { "message": "Item Location" }, - "fileSend": { - "message": "File Send" - }, "fileSends": { "message": "File Sends" }, - "textSend": { - "message": "Text Send" - }, "textSends": { "message": "Text Sends" }, @@ -5001,6 +5189,18 @@ "showNumberOfAutofillSuggestions": { "message": "Show number of login autofill suggestions on extension icon" }, + "accountAccessRequested": { + "message": "Account access requested" + }, + "confirmAccessAttempt": { + "message": "Confirm access attempt for $EMAIL$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + } + } + }, "showQuickCopyActions": { "message": "Show quick copy actions on Vault" }, @@ -5040,9 +5240,6 @@ "vaultCustomTimeoutMinimum": { "message": "Minimum custom timeout is 1 minute." }, - "additionalContentAvailable": { - "message": "Additional content is available" - }, "fileSavedToDevice": { "message": "File saved to device. Manage from your device downloads." }, @@ -5328,6 +5525,12 @@ "changeAtRiskPassword": { "message": "Change at-risk password" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "This login is at-risk and missing a website. Add a website and change the password for stronger security." + }, + "missingWebsite": { + "message": "Missing website" + }, "settingsVaultOptions": { "message": "Vault options" }, @@ -5376,6 +5579,18 @@ "hasItemsVaultNudgeTitle": { "message": "Welcome to your vault!" }, + "phishingPageTitle": { + "message": "Phishing website" + }, + "phishingPageCloseTab": { + "message": "Close tab" + }, + "phishingPageContinue": { + "message": "Continue" + }, + "phishingPageLearnWhy": { + "message": "Why are you seeing this?" + }, "hasItemsVaultNudgeBodyOne": { "message": "Autofill items for the current page" }, @@ -5451,11 +5666,33 @@ "message": "Easily create strong and unique passwords by clicking on the Generate password button to help you keep your logins secure.", "description": "Aria label for the body content of the generator nudge" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "noPermissionsViewPage": { "message": "You do not have permissions to view this page. Try logging in with a different account." }, "wasmNotSupported": { "message": "WebAssembly is not supported on your browser or is not enabled. WebAssembly is required to use the Bitwarden app.", "description": "'WebAssembly' is a technical term and should not be translated." + }, + "showMore": { + "message": "Show more" + }, + "showLess": { + "message": "Show less" + }, + "next": { + "message": "Next" + }, + "moreBreadcrumbs": { + "message": "More breadcrumbs", + "description": "This is used in the context of a breadcrumb navigation, indicating that there are more items in the breadcrumb trail that are not currently displayed." + }, + "confirmKeyConnectorDomain": { + "message": "Confirm Key Connector domain" } } diff --git a/apps/browser/src/_locales/tr/messages.json b/apps/browser/src/_locales/tr/messages.json index 5dae8dfcdc4..f1ae2b1accd 100644 --- a/apps/browser/src/_locales/tr/messages.json +++ b/apps/browser/src/_locales/tr/messages.json @@ -84,7 +84,7 @@ "message": "Ana parola ipucu (isteğe bağlı)" }, "passwordStrengthScore": { - "message": "Parola Güvenlik Puanı $SCORE$", + "message": "Parola gücü puanı: $SCORE$", "placeholders": { "score": { "content": "$1", @@ -362,7 +362,7 @@ "message": "Ücretsiz Bitwarden Aile" }, "freeBitwardenFamiliesPageDesc": { - "message": "Ücretsiz Bitwarden Aile Paketi’nden faydalanmaya hak kazandınız. Bu teklifi bugün web uygulaması üzerinden kullanın." + "message": "Ücretsiz Bitwarden Aileleri için uygunsun. Bu teklifi bugün web uygulamasında kullan." }, "version": { "message": "Sürüm" @@ -398,7 +398,7 @@ "message": "Klasör adı" }, "folderHintText": { - "message": "Bir klasörü iç içe yerleştirmek için, üst klasörün adını yazdıktan sonra “/” ekleyin. Örnek: Sosyal/Forumlar" + "message": "Üst klasörün adının sonuna “/” ekleyerek klasörleri iç içe koyabilirsiniz. Örnek: Sosyal/Forumlar" }, "noFoldersAdded": { "message": "Hiç klasör eklenmedi" @@ -462,13 +462,13 @@ "message": "Parola oluştur" }, "generatePassphrase": { - "message": "Parola üret" + "message": "Parola cümlesi üret" }, "passwordGenerated": { "message": "Parola üretildi" }, "passphraseGenerated": { - "message": "Parola ifadesi oluşturuldu" + "message": "Parola cümlesi üretildi" }, "usernameGenerated": { "message": "Kullanıcı adı üretildi" @@ -547,12 +547,50 @@ "searchVault": { "message": "Kasada ara" }, + "resetSearch": { + "message": "Aramayı sıfırla" + }, + "archiveNoun": { + "message": "Arşiv", + "description": "Noun" + }, + "archiveVerb": { + "message": "Arşivle", + "description": "Verb" + }, + "unarchive": { + "message": "Arşivden çıkar" + }, + "itemsInArchive": { + "message": "Arşivdeki kayıtlar" + }, + "noItemsInArchive": { + "message": "Arşivde kayıt yok" + }, + "noItemsInArchiveDesc": { + "message": "Arşivlenmiş kayıtlar burada görünecek ve genel arama sonuçlarından ile otomatik doldurma önerilerinden hariç tutulacaktır." + }, + "itemSentToArchive": { + "message": "Kayıt arşive gönderildi" + }, + "itemRemovedFromArchive": { + "message": "Kayıt arşivden çıkarıldı" + }, + "archiveItem": { + "message": "Kaydı arşivle" + }, + "archiveItemConfirmDesc": { + "message": "Arşivlenmiş kayıtlar genel arama sonuçları ve otomatik doldurma önerilerinden hariç tutulur. Bu kaydı arşivlemek istediğine emin misin?" + }, "edit": { "message": "Düzenle" }, "view": { "message": "Görüntüle" }, + "viewLogin": { + "message": "Hesabı göster" + }, "noItemsInList": { "message": "Listelenecek kayıt yok." }, @@ -569,7 +607,7 @@ "message": "Kimlik doğrulama sırrı" }, "passphrase": { - "message": "Uzun söz" + "message": "Parola cümlesi" }, "favorite": { "message": "Favori" @@ -695,6 +733,15 @@ "invalidMasterPassword": { "message": "Geçersiz ana parola" }, + "invalidMasterPasswordConfirmEmailAndHost": { + "message": "Ana parola geçersiz. E-posta adresinizin doğru olduğunu ve hesabınızın $HOST$ üzerinde oluşturulduğunu kontrol edin.", + "placeholders": { + "host": { + "content": "$1", + "example": "vault.bitwarden.com" + } + } + }, "vaultTimeout": { "message": "Kasa zaman aşımı" }, @@ -842,13 +889,13 @@ "message": "Mevcut web sayfasındaki kimlik doğrulayıcı QR kodunu tarayın" }, "totpHelperTitle": { - "message": "2 adımlı doğrulamayı sorunsuz hale getirin" + "message": "2 adımlı doğrulamayı sorunsuz hale getir" }, "totpHelper": { - "message": "Bitwarden, 2 adımlı doğrulama kodlarını saklayabilir ve otomatik olarak doldurabilir. Anahtarı kopyalayıp bu alana yapıştırın." + "message": "Bitwarden 2 adımlı doğrulama kodlarını saklayabilir ve doldurabilir. Anahtarı bu alana kopyala ve yapıştır." }, "totpHelperWithCapture": { - "message": "Bitwarden, iki adımlı doğrulama kodlarını saklayabilir ve otomatik olarak doldurabilir. Bu web sitesinin doğrulayıcı QR kodunun ekran görüntüsünü almak için kamera simgesini seçin veya anahtarı bu alana kopyalayıp yapıştırın." + "message": "Bitwarden 2 adımlı doğrulama kodlarını saklayabilir ve doldurabilir. Bu web sitesinin kimlik doğrulayıcı QR kodunun ekran görüntüsünü almak için kamera simgesini seç veya anahtarı bu alana kopyala ve yapıştır." }, "learnMoreAboutAuthenticators": { "message": "Kimlik doğrulayıcılar hakkında bilgi alın" @@ -878,7 +925,7 @@ "message": "Kimlik doğrulama uygulamanızdaki kodu girin" }, "pressYourYubiKeyToAuthenticate": { - "message": "Kimlik doğrulamak için YubiKey’inize dokunun" + "message": "Kimliğinizi doğrulamak için YubiKey’inize dokunun" }, "duoTwoFactorRequiredPageSubtitle": { "message": "Hesabınız için Duo iki adımlı giriş gereklidir. Giriş işlemini tamamlamak için aşağıdaki adımları izleyin." @@ -979,7 +1026,7 @@ "message": "Kayıt eklendi" }, "editedItem": { - "message": "Kayıt kaydedildi" + "message": "Hesap kaydedildi" }, "deleteItemConfirmation": { "message": "Çöp kutusuna göndermek istediğinizden emin misiniz?" @@ -1141,7 +1188,7 @@ "description": "Message displayed when login details are successfully updated." }, "loginUpdateTaskSuccess": { - "message": "Harika iş çıkardınız! Kendinizi ve $ORGANIZATION$’ı daha güvenli hale getirmek için gereken adımları attınız.", + "message": "Harika iş çıkardınız! Kendinizi ve $ORGANIZATION$ kuruluşunu daha güvenli hale getirmek için gereken adımları attınız.", "placeholders": { "organization": { "content": "$1" @@ -1150,7 +1197,7 @@ "description": "Shown to user after login is updated." }, "loginUpdateTaskSuccessAdditional": { - "message": "$ORGANIZATION$’ı daha güvenli hale getirdiğiniz için teşekkürler. Güncellemeniz gereken $TASK_COUNT$ adet parola daha var.", + "message": "$ORGANIZATION$ kuruluşunu daha güvenli hale getirdiğiniz için teşekkürler. Güncellemeniz gereken $TASK_COUNT$ parola daha var.", "placeholders": { "organization": { "content": "$1" @@ -1501,6 +1548,15 @@ "readSecurityKey": { "message": "Güvenlik anahtarını oku" }, + "readingPasskeyLoading": { + "message": "Geçiş anahtarı okunuyor..." + }, + "passkeyAuthenticationFailed": { + "message": "Geçiş anahtarı doğrulaması başarısız oldu" + }, + "useADifferentLogInMethod": { + "message": "Başka bir giriş yöntemi kullan" + }, "awaitingSecurityKeyInteraction": { "message": "Güvenlik anahtarı etkileşimi bekleniyor…" }, @@ -1519,9 +1575,6 @@ "selectTwoStepLoginMethod": { "message": "İki aşamalı giriş yöntemini seçin" }, - "recoveryCodeDesc": { - "message": "İki aşamalı doğrulama sağlayıcılarınıza ulaşamıyor musunuz? Kurtarma kodunuzu kullanarak hesabınızdaki tüm iki aşamalı giriş sağlayıcılarını devre dışı bırakabilirsiniz." - }, "recoveryCodeTitle": { "message": "Kurtarma kodu" }, @@ -1562,7 +1615,7 @@ "message": "Şirket içinde barındırılan ortam" }, "selfHostedBaseUrlHint": { - "message": "Yerel sunucunuzda barındırılan Bitwarden kurulumunuzun temel URL’sini belirtin. Örnek: https://bitwarden.sirketiniz.com" + "message": "Şirket içinde barındırılan Bitwarden kurulumunun temel URL’sini belirt. Örnek: https://bitwarden.company.com" }, "selfHostedCustomEnvHeader": { "message": "İleri düzey yapılandırma için her hizmetin taban URL'sini bağımsız olarak belirleyebilirsiniz." @@ -1680,9 +1733,6 @@ "defaultAutoFillOnPageLoadDesc": { "message": "\"Sayfa yüklenince otomatik doldur\"u her hesabın \"Düzenle\" görünümünden ayrı ayrı kapatabilirsiniz." }, - "itemAutoFillOnPageLoad": { - "message": "Sayfa yüklenince otomatik doldur (Seçeneklerde ayarlanmışsa)" - }, "autoFillOnPageLoadUseDefault": { "message": "Varsayılan ayarı kullan" }, @@ -1754,23 +1804,8 @@ "popup2faCloseMessage": { "message": "Doğrulama kodunuzu alacağınız e-postayı kontrol etmek için bu pencerenin dışında bir yere tıklarsanız bu pencere kapanacaktır. Bu pencerenin kapanmaması için yeni bir pencerede açmak ister misiniz?" }, - "popupU2fCloseMessage": { - "message": "Bu tarayıcı bu açılır pencerede U2F isteklerini işleyemiyor. U2F kullanarak giriş yapmak için bu açılır pencereyi yeni bir pencerede açmak ister misiniz?" - }, - "enableFavicon": { - "message": "Web sitesi simgelerini göster" - }, - "faviconDesc": { - "message": "Hesapların yanında tanıdık görseller göster." - }, - "faviconDescAlt": { - "message": "Her hesabın yanında tanınabilir bir resim göster. Oturum açmış tüm hesaplar için geçerlidir." - }, - "enableBadgeCounter": { - "message": "Rozet sayacını göster" - }, - "badgeCounterDesc": { - "message": "Geçerli web sayfasına ait kaç tane hesabınız olduğunu gösterir." + "showIconsChangePasswordUrls": { + "message": "Web sitesi simgelerini göster ve parola değiştirme URL'lerini al" }, "cardholderName": { "message": "Kart sahibinin adı" @@ -1829,6 +1864,9 @@ "securityCode": { "message": "Güvenlik kodu" }, + "cardNumber": { + "message": "kart numarası" + }, "ex": { "message": "örn." }, @@ -1931,32 +1969,81 @@ "typeNote": { "message": "Not" }, - "newItemHeader": { - "message": "Yeni $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderLogin": { + "message": "Yeni hesap", + "description": "Header for new login item type" }, - "editItemHeader": { - "message": "$TYPE$ düzenle", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderCard": { + "message": "Yeni kart", + "description": "Header for new card item type" }, - "viewItemHeader": { - "message": "$TYPE$ bilgileri", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderIdentity": { + "message": "Yeni kimlik", + "description": "Header for new identity item type" + }, + "newItemHeaderNote": { + "message": "Yeni not", + "description": "Header for new note item type" + }, + "newItemHeaderSshKey": { + "message": "Yeni SSH anahtarı", + "description": "Header for new SSH key item type" + }, + "newItemHeaderTextSend": { + "message": "Yeni Send metni", + "description": "Header for new text send" + }, + "newItemHeaderFileSend": { + "message": "Yeni Send dosyası", + "description": "Header for new file send" + }, + "editItemHeaderLogin": { + "message": "Hesabı düzenle", + "description": "Header for edit login item type" + }, + "editItemHeaderCard": { + "message": "Kartı düzenle", + "description": "Header for edit card item type" + }, + "editItemHeaderIdentity": { + "message": "Kimliği düzenle", + "description": "Header for edit identity item type" + }, + "editItemHeaderNote": { + "message": "Notu düzenle", + "description": "Header for edit note item type" + }, + "editItemHeaderSshKey": { + "message": "SSH anahtarını düzenle", + "description": "Header for edit SSH key item type" + }, + "editItemHeaderTextSend": { + "message": "Send metnini düzenle", + "description": "Header for edit text send" + }, + "editItemHeaderFileSend": { + "message": "Send dosyasını düzenle", + "description": "Header for edit file send" + }, + "viewItemHeaderLogin": { + "message": "Hesabı göster", + "description": "Header for view login item type" + }, + "viewItemHeaderCard": { + "message": "Kartı göster", + "description": "Header for view card item type" + }, + "viewItemHeaderIdentity": { + "message": "Kimliği göster", + "description": "Header for view identity item type" + }, + "viewItemHeaderNote": { + "message": "Notu göster", + "description": "Header for view note item type" + }, + "viewItemHeaderSshKey": { + "message": "SSH anahtarını göster", + "description": "Header for view SSH key item type" }, "passwordHistory": { "message": "Parola geçmişi" @@ -2214,7 +2301,7 @@ "message": "Bu parolayı kullan" }, "useThisPassphrase": { - "message": "Bu parola ifadesini kullanın" + "message": "Bu parola cümlesini kullan" }, "useThisUsername": { "message": "Bu kullanıcı adını kullan" @@ -2494,10 +2581,10 @@ "message": "Bir kuruluş ilkesi, kayıtları kişisel kasanıza içe aktarmayı engelledi." }, "restrictCardTypeImport": { - "message": "Cannot import card item types" + "message": "Kart kayıt türleri içe aktarılamıyor" }, "restrictCardTypeImportDesc": { - "message": "A policy set by 1 or more organizations prevents you from importing cards to your vaults." + "message": "1 veya daha fazla kuruluş tarafından belirlenen bir ilke, kasalarınıza kart aktarmanızı engelliyor." }, "domainsTitle": { "message": "Alan adları", @@ -2550,7 +2637,7 @@ "message": "Riskli parolalar" }, "atRiskPasswordDescSingleOrg": { - "message": "$ORGANIZATION$, risk altında olduğu için bir parolanızı değiştirmenizi istiyor.", + "message": "$ORGANIZATION$, risk altındaki bir parolanızı değiştirmenizi istiyor.", "placeholders": { "organization": { "content": "$1", @@ -2559,7 +2646,7 @@ } }, "atRiskPasswordsDescSingleOrgPlural": { - "message": "$ORGANIZATION$, risk altında oldukları için $COUNT$ adet parolanızı değiştirmenizi istiyor.", + "message": "$ORGANIZATION$, risk altındaki $COUNT$ parolanızı değiştirmenizi istiyor.", "placeholders": { "organization": { "content": "$1", @@ -2572,7 +2659,7 @@ } }, "atRiskPasswordsDescMultiOrgPlural": { - "message": "Organizasyonlarınız, risk altında oldukları için $COUNT$ adet parolanızı değiştirmenizi istiyor.", + "message": "Kuruluşlarınız risk altındaki $COUNT$ parolanızı değiştirmenizi istiyor.", "placeholders": { "count": { "content": "$1", @@ -2581,7 +2668,7 @@ } }, "atRiskChangePrompt": { - "message": "Your password for this site is at-risk. $ORGANIZATION$ has requested that you change it.", + "message": "Bu sitedeki parolanız risk altında. $ORGANIZATION$, parolanızı değiştirmenizi talep etti.", "placeholders": { "organization": { "content": "$1", @@ -2591,7 +2678,7 @@ "description": "Notification body when a login triggers an at-risk password change request and the change password domain is known." }, "atRiskNavigatePrompt": { - "message": "$ORGANIZATION$ wants you to change this password because it is at-risk. Navigate to your account settings to change the password.", + "message": "$ORGANIZATION$, risk altındaki bu parolayı değiştirmenizi istiyor. Parolayı değiştirmek için hesap ayarlarınıza gidin.", "placeholders": { "organization": { "content": "$1", @@ -2601,10 +2688,10 @@ "description": "Notification body when a login triggers an at-risk password change request and no change password domain is provided." }, "reviewAndChangeAtRiskPassword": { - "message": "Risk altında olan bir parolayı inceleyin ve değiştirin" + "message": "Risk altındaki parolayı inceleyip değiştirin" }, "reviewAndChangeAtRiskPasswordsPlural": { - "message": "Risk altında olan $COUNT$ adet parolayı inceleyin ve değiştirin", + "message": "Risk altındaki $COUNT$ parolayı inceleyip değiştirin", "placeholders": { "count": { "content": "$1", @@ -2616,23 +2703,23 @@ "message": "Risk altındaki parolaları daha hızlı değiştirin" }, "changeAtRiskPasswordsFasterDesc": { - "message": "Ayarlarınızı güncelleyin, böylece parolalarınızı hızlıca otomatik doldurabilir ve yeni parolalar oluşturabilirsiniz" + "message": "Parolalarınızı hızlıca otomatik doldurabilmek ve yeni parolalar üretebilmek için ayarlarınızı güncelleyin" }, "reviewAtRiskLogins": { - "message": "Risk altındaki girişleri inceleyin" + "message": "Risk altındaki hesapları inceleyin" }, "reviewAtRiskPasswords": { "message": "Risk altındaki parolaları inceleyin" }, "reviewAtRiskLoginsSlideDesc": { - "message": "Organizasyonunuzun parolaları zayıf, tekrar kullanılmış ve/veya açığa çıkmış olduğu için risk altındadır.", + "message": "Kuruluş parolaların zayıf, yeniden kullanılmış ve/veya ele geçirilmiş olduğundan risk altındadır.", "description": "Description of the review at-risk login slide on the at-risk password page carousel" }, "reviewAtRiskLoginSlideImgAltPeriod": { - "message": "Risk altında olan girişlerin bir listesinin görseli." + "message": "Risk altındaki hesap listesinin illüstrasyonu." }, "generatePasswordSlideDesc": { - "message": "Risk altındaki sitede Bitwarden otomatik doldurma menüsü ile hızlıca güçlü ve benzersiz bir parola oluşturun.", + "message": "Riskli sitede Bitwarden otomatik doldurma menüsünü kullanarak hızlıca güçlü ve benzersiz bir parola oluştur.", "description": "Description of the generate password slide on the at-risk password page carousel" }, "generatePasswordSlideImgAltPeriod": { @@ -3129,6 +3216,24 @@ } } }, + "exportingOrganizationVaultFromPasswordManagerWithDataOwnershipDesc": { + "message": "Yalnızca $ORGANIZATION$ ile ilişkili kuruluş kasası dışa aktarılacaktır.", + "placeholders": { + "organization": { + "content": "$1", + "example": "My Org Name" + } + } + }, + "exportingOrganizationVaultFromAdminConsoleWithDataOwnershipDesc": { + "message": "Yalnızca $ORGANIZATION$ ile ilişkili kuruluş kasası dışa aktarılacaktır. Kayıt koleksiyonlarım dahil edilmeyecektir.", + "placeholders": { + "organization": { + "content": "$1", + "example": "My Org Name" + } + } + }, "error": { "message": "Hata" }, @@ -3136,14 +3241,14 @@ "message": "Şifre çözme sorunu" }, "couldNotDecryptVaultItemsBelow": { - "message": "Bitwarden, aşağıda listelenen kasa öğelerinin şifresini çözemedi." + "message": "Bitwarden aşağıdaki kasa öğelerini deşifre edemedi." }, "contactCSToAvoidDataLossPart1": { - "message": "Müşteri ekibi ile başarıyla iletişime geçtin", + "message": "Müşteri hizmetleriyle iletişime geçerek", "description": "This is part of a larger sentence. The full sentence will read 'Contact customer success to avoid additional data loss.'" }, "contactCSToAvoidDataLossPart2": { - "message": "Ek veri kaybını önlemek için.", + "message": "daha fazla veri kaybının önüne geçebilirsiniz.", "description": "This is part of a larger sentence. The full sentence will read 'Contact customer success to avoid additional data loss.'" }, "generateUsername": { @@ -3167,7 +3272,7 @@ } }, "passwordLengthRecommendationHint": { - "message": "Güçlü bir parola oluşturmak için $RECOMMENDED$ veya daha fazla karakter kullanın.", + "message": " Güçlü bir parola cümlesi üretmek için en az $RECOMMENDED$ karakter kullanın.", "description": "Appended to `spinboxBoundariesHint` to recommend a length to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", "placeholders": { "recommended": { @@ -3177,7 +3282,7 @@ } }, "passphraseNumWordsRecommendationHint": { - "message": "Güçlü bir parola ifadesi oluşturmak için $RECOMMENDED$ veya daha fazla kelime kullanın.", + "message": " Güçlü bir parola cümlesi üretmek için en az $RECOMMENDED$ kelime kullanın.", "description": "Appended to `spinboxBoundariesHint` to recommend a number of words to the user. This must include any language-specific 'sentence' separator characters (e.g. a space in english).", "placeholders": { "recommended": { @@ -3386,7 +3491,7 @@ "message": "Sunucu sürümü" }, "selfHostedServer": { - "message": "şirket içinde barındırılan" + "message": "şirket içi" }, "thirdParty": { "message": "Üçüncü taraf" @@ -3460,6 +3565,28 @@ "logInRequestSent": { "message": "İstek gönderildi" }, + "loginRequestApprovedForEmailOnDevice": { + "message": "$DEVICE$ cihazında $EMAIL$ girişi onaylandı", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + }, + "device": { + "content": "$2", + "example": "Web app - Chrome" + } + } + }, + "youDeniedLoginAttemptFromAnotherDevice": { + "message": "Başka bir cihazdan giriş isteğini reddettiniz. Yanlışlıkla yaptıysanız aynı cihazdan yeniden giriş yapmayı deneyin." + }, + "device": { + "message": "Cihaz" + }, + "loginStatus": { + "message": "Oturum açma durumu" + }, "masterPasswordChanged": { "message": "Ana parola kaydedildi" }, @@ -3496,9 +3623,6 @@ "autofillPageLoadPolicyActivated": { "message": "Kuruluş ilkeleriniz, sayfa yüklenince otomatik doldurmayı etkinleştirdi." }, - "howToAutofill": { - "message": "Otomatik doldurma nasıl yapılır?" - }, "autofillSelectInfoWithCommand": { "message": "Bu ekrandan bir öğe seçin, $COMMAND$ kısayolunu kullanın veya ayarlardaki diğer seçenekleri keşfedin.", "placeholders": { @@ -3556,6 +3680,94 @@ "rememberThisDeviceToMakeFutureLoginsSeamless": { "message": "Sonraki girişleri kolaylaştırmak için bu cihazı hatırla" }, + "manageDevices": { + "message": "Cihazları yönet" + }, + "currentSession": { + "message": "Geçerli oturum" + }, + "mobile": { + "message": "Mobil", + "description": "Mobile app" + }, + "extension": { + "message": "Uzantı", + "description": "Browser extension/addon" + }, + "desktop": { + "message": "Masaüstü", + "description": "Desktop app" + }, + "webVault": { + "message": "Web kasası" + }, + "webApp": { + "message": "Web uygulaması" + }, + "cli": { + "message": "CLI" + }, + "sdk": { + "message": "SDK", + "description": "Software Development Kit" + }, + "requestPending": { + "message": "İstek bekliyor" + }, + "firstLogin": { + "message": "İlk giriş" + }, + "trusted": { + "message": "Güvenilen" + }, + "needsApproval": { + "message": "Onay gerekiyor" + }, + "devices": { + "message": "Cihazlar" + }, + "accessAttemptBy": { + "message": "$EMAIL$ erişim denemesi", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + } + } + }, + "confirmAccess": { + "message": "Erişimi onayla" + }, + "denyAccess": { + "message": "Erişimi reddet" + }, + "time": { + "message": "Tarih" + }, + "deviceType": { + "message": "Cihaz türü" + }, + "loginRequest": { + "message": "Giriş isteği" + }, + "thisRequestIsNoLongerValid": { + "message": "Bu istek artık geçerli değil." + }, + "loginRequestHasAlreadyExpired": { + "message": "Giriş isteğinin süresi doldu." + }, + "justNow": { + "message": "Az önce" + }, + "requestedXMinutesAgo": { + "message": "$MINUTES$ dakika önce istendi", + "placeholders": { + "minutes": { + "content": "$1", + "example": "5" + } + } + }, "deviceApprovalRequired": { "message": "Cihaz onayı gerekiyor. Lütfen onay yönteminizi seçin:" }, @@ -3645,7 +3857,7 @@ "message": "Cihaza güvenildi" }, "trustOrganization": { - "message": "Organizasyona güven" + "message": "Kuruluşa güven" }, "trust": { "message": "Güven" @@ -3673,7 +3885,7 @@ "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "sendsBodyNoItems": { - "message": "Share files and data securely with anyone, on any platform. Your information will remain end-to-end encrypted while limiting exposure.", + "message": "Dosyaları ve verileri istediğiniz kişilerle, istediğiniz platformda paylaşın. Bilgileriniz başkalarının eline geçmemesi için uçtan şifrelenecektir.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "inputRequired": { @@ -3795,18 +4007,10 @@ "aliasDomain": { "message": "Alias alan adı" }, - "passwordRepromptDisabledAutofillOnPageLoad": { - "message": "Ana parolayı yeniden isteyen kayıtlar sayfa yüklenince otomatik olarak doldurulamaz. Sayfa yüklenince otomatik doldurma kapatıldı.", - "description": "Toast message for describing that master password re-prompt cannot be autofilled on page load." - }, "autofillOnPageLoadSetToDefault": { "message": "Sayfa yüklenince otomatik doldurma, varsayılan ayarı kullanacak şekilde ayarlandı.", "description": "Toast message for informing the user that autofill on page load has been set to the default setting." }, - "turnOffMasterPasswordPromptToEditField": { - "message": "Bu alanı düzenlemek için ana parolayı yeniden istemeyi kapatın", - "description": "Message appearing below the autofill on load message when master password reprompt is set for a vault item." - }, "toggleSideNavigation": { "message": "Kenar menüsünü aç/kapat" }, @@ -3838,7 +4042,7 @@ "description": "Button text to display in overlay when the account is locked." }, "unlockAccountAria": { - "message": "Unlock your account, opens in a new window", + "message": "Hesabınızın kilidini açın, yeni bir pencerede açılır", "description": "Screen reader text (aria-label) for unlock account button in overlay" }, "totpCodeAria": { @@ -3874,7 +4078,7 @@ "description": "Button text to display within inline menu when there are no matching items on a login field" }, "addNewLoginItemAria": { - "message": "Add new vault login item, opens in a new window", + "message": "Yeni kasa giriş ögesini yeni bir açılır pencerede ekleyin", "description": "Screen reader text (aria-label) for new login button within inline menu" }, "newCard": { @@ -3882,7 +4086,7 @@ "description": "Button text to display within inline menu when there are no matching items on a credit card field" }, "addNewCardItemAria": { - "message": "Add new vault card item, opens in a new window", + "message": "Yeni kasa kartı ögesini yeni bir açılır pencerede ekleyin", "description": "Screen reader text (aria-label) for new card button within inline menu" }, "newIdentity": { @@ -3890,7 +4094,7 @@ "description": "Button text to display within inline menu when there are no matching items on an identity field" }, "addNewIdentityItemAria": { - "message": "Add new vault identity item, opens in a new window", + "message": "Yeni kasa kimliği kayıtı ekle, yeni bir pencerede açılır", "description": "Screen reader text (aria-label) for new identity button within inline menu" }, "bitwardenOverlayMenuAvailable": { @@ -3980,7 +4184,7 @@ } }, "duoHealthCheckResultsInNullAuthUrlError": { - "message": "Error connecting with the Duo service. Use a different two-step login method or contact Duo for assistance." + "message": "Duo hizmetine bağlanırken hata oluştu. Başka bir iki aşamalı giriş yöntemi kullanın veya destek almak Duo ile iletişime geçin." }, "duoRequiredForAccount": { "message": "Hesabınız için Duo iki adımlı giriş gereklidir." @@ -4015,15 +4219,11 @@ "selectImportCollection": { "message": "Bir koleksiyon seçin" }, - "importTargetHint": { - "message": "İçe aktarılan dosya içeriklerinin $DESTINATION$ konumuna taşınmasını istiyorsanız bu seçeneği seçin", - "description": "Located as a hint under the import target. Will be appended by either folder or collection, depending if the user is importing into an individual or an organizational vault.", - "placeholders": { - "destination": { - "content": "$1", - "example": "folder or collection" - } - } + "importTargetHintCollection": { + "message": "İçe aktarılan dosya içeriklerinin bir koleksiyona taşınmasını istiyorsanız bu seçeneği seçin" + }, + "importTargetHintFolder": { + "message": "İçe aktarılan dosya içeriklerinin bir klasöre taşınmasını istiyorsanız bu seçeneği seçin" }, "importUnassignedItemsError": { "message": "Dosya atanmamış öğeler içeriyor." @@ -4069,7 +4269,7 @@ "message": "Geçiş anahtarı" }, "accessing": { - "message": "Erişilen konum:" + "message": "Erişilen konum" }, "loggedInExclamation": { "message": "Giriş yapıldı!" @@ -4080,9 +4280,6 @@ "passkeyNotCopiedAlert": { "message": "Geçiş anahtarı klonlanan öğeye kopyalanmayacaktır. Bu öğeyi klonlamaya devam etmek istiyor musunuz?" }, - "passkeyFeatureIsNotImplementedForAccountsWithoutMasterPassword": { - "message": "Site kimlik doğrulaması gerektiriyor. Bu özellik henüz ana parolası olmayan hesaplarda kullanılamaz." - }, "logInWithPasskeyQuestion": { "message": "Geçiş anahtarı ile giriş yapılsın mı?" }, @@ -4263,19 +4460,19 @@ "description": "Label indicating the most common import formats" }, "uriMatchDefaultStrategyHint": { - "message": "URI match detection is how Bitwarden identifies autofill suggestions.", + "message": "URl eşleştirme tespiti, Bitwarden'ın otomatik doldurma önerilerini nasıl tanımladığıdır.", "description": "Explains to the user that URI match detection determines how Bitwarden suggests autofill options, and clarifies that this default strategy applies when no specific match detection is set for a login item." }, "regExAdvancedOptionWarning": { - "message": "\"Regular expression\" is an advanced option with increased risk of exposing credentials.", + "message": "\"Düzenli ifadeler\" gelişmiş bir seçenektir ve kimlik bilgilerini açığa çıkarma riski taşır.", "description": "Content for dialog which warns a user when selecting 'regular expression' matching strategy as a cipher match strategy" }, "startsWithAdvancedOptionWarning": { - "message": "\"Starts with\" is an advanced option with increased risk of exposing credentials.", + "message": "\"İle başla\" gelişmiş bir seçenektir ve kimlik bilgilerini açığa çıkarma riski taşır.", "description": "Content for dialog which warns a user when selecting 'starts with' matching strategy as a cipher match strategy" }, "uriMatchWarningDialogLink": { - "message": "More about match detection", + "message": "Eşleşme tespiti hakkında daha fazla bilgi", "description": "Link to match detection docs on warning dialog for advance match strategy" }, "uriAdvancedOption": { @@ -4291,19 +4488,19 @@ "description": "Title for dialog which asks if the user wants to proceed to a relevant Help Center page" }, "confirmContinueToHelpCenterPasswordManagementContent": { - "message": "Change your browser's autofill and password management settings.", + "message": "Tarayıcınızın otomatik doldurma ve parola yönetimi ayarlarını değiştirin.", "description": "Body content for dialog which asks if the user wants to proceed to the Help Center's page about browser password management settings" }, "confirmContinueToHelpCenterKeyboardShortcutsContent": { - "message": "You can view and set extension shortcuts in your browser's settings.", + "message": "Tarayıcınızın ayarlarında uzantı kısayollarını görüntüleyebilir ve ayarlayabilirsiniz.", "description": "Body content for dialog which asks if the user wants to proceed to the Help Center's page about browser keyboard shortcut settings" }, "confirmContinueToBrowserPasswordManagementSettingsContent": { - "message": "Change your browser's autofill and password management settings.", + "message": "Tarayıcınızın otomatik doldurma ve parola yönetimi ayarlarını değiştirin.", "description": "Body content for dialog which asks if the user wants to proceed to the browser's password management settings page" }, "confirmContinueToBrowserKeyboardShortcutSettingsContent": { - "message": "You can view and set extension shortcuts in your browser's settings.", + "message": "Tarayıcınızın ayarlarında uzantı kısayollarını görüntüleyebilir ve ayarlayabilirsiniz.", "description": "Body content for dialog which asks if the user wants to proceed to the browser's keyboard shortcut settings page" }, "overrideDefaultBrowserAutofillTitle": { @@ -4465,17 +4662,17 @@ } } }, - "copyFieldValue": { - "message": "Kopyala: $FIELD$, $VALUE$", + "copyFieldCipherName": { + "message": "Kopyala: $FIELD$, $CIPHERNAME$", "description": "Title for a button that copies a field value to the clipboard.", "placeholders": { "field": { "content": "$1", "example": "Username" }, - "value": { + "ciphername": { "content": "$2", - "example": "Foo" + "example": "Login Item" } } }, @@ -4646,7 +4843,7 @@ "message": "Premium" }, "freeOrgsCannotUseAttachments": { - "message": "Free organizations cannot use attachments" + "message": "Ücretsiz kuruluşlar dosya eklerini kullanamaz" }, "filters": { "message": "Filtreler" @@ -4768,9 +4965,6 @@ } } }, - "enableAnimations": { - "message": "Animasyonları etkinleştir" - }, "showAnimations": { "message": "Animasyonları göster" }, @@ -4799,13 +4993,13 @@ "message": "Ata" }, "bulkCollectionAssignmentDialogDescriptionSingular": { - "message": "Only organization members with access to these collections will be able to see the item." + "message": "Yalnızca bu koleksiyonlara erişimi olan kuruluş üyeleri kayıtı görebilecektir." }, "bulkCollectionAssignmentDialogDescriptionPlural": { - "message": "Only organization members with access to these collections will be able to see the items." + "message": "Yalnızca bu koleksiyonlara erişimi olan kuruluş üyeleri kayıtları görebilecektir." }, "bulkCollectionAssignmentWarning": { - "message": "You have selected $TOTAL_COUNT$ items. You cannot update $READONLY_COUNT$ of the items because you do not have edit permissions.", + "message": "$TOTAL_COUNT$ kayıt seçtiniz. Düzenleme izniniz olmadığı için $READONLY_COUNT$ kayıtı güncelleyemezsiniz.", "placeholders": { "total_count": { "content": "$1", @@ -4838,10 +5032,10 @@ "message": "Formlardaki onay kutularını (örn. \"e-posta adresimi hatırla\") otomatik doldurmak isterseniz onay kutularını kullanın" }, "linkedHelpText": { - "message": "Use a linked field when you are experiencing autofill issues for a specific website." + "message": "Belirli bir web sitesi için otomatik doldurma sorunları yaşıyorsanız bağlantılı bir alan kullanın." }, "linkedLabelHelpText": { - "message": "Enter the the field's html id, name, aria-label, or placeholder." + "message": "Alanın html kimliğini (id), adını (name), aria-label etiketini veya yer tutucusunu (placeholder) girin." }, "editField": { "message": "Alanı düzenle" @@ -4874,7 +5068,7 @@ } }, "reorderToggleButton": { - "message": "Reorder $LABEL$. Use arrow key to move item up or down.", + "message": "$LABEL$'i yeniden sıralayın. Kayıtı yukarı veya aşağı taşımak için ok tuşunu kullanın.", "placeholders": { "label": { "content": "$1", @@ -4883,10 +5077,10 @@ } }, "reorderWebsiteUriButton": { - "message": "Reorder website URI. Use arrow key to move item up or down." + "message": "Web sitesi URI'sini yeniden sıralayın. Kayıtı yukarı veya aşağı taşımak için ok tuşunu kullanın." }, "reorderFieldUp": { - "message": "$LABEL$ moved up, position $INDEX$ of $LENGTH$", + "message": "$LABEL$ yukarı taşındı, konum: $LENGTH$'in $INDEX$'i", "placeholders": { "label": { "content": "$1", @@ -4903,13 +5097,13 @@ } }, "selectCollectionsToAssign": { - "message": "Select collections to assign" + "message": "Atanacak koleksiyonları seçin" }, "personalItemTransferWarningSingular": { - "message": "1 item will be permanently transferred to the selected organization. You will no longer own this item." + "message": "1 kayıt kalıcı olarak seçilen kuruluşa aktarılacaktır. Artık bu kayıta sahip olmayacaksınız." }, "personalItemsTransferWarningPlural": { - "message": "$PERSONAL_ITEMS_COUNT$ items will be permanently transferred to the selected organization. You will no longer own these items.", + "message": "$PERSONAL_ITEMS_COUNT$ kayıt kalıcı olarak seçilen kuruluşa aktarılacaktır. Artık bu kayıtlara sahip olmayacaksınız.", "placeholders": { "personal_items_count": { "content": "$1", @@ -4918,7 +5112,7 @@ } }, "personalItemWithOrgTransferWarningSingular": { - "message": "1 item will be permanently transferred to $ORG$. You will no longer own this item.", + "message": "1 kayıt kalıcı olarak $ORG$ kuruluşuna aktarılacaktır. Artık bu kayda sahip olmayacaksınız.", "placeholders": { "org": { "content": "$1", @@ -4927,7 +5121,7 @@ } }, "personalItemsWithOrgTransferWarningPlural": { - "message": "$PERSONAL_ITEMS_COUNT$ items will be permanently transferred to $ORG$. You will no longer own these items.", + "message": "$PERSONAL_ITEMS_COUNT$ kayıt kalıcı olarak $ORG$ kuruluşuna aktarılacaktır. Artık bu kayıtlara sahip olmayacaksınız.", "placeholders": { "personal_items_count": { "content": "$1", @@ -4940,7 +5134,7 @@ } }, "successfullyAssignedCollections": { - "message": "Successfully assigned collections" + "message": "Başarıyla atanan koleksiyonlar" }, "nothingSelected": { "message": "Hiçbir şey seçmediniz." @@ -4964,7 +5158,7 @@ } }, "reorderFieldDown": { - "message": "$LABEL$ moved down, position $INDEX$ of $LENGTH$", + "message": "$LABEL$ aşağı taşındı, konum: $LENGTH$'in $INDEX$'i", "placeholders": { "label": { "content": "$1", @@ -4983,15 +5177,9 @@ "itemLocation": { "message": "Kayıt konumu" }, - "fileSend": { - "message": "Dosya Send'i" - }, "fileSends": { "message": "Dosya Send'leri" }, - "textSend": { - "message": "Metin Send'i" - }, "textSends": { "message": "Metin Send'leri" }, @@ -5001,6 +5189,18 @@ "showNumberOfAutofillSuggestions": { "message": "Otomatik öneri sayısını uzantı simgesinde göster" }, + "accountAccessRequested": { + "message": "Hesap erişimi istendi" + }, + "confirmAccessAttempt": { + "message": "$EMAIL$ erişimini onayla", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + } + } + }, "showQuickCopyActions": { "message": "Kasada hızlı kopyalama komutlarını göster" }, @@ -5040,9 +5240,6 @@ "vaultCustomTimeoutMinimum": { "message": "Minimum özel zaman aşımı 1 dakikadır." }, - "additionalContentAvailable": { - "message": "Ek içerikler mevcut" - }, "fileSavedToDevice": { "message": "Dosya cihaza kaydedildi. Cihazınızın indirilenler klasöründen yönetebilirsiniz." }, @@ -5074,22 +5271,22 @@ "message": "Bu kaydı düzenleme yetkisine sahip değilsiniz" }, "biometricsStatusHelptextUnlockNeeded": { - "message": "Biometric unlock is unavailable because PIN or password unlock is required first." + "message": "Önce PIN veya parola gerektiğinden biyometrik kilit açılamıyor." }, "biometricsStatusHelptextHardwareUnavailable": { - "message": "Biometric unlock is currently unavailable." + "message": "Biyometrik kilit açma şu anda kullanılamıyor." }, "biometricsStatusHelptextAutoSetupNeeded": { - "message": "Biometric unlock is unavailable due to misconfigured system files." + "message": "Biyometrik kilit açma, yanlış yapılandırılmış sistem dosyaları nedeniyle kullanılamıyor." }, "biometricsStatusHelptextManualSetupNeeded": { - "message": "Biometric unlock is unavailable due to misconfigured system files." + "message": "Biyometrik kilit açma, yanlış yapılandırılmış sistem dosyaları nedeniyle kullanılamıyor." }, "biometricsStatusHelptextDesktopDisconnected": { - "message": "Biometric unlock is unavailable because the Bitwarden desktop app is closed." + "message": "Bitwarden masaüstü uygulaması kapalı olduğu için biyometrik kilit açma kullanılamıyor." }, "biometricsStatusHelptextNotEnabledInDesktop": { - "message": "Biometric unlock is unavailable because it is not enabled for $EMAIL$ in the Bitwarden desktop app.", + "message": "Biyometrik kilit açma, Bitwarden masaüstü uygulamasında $EMAIL$ etkin olmadığı için kullanılamıyor.", "placeholders": { "email": { "content": "$1", @@ -5098,7 +5295,7 @@ } }, "biometricsStatusHelptextUnavailableReasonUnknown": { - "message": "Biometric unlock is currently unavailable for an unknown reason." + "message": "Biyometrik kilit açma şu anda bilinmeyen bir nedenden dolayı kullanılamıyor." }, "unlockVault": { "message": "Kasanızın kilidini saniyeler içinde açın" @@ -5107,10 +5304,10 @@ "message": "Kasanıza daha hızlı ulaşmak için kilit açma ve zaman aşımı ayarlarınızı özelleştirebilirsiniz." }, "unlockPinSet": { - "message": "Unlock PIN set" + "message": "Kilit açma PIN seti" }, "unlockWithBiometricSet": { - "message": "Unlock with biometrics set" + "message": "Biyometrik set ile kilidi aç" }, "authenticating": { "message": "Kimlik doğrulanıyor" @@ -5299,19 +5496,19 @@ "message": "Parolayı girin" }, "invalidSshKey": { - "message": "The SSH key is invalid" + "message": "SSH anahtarı geçersiz" }, "sshKeyTypeUnsupported": { - "message": "The SSH key type is not supported" + "message": "SSH anahtar türü desteklenmiyor" }, "importSshKeyFromClipboard": { - "message": "Import key from clipboard" + "message": "Anahtarı panodan içe aktar" }, "sshKeyImported": { - "message": "SSH key imported successfully" + "message": "SSH anahtarı başarıyla içe aktarıldı" }, "cannotRemoveViewOnlyCollections": { - "message": "You cannot remove collections with View only permissions: $COLLECTIONS$", + "message": "Yalnızca Görüntüleme izinlerine sahip koleksiyonları kaldıramazsınız: $COLLECTIONS$", "placeholders": { "collections": { "content": "$1", @@ -5323,10 +5520,16 @@ "message": "Lütfen masaüstü uygulamanızı güncelleyin" }, "updateDesktopAppOrDisableFingerprintDialogMessage": { - "message": "To use biometric unlock, please update your desktop application, or disable fingerprint unlock in the desktop settings." + "message": "Biyometri ile kilidi açmayı kullanmak için lütfen masaüstü uygulamanızı güncelleyin veya masaüstü ayarlarında parmak izi ile kilidi açmayı devre dışı bırakın." }, "changeAtRiskPassword": { - "message": "Change at-risk password" + "message": "Risk altındaki parolayı değiştirin" + }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "Bu hesap risk altında ve web sitesi eksik. Bir web sitesi ekleyin ve güvenliğinizi artırmak için parolayı değiştirin." + }, + "missingWebsite": { + "message": "Web sitesi eksik" }, "settingsVaultOptions": { "message": "Kasa seçenekleri" @@ -5368,7 +5571,7 @@ "message": "Mevcut parolaları içe aktar" }, "emptyVaultNudgeBody": { - "message": "Use the importer to quickly transfer logins to Bitwarden without manually adding them." + "message": "Hesapları manuel olarak eklemeden Bitwarden'a hızlı bir şekilde aktarmak için içe aktarıcıyı kullanın." }, "emptyVaultNudgeButton": { "message": "Şimdi içe aktar" @@ -5376,14 +5579,26 @@ "hasItemsVaultNudgeTitle": { "message": "Kasanıza hoş geldiniz!" }, + "phishingPageTitle": { + "message": "Dolandırıcılık web sitesi" + }, + "phishingPageCloseTab": { + "message": "Sekmeyi kapat" + }, + "phishingPageContinue": { + "message": "Devam et" + }, + "phishingPageLearnWhy": { + "message": "Bunu neden görüyorsunuz?" + }, "hasItemsVaultNudgeBodyOne": { - "message": "Autofill items for the current page" + "message": "Geçerli sayfada kayıtları otomatik doldurun" }, "hasItemsVaultNudgeBodyTwo": { - "message": "Favorite items for easy access" + "message": "Kolay erişim için hesapları favorilere ekleyin" }, "hasItemsVaultNudgeBodyThree": { - "message": "Search your vault for something else" + "message": "Kasanızda istediğiniz şeyi arayın" }, "newLoginNudgeTitle": { "message": "Otomatik doldurmayla zaman kazanın" @@ -5407,55 +5622,77 @@ "message": "Kesintisiz çevrimiçi alışveriş" }, "newCardNudgeBody": { - "message": "With cards, easily autofill payment forms securely and accurately." + "message": "Kartlarla, ödeme formlarını güvenli ve doğru bir şekilde kolayca otomatik doldurun." }, "newIdentityNudgeTitle": { "message": "Hesap oluşturmak artık daha basit" }, "newIdentityNudgeBody": { - "message": "With identities, quickly autofill long registration or contact forms." + "message": "Kimlikler ile uzun kayıt veya iletişim formlarını hızla otomatik doldurun." }, "newNoteNudgeTitle": { "message": "Hassas verilerinizi güvende tutun" }, "newNoteNudgeBody": { - "message": "With notes, securely store sensitive data like banking or insurance details." + "message": "Notlarla, bankacılık veya sigorta bilgileri gibi hassas verileri güvenli bir şekilde saklayın." }, "newSshNudgeTitle": { - "message": "Developer-friendly SSH access" + "message": "Geliştirici dostu SSH erişimi" }, "newSshNudgeBodyOne": { - "message": "Store your keys and connect with the SSH agent for fast, encrypted authentication.", + "message": "Anahtarlarınızı saklayın ve hızlı, şifreli kimlik doğrulama için SSH aracısıyla bağlantı kurun.", "description": "Two part message", "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, "newSshNudgeBodyTwo": { - "message": "Learn more about SSH agent", + "message": "SSH agent hakkında daha fazla bilgi edinin", "description": "Two part message", "example": "Store your keys and connect with the SSH agent for fast, encrypted authentication. Learn more about SSH agent" }, "generatorNudgeTitle": { - "message": "Quickly create passwords" + "message": "Hızlıca parola oluşturun" }, "generatorNudgeBodyOne": { - "message": "Easily create strong and unique passwords by clicking on", + "message": "Tıklayarak güçlü ve benzersiz parolaları kolayca oluşturun", "description": "Two part message", "example": "Easily create strong and unique passwords by clicking on {icon} to help you keep your logins secure." }, "generatorNudgeBodyTwo": { - "message": "to help you keep your logins secure.", + "message": "hesaplarınızı güvende tutmanıza yardımcı olmak için.", "description": "Two part message", "example": "Easily create strong and unique passwords by clicking on {icon} to help you keep your logins secure." }, "generatorNudgeBodyAria": { - "message": "Easily create strong and unique passwords by clicking on the Generate password button to help you keep your logins secure.", + "message": "Güvenli oturumlar açmaya yardımcı olmak için Parola Oluştur düğmesine tıklayarak güçlü ve benzersiz parolalar oluşturun.", "description": "Aria label for the body content of the generator nudge" }, + "aboutThisSetting": { + "message": "Bu ayar hakkında" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden, deneyimini iyileştirmek için hangi simgenin veya parola değiştirme URL’sinin kullanılacağını belirlemek amacıyla kaydedilmiş hesap URI’lerini kullanır. Bu hizmeti kullandığında hiçbir bilgi toplanmaz veya kaydedilmez." + }, "noPermissionsViewPage": { "message": "Bu sayfayı görüntüleme izniniz yok. Farklı bir hesapla giriş yapmayı deneyin." }, "wasmNotSupported": { "message": "Tarayıcınızda WebAssembly desteklenmiyor veya etkinleştirilmemişt. Bitwarden uygulamasını kullanmak için WebAssembly gereklidir.", "description": "'WebAssembly' is a technical term and should not be translated." + }, + "showMore": { + "message": "Daha fazla göster" + }, + "showLess": { + "message": "Daha az göster" + }, + "next": { + "message": "İleri" + }, + "moreBreadcrumbs": { + "message": "Daha fazla gezinme izi", + "description": "This is used in the context of a breadcrumb navigation, indicating that there are more items in the breadcrumb trail that are not currently displayed." + }, + "confirmKeyConnectorDomain": { + "message": "Key Connector alan adını doğrulayın" } } diff --git a/apps/browser/src/_locales/uk/messages.json b/apps/browser/src/_locales/uk/messages.json index 5a7a42d3c84..313c30b568e 100644 --- a/apps/browser/src/_locales/uk/messages.json +++ b/apps/browser/src/_locales/uk/messages.json @@ -547,12 +547,50 @@ "searchVault": { "message": "Пошук" }, + "resetSearch": { + "message": "Скинути пошук" + }, + "archiveNoun": { + "message": "Archive", + "description": "Noun" + }, + "archiveVerb": { + "message": "Archive", + "description": "Verb" + }, + "unarchive": { + "message": "Видобути" + }, + "itemsInArchive": { + "message": "Записи в архіві" + }, + "noItemsInArchive": { + "message": "Немає записів у архіві" + }, + "noItemsInArchiveDesc": { + "message": "Архівовані записи з'являтимуться тут і будуть виключені з результатів звичайного пошуку та пропозицій автозаповнення." + }, + "itemSentToArchive": { + "message": "Запис переміщено до архіву" + }, + "itemRemovedFromArchive": { + "message": "Запис вилучено з архіву" + }, + "archiveItem": { + "message": "Архівувати запис" + }, + "archiveItemConfirmDesc": { + "message": "Архівовані записи виключаються з результатів звичайного пошуку та пропозицій автозаповнення. Ви дійсно хочете архівувати цей запис?" + }, "edit": { "message": "Змінити" }, "view": { "message": "Переглянути" }, + "viewLogin": { + "message": "Переглянути запис" + }, "noItemsInList": { "message": "Немає записів." }, @@ -695,6 +733,15 @@ "invalidMasterPassword": { "message": "Неправильний головний пароль" }, + "invalidMasterPasswordConfirmEmailAndHost": { + "message": "Invalid master password. Confirm your email is correct and your account was created on $HOST$.", + "placeholders": { + "host": { + "content": "$1", + "example": "vault.bitwarden.com" + } + } + }, "vaultTimeout": { "message": "Час очікування сховища" }, @@ -1174,10 +1221,10 @@ "description": "Detailed error message shown when saving login details fails." }, "changePasswordWarning": { - "message": "After changing your password, you will need to log in with your new password. Active sessions on other devices will be logged out within one hour." + "message": "Після зміни пароля потрібно буде ввійти в систему з новим паролем. Активні сеанси на інших пристроях буде завершено протягом години." }, "accountRecoveryUpdateMasterPasswordSubtitle": { - "message": "Change your master password to complete account recovery." + "message": "Змініть свій головний пароль, щоб завершити відновлення облікового запису." }, "enableChangedPasswordNotification": { "message": "Запитувати про оновлення запису" @@ -1501,6 +1548,15 @@ "readSecurityKey": { "message": "Зчитати ключ безпеки" }, + "readingPasskeyLoading": { + "message": "Reading passkey..." + }, + "passkeyAuthenticationFailed": { + "message": "Passkey authentication failed" + }, + "useADifferentLogInMethod": { + "message": "Use a different log in method" + }, "awaitingSecurityKeyInteraction": { "message": "Очікується взаємодія з ключем безпеки..." }, @@ -1519,9 +1575,6 @@ "selectTwoStepLoginMethod": { "message": "Виберіть спосіб двоетапної перевірки" }, - "recoveryCodeDesc": { - "message": "Втратили доступ до всіх провайдерів двоетапної перевірки? Скористайтеся кодом відновлення, щоб вимкнути двоетапну перевірку для свого облікового запису." - }, "recoveryCodeTitle": { "message": "Код відновлення" }, @@ -1680,9 +1733,6 @@ "defaultAutoFillOnPageLoadDesc": { "message": "Ви можете вимкнути цю функцію для окремих записів входу в меню запису \"Змінити\"." }, - "itemAutoFillOnPageLoad": { - "message": "Автозаповнення на сторінці (якщо увімкнено в налаштуваннях)" - }, "autoFillOnPageLoadUseDefault": { "message": "Типове налаштування" }, @@ -1754,23 +1804,8 @@ "popup2faCloseMessage": { "message": "Натискання поза межами спливаючого вікна для перевірки коду підтвердження в пошті спричинить його закриття. Хочете відкрити його в новому вікні, щоб воно не закрилося?" }, - "popupU2fCloseMessage": { - "message": "Цей браузер не може обробити U2F запити в цьому виринаючому вікні. Хочете відкрити його у новому вікні, щоб ви змогли увійти з використанням U2F?" - }, - "enableFavicon": { - "message": "Показувати піктограми вебсайтів" - }, - "faviconDesc": { - "message": "Показувати зображення біля кожного запису." - }, - "faviconDescAlt": { - "message": "Показувати зображення поруч з кожним записом. Застосовується для всіх облікових записів, до яких виконано вхід." - }, - "enableBadgeCounter": { - "message": "Показувати лічильник" - }, - "badgeCounterDesc": { - "message": "Показувати індикатор кількості записів для поточної вебсторінки." + "showIconsChangePasswordUrls": { + "message": "Показувати піктограми вебсайтів та отримувати адреси для зміни паролів" }, "cardholderName": { "message": "Ім'я власника картки" @@ -1829,6 +1864,9 @@ "securityCode": { "message": "Код безпеки" }, + "cardNumber": { + "message": "номер картки" + }, "ex": { "message": "зразок" }, @@ -1931,32 +1969,81 @@ "typeNote": { "message": "Нотатка" }, - "newItemHeader": { - "message": "Новий $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderLogin": { + "message": "Новий запис", + "description": "Header for new login item type" }, - "editItemHeader": { - "message": "Редагувати $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderCard": { + "message": "Нова картка", + "description": "Header for new card item type" }, - "viewItemHeader": { - "message": "Переглянути $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderIdentity": { + "message": "Нове посвідчення", + "description": "Header for new identity item type" + }, + "newItemHeaderNote": { + "message": "Нова нотатка", + "description": "Header for new note item type" + }, + "newItemHeaderSshKey": { + "message": "Новий ключ SSH", + "description": "Header for new SSH key item type" + }, + "newItemHeaderTextSend": { + "message": "Нове текстове відправлення", + "description": "Header for new text send" + }, + "newItemHeaderFileSend": { + "message": "Нове файлове відправлення", + "description": "Header for new file send" + }, + "editItemHeaderLogin": { + "message": "Редагувати запис", + "description": "Header for edit login item type" + }, + "editItemHeaderCard": { + "message": "Редагувати картку", + "description": "Header for edit card item type" + }, + "editItemHeaderIdentity": { + "message": "Редагувати посвідчення", + "description": "Header for edit identity item type" + }, + "editItemHeaderNote": { + "message": "Редагувати нотатку", + "description": "Header for edit note item type" + }, + "editItemHeaderSshKey": { + "message": "Редагувати ключ SSH", + "description": "Header for edit SSH key item type" + }, + "editItemHeaderTextSend": { + "message": "Редагувати текстове відправлення", + "description": "Header for edit text send" + }, + "editItemHeaderFileSend": { + "message": "Редагувати файлове відправлення", + "description": "Header for edit file send" + }, + "viewItemHeaderLogin": { + "message": "Перегляд запису", + "description": "Header for view login item type" + }, + "viewItemHeaderCard": { + "message": "Перегляд картки", + "description": "Header for view card item type" + }, + "viewItemHeaderIdentity": { + "message": "Перегляд посвідчення", + "description": "Header for view identity item type" + }, + "viewItemHeaderNote": { + "message": "Перегляд нотатки", + "description": "Header for view note item type" + }, + "viewItemHeaderSshKey": { + "message": "Перегляд ключа SSH", + "description": "Header for view SSH key item type" }, "passwordHistory": { "message": "Історія паролів" @@ -3129,6 +3216,24 @@ } } }, + "exportingOrganizationVaultFromPasswordManagerWithDataOwnershipDesc": { + "message": "Only the organization vault associated with $ORGANIZATION$ will be exported.", + "placeholders": { + "organization": { + "content": "$1", + "example": "My Org Name" + } + } + }, + "exportingOrganizationVaultFromAdminConsoleWithDataOwnershipDesc": { + "message": "Only the organization vault associated with $ORGANIZATION$ will be exported. My items collections will not be included.", + "placeholders": { + "organization": { + "content": "$1", + "example": "My Org Name" + } + } + }, "error": { "message": "Помилка" }, @@ -3197,7 +3302,7 @@ "message": "Адреса е-пошти Catch-all" }, "catchallEmailDesc": { - "message": "Використовуйте свою скриньку вхідних Catch-All власного домену." + "message": "Використовуйте можливості Catch-All власного домену." }, "random": { "message": "Випадково" @@ -3460,8 +3565,30 @@ "logInRequestSent": { "message": "Запит надіслано" }, + "loginRequestApprovedForEmailOnDevice": { + "message": "Запит входу підтверджено для $EMAIL$ на $DEVICE$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + }, + "device": { + "content": "$2", + "example": "Web app - Chrome" + } + } + }, + "youDeniedLoginAttemptFromAnotherDevice": { + "message": "Ви відхилили спробу входу з іншого пристрою. Якщо це були ви, спробуйте ввійти з пристроєм знову." + }, + "device": { + "message": "Пристрій" + }, + "loginStatus": { + "message": "Стан входу в систему" + }, "masterPasswordChanged": { - "message": "Master password saved" + "message": "Головний пароль збережено" }, "exposedMasterPassword": { "message": "Головний пароль викрито" @@ -3496,9 +3623,6 @@ "autofillPageLoadPolicyActivated": { "message": "Політикою вашої організації було увімкнено автозаповнення на сторінці." }, - "howToAutofill": { - "message": "Як працює автозаповнення" - }, "autofillSelectInfoWithCommand": { "message": "Виберіть об'єкт із цього екрану, скористайтеся комбінацією клавіш $COMMAND$, або дізнайтеся про інші можливості в налаштуваннях.", "placeholders": { @@ -3556,6 +3680,94 @@ "rememberThisDeviceToMakeFutureLoginsSeamless": { "message": "Запам'ятайте цей пристрій, щоб спростити майбутні входи в систему" }, + "manageDevices": { + "message": "Керувати пристроями" + }, + "currentSession": { + "message": "Поточний сеанс" + }, + "mobile": { + "message": "Мобільний", + "description": "Mobile app" + }, + "extension": { + "message": "Розширення", + "description": "Browser extension/addon" + }, + "desktop": { + "message": "Комп'ютер", + "description": "Desktop app" + }, + "webVault": { + "message": "Вебсховище" + }, + "webApp": { + "message": "Вебпрограма" + }, + "cli": { + "message": "CLI" + }, + "sdk": { + "message": "SDK", + "description": "Software Development Kit" + }, + "requestPending": { + "message": "Запит в очікуванні" + }, + "firstLogin": { + "message": "Перший вхід" + }, + "trusted": { + "message": "Надійний" + }, + "needsApproval": { + "message": "Потребує підтвердження" + }, + "devices": { + "message": "Пристрої" + }, + "accessAttemptBy": { + "message": "Спроба доступу з $EMAIL$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + } + } + }, + "confirmAccess": { + "message": "Підтвердити доступ" + }, + "denyAccess": { + "message": "Заборонити доступ" + }, + "time": { + "message": "Час" + }, + "deviceType": { + "message": "Тип пристрою" + }, + "loginRequest": { + "message": "Запит входу" + }, + "thisRequestIsNoLongerValid": { + "message": "Цей запит більше недійсний." + }, + "loginRequestHasAlreadyExpired": { + "message": "Термін дії запиту на вхід завершився." + }, + "justNow": { + "message": "Щойно" + }, + "requestedXMinutesAgo": { + "message": "Запитано $MINUTES$ хвилин тому", + "placeholders": { + "minutes": { + "content": "$1", + "example": "5" + } + } + }, "deviceApprovalRequired": { "message": "Необхідне підтвердження пристрою. Виберіть варіант підтвердження нижче:" }, @@ -3578,10 +3790,10 @@ "message": "Запит підтвердження адміністратора" }, "unableToCompleteLogin": { - "message": "Unable to complete login" + "message": "Не вдалося завершити вхід" }, "loginOnTrustedDeviceOrAskAdminToAssignPassword": { - "message": "You need to log in on a trusted device or ask your administrator to assign you a password." + "message": "Ви повинні ввійти до системи на довіреному пристрої або попросити адміністратора призначити вам пароль." }, "ssoIdentifierRequired": { "message": "Потрібен SSO-ідентифікатор організації." @@ -3795,18 +4007,10 @@ "aliasDomain": { "message": "Псевдонім домену" }, - "passwordRepromptDisabledAutofillOnPageLoad": { - "message": "Записи з повторним запитом головного пароля не можна автоматично заповнювати під час завантаження сторінки. Автозаповнення на сторінці вимкнено.", - "description": "Toast message for describing that master password re-prompt cannot be autofilled on page load." - }, "autofillOnPageLoadSetToDefault": { "message": "Автозаповнення на сторінці налаштовано з типовими параметрами.", "description": "Toast message for informing the user that autofill on page load has been set to the default setting." }, - "turnOffMasterPasswordPromptToEditField": { - "message": "Вимкніть повторний запит головного пароля, щоб редагувати це поле", - "description": "Message appearing below the autofill on load message when master password reprompt is set for a vault item." - }, "toggleSideNavigation": { "message": "Перемкнути бічну навігацію" }, @@ -4015,15 +4219,11 @@ "selectImportCollection": { "message": "Вибрати збірку" }, - "importTargetHint": { - "message": "Оберіть цю опцію, якщо ви хочете, щоб вміст імпортованого файлу було збережено в $DESTINATION$", - "description": "Located as a hint under the import target. Will be appended by either folder or collection, depending if the user is importing into an individual or an organizational vault.", - "placeholders": { - "destination": { - "content": "$1", - "example": "folder or collection" - } - } + "importTargetHintCollection": { + "message": "Оберіть цю опцію, якщо ви хочете, щоб вміст імпортованого файлу було збережено до збірки" + }, + "importTargetHintFolder": { + "message": "Оберіть цю опцію, якщо ви хочете, щоб вміст імпортованого файлу було збережено до теки" }, "importUnassignedItemsError": { "message": "Файл містить непризначені записи." @@ -4080,9 +4280,6 @@ "passkeyNotCopiedAlert": { "message": "Ключ доступу не буде скопійовано до клонованого запису. Хочете продовжити клонування цього запису?" }, - "passkeyFeatureIsNotImplementedForAccountsWithoutMasterPassword": { - "message": "Сайт ініціює обов'язкову верифікацію. Ця функція ще не реалізована для облікових записів без головного пароля." - }, "logInWithPasskeyQuestion": { "message": "Увійти з ключем доступу?" }, @@ -4465,17 +4662,17 @@ } } }, - "copyFieldValue": { - "message": "Копіювати $FIELD$, $VALUE$", + "copyFieldCipherName": { + "message": "Копіювати $FIELD$, $CIPHERNAME$", "description": "Title for a button that copies a field value to the clipboard.", "placeholders": { "field": { "content": "$1", "example": "Username" }, - "value": { + "ciphername": { "content": "$2", - "example": "Foo" + "example": "Login Item" } } }, @@ -4768,9 +4965,6 @@ } } }, - "enableAnimations": { - "message": "Увімкнути анімацію" - }, "showAnimations": { "message": "Показати анімації" }, @@ -4983,15 +5177,9 @@ "itemLocation": { "message": "Розташування запису" }, - "fileSend": { - "message": "Відправлення файлу" - }, "fileSends": { "message": "Відправлення файлів" }, - "textSend": { - "message": "Відправлення тексту" - }, "textSends": { "message": "Відправлення тексту" }, @@ -5001,6 +5189,18 @@ "showNumberOfAutofillSuggestions": { "message": "Показувати кількість пропозицій автозаповнення на піктограмі розширення" }, + "accountAccessRequested": { + "message": "Запитано доступ до облікового запису" + }, + "confirmAccessAttempt": { + "message": "Підтвердити спробу доступу для $EMAIL$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + } + } + }, "showQuickCopyActions": { "message": "Показати дії швидкого копіювання у сховищі" }, @@ -5040,9 +5240,6 @@ "vaultCustomTimeoutMinimum": { "message": "Мінімальний власний час очікування – 1 хвилина." }, - "additionalContentAvailable": { - "message": "Доступний додатковий вміст" - }, "fileSavedToDevice": { "message": "Файл збережено на пристрої. Ви можете його знайти у теці завантажень." }, @@ -5328,6 +5525,12 @@ "changeAtRiskPassword": { "message": "Змінити ризикований пароль" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "Цей запис ризикований, і не має адреси вебсайту. Додайте адресу вебсайту і змініть пароль для вдосконалення безпеки." + }, + "missingWebsite": { + "message": "Немає вебсайту" + }, "settingsVaultOptions": { "message": "Параметри сховища" }, @@ -5376,6 +5579,18 @@ "hasItemsVaultNudgeTitle": { "message": "Вітаємо у вашому сховищі!" }, + "phishingPageTitle": { + "message": "Шахрайський вебсайт" + }, + "phishingPageCloseTab": { + "message": "Закрити вкладку" + }, + "phishingPageContinue": { + "message": "Продовжити" + }, + "phishingPageLearnWhy": { + "message": "Чому ви це бачите?" + }, "hasItemsVaultNudgeBodyOne": { "message": "Автозаповнення записів для поточної сторінки" }, @@ -5451,11 +5666,33 @@ "message": "Легко створюйте надійні та унікальні паролі, натиснувши кнопку Генерувати пароль, щоб зберегти свої записи в безпеці.", "description": "Aria label for the body content of the generator nudge" }, + "aboutThisSetting": { + "message": "Про ці налаштування" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden використовуватиме збережені URI-адреси записів для визначення піктограм вебсайтів або URL-адрес для зміни паролів, щоб вдосконалити вашу роботу. Під час використання цієї послуги ваша інформація не збирається і не зберігається." + }, "noPermissionsViewPage": { "message": "У вас немає дозволу переглядати цю сторінку. Спробуйте ввійти з іншим обліковим записом." }, "wasmNotSupported": { "message": "WebAssembly не підтримується або не ввімкнено у вашому браузері. WebAssembly є обов'язковою вимогою для програми Bitwarden.", "description": "'WebAssembly' is a technical term and should not be translated." + }, + "showMore": { + "message": "Розгорнути" + }, + "showLess": { + "message": "Згорнути" + }, + "next": { + "message": "Далі" + }, + "moreBreadcrumbs": { + "message": "Інші елементи", + "description": "This is used in the context of a breadcrumb navigation, indicating that there are more items in the breadcrumb trail that are not currently displayed." + }, + "confirmKeyConnectorDomain": { + "message": "Підтвердити домен Key Connector" } } diff --git a/apps/browser/src/_locales/vi/messages.json b/apps/browser/src/_locales/vi/messages.json index 8f3df515d40..738b22fcad2 100644 --- a/apps/browser/src/_locales/vi/messages.json +++ b/apps/browser/src/_locales/vi/messages.json @@ -17,7 +17,7 @@ "message": "Đăng nhập hoặc tạo tài khoản mới để truy cập kho lưu trữ của bạn." }, "inviteAccepted": { - "message": "Lời mời được chấp nhận" + "message": "Đã chấp nhận lời mời" }, "createAccount": { "message": "Tạo tài khoản" @@ -141,7 +141,7 @@ "message": "Sao chép đường dẫn" }, "copyUsername": { - "message": "Sao chép tên người dùng" + "message": "Sao chép tên đăng nhập" }, "copyNumber": { "message": "Sao chép số" @@ -216,7 +216,7 @@ "description": "Aria label for the heading displayed the inline menu for totp code autofill" }, "generatePasswordCopied": { - "message": "Tạo mật khẩu (đã sao chép)" + "message": "Tạo mật khẩu (cũng sao chép)" }, "copyElementIdentifier": { "message": "Sao chép tên trường tùy chỉnh" @@ -453,7 +453,7 @@ "message": "Ứng dụng web Bitwarden" }, "importItems": { - "message": "Nhập mục" + "message": "Nhập vào kho" }, "select": { "message": "Chọn" @@ -471,7 +471,7 @@ "message": "Đã tạo cụm mật khẩu" }, "usernameGenerated": { - "message": "Tên người dùng được tạo tự động" + "message": "Tên đăng nhập được tạo tự động" }, "emailGenerated": { "message": "Email được tạo ra" @@ -547,12 +547,50 @@ "searchVault": { "message": "Tìm kiếm trong kho lưu trữ" }, + "resetSearch": { + "message": "Đặt lại tìm kiếm" + }, + "archiveNoun": { + "message": "Lưu trữ", + "description": "Noun" + }, + "archiveVerb": { + "message": "Lưu trữ", + "description": "Verb" + }, + "unarchive": { + "message": "Hủy lưu trữ" + }, + "itemsInArchive": { + "message": "Các mục trong kho lưu trữ" + }, + "noItemsInArchive": { + "message": "Không có mục nào trong kho lưu trữ" + }, + "noItemsInArchiveDesc": { + "message": "Các mục đã lưu trữ sẽ hiển thị ở đây và sẽ bị loại khỏi kết quả tìm kiếm và gợi ý tự động điền." + }, + "itemSentToArchive": { + "message": "Mục đã được gửi đến kho lưu trữ" + }, + "itemRemovedFromArchive": { + "message": "Mục đã được gỡ khỏi kho lưu trữ" + }, + "archiveItem": { + "message": "Lưu trữ mục" + }, + "archiveItemConfirmDesc": { + "message": "Các mục đã lưu trữ sẽ bị loại khỏi kết quả tìm kiếm chung và gợi ý tự động điền. Bạn có chắc chắn muốn lưu trữ mục này không?" + }, "edit": { "message": "Sửa" }, "view": { "message": "Xem" }, + "viewLogin": { + "message": "Xem đăng nhập" + }, "noItemsInList": { "message": "Không có mục nào để liệt kê." }, @@ -560,7 +598,7 @@ "message": "Thông tin mục" }, "username": { - "message": "Tên người dùng" + "message": "Tên đăng nhập" }, "password": { "message": "Mật khẩu" @@ -635,16 +673,16 @@ "message": "Tùy chọn mở khóa" }, "unlockMethodNeededToChangeTimeoutActionDesc": { - "message": "Thiết lập phương thức mở khóa để thay đổi hành động khi hết thời gian mở kho." + "message": "Thiết lập phương thức mở khóa để thay đổi hành động sau khi đóng kho." }, "unlockMethodNeeded": { "message": "Thiết lập phương pháp mở khóa trong Cài đặt" }, "sessionTimeoutHeader": { - "message": "Khóa kho sau" + "message": "Thời gian hết phiên" }, "vaultTimeoutHeader": { - "message": "Thời gian khóa kho" + "message": "Thời gian mở kho" }, "otherOptions": { "message": "Tùy chọn khác" @@ -653,7 +691,7 @@ "message": "Đánh giá tiện ích mở rộng" }, "browserNotSupportClipboard": { - "message": "Trình duyệt web của bạn không hỗ trợ dễ dàng sao chép bộ nhớ tạm. Bạn có thể sao chép nó theo cách thủ công để thay thế." + "message": "Trình duyệt web của bạn không hỗ trợ sao chép vào bảng nhớ tạm một cách dễ dàng. Vui lòng sao chép thủ công." }, "verifyYourIdentity": { "message": "Xác minh danh tính của bạn" @@ -695,8 +733,17 @@ "invalidMasterPassword": { "message": "Mật khẩu chính không hợp lệ" }, + "invalidMasterPasswordConfirmEmailAndHost": { + "message": "Mật khẩu chính không hợp lệ. Xác nhận email của bạn là chính xác và tài khoản được tạo trên $HOST$.", + "placeholders": { + "host": { + "content": "$1", + "example": "vault.bitwarden.com" + } + } + }, "vaultTimeout": { - "message": "Thời gian chờ của kho" + "message": "Đóng kho sau" }, "vaultTimeout1": { "message": "Quá hạn" @@ -768,7 +815,7 @@ "message": "Đã xảy ra lỗi" }, "emailRequired": { - "message": "Yêu cầu địa chỉ email." + "message": "Cần điền địa chỉ email." }, "invalidEmail": { "message": "Địa chỉ email không hợp lệ." @@ -777,7 +824,7 @@ "message": "Yêu cầu mật khẩu chính." }, "confirmMasterPasswordRequired": { - "message": "Yêu cầu nhập lại mật khẩu chính." + "message": "Cần nhập lại mật khẩu chính." }, "masterPasswordMinlength": { "message": "Mật khẩu chính phải có ít nhất $VALUE$ kí tự.", @@ -842,7 +889,7 @@ "message": "Quét mã QR xác thực từ trang web hiện tại" }, "totpHelperTitle": { - "message": "Thực hiện xác minh hai bước liền mạch" + "message": "Giúp quá trình xác minh 2 bước diễn ra liền mạch" }, "totpHelper": { "message": "Bitwarden có thể lưu trữ và điền mã xác thực 2 bước. Sao chép và dán khóa vào ô này." @@ -994,10 +1041,10 @@ "message": "Bạn có chắc chắn muốn ghi đè mật khẩu hiện tại không?" }, "overwriteUsername": { - "message": "Ghi đè tên người dùng" + "message": "Ghi đè tên đăng nhập" }, "overwriteUsernameConfirmation": { - "message": "Bạn có chắc chắn muốn ghi đè tên người dùng hiện tại không?" + "message": "Bạn có chắc chắn muốn ghi đè tên đăng nhập hiện tại không?" }, "searchFolder": { "message": "Tìm kiếm thư mục" @@ -1006,23 +1053,23 @@ "message": "Tìm kiếm bộ sưu tập" }, "searchType": { - "message": "Tìm loại" + "message": "Tìm theo thể loại" }, "noneFolder": { "message": "Không có thư mục", "description": "This is the folder for uncategorized items" }, "enableAddLoginNotification": { - "message": "Hỏi để thêm đăng nhập" + "message": "Gợi ý thêm mục đăng nhập" }, "vaultSaveOptionsTitle": { "message": "Tùy chọn lưu vào kho" }, "addLoginNotificationDesc": { - "message": "Nếu không tìm thấy mục nào trong kho của bạn, hãy yêu cầu thêm mục đó." + "message": "Gợi ý thêm mục nếu không tìm thấy mục nào trong kho trùng khớp." }, "addLoginNotificationDescAlt": { - "message": "Nếu không tìm thấy mục nào trong kho của bạn, hãy yêu cầu thêm mục đó. Áp dụng cho tất cả tài khoản đã đăng nhập." + "message": "Gợi ý thêm mục nếu không tìm thấy mục nào trong kho trùng khớp. Áp dụng cho tất cả tài khoản đã đăng nhập." }, "showCardsInVaultViewV2": { "message": "Luôn hiển thị thẻ như đề xuất tự động điền trên giao diện kho" @@ -1049,11 +1096,11 @@ "message": "Nhấp vào mục trong đề xuất tự động điền để điền thông tin" }, "clearClipboard": { - "message": "Dọn dẹp khay nhớ tạm", + "message": "Dọn dẹp bảng nhớ tạm", "description": "Clipboard is the operating system thing where you copy/paste data to on your device." }, "clearClipboardDesc": { - "message": "Tự động xóa mọi thứ đã sao chép khỏi bộ nhớ tạm.", + "message": "Tự động xóa mọi thứ đã sao chép khỏi bảng nhớ tạm.", "description": "Clipboard is the operating system thing where you copy/paste data to on your device." }, "notificationAddDesc": { @@ -1223,7 +1270,7 @@ "description": "Default URI match detection for autofill." }, "defaultUriMatchDetectionDesc": { - "message": "Chọn cách thức mặc định hệ thống so khớp đường dẫn (URI) để xử lý đăng nhập khi thực hiện các thao tác như tự động điền." + "message": "Chọn cách hệ thống so khớp đường dẫn để xử lý đăng nhập khi thực hiện các thao tác như tự động điền." }, "theme": { "message": "Chủ đề" @@ -1261,7 +1308,7 @@ "message": "Mật khẩu này sẽ được sử dụng để xuất và nhập tập tin này" }, "accountRestrictedOptionDescription": { - "message": "Sử dụng khóa mã hóa tài khoản của bạn, được tạo từ tên người dùng và mật khẩu chính của bạn để mã hóa tệp xuất và giới hạn việc nhập chỉ cho tài khoản Bitwarden hiện tại." + "message": "Sử dụng khóa mã hóa tài khoản của bạn, được tạo từ tên đăng nhập và mật khẩu chính của bạn để mã hóa tệp xuất và giới hạn việc nhập chỉ cho tài khoản Bitwarden hiện tại." }, "passwordProtectedOptionDescription": { "message": "Thiết lập mật khẩu cho tệp để mã hóa dữ liệu xuất và nhập nó vào bất kỳ tài khoản Bitwarden nào bằng cách sử dụng mật khẩu đó để giải mã." @@ -1393,7 +1440,7 @@ "message": "Đăng ký làm thành viên Cao cấp và nhận được:" }, "ppremiumSignUpStorage": { - "message": "1 GB dung lượng lưu trữ được mã hóa cho các tệp đính kèm." + "message": "1GB bộ nhớ lưu trữ được mã hóa cho các tệp đính kèm." }, "premiumSignUpEmergency": { "message": "Truy cập khẩn cấp." @@ -1501,6 +1548,15 @@ "readSecurityKey": { "message": "Đọc khóa bảo mật" }, + "readingPasskeyLoading": { + "message": "Reading passkey..." + }, + "passkeyAuthenticationFailed": { + "message": "Passkey authentication failed" + }, + "useADifferentLogInMethod": { + "message": "Use a different log in method" + }, "awaitingSecurityKeyInteraction": { "message": "Đang chờ tương tác với khóa bảo mật..." }, @@ -1519,9 +1575,6 @@ "selectTwoStepLoginMethod": { "message": "Chọn phương pháp đăng nhập hai bước" }, - "recoveryCodeDesc": { - "message": "Bạn đã mất quyền truy cập vào tất cả các dịch vụ xác thực 2 lớp? Sử dụng mã khôi phục để tắt tất cả các phương pháp xác thực hai lớp trong tài khoản của bạn." - }, "recoveryCodeTitle": { "message": "Mã khôi phục" }, @@ -1680,9 +1733,6 @@ "defaultAutoFillOnPageLoadDesc": { "message": "Bạn có thể tắt tự động điền khi tải trang cho mục đăng nhập riêng lẻ từ chế độ xem Chỉnh sửa mục." }, - "itemAutoFillOnPageLoad": { - "message": "Tự động điền khi tải trang (nếu được thiết lập trong Tùy chọn)" - }, "autoFillOnPageLoadUseDefault": { "message": "Sử dụng thiết lập mặc định" }, @@ -1708,7 +1758,7 @@ "message": "Điền tự động danh tính đã sử dụng lần cuối cho trang web hiện tại" }, "commandGeneratePasswordDesc": { - "message": "Tạo và sao chép một mật khẩu ngẫu nhiên mới vào khay nhớ tạm" + "message": "Tạo và sao chép một mật khẩu ngẫu nhiên mới vào bảng nhớ tạm" }, "commandLockVaultDesc": { "message": "Khoá kho" @@ -1735,7 +1785,7 @@ "message": "Văn bản" }, "cfTypeHidden": { - "message": "Đã ẩn đi" + "message": "Bí ẩn" }, "cfTypeBoolean": { "message": "Đúng/Sai" @@ -1754,23 +1804,8 @@ "popup2faCloseMessage": { "message": "Nhấp bên ngoài popup để xem mã xác thực trong email của bạn sẽ làm cho popup này đóng lại. Bạn có muốn mở popup này trong một cửa sổ mới để nó không bị đóng?" }, - "popupU2fCloseMessage": { - "message": "Trình duyệt này không thể xử lý các yêu cầu U2F trong cửa sổ popup này. Bạn có muốn mở popup này trong cửa sổ mới để bạn có thể đăng nhập thông qua U2F?" - }, - "enableFavicon": { - "message": "Hiển thị biểu tượng trang web" - }, - "faviconDesc": { - "message": "Hiển thị một ảnh nhận dạng bên cạnh mỗi lần đăng nhập." - }, - "faviconDescAlt": { - "message": "Hiển thị một biểu tượng dễ nhận dạng bên cạnh mỗi mục đăng nhập. Áp dụng với mọi tài khoản đăng nhập trên thiết bị." - }, - "enableBadgeCounter": { - "message": "Hiển thị biểu tượng bộ đếm" - }, - "badgeCounterDesc": { - "message": "Cho biết bạn có bao nhiêu thông tin đăng nhập cho trang web hiện tại." + "showIconsChangePasswordUrls": { + "message": "Hiển thị biểu tượng trang web và truy xuất các URL đổi mật khẩu" }, "cardholderName": { "message": "Tên chủ thẻ" @@ -1829,8 +1864,11 @@ "securityCode": { "message": "Mã bảo mật" }, + "cardNumber": { + "message": "số thẻ" + }, "ex": { - "message": "Ví dụ:" + "message": "ví dụ." }, "title": { "message": "Tiêu đề" @@ -1842,10 +1880,10 @@ "message": "Bà" }, "ms": { - "message": "Chị" + "message": "Cô" }, "dr": { - "message": "Bác sĩ" + "message": "Tiến sĩ/Bác sĩ" }, "mx": { "message": "Mx" @@ -1899,7 +1937,7 @@ "message": "Xã / Phường" }, "stateProvince": { - "message": "Tỉnh/Thành Phố" + "message": "Tỉnh / Thành Phố" }, "zipPostalCode": { "message": "Mã bưu chính" @@ -1931,32 +1969,81 @@ "typeNote": { "message": "Ghi chú" }, - "newItemHeader": { - "message": "$TYPE$ mới", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderLogin": { + "message": "Đăng nhập mới", + "description": "Header for new login item type" }, - "editItemHeader": { - "message": "Chỉnh sửa $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderCard": { + "message": "Thẻ mới", + "description": "Header for new card item type" }, - "viewItemHeader": { - "message": "Xem $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderIdentity": { + "message": "Danh tính mới", + "description": "Header for new identity item type" + }, + "newItemHeaderNote": { + "message": "Ghi chú mới", + "description": "Header for new note item type" + }, + "newItemHeaderSshKey": { + "message": "Khóa SSH mới", + "description": "Header for new SSH key item type" + }, + "newItemHeaderTextSend": { + "message": "Send văn bản mới", + "description": "Header for new text send" + }, + "newItemHeaderFileSend": { + "message": "Send tập tin mới", + "description": "Header for new file send" + }, + "editItemHeaderLogin": { + "message": "Chỉnh sửa đăng nhập", + "description": "Header for edit login item type" + }, + "editItemHeaderCard": { + "message": "Chỉnh sửa thẻ", + "description": "Header for edit card item type" + }, + "editItemHeaderIdentity": { + "message": "Chỉnh sửa danh tính", + "description": "Header for edit identity item type" + }, + "editItemHeaderNote": { + "message": "Chỉnh sửa ghi chú", + "description": "Header for edit note item type" + }, + "editItemHeaderSshKey": { + "message": "Sửa khóa SSH", + "description": "Header for edit SSH key item type" + }, + "editItemHeaderTextSend": { + "message": "Sửa Send văn bản", + "description": "Header for edit text send" + }, + "editItemHeaderFileSend": { + "message": "Sửa Send tập tin", + "description": "Header for edit file send" + }, + "viewItemHeaderLogin": { + "message": "Xem đăng nhập", + "description": "Header for view login item type" + }, + "viewItemHeaderCard": { + "message": "Xem thẻ", + "description": "Header for view card item type" + }, + "viewItemHeaderIdentity": { + "message": "Xem danh tính", + "description": "Header for view identity item type" + }, + "viewItemHeaderNote": { + "message": "Xem ghi chú", + "description": "Header for view note item type" + }, + "viewItemHeaderSshKey": { + "message": "Xem khóa SSH", + "description": "Header for view SSH key item type" }, "passwordHistory": { "message": "Lịch sử mật khẩu" @@ -2026,7 +2113,7 @@ } }, "passwordSafe": { - "message": "Mật khẩu này không được tìm thấy trong bất kỳ báo cáo lộ lọt dữ liệu nào được biết đến. Bạn có thể tiếp tục sử dụng nó." + "message": "Không tìm thấy mật khẩu này trong các vụ rò rỉ dữ liệu trước đây. Nó an toàn để sử dụng." }, "baseDomain": { "message": "Tên miền cơ sở", @@ -2106,11 +2193,11 @@ "description": "ex. Date this item was updated" }, "dateCreated": { - "message": "Ngày tạo", + "message": "Tạo lúc", "description": "ex. Date this item was created" }, "datePasswordUpdated": { - "message": "Đã cập nhật mật khẩu", + "message": "Mật khẩu được cập nhật lần cuối", "description": "ex. Date this password was updated" }, "neverLockWarning": { @@ -2169,7 +2256,7 @@ "message": "Mã PIN là bắt buộc." }, "invalidPin": { - "message": "Mã PIN không hợp lệ." + "message": "Mã PIN không chính xác." }, "tooManyInvalidPinEntryAttemptsLoggingOut": { "message": "Gõ sai mã PIN quá nhiều lần. Đang đăng xuất." @@ -2205,7 +2292,7 @@ "message": "Trình tạo mật khẩu" }, "usernameGenerator": { - "message": "Trình tạo tên người dùng" + "message": "Trình tạo tên đăng nhập" }, "useThisEmail": { "message": "Dùng email này" @@ -2217,7 +2304,7 @@ "message": "Dùng cụm mật khẩu này" }, "useThisUsername": { - "message": "Dùng tên người dùng này" + "message": "Dùng tên đăng nhập này" }, "securePasswordGenerated": { "message": "Mật khẩu an toàn đã được tạo! Đừng quên cập nhật mật khẩu của bạn trên trang web." @@ -2234,10 +2321,10 @@ "message": "Tùy chỉnh kho" }, "vaultTimeoutAction": { - "message": "Hành động khi hết thời gian chờ của kho lưu trữ" + "message": "Hành động sau khi đóng kho" }, "vaultTimeoutAction1": { - "message": "Hành động hết thời gian chờ" + "message": "Hành động sau khi đóng kho" }, "lock": { "message": "Khóa", @@ -2269,10 +2356,10 @@ "message": "Bạn đã có tài khoản?" }, "vaultTimeoutLogOutConfirmation": { - "message": "Đăng xuất sẽ xóa tất cả quyền truy cập vào kho của bạn và yêu cầu xác minh trực tuyến sau khi hết thời gian chờ. Bạn có chắc chắn muốn sử dụng cài đặt này không?" + "message": "Đăng xuất sẽ xóa toàn bộ quyền truy cập vào kho của bạn và yêu cầu xác minh lại sau khi đóng kho. Bạn có chắc chắn muốn sử dụng cài đặt này không?" }, "vaultTimeoutLogOutConfirmationTitle": { - "message": "Xác nhận hành động khi hết thời gian chờ" + "message": "Xác nhận hành động sau khi đóng kho" }, "autoFillAndSave": { "message": "Tự động điền và lưu" @@ -2377,7 +2464,7 @@ "message": "Bạn đồng ý với những điều sau khi nhấn chọn ô này:" }, "acceptPoliciesRequired": { - "message": "Điều khoản sử dụng và Chính sách quyền riêng tư chưa được đồng ý." + "message": "Bạn chưa đồng ý với Điều khoản Dịch vụ và Chính sách Bảo mật." }, "termsOfService": { "message": "Điều khoản dịch vụ" @@ -2452,7 +2539,7 @@ "message": "Nhận dạng sinh trắc học không được hỗ trợ" }, "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" + "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." }, "biometricsNotUnlockedTitle": { "message": "Người dùng đã khoá hoặc đã đăng xuất" @@ -2685,7 +2772,7 @@ "message": "Giới hạn số lượt xem" }, "limitSendViewsHint": { - "message": "Không ai có thể xem mục Gửi này sau khi đạt đến giới hạn.", + "message": "Không ai có thể xem Send này sau khi đạt đến giới hạn.", "description": "Displayed under the limit views field on Send" }, "limitSendViewsCount": { @@ -2703,7 +2790,7 @@ "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "sendDetails": { - "message": "Chi tiết Gửi", + "message": "Chi tiết Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "sendTypeText": { @@ -2724,7 +2811,7 @@ "description": "This text will be displayed after a Send has been accessed the maximum amount of times." }, "hideTextByDefault": { - "message": "Mặc định ẩn văn bản" + "message": "Ẩn văn bản theo mặc định" }, "expired": { "message": "Đã hết hạn" @@ -2771,7 +2858,7 @@ "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "deleteSendPermanentConfirmation": { - "message": "Bạn có chắc chắn muốn xóa vĩnh viễn mục Gửi này không?", + "message": "Bạn có chắc chắn muốn xóa vĩnh viễn Send này không?", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "editSend": { @@ -2779,10 +2866,10 @@ "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "deletionDate": { - "message": "Ngày xóa" + "message": "Xóa sau" }, "deletionDateDescV2": { - "message": "Mục Gửi sẽ được xóa vĩnh viễn vào ngày này.", + "message": "Send sẽ được xóa vĩnh viễn vào ngày này.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "expirationDate": { @@ -2804,11 +2891,11 @@ "message": "Tùy chỉnh" }, "sendPasswordDescV3": { - "message": "Thêm mật khẩu tùy chọn cho người nhận để có thể truy cập vào mục Gửi này.", + "message": "Thêm mật khẩu tùy chọn cho người nhận để có thể truy cập vào Send này.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "createSend": { - "message": "Send mới", + "message": "Tạo Send mới", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "newPassword": { @@ -2827,15 +2914,15 @@ "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "createdSendSuccessfully": { - "message": "Mục Gửi đã tạo thành công!", + "message": "Đã tạo Send thành công!", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "sendExpiresInHoursSingle": { - "message": "Mục Gửi này sẽ được cung cấp cho bất kỳ ai có liên kết trong 1 giờ tới.", + "message": "Send này sẽ được cung cấp cho bất kỳ ai có liên kết trong 1 giờ tới.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "sendExpiresInHours": { - "message": "Mục Gửi này sẽ được cung cấp cho bất kỳ ai có liên kết trong $HOURS$ giờ tới.", + "message": "Send này sẽ được cung cấp cho bất kỳ ai có liên kết trong $HOURS$ giờ tới.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.", "placeholders": { "hours": { @@ -2845,11 +2932,11 @@ } }, "sendExpiresInDaysSingle": { - "message": "Mục Gửi này sẽ được cung cấp cho bất kỳ ai có liên kết trong 1 ngày tới.", + "message": "Send này sẽ được cung cấp cho bất kỳ ai có liên kết trong 1 ngày tới.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "sendExpiresInDays": { - "message": "Mục Gửi này sẽ được cung cấp cho bất kỳ ai có liên kết trong $DAYS$ ngày tới.", + "message": "Send này sẽ được cung cấp cho bất kỳ ai có liên kết trong $DAYS$ ngày tới.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated.", "placeholders": { "days": { @@ -2859,7 +2946,7 @@ } }, "sendLinkCopied": { - "message": "Đã sao chép liên kết Gửi", + "message": "Đã sao chép liên kết Send", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "editedSend": { @@ -2871,7 +2958,7 @@ "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "sendFilePopoutDialogDesc": { - "message": "Để tạo tệp Gửi, bạn cần mở phần mở rộng trong cửa sổ mới.", + "message": "Để tạo Send tập tin, bạn cần mở phần mở rộng trong cửa sổ mới.", "description": "'Send' is a noun and the name of a feature called 'Bitwarden Send'. It should not be translated." }, "sendLinuxChromiumFileWarning": { @@ -2984,7 +3071,7 @@ "message": "Phút" }, "vaultTimeoutPolicyAffectingOptions": { - "message": "Các yêu cầu chính sách của doanh nghiệp đã được áp dụng cho các tùy chọn thời gian chờ của bạn" + "message": "Các yêu cầu chính sách của doanh nghiệp đã được áp dụng cho các tùy chọn thời gian mở kho của bạn" }, "vaultTimeoutPolicyInEffect": { "message": "Tổ chức của bạn đã đặt thời gian mở kho tối đa là $HOURS$ giờ và $MINUTES$ phút.", @@ -3013,7 +3100,7 @@ } }, "vaultTimeoutPolicyMaximumError": { - "message": "Thời gian chờ đã vượt quá giới hạn do tổ chức của bạn đặt ra: Tối đa $HOURS$ giờ và $MINUTES$ phút", + "message": "Thời gian mở kho đã vượt quá giới hạn do tổ chức của bạn đặt ra: Tối đa $HOURS$ giờ và $MINUTES$ phút", "placeholders": { "hours": { "content": "$1", @@ -3026,7 +3113,7 @@ } }, "vaultTimeoutPolicyWithActionInEffect": { - "message": "Các chính sách của tổ chức bạn đang ảnh hưởng đến thời gian mở kho. Thời gian mở kho tối đa được phép là $HOURS$ giờ và $MINUTES$ phút. Kho sẽ $ACTION$ sau khi hết thời gian mở kho.", + "message": "Các chính sách của tổ chức bạn đang ảnh hưởng đến thời gian mở kho. Thời gian mở kho tối đa được phép là $HOURS$ giờ và $MINUTES$ phút. Kho sẽ $ACTION$ sau khi đóng kho.", "placeholders": { "hours": { "content": "$1", @@ -3043,7 +3130,7 @@ } }, "vaultTimeoutActionPolicyInEffect": { - "message": "Chính sách của tổ chức bạn đã thiết lập hành động sau khi hết thời gian mở kho là $ACTION$.", + "message": "Tổ chức bạn đã thiết lập hành động sau khi đóng kho là $ACTION$.", "placeholders": { "action": { "content": "$1", @@ -3055,7 +3142,7 @@ "message": "Thời gian mở kho vượt quá giới hạn do tổ chức của bạn đặt ra." }, "vaultExportDisabled": { - "message": "Xuất kho không có sẵn" + "message": "Chức năng xuất kho không khả dụng" }, "personalVaultExportPolicyInEffect": { "message": "Các chính sách của tổ chức ngăn cản bạn xuất kho lưu trữ cá nhân của mình." @@ -3129,6 +3216,24 @@ } } }, + "exportingOrganizationVaultFromPasswordManagerWithDataOwnershipDesc": { + "message": "Chỉ kho lưu trữ tổ chức liên kết với $ORGANIZATION$ sẽ được xuất.", + "placeholders": { + "organization": { + "content": "$1", + "example": "My Org Name" + } + } + }, + "exportingOrganizationVaultFromAdminConsoleWithDataOwnershipDesc": { + "message": "Chỉ kho lưu trữ tổ chức liên kết với $ORGANIZATION$ được xuất. Bộ sưu tập mục của tôi sẽ không được bao gồm.", + "placeholders": { + "organization": { + "content": "$1", + "example": "My Org Name" + } + } + }, "error": { "message": "Lỗi" }, @@ -3147,7 +3252,7 @@ "description": "This is part of a larger sentence. The full sentence will read 'Contact customer success to avoid additional data loss.'" }, "generateUsername": { - "message": "Tạo tên người dùng" + "message": "Tạo tên đăng nhập" }, "generateEmail": { "message": "Tạo email" @@ -3460,6 +3565,28 @@ "logInRequestSent": { "message": "Đã gửi yêu cầu" }, + "loginRequestApprovedForEmailOnDevice": { + "message": "Đã phê duyệt yêu cầu đăng nhập cho $EMAIL$ trên $DEVICE$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + }, + "device": { + "content": "$2", + "example": "Web app - Chrome" + } + } + }, + "youDeniedLoginAttemptFromAnotherDevice": { + "message": "Bạn đã từ chối một lần đăng nhập từ thiết bị khác. Nếu đó là bạn, hãy thử đăng nhập lại bằng thiết bị đó." + }, + "device": { + "message": "Thiết bị" + }, + "loginStatus": { + "message": "Trạng thái đăng nhập" + }, "masterPasswordChanged": { "message": "Đã lưu mật khẩu chính" }, @@ -3470,7 +3597,7 @@ "message": "Mật khẩu này đã bị rò rỉ trong một vụ tấn công dữ liệu. Dùng mật khẩu mới và an toàn để bảo vệ tài khoản bạn. Bạn có chắc muốn sử dụng mật khẩu đã bị rò rỉ?" }, "weakAndExposedMasterPassword": { - "message": "Mật khẩu chính yếu và dễ bị lộ" + "message": "Mật khẩu chính yếu và đã bị lộ" }, "weakAndBreachedMasterPasswordDesc": { "message": "Mật khẩu yếu này đã bị rò rỉ trong một vụ tấn công dữ liệu. Hãy dùng mật khẩu mạnh và duy nhất để bảo vệ tài khoản của bạn. Bạn có chắc muốn sử dụng mật khẩu đã bị rò rỉ?" @@ -3496,9 +3623,6 @@ "autofillPageLoadPolicyActivated": { "message": "Chính sách của tổ chức bạn đã kích hoạt tính năng tự động điền khi tải trang." }, - "howToAutofill": { - "message": "Cách tự đồng điền" - }, "autofillSelectInfoWithCommand": { "message": "Chọn một mục từ màn hình này, sử dụng phím tắt $COMMAND$, hoặc khám phá các tùy chọn khác trong cài đặt.", "placeholders": { @@ -3556,6 +3680,94 @@ "rememberThisDeviceToMakeFutureLoginsSeamless": { "message": "Nhớ thiết bị này để đăng nhập dễ dàng trong tương lai" }, + "manageDevices": { + "message": "Quản lý thiết bị" + }, + "currentSession": { + "message": "Phiên hiện tại" + }, + "mobile": { + "message": "Di động", + "description": "Mobile app" + }, + "extension": { + "message": "Tiện ích mở rộng", + "description": "Browser extension/addon" + }, + "desktop": { + "message": "Máy tính", + "description": "Desktop app" + }, + "webVault": { + "message": "Kho web" + }, + "webApp": { + "message": "Ứng dụng web" + }, + "cli": { + "message": "Giao diện dòng lệnh (CLI)" + }, + "sdk": { + "message": "SDK", + "description": "Software Development Kit" + }, + "requestPending": { + "message": "Yêu cầu đang chờ xử lý" + }, + "firstLogin": { + "message": "Đăng nhập lần đầu" + }, + "trusted": { + "message": "Tin tưởng" + }, + "needsApproval": { + "message": "Cần phê duyệt" + }, + "devices": { + "message": "Thiết bị" + }, + "accessAttemptBy": { + "message": "Cố gắng truy cập bởi $EMAIL$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + } + } + }, + "confirmAccess": { + "message": "Xác nhận truy cập" + }, + "denyAccess": { + "message": "Từ chối truy cập" + }, + "time": { + "message": "Thời gian" + }, + "deviceType": { + "message": "Loại thiết bị" + }, + "loginRequest": { + "message": "Yêu cầu đăng nhập" + }, + "thisRequestIsNoLongerValid": { + "message": "Yêu cầu này không còn hiệu lực." + }, + "loginRequestHasAlreadyExpired": { + "message": "Yêu cầu đăng nhập đã hết hạn." + }, + "justNow": { + "message": "Vừa xong" + }, + "requestedXMinutesAgo": { + "message": "Đã yêu cầu $MINUTES$ phút trước", + "placeholders": { + "minutes": { + "content": "$1", + "example": "5" + } + } + }, "deviceApprovalRequired": { "message": "Yêu cầu phê duyệt thiết bị. Chọn một tuỳ chọn phê duyệt bên dưới:" }, @@ -3599,7 +3811,7 @@ "message": "và tiếp tục tạo tài khoản của bạn." }, "noEmail": { - "message": "Không có email?" + "message": "Không nhận được email?" }, "goBack": { "message": "Quay lại" @@ -3686,7 +3898,7 @@ "message": "Tìm kiếm" }, "inputMinLength": { - "message": "Đầu vào phải có độ dài ít nhất $COUNT$ ký tự.", + "message": "Dữ liệu nhập vào phải có độ dài ít nhất $COUNT$ ký tự.", "placeholders": { "count": { "content": "$1", @@ -3695,7 +3907,7 @@ } }, "inputMaxLength": { - "message": "Độ dài của dữ liệu đầu vào không được vượt quá $COUNT$ ký tự.", + "message": "Độ dài của dữ liệu nhập vào không được vượt quá $COUNT$ ký tự.", "placeholders": { "count": { "content": "$1", @@ -3713,7 +3925,7 @@ } }, "inputMinValue": { - "message": "Giá trị đầu vào phải lớn hơn hoặc bằng $MIN$.", + "message": "Dữ liệu nhập vào phải ít nhất là $MIN$.", "placeholders": { "min": { "content": "$1", @@ -3722,7 +3934,7 @@ } }, "inputMaxValue": { - "message": "Giá trị đầu vào không được vượt quá $MAX$.", + "message": "Dữ liệu nhập vào không được vượt quá $MAX$.", "placeholders": { "max": { "content": "$1", @@ -3734,11 +3946,11 @@ "message": "Có ít nhất 1 địa chỉ email không hợp lệ" }, "inputTrimValidator": { - "message": "Dữ liệu đầu vào không được chỉ chứa khoảng trắng.", + "message": "Dữ liệu nhập vào không được chỉ chứa khoảng trắng.", "description": "Notification to inform the user that a form's input can't contain only whitespace." }, "inputEmail": { - "message": "Đầu vào không phải là địa chỉ email." + "message": "Dữ liệu nhập vào không phải là địa chỉ email." }, "fieldsNeedAttention": { "message": "$COUNT$ trường ở trên cần bạn chú ý.", @@ -3795,18 +4007,10 @@ "aliasDomain": { "message": "Tên miền thay thế" }, - "passwordRepromptDisabledAutofillOnPageLoad": { - "message": "Các mục yêu cầu nhập lại mật khẩu chính không thể được tự động điền khi tải trang. Tự động điền khi tải trang đã bị tắt.", - "description": "Toast message for describing that master password re-prompt cannot be autofilled on page load." - }, "autofillOnPageLoadSetToDefault": { "message": "Tự động điền khi tải trang được đặt thành mặc định trong cài đặt.", "description": "Toast message for informing the user that autofill on page load has been set to the default setting." }, - "turnOffMasterPasswordPromptToEditField": { - "message": "Tắt yêu cầu nhập lại mật khẩu chính để chỉnh sửa trường này", - "description": "Message appearing below the autofill on load message when master password reprompt is set for a vault item." - }, "toggleSideNavigation": { "message": "Ẩn/hiện thanh điều hướng bên" }, @@ -3854,7 +4058,7 @@ "description": "Screen reader text for when overlay item is in focused" }, "partialUsername": { - "message": "Tên người dùng một phần", + "message": "Tên đăng nhập một phần", "description": "Screen reader text for when a login item is focused where a partial username is displayed. SR will announce this phrase before reading the text of the partial username" }, "noItemsToShow": { @@ -4015,15 +4219,11 @@ "selectImportCollection": { "message": "Chọn bộ sưu tập" }, - "importTargetHint": { - "message": "Chọn tùy chọn này nếu bạn muốn nội dung của tệp đã nhập được di chuyển đến $DESTINATION$", - "description": "Located as a hint under the import target. Will be appended by either folder or collection, depending if the user is importing into an individual or an organizational vault.", - "placeholders": { - "destination": { - "content": "$1", - "example": "folder or collection" - } - } + "importTargetHintCollection": { + "message": "Chọn tùy chọn này nếu bạn muốn nội dung tệp đã nhập được chuyển vào một bộ sưu tập" + }, + "importTargetHintFolder": { + "message": "Chọn tùy chọn này nếu bạn muốn nội dung tệp đã nhập được chuyển vào một thư mục" }, "importUnassignedItemsError": { "message": "Tập tin chứa các mục không xác định." @@ -4044,7 +4244,7 @@ "message": "hoặc sao chép/dán nội dung của tập tin nhập" }, "instructionsFor": { - "message": "Hướng dẫn dùng $NAME$", + "message": "Hướng dẫn cho $NAME$", "description": "The title for the import tool instructions.", "placeholders": { "name": { @@ -4080,9 +4280,6 @@ "passkeyNotCopiedAlert": { "message": "Bản sao sẽ không bao gồm mã khoá. Bạn có muốn tiếp tục tạo bản sao cho mục này?" }, - "passkeyFeatureIsNotImplementedForAccountsWithoutMasterPassword": { - "message": "Trang web yêu cầu xác minh. Tính năng này hiện chưa được hỗ trợ cho tài khoản không có mật khẩu chính." - }, "logInWithPasskeyQuestion": { "message": "Đăng nhập bằng mã khóa?" }, @@ -4138,7 +4335,7 @@ "message": "Không tìm thấy dữ liệu LastPass" }, "incorrectUsernameOrPassword": { - "message": "Tên người dùng hoặc mật khẩu không đúng" + "message": "Tên đăng nhập hoặc mật khẩu không đúng" }, "incorrectPassword": { "message": "Mật khẩu không đúng" @@ -4196,7 +4393,7 @@ "message": "Nhập từ CSV" }, "lastPassTryAgainCheckEmail": { - "message": "Thử lại hoặc tìm email từ LastPass để xác minh đó là bạn." + "message": "Hãy thử lại hoặc kiểm tra email từ LastPass để xác minh rằng đó là bạn." }, "collection": { "message": "Bộ sưu tập" @@ -4247,7 +4444,7 @@ "message": "Chỉ một lần" }, "alwaysForThisSite": { - "message": "Luôn cho trang này" + "message": "Luôn luôn cho trang này" }, "domainAddedToExcludedDomains": { "message": "$DOMAIN$ đã được thêm vào danh sách các tên miền bị loại trừ.", @@ -4323,7 +4520,7 @@ "description": "Title for the dialog that appears when the user has not granted the extension permission to set privacy settings" }, "privacyPermissionAdditionNotGrantedDescription": { - "message": "Bạn phải cấp quyền riêng tư của trình duyệt cho Bitwarden để đặt nó làm trình quản lý mật khẩu mặc định.", + "message": "Bạn phải cấp quyền riêng tư của trình duyệt cho Bitwarden để đặt làm trình quản lý mật khẩu mặc định.", "description": "Description for the dialog that appears when the user has not granted the extension permission to set privacy settings" }, "makeDefault": { @@ -4465,17 +4662,17 @@ } } }, - "copyFieldValue": { - "message": "Sao chép $FIELD$, $VALUE$", + "copyFieldCipherName": { + "message": "Sao chép $FIELD$, $CIPHERNAME$", "description": "Title for a button that copies a field value to the clipboard.", "placeholders": { "field": { "content": "$1", "example": "Username" }, - "value": { + "ciphername": { "content": "$2", - "example": "Foo" + "example": "Login Item" } } }, @@ -4625,7 +4822,7 @@ "message": "Truy cập mật khẩu của bạn mọi lúc mọi nơi với ứng dụng di động Bitwarden." }, "getTheDesktopApp": { - "message": "Tải ứng dụng cho máy tính" + "message": "Tải ứng dụng máy tính" }, "getTheDesktopAppDesc": { "message": "Truy cập kho lưu trữ của bạn mà không cần trình duyệt, sau đó thiết lập mở khóa bằng sinh trắc học để mở khóa dễ dàng trong cả ứng dụng trên máy tính và tiện ích mở rộng trình duyệt." @@ -4760,7 +4957,7 @@ "message": "Thông tin thẻ" }, "cardBrandDetails": { - "message": "Chi tiết $BRAND$", + "message": "Chi tiết thẻ $BRAND$", "placeholders": { "brand": { "content": "$1", @@ -4768,9 +4965,6 @@ } } }, - "enableAnimations": { - "message": "Bật hiệu ứng động" - }, "showAnimations": { "message": "Hiện hiệu ứng động" }, @@ -4983,15 +5177,9 @@ "itemLocation": { "message": "Vị trí mục" }, - "fileSend": { - "message": "Gửi tệp" - }, "fileSends": { "message": "Gửi tệp" }, - "textSend": { - "message": "Gửi văn bản" - }, "textSends": { "message": "Gửi văn bản" }, @@ -5001,6 +5189,18 @@ "showNumberOfAutofillSuggestions": { "message": "Hiển thị số lượng đề xuất tự động điền đăng nhập trên biểu tượng tiện ích mở rộng" }, + "accountAccessRequested": { + "message": "Yêu cầu truy cập tài khoản" + }, + "confirmAccessAttempt": { + "message": "Phê duyệt yêu cầu truy cập cho $EMAIL$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + } + } + }, "showQuickCopyActions": { "message": "Hiển thị các hành động sao chép nhanh trên Kho" }, @@ -5038,10 +5238,7 @@ "message": "Thử lại" }, "vaultCustomTimeoutMinimum": { - "message": "Thời gian chờ tùy chỉnh tối thiểu là 1 phút." - }, - "additionalContentAvailable": { - "message": "Nội dung bổ sung có sẵn" + "message": "Thời gian đóng kho tùy chỉnh tối thiểu là 1 phút." }, "fileSavedToDevice": { "message": "Tệp đã được lưu vào thiết bị. Quản lý từ phần Tải về trên thiết bị của bạn." @@ -5104,7 +5301,7 @@ "message": "Mở kho của bạn trong vài giây" }, "unlockVaultDesc": { - "message": "Bạn có thể tùy chỉnh cài đặt mở khóa và thời gian hết phiên để truy cập kho lưu trữ của mình nhanh hơn." + "message": "Bạn có thể tùy chỉnh cài đặt mở khóa và thời gian mở kho để truy cập kho lưu trữ của mình nhanh hơn." }, "unlockPinSet": { "message": "Đã thiết lập mở khóa bằng mã PIN" @@ -5305,7 +5502,7 @@ "message": "Loại khóa SSH không được hỗ trợ" }, "importSshKeyFromClipboard": { - "message": "Nhập khóa từ bộ nhớ tạm" + "message": "Nhập khóa từ bảng nhớ tạm" }, "sshKeyImported": { "message": "Khóa SSH được nhập thành công" @@ -5328,6 +5525,12 @@ "changeAtRiskPassword": { "message": "Thay đổi mật khẩu có rủi ro" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "Thông tin đăng nhập này có rủi ro và thiếu một trang web. Hãy thêm trang web và đổi mật khẩu để tăng cường bảo mật." + }, + "missingWebsite": { + "message": "Thiếu trang web" + }, "settingsVaultOptions": { "message": "Tùy chọn kho" }, @@ -5376,6 +5579,18 @@ "hasItemsVaultNudgeTitle": { "message": "Chào mừng đến với kho lưu trữ của bạn!" }, + "phishingPageTitle": { + "message": "Trang web lừa đảo" + }, + "phishingPageCloseTab": { + "message": "Đóng tab" + }, + "phishingPageContinue": { + "message": "Tiếp tục" + }, + "phishingPageLearnWhy": { + "message": "Tại sao bạn thấy điều này?" + }, "hasItemsVaultNudgeBodyOne": { "message": "Tự động điền các mục cho trang hiện tại" }, @@ -5451,11 +5666,33 @@ "message": "Dễ dàng tạo mật khẩu mạnh và duy nhất bằng cách nhấp vào Trình tạo mật khẩu để giúp bạn bảo vệ tài khoản đăng nhập của mình.", "description": "Aria label for the body content of the generator nudge" }, + "aboutThisSetting": { + "message": "Về cài đặt này" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden sẽ sử dụng URI đăng nhập đã lưu để xác định biểu tượng hoặc URL đổi mật khẩu nào cần dùng nhằm cải thiện trải nghiệm của bạn. Không có thông tin nào được thu thập hay lưu lại khi bạn sử dụng dịch vụ này." + }, "noPermissionsViewPage": { "message": "Bạn không có quyền truy cập vào trang này. Hãy thử đăng nhập bằng tài khoản khác." }, "wasmNotSupported": { "message": "WebAssembly không được hỗ trợ trên trình duyệt của bạn hoặc chưa được kích hoạt. WebAssembly là yêu cầu bắt buộc để sử dụng ứng dụng Bitwarden.", "description": "'WebAssembly' is a technical term and should not be translated." + }, + "showMore": { + "message": "Xem thêm" + }, + "showLess": { + "message": "Thu gọn" + }, + "next": { + "message": "Tiếp theo" + }, + "moreBreadcrumbs": { + "message": "Thêm mục điều hướng", + "description": "This is used in the context of a breadcrumb navigation, indicating that there are more items in the breadcrumb trail that are not currently displayed." + }, + "confirmKeyConnectorDomain": { + "message": "Xác nhận tên miền Key Connector" } } diff --git a/apps/browser/src/_locales/zh_CN/messages.json b/apps/browser/src/_locales/zh_CN/messages.json index 2bcd7935d47..aa3c9de9e13 100644 --- a/apps/browser/src/_locales/zh_CN/messages.json +++ b/apps/browser/src/_locales/zh_CN/messages.json @@ -341,10 +341,10 @@ "message": "Bitwarden 商业版" }, "bitwardenAuthenticator": { - "message": "Bitwarden 验证器" + "message": "Bitwarden Authenticator" }, "continueToAuthenticatorPageDesc": { - "message": "您可以使用 Bitwarden 验证器存储验证器密钥,并为两步验证流程生成 TOTP 代码。访问 bitwarden.com 网站了解更多信息。" + "message": "Bitwarden Authenticator 允许您存储验证器密钥以及为两步验证流程生成 TOTP 代码。访问 bitwarden.com 网站了解更多信息" }, "bitwardenSecretsManager": { "message": "Bitwarden 机密管理器" @@ -547,12 +547,50 @@ "searchVault": { "message": "搜索密码库" }, + "resetSearch": { + "message": "重置搜索" + }, + "archiveNoun": { + "message": "归档", + "description": "Noun" + }, + "archiveVerb": { + "message": "归档", + "description": "Verb" + }, + "unarchive": { + "message": "取消归档" + }, + "itemsInArchive": { + "message": "归档中的项目" + }, + "noItemsInArchive": { + "message": "归档中没有项目" + }, + "noItemsInArchiveDesc": { + "message": "已归档的项目将显示在此处,并将被排除在一般搜索结果和自动填充建议之外。" + }, + "itemSentToArchive": { + "message": "项目已归档" + }, + "itemRemovedFromArchive": { + "message": "项目已取消归档" + }, + "archiveItem": { + "message": "归档项目" + }, + "archiveItemConfirmDesc": { + "message": "已归档的项目将被排除在一般搜索结果和自动填充建议之外。确定要归档此项目吗?" + }, "edit": { "message": "编辑" }, "view": { "message": "查看" }, + "viewLogin": { + "message": "查看登录" + }, "noItemsInList": { "message": "没有可列出的项目。" }, @@ -695,6 +733,15 @@ "invalidMasterPassword": { "message": "无效的主密码" }, + "invalidMasterPasswordConfirmEmailAndHost": { + "message": "无效的主密码。请确认您的电子邮箱正确无误,以及您的账户是在 $HOST$ 上创建的。", + "placeholders": { + "host": { + "content": "$1", + "example": "vault.bitwarden.com" + } + } + }, "vaultTimeout": { "message": "密码库超时时间" }, @@ -808,7 +855,7 @@ "message": "您可以关闭此窗口" }, "masterPassSent": { - "message": "我们已经为您发送了包含主密码提示的电子邮件。" + "message": "我们已经向您发送了一封包含主密码提示的电子邮件。" }, "verificationCodeRequired": { "message": "必须填写验证码。" @@ -1101,7 +1148,7 @@ "description": "Shown to user after item is updated." }, "selectItemAriaLabel": { - "message": "选择 $ITEMTYPE$,$ITEMNAME$", + "message": "选择 $ITEMNAME$ 中的 $ITEMTYPE$", "description": "Used by screen readers. $1 is the item type (like vault or folder), $2 is the selected item name.", "placeholders": { "itemType": { @@ -1468,7 +1515,7 @@ "message": "身份验证超时" }, "authenticationSessionTimedOut": { - "message": "身份验证会话超时。请重新启动登录过程。" + "message": "身份验证会话超时。请重新开始登录过程。" }, "verificationCodeEmailSent": { "message": "验证邮件已发送到 $EMAIL$。", @@ -1501,6 +1548,15 @@ "readSecurityKey": { "message": "读取安全密钥" }, + "readingPasskeyLoading": { + "message": "正在读取通行密钥..." + }, + "passkeyAuthenticationFailed": { + "message": "通行密钥验证失败" + }, + "useADifferentLogInMethod": { + "message": "使用其他登录方式" + }, "awaitingSecurityKeyInteraction": { "message": "等待安全密钥交互..." }, @@ -1519,9 +1575,6 @@ "selectTwoStepLoginMethod": { "message": "选择两步登录方式" }, - "recoveryCodeDesc": { - "message": "无法访问您所有的双重身份提供程序吗?请使用您的恢复代码来停用您账户中所有的双重身份提供程序。" - }, "recoveryCodeTitle": { "message": "恢复代码" }, @@ -1529,7 +1582,7 @@ "message": "验证器 App" }, "authenticatorAppDescV2": { - "message": "输入验证器 App(例如 Bitwarden 验证器)生成的代码。", + "message": "输入验证器 App(例如 Bitwarden Authenticator)生成的代码。", "description": "'Bitwarden Authenticator' is a product name and should not be translated." }, "yubiKeyTitleV2": { @@ -1609,10 +1662,10 @@ "message": "轻松找到自动填充建议" }, "autofillSpotlightDesc": { - "message": "关闭浏览器的自动填充设置,以免与 Bitwarden 产生冲突。" + "message": "停用您浏览器的自动填充设置,以免与 Bitwarden 产生冲突。" }, "turnOffBrowserAutofill": { - "message": "关闭 $BROWSER$ 的自动填充", + "message": "停用 $BROWSER$ 自动填充", "placeholders": { "browser": { "content": "$1", @@ -1621,7 +1674,7 @@ } }, "turnOffAutofill": { - "message": "关闭自动填充" + "message": "停用自动填充" }, "showInlineMenuLabel": { "message": "在表单字段中显示自动填充建议" @@ -1680,9 +1733,6 @@ "defaultAutoFillOnPageLoadDesc": { "message": "您可以从项目编辑视图中为单个登录项目停用页面加载时自动填充。" }, - "itemAutoFillOnPageLoad": { - "message": "页面加载时自动填充(如果选项中已设置)" - }, "autoFillOnPageLoadUseDefault": { "message": "使用默认设置" }, @@ -1754,23 +1804,8 @@ "popup2faCloseMessage": { "message": "如果您点击弹窗外的区域以检查您的验证码电子邮件,将导致弹窗关闭。您想在新窗口中打开此弹窗,以便它不会关闭吗?" }, - "popupU2fCloseMessage": { - "message": "此浏览器无法处理此弹出窗口中的 U2F 请求。您想要在新窗口中打开此弹出窗口吗?" - }, - "enableFavicon": { - "message": "显示网站图标" - }, - "faviconDesc": { - "message": "在每个登录项目旁边显示一个可识别的图像。" - }, - "faviconDescAlt": { - "message": "在每个登录的旁边显示一个可识别的图像。适用于所有已登录的账户。" - }, - "enableBadgeCounter": { - "message": "显示角标计数器" - }, - "badgeCounterDesc": { - "message": "指示可用于当前网页的登录项目的数量。" + "showIconsChangePasswordUrls": { + "message": "显示网站图标并获取更改密码的 URL" }, "cardholderName": { "message": "持卡人姓名" @@ -1829,6 +1864,9 @@ "securityCode": { "message": "安全码" }, + "cardNumber": { + "message": "卡号" + }, "ex": { "message": "例如" }, @@ -1931,32 +1969,81 @@ "typeNote": { "message": "笔记" }, - "newItemHeader": { - "message": "新增 $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderLogin": { + "message": "新增登录", + "description": "Header for new login item type" }, - "editItemHeader": { - "message": "编辑 $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderCard": { + "message": "新增支付卡", + "description": "Header for new card item type" }, - "viewItemHeader": { - "message": "查看 $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderIdentity": { + "message": "新增身份", + "description": "Header for new identity item type" + }, + "newItemHeaderNote": { + "message": "新增笔记", + "description": "Header for new note item type" + }, + "newItemHeaderSshKey": { + "message": "新增 SSH 密钥", + "description": "Header for new SSH key item type" + }, + "newItemHeaderTextSend": { + "message": "新增文本 Send", + "description": "Header for new text send" + }, + "newItemHeaderFileSend": { + "message": "新增文件 Send", + "description": "Header for new file send" + }, + "editItemHeaderLogin": { + "message": "编辑登录", + "description": "Header for edit login item type" + }, + "editItemHeaderCard": { + "message": "编辑支付卡", + "description": "Header for edit card item type" + }, + "editItemHeaderIdentity": { + "message": "编辑身份", + "description": "Header for edit identity item type" + }, + "editItemHeaderNote": { + "message": "编辑笔记", + "description": "Header for edit note item type" + }, + "editItemHeaderSshKey": { + "message": "编辑 SSH 密钥", + "description": "Header for edit SSH key item type" + }, + "editItemHeaderTextSend": { + "message": "编辑文本 Send", + "description": "Header for edit text send" + }, + "editItemHeaderFileSend": { + "message": "编辑文件 Send", + "description": "Header for edit file send" + }, + "viewItemHeaderLogin": { + "message": "查看登录", + "description": "Header for view login item type" + }, + "viewItemHeaderCard": { + "message": "查看支付卡", + "description": "Header for view card item type" + }, + "viewItemHeaderIdentity": { + "message": "查看身份", + "description": "Header for view identity item type" + }, + "viewItemHeaderNote": { + "message": "查看笔记", + "description": "Header for view note item type" + }, + "viewItemHeaderSshKey": { + "message": "查看 SSH 密钥", + "description": "Header for view SSH key item type" }, "passwordHistory": { "message": "密码历史记录" @@ -3013,7 +3100,7 @@ } }, "vaultTimeoutPolicyMaximumError": { - "message": "超时时间超出了您组织设置的此限制:最多 $HOURS$ 小时 $MINUTES$ 分钟", + "message": "超时时间超出了您组织设置的限制:最多 $HOURS$ 小时 $MINUTES$ 分钟", "placeholders": { "hours": { "content": "$1", @@ -3129,6 +3216,24 @@ } } }, + "exportingOrganizationVaultFromPasswordManagerWithDataOwnershipDesc": { + "message": "仅会导出与 $ORGANIZATION$ 关联的组织密码库。", + "placeholders": { + "organization": { + "content": "$1", + "example": "My Org Name" + } + } + }, + "exportingOrganizationVaultFromAdminConsoleWithDataOwnershipDesc": { + "message": "仅会导出与 $ORGANIZATION$ 关联的组织密码库,不包括我的项目集合。", + "placeholders": { + "organization": { + "content": "$1", + "example": "My Org Name" + } + } + }, "error": { "message": "错误" }, @@ -3368,10 +3473,10 @@ "message": "需要高级版订阅" }, "organizationIsDisabled": { - "message": "组织已停用。" + "message": "组织已暂停。" }, "disabledOrganizationFilterError": { - "message": "无法访问已停用组织中的项目。请联系您的组织所有者寻求帮助。" + "message": "无法访问已暂停组织中的项目。请联系您的组织所有者寻求帮助。" }, "loggingInTo": { "message": "正在登录到 $DOMAIN$", @@ -3460,6 +3565,28 @@ "logInRequestSent": { "message": "请求已发送" }, + "loginRequestApprovedForEmailOnDevice": { + "message": "已批准 $EMAIL$ 在 $DEVICE$ 上的登录请求", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + }, + "device": { + "content": "$2", + "example": "Web app - Chrome" + } + } + }, + "youDeniedLoginAttemptFromAnotherDevice": { + "message": "您拒绝了一个来自其他设备的登录尝试。若确实是您本人,请尝试再次发起设备登录。" + }, + "device": { + "message": "设备" + }, + "loginStatus": { + "message": "登录状态" + }, "masterPasswordChanged": { "message": "主密码已保存" }, @@ -3496,9 +3623,6 @@ "autofillPageLoadPolicyActivated": { "message": "您的组织策略已启用页面加载时自动填充。" }, - "howToAutofill": { - "message": "如何自动填充" - }, "autofillSelectInfoWithCommand": { "message": "从此界面选择一个项目,使用快捷键 $COMMAND$,或探索设置中的其他选项。", "placeholders": { @@ -3530,7 +3654,7 @@ "message": "自动填充键盘快捷键" }, "autofillLoginShortcutNotSet": { - "message": "未设置自动填充登录快捷键。请在浏览器设置中更改它。" + "message": "自动填充登录快捷键未设置。请在浏览器设置中更改它。" }, "autofillLoginShortcutText": { "message": "自动填充登录快捷键是 $COMMAND$。请在浏览器设置中管理所有快捷键。", @@ -3556,6 +3680,94 @@ "rememberThisDeviceToMakeFutureLoginsSeamless": { "message": "记住此设备以便将来无缝登录" }, + "manageDevices": { + "message": "管理设备" + }, + "currentSession": { + "message": "当前会话" + }, + "mobile": { + "message": "移动", + "description": "Mobile app" + }, + "extension": { + "message": "扩展", + "description": "Browser extension/addon" + }, + "desktop": { + "message": "桌面", + "description": "Desktop app" + }, + "webVault": { + "message": "网页密码库" + }, + "webApp": { + "message": "网页 App" + }, + "cli": { + "message": "CLI" + }, + "sdk": { + "message": "SDK", + "description": "Software Development Kit" + }, + "requestPending": { + "message": "请求待处理" + }, + "firstLogin": { + "message": "首次登录" + }, + "trusted": { + "message": "已信任" + }, + "needsApproval": { + "message": "需要批准" + }, + "devices": { + "message": "设备" + }, + "accessAttemptBy": { + "message": "$EMAIL$ 的访问尝试", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + } + } + }, + "confirmAccess": { + "message": "确认访问" + }, + "denyAccess": { + "message": "拒绝访问" + }, + "time": { + "message": "时间" + }, + "deviceType": { + "message": "设备类型" + }, + "loginRequest": { + "message": "登录请求" + }, + "thisRequestIsNoLongerValid": { + "message": "此请求已失效。" + }, + "loginRequestHasAlreadyExpired": { + "message": "登录请求已过期。" + }, + "justNow": { + "message": "刚刚" + }, + "requestedXMinutesAgo": { + "message": "请求于 $MINUTES$ 分钟前", + "placeholders": { + "minutes": { + "content": "$1", + "example": "5" + } + } + }, "deviceApprovalRequired": { "message": "需要设备批准。请在下面选择一个批准选项:" }, @@ -3578,10 +3790,10 @@ "message": "请求管理员批准" }, "unableToCompleteLogin": { - "message": "Unable to complete login" + "message": "无法完成登录" }, "loginOnTrustedDeviceOrAskAdminToAssignPassword": { - "message": "You need to log in on a trusted device or ask your administrator to assign you a password." + "message": "您需要在某个受信任的设备上登录,或要求管理员为您分配一个密码。" }, "ssoIdentifierRequired": { "message": "必须填写组织 SSO 标识符。" @@ -3686,7 +3898,7 @@ "message": "搜索" }, "inputMinLength": { - "message": "输入长度不能低于 $COUNT$ 个字符。", + "message": "输入长度必须至少为 $COUNT$ 个字符。", "placeholders": { "count": { "content": "$1", @@ -3795,18 +4007,10 @@ "aliasDomain": { "message": "别名域" }, - "passwordRepromptDisabledAutofillOnPageLoad": { - "message": "具有主密码重新提示的项目无法在页面加载时自动填充。页面加载时的自动填充功能已停用。", - "description": "Toast message for describing that master password re-prompt cannot be autofilled on page load." - }, "autofillOnPageLoadSetToDefault": { "message": "页面加载时自动填充设置为使用默认设置。", "description": "Toast message for informing the user that autofill on page load has been set to the default setting." }, - "turnOffMasterPasswordPromptToEditField": { - "message": "停用主密码重新提示以编辑此字段", - "description": "Message appearing below the autofill on load message when master password reprompt is set for a vault item." - }, "toggleSideNavigation": { "message": "切换侧边导航" }, @@ -4015,15 +4219,11 @@ "selectImportCollection": { "message": "选择一个集合" }, - "importTargetHint": { - "message": "如果您希望将导入的文件内容移动到某个 $DESTINATION$,请选择此选项", - "description": "Located as a hint under the import target. Will be appended by either folder or collection, depending if the user is importing into an individual or an organizational vault.", - "placeholders": { - "destination": { - "content": "$1", - "example": "folder or collection" - } - } + "importTargetHintCollection": { + "message": "如果希望将导入的文件内容移动到集合中,请选择此选项" + }, + "importTargetHintFolder": { + "message": "如果希望将导入的文件内容移动到文件夹中,请选择此选项" }, "importUnassignedItemsError": { "message": "文件包含未分配项目。" @@ -4080,9 +4280,6 @@ "passkeyNotCopiedAlert": { "message": "通行密钥将不会被复制到克隆的项目。要继续克隆这个项目吗?" }, - "passkeyFeatureIsNotImplementedForAccountsWithoutMasterPassword": { - "message": "启动站点需要验证。对于没有主密码的账户,此功能尚未实现。" - }, "logInWithPasskeyQuestion": { "message": "使用通行密钥登录吗?" }, @@ -4247,7 +4444,7 @@ "message": "仅此一次" }, "alwaysForThisSite": { - "message": "总是为此站点" + "message": "始终适用于此站点" }, "domainAddedToExcludedDomains": { "message": "$DOMAIN$ 已添加到排除域名列表。", @@ -4263,19 +4460,19 @@ "description": "Label indicating the most common import formats" }, "uriMatchDefaultStrategyHint": { - "message": "URI match detection is how Bitwarden identifies autofill suggestions.", + "message": "Bitwarden 根据 URI 匹配检测来识别自动填充建议。", "description": "Explains to the user that URI match detection determines how Bitwarden suggests autofill options, and clarifies that this default strategy applies when no specific match detection is set for a login item." }, "regExAdvancedOptionWarning": { - "message": "\"Regular expression\" is an advanced option with increased risk of exposing credentials.", + "message": "「正则表达方式」是一种高级选项,会增加暴露凭据的风险。", "description": "Content for dialog which warns a user when selecting 'regular expression' matching strategy as a cipher match strategy" }, "startsWithAdvancedOptionWarning": { - "message": "\"Starts with\" is an advanced option with increased risk of exposing credentials.", + "message": "「开始于」是一种高级选项,会增加暴露凭据的风险。", "description": "Content for dialog which warns a user when selecting 'starts with' matching strategy as a cipher match strategy" }, "uriMatchWarningDialogLink": { - "message": "More about match detection", + "message": "更多关于匹配检测", "description": "Link to match detection docs on warning dialog for advance match strategy" }, "uriAdvancedOption": { @@ -4465,17 +4662,17 @@ } } }, - "copyFieldValue": { - "message": "复制 $FIELD$,$VALUE$", + "copyFieldCipherName": { + "message": "复制 $CIPHERNAME$ 中的 $FIELD$", "description": "Title for a button that copies a field value to the clipboard.", "placeholders": { "field": { "content": "$1", "example": "Username" }, - "value": { + "ciphername": { "content": "$2", - "example": "Foo" + "example": "Login Item" } } }, @@ -4768,9 +4965,6 @@ } } }, - "enableAnimations": { - "message": "启用动画" - }, "showAnimations": { "message": "显示动画" }, @@ -4983,15 +5177,9 @@ "itemLocation": { "message": "项目位置" }, - "fileSend": { - "message": "文件 Send" - }, "fileSends": { "message": "文件 Send" }, - "textSend": { - "message": "文本 Send" - }, "textSends": { "message": "文本 Send" }, @@ -5001,6 +5189,18 @@ "showNumberOfAutofillSuggestions": { "message": "在扩展图标上显示自动填充建议的登录数量" }, + "accountAccessRequested": { + "message": "已请求账户访问权限" + }, + "confirmAccessAttempt": { + "message": "确认 $EMAIL$ 的访问尝试", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + } + } + }, "showQuickCopyActions": { "message": "在密码库上显示快速复制操作" }, @@ -5040,9 +5240,6 @@ "vaultCustomTimeoutMinimum": { "message": "自定义超时时间最小为 1 分钟。" }, - "additionalContentAvailable": { - "message": "更多内容可用" - }, "fileSavedToDevice": { "message": "文件已保存到设备。可以在设备下载中进行管理。" }, @@ -5328,6 +5525,12 @@ "changeAtRiskPassword": { "message": "更改有风险的密码" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "此登录存在风险且缺少网站。请添加网站并更改密码以增强安全性。" + }, + "missingWebsite": { + "message": "缺少网站" + }, "settingsVaultOptions": { "message": "密码库选项" }, @@ -5376,6 +5579,18 @@ "hasItemsVaultNudgeTitle": { "message": "欢迎来到您的密码库!" }, + "phishingPageTitle": { + "message": "钓鱼网站" + }, + "phishingPageCloseTab": { + "message": "关闭标签页" + }, + "phishingPageContinue": { + "message": "继续" + }, + "phishingPageLearnWhy": { + "message": "为什么您会看到这个?" + }, "hasItemsVaultNudgeBodyOne": { "message": "为当前页面自动填充项目" }, @@ -5451,11 +5666,33 @@ "message": "点击「生成密码」按钮,轻松创建强大且唯一的密码,帮助您保持登录安全。", "description": "Aria label for the body content of the generator nudge" }, + "aboutThisSetting": { + "message": "关于此设置" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden 将使用已保存的登录 URI 来识别应使用哪个图标或更改密码的 URL 来改善您的体验。当您使用此服务时,不会收集或保存任何信息。" + }, "noPermissionsViewPage": { "message": "您没有查看此页面的权限。请尝试使用其他账户登录。" }, "wasmNotSupported": { "message": "您的浏览器不支持 WebAssembly 或 WebAssembly 未启用。使用 Bitwarden App 需要 WebAssembly。", "description": "'WebAssembly' is a technical term and should not be translated." + }, + "showMore": { + "message": "显示更多" + }, + "showLess": { + "message": "显示更少" + }, + "next": { + "message": "下一步" + }, + "moreBreadcrumbs": { + "message": "更多导航项", + "description": "This is used in the context of a breadcrumb navigation, indicating that there are more items in the breadcrumb trail that are not currently displayed." + }, + "confirmKeyConnectorDomain": { + "message": "确认 Key Connector 域名" } } diff --git a/apps/browser/src/_locales/zh_TW/messages.json b/apps/browser/src/_locales/zh_TW/messages.json index 7403ad53705..373fa0c75e1 100644 --- a/apps/browser/src/_locales/zh_TW/messages.json +++ b/apps/browser/src/_locales/zh_TW/messages.json @@ -471,10 +471,10 @@ "message": "Passphrase generated" }, "usernameGenerated": { - "message": "Username generated" + "message": "已產生使用者名稱" }, "emailGenerated": { - "message": "Email generated" + "message": "已產生電子郵件" }, "regeneratePassword": { "message": "重新產生密碼" @@ -547,12 +547,50 @@ "searchVault": { "message": "搜尋密碼庫" }, + "resetSearch": { + "message": "重設搜尋" + }, + "archiveNoun": { + "message": "Archive", + "description": "Noun" + }, + "archiveVerb": { + "message": "Archive", + "description": "Verb" + }, + "unarchive": { + "message": "Unarchive" + }, + "itemsInArchive": { + "message": "Items in archive" + }, + "noItemsInArchive": { + "message": "No items in archive" + }, + "noItemsInArchiveDesc": { + "message": "Archived items will appear here and will be excluded from general search results and autofill suggestions." + }, + "itemSentToArchive": { + "message": "Item sent to archive" + }, + "itemRemovedFromArchive": { + "message": "Item removed from archive" + }, + "archiveItem": { + "message": "Archive item" + }, + "archiveItemConfirmDesc": { + "message": "Archived items are excluded from general search results and autofill suggestions. Are you sure you want to archive this item?" + }, "edit": { "message": "編輯" }, "view": { "message": "檢視" }, + "viewLogin": { + "message": "View login" + }, "noItemsInList": { "message": "沒有可列出的項目。" }, @@ -656,7 +694,7 @@ "message": "您的瀏覽器不支援剪貼簿簡單複製,請手動複製。" }, "verifyYourIdentity": { - "message": "Verify your identity" + "message": "驗證您的身份" }, "weDontRecognizeThisDevice": { "message": "我們無法識別此裝置。請輸入已傳送到您電子郵件的驗證碼以驗證您的身分。" @@ -695,6 +733,15 @@ "invalidMasterPassword": { "message": "無效的主密碼" }, + "invalidMasterPasswordConfirmEmailAndHost": { + "message": "Invalid master password. Confirm your email is correct and your account was created on $HOST$.", + "placeholders": { + "host": { + "content": "$1", + "example": "vault.bitwarden.com" + } + } + }, "vaultTimeout": { "message": "密碼庫逾時時間" }, @@ -911,7 +958,7 @@ "message": "否" }, "location": { - "message": "Location" + "message": "位置" }, "unexpectedError": { "message": "發生了未預期的錯誤。" @@ -1043,10 +1090,10 @@ "message": "於分頁頁面顯示身分以便於自動填入。" }, "clickToAutofillOnVault": { - "message": "在密碼庫檢視中點擊項目來自動填入" + "message": "在密碼庫檢視中點選項目來自動填入" }, "clickToAutofill": { - "message": "Click items in autofill suggestion to fill" + "message": "點選自動填入建議中的項目進行填入" }, "clearClipboard": { "message": "清除剪貼簿", @@ -1093,11 +1140,11 @@ } }, "notificationLoginSaveConfirmation": { - "message": "saved to Bitwarden.", + "message": "已儲存至 Bitwarden。", "description": "Shown to user after item is saved." }, "notificationLoginUpdatedConfirmation": { - "message": "updated in Bitwarden.", + "message": "已更新至 Bitwarden。", "description": "Shown to user after item is updated." }, "selectItemAriaLabel": { @@ -1117,7 +1164,7 @@ "description": "Button text for saving login details as a new entry." }, "updateLoginAction": { - "message": "Update login", + "message": "更新登入資料", "description": "Button text for updating an existing login entry." }, "unlockToSave": { @@ -1125,7 +1172,7 @@ "description": "User prompt to take action in order to save the login they just entered." }, "saveLogin": { - "message": "Save login", + "message": "儲存登入資料", "description": "Prompt asking the user if they want to save their login details." }, "updateLogin": { @@ -1483,11 +1530,11 @@ "message": "Don't ask again on this device for 30 days" }, "selectAnotherMethod": { - "message": "Select another method", + "message": "選擇其他方式", "description": "Select another two-step login method" }, "useYourRecoveryCode": { - "message": "Use your recovery code" + "message": "使用您的復原碼" }, "insertU2f": { "message": "將您的安全鑰匙插入電腦的 USB 連接埠,然後觸摸其按鈕(如有的話)。" @@ -1501,6 +1548,15 @@ "readSecurityKey": { "message": "讀取安全金鑰" }, + "readingPasskeyLoading": { + "message": "Reading passkey..." + }, + "passkeyAuthenticationFailed": { + "message": "Passkey authentication failed" + }, + "useADifferentLogInMethod": { + "message": "Use a different log in method" + }, "awaitingSecurityKeyInteraction": { "message": "Awaiting security key interaction..." }, @@ -1519,9 +1575,6 @@ "selectTwoStepLoginMethod": { "message": "選擇兩步驟登入方法" }, - "recoveryCodeDesc": { - "message": "無法使用任何雙因素提供程式嗎?請使用您的復原碼以停用您帳戶的所有雙因素提供程式。" - }, "recoveryCodeTitle": { "message": "復原代碼" }, @@ -1559,16 +1612,16 @@ "message": "輸入寄送到您電子郵件信箱的驗證碼。" }, "selfHostedEnvironment": { - "message": "自我裝載環境" + "message": "自行部署環境" }, "selfHostedBaseUrlHint": { - "message": "指定您自建的 Bitwarden 伺服器的網域 URL。例如:https://bitwarden.company.com" + "message": "指定您自架的 Bitwarden 伺服器的網域 URL。例如:https://bitwarden.company.com" }, "selfHostedCustomEnvHeader": { "message": "適用於進階設定。您可以單獨指定各個服務的網域 URL。" }, "selfHostedEnvFormInvalid": { - "message": "您必須新增伺服器網域 URL 或至少一個自定義環境。" + "message": "您必須新增伺服器網域 URL 或至少一個自訂環境。" }, "customEnvironment": { "message": "自訂環境" @@ -1577,7 +1630,7 @@ "message": "伺服器 URL" }, "selfHostBaseUrl": { - "message": "自建伺服器 URL", + "message": "自架伺服器 URL", "description": "Label for field requesting a self-hosted integration service URL" }, "apiUrl": { @@ -1621,7 +1674,7 @@ } }, "turnOffAutofill": { - "message": "Turn off autofill" + "message": "停用自動填入" }, "showInlineMenuLabel": { "message": "在表單欄位上顯示自動填入選單" @@ -1680,9 +1733,6 @@ "defaultAutoFillOnPageLoadDesc": { "message": "您可以從項目的編輯檢視中為單個登入項目關閉頁面載入時自動填入。" }, - "itemAutoFillOnPageLoad": { - "message": "頁面載入時自動填入(如果已在選項中設定)" - }, "autoFillOnPageLoadUseDefault": { "message": "使用預設設定" }, @@ -1754,23 +1804,8 @@ "popup2faCloseMessage": { "message": "如果您點選彈出式視窗外的任意區域,將導致彈出式視窗關閉。您想在新視窗中開啟此彈出式視窗,以讓它不關閉嗎?" }, - "popupU2fCloseMessage": { - "message": "此瀏覽器不能在彈出式視窗中處理 U2F 要求。是否在新視窗開啟此對話方塊,以便您能夠使用 U2F 登入?" - }, - "enableFavicon": { - "message": "顯示網站圖示" - }, - "faviconDesc": { - "message": "在每個登入資料旁顯示一個可辨識的圖片。" - }, - "faviconDescAlt": { - "message": "在每次登入時旁邊顯示可識別的圖片。適用於所有已登入的帳號。" - }, - "enableBadgeCounter": { - "message": "顯示圖示計數器" - }, - "badgeCounterDesc": { - "message": "顯示可用於目前網頁的登入資料數量。" + "showIconsChangePasswordUrls": { + "message": "Show website icons and retrieve change password URLs" }, "cardholderName": { "message": "持卡人姓名" @@ -1829,6 +1864,9 @@ "securityCode": { "message": "安全代碼" }, + "cardNumber": { + "message": "card number" + }, "ex": { "message": "例如" }, @@ -1931,32 +1969,81 @@ "typeNote": { "message": "Note" }, - "newItemHeader": { - "message": "新增 $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderLogin": { + "message": "New Login", + "description": "Header for new login item type" }, - "editItemHeader": { - "message": "編輯 $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderCard": { + "message": "New Card", + "description": "Header for new card item type" }, - "viewItemHeader": { - "message": "檢視 $TYPE$", - "placeholders": { - "type": { - "content": "$1", - "example": "Login" - } - } + "newItemHeaderIdentity": { + "message": "New Identity", + "description": "Header for new identity item type" + }, + "newItemHeaderNote": { + "message": "New Note", + "description": "Header for new note item type" + }, + "newItemHeaderSshKey": { + "message": "New SSH key", + "description": "Header for new SSH key item type" + }, + "newItemHeaderTextSend": { + "message": "New Text Send", + "description": "Header for new text send" + }, + "newItemHeaderFileSend": { + "message": "New File Send", + "description": "Header for new file send" + }, + "editItemHeaderLogin": { + "message": "Edit Login", + "description": "Header for edit login item type" + }, + "editItemHeaderCard": { + "message": "Edit Card", + "description": "Header for edit card item type" + }, + "editItemHeaderIdentity": { + "message": "Edit Identity", + "description": "Header for edit identity item type" + }, + "editItemHeaderNote": { + "message": "Edit Note", + "description": "Header for edit note item type" + }, + "editItemHeaderSshKey": { + "message": "Edit SSH key", + "description": "Header for edit SSH key item type" + }, + "editItemHeaderTextSend": { + "message": "Edit Text Send", + "description": "Header for edit text send" + }, + "editItemHeaderFileSend": { + "message": "Edit File Send", + "description": "Header for edit file send" + }, + "viewItemHeaderLogin": { + "message": "View Login", + "description": "Header for view login item type" + }, + "viewItemHeaderCard": { + "message": "View Card", + "description": "Header for view card item type" + }, + "viewItemHeaderIdentity": { + "message": "View Identity", + "description": "Header for view identity item type" + }, + "viewItemHeaderNote": { + "message": "View Note", + "description": "Header for view note item type" + }, + "viewItemHeaderSshKey": { + "message": "View SSH key", + "description": "Header for view SSH key item type" }, "passwordHistory": { "message": "密碼歷史記錄" @@ -2231,7 +2318,7 @@ "description": "This will be used as part of a larger sentence, broken up to include the generator icon. The full sentence will read 'Use the generator [GENERATOR_ICON] to create a strong unique password'" }, "vaultCustomization": { - "message": "Vault customization" + "message": "密碼庫自訂" }, "vaultTimeoutAction": { "message": "密碼庫逾時動作" @@ -2528,7 +2615,7 @@ "message": "您可以於設定中進行更改" }, "change": { - "message": "Change" + "message": "變更" }, "changePassword": { "message": "Change password", @@ -3129,6 +3216,24 @@ } } }, + "exportingOrganizationVaultFromPasswordManagerWithDataOwnershipDesc": { + "message": "Only the organization vault associated with $ORGANIZATION$ will be exported.", + "placeholders": { + "organization": { + "content": "$1", + "example": "My Org Name" + } + } + }, + "exportingOrganizationVaultFromAdminConsoleWithDataOwnershipDesc": { + "message": "Only the organization vault associated with $ORGANIZATION$ will be exported. My items collections will not be included.", + "placeholders": { + "organization": { + "content": "$1", + "example": "My Org Name" + } + } + }, "error": { "message": "錯誤" }, @@ -3460,6 +3565,28 @@ "logInRequestSent": { "message": "已傳送請求" }, + "loginRequestApprovedForEmailOnDevice": { + "message": "Login request approved for $EMAIL$ on $DEVICE$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + }, + "device": { + "content": "$2", + "example": "Web app - Chrome" + } + } + }, + "youDeniedLoginAttemptFromAnotherDevice": { + "message": "You denied a login attempt from another device. If this was you, try to log in with the device again." + }, + "device": { + "message": "裝置" + }, + "loginStatus": { + "message": "Login status" + }, "masterPasswordChanged": { "message": "Master password saved" }, @@ -3496,9 +3623,6 @@ "autofillPageLoadPolicyActivated": { "message": "您的組織政策已啟用頁面載入時的自動填入功能。" }, - "howToAutofill": { - "message": "如何使用自動填入功能" - }, "autofillSelectInfoWithCommand": { "message": "從本畫面選擇一個項目,然後使用 $COMMAND$ 快速鍵,或是瞭解設定當中的其他選項。", "placeholders": { @@ -3556,6 +3680,94 @@ "rememberThisDeviceToMakeFutureLoginsSeamless": { "message": "記住此裝置來讓未來的登入體驗更簡易" }, + "manageDevices": { + "message": "管理裝置" + }, + "currentSession": { + "message": "Current session" + }, + "mobile": { + "message": "Mobile", + "description": "Mobile app" + }, + "extension": { + "message": "Extension", + "description": "Browser extension/addon" + }, + "desktop": { + "message": "Desktop", + "description": "Desktop app" + }, + "webVault": { + "message": "Web vault" + }, + "webApp": { + "message": "Web app" + }, + "cli": { + "message": "CLI" + }, + "sdk": { + "message": "SDK", + "description": "Software Development Kit" + }, + "requestPending": { + "message": "Request pending" + }, + "firstLogin": { + "message": "First login" + }, + "trusted": { + "message": "Trusted" + }, + "needsApproval": { + "message": "Needs approval" + }, + "devices": { + "message": "裝置" + }, + "accessAttemptBy": { + "message": "Access attempt by $EMAIL$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + } + } + }, + "confirmAccess": { + "message": "Confirm access" + }, + "denyAccess": { + "message": "Deny access" + }, + "time": { + "message": "Time" + }, + "deviceType": { + "message": "裝置類型" + }, + "loginRequest": { + "message": "Login request" + }, + "thisRequestIsNoLongerValid": { + "message": "This request is no longer valid." + }, + "loginRequestHasAlreadyExpired": { + "message": "Login request has already expired." + }, + "justNow": { + "message": "Just now" + }, + "requestedXMinutesAgo": { + "message": "Requested $MINUTES$ minutes ago", + "placeholders": { + "minutes": { + "content": "$1", + "example": "5" + } + } + }, "deviceApprovalRequired": { "message": "裝置需要取得核准。請在下面選擇一個核准選項:" }, @@ -3795,18 +4007,10 @@ "aliasDomain": { "message": "別名網域" }, - "passwordRepromptDisabledAutofillOnPageLoad": { - "message": "使用主密碼重新提示的項目無法在頁面載入時使用自動填入功能。已關閉頁面載入時的自動填入功能。", - "description": "Toast message for describing that master password re-prompt cannot be autofilled on page load." - }, "autofillOnPageLoadSetToDefault": { "message": "將頁面載入時使用自動填入功能設定為預設。", "description": "Toast message for informing the user that autofill on page load has been set to the default setting." }, - "turnOffMasterPasswordPromptToEditField": { - "message": "關閉主密碼重新提示以編輯此欄位", - "description": "Message appearing below the autofill on load message when master password reprompt is set for a vault item." - }, "toggleSideNavigation": { "message": "切換側邊欄" }, @@ -4015,15 +4219,11 @@ "selectImportCollection": { "message": "選擇一個分類" }, - "importTargetHint": { - "message": "如果您要將匯入檔案的內容移動到 $DESTINATION$,請選擇此選項", - "description": "Located as a hint under the import target. Will be appended by either folder or collection, depending if the user is importing into an individual or an organizational vault.", - "placeholders": { - "destination": { - "content": "$1", - "example": "folder or collection" - } - } + "importTargetHintCollection": { + "message": "Select this option if you want the imported file contents moved to a collection" + }, + "importTargetHintFolder": { + "message": "Select this option if you want the imported file contents moved to a folder" }, "importUnassignedItemsError": { "message": "檔案包含未指派項目。" @@ -4080,9 +4280,6 @@ "passkeyNotCopiedAlert": { "message": "不會將密碼金鑰複製到拓製的項目中。您想繼續拓製該項目嗎?" }, - "passkeyFeatureIsNotImplementedForAccountsWithoutMasterPassword": { - "message": "發起站點需要驗證。沒有主密碼的帳戶尚未開通此功能。" - }, "logInWithPasskeyQuestion": { "message": "使用密碼金鑰登入?" }, @@ -4120,7 +4317,7 @@ "message": "密碼金鑰項目" }, "overwritePasskey": { - "message": "覆寫密碼金鑰嗎?" + "message": "要覆寫密碼金鑰嗎?" }, "overwritePasskeyAlert": { "message": "該項目已包含密碼金鑰。您確定要覆寫目前的密碼金鑰嗎?" @@ -4465,17 +4662,17 @@ } } }, - "copyFieldValue": { - "message": "Copy $FIELD$, $VALUE$", + "copyFieldCipherName": { + "message": "Copy $FIELD$, $CIPHERNAME$", "description": "Title for a button that copies a field value to the clipboard.", "placeholders": { "field": { "content": "$1", "example": "Username" }, - "value": { + "ciphername": { "content": "$2", - "example": "Foo" + "example": "Login Item" } } }, @@ -4613,10 +4810,10 @@ } }, "downloadBitwarden": { - "message": "Download Bitwarden" + "message": "下載 Bitwarden" }, "downloadBitwardenOnAllDevices": { - "message": "Download Bitwarden on all devices" + "message": "在所有裝置中下載 Bitwarden" }, "getTheMobileApp": { "message": "Get the mobile app" @@ -4631,13 +4828,13 @@ "message": "Access your vault without a browser, then set up unlock with biometrics to expedite unlocking in both the desktop app and browser extension." }, "downloadFromBitwardenNow": { - "message": "Download from bitwarden.com now" + "message": "立即從 bitwarden.com 下載" }, "getItOnGooglePlay": { "message": "Get it on Google Play" }, "downloadOnTheAppStore": { - "message": "Download on the App Store" + "message": "從 App Store 下載" }, "permanentlyDeleteAttachmentConfirmation": { "message": "您確定要永久刪除此附檔嗎?" @@ -4768,9 +4965,6 @@ } } }, - "enableAnimations": { - "message": "啟用動畫" - }, "showAnimations": { "message": "顯示動畫" }, @@ -4983,15 +5177,9 @@ "itemLocation": { "message": "項目位置" }, - "fileSend": { - "message": "檔案 Send" - }, "fileSends": { "message": "檔案 Send" }, - "textSend": { - "message": "文字 Send" - }, "textSends": { "message": "文字 Sends" }, @@ -5001,8 +5189,20 @@ "showNumberOfAutofillSuggestions": { "message": "在擴充套件圖示上顯示自動填入建議的數量" }, + "accountAccessRequested": { + "message": "Account access requested" + }, + "confirmAccessAttempt": { + "message": "Confirm access attempt for $EMAIL$", + "placeholders": { + "email": { + "content": "$1", + "example": "name@example.com" + } + } + }, "showQuickCopyActions": { - "message": "在密碼庫中顯示快速複製" + "message": "在密碼庫中顯示快速複製圖示" }, "systemDefault": { "message": "系統預設值" @@ -5040,11 +5240,8 @@ "vaultCustomTimeoutMinimum": { "message": "自訂逾時時間最小為 1 分鐘。" }, - "additionalContentAvailable": { - "message": "以及更多內容" - }, "fileSavedToDevice": { - "message": "檔案已儲存到裝置。在您的裝置上管理下載檔案。" + "message": "檔案已儲存至裝置。在您的裝置中管理下載的檔案。" }, "showCharacterCount": { "message": "顯示字元數" @@ -5278,10 +5475,10 @@ "message": "擴充套件寬度" }, "wide": { - "message": "寬度" + "message": "寬" }, "extraWide": { - "message": "更寬" + "message": "超寬" }, "sshKeyWrongPassword": { "message": "The password you entered is incorrect." @@ -5328,8 +5525,14 @@ "changeAtRiskPassword": { "message": "Change at-risk password" }, + "changeAtRiskPasswordAndAddWebsite": { + "message": "This login is at-risk and missing a website. Add a website and change the password for stronger security." + }, + "missingWebsite": { + "message": "Missing website" + }, "settingsVaultOptions": { - "message": "Vault options" + "message": "密碼庫選項" }, "emptyVaultDescription": { "message": "The vault protects more than just your passwords. Store secure logins, IDs, cards and notes securely here." @@ -5376,6 +5579,18 @@ "hasItemsVaultNudgeTitle": { "message": "Welcome to your vault!" }, + "phishingPageTitle": { + "message": "Phishing website" + }, + "phishingPageCloseTab": { + "message": "Close tab" + }, + "phishingPageContinue": { + "message": "Continue" + }, + "phishingPageLearnWhy": { + "message": "Why are you seeing this?" + }, "hasItemsVaultNudgeBodyOne": { "message": "Autofill items for the current page" }, @@ -5451,11 +5666,33 @@ "message": "Easily create strong and unique passwords by clicking on the Generate password button to help you keep your logins secure.", "description": "Aria label for the body content of the generator nudge" }, + "aboutThisSetting": { + "message": "About this setting" + }, + "permitCipherDetailsDescription": { + "message": "Bitwarden will use saved login URIs to identify which icon or change password URL should be used to improve your experience. No information is collected or saved when you use this service." + }, "noPermissionsViewPage": { "message": "You do not have permissions to view this page. Try logging in with a different account." }, "wasmNotSupported": { "message": "WebAssembly is not supported on your browser or is not enabled. WebAssembly is required to use the Bitwarden app.", "description": "'WebAssembly' is a technical term and should not be translated." + }, + "showMore": { + "message": "Show more" + }, + "showLess": { + "message": "Show less" + }, + "next": { + "message": "Next" + }, + "moreBreadcrumbs": { + "message": "More breadcrumbs", + "description": "This is used in the context of a breadcrumb navigation, indicating that there are more items in the breadcrumb trail that are not currently displayed." + }, + "confirmKeyConnectorDomain": { + "message": "Confirm Key Connector domain" } } diff --git a/apps/browser/src/auth/popup/account-switching/account-switcher.component.html b/apps/browser/src/auth/popup/account-switching/account-switcher.component.html index b9f9b984c69..cef2a748d58 100644 --- a/apps/browser/src/auth/popup/account-switching/account-switcher.component.html +++ b/apps/browser/src/auth/popup/account-switching/account-switcher.component.html @@ -41,12 +41,10 @@ -
+
-

- {{ "options" | i18n }} -

+

{{ "options" | i18n }}

diff --git a/apps/browser/src/auth/popup/account-switching/current-account.component.html b/apps/browser/src/auth/popup/account-switching/current-account.component.html index f59a2b08fdd..2e2440f6258 100644 --- a/apps/browser/src/auth/popup/account-switching/current-account.component.html +++ b/apps/browser/src/auth/popup/account-switching/current-account.component.html @@ -1,8 +1,8 @@ -
+
diff --git a/apps/browser/src/auth/popup/account-switching/services/account-switcher.service.ts b/apps/browser/src/auth/popup/account-switching/services/account-switcher.service.ts index 7bb12fc260d..99d2c83283e 100644 --- a/apps/browser/src/auth/popup/account-switching/services/account-switcher.service.ts +++ b/apps/browser/src/auth/popup/account-switching/services/account-switcher.service.ts @@ -160,7 +160,7 @@ export class AccountSwitcherService { throwError(() => new Error(AccountSwitcherService.incompleteAccountSwitchError)), }), ), - ).catch((err) => { + ).catch((err): any => { if ( err instanceof Error && err.message === AccountSwitcherService.incompleteAccountSwitchError diff --git a/apps/browser/src/auth/popup/change-password/extension-change-password.service.spec.ts b/apps/browser/src/auth/popup/change-password/extension-change-password.service.spec.ts new file mode 100644 index 00000000000..4dc12e57d25 --- /dev/null +++ b/apps/browser/src/auth/popup/change-password/extension-change-password.service.spec.ts @@ -0,0 +1,50 @@ +import { MockProxy, mock } from "jest-mock-extended"; + +import { ChangePasswordService } from "@bitwarden/angular/auth/password-management/change-password"; +import BrowserPopupUtils from "@bitwarden/browser/platform/browser/browser-popup-utils"; +import { MasterPasswordApiService } from "@bitwarden/common/auth/abstractions/master-password-api.service.abstraction"; +import { InternalMasterPasswordServiceAbstraction } from "@bitwarden/common/key-management/master-password/abstractions/master-password.service.abstraction"; +import { KeyService } from "@bitwarden/key-management"; + +import { BrowserApi } from "../../../platform/browser/browser-api"; + +import { ExtensionChangePasswordService } from "./extension-change-password.service"; + +describe("ExtensionChangePasswordService", () => { + let keyService: MockProxy; + let masterPasswordApiService: MockProxy; + let masterPasswordService: MockProxy; + let window: MockProxy; + + let changePasswordService: ChangePasswordService; + + beforeEach(() => { + keyService = mock(); + masterPasswordApiService = mock(); + masterPasswordService = mock(); + window = mock(); + + changePasswordService = new ExtensionChangePasswordService( + keyService, + masterPasswordApiService, + masterPasswordService, + window, + ); + }); + + it("should instantiate the service", () => { + expect(changePasswordService).toBeDefined(); + }); + + it("should close the browser extension popout", () => { + const closePopupSpy = jest.spyOn(BrowserApi, "closePopup"); + const browserPopupUtilsInPopupSpy = jest + .spyOn(BrowserPopupUtils, "inPopout") + .mockReturnValue(true); + + changePasswordService.closeBrowserExtensionPopout?.(); + + expect(closePopupSpy).toHaveBeenCalledWith(window); + expect(browserPopupUtilsInPopupSpy).toHaveBeenCalledWith(window); + }); +}); diff --git a/apps/browser/src/auth/popup/change-password/extension-change-password.service.ts b/apps/browser/src/auth/popup/change-password/extension-change-password.service.ts new file mode 100644 index 00000000000..0838e841d3f --- /dev/null +++ b/apps/browser/src/auth/popup/change-password/extension-change-password.service.ts @@ -0,0 +1,29 @@ +import { + DefaultChangePasswordService, + ChangePasswordService, +} from "@bitwarden/angular/auth/password-management/change-password"; +import BrowserPopupUtils from "@bitwarden/browser/platform/browser/browser-popup-utils"; +import { MasterPasswordApiService } from "@bitwarden/common/auth/abstractions/master-password-api.service.abstraction"; +import { InternalMasterPasswordServiceAbstraction } from "@bitwarden/common/key-management/master-password/abstractions/master-password.service.abstraction"; +import { KeyService } from "@bitwarden/key-management"; + +import { BrowserApi } from "../../../platform/browser/browser-api"; + +export class ExtensionChangePasswordService + extends DefaultChangePasswordService + implements ChangePasswordService +{ + constructor( + protected keyService: KeyService, + protected masterPasswordApiService: MasterPasswordApiService, + protected masterPasswordService: InternalMasterPasswordServiceAbstraction, + private win: Window, + ) { + super(keyService, masterPasswordApiService, masterPasswordService); + } + closeBrowserExtensionPopout(): void { + if (BrowserPopupUtils.inPopout(this.win)) { + BrowserApi.closePopup(this.win); + } + } +} diff --git a/apps/browser/src/auth/popup/login/extension-login-component.service.ts b/apps/browser/src/auth/popup/login/extension-login-component.service.ts index 37d74616391..621c7d74876 100644 --- a/apps/browser/src/auth/popup/login/extension-login-component.service.ts +++ b/apps/browser/src/auth/popup/login/extension-login-component.service.ts @@ -68,4 +68,18 @@ export class ExtensionLoginComponentService showBackButton(showBackButton: boolean): void { this.extensionAnonLayoutWrapperDataService.setAnonLayoutWrapperData({ showBackButton }); } + + /** + * Enable passkey login support for chromium-based browsers only. + * Neither Firefox nor safari support overriding the relying party ID in an extension. + * + * https://github.com/w3c/webextensions/issues/238 + * + * Tracking links: + * https://bugzilla.mozilla.org/show_bug.cgi?id=1956484 + * https://developer.apple.com/forums/thread/774351 + */ + isLoginWithPasskeySupported(): boolean { + return this.platformUtilsService.isChromium(); + } } diff --git a/apps/browser/src/auth/popup/set-password.component.html b/apps/browser/src/auth/popup/set-password.component.html deleted file mode 100644 index 71a2e3ac588..00000000000 --- a/apps/browser/src/auth/popup/set-password.component.html +++ /dev/null @@ -1,160 +0,0 @@ -
-
-
- -
-

- {{ "setMasterPassword" | i18n }} -

-
- -
-
-
-
- -
-
-
-

- {{ "orgPermissionsUpdatedMustSetPassword" | i18n }} -

- - -

{{ "orgRequiresYouToSetPassword" | i18n }}

-
- - - {{ "resetPasswordAutoEnrollInviteWarning" | i18n }} - - - -
-
-
-
-
-
- - -
-
- -
-
- - - -
-
- -
-
-
-
-
-
- - -
-
- -
-
-
-
-
-
-
-
- - -
-
- -
-
-
-
diff --git a/apps/browser/src/auth/popup/set-password.component.ts b/apps/browser/src/auth/popup/set-password.component.ts deleted file mode 100644 index 2a796854531..00000000000 --- a/apps/browser/src/auth/popup/set-password.component.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { Component } from "@angular/core"; - -import { SetPasswordComponent as BaseSetPasswordComponent } from "@bitwarden/angular/auth/components/set-password.component"; - -@Component({ - selector: "app-set-password", - templateUrl: "set-password.component.html", - standalone: false, -}) -export class SetPasswordComponent extends BaseSetPasswordComponent {} diff --git a/apps/browser/src/auth/popup/settings/account-security.component.html b/apps/browser/src/auth/popup/settings/account-security.component.html index d835497d9be..44900acc065 100644 --- a/apps/browser/src/auth/popup/settings/account-security.component.html +++ b/apps/browser/src/auth/popup/settings/account-security.component.html @@ -102,6 +102,18 @@ + + +

{{ "manageDevices" | i18n }}

+
+ + + +
+

{{ "otherOptions" | i18n }}

diff --git a/apps/browser/src/auth/popup/settings/account-security.component.spec.ts b/apps/browser/src/auth/popup/settings/account-security.component.spec.ts index b50e1f55032..2335c5c2e69 100644 --- a/apps/browser/src/auth/popup/settings/account-security.component.spec.ts +++ b/apps/browser/src/auth/popup/settings/account-security.component.spec.ts @@ -1,11 +1,11 @@ import { Component } from "@angular/core"; import { ComponentFixture, TestBed } from "@angular/core/testing"; import { By } from "@angular/platform-browser"; +import { ActivatedRoute } from "@angular/router"; import { mock } from "jest-mock-extended"; import { firstValueFrom, of } from "rxjs"; import { CollectionService } from "@bitwarden/admin-console/common"; -import { PinServiceAbstraction } from "@bitwarden/auth/common"; import { ApiService } from "@bitwarden/common/abstractions/api.service"; import { OrganizationService } from "@bitwarden/common/admin-console/abstractions/organization/organization.service.abstraction"; import { PolicyService } from "@bitwarden/common/admin-console/abstractions/policy/policy.service.abstraction"; @@ -13,18 +13,17 @@ import { PolicyType } from "@bitwarden/common/admin-console/enums"; import { Policy } from "@bitwarden/common/admin-console/models/domain/policy"; import { AccountService } from "@bitwarden/common/auth/abstractions/account.service"; import { UserVerificationService } from "@bitwarden/common/auth/abstractions/user-verification/user-verification.service.abstraction"; +import { PinServiceAbstraction } from "@bitwarden/common/key-management/pin/pin.service.abstraction"; import { VaultTimeoutSettingsService, VaultTimeoutService, VaultTimeoutStringType, VaultTimeoutAction, } from "@bitwarden/common/key-management/vault-timeout"; -import { ConfigService } from "@bitwarden/common/platform/abstractions/config/config.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 { ValidationService } from "@bitwarden/common/platform/abstractions/validation.service"; import { MessageSender } from "@bitwarden/common/platform/messaging"; import { Utils } from "@bitwarden/common/platform/misc/utils"; @@ -68,6 +67,7 @@ describe("AccountSecurityComponent", () => { providers: [ { provide: AccountService, useValue: accountService }, { provide: AccountSecurityComponent, useValue: mock() }, + { provide: ActivatedRoute, useValue: mock() }, { provide: BiometricsService, useValue: mock() }, { provide: BiometricStateService, useValue: biometricStateService }, { provide: DialogService, useValue: dialogService }, @@ -79,7 +79,6 @@ describe("AccountSecurityComponent", () => { { provide: PlatformUtilsService, useValue: platformUtilsService }, { provide: PolicyService, useValue: policyService }, { provide: PopupRouterCacheService, useValue: mock() }, - { provide: StateService, useValue: mock() }, { provide: ToastService, useValue: mock() }, { provide: UserVerificationService, useValue: mock() }, { provide: VaultTimeoutService, useValue: mock() }, @@ -90,7 +89,6 @@ describe("AccountSecurityComponent", () => { { provide: LogService, useValue: mock() }, { provide: OrganizationService, useValue: mock() }, { provide: CollectionService, useValue: mock() }, - { provide: ConfigService, useValue: mock() }, { provide: ValidationService, useValue: validationService }, ], }) diff --git a/apps/browser/src/auth/popup/settings/account-security.component.ts b/apps/browser/src/auth/popup/settings/account-security.component.ts index 4f9e1f7414a..a9f43045902 100644 --- a/apps/browser/src/auth/popup/settings/account-security.component.ts +++ b/apps/browser/src/auth/popup/settings/account-security.component.ts @@ -25,13 +25,13 @@ import { JslibModule } from "@bitwarden/angular/jslib.module"; import { NudgesService, NudgeType } from "@bitwarden/angular/vault"; import { SpotlightComponent } from "@bitwarden/angular/vault/components/spotlight/spotlight.component"; import { FingerprintDialogComponent, VaultTimeoutInputComponent } from "@bitwarden/auth/angular"; -import { PinServiceAbstraction } from "@bitwarden/auth/common"; import { PolicyService } from "@bitwarden/common/admin-console/abstractions/policy/policy.service.abstraction"; import { PolicyType } from "@bitwarden/common/admin-console/enums"; import { getFirstPolicy } from "@bitwarden/common/admin-console/services/policy/default-policy.service"; import { AccountService } from "@bitwarden/common/auth/abstractions/account.service"; import { UserVerificationService } from "@bitwarden/common/auth/abstractions/user-verification/user-verification.service.abstraction"; import { getUserId } from "@bitwarden/common/auth/services/account.service"; +import { PinServiceAbstraction } from "@bitwarden/common/key-management/pin/pin.service.abstraction"; import { VaultTimeout, VaultTimeoutAction, @@ -42,9 +42,9 @@ import { } from "@bitwarden/common/key-management/vault-timeout"; import { EnvironmentService } from "@bitwarden/common/platform/abstractions/environment.service"; import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; +import { LogService } from "@bitwarden/common/platform/abstractions/log.service"; import { MessagingService } from "@bitwarden/common/platform/abstractions/messaging.service"; import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service"; -import { StateService } from "@bitwarden/common/platform/abstractions/state.service"; import { ValidationService } from "@bitwarden/common/platform/abstractions/validation.service"; import { DialogRef, @@ -146,7 +146,6 @@ export class AccountSecurityComponent implements OnInit, OnDestroy { public messagingService: MessagingService, private environmentService: EnvironmentService, private keyService: KeyService, - private stateService: StateService, private userVerificationService: UserVerificationService, private dialogService: DialogService, private changeDetectorRef: ChangeDetectorRef, @@ -155,6 +154,7 @@ export class AccountSecurityComponent implements OnInit, OnDestroy { private biometricsService: BiometricsService, private vaultNudgesService: NudgesService, private validationService: ValidationService, + private logService: LogService, ) {} async ngOnInit() { @@ -172,7 +172,9 @@ export class AccountSecurityComponent implements OnInit, OnDestroy { } const showOnLocked = - !this.platformUtilsService.isFirefox() && !this.platformUtilsService.isSafari(); + !this.platformUtilsService.isFirefox() && + !this.platformUtilsService.isSafari() && + !(this.platformUtilsService.isOpera() && navigator.platform === "MacIntel"); this.vaultTimeoutOptions = [ { name: this.i18nService.t("immediately"), value: 0 }, @@ -675,10 +677,16 @@ export class AccountSecurityComponent implements OnInit, OnDestroy { } async openAcctFingerprintDialog() { - const activeUserId = await firstValueFrom( - this.accountService.activeAccount$.pipe(map((a) => a?.id)), - ); + const activeUserId = await firstValueFrom(getUserId(this.accountService.activeAccount$)); const publicKey = await firstValueFrom(this.keyService.userPublicKey$(activeUserId)); + if (publicKey == null) { + this.logService.error( + "[AccountSecurityComponent] No public key available for the user: " + + activeUserId + + " fingerprint can't be displayed.", + ); + return; + } const fingerprint = await this.keyService.getFingerprint(activeUserId, publicKey); const dialogRef = FingerprintDialogComponent.open(this.dialogService, { diff --git a/apps/browser/src/auth/popup/settings/extension-device-management.component.html b/apps/browser/src/auth/popup/settings/extension-device-management.component.html new file mode 100644 index 00000000000..aadbe6b81d0 --- /dev/null +++ b/apps/browser/src/auth/popup/settings/extension-device-management.component.html @@ -0,0 +1,11 @@ + + + + + + + +
+ +
+
diff --git a/apps/browser/src/auth/popup/settings/extension-device-management.component.ts b/apps/browser/src/auth/popup/settings/extension-device-management.component.ts new file mode 100644 index 00000000000..793965db141 --- /dev/null +++ b/apps/browser/src/auth/popup/settings/extension-device-management.component.ts @@ -0,0 +1,22 @@ +import { Component } from "@angular/core"; + +import { DeviceManagementComponent } from "@bitwarden/angular/auth/device-management/device-management.component"; +import { I18nPipe } from "@bitwarden/ui-common"; + +import { PopOutComponent } from "../../../platform/popup/components/pop-out.component"; +import { PopupHeaderComponent } from "../../../platform/popup/layout/popup-header.component"; +import { PopupPageComponent } from "../../../platform/popup/layout/popup-page.component"; + +@Component({ + standalone: true, + selector: "extension-device-management", + templateUrl: "extension-device-management.component.html", + imports: [ + DeviceManagementComponent, + I18nPipe, + PopOutComponent, + PopupHeaderComponent, + PopupPageComponent, + ], +}) +export class ExtensionDeviceManagementComponent {} diff --git a/apps/browser/src/auth/popup/settings/vault-timeout-input.component.html b/apps/browser/src/auth/popup/settings/vault-timeout-input.component.html deleted file mode 100644 index c62f29130bf..00000000000 --- a/apps/browser/src/auth/popup/settings/vault-timeout-input.component.html +++ /dev/null @@ -1,44 +0,0 @@ -
-
- - -
-
-
-
-
- - -
-
-
-
- - -
-
-
-
-
diff --git a/apps/browser/src/auth/popup/settings/vault-timeout-input.component.ts b/apps/browser/src/auth/popup/settings/vault-timeout-input.component.ts deleted file mode 100644 index 25a4d01333d..00000000000 --- a/apps/browser/src/auth/popup/settings/vault-timeout-input.component.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { Component } from "@angular/core"; -import { NG_VALIDATORS, NG_VALUE_ACCESSOR } from "@angular/forms"; - -import { VaultTimeoutInputComponent as VaultTimeoutInputComponentBase } from "@bitwarden/auth/angular"; - -@Component({ - selector: "app-vault-timeout-input", - templateUrl: "vault-timeout-input.component.html", - providers: [ - { - provide: NG_VALUE_ACCESSOR, - multi: true, - useExisting: VaultTimeoutInputComponent, - }, - { - provide: NG_VALIDATORS, - multi: true, - useExisting: VaultTimeoutInputComponent, - }, - ], - standalone: false, -}) -export class VaultTimeoutInputComponent extends VaultTimeoutInputComponentBase {} diff --git a/apps/browser/src/auth/popup/update-temp-password.component.html b/apps/browser/src/auth/popup/update-temp-password.component.html deleted file mode 100644 index 0ce82aa20cf..00000000000 --- a/apps/browser/src/auth/popup/update-temp-password.component.html +++ /dev/null @@ -1,142 +0,0 @@ -
-
-
- -
-

- {{ "updateMasterPassword" | i18n }} -

-
- -
-
-
- - {{ masterPasswordWarningText }} - - - -
-
-
-
-
- - -
-
-
-
-
-
-
-
-
-
- - -
-
- -
-
- - -
-
-
-
-
-
-
- - -
-
- -
-
-
-
-
-
-
- - -
-
- -
-
-
diff --git a/apps/browser/src/auth/popup/update-temp-password.component.ts b/apps/browser/src/auth/popup/update-temp-password.component.ts deleted file mode 100644 index e8cf64b7548..00000000000 --- a/apps/browser/src/auth/popup/update-temp-password.component.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { Component } from "@angular/core"; -import { firstValueFrom } from "rxjs"; - -import { UpdateTempPasswordComponent as BaseUpdateTempPasswordComponent } from "@bitwarden/angular/auth/components/update-temp-password.component"; - -import { postLogoutMessageListener$ } from "./utils/post-logout-message-listener"; - -@Component({ - selector: "app-update-temp-password", - templateUrl: "update-temp-password.component.html", - standalone: false, -}) -export class UpdateTempPasswordComponent extends BaseUpdateTempPasswordComponent { - onSuccessfulChangePassword: () => Promise = this.doOnSuccessfulChangePassword.bind(this); - - private async doOnSuccessfulChangePassword() { - // start listening for "switchAccountFinish" or "doneLoggingOut" - const messagePromise = firstValueFrom(postLogoutMessageListener$); - this.messagingService.send("logout"); - // wait for messages - const command = await messagePromise; - - // doneLoggingOut already has a message handler that will navigate us - if (command === "switchAccountFinish") { - // FIXME: Verify that this floating promise is intentional. If it is, add an explanatory comment and ensure there is proper error handling. - // eslint-disable-next-line @typescript-eslint/no-floating-promises - this.router.navigate(["/"]); - } - } -} diff --git a/apps/browser/src/auth/popup/utils/auth-popout-window.spec.ts b/apps/browser/src/auth/popup/utils/auth-popout-window.spec.ts index af850c9a7bc..a6661ea263c 100644 --- a/apps/browser/src/auth/popup/utils/auth-popout-window.spec.ts +++ b/apps/browser/src/auth/popup/utils/auth-popout-window.spec.ts @@ -43,17 +43,13 @@ describe("AuthPopoutWindow", () => { singleActionKey: AuthPopoutType.unlockExtension, senderWindowId: 1, }); - expect(sendMessageDataSpy).toHaveBeenCalledWith(senderTab, "bgUnlockPopoutOpened", { - skipNotification: false, - }); + expect(sendMessageDataSpy).toHaveBeenCalledWith(senderTab, "bgUnlockPopoutOpened", {}); }); - it("sends an indication that the presenting the notification bar for unlocking the extension should be skipped", async () => { - await openUnlockPopout(senderTab, true); + it("sends the bgUnlockPopoutOpened message", async () => { + await openUnlockPopout(senderTab); - expect(sendMessageDataSpy).toHaveBeenCalledWith(senderTab, "bgUnlockPopoutOpened", { - skipNotification: true, - }); + expect(sendMessageDataSpy).toHaveBeenCalledWith(senderTab, "bgUnlockPopoutOpened", {}); }); it("closes any existing popup window types that are open to the unlock extension route", async () => { diff --git a/apps/browser/src/auth/popup/utils/auth-popout-window.ts b/apps/browser/src/auth/popup/utils/auth-popout-window.ts index 0611891b61e..15e1ceb3e7b 100644 --- a/apps/browser/src/auth/popup/utils/auth-popout-window.ts +++ b/apps/browser/src/auth/popup/utils/auth-popout-window.ts @@ -20,9 +20,8 @@ const extensionUnlockUrls = new Set([ * Opens a window that facilitates unlocking / logging into the extension. * * @param senderTab - Used to determine the windowId of the sender. - * @param skipNotification - Used to determine whether to show the unlock notification. */ -async function openUnlockPopout(senderTab: chrome.tabs.Tab, skipNotification = false) { +async function openUnlockPopout(senderTab: chrome.tabs.Tab) { const existingPopoutWindowTabs = await BrowserApi.tabsQuery({ windowType: "popup" }); existingPopoutWindowTabs.forEach((tab) => { if (extensionUnlockUrls.has(tab.url)) { @@ -36,7 +35,7 @@ async function openUnlockPopout(senderTab: chrome.tabs.Tab, skipNotification = f singleActionKey: AuthPopoutType.unlockExtension, senderWindowId: senderTab.windowId, }); - await BrowserApi.tabSendMessageData(senderTab, "bgUnlockPopoutOpened", { skipNotification }); + await BrowserApi.tabSendMessageData(senderTab, "bgUnlockPopoutOpened", {}); } /** diff --git a/apps/browser/src/auth/services/auth-status-badge-updater.service.ts b/apps/browser/src/auth/services/auth-status-badge-updater.service.ts index 4205ebc665d..4f239e54939 100644 --- a/apps/browser/src/auth/services/auth-status-badge-updater.service.ts +++ b/apps/browser/src/auth/services/auth-status-badge-updater.service.ts @@ -17,8 +17,8 @@ export class AuthStatusBadgeUpdaterService { private accountService: AccountService, private authService: AuthService, ) { - this.accountService.activeAccount$ - .pipe( + this.badgeService.setState(StateName, (_tab) => + this.accountService.activeAccount$.pipe( switchMap((account) => account ? this.authService.authStatusFor$(account.id) @@ -27,30 +27,36 @@ export class AuthStatusBadgeUpdaterService { mergeMap(async (authStatus) => { switch (authStatus) { case AuthenticationStatus.LoggedOut: { - await this.badgeService.setState(StateName, BadgeStatePriority.High, { - icon: BadgeIcon.LoggedOut, - backgroundColor: Unset, - text: Unset, - }); - break; + return { + priority: BadgeStatePriority.High, + state: { + icon: BadgeIcon.LoggedOut, + backgroundColor: Unset, + text: Unset, + }, + }; } case AuthenticationStatus.Locked: { - await this.badgeService.setState(StateName, BadgeStatePriority.High, { - icon: BadgeIcon.Locked, - backgroundColor: Unset, - text: Unset, - }); - break; + return { + priority: BadgeStatePriority.High, + state: { + icon: BadgeIcon.Locked, + backgroundColor: Unset, + text: Unset, + }, + }; } case AuthenticationStatus.Unlocked: { - await this.badgeService.setState(StateName, BadgeStatePriority.Low, { - icon: BadgeIcon.Unlocked, - }); - break; + return { + priority: BadgeStatePriority.Low, + state: { + icon: BadgeIcon.Unlocked, + }, + }; } } }), - ) - .subscribe(); + ), + ); } } diff --git a/apps/browser/src/auth/services/extension-device-management-component.service.ts b/apps/browser/src/auth/services/extension-device-management-component.service.ts new file mode 100644 index 00000000000..2585ba3198c --- /dev/null +++ b/apps/browser/src/auth/services/extension-device-management-component.service.ts @@ -0,0 +1,15 @@ +import { DeviceManagementComponentServiceAbstraction } from "@bitwarden/angular/auth/device-management/device-management-component.service.abstraction"; + +/** + * Browser extension implementation of the device management component service + */ +export class ExtensionDeviceManagementComponentService + implements DeviceManagementComponentServiceAbstraction +{ + /** + * Don't show header information in browser extension client + */ + showHeaderInformation(): boolean { + return false; + } +} diff --git a/apps/browser/src/auth/services/new-device-verification/extension-new-device-verification-component.service.spec.ts b/apps/browser/src/auth/services/new-device-verification/extension-new-device-verification-component.service.spec.ts new file mode 100644 index 00000000000..7c91cae3fcb --- /dev/null +++ b/apps/browser/src/auth/services/new-device-verification/extension-new-device-verification-component.service.spec.ts @@ -0,0 +1,21 @@ +import { ExtensionNewDeviceVerificationComponentService } from "./extension-new-device-verification-component.service"; + +describe("ExtensionNewDeviceVerificationComponentService", () => { + let sut: ExtensionNewDeviceVerificationComponentService; + + beforeEach(() => { + sut = new ExtensionNewDeviceVerificationComponentService(); + }); + + it("should instantiate the service", () => { + expect(sut).not.toBeFalsy(); + }); + + describe("showBackButton()", () => { + it("should return false", () => { + const result = sut.showBackButton(); + + expect(result).toBe(false); + }); + }); +}); diff --git a/apps/browser/src/auth/services/new-device-verification/extension-new-device-verification-component.service.ts b/apps/browser/src/auth/services/new-device-verification/extension-new-device-verification-component.service.ts new file mode 100644 index 00000000000..05e60fc8dad --- /dev/null +++ b/apps/browser/src/auth/services/new-device-verification/extension-new-device-verification-component.service.ts @@ -0,0 +1,13 @@ +import { + DefaultNewDeviceVerificationComponentService, + NewDeviceVerificationComponentService, +} from "@bitwarden/auth/angular"; + +export class ExtensionNewDeviceVerificationComponentService + extends DefaultNewDeviceVerificationComponentService + implements NewDeviceVerificationComponentService +{ + showBackButton() { + return false; + } +} diff --git a/apps/browser/src/autofill/background/abstractions/notification.background.ts b/apps/browser/src/autofill/background/abstractions/notification.background.ts index 9c9c5c0e243..912d9657124 100644 --- a/apps/browser/src/autofill/background/abstractions/notification.background.ts +++ b/apps/browser/src/autofill/background/abstractions/notification.background.ts @@ -1,16 +1,32 @@ import { NeverDomains } from "@bitwarden/common/models/domain/domain-service"; import { ServerConfig } from "@bitwarden/common/platform/abstractions/config/server-config"; -import { UserId } from "@bitwarden/common/types/guid"; import { CipherView } from "@bitwarden/common/vault/models/view/cipher.view"; import { FolderView } from "@bitwarden/common/vault/models/view/folder.view"; -import { SecurityTask } from "@bitwarden/common/vault/tasks"; import { CollectionView } from "../../content/components/common-types"; -import { NotificationQueueMessageTypes } from "../../enums/notification-queue-message-type.enum"; +import { NotificationType, NotificationTypes } from "../../enums/notification-type.enum"; import AutofillPageDetails from "../../models/autofill-page-details"; +/** + * @todo Remove Standard_ label when implemented as standard NotificationQueueMessage. + */ +export interface Standard_NotificationQueueMessage { + // universal notification properties + domain: string; + tab: chrome.tabs.Tab; + launchTimestamp: number; + expires: Date; + wasVaultLocked: boolean; + + type: T; // NotificationType + data: D; // notification-specific data +} + +/** + * @todo Deprecate in favor of Standard_NotificationQueueMessage. + */ interface NotificationQueueMessage { - type: NotificationQueueMessageTypes; + type: NotificationTypes; domain: string; tab: chrome.tabs.Tab; launchTimestamp: number; @@ -18,11 +34,15 @@ interface NotificationQueueMessage { wasVaultLocked: boolean; } -interface AddChangePasswordQueueMessage extends NotificationQueueMessage { - type: "change"; - cipherId: string; +type ChangePasswordNotificationData = { + cipherIds: CipherView["id"][]; newPassword: string; -} +}; + +type AddChangePasswordNotificationQueueMessage = Standard_NotificationQueueMessage< + typeof NotificationType.ChangePassword, + ChangePasswordNotificationData +>; interface AddLoginQueueMessage extends NotificationQueueMessage { type: "add"; @@ -43,7 +63,7 @@ interface AtRiskPasswordQueueMessage extends NotificationQueueMessage { type NotificationQueueMessageItem = | AddLoginQueueMessage - | AddChangePasswordQueueMessage + | AddChangePasswordNotificationQueueMessage | AddUnlockVaultQueueMessage | AtRiskPasswordQueueMessage; @@ -60,23 +80,10 @@ type LockedVaultPendingNotificationsData = { target: string; }; -type AtRiskPasswordNotificationsData = { - activeUserId: UserId; - cipher: CipherView; - securityTask: SecurityTask; - uri: string; -}; - type AdjustNotificationBarMessageData = { height: number; }; -type ChangePasswordMessageData = { - currentPassword: string; - newPassword: string; - url: string; -}; - type AddLoginMessageData = { username: string; password: string; @@ -87,15 +94,17 @@ type UnlockVaultMessageData = { skipNotification?: boolean; }; +/** + * @todo Extend generics to this type, see Standard_NotificationQueueMessage + * - use new `data` types as generic + * - eliminate optional status of properties as needed per Notification Type + */ type NotificationBackgroundExtensionMessage = { [key: string]: any; command: string; data?: Partial & Partial & - Partial & - Partial & - Partial; - login?: AddLoginMessageData; + Partial; folder?: string; edit?: boolean; details?: AutofillPageDetails; @@ -121,18 +130,6 @@ type NotificationBackgroundExtensionMessageHandlers = { bgCloseNotificationBar: ({ message, sender }: BackgroundOnMessageHandlerParams) => Promise; bgOpenAtRiskPasswords: ({ message, sender }: BackgroundOnMessageHandlerParams) => Promise; bgAdjustNotificationBar: ({ message, sender }: BackgroundOnMessageHandlerParams) => Promise; - bgTriggerAddLoginNotification: ({ - message, - sender, - }: BackgroundOnMessageHandlerParams) => Promise; - bgTriggerChangedPasswordNotification: ({ - message, - sender, - }: BackgroundOnMessageHandlerParams) => Promise; - bgTriggerAtRiskPasswordNotification: ({ - message, - sender, - }: BackgroundOnMessageHandlerParams) => Promise; bgRemoveTabFromNotificationQueue: ({ sender }: BackgroundSenderParam) => void; bgSaveCipher: ({ message, sender }: BackgroundOnMessageHandlerParams) => void; bgOpenAddEditVaultItemPopout: ({ @@ -144,7 +141,6 @@ type NotificationBackgroundExtensionMessageHandlers = { sender, }: BackgroundOnMessageHandlerParams) => Promise; bgNeverSave: ({ sender }: BackgroundSenderParam) => Promise; - bgUnlockPopoutOpened: ({ message, sender }: BackgroundOnMessageHandlerParams) => Promise; bgReopenUnlockPopout: ({ sender }: BackgroundSenderParam) => Promise; checkNotificationQueue: ({ sender }: BackgroundSenderParam) => Promise; collectPageDetailsResponse: ({ message }: BackgroundMessageParam) => Promise; @@ -156,13 +152,12 @@ type NotificationBackgroundExtensionMessageHandlers = { }; export { - AddChangePasswordQueueMessage, + AddChangePasswordNotificationQueueMessage, AddLoginQueueMessage, AddUnlockVaultQueueMessage, NotificationQueueMessageItem, LockedVaultPendingNotificationsData, AdjustNotificationBarMessageData, - ChangePasswordMessageData, UnlockVaultMessageData, AddLoginMessageData, NotificationBackgroundExtensionMessage, diff --git a/apps/browser/src/autofill/background/abstractions/overlay-notifications.background.ts b/apps/browser/src/autofill/background/abstractions/overlay-notifications.background.ts index 0ec6a9ae04a..a70ffe25310 100644 --- a/apps/browser/src/autofill/background/abstractions/overlay-notifications.background.ts +++ b/apps/browser/src/autofill/background/abstractions/overlay-notifications.background.ts @@ -1,3 +1,6 @@ +import { CipherView } from "@bitwarden/common/vault/models/view/cipher.view"; +import { SecurityTask } from "@bitwarden/common/vault/tasks"; + import AutofillPageDetails from "../../models/autofill-page-details"; export type NotificationTypeData = { @@ -8,9 +11,15 @@ export type NotificationTypeData = { launchTimestamp?: number; }; +export type LoginSecurityTaskInfo = { + securityTask: SecurityTask; + cipher: CipherView; + uri: ModifyLoginCipherFormData["uri"]; +}; + export type WebsiteOriginsWithFields = Map>; -export type ActiveFormSubmissionRequests = Set; +export type ActiveFormSubmissionRequests = Set; export type ModifyLoginCipherFormData = { uri: string; @@ -19,19 +28,12 @@ export type ModifyLoginCipherFormData = { newPassword: string; }; -export type ModifyLoginCipherFormDataForTab = Map< - chrome.tabs.Tab["id"], - { uri: string; username: string; password: string; newPassword: string } ->; +export type ModifyLoginCipherFormDataForTab = Map; export type OverlayNotificationsExtensionMessage = { command: string; - uri?: string; - username?: string; - password?: string; - newPassword?: string; details?: AutofillPageDetails; -}; +} & ModifyLoginCipherFormData; type OverlayNotificationsMessageParams = { message: OverlayNotificationsExtensionMessage }; type OverlayNotificationSenderParams = { sender: chrome.runtime.MessageSender }; diff --git a/apps/browser/src/autofill/background/abstractions/overlay.background.ts b/apps/browser/src/autofill/background/abstractions/overlay.background.ts index 5e2b755ad4a..6067d563db2 100644 --- a/apps/browser/src/autofill/background/abstractions/overlay.background.ts +++ b/apps/browser/src/autofill/background/abstractions/overlay.background.ts @@ -48,6 +48,7 @@ export type FocusedFieldData = { frameId?: number; accountCreationFieldType?: string; showPasskeys?: boolean; + focusedFieldForm?: string; }; export type InlineMenuElementPosition = { @@ -245,6 +246,7 @@ export type OverlayBackgroundExtensionMessageHandlers = { editedCipher: () => void; deletedCipher: () => void; bgSaveCipher: () => void; + updateOverlayCiphers: () => void; fido2AbortRequest: ({ message, sender }: BackgroundOnMessageHandlerParams) => void; }; diff --git a/apps/browser/src/autofill/background/auto-submit-login.background.spec.ts b/apps/browser/src/autofill/background/auto-submit-login.background.spec.ts index 373354b4c54..82a907a9e43 100644 --- a/apps/browser/src/autofill/background/auto-submit-login.background.spec.ts +++ b/apps/browser/src/autofill/background/auto-submit-login.background.spec.ts @@ -110,11 +110,11 @@ describe("AutoSubmitLoginBackground", () => { }); describe("when the AutomaticAppLogIn policy is valid and active", () => { - let webRequestDetails: chrome.webRequest.WebRequestBodyDetails; + let webRequestDetails: chrome.webRequest.WebRequestDetails; describe("starting the auto-submit login workflow", () => { beforeEach(async () => { - webRequestDetails = mock({ + webRequestDetails = mock({ initiator: validIpdUrl1, url: validAutoSubmitUrl, type: "main_frame", @@ -196,7 +196,7 @@ describe("AutoSubmitLoginBackground", () => { describe("cancelling an active auto-submit login workflow", () => { beforeEach(async () => { - webRequestDetails = mock({ + webRequestDetails = mock({ initiator: validIpdUrl1, url: validAutoSubmitUrl, type: "main_frame", @@ -280,7 +280,7 @@ describe("AutoSubmitLoginBackground", () => { }); describe("requests that occur within a sub-frame", () => { - const webRequestDetails = mock({ + const webRequestDetails = mock({ url: validAutoSubmitUrl, frameId: 1, }); @@ -324,7 +324,7 @@ describe("AutoSubmitLoginBackground", () => { it("updates the most recent idp host when a tab is activated", async () => { jest.spyOn(BrowserApi, "getTab").mockResolvedValue(newTab); - triggerTabOnActivatedEvent(mock({ tabId: newTabId })); + triggerTabOnActivatedEvent(mock({ tabId: newTabId })); await flushPromises(); expect(autoSubmitLoginBackground["mostRecentIdpHost"]).toStrictEqual({ @@ -336,7 +336,7 @@ describe("AutoSubmitLoginBackground", () => { it("updates the most recent id host when a tab is updated", () => { triggerTabOnUpdatedEvent( newTabId, - mock({ url: validIpdUrl1 }), + mock({ url: validIpdUrl1 }), newTab, ); @@ -389,7 +389,7 @@ describe("AutoSubmitLoginBackground", () => { tabId: newTabId, }; - triggerTabOnRemovedEvent(newTabId, mock()); + triggerTabOnRemovedEvent(newTabId, mock()); expect(autoSubmitLoginBackground["currentAutoSubmitHostData"]).toStrictEqual({}); }); @@ -403,14 +403,14 @@ describe("AutoSubmitLoginBackground", () => { tabId: tabId, }; triggerWebRequestOnBeforeRedirectEvent( - mock({ + mock({ url: validIpdUrl1, redirectUrl: validIpdUrl2, frameId: 0, }), ); triggerWebRequestOnBeforeRedirectEvent( - mock({ + mock({ url: validIpdUrl2, redirectUrl: validAutoSubmitUrl, frameId: 0, @@ -418,7 +418,7 @@ describe("AutoSubmitLoginBackground", () => { ); triggerWebRequestOnBeforeRequestEvent( - mock({ + mock({ tabId: tabId, url: `https://${validAutoSubmitHost}`, initiator: null, diff --git a/apps/browser/src/autofill/background/auto-submit-login.background.ts b/apps/browser/src/autofill/background/auto-submit-login.background.ts index dcafe21b63c..f593fab2516 100644 --- a/apps/browser/src/autofill/background/auto-submit-login.background.ts +++ b/apps/browser/src/autofill/background/auto-submit-login.background.ts @@ -1,12 +1,12 @@ // FIXME: Update this file to be type safe and remove this and next line // @ts-strict-ignore -import { firstValueFrom, switchMap } from "rxjs"; +import { filter, firstValueFrom, of, switchMap } from "rxjs"; import { PolicyService } from "@bitwarden/common/admin-console/abstractions/policy/policy.service.abstraction"; import { PolicyType } from "@bitwarden/common/admin-console/enums"; import { Policy } from "@bitwarden/common/admin-console/models/domain/policy"; import { getFirstPolicy } from "@bitwarden/common/admin-console/services/policy/default-policy.service"; -import { AccountService } from "@bitwarden/common/auth/abstractions/account.service"; +import { Account, AccountService } from "@bitwarden/common/auth/abstractions/account.service"; import { AuthService } from "@bitwarden/common/auth/abstractions/auth.service"; import { AuthenticationStatus } from "@bitwarden/common/auth/enums/authentication-status"; import { getUserId } from "@bitwarden/common/auth/services/account.service"; @@ -51,9 +51,14 @@ export class AutoSubmitLoginBackground implements AutoSubmitLoginBackgroundAbstr * Initializes the auto-submit login policy. If the policy is not enabled, it * will trigger a removal of any established listeners. */ + async init() { - this.accountService.activeAccount$ + this.authService.activeAccountStatus$ .pipe( + switchMap((value) => + value === AuthenticationStatus.Unlocked ? this.accountService.activeAccount$ : of(null), + ), + filter((account): account is Account => account !== null), getUserId, switchMap((userId) => this.policyService.policiesByType$(PolicyType.AutomaticAppLogIn, userId), @@ -156,7 +161,9 @@ export class AutoSubmitLoginBackground implements AutoSubmitLoginBackgroundAbstr * * @param details - The details of the request. */ - private handleOnBeforeRequest = (details: chrome.webRequest.WebRequestBodyDetails) => { + private handleOnBeforeRequest = ( + details: chrome.webRequest.OnBeforeRequestDetails, + ): undefined => { const requestInitiator = this.getRequestInitiator(details); const isValidInitiator = this.isValidInitiator(requestInitiator); @@ -186,7 +193,7 @@ export class AutoSubmitLoginBackground implements AutoSubmitLoginBackgroundAbstr * @param isValidInitiator - A flag indicating if the initiator of the request is valid. */ private postRequestEncounteredAfterSubmission = ( - details: chrome.webRequest.WebRequestBodyDetails, + details: chrome.webRequest.OnBeforeRequestDetails, isValidInitiator: boolean, ) => { return details.method === "POST" && this.validAutoSubmitHosts.size > 0 && isValidInitiator; @@ -200,7 +207,7 @@ export class AutoSubmitLoginBackground implements AutoSubmitLoginBackgroundAbstr * @param isValidInitiator - A flag indicating if the initiator of the request is valid. */ private requestRedirectsToInvalidHost = ( - details: chrome.webRequest.WebRequestBodyDetails, + details: chrome.webRequest.OnBeforeRequestDetails, isValidInitiator: boolean, ) => { return ( @@ -216,7 +223,7 @@ export class AutoSubmitLoginBackground implements AutoSubmitLoginBackgroundAbstr * * @param details - The details of the request. */ - private setupAutoSubmitFlow = (details: chrome.webRequest.WebRequestBodyDetails) => { + private setupAutoSubmitFlow = (details: chrome.webRequest.OnBeforeRequestDetails) => { if (this.isRequestInMainFrame(details)) { this.currentAutoSubmitHostData = { url: details.url, @@ -283,7 +290,7 @@ export class AutoSubmitLoginBackground implements AutoSubmitLoginBackgroundAbstr * @param details - The details of the request. */ private handleWebRequestOnBeforeRedirect = ( - details: chrome.webRequest.WebRedirectionResponseDetails, + details: chrome.webRequest.OnBeforeRedirectDetails, ) => { if (this.isRequestInMainFrame(details) && this.urlContainsAutoSubmitHash(details.redirectUrl)) { this.validAutoSubmitHosts.add(this.getUrlHost(details.redirectUrl)); @@ -349,7 +356,7 @@ export class AutoSubmitLoginBackground implements AutoSubmitLoginBackgroundAbstr */ private disableAutoSubmitFlow = async ( requestInitiator: string, - details: chrome.webRequest.WebRequestBodyDetails, + details: chrome.webRequest.OnBeforeRequestDetails, ) => { if (this.isValidAutoSubmitHost(requestInitiator)) { this.removeUrlFromAutoSubmitHosts(requestInitiator); @@ -385,7 +392,7 @@ export class AutoSubmitLoginBackground implements AutoSubmitLoginBackgroundAbstr * @param initiator - The initiator of the request. */ private shouldRouteTriggerAutoSubmit = ( - details: chrome.webRequest.ResourceRequest, + details: chrome.webRequest.OnBeforeRequestDetails, initiator: string, ) => { if (this.isRequestInMainFrame(details)) { @@ -444,7 +451,7 @@ export class AutoSubmitLoginBackground implements AutoSubmitLoginBackgroundAbstr * * @param details - The details of the request. */ - private getRequestInitiator = (details: chrome.webRequest.ResourceRequest) => { + private getRequestInitiator = (details: chrome.webRequest.OnBeforeRequestDetails) => { if (!this.isSafariBrowser) { return details.initiator || (details as browser.webRequest._OnBeforeRequestDetails).originUrl; } @@ -465,7 +472,12 @@ export class AutoSubmitLoginBackground implements AutoSubmitLoginBackgroundAbstr * * @param details - The details of the request. */ - private isRequestInMainFrame = (details: chrome.webRequest.ResourceRequest) => { + private isRequestInMainFrame = ( + details: SetPartial< + chrome.webRequest.WebRequestDetails, + "documentId" | "documentLifecycle" | "frameType" + >, + ) => { if (this.isSafariBrowser) { return details.frameId === 0; } @@ -540,7 +552,7 @@ export class AutoSubmitLoginBackground implements AutoSubmitLoginBackgroundAbstr * * @param activeInfo - The active tab information. */ - private handleSafariTabOnActivated = async (activeInfo: chrome.tabs.TabActiveInfo) => { + private handleSafariTabOnActivated = async (activeInfo: chrome.tabs.OnActivatedInfo) => { if (activeInfo.tabId < 0) { return; } @@ -557,7 +569,7 @@ export class AutoSubmitLoginBackground implements AutoSubmitLoginBackgroundAbstr * @param tabId - The tab ID associated with the URL. * @param changeInfo - The change information of the tab. */ - private handleSafariTabOnUpdated = (tabId: number, changeInfo: chrome.tabs.TabChangeInfo) => { + private handleSafariTabOnUpdated = (tabId: number, changeInfo: chrome.tabs.OnUpdatedInfo) => { if (changeInfo) { this.setMostRecentIdpHost(changeInfo.url, tabId); } diff --git a/apps/browser/src/autofill/background/notification.background.spec.ts b/apps/browser/src/autofill/background/notification.background.spec.ts index 5e7e3ed30f5..f9e2e1c534f 100644 --- a/apps/browser/src/autofill/background/notification.background.spec.ts +++ b/apps/browser/src/autofill/background/notification.background.spec.ts @@ -3,17 +3,18 @@ import { BehaviorSubject, firstValueFrom, of } from "rxjs"; import { CollectionService } from "@bitwarden/admin-console/common"; import { OrganizationService } from "@bitwarden/common/admin-console/abstractions/organization/organization.service.abstraction"; -import { DefaultPolicyService } from "@bitwarden/common/admin-console/services/policy/default-policy.service"; +import { PolicyService } from "@bitwarden/common/admin-console/abstractions/policy/policy.service.abstraction"; import { AccountInfo, AccountService } from "@bitwarden/common/auth/abstractions/account.service"; import { AuthenticationStatus } from "@bitwarden/common/auth/enums/authentication-status"; import { AuthService } from "@bitwarden/common/auth/services/auth.service"; import { ExtensionCommand } from "@bitwarden/common/autofill/constants"; import { DomainSettingsService } from "@bitwarden/common/autofill/services/domain-settings.service"; -import { UserNotificationSettingsService } from "@bitwarden/common/autofill/services/user-notification-settings.service"; +import { UserNotificationSettingsServiceAbstraction } from "@bitwarden/common/autofill/services/user-notification-settings.service"; import { ConfigService } from "@bitwarden/common/platform/abstractions/config/config.service"; import { EnvironmentService } from "@bitwarden/common/platform/abstractions/environment.service"; import { LogService } from "@bitwarden/common/platform/abstractions/log.service"; import { MessagingService } from "@bitwarden/common/platform/abstractions/messaging.service"; +import { ThemeTypes } from "@bitwarden/common/platform/enums"; import { SelfHostedEnvironment } from "@bitwarden/common/platform/services/default-environment.service"; import { ThemeStateService } from "@bitwarden/common/platform/theming/theme-state.service"; import { UserId } from "@bitwarden/common/types/guid"; @@ -25,19 +26,20 @@ import { FolderService } from "@bitwarden/common/vault/services/folder/folder.se import { TaskService, SecurityTask } from "@bitwarden/common/vault/tasks"; import { BrowserApi } from "../../platform/browser/browser-api"; -import { NotificationQueueMessageType } from "../enums/notification-queue-message-type.enum"; +import { NotificationType } from "../enums/notification-type.enum"; import { FormData } from "../services/abstractions/autofill.service"; import AutofillService from "../services/autofill.service"; import { createAutofillPageDetailsMock, createChromeTabMock } from "../spec/autofill-mocks"; import { flushPromises, sendMockExtensionMessage } from "../spec/testing-utils"; import { - AddChangePasswordQueueMessage, + AddChangePasswordNotificationQueueMessage, AddLoginQueueMessage, AddUnlockVaultQueueMessage, LockedVaultPendingNotificationsData, NotificationBackgroundExtensionMessage, } from "./abstractions/notification.background"; +import { ModifyLoginCipherFormData } from "./abstractions/overlay-notifications.background"; import NotificationBackground from "./notification.background"; jest.mock("rxjs", () => { @@ -58,13 +60,21 @@ describe("NotificationBackground", () => { const collectionService = mock(); let activeAccountStatusMock$: BehaviorSubject; let authService: MockProxy; - const policyService = mock(); + const policyAppliesToUser$ = new BehaviorSubject(true); + const policyService = mock({ + policyAppliesToUser$: jest.fn().mockReturnValue(policyAppliesToUser$), + }); const folderService = mock(); - const userNotificationSettingsService = mock(); + const enableChangedPasswordPromptMock$ = new BehaviorSubject(true); + const userNotificationSettingsService = mock(); + userNotificationSettingsService.enableChangedPasswordPrompt$ = enableChangedPasswordPromptMock$; + const domainSettingsService = mock(); const environmentService = mock(); const logService = mock(); + const selectedThemeMock$ = new BehaviorSubject(ThemeTypes.Light); const themeStateService = mock(); + themeStateService.selectedTheme$ = selectedThemeMock$; const configService = mock(); const accountService = mock(); const organizationService = mock(); @@ -123,19 +133,11 @@ describe("NotificationBackground", () => { expect(cipherView.name).toEqual("example.com"); expect(cipherView.login).toEqual({ - autofillOnPageLoad: null, - fido2Credentials: null, + fido2Credentials: [], password: message.password, - passwordRevisionDate: null, - totp: null, uris: [ { - _canLaunch: null, - _domain: null, - _host: null, - _hostname: null, _uri: message.uri, - match: null, }, ], username: message.username, @@ -164,7 +166,7 @@ describe("NotificationBackground", () => { }); }); - describe("notification bar extension message handlers", () => { + describe("notification bar extension message handlers and triggers", () => { beforeEach(() => { notificationBackground.init(); }); @@ -279,11 +281,15 @@ describe("NotificationBackground", () => { let tab: chrome.tabs.Tab; let sender: chrome.runtime.MessageSender; let getEnableAddedLoginPromptSpy: jest.SpyInstance; - let getEnableChangedPasswordPromptSpy: jest.SpyInstance; let pushAddLoginToQueueSpy: jest.SpyInstance; let pushChangePasswordToQueueSpy: jest.SpyInstance; let getAllDecryptedForUrlSpy: jest.SpyInstance; - + const mockModifyLoginCipherFormData: ModifyLoginCipherFormData = { + username: "test", + password: "password", + uri: "https://example.com", + newPassword: null, + }; beforeEach(() => { tab = createChromeTabMock(); sender = mock({ tab }); @@ -291,10 +297,7 @@ describe("NotificationBackground", () => { notificationBackground as any, "getEnableAddedLoginPrompt", ); - getEnableChangedPasswordPromptSpy = jest.spyOn( - notificationBackground as any, - "getEnableChangedPasswordPrompt", - ); + pushAddLoginToQueueSpy = jest.spyOn(notificationBackground as any, "pushAddLoginToQueue"); pushChangePasswordToQueueSpy = jest.spyOn( notificationBackground as any, @@ -304,43 +307,34 @@ describe("NotificationBackground", () => { }); it("skips attempting to add the login if the user is logged out", async () => { - const message: NotificationBackgroundExtensionMessage = { - command: "bgTriggerAddLoginNotification", - login: { username: "test", password: "password", url: "https://example.com" }, - }; + const data: ModifyLoginCipherFormData = mockModifyLoginCipherFormData; activeAccountStatusMock$.next(AuthenticationStatus.LoggedOut); - sendMockExtensionMessage(message, sender); - await flushPromises(); + await notificationBackground.triggerAddLoginNotification(data, tab); expect(getEnableAddedLoginPromptSpy).not.toHaveBeenCalled(); expect(pushAddLoginToQueueSpy).not.toHaveBeenCalled(); }); it("skips attempting to add the login if the login data does not contain a valid url", async () => { - const message: NotificationBackgroundExtensionMessage = { - command: "bgTriggerAddLoginNotification", - login: { username: "test", password: "password", url: "" }, + const data: ModifyLoginCipherFormData = { + ...mockModifyLoginCipherFormData, + uri: "", }; activeAccountStatusMock$.next(AuthenticationStatus.Locked); - sendMockExtensionMessage(message, sender); - await flushPromises(); + await notificationBackground.triggerAddLoginNotification(data, tab); expect(getEnableAddedLoginPromptSpy).not.toHaveBeenCalled(); expect(pushAddLoginToQueueSpy).not.toHaveBeenCalled(); }); it("skips attempting to add the login if the user with a locked vault has disabled the login notification", async () => { - const message: NotificationBackgroundExtensionMessage = { - command: "bgTriggerAddLoginNotification", - login: { username: "test", password: "password", url: "https://example.com" }, - }; + const data: ModifyLoginCipherFormData = mockModifyLoginCipherFormData; activeAccountStatusMock$.next(AuthenticationStatus.Locked); getEnableAddedLoginPromptSpy.mockReturnValueOnce(false); - sendMockExtensionMessage(message, sender); - await flushPromises(); + await notificationBackground.triggerAddLoginNotification(data, tab); expect(getEnableAddedLoginPromptSpy).toHaveBeenCalled(); expect(getAllDecryptedForUrlSpy).not.toHaveBeenCalled(); @@ -349,16 +343,12 @@ describe("NotificationBackground", () => { }); it("skips attempting to add the login if the user with an unlocked vault has disabled the login notification", async () => { - const message: NotificationBackgroundExtensionMessage = { - command: "bgTriggerAddLoginNotification", - login: { username: "test", password: "password", url: "https://example.com" }, - }; + const data: ModifyLoginCipherFormData = mockModifyLoginCipherFormData; activeAccountStatusMock$.next(AuthenticationStatus.Unlocked); getEnableAddedLoginPromptSpy.mockReturnValueOnce(false); getAllDecryptedForUrlSpy.mockResolvedValueOnce([]); - sendMockExtensionMessage(message, sender); - await flushPromises(); + await notificationBackground.triggerAddLoginNotification(data, tab); expect(getEnableAddedLoginPromptSpy).toHaveBeenCalled(); expect(getAllDecryptedForUrlSpy).toHaveBeenCalled(); @@ -366,41 +356,15 @@ describe("NotificationBackground", () => { expect(pushChangePasswordToQueueSpy).not.toHaveBeenCalled(); }); - it("skips attempting to change the password for an existing login if the user has disabled changing the password notification", async () => { - const message: NotificationBackgroundExtensionMessage = { - command: "bgTriggerAddLoginNotification", - login: { username: "test", password: "password", url: "https://example.com" }, - }; - activeAccountStatusMock$.next(AuthenticationStatus.Unlocked); - getEnableAddedLoginPromptSpy.mockReturnValueOnce(true); - getEnableChangedPasswordPromptSpy.mockReturnValueOnce(false); - getAllDecryptedForUrlSpy.mockResolvedValueOnce([ - mock({ login: { username: "test", password: "oldPassword" } }), - ]); - - sendMockExtensionMessage(message, sender); - await flushPromises(); - - expect(getEnableAddedLoginPromptSpy).toHaveBeenCalled(); - expect(getAllDecryptedForUrlSpy).toHaveBeenCalled(); - expect(getEnableChangedPasswordPromptSpy).toHaveBeenCalled(); - expect(pushAddLoginToQueueSpy).not.toHaveBeenCalled(); - expect(pushChangePasswordToQueueSpy).not.toHaveBeenCalled(); - }); - it("skips attempting to change the password for an existing login if the password has not changed", async () => { - const message: NotificationBackgroundExtensionMessage = { - command: "bgTriggerAddLoginNotification", - login: { username: "test", password: "password", url: "https://example.com" }, - }; + const data: ModifyLoginCipherFormData = mockModifyLoginCipherFormData; activeAccountStatusMock$.next(AuthenticationStatus.Unlocked); getEnableAddedLoginPromptSpy.mockReturnValueOnce(true); getAllDecryptedForUrlSpy.mockResolvedValueOnce([ mock({ login: { username: "test", password: "password" } }), ]); - sendMockExtensionMessage(message, sender); - await flushPromises(); + await notificationBackground.triggerAddLoginNotification(data, tab); expect(getEnableAddedLoginPromptSpy).toHaveBeenCalled(); expect(getAllDecryptedForUrlSpy).toHaveBeenCalled(); @@ -409,65 +373,45 @@ describe("NotificationBackground", () => { }); it("adds the login to the queue if the user has a locked account", async () => { - const login = { username: "test", password: "password", url: "https://example.com" }; - const message: NotificationBackgroundExtensionMessage = { - command: "bgTriggerAddLoginNotification", - login, - }; + const data: ModifyLoginCipherFormData = mockModifyLoginCipherFormData; activeAccountStatusMock$.next(AuthenticationStatus.Locked); getEnableAddedLoginPromptSpy.mockReturnValueOnce(true); - sendMockExtensionMessage(message, sender); - await flushPromises(); + await notificationBackground.triggerAddLoginNotification(data, tab); - expect(pushAddLoginToQueueSpy).toHaveBeenCalledWith("example.com", login, sender.tab, true); + expect(pushAddLoginToQueueSpy).toHaveBeenCalledWith( + "example.com", + { + url: data.uri, + username: data.username, + password: data.password, + }, + sender.tab, + true, + ); }); it("adds the login to the queue if the user has an unlocked account and the login is new", async () => { - const login = { - username: undefined, - password: "password", - url: "https://example.com", - } as any; - const message: NotificationBackgroundExtensionMessage = { - command: "bgTriggerAddLoginNotification", - login, + const data: ModifyLoginCipherFormData = { + ...mockModifyLoginCipherFormData, + username: null, }; + activeAccountStatusMock$.next(AuthenticationStatus.Unlocked); getEnableAddedLoginPromptSpy.mockReturnValueOnce(true); getAllDecryptedForUrlSpy.mockResolvedValueOnce([ mock({ login: { username: "anotherTestUsername", password: "password" } }), ]); - sendMockExtensionMessage(message, sender); - await flushPromises(); + await notificationBackground.triggerAddLoginNotification(data, tab); - expect(pushAddLoginToQueueSpy).toHaveBeenCalledWith("example.com", login, sender.tab); - }); - - it("adds a change password message to the queue if the user has changed an existing cipher's password", async () => { - const login = { username: "tEsT", password: "password", url: "https://example.com" }; - const message: NotificationBackgroundExtensionMessage = { - command: "bgTriggerAddLoginNotification", - login, - }; - activeAccountStatusMock$.next(AuthenticationStatus.Unlocked); - getEnableAddedLoginPromptSpy.mockResolvedValueOnce(true); - getEnableChangedPasswordPromptSpy.mockResolvedValueOnce(true); - getAllDecryptedForUrlSpy.mockResolvedValueOnce([ - mock({ - id: "cipher-id", - login: { username: "test", password: "oldPassword" }, - }), - ]); - - sendMockExtensionMessage(message, sender); - await flushPromises(); - - expect(pushChangePasswordToQueueSpy).toHaveBeenCalledWith( - "cipher-id", + expect(pushAddLoginToQueueSpy).toHaveBeenCalledWith( "example.com", - login.password, + { + url: data.uri, + username: data.username, + password: data.password, + }, sender.tab, ); }); @@ -476,12 +420,24 @@ describe("NotificationBackground", () => { describe("bgTriggerChangedPasswordNotification message handler", () => { let tab: chrome.tabs.Tab; let sender: chrome.runtime.MessageSender; + let getEnableChangedPasswordPromptSpy: jest.SpyInstance; let pushChangePasswordToQueueSpy: jest.SpyInstance; let getAllDecryptedForUrlSpy: jest.SpyInstance; + const mockModifyLoginCipherFormData: ModifyLoginCipherFormData = { + username: null, + uri: null, + password: "currentPassword", + newPassword: "newPassword", + }; beforeEach(() => { tab = createChromeTabMock(); sender = mock({ tab }); + getEnableChangedPasswordPromptSpy = jest.spyOn( + notificationBackground as any, + "getEnableChangedPasswordPrompt", + ); + pushChangePasswordToQueueSpy = jest.spyOn( notificationBackground as any, "pushChangePasswordToQueue", @@ -489,92 +445,173 @@ describe("NotificationBackground", () => { getAllDecryptedForUrlSpy = jest.spyOn(cipherService, "getAllDecryptedForUrl"); }); - it("skips attempting to add the change password message to the queue if the passed url is not valid", async () => { - const message: NotificationBackgroundExtensionMessage = { - command: "bgTriggerChangedPasswordNotification", - data: { newPassword: "newPassword", currentPassword: "currentPassword", url: "" }, - }; + afterEach(() => { + getEnableChangedPasswordPromptSpy.mockRestore(); + pushChangePasswordToQueueSpy.mockRestore(); + getAllDecryptedForUrlSpy.mockRestore(); + }); - sendMockExtensionMessage(message); - await flushPromises(); + it("skips attempting to change the password for an existing login if the user has disabled changing the password notification", async () => { + const data: ModifyLoginCipherFormData = { + ...mockModifyLoginCipherFormData, + }; + activeAccountStatusMock$.next(AuthenticationStatus.Unlocked); + getEnableChangedPasswordPromptSpy.mockReturnValueOnce(false); + getAllDecryptedForUrlSpy.mockResolvedValueOnce([ + mock({ login: { username: "test", password: "oldPassword" } }), + ]); + + await notificationBackground.triggerChangedPasswordNotification(data, tab); expect(pushChangePasswordToQueueSpy).not.toHaveBeenCalled(); }); - it("adds a change password message to the queue if the user does not have an unlocked account", async () => { - const message: NotificationBackgroundExtensionMessage = { - command: "bgTriggerChangedPasswordNotification", - data: { - newPassword: "newPassword", - currentPassword: "currentPassword", - url: "https://example.com", - }, + it("skips attempting to add the change password message to the queue if the user is logged out", async () => { + const data: ModifyLoginCipherFormData = { + ...mockModifyLoginCipherFormData, + uri: "https://example.com", }; + + activeAccountStatusMock$.next(AuthenticationStatus.LoggedOut); + + await notificationBackground.triggerChangedPasswordNotification(data, tab); + + expect(pushChangePasswordToQueueSpy).not.toHaveBeenCalled(); + }); + + it("skips attempting to add the change password message to the queue if the passed url is not valid", async () => { + const data: ModifyLoginCipherFormData = mockModifyLoginCipherFormData; + + await notificationBackground.triggerChangedPasswordNotification(data, tab); + + expect(pushChangePasswordToQueueSpy).not.toHaveBeenCalled(); + }); + + it("only only includes ciphers in notification data matching a username if username was present in the modify form data", async () => { + const data: ModifyLoginCipherFormData = { + ...mockModifyLoginCipherFormData, + uri: "https://example.com", + username: "userName", + }; + + activeAccountStatusMock$.next(AuthenticationStatus.Unlocked); + getAllDecryptedForUrlSpy.mockResolvedValueOnce([ + mock({ + id: "cipher-id-1", + login: { username: "test", password: "currentPassword" }, + }), + mock({ + id: "cipher-id-2", + login: { username: "username", password: "currentPassword" }, + }), + mock({ + id: "cipher-id-3", + login: { username: "uSeRnAmE", password: "currentPassword" }, + }), + ]); + + await notificationBackground.triggerChangedPasswordNotification(data, tab); + + expect(pushChangePasswordToQueueSpy).toHaveBeenCalledWith( + ["cipher-id-2", "cipher-id-3"], + "example.com", + data?.newPassword, + sender.tab, + ); + }); + + it("adds a change password message to the queue with current password, if there is a current password, but no new password", async () => { + const data: ModifyLoginCipherFormData = { + ...mockModifyLoginCipherFormData, + uri: "https://example.com", + password: "newPasswordUpdatedElsewhere", + newPassword: null, + }; + activeAccountStatusMock$.next(AuthenticationStatus.Unlocked); + getAllDecryptedForUrlSpy.mockResolvedValueOnce([ + mock({ + id: "cipher-id-1", + login: { password: "currentPassword" }, + }), + ]); + await notificationBackground.triggerChangedPasswordNotification(data, tab); + + expect(pushChangePasswordToQueueSpy).toHaveBeenCalledWith( + ["cipher-id-1"], + "example.com", + data?.password, + sender.tab, + ); + }); + + it("adds a change password message to the queue with new password, if new password is provided", async () => { + const data: ModifyLoginCipherFormData = { + ...mockModifyLoginCipherFormData, + uri: "https://example.com", + password: "password2", + newPassword: "password3", + }; + activeAccountStatusMock$.next(AuthenticationStatus.Unlocked); + getAllDecryptedForUrlSpy.mockResolvedValueOnce([ + mock({ + id: "cipher-id-1", + login: { password: "password1" }, + }), + mock({ + id: "cipher-id-4", + login: { password: "password4" }, + }), + ]); + await notificationBackground.triggerChangedPasswordNotification(data, tab); + + expect(pushChangePasswordToQueueSpy).toHaveBeenCalledWith( + ["cipher-id-1", "cipher-id-4"], + "example.com", + data?.newPassword, + sender.tab, + ); + }); + + it("adds a change password message to the queue if the user has a locked account", async () => { + const data: ModifyLoginCipherFormData = { + ...mockModifyLoginCipherFormData, + uri: "https://example.com", + }; + activeAccountStatusMock$.next(AuthenticationStatus.Locked); - sendMockExtensionMessage(message, sender); - await flushPromises(); + await notificationBackground.triggerChangedPasswordNotification(data, tab); expect(pushChangePasswordToQueueSpy).toHaveBeenCalledWith( null, "example.com", - message.data?.newPassword, + data?.newPassword, sender.tab, true, ); }); - it("skips adding a change password message to the queue if the multiple ciphers exist for the passed URL and the current password is not found within the list of ciphers", async () => { - const message: NotificationBackgroundExtensionMessage = { - command: "bgTriggerChangedPasswordNotification", - data: { - newPassword: "newPassword", - currentPassword: "currentPassword", - url: "https://example.com", - }, + it("doesn't add a password if there is no current or new password", async () => { + const data: ModifyLoginCipherFormData = { + ...mockModifyLoginCipherFormData, + uri: "https://example.com", + password: null, + newPassword: null, }; activeAccountStatusMock$.next(AuthenticationStatus.Unlocked); getAllDecryptedForUrlSpy.mockResolvedValueOnce([ mock({ login: { username: "test", password: "password" } }), ]); - - sendMockExtensionMessage(message, sender); - await flushPromises(); - - expect(getAllDecryptedForUrlSpy).toHaveBeenCalled(); - expect(pushChangePasswordToQueueSpy).not.toHaveBeenCalled(); - }); - - it("skips adding a change password message if more than one existing cipher is found with a matching password ", async () => { - const message: NotificationBackgroundExtensionMessage = { - command: "bgTriggerChangedPasswordNotification", - data: { - newPassword: "newPassword", - currentPassword: "currentPassword", - url: "https://example.com", - }, - }; - activeAccountStatusMock$.next(AuthenticationStatus.Unlocked); - getAllDecryptedForUrlSpy.mockResolvedValueOnce([ - mock({ login: { username: "test", password: "password" } }), - mock({ login: { username: "test2", password: "password" } }), - ]); - - sendMockExtensionMessage(message, sender); - await flushPromises(); + await notificationBackground.triggerChangedPasswordNotification(data, tab); expect(getAllDecryptedForUrlSpy).toHaveBeenCalled(); expect(pushChangePasswordToQueueSpy).not.toHaveBeenCalled(); }); it("adds a change password message to the queue if a single cipher matches the passed current password", async () => { - const message: NotificationBackgroundExtensionMessage = { - command: "bgTriggerChangedPasswordNotification", - data: { - newPassword: "newPassword", - currentPassword: "currentPassword", - url: "https://example.com", - }, + const data: ModifyLoginCipherFormData = { + ...mockModifyLoginCipherFormData, + uri: "https://example.com", }; activeAccountStatusMock$.next(AuthenticationStatus.Unlocked); getAllDecryptedForUrlSpy.mockResolvedValueOnce([ @@ -584,45 +621,49 @@ describe("NotificationBackground", () => { }), ]); - sendMockExtensionMessage(message, sender); - await flushPromises(); + await notificationBackground.triggerChangedPasswordNotification(data, tab); expect(pushChangePasswordToQueueSpy).toHaveBeenCalledWith( - "cipher-id", + ["cipher-id"], "example.com", - message.data?.newPassword, + data?.newPassword, sender.tab, ); }); - it("skips adding a change password message if no current password is passed in the message and more than one cipher is found for a url", async () => { - const message: NotificationBackgroundExtensionMessage = { - command: "bgTriggerChangedPasswordNotification", - data: { - newPassword: "newPassword", - url: "https://example.com", - }, + it("adds a change password message with all matching ciphers if no current password is passed and more than one cipher is found for a url", async () => { + const data: ModifyLoginCipherFormData = { + ...mockModifyLoginCipherFormData, + uri: "https://example.com", + password: null, }; activeAccountStatusMock$.next(AuthenticationStatus.Unlocked); getAllDecryptedForUrlSpy.mockResolvedValueOnce([ - mock({ login: { username: "test", password: "password" } }), - mock({ login: { username: "test2", password: "password" } }), + mock({ + id: "cipher-id-1", + login: { username: "test", password: "password" }, + }), + mock({ + id: "cipher-id-2", + login: { username: "test2", password: "password" }, + }), ]); - sendMockExtensionMessage(message, sender); - await flushPromises(); + await notificationBackground.triggerChangedPasswordNotification(data, tab); - expect(getAllDecryptedForUrlSpy).toHaveBeenCalled(); - expect(pushChangePasswordToQueueSpy).not.toHaveBeenCalled(); + expect(pushChangePasswordToQueueSpy).toHaveBeenCalledWith( + ["cipher-id-1", "cipher-id-2"], + "example.com", + data?.newPassword, + sender.tab, + ); }); it("adds a change password message to the queue if no current password is passed with the message, but a single cipher is matched for the uri", async () => { - const message: NotificationBackgroundExtensionMessage = { - command: "bgTriggerChangedPasswordNotification", - data: { - newPassword: "newPassword", - url: "https://example.com", - }, + const data: ModifyLoginCipherFormData = { + ...mockModifyLoginCipherFormData, + uri: "https://example.com", + password: null, }; activeAccountStatusMock$.next(AuthenticationStatus.Unlocked); getAllDecryptedForUrlSpy.mockResolvedValueOnce([ @@ -632,13 +673,12 @@ describe("NotificationBackground", () => { }), ]); - sendMockExtensionMessage(message, sender); - await flushPromises(); + await notificationBackground.triggerChangedPasswordNotification(data, tab); expect(pushChangePasswordToQueueSpy).toHaveBeenCalledWith( - "cipher-id", + ["cipher-id"], "example.com", - message.data?.newPassword, + data?.newPassword, sender.tab, ); }); @@ -786,7 +826,7 @@ describe("NotificationBackground", () => { notificationBackground["notificationQueue"] = [ mock({ tab, - type: NotificationQueueMessageType.UnlockVault, + type: NotificationType.UnlockVault, }), ]; @@ -808,7 +848,7 @@ describe("NotificationBackground", () => { }; notificationBackground["notificationQueue"] = [ mock({ - type: NotificationQueueMessageType.AddLogin, + type: NotificationType.AddLogin, tab, domain: "another.com", }), @@ -828,11 +868,11 @@ describe("NotificationBackground", () => { edit: false, folder: "folder-id", }; - const queueMessage = mock({ - type: NotificationQueueMessageType.ChangePassword, + const queueMessage = mock({ + type: NotificationType.ChangePassword, tab, domain: "example.com", - newPassword: "newPassword", + data: { newPassword: "newPassword" }, }); notificationBackground["notificationQueue"] = [queueMessage]; const cipherView = mock({ @@ -842,6 +882,7 @@ describe("NotificationBackground", () => { reprompt: CipherRepromptType.None, }); getDecryptedCipherByIdSpy.mockResolvedValueOnce(cipherView); + taskService.tasksEnabled$.mockImplementation(() => of(false)); sendMockExtensionMessage(message, sender); await flushPromises(); @@ -850,7 +891,7 @@ describe("NotificationBackground", () => { expect(createWithServerSpy).not.toHaveBeenCalled(); expect(updatePasswordSpy).toHaveBeenCalledWith( cipherView, - queueMessage.newPassword, + queueMessage.data.newPassword, message.edit, sender.tab, "testId", @@ -876,11 +917,11 @@ describe("NotificationBackground", () => { edit: false, folder: "folder-id", }; - const queueMessage = mock({ - type: NotificationQueueMessageType.ChangePassword, + const queueMessage = mock({ + type: NotificationType.ChangePassword, tab, domain: "example.com", - newPassword: "newPassword", + data: { newPassword: "newPassword" }, }); notificationBackground["notificationQueue"] = [queueMessage]; const cipherView = mock({ @@ -890,7 +931,7 @@ describe("NotificationBackground", () => { reprompt: CipherRepromptType.Password, }); getDecryptedCipherByIdSpy.mockResolvedValueOnce(cipherView); - + taskService.tasksEnabled$.mockImplementation(() => of(false)); sendMockExtensionMessage(message, sender); await flushPromises(); @@ -899,7 +940,7 @@ describe("NotificationBackground", () => { expect(createWithServerSpy).not.toHaveBeenCalled(); expect(updatePasswordSpy).toHaveBeenCalledWith( cipherView, - queueMessage.newPassword, + queueMessage.data.newPassword, message.edit, sender.tab, "testId", @@ -938,9 +979,6 @@ describe("NotificationBackground", () => { taskService.pendingTasks$.mockImplementation(() => of([mockSecurityTask, mockSecurityTask2]), ); - jest - .spyOn(notificationBackground as any, "getNotificationFlag") - .mockResolvedValueOnce(true); jest.spyOn(notificationBackground as any, "getOrgData").mockResolvedValueOnce([ { id: mockOrgId, @@ -956,11 +994,11 @@ describe("NotificationBackground", () => { edit: false, folder: "folder-id", }; - const queueMessage = mock({ - type: NotificationQueueMessageType.ChangePassword, + const queueMessage = mock({ + type: NotificationType.ChangePassword, tab, domain: "example.com", - newPassword: "newPassword", + data: { newPassword: "newPassword" }, }); notificationBackground["notificationQueue"] = [queueMessage]; const cipherView = mock({ @@ -978,7 +1016,7 @@ describe("NotificationBackground", () => { expect(createWithServerSpy).not.toHaveBeenCalled(); expect(updatePasswordSpy).toHaveBeenCalledWith( cipherView, - queueMessage.newPassword, + queueMessage.data.newPassword, message.edit, sender.tab, mockCipherId, @@ -1008,7 +1046,7 @@ describe("NotificationBackground", () => { folder: "folder-id", }; const queueMessage = mock({ - type: NotificationQueueMessageType.AddLogin, + type: NotificationType.AddLogin, tab, domain: "example.com", username: "test", @@ -1043,11 +1081,11 @@ describe("NotificationBackground", () => { edit: true, folder: "folder-id", }; - const queueMessage = mock({ - type: NotificationQueueMessageType.ChangePassword, + const queueMessage = mock({ + type: NotificationType.ChangePassword, tab, domain: "example.com", - newPassword: "newPassword", + data: { newPassword: "newPassword" }, }); notificationBackground["notificationQueue"] = [queueMessage]; const cipherView = mock(); @@ -1060,7 +1098,7 @@ describe("NotificationBackground", () => { expect(updatePasswordSpy).toHaveBeenCalledWith( cipherView, - queueMessage.newPassword, + queueMessage.data.newPassword, message.edit, sender.tab, "testId", @@ -1095,7 +1133,7 @@ describe("NotificationBackground", () => { folder: "folder-id", }; const queueMessage = mock({ - type: NotificationQueueMessageType.AddLogin, + type: NotificationType.AddLogin, tab, domain: "example.com", username: "test", @@ -1134,7 +1172,7 @@ describe("NotificationBackground", () => { folder: "folder-id", }; const queueMessage = mock({ - type: NotificationQueueMessageType.AddLogin, + type: NotificationType.AddLogin, tab, domain: "example.com", username: "test", @@ -1187,7 +1225,7 @@ describe("NotificationBackground", () => { folder: "folder-id", }; const queueMessage = mock({ - type: NotificationQueueMessageType.AddLogin, + type: NotificationType.AddLogin, tab, domain: "example.com", username: "test", @@ -1238,11 +1276,11 @@ describe("NotificationBackground", () => { edit: false, folder: "folder-id", }; - const queueMessage = mock({ - type: NotificationQueueMessageType.ChangePassword, + const queueMessage = mock({ + type: NotificationType.ChangePassword, tab, domain: "example.com", - newPassword: "newPassword", + data: { newPassword: "newPassword" }, }); notificationBackground["notificationQueue"] = [queueMessage]; const cipherView = mock({ reprompt: CipherRepromptType.None }); @@ -1298,7 +1336,7 @@ describe("NotificationBackground", () => { const sender = mock({ tab }); const message: NotificationBackgroundExtensionMessage = { command: "bgNeverSave" }; notificationBackground["notificationQueue"] = [ - mock({ type: NotificationQueueMessageType.UnlockVault, tab }), + mock({ type: NotificationType.UnlockVault, tab }), ]; sendMockExtensionMessage(message, sender); @@ -1314,7 +1352,7 @@ describe("NotificationBackground", () => { const sender = mock({ tab: secondaryTab }); notificationBackground["notificationQueue"] = [ mock({ - type: NotificationQueueMessageType.AddLogin, + type: NotificationType.AddLogin, tab, domain: "another.com", }), @@ -1331,12 +1369,12 @@ describe("NotificationBackground", () => { const sender = mock({ tab }); const message: NotificationBackgroundExtensionMessage = { command: "bgNeverSave" }; const firstNotification = mock({ - type: NotificationQueueMessageType.AddLogin, + type: NotificationType.AddLogin, tab, domain: "example.com", }); const secondNotification = mock({ - type: NotificationQueueMessageType.AddLogin, + type: NotificationType.AddLogin, tab: createChromeTabMock({ id: 3 }), domain: "another.com", }); @@ -1397,74 +1435,6 @@ describe("NotificationBackground", () => { }); }); - describe("bgUnlockPopoutOpened message handler", () => { - let pushUnlockVaultToQueueSpy: jest.SpyInstance; - - beforeEach(() => { - pushUnlockVaultToQueueSpy = jest.spyOn( - notificationBackground as any, - "pushUnlockVaultToQueue", - ); - }); - - it("skips pushing the unlock vault message to the queue if the message indicates that the notification should be skipped", async () => { - const tabMock = createChromeTabMock(); - const sender = mock({ tab: tabMock }); - const message: NotificationBackgroundExtensionMessage = { - command: "bgUnlockPopoutOpened", - data: { skipNotification: true }, - }; - - sendMockExtensionMessage(message, sender); - await flushPromises(); - - expect(pushUnlockVaultToQueueSpy).not.toHaveBeenCalled(); - }); - - it("skips pushing the unlock vault message to the queue if the auth status is not `Locked`", async () => { - const tabMock = createChromeTabMock(); - const sender = mock({ tab: tabMock }); - const message: NotificationBackgroundExtensionMessage = { - command: "bgUnlockPopoutOpened", - }; - activeAccountStatusMock$.next(AuthenticationStatus.LoggedOut); - - sendMockExtensionMessage(message, sender); - await flushPromises(); - - expect(pushUnlockVaultToQueueSpy).not.toHaveBeenCalled(); - }); - - it("skips pushing the unlock vault message to the queue if the notification queue already has an item", async () => { - const tabMock = createChromeTabMock(); - const sender = mock({ tab: tabMock }); - const message: NotificationBackgroundExtensionMessage = { - command: "bgUnlockPopoutOpened", - }; - activeAccountStatusMock$.next(AuthenticationStatus.Locked); - notificationBackground["notificationQueue"] = [mock()]; - - sendMockExtensionMessage(message, sender); - await flushPromises(); - - expect(pushUnlockVaultToQueueSpy).not.toHaveBeenCalled(); - }); - - it("sends an unlock vault message to the queue if the user has a locked vault", async () => { - const tabMock = createChromeTabMock({ url: "https://example.com" }); - const sender = mock({ tab: tabMock }); - const message: NotificationBackgroundExtensionMessage = { - command: "bgUnlockPopoutOpened", - }; - activeAccountStatusMock$.next(AuthenticationStatus.Locked); - - sendMockExtensionMessage(message, sender); - await flushPromises(); - - expect(pushUnlockVaultToQueueSpy).toHaveBeenCalledWith("example.com", sender.tab); - }); - }); - describe("checkNotificationQueue", () => { let doNotificationQueueCheckSpy: jest.SpyInstance; let getTabFromCurrentWindowSpy: jest.SpyInstance; diff --git a/apps/browser/src/autofill/background/notification.background.ts b/apps/browser/src/autofill/background/notification.background.ts index 65c1ca0277f..e27b50f13cd 100644 --- a/apps/browser/src/autofill/background/notification.background.ts +++ b/apps/browser/src/autofill/background/notification.background.ts @@ -22,7 +22,6 @@ import { import { DomainSettingsService } from "@bitwarden/common/autofill/services/domain-settings.service"; import { UserNotificationSettingsServiceAbstraction } from "@bitwarden/common/autofill/services/user-notification-settings.service"; import { ProductTierType } from "@bitwarden/common/billing/enums/product-tier-type.enum"; -import { FeatureFlag } from "@bitwarden/common/enums/feature-flag.enum"; import { NeverDomains } from "@bitwarden/common/models/domain/domain-service"; import { ConfigService } from "@bitwarden/common/platform/abstractions/config/config.service"; import { ServerConfig } from "@bitwarden/common/platform/abstractions/config/server-config"; @@ -41,7 +40,7 @@ import { CipherView } from "@bitwarden/common/vault/models/view/cipher.view"; import { LoginUriView } from "@bitwarden/common/vault/models/view/login-uri.view"; import { LoginView } from "@bitwarden/common/vault/models/view/login.view"; import { TaskService } from "@bitwarden/common/vault/tasks"; -import { SecurityTaskType } from "@bitwarden/common/vault/tasks/enums"; +import { SecurityTaskStatus, SecurityTaskType } from "@bitwarden/common/vault/tasks/enums"; import { SecurityTask } from "@bitwarden/common/vault/tasks/models/security-task"; // FIXME (PM-22628): Popup imports are forbidden in background @@ -60,22 +59,24 @@ import { NotificationCipherData, } from "../content/components/cipher/types"; import { CollectionView } from "../content/components/common-types"; -import { NotificationQueueMessageType } from "../enums/notification-queue-message-type.enum"; +import { NotificationType } from "../enums/notification-type.enum"; import { AutofillService } from "../services/abstractions/autofill.service"; import { TemporaryNotificationChangeLoginService } from "../services/notification-change-login-password.service"; import { - AddChangePasswordQueueMessage, + AddChangePasswordNotificationQueueMessage, AddLoginQueueMessage, - AddUnlockVaultQueueMessage, - ChangePasswordMessageData, AddLoginMessageData, NotificationQueueMessageItem, LockedVaultPendingNotificationsData, NotificationBackgroundExtensionMessage, NotificationBackgroundExtensionMessageHandlers, } from "./abstractions/notification.background"; -import { NotificationTypeData } from "./abstractions/overlay-notifications.background"; +import { + LoginSecurityTaskInfo, + ModifyLoginCipherFormData, + NotificationTypeData, +} from "./abstractions/overlay-notifications.background"; import { OverlayBackgroundExtensionMessage } from "./abstractions/overlay.background"; export default class NotificationBackground { @@ -91,12 +92,6 @@ export default class NotificationBackground { private readonly extensionMessageHandlers: NotificationBackgroundExtensionMessageHandlers = { bgAdjustNotificationBar: ({ message, sender }) => this.handleAdjustNotificationBarMessage(message, sender), - bgTriggerAddLoginNotification: ({ message, sender }) => - this.triggerAddLoginNotification(message, sender), - bgTriggerChangedPasswordNotification: ({ message, sender }) => - this.triggerChangedPasswordNotification(message, sender), - bgTriggerAtRiskPasswordNotification: ({ message, sender }) => - this.triggerAtRiskPasswordNotification(message, sender), bgCloseNotificationBar: ({ message, sender }) => this.handleCloseNotificationBarMessage(message, sender), bgOpenAtRiskPasswords: ({ message, sender }) => @@ -119,12 +114,10 @@ export default class NotificationBackground { bgSaveCipher: ({ message, sender }) => this.handleSaveCipherMessage(message, sender), bgHandleReprompt: ({ message, sender }: any) => this.handleCipherUpdateRepromptResponse(message), - bgUnlockPopoutOpened: ({ message, sender }) => this.unlockVault(message, sender.tab), checkNotificationQueue: ({ sender }) => this.checkNotificationQueue(sender.tab), collectPageDetailsResponse: ({ message }) => this.handleCollectPageDetailsResponseMessage(message), getWebVaultUrlForNotification: () => this.getWebVaultUrl(), - notificationRefreshFlagValue: () => this.getNotificationFlag(), unlockCompleted: ({ message, sender }) => this.handleUnlockCompleted(message, sender), }; @@ -211,18 +204,35 @@ export default class NotificationBackground { organizations.find((org) => org.id === orgId)?.productTierType; const cipherQueueMessage = this.notificationQueue.find( - (message): message is AddChangePasswordQueueMessage | AddLoginQueueMessage => - message.type === NotificationQueueMessageType.ChangePassword || - message.type === NotificationQueueMessageType.AddLogin, + (message): message is AddChangePasswordNotificationQueueMessage | AddLoginQueueMessage => + message.type === NotificationType.ChangePassword || + message.type === NotificationType.AddLogin, ); if (cipherQueueMessage) { - const cipherView = - cipherQueueMessage.type === NotificationQueueMessageType.ChangePassword - ? await this.getDecryptedCipherById(cipherQueueMessage.cipherId, activeUserId) - : this.convertAddLoginQueueMessageToCipherView(cipherQueueMessage); + let cipherView: CipherView; + if (cipherQueueMessage.type === NotificationType.ChangePassword) { + const { + data: { cipherIds }, + } = cipherQueueMessage; + const cipherViews = await this.cipherService.getAllDecrypted(activeUserId); + return cipherViews + .filter((cipher) => cipherIds.includes(cipher.id)) + .map((cipherView) => { + const organizationType = getOrganizationType(cipherView.organizationId); + return this.convertToNotificationCipherData( + cipherView, + iconsServerUrl, + showFavicons, + organizationType, + ); + }); + } else { + cipherView = this.convertAddLoginQueueMessageToCipherView(cipherQueueMessage); + } const organizationType = getOrganizationType(cipherView.organizationId); + return [ this.convertToNotificationCipherData( cipherView, @@ -286,6 +296,62 @@ export default class NotificationBackground { }; } + /** + * If there is a security task for this cipher at login, return the task, cipher view, and uri. + * + * @param modifyLoginData - The modified login form data + * @param activeUserId - The currently logged in user ID + */ + private async getSecurityTaskAndCipherForLoginData( + modifyLoginData: ModifyLoginCipherFormData, + activeUserId: UserId, + ): Promise { + const tasks: SecurityTask[] = await this.getSecurityTasks(activeUserId); + if (!tasks?.length) { + return null; + } + + const urlCiphers: CipherView[] = await this.cipherService.getAllDecryptedForUrl( + modifyLoginData.uri, + activeUserId, + ); + if (!urlCiphers?.length) { + return null; + } + + const securityTaskForLogin = urlCiphers.reduce( + (taskInfo: LoginSecurityTaskInfo | null, cipher: CipherView) => { + if ( + // exit early if info was found already + taskInfo || + // exit early if the cipher was deleted + cipher.deletedDate || + // exit early if the entered login info doesn't match an existing cipher + modifyLoginData.username !== cipher.login.username || + modifyLoginData.password !== cipher.login.password + ) { + return taskInfo; + } + + // Find the first security task for the cipherId belonging to the entered login + const cipherSecurityTask = tasks.find( + ({ cipherId, status }) => + cipher.id === cipherId && // match security task cipher id to url cipher id + status === SecurityTaskStatus.Pending, // security task has not been completed + ); + + if (cipherSecurityTask) { + return { securityTask: cipherSecurityTask, cipher, uri: modifyLoginData.uri }; + } + + return taskInfo; + }, + null, + ); + + return securityTaskForLogin; + } + /** * Gets the active user server config from the config service. */ @@ -294,14 +360,9 @@ export default class NotificationBackground { } /** - * Gets the current value of the notification refresh feature flag - * @returns Promise indicating if the feature is enabled + * Gets the current authentication status of the user. + * @returns Promise - The current authentication status of the user. */ - async getNotificationFlag(): Promise { - const flagValue = await this.configService.getFeatureFlag(FeatureFlag.NotificationRefresh); - return flagValue; - } - private async getAuthStatus() { return await firstValueFrom(this.authService.activeAccountStatus$); } @@ -367,7 +428,7 @@ export default class NotificationBackground { }; switch (notificationType) { - case NotificationQueueMessageType.AddLogin: + case NotificationType.AddLogin: typeData.removeIndividualVault = await this.removeIndividualVault(); break; } @@ -400,11 +461,27 @@ export default class NotificationBackground { * @param sender - The contextual sender of the message */ async triggerAtRiskPasswordNotification( - message: NotificationBackgroundExtensionMessage, - sender: chrome.runtime.MessageSender, + data: ModifyLoginCipherFormData, + tab: chrome.tabs.Tab, ): Promise { - const { activeUserId, securityTask, cipher } = message.data; - const domain = Utils.getDomain(sender.tab.url); + const activeUserId = await firstValueFrom( + this.accountService.activeAccount$.pipe(getOptionalUserId), + ); + + if (!activeUserId) { + return false; + } + const loginSecurityTaskInfo = await this.getSecurityTaskAndCipherForLoginData( + data, + activeUserId, + ); + + if (!loginSecurityTaskInfo) { + return false; + } + + const { securityTask, cipher } = loginSecurityTaskInfo; + const domain = Utils.getDomain(tab.url); const passwordChangeUri = await new TemporaryNotificationChangeLoginService().getChangePasswordUrl(cipher); @@ -418,20 +495,20 @@ export default class NotificationBackground { .pipe(getOrganizationById(securityTask.organizationId)), ); - this.removeTabFromNotificationQueue(sender.tab); + this.removeTabFromNotificationQueue(tab); const launchTimestamp = new Date().getTime(); const queueMessage: NotificationQueueMessageItem = { domain, wasVaultLocked, - type: NotificationQueueMessageType.AtRiskPassword, + type: NotificationType.AtRiskPassword, passwordChangeUri, organizationName: organization.name, - tab: sender.tab, + tab: tab, launchTimestamp, expires: new Date(launchTimestamp + NOTIFICATION_BAR_LIFESPAN_MS), }; this.notificationQueue.push(queueMessage); - await this.checkNotificationQueue(sender.tab); + await this.checkNotificationQueue(tab); return true; } @@ -444,17 +521,22 @@ export default class NotificationBackground { * @param sender - The contextual sender of the message */ async triggerAddLoginNotification( - message: NotificationBackgroundExtensionMessage, - sender: chrome.runtime.MessageSender, + data: ModifyLoginCipherFormData, + tab: chrome.tabs.Tab, ): Promise { + const login = { + url: data.uri, + username: data.username, + password: data.password || data.newPassword, + }; + const authStatus = await this.getAuthStatus(); if (authStatus === AuthenticationStatus.LoggedOut) { return false; } - const loginInfo = message.login; - const normalizedUsername = loginInfo.username ? loginInfo.username.toLowerCase() : ""; - const loginDomain = Utils.getDomain(loginInfo.url); + const normalizedUsername = login.username ? login.username.toLowerCase() : ""; + const loginDomain = Utils.getDomain(login.url); if (loginDomain == null) { return false; } @@ -463,7 +545,7 @@ export default class NotificationBackground { if (authStatus === AuthenticationStatus.Locked) { if (addLoginIsEnabled) { - await this.pushAddLoginToQueue(loginDomain, loginInfo, sender.tab, true); + await this.pushAddLoginToQueue(loginDomain, login, tab, true); } return false; @@ -476,30 +558,15 @@ export default class NotificationBackground { return false; } - const ciphers = await this.cipherService.getAllDecryptedForUrl(loginInfo.url, activeUserId); + const ciphers = await this.cipherService.getAllDecryptedForUrl(login.url, activeUserId); const usernameMatches = ciphers.filter( (c) => c.login.username != null && c.login.username.toLowerCase() === normalizedUsername, ); if (addLoginIsEnabled && usernameMatches.length === 0) { - await this.pushAddLoginToQueue(loginDomain, loginInfo, sender.tab); + await this.pushAddLoginToQueue(loginDomain, login, tab); return true; } - const changePasswordIsEnabled = await this.getEnableChangedPasswordPrompt(); - - if ( - changePasswordIsEnabled && - usernameMatches.length === 1 && - usernameMatches[0].login.password !== loginInfo.password - ) { - await this.pushChangePasswordToQueue( - usernameMatches[0].id, - loginDomain, - loginInfo.password, - sender.tab, - ); - return true; - } return false; } @@ -513,7 +580,7 @@ export default class NotificationBackground { this.removeTabFromNotificationQueue(tab); const launchTimestamp = new Date().getTime(); const message: AddLoginQueueMessage = { - type: NotificationQueueMessageType.AddLogin, + type: NotificationType.AddLogin, username: loginInfo.username, password: loginInfo.password, domain: loginDomain, @@ -535,49 +602,95 @@ export default class NotificationBackground { * @param sender - The contextual sender of the message */ async triggerChangedPasswordNotification( - message: NotificationBackgroundExtensionMessage, - sender: chrome.runtime.MessageSender, - ) { - const changeData = message.data as ChangePasswordMessageData; - const loginDomain = Utils.getDomain(changeData.url); - if (loginDomain == null) { + data: ModifyLoginCipherFormData, + tab: chrome.tabs.Tab, + ): Promise { + const changePasswordIsEnabled = await this.getEnableChangedPasswordPrompt(); + if (!changePasswordIsEnabled) { return false; } - - if ((await this.getAuthStatus()) < AuthenticationStatus.Unlocked) { - await this.pushChangePasswordToQueue( - null, - loginDomain, - changeData.newPassword, - sender.tab, - true, - ); - return true; + const authStatus = await this.getAuthStatus(); + if (authStatus === AuthenticationStatus.LoggedOut) { + return false; } - - let id: string = null; const activeUserId = await firstValueFrom( this.accountService.activeAccount$.pipe(getOptionalUserId), ); - if (activeUserId == null) { + if (activeUserId === null) { + return false; + } + const loginDomain = Utils.getDomain(data.uri); + if (loginDomain === null) { return false; } - const ciphers = await this.cipherService.getAllDecryptedForUrl(changeData.url, activeUserId); - if (changeData.currentPassword != null) { - const passwordMatches = ciphers.filter( - (c) => c.login.password === changeData.currentPassword, - ); - if (passwordMatches.length === 1) { - id = passwordMatches[0].id; - } - } else if (ciphers.length === 1) { - id = ciphers[0].id; - } - if (id != null) { - await this.pushChangePasswordToQueue(id, loginDomain, changeData.newPassword, sender.tab); + const username: string | null = data.username || null; + const currentPassword = data.password || null; + const newPassword = data.newPassword || null; + + if (authStatus === AuthenticationStatus.Locked && newPassword !== null) { + await this.pushChangePasswordToQueue(null, loginDomain, newPassword, tab, true); return true; } + + let ciphers: CipherView[] = await this.cipherService.getAllDecryptedForUrl( + data.uri, + activeUserId, + ); + + const normalizedUsername: string = username ? username.toLowerCase() : ""; + + const shouldMatchUsername = typeof username === "string" && username.length > 0; + + if (shouldMatchUsername) { + // Presence of a username should filter ciphers further. + ciphers = ciphers.filter( + (cipher) => + cipher.login.username !== null && + cipher.login.username.toLowerCase() === normalizedUsername, + ); + } + + if (ciphers.length === 1) { + const [cipher] = ciphers; + if ( + username !== null && + newPassword === null && + cipher.login.username === normalizedUsername && + cipher.login.password === currentPassword + ) { + // Assumed to be a login + return false; + } + } + + if (currentPassword && !newPassword) { + // Only use current password for change if no new password present. + if (ciphers.length > 0) { + await this.pushChangePasswordToQueue( + ciphers.map((cipher) => cipher.id), + loginDomain, + currentPassword, + tab, + ); + return true; + } + } + + if (newPassword) { + // Otherwise include all known ciphers. + if (ciphers.length > 0) { + await this.pushChangePasswordToQueue( + ciphers.map((cipher) => cipher.id), + loginDomain, + newPassword, + tab, + ); + + return true; + } + } + return false; } @@ -601,36 +714,8 @@ export default class NotificationBackground { }); } - /** - * Sets up a notification to unlock the vault when the user - * attempts to autofill a cipher while the vault is locked. - * - * @param message - Extension message, determines if the notification should be skipped - * @param tab - The tab that the message was sent from - */ - private async unlockVault(message: NotificationBackgroundExtensionMessage, tab: chrome.tabs.Tab) { - const notificationRefreshFlagEnabled = await this.getNotificationFlag(); - if (message.data?.skipNotification) { - return; - } - - if (notificationRefreshFlagEnabled) { - return; - } - - const currentAuthStatus = await this.getAuthStatus(); - if (currentAuthStatus !== AuthenticationStatus.Locked || this.notificationQueue.length) { - return; - } - - const loginDomain = Utils.getDomain(tab.url); - if (loginDomain) { - await this.pushUnlockVaultToQueue(loginDomain, tab); - } - } - private async pushChangePasswordToQueue( - cipherId: string, + cipherIds: CipherView["id"][], loginDomain: string, newPassword: string, tab: chrome.tabs.Tab, @@ -639,10 +724,9 @@ export default class NotificationBackground { // remove any old messages for this tab this.removeTabFromNotificationQueue(tab); const launchTimestamp = new Date().getTime(); - const message: AddChangePasswordQueueMessage = { - type: NotificationQueueMessageType.ChangePassword, - cipherId: cipherId, - newPassword: newPassword, + const message: AddChangePasswordNotificationQueueMessage = { + type: NotificationType.ChangePassword, + data: { cipherIds: cipherIds, newPassword: newPassword }, domain: loginDomain, tab: tab, launchTimestamp, @@ -653,20 +737,6 @@ export default class NotificationBackground { await this.checkNotificationQueue(tab); } - private async pushUnlockVaultToQueue(loginDomain: string, tab: chrome.tabs.Tab) { - this.removeTabFromNotificationQueue(tab); - const launchTimestamp = new Date().getTime(); - const message: AddUnlockVaultQueueMessage = { - type: NotificationQueueMessageType.UnlockVault, - domain: loginDomain, - tab: tab, - launchTimestamp, - expires: new Date(launchTimestamp + 0.5 * 60000), // 30 seconds - wasVaultLocked: true, - }; - await this.sendNotificationQueueMessage(tab, message); - } - /** * Saves a cipher based on the message sent from the notification bar. If the vault * is locked, the message will be added to the notification queue and the unlock @@ -695,12 +765,12 @@ export default class NotificationBackground { return; } - await this.saveOrUpdateCredentials(sender.tab, message.edit, message.folder); + await this.saveOrUpdateCredentials(sender.tab, message.cipherId, message.edit, message.folder); } async handleCipherUpdateRepromptResponse(message: NotificationBackgroundExtensionMessage) { if (message.success) { - await this.saveOrUpdateCredentials(message.tab, false, undefined, true); + await this.saveOrUpdateCredentials(message.tab, message.cipherId, false, undefined, true); } else { await BrowserApi.tabSendMessageData(message.tab, "saveCipherAttemptCompleted", { error: "Password reprompt failed", @@ -719,6 +789,7 @@ export default class NotificationBackground { */ private async saveOrUpdateCredentials( tab: chrome.tabs.Tab, + cipherId: CipherView["id"], edit: boolean, folderId?: string, skipReprompt: boolean = false, @@ -727,8 +798,8 @@ export default class NotificationBackground { const queueMessage = this.notificationQueue[i]; if ( queueMessage.tab.id !== tab.id || - (queueMessage.type !== NotificationQueueMessageType.AddLogin && - queueMessage.type !== NotificationQueueMessageType.ChangePassword) + (queueMessage.type !== NotificationType.AddLogin && + queueMessage.type !== NotificationType.ChangePassword) ) { continue; } @@ -741,17 +812,13 @@ export default class NotificationBackground { this.accountService.activeAccount$.pipe(getOptionalUserId), ); - if (queueMessage.type === NotificationQueueMessageType.ChangePassword) { - const cipherView = await this.getDecryptedCipherById(queueMessage.cipherId, activeUserId); + if (queueMessage.type === NotificationType.ChangePassword) { + const { + data: { newPassword }, + } = queueMessage; + const cipherView = await this.getDecryptedCipherById(cipherId, activeUserId); - await this.updatePassword( - cipherView, - queueMessage.newPassword, - edit, - tab, - activeUserId, - skipReprompt, - ); + await this.updatePassword(cipherView, newPassword, edit, tab, activeUserId, skipReprompt); return; } @@ -829,12 +896,11 @@ export default class NotificationBackground { } const cipher = await this.cipherService.encrypt(cipherView, userId); - const shouldGetTasks = await this.getNotificationFlag(); try { if (!cipherView.edit) { throw new Error("You do not have permission to edit this cipher."); } - const tasks = shouldGetTasks ? await this.getSecurityTasks(userId) : []; + const tasks = await this.getSecurityTasks(userId); const updatedCipherTask = tasks.find((task) => task.cipherId === cipherView?.id); const cipherHasTask = !!updatedCipherTask?.id; @@ -916,7 +982,7 @@ export default class NotificationBackground { const queueItem = this.notificationQueue.find((item) => item.tab.id === senderTab.id); - if (queueItem?.type === NotificationQueueMessageType.AddLogin) { + if (queueItem?.type === NotificationType.AddLogin) { const cipherView = this.convertAddLoginQueueMessageToCipherView(queueItem); cipherView.organizationId = organizationId; cipherView.folderId = folder; @@ -998,10 +1064,7 @@ export default class NotificationBackground { private async saveNever(tab: chrome.tabs.Tab) { for (let i = this.notificationQueue.length - 1; i >= 0; i--) { const queueMessage = this.notificationQueue[i]; - if ( - queueMessage.tab.id !== tab.id || - queueMessage.type !== NotificationQueueMessageType.AddLogin - ) { + if (queueMessage.tab.id !== tab.id || queueMessage.type !== NotificationType.AddLogin) { continue; } @@ -1030,18 +1093,23 @@ export default class NotificationBackground { private async getCollectionData( message: NotificationBackgroundExtensionMessage, ): Promise { - const collections = (await this.collectionService.getAllDecrypted()).reduce( - (acc, collection) => { - if (collection.organizationId === message?.orgId) { - acc.push({ - id: collection.id, - name: collection.name, - organizationId: collection.organizationId, - }); - } - return acc; - }, - [], + const collections = await firstValueFrom( + this.accountService.activeAccount$.pipe( + getUserId, + switchMap((userId) => this.collectionService.decryptedCollections$(userId)), + map((collections) => + collections.reduce((acc, collection) => { + if (collection.organizationId === message?.orgId) { + acc.push({ + id: collection.id, + name: collection.name, + organizationId: collection.organizationId, + }); + } + return acc; + }, []), + ), + ), ); return collections; } @@ -1203,7 +1271,6 @@ export default class NotificationBackground { cipherView.folderId = folderId; cipherView.type = CipherType.Login; cipherView.login = loginView; - cipherView.organizationId = null; return cipherView; } diff --git a/apps/browser/src/autofill/background/overlay-notifications.background.spec.ts b/apps/browser/src/autofill/background/overlay-notifications.background.spec.ts index 00114330bc4..c596a1ba774 100644 --- a/apps/browser/src/autofill/background/overlay-notifications.background.spec.ts +++ b/apps/browser/src/autofill/background/overlay-notifications.background.spec.ts @@ -1,12 +1,9 @@ import { mock, MockProxy } from "jest-mock-extended"; -import { AccountService } from "@bitwarden/common/auth/abstractions/account.service"; import { CLEAR_NOTIFICATION_LOGIN_DATA_DURATION } from "@bitwarden/common/autofill/constants"; import { ServerConfig } from "@bitwarden/common/platform/abstractions/config/server-config"; import { LogService } from "@bitwarden/common/platform/abstractions/log.service"; import { EnvironmentServerConfigData } from "@bitwarden/common/platform/models/data/server-config.data"; -import { CipherService } from "@bitwarden/common/vault/abstractions/cipher.service"; -import { TaskService } from "@bitwarden/common/vault/tasks"; import { BrowserApi } from "../../platform/browser/browser-api"; import AutofillField from "../models/autofill-field"; @@ -27,9 +24,6 @@ import { OverlayNotificationsBackground } from "./overlay-notifications.backgrou describe("OverlayNotificationsBackground", () => { let logService: MockProxy; let notificationBackground: NotificationBackground; - let taskService: TaskService; - let accountService: AccountService; - let cipherService: CipherService; let getEnableChangedPasswordPromptSpy: jest.SpyInstance; let getEnableAddedLoginPromptSpy: jest.SpyInstance; let overlayNotificationsBackground: OverlayNotificationsBackground; @@ -38,9 +32,6 @@ describe("OverlayNotificationsBackground", () => { jest.useFakeTimers(); logService = mock(); notificationBackground = mock(); - taskService = mock(); - accountService = mock(); - cipherService = mock(); getEnableChangedPasswordPromptSpy = jest .spyOn(notificationBackground, "getEnableChangedPasswordPrompt") .mockResolvedValue(true); @@ -50,9 +41,6 @@ describe("OverlayNotificationsBackground", () => { overlayNotificationsBackground = new OverlayNotificationsBackground( logService, notificationBackground, - taskService, - accountService, - cipherService, ); await overlayNotificationsBackground.init(); }); @@ -397,7 +385,7 @@ describe("OverlayNotificationsBackground", () => { it("ignores requests that are not part of an active form submission", async () => { triggerWebRequestOnCompletedEvent( - mock({ + mock({ url: sender.url, tabId: sender.tab.id, requestId: "123345", @@ -421,7 +409,7 @@ describe("OverlayNotificationsBackground", () => { await flushPromises(); triggerWebRequestOnCompletedEvent( - mock({ + mock({ url: sender.url, tabId: sender.tab.id, requestId, @@ -450,7 +438,7 @@ describe("OverlayNotificationsBackground", () => { await flushPromises(); triggerWebRequestOnCompletedEvent( - mock({ + mock({ url: sender.url, tabId: sender.tab.id, statusCode: 404, @@ -504,7 +492,7 @@ describe("OverlayNotificationsBackground", () => { ); }); triggerWebRequestOnCompletedEvent( - mock({ + mock({ url: sender.url, tabId: sender.tab.id, requestId, @@ -553,7 +541,7 @@ describe("OverlayNotificationsBackground", () => { }); triggerWebRequestOnCompletedEvent( - mock({ + mock({ url: sender.url, tabId: sender.tab.id, requestId, @@ -655,7 +643,7 @@ describe("OverlayNotificationsBackground", () => { }); it("clears all associated data with a removed tab", () => { - triggerTabOnRemovedEvent(sender.tab.id, mock()); + triggerTabOnRemovedEvent(sender.tab.id, mock()); expect(overlayNotificationsBackground["websiteOriginsWithFields"].size).toBe(0); }); @@ -664,7 +652,7 @@ describe("OverlayNotificationsBackground", () => { it("skips clearing the website origins if the changeInfo does not contain a `loading` status", () => { triggerTabOnUpdatedEvent( sender.tab.id, - mock({ status: "complete" }), + mock({ status: "complete" }), mock({ status: "complete" }), ); @@ -674,7 +662,7 @@ describe("OverlayNotificationsBackground", () => { it("skips clearing the website origins if the changeInfo does not contain a url", () => { triggerTabOnUpdatedEvent( sender.tab.id, - mock({ status: "loading", url: "" }), + mock({ status: "loading", url: "" }), mock({ status: "loading" }), ); @@ -684,7 +672,7 @@ describe("OverlayNotificationsBackground", () => { it("skips clearing the website origins if the tab does not contain known website origins", () => { triggerTabOnUpdatedEvent( 199, - mock({ status: "loading", url: "https://example.com" }), + mock({ status: "loading", url: "https://example.com" }), mock({ status: "loading", id: 199 }), ); @@ -694,7 +682,7 @@ describe("OverlayNotificationsBackground", () => { it("skips clearing the website origins if the changeInfo's url is present as part of the know website origin match patterns", () => { triggerTabOnUpdatedEvent( sender.tab.id, - mock({ + mock({ status: "loading", url: "https://subdomain.example.com", }), @@ -707,7 +695,7 @@ describe("OverlayNotificationsBackground", () => { it("clears all associated data with a tab that is entering a `loading` state", () => { triggerTabOnUpdatedEvent( sender.tab.id, - mock({ status: "loading" }), + mock({ status: "loading" }), mock({ status: "loading" }), ); diff --git a/apps/browser/src/autofill/background/overlay-notifications.background.ts b/apps/browser/src/autofill/background/overlay-notifications.background.ts index 93357113fc4..e08fe540710 100644 --- a/apps/browser/src/autofill/background/overlay-notifications.background.ts +++ b/apps/browser/src/autofill/background/overlay-notifications.background.ts @@ -1,17 +1,12 @@ // FIXME: Update this file to be type safe and remove this and next line // @ts-strict-ignore -import { firstValueFrom, Subject, switchMap, timer } from "rxjs"; +import { Subject, switchMap, timer } from "rxjs"; -import { AccountService } from "@bitwarden/common/auth/abstractions/account.service"; -import { getOptionalUserId } from "@bitwarden/common/auth/services/account.service"; import { CLEAR_NOTIFICATION_LOGIN_DATA_DURATION } from "@bitwarden/common/autofill/constants"; import { LogService } from "@bitwarden/common/platform/abstractions/log.service"; -import { UserId } from "@bitwarden/common/types/guid"; -import { CipherService } from "@bitwarden/common/vault/abstractions/cipher.service"; -import { CipherView } from "@bitwarden/common/vault/models/view/cipher.view"; -import { SecurityTask, SecurityTaskStatus, TaskService } from "@bitwarden/common/vault/tasks"; import { BrowserApi } from "../../platform/browser/browser-api"; +import { NotificationType, NotificationTypes } from "../notification/abstractions/notification-bar"; import { generateDomainMatchPatterns, isInvalidResponseStatusCode } from "../utils"; import { @@ -25,12 +20,6 @@ import { } from "./abstractions/overlay-notifications.background"; import NotificationBackground from "./notification.background"; -type LoginSecurityTaskInfo = { - securityTask: SecurityTask; - cipher: CipherView; - uri: ModifyLoginCipherFormData["uri"]; -}; - export class OverlayNotificationsBackground implements OverlayNotificationsBackgroundInterface { private websiteOriginsWithFields: WebsiteOriginsWithFields = new Map(); private activeFormSubmissionRequests: ActiveFormSubmissionRequests = new Set(); @@ -39,6 +28,8 @@ export class OverlayNotificationsBackground implements OverlayNotificationsBackg private notificationFallbackTimeout: number | NodeJS.Timeout | null; private readonly formSubmissionRequestMethods: Set = new Set(["POST", "PUT", "PATCH"]); private readonly extensionMessageHandlers: OverlayNotificationsExtensionMessageHandlers = { + generatedPasswordFilled: ({ message, sender }) => + this.storeModifiedLoginFormData(message, sender), formFieldSubmitted: ({ message, sender }) => this.storeModifiedLoginFormData(message, sender), collectPageDetailsResponse: ({ message, sender }) => this.handleCollectPageDetailsResponse(message, sender), @@ -47,9 +38,6 @@ export class OverlayNotificationsBackground implements OverlayNotificationsBackg constructor( private logService: LogService, private notificationBackground: NotificationBackground, - private taskService: TaskService, - private accountService: AccountService, - private cipherService: CipherService, ) {} /** @@ -240,7 +228,9 @@ export class OverlayNotificationsBackground implements OverlayNotificationsBackg * * @param details - The details of the web request */ - private handleOnBeforeRequestEvent = (details: chrome.webRequest.WebRequestDetails) => { + private handleOnBeforeRequestEvent = ( + details: chrome.webRequest.OnBeforeRequestDetails, + ): undefined => { if (this.isPostSubmissionFormRedirection(details)) { this.setupNotificationInitTrigger( details.tabId, @@ -274,8 +264,8 @@ export class OverlayNotificationsBackground implements OverlayNotificationsBackg const modifyLoginData = this.modifyLoginCipherFormData.get(tabId); return ( !modifyLoginData || - !this.shouldAttemptAddLoginNotification(modifyLoginData) || - !this.shouldAttemptChangedPasswordNotification(modifyLoginData) + !this.shouldAttemptNotification(modifyLoginData, NotificationTypes.Add) || + !this.shouldAttemptNotification(modifyLoginData, NotificationTypes.Change) ); }; @@ -287,7 +277,7 @@ export class OverlayNotificationsBackground implements OverlayNotificationsBackg * * @param details - The details of the web request */ - private isPostSubmissionFormRedirection = (details: chrome.webRequest.WebRequestDetails) => { + private isPostSubmissionFormRedirection = (details: chrome.webRequest.OnBeforeRequestDetails) => { return ( details.method?.toUpperCase() === "GET" && this.activeFormSubmissionRequests.has(details.requestId) && @@ -301,7 +291,7 @@ export class OverlayNotificationsBackground implements OverlayNotificationsBackg * * @param details - The details of the web request */ - private isValidFormSubmissionRequest = (details: chrome.webRequest.WebRequestDetails) => { + private isValidFormSubmissionRequest = (details: chrome.webRequest.OnBeforeRequestDetails) => { return ( !this.requestHostIsInvalid(details) && this.formSubmissionRequestMethods.has(details.method?.toUpperCase()) @@ -337,7 +327,7 @@ export class OverlayNotificationsBackground implements OverlayNotificationsBackg * * @param details - The details of the web response */ - private handleOnCompletedRequestEvent = async (details: chrome.webRequest.WebResponseDetails) => { + private handleOnCompletedRequestEvent = async (details: chrome.webRequest.OnCompletedDetails) => { if ( this.requestHostIsInvalid(details) || !this.activeFormSubmissionRequests.has(details.requestId) @@ -381,7 +371,7 @@ export class OverlayNotificationsBackground implements OverlayNotificationsBackg return; } - await this.triggerNotificationInit(requestId, modifyLoginData, tab); + await this.processNotifications(requestId, modifyLoginData, tab); }; /** @@ -394,178 +384,93 @@ export class OverlayNotificationsBackground implements OverlayNotificationsBackg * @param modifyLoginData - The modified login form data */ private delayNotificationInitUntilTabIsComplete = async ( - tabId: chrome.webRequest.ResourceRequest["tabId"], - requestId: chrome.webRequest.ResourceRequest["requestId"], + tabId: chrome.webRequest.WebRequestDetails["tabId"], + requestId: chrome.webRequest.WebRequestDetails["requestId"], modifyLoginData: ModifyLoginCipherFormData, ) => { const handleWebNavigationOnCompleted = async () => { chrome.webNavigation.onCompleted.removeListener(handleWebNavigationOnCompleted); const tab = await BrowserApi.getTab(tabId); - await this.triggerNotificationInit(requestId, modifyLoginData, tab); + await this.processNotifications(requestId, modifyLoginData, tab); }; chrome.webNavigation.onCompleted.addListener(handleWebNavigationOnCompleted); }; /** - * Initializes the add login or change password notification based on the modified login form data - * and the tab details. This will trigger the notification to be displayed to the user. + * This method attempts to trigger the add login, change password, or at-risk password notifications + * based on the modified login data and the tab details. * * @param requestId - The details of the web response * @param modifyLoginData - The modified login form data * @param tab - The tab details */ - private triggerNotificationInit = async ( - requestId: chrome.webRequest.ResourceRequest["requestId"], + private processNotifications = async ( + requestId: chrome.webRequest.WebRequestDetails["requestId"], modifyLoginData: ModifyLoginCipherFormData, tab: chrome.tabs.Tab, + config: { skippable: NotificationType[] } = { skippable: [] }, ) => { - let result: string; - if (this.shouldAttemptChangedPasswordNotification(modifyLoginData)) { - // These notifications are temporarily setup as "messages" to the notification background. - // This will be structured differently in a future refactor. - const success = await this.notificationBackground.triggerChangedPasswordNotification( - { - command: "bgChangedPassword", - data: { - url: modifyLoginData.uri, - currentPassword: modifyLoginData.password, - newPassword: modifyLoginData.newPassword, - }, - }, - { tab }, - ); - if (!success) { - result = "Unqualified changedPassword notification attempt."; - } - } - - if (this.shouldAttemptAddLoginNotification(modifyLoginData)) { - const success = await this.notificationBackground.triggerAddLoginNotification( - { - command: "bgTriggerAddLoginNotification", - login: { - url: modifyLoginData.uri, - username: modifyLoginData.username, - password: modifyLoginData.password || modifyLoginData.newPassword, - }, - }, - { tab }, - ); - if (!success) { - result = "Unqualified addLogin notification attempt."; - } - } - - const shouldGetTasks = - (await this.notificationBackground.getNotificationFlag()) && !modifyLoginData.newPassword; - - if (shouldGetTasks) { - const activeUserId = await firstValueFrom( - this.accountService.activeAccount$.pipe(getOptionalUserId), - ); - - if (activeUserId) { - const loginSecurityTaskInfo = await this.getSecurityTaskAndCipherForLoginData( - modifyLoginData, - activeUserId, - ); - - if (loginSecurityTaskInfo) { - await this.notificationBackground.triggerAtRiskPasswordNotification( - { - command: "bgTriggerAtRiskPasswordNotification", - data: { - activeUserId, - cipher: loginSecurityTaskInfo.cipher, - securityTask: loginSecurityTaskInfo.securityTask, - }, - }, - { tab }, - ); - } else { - result = "Unqualified atRiskPassword notification attempt."; - } - } - } - this.clearCompletedWebRequest(requestId, tab); - return result; - }; - - /** - * Determines if the change password notification should be triggered. - * - * @param modifyLoginData - The modified login form data - */ - private shouldAttemptChangedPasswordNotification = ( - modifyLoginData: ModifyLoginCipherFormData, - ) => { - return modifyLoginData?.newPassword && !modifyLoginData.username; - }; - - /** - * Determines if the add login notification should be triggered. - * - * @param modifyLoginData - The modified login form data - */ - private shouldAttemptAddLoginNotification = (modifyLoginData: ModifyLoginCipherFormData) => { - return modifyLoginData?.username && (modifyLoginData.password || modifyLoginData.newPassword); - }; - - /** - * If there is a security task for this cipher at login, return the task, cipher view, and uri. - * - * @param modifyLoginData - The modified login form data - * @param activeUserId - The currently logged in user ID - */ - private async getSecurityTaskAndCipherForLoginData( - modifyLoginData: ModifyLoginCipherFormData, - activeUserId: UserId, - ): Promise { - const tasks: SecurityTask[] = await this.notificationBackground.getSecurityTasks(activeUserId); - if (!tasks?.length) { - return null; - } - - const urlCiphers: CipherView[] = await this.cipherService.getAllDecryptedForUrl( - modifyLoginData.uri, - activeUserId, - ); - if (!urlCiphers?.length) { - return null; - } - - const securityTaskForLogin = urlCiphers.reduce( - (taskInfo: LoginSecurityTaskInfo | null, cipher: CipherView) => { - if ( - // exit early if info was found already - taskInfo || - // exit early if the cipher was deleted - cipher.deletedDate || - // exit early if the entered login info doesn't match an existing cipher - modifyLoginData.username !== cipher.login.username || - modifyLoginData.password !== cipher.login.password - ) { - return taskInfo; - } - - // Find the first security task for the cipherId belonging to the entered login - const cipherSecurityTask = tasks.find( - ({ cipherId, status }) => - cipher.id === cipherId && // match security task cipher id to url cipher id - status === SecurityTaskStatus.Pending, // security task has not been completed - ); - - if (cipherSecurityTask) { - return { securityTask: cipherSecurityTask, cipher, uri: modifyLoginData.uri }; - } - - return taskInfo; + const notificationCandidates = [ + { + type: NotificationTypes.Change, + trigger: this.notificationBackground.triggerChangedPasswordNotification, }, - null, + { + type: NotificationTypes.Add, + trigger: this.notificationBackground.triggerAddLoginNotification, + }, + { + type: NotificationTypes.AtRiskPassword, + trigger: this.notificationBackground.triggerAtRiskPasswordNotification, + }, + ].filter( + (candidate) => + this.shouldAttemptNotification(modifyLoginData, candidate.type) || + config.skippable.includes(candidate.type), ); - return securityTaskForLogin; - } + const results: string[] = []; + for (const { trigger, type } of notificationCandidates) { + const success = await trigger.bind(this.notificationBackground)(modifyLoginData, tab); + if (success) { + results.push(`Success: ${type}`); + break; + } else { + results.push(`Unqualified ${type} notification attempt.`); + } + } + + this.clearCompletedWebRequest(requestId, tab.id); + return results.join(" "); + }; + + /** + * Determines if the add login notification should be attempted based on the modified login form data. + * @param modifyLoginData modified login form data + * @param notificationType The type of notification to be triggered + * @returns true if the notification should be attempted, false otherwise + */ + private shouldAttemptNotification = ( + modifyLoginData: ModifyLoginCipherFormData, + notificationType: NotificationType, + ): boolean => { + switch (notificationType) { + case NotificationTypes.Add: + return ( + modifyLoginData?.username && !!(modifyLoginData.password || modifyLoginData.newPassword) + ); + case NotificationTypes.Change: + return !!(modifyLoginData.password || modifyLoginData.newPassword); + case NotificationTypes.AtRiskPassword: + return !modifyLoginData.newPassword; + case NotificationTypes.Unlock: + // Unlock notifications are handled separately and do not require form data + return false; + default: + this.logService.error(`Unknown notification type: ${notificationType}`); + return false; + } + }; /** * Clears the completed web request and removes the modified login form data for the tab. @@ -574,12 +479,12 @@ export class OverlayNotificationsBackground implements OverlayNotificationsBackg * @param tab - The tab details */ private clearCompletedWebRequest = ( - requestId: chrome.webRequest.ResourceRequest["requestId"], - tab: chrome.tabs.Tab, + requestId: chrome.webRequest.WebRequestDetails["requestId"], + tabId: chrome.tabs.Tab["id"], ) => { this.activeFormSubmissionRequests.delete(requestId); - this.modifyLoginCipherFormData.delete(tab.id); - this.websiteOriginsWithFields.delete(tab.id); + this.modifyLoginCipherFormData.delete(tabId); + this.websiteOriginsWithFields.delete(tabId); this.setupWebRequestsListeners(); }; @@ -589,7 +494,12 @@ export class OverlayNotificationsBackground implements OverlayNotificationsBackg * * @param details - The details of the web request */ - private requestHostIsInvalid = (details: chrome.webRequest.ResourceRequest) => { + private requestHostIsInvalid = ( + details: SetPartial< + chrome.webRequest.WebRequestDetails, + "documentId" | "documentLifecycle" | "frameType" + >, + ) => { return !details.url?.startsWith("http") || details.tabId < 0; }; @@ -650,7 +560,7 @@ export class OverlayNotificationsBackground implements OverlayNotificationsBackg * @param tabId - The id of the tab that was updated * @param changeInfo - The change info of the tab */ - private handleTabUpdated = (tabId: number, changeInfo: chrome.tabs.TabChangeInfo) => { + private handleTabUpdated = (tabId: number, changeInfo: chrome.tabs.OnUpdatedInfo) => { if (changeInfo.status !== "loading" || !changeInfo.url) { return; } diff --git a/apps/browser/src/autofill/background/overlay.background.spec.ts b/apps/browser/src/autofill/background/overlay.background.spec.ts index 92b2135c973..47a5e8fec4c 100644 --- a/apps/browser/src/autofill/background/overlay.background.spec.ts +++ b/apps/browser/src/autofill/background/overlay.background.spec.ts @@ -49,7 +49,6 @@ import { MAX_SUB_FRAME_DEPTH, RedirectFocusDirection, } from "../enums/autofill-overlay.enum"; -import { InlineMenuFormFieldData } from "../services/abstractions/autofill-overlay-content.service"; import { AutofillService } from "../services/abstractions/autofill.service"; import { InlineMenuFieldQualificationService } from "../services/inline-menu-field-qualification.service"; import { @@ -71,6 +70,7 @@ import { triggerWebRequestOnCompletedEvent, } from "../spec/testing-utils"; +import { ModifyLoginCipherFormData } from "./abstractions/overlay-notifications.background"; import { FocusedFieldData, InlineMenuPosition, @@ -156,7 +156,7 @@ describe("OverlayBackground", () => { fakeStateProvider = new FakeStateProvider(accountService); showFaviconsMock$ = new BehaviorSubject(true); neverDomainsMock$ = new BehaviorSubject({}); - domainSettingsService = new DefaultDomainSettingsService(fakeStateProvider, configService); + domainSettingsService = new DefaultDomainSettingsService(fakeStateProvider); domainSettingsService.showFavicons$ = showFaviconsMock$; domainSettingsService.neverDomains$ = neverDomainsMock$; logService = mock(); @@ -2076,7 +2076,7 @@ describe("OverlayBackground", () => { const tab = createChromeTabMock({ id: 2 }); const sender = mock({ tab, frameId: 100 }); let focusedFieldData: FocusedFieldData; - let formData: InlineMenuFormFieldData; + let formData: ModifyLoginCipherFormData; beforeEach(async () => { await initOverlayElementPorts(); @@ -3371,7 +3371,7 @@ describe("OverlayBackground", () => { }); await flushPromises(); triggerWebRequestOnCompletedEvent( - mock({ + mock({ statusCode: 401, }), ); @@ -3389,8 +3389,9 @@ describe("OverlayBackground", () => { usePasskey: true, portKey, }); + await flushPromises(); triggerWebRequestOnCompletedEvent( - mock({ + mock({ statusCode: 200, }), ); @@ -3651,6 +3652,18 @@ describe("OverlayBackground", () => { }); }); + it("sends a message to the tab to store modify login change when a password is generated", async () => { + jest.useFakeTimers(); + + sendPortMessage(listMessageConnectorSpy, { command: "fillGeneratedPassword", portKey }); + + await flushPromises(); + jest.advanceTimersByTime(400); + await flushPromises(); + + expect(tabsSendMessageSpy.mock.lastCall[1].command).toBe("generatedPasswordModifyLogin"); + }); + it("filters the page details to only include the new password fields before filling", async () => { sendPortMessage(listMessageConnectorSpy, { command: "fillGeneratedPassword", portKey }); await flushPromises(); @@ -3663,31 +3676,6 @@ describe("OverlayBackground", () => { allowTotpAutofill: false, }); }); - - it("opens the inline menu for fields that fill a generated password", async () => { - jest.useFakeTimers(); - const formData = { - uri: "https://example.com", - username: "username", - password: "password", - newPassword: "newPassword", - }; - tabsSendMessageSpy.mockImplementation((_tab, message) => { - if (message.command === "getInlineMenuFormFieldData") { - return Promise.resolve(formData); - } - - return Promise.resolve(); - }); - const openInlineMenuSpy = jest.spyOn(overlayBackground as any, "openInlineMenu"); - - sendPortMessage(listMessageConnectorSpy, { command: "fillGeneratedPassword", portKey }); - await flushPromises(); - jest.advanceTimersByTime(400); - await flushPromises(); - - expect(openInlineMenuSpy).toHaveBeenCalled(); - }); }); }); diff --git a/apps/browser/src/autofill/background/overlay.background.ts b/apps/browser/src/autofill/background/overlay.background.ts index 1f249454393..35585d58863 100644 --- a/apps/browser/src/autofill/background/overlay.background.ts +++ b/apps/browser/src/autofill/background/overlay.background.ts @@ -69,7 +69,6 @@ import { MAX_SUB_FRAME_DEPTH, } from "../enums/autofill-overlay.enum"; import AutofillField from "../models/autofill-field"; -import { InlineMenuFormFieldData } from "../services/abstractions/autofill-overlay-content.service"; import { AutofillService, PageDetail } from "../services/abstractions/autofill.service"; import { InlineMenuFieldQualificationService } from "../services/abstractions/inline-menu-field-qualifications.service"; import { @@ -82,6 +81,7 @@ import { } from "../utils"; import { LockedVaultPendingNotificationsData } from "./abstractions/notification.background"; +import { ModifyLoginCipherFormData } from "./abstractions/overlay-notifications.background"; import { BuildCipherDataParams, CloseInlineMenuMessage, @@ -191,6 +191,7 @@ export class OverlayBackground implements OverlayBackgroundInterface { editedCipher: () => this.updateOverlayCiphers(), deletedCipher: () => this.updateOverlayCiphers(), bgSaveCipher: () => this.updateOverlayCiphers(), + updateOverlayCiphers: () => this.updateOverlayCiphers(), fido2AbortRequest: ({ sender }) => this.abortFido2ActiveRequest(sender.tab.id), }; private readonly inlineMenuButtonPortMessageHandlers: InlineMenuButtonPortMessageHandlers = { @@ -1126,11 +1127,16 @@ export class OverlayBackground implements OverlayBackgroundInterface { { inlineMenuCipherId, usePasskey }: OverlayPortMessage, { sender }: chrome.runtime.Port, ) { + await BrowserApi.tabSendMessage( + sender.tab, + { command: "collectPageDetails" }, + { frameId: this.focusedFieldData?.frameId }, + ); + const pageDetailsForTab = this.pageDetailsForTab[sender.tab.id]; if (!inlineMenuCipherId || !pageDetailsForTab?.size) { return; } - const cipher = this.inlineMenuCiphers.get(inlineMenuCipherId); if (usePasskey && cipher.login?.hasFido2Credentials) { await this.authenticatePasskeyCredential( @@ -1169,6 +1175,7 @@ export class OverlayBackground implements OverlayBackgroundInterface { pageDetails, fillNewPassword: true, allowTotpAutofill: true, + focusedFieldForm: this.focusedFieldData?.focusedFieldForm, }); if (totpCode) { @@ -1231,7 +1238,7 @@ export class OverlayBackground implements OverlayBackgroundInterface { * @param details - The web request details */ private handlePasskeyAuthenticationOnCompleted = ( - details: chrome.webRequest.WebResponseCacheDetails, + details: chrome.webRequest.OnCompletedDetails, ) => { chrome.webRequest.onCompleted.removeListener(this.handlePasskeyAuthenticationOnCompleted); @@ -1812,7 +1819,7 @@ export class OverlayBackground implements OverlayBackgroundInterface { /** * Triggers a fill of the generated password into the current tab. Will trigger - * a focus of the last focused field after filling the password. + * a focus of the last focused field after filling the password. * * @param port - The port of the sender */ @@ -1853,12 +1860,19 @@ export class OverlayBackground implements OverlayBackgroundInterface { pageDetails, fillNewPassword: true, allowTotpAutofill: false, + focusedFieldForm: this.focusedFieldData?.focusedFieldForm, }); globalThis.setTimeout(async () => { - if (await this.shouldShowSaveLoginInlineMenuList(port.sender.tab)) { - await this.openInlineMenu(port.sender, true); - } + await BrowserApi.tabSendMessage( + port.sender.tab, + { + command: "generatedPasswordModifyLogin", + }, + { + frameId: this.focusedFieldData.frameId || 0, + }, + ); }, 300); } @@ -1890,7 +1904,9 @@ export class OverlayBackground implements OverlayBackgroundInterface { * * @param tab - The tab to get the form field data from */ - private async getInlineMenuFormFieldData(tab: chrome.tabs.Tab): Promise { + private async getInlineMenuFormFieldData( + tab: chrome.tabs.Tab, + ): Promise { return await BrowserApi.tabSendMessage( tab, { @@ -2093,7 +2109,7 @@ export class OverlayBackground implements OverlayBackgroundInterface { "addToLockedVaultPendingNotifications", retryMessage, ); - await this.openUnlockPopout(sender.tab, true); + await this.openUnlockPopout(sender.tab); } /** diff --git a/apps/browser/src/autofill/background/tabs.background.ts b/apps/browser/src/autofill/background/tabs.background.ts index 4d520680980..b76997c0ae9 100644 --- a/apps/browser/src/autofill/background/tabs.background.ts +++ b/apps/browser/src/autofill/background/tabs.background.ts @@ -20,10 +20,8 @@ export default class TabsBackground { return; } - // FIXME: Verify that this floating promise is intentional. If it is, add an explanatory comment and ensure there is proper error handling. - // eslint-disable-next-line @typescript-eslint/no-floating-promises - this.updateCurrentTabData(); - this.setupTabEventListeners(); + void this.updateCurrentTabData(); + void this.setupTabEventListeners(); } /** @@ -83,7 +81,7 @@ export default class TabsBackground { */ private handleTabOnUpdated = async ( tabId: number, - changeInfo: chrome.tabs.TabChangeInfo, + changeInfo: chrome.tabs.OnUpdatedInfo, tab: chrome.tabs.Tab, ) => { if (this.focusedWindowId > 0 && tab.windowId !== this.focusedWindowId) { diff --git a/apps/browser/src/autofill/background/web-request.background.ts b/apps/browser/src/autofill/background/web-request.background.ts index 22e10a3dd0a..5c02f2df34d 100644 --- a/apps/browser/src/autofill/background/web-request.background.ts +++ b/apps/browser/src/autofill/background/web-request.background.ts @@ -26,7 +26,10 @@ export default class WebRequestBackground { startListening() { this.webRequest.onAuthRequired.addListener( - async (details, callback) => { + (async ( + details: chrome.webRequest.OnAuthRequiredDetails, + callback: (response: chrome.webRequest.BlockingResponse) => void, + ) => { if (!details.url || this.pendingAuthRequests.has(details.requestId)) { if (callback) { callback(null); @@ -42,7 +45,7 @@ export default class WebRequestBackground { } else { await this.resolveAuthCredentials(details.url, callback, callback); } - }, + }) as any, { urls: ["http://*/*", "https://*/*"] }, [this.isFirefox ? "blocking" : "asyncBlocking"], ); @@ -50,16 +53,17 @@ export default class WebRequestBackground { this.webRequest.onCompleted.addListener((details) => this.completeAuthRequest(details), { urls: ["http://*/*"], }); - this.webRequest.onErrorOccurred.addListener( - (details: any) => this.completeAuthRequest(details), - { - urls: ["http://*/*"], - }, - ); + this.webRequest.onErrorOccurred.addListener((details) => this.completeAuthRequest(details), { + urls: ["http://*/*"], + }); } - // eslint-disable-next-line - private async resolveAuthCredentials(domain: string, success: Function, error: Function) { + private async resolveAuthCredentials( + domain: string, + success: (response: chrome.webRequest.BlockingResponse) => void, + // eslint-disable-next-line + error: Function, + ) { const activeUserId = await firstValueFrom( this.accountService.activeAccount$.pipe(getOptionalUserId), ); @@ -97,7 +101,7 @@ export default class WebRequestBackground { } } - private completeAuthRequest(details: chrome.webRequest.WebResponseCacheDetails) { + private completeAuthRequest(details: chrome.webRequest.WebRequestDetails) { this.pendingAuthRequests.delete(details.requestId); } } diff --git a/apps/browser/src/autofill/browser/main-context-menu-handler.spec.ts b/apps/browser/src/autofill/browser/main-context-menu-handler.spec.ts index 901d6595fc8..1348928b7e9 100644 --- a/apps/browser/src/autofill/browser/main-context-menu-handler.spec.ts +++ b/apps/browser/src/autofill/browser/main-context-menu-handler.spec.ts @@ -2,6 +2,7 @@ import { mock, MockProxy } from "jest-mock-extended"; import { BehaviorSubject, of } from "rxjs"; import { AccountService } from "@bitwarden/common/auth/abstractions/account.service"; +import { TokenService } from "@bitwarden/common/auth/abstractions/token.service"; import { AUTOFILL_CARD_ID, AUTOFILL_ID, @@ -17,7 +18,6 @@ import { AutofillSettingsServiceAbstraction } from "@bitwarden/common/autofill/s import { BillingAccountProfileStateService } from "@bitwarden/common/billing/abstractions/account/billing-account-profile-state.service"; import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; import { LogService } from "@bitwarden/common/platform/abstractions/log.service"; -import { StateService } from "@bitwarden/common/platform/abstractions/state.service"; import { UserId } from "@bitwarden/common/types/guid"; import { CipherType } from "@bitwarden/common/vault/enums"; import { Cipher } from "@bitwarden/common/vault/models/domain/cipher"; @@ -67,7 +67,7 @@ const createCipher = (data?: { }; describe("context-menu", () => { - let stateService: MockProxy; + let tokenService: MockProxy; let autofillSettingsService: MockProxy; let i18nService: MockProxy; let logService: MockProxy; @@ -85,7 +85,7 @@ describe("context-menu", () => { let sut: MainContextMenuHandler; beforeEach(() => { - stateService = mock(); + tokenService = mock(); autofillSettingsService = mock(); i18nService = mock(); logService = mock(); @@ -109,7 +109,7 @@ describe("context-menu", () => { i18nService.t.mockImplementation((key) => key); sut = new MainContextMenuHandler( - stateService, + tokenService, autofillSettingsService, i18nService, logService, @@ -276,7 +276,7 @@ describe("context-menu", () => { it("removes menu items that require code injection", async () => { billingAccountProfileStateService.hasPremiumFromAnySource$.mockReturnValue(of(true)); autofillSettingsService.enableContextMenu$ = of(true); - stateService.getIsAuthenticated.mockResolvedValue(true); + tokenService.hasAccessToken$.mockReturnValue(of(true)); const optionId = "1"; await sut.loadOptions("TEST_TITLE", optionId, createCipher()); @@ -317,7 +317,7 @@ describe("context-menu", () => { }); it("Loads context menu items that ask the user to unlock their vault if they are authed", async () => { - stateService.getIsAuthenticated.mockResolvedValue(true); + tokenService.hasAccessToken$.mockReturnValue(of(true)); await sut.noAccess(); @@ -325,7 +325,7 @@ describe("context-menu", () => { }); it("Loads context menu items that ask the user to login to their vault if they are not authed", async () => { - stateService.getIsAuthenticated.mockResolvedValue(false); + tokenService.hasAccessToken$.mockReturnValue(of(false)); await sut.noAccess(); 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 abfa2465c51..00ff55f5517 100644 --- a/apps/browser/src/autofill/browser/main-context-menu-handler.ts +++ b/apps/browser/src/autofill/browser/main-context-menu-handler.ts @@ -1,8 +1,9 @@ // FIXME: Update this file to be type safe and remove this and next line // @ts-strict-ignore -import { firstValueFrom } from "rxjs"; +import { firstValueFrom, map } from "rxjs"; import { AccountService } from "@bitwarden/common/auth/abstractions/account.service"; +import { TokenService } from "@bitwarden/common/auth/abstractions/token.service"; import { AUTOFILL_CARD_ID, AUTOFILL_ID, @@ -23,7 +24,6 @@ import { AutofillSettingsServiceAbstraction } from "@bitwarden/common/autofill/s import { BillingAccountProfileStateService } from "@bitwarden/common/billing/abstractions/account/billing-account-profile-state.service"; import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; import { LogService } from "@bitwarden/common/platform/abstractions/log.service"; -import { StateService } from "@bitwarden/common/platform/abstractions/state.service"; import { Utils } from "@bitwarden/common/platform/misc/utils"; import { CipherType } from "@bitwarden/common/vault/enums/cipher-type"; import { CipherView } from "@bitwarden/common/vault/models/view/cipher.view"; @@ -152,7 +152,7 @@ export class MainContextMenuHandler { ]; constructor( - private stateService: StateService, + private tokenService: TokenService, private autofillSettingsService: AutofillSettingsServiceAbstraction, private i18nService: I18nService, private logService: LogService, @@ -343,7 +343,11 @@ export class MainContextMenuHandler { async noAccess() { if (await this.init()) { - const authed = await this.stateService.getIsAuthenticated(); + const userId = await firstValueFrom( + this.accountService.activeAccount$.pipe(map((a) => a?.id)), + ); + const authed = + userId != null && (await firstValueFrom(this.tokenService.hasAccessToken$(userId))); this.loadOptions( this.i18nService.t(authed ? "unlockVaultMenu" : "loginToVaultMenu"), NOOP_COMMAND_SUFFIX, diff --git a/apps/browser/src/autofill/content/autofill-init.ts b/apps/browser/src/autofill/content/autofill-init.ts index 8f69937ac60..b6fc6c3392e 100644 --- a/apps/browser/src/autofill/content/autofill-init.ts +++ b/apps/browser/src/autofill/content/autofill-init.ts @@ -1,5 +1,3 @@ -// FIXME: Update this file to be type safe and remove this and next line -// @ts-strict-ignore import { EVENTS } from "@bitwarden/common/autofill/constants"; import AutofillPageDetails from "../models/autofill-page-details"; @@ -122,7 +120,7 @@ class AutofillInit implements AutofillInitInterface { * @param {AutofillExtensionMessage} message */ private async fillForm({ fillScript, pageDetailsUrl }: AutofillExtensionMessage) { - if ((document.defaultView || window).location.href !== pageDetailsUrl) { + if ((document.defaultView || window).location.href !== pageDetailsUrl || !fillScript) { return; } @@ -177,7 +175,7 @@ class AutofillInit implements AutofillInitInterface { message: AutofillExtensionMessage, sender: chrome.runtime.MessageSender, sendResponse: (response?: any) => void, - ): boolean => { + ): boolean | null => { const command: string = message.command; const handler: CallableFunction | undefined = this.getExtensionMessageHandler(command); if (!handler) { diff --git a/apps/browser/src/autofill/content/autofiller.ts b/apps/browser/src/autofill/content/autofiller.ts index c7a742f1fe1..bc9fd0bb05f 100644 --- a/apps/browser/src/autofill/content/autofiller.ts +++ b/apps/browser/src/autofill/content/autofiller.ts @@ -1,5 +1,3 @@ -// FIXME: Update this file to be type safe and remove this and next line -// @ts-strict-ignore import { setupExtensionDisconnectAction } from "../utils"; if (document.readyState === "loading") { @@ -9,7 +7,7 @@ if (document.readyState === "loading") { } function loadAutofiller() { - let pageHref: string = null; + let pageHref: null | string = null; let filledThisHref = false; let delayFillTimeout: number; let doFillInterval: number | NodeJS.Timeout; @@ -51,9 +49,7 @@ function loadAutofiller() { sender: "autofiller", }; - // FIXME: Verify that this floating promise is intentional. If it is, add an explanatory comment and ensure there is proper error handling. - // eslint-disable-next-line @typescript-eslint/no-floating-promises - chrome.runtime.sendMessage(msg); + void chrome.runtime.sendMessage(msg); } } diff --git a/apps/browser/src/autofill/content/bootstrap-autofill-overlay-menu.ts b/apps/browser/src/autofill/content/bootstrap-autofill-overlay-menu.ts index 605ffff0fec..40e32843fd4 100644 --- a/apps/browser/src/autofill/content/bootstrap-autofill-overlay-menu.ts +++ b/apps/browser/src/autofill/content/bootstrap-autofill-overlay-menu.ts @@ -1,5 +1,3 @@ -// FIXME: Update this file to be type safe and remove this and next line -// @ts-strict-ignore import { AutofillInlineMenuContentService } from "../overlay/inline-menu/content/autofill-inline-menu-content.service"; import { AutofillOverlayContentService } from "../services/autofill-overlay-content.service"; import DomElementVisibilityService from "../services/dom-element-visibility.service"; @@ -11,7 +9,7 @@ import AutofillInit from "./autofill-init"; (function (windowContext) { if (!windowContext.bitwardenAutofillInit) { - let inlineMenuContentService: AutofillInlineMenuContentService; + let inlineMenuContentService: undefined | AutofillInlineMenuContentService; if (globalThis.self === globalThis.top) { inlineMenuContentService = new AutofillInlineMenuContentService(); } diff --git a/apps/browser/src/autofill/content/bootstrap-autofill-overlay-notifications.ts b/apps/browser/src/autofill/content/bootstrap-autofill-overlay-notifications.ts index 495ae0e22db..8a079fa26c8 100644 --- a/apps/browser/src/autofill/content/bootstrap-autofill-overlay-notifications.ts +++ b/apps/browser/src/autofill/content/bootstrap-autofill-overlay-notifications.ts @@ -1,5 +1,3 @@ -// FIXME: Update this file to be type safe and remove this and next line -// @ts-strict-ignore import { OverlayNotificationsContentService } from "../overlay/notifications/content/overlay-notifications-content.service"; import { AutofillOverlayContentService } from "../services/autofill-overlay-content.service"; import DomElementVisibilityService from "../services/dom-element-visibility.service"; @@ -20,7 +18,7 @@ import AutofillInit from "./autofill-init"; inlineMenuFieldQualificationService, ); - let overlayNotificationsContentService: OverlayNotificationsContentService; + let overlayNotificationsContentService: undefined | OverlayNotificationsContentService; if (globalThis.self === globalThis.top) { overlayNotificationsContentService = new OverlayNotificationsContentService(); } @@ -29,7 +27,7 @@ import AutofillInit from "./autofill-init"; domQueryService, domElementVisibilityService, autofillOverlayContentService, - null, + undefined, overlayNotificationsContentService, ); setupAutofillInitDisconnectAction(windowContext); diff --git a/apps/browser/src/autofill/content/bootstrap-autofill-overlay.ts b/apps/browser/src/autofill/content/bootstrap-autofill-overlay.ts index 1777b135fe9..d204362ee25 100644 --- a/apps/browser/src/autofill/content/bootstrap-autofill-overlay.ts +++ b/apps/browser/src/autofill/content/bootstrap-autofill-overlay.ts @@ -1,5 +1,3 @@ -// FIXME: Update this file to be type safe and remove this and next line -// @ts-strict-ignore import { AutofillInlineMenuContentService } from "../overlay/inline-menu/content/autofill-inline-menu-content.service"; import { OverlayNotificationsContentService } from "../overlay/notifications/content/overlay-notifications-content.service"; import { AutofillOverlayContentService } from "../services/autofill-overlay-content.service"; @@ -12,8 +10,8 @@ import AutofillInit from "./autofill-init"; (function (windowContext) { if (!windowContext.bitwardenAutofillInit) { - let inlineMenuContentService: AutofillInlineMenuContentService; - let overlayNotificationsContentService: OverlayNotificationsContentService; + let inlineMenuContentService: undefined | AutofillInlineMenuContentService; + let overlayNotificationsContentService: undefined | OverlayNotificationsContentService; if (globalThis.self === globalThis.top) { inlineMenuContentService = new AutofillInlineMenuContentService(); overlayNotificationsContentService = new OverlayNotificationsContentService(); diff --git a/apps/browser/src/autofill/content/components/.lit-storybook/main.ts b/apps/browser/src/autofill/content/components/.lit-storybook/main.ts index a316d8f5baa..53c06264672 100644 --- a/apps/browser/src/autofill/content/components/.lit-storybook/main.ts +++ b/apps/browser/src/autofill/content/components/.lit-storybook/main.ts @@ -1,9 +1,16 @@ -import path, { dirname, join } from "path"; +import { createRequire } from "module"; +import { dirname, join, resolve } from "path"; +import { fileURLToPath } from "url"; import type { StorybookConfig } from "@storybook/web-components-webpack5"; import remarkGfm from "remark-gfm"; import TsconfigPathsPlugin from "tsconfig-paths-webpack-plugin"; +const currentFile = fileURLToPath(import.meta.url); +const currentDirectory = dirname(currentFile); + +const require = createRequire(import.meta.url); + const getAbsolutePath = (value: string): string => dirname(require.resolve(join(value, "package.json"))); @@ -43,7 +50,7 @@ const config: StorybookConfig = { if (config.resolve) { config.resolve.plugins = [ new TsconfigPathsPlugin({ - configFile: path.resolve(__dirname, "../../../../../tsconfig.json"), + configFile: resolve(currentDirectory, "../../../../../tsconfig.json"), }), ] as any; } diff --git a/apps/browser/src/autofill/content/components/buttons/action-button.ts b/apps/browser/src/autofill/content/components/buttons/action-button.ts index 339b628875c..b43bed7f96b 100644 --- a/apps/browser/src/autofill/content/components/buttons/action-button.ts +++ b/apps/browser/src/autofill/content/components/buttons/action-button.ts @@ -8,6 +8,7 @@ import { Spinner } from "../icons"; export type ActionButtonProps = { buttonText: string | TemplateResult; + dataTestId?: string; disabled?: boolean; isLoading?: boolean; theme: Theme; @@ -17,6 +18,7 @@ export type ActionButtonProps = { export function ActionButton({ buttonText, + dataTestId, disabled = false, isLoading = false, theme, @@ -32,6 +34,7 @@ export function ActionButton({ return html`